From a1429fdf0e702ebe49418e6cfb67dc1ec73add7c Mon Sep 17 00:00:00 2001 From: Martin Iturbide Date: Mon, 1 Apr 2013 12:24:20 -0500 Subject: [PATCH] Original Source Code. --- answer/obj.unx/answer.o | Bin 0 -> 20112 bytes answer/obj.win/answer.obj | Bin 0 -> 25941 bytes answer/source/answer.c | 896 +++ answer/source/answer.h | 22 + capitel/obj.unx/capitel.o | Bin 0 -> 4408 bytes capitel/source.os2/BMPICO/ACTION0.ICO | Bin 0 -> 362 bytes capitel/source.os2/BMPICO/ACTION1.ICO | Bin 0 -> 362 bytes capitel/source.os2/BMPICO/ACTIONS.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/ADD.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/CALL0.ICO | Bin 0 -> 896 bytes capitel/source.os2/BMPICO/CALL1.ICO | Bin 0 -> 896 bytes capitel/source.os2/BMPICO/CALL2.ICO | Bin 0 -> 896 bytes capitel/source.os2/BMPICO/CALL3.ICO | Bin 0 -> 896 bytes capitel/source.os2/BMPICO/CALLER0.ICO | Bin 0 -> 362 bytes capitel/source.os2/BMPICO/CALLER1.ICO | Bin 0 -> 362 bytes capitel/source.os2/BMPICO/CAPITEL.ICO | Bin 0 -> 3344 bytes capitel/source.os2/BMPICO/DELETE.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/DISABLE.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/OLDBMP.ZIP | Bin 0 -> 5202 bytes capitel/source.os2/BMPICO/PEOPLE.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/PLAY.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/PLAYALL.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/PORT0.ICO | Bin 0 -> 362 bytes capitel/source.os2/BMPICO/PORT1.ICO | Bin 0 -> 362 bytes capitel/source.os2/BMPICO/PORTS.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/ROTGRUEN.ZIP | Bin 0 -> 639 bytes capitel/source.os2/BMPICO/SETUP.BMP | Bin 0 -> 290 bytes capitel/source.os2/BMPICO/file_button.bmp | Bin 0 -> 186 bytes capitel/source.os2/CAPITEL.H | 119 + capitel/source.os2/CAPITEL.RC | 532 ++ capitel/source.os2/CNTR.C | 185 + capitel/source.os2/CNTR.H | 25 + capitel/source.os2/CONFIG.C | 3011 ++++++++++ capitel/source.os2/CONFIG.H | 64 + capitel/source.os2/CONFIGEX.H | 5 + capitel/source.os2/CONFIGRC.H | 105 + capitel/source.os2/CTELOS2A.DEF | 7 + capitel/source.os2/CTELOS2C.DEF | 7 + capitel/source.os2/CTELOS2E.LNK | 3 + capitel/source.os2/CTELOS2G.LNK | 3 + capitel/source.os2/CTELOS2T.LNK | 3 + capitel/source.os2/DDE4.MSG | Bin 0 -> 9507 bytes capitel/source.os2/LOADMCI.C | 50 + capitel/source.os2/LOADMCI.H | 8 + capitel/source.os2/REGIST.C | 62 + capitel/source.os2/REGIST.H | 4 + capitel/source.os2/STATBAR.C | 79 + capitel/source.os2/STATBAR.H | 8 + capitel/source.os2/SYSFILE.C | 122 + capitel/source.os2/SYSFILE.H | 2 + capitel/source.os2/TEXTE.H | 495 ++ capitel/source.os2/TOOLBAR.C | 214 + capitel/source.os2/TOOLBAR.H | 28 + capitel/source.os2/capitel.c | 1714 ++++++ capitel/source.win/ACTION0.ICO | Bin 0 -> 1078 bytes capitel/source.win/ACTION1.ICO | Bin 0 -> 1078 bytes capitel/source.win/CALL0.ICO | Bin 0 -> 318 bytes capitel/source.win/CALL1.ICO | Bin 0 -> 318 bytes capitel/source.win/CALL2.ICO | Bin 0 -> 318 bytes capitel/source.win/CALL3.ICO | Bin 0 -> 318 bytes capitel/source.win/CALLER0.ICO | Bin 0 -> 1078 bytes capitel/source.win/CALLER1.ICO | Bin 0 -> 1078 bytes capitel/source.win/CAPITEL.H | 224 + capitel/source.win/CAPITEL.ICO | Bin 0 -> 1078 bytes capitel/source.win/CAPITEL.RC | 40 + capitel/source.win/DANISH.RC | 522 ++ capitel/source.win/DUTCH.RC | 529 ++ capitel/source.win/ENGLISH.RC | 588 ++ capitel/source.win/FRENCH.RC | 526 ++ capitel/source.win/Finnish.rc | 529 ++ capitel/source.win/GERMAN.RC | 579 ++ capitel/source.win/Hungary.rc | 608 ++ capitel/source.win/ITALIAN.RC | 521 ++ capitel/source.win/NORWEG.RC | 536 ++ capitel/source.win/NYNORSK.RC | 525 ++ capitel/source.win/PORT0.ICO | Bin 0 -> 1078 bytes capitel/source.win/PORT1.ICO | Bin 0 -> 1078 bytes capitel/source.win/SPANISH.RC | 527 ++ capitel/source.win/TOOLBAR.BMP | Bin 0 -> 1680 bytes capitel/source.win/TRAY_LRG.BMP | Bin 0 -> 868 bytes capitel/source.win/TRAY_SML.BMP | Bin 0 -> 758 bytes capitel/source.win/capitel.c | 5174 ++++++++++++++++ capitel/source.win/selfx.rc | 9 + capitel/source.win/setup.rc | 39 + capitel/source.win/toggle.txt | 36 + capitel/source/capitel.c | 160 + common/source/global.h | 288 + common/source/texte.h | 37 + common/source/version.h | 18 + distrib/GENKEY/GENKEY.C | 188 + distrib/GENKEY/MAKEFILE | 12 + distrib/SETUP.OS2/FILE_ID.DIZ | 4 + distrib/SETUP.OS2/INSTALL.CMD | 99 + distrib/SETUP.WIN/file_id.diz | 4 + distrib/SETUP.WIN/setup.inf | 97 + distrib/TEXT/ANN.TXT | 65 + distrib/TEXT/CAPITEL.TXT | 183 + distrib/TEXT/COLL.TXT | 38 + distrib/TEXT/HOBBES.TXT | 14 + distrib/TEXT/LEO.TXT | 14 + distrib/TEXT/MLIST.TXT | 52 + distrib/TEXT/TEAMCOLL.TXT | 39 + distrib/TEXT/TODO | 21 + distrib/TEXT/Y.DAT | 3 + distrib/TEXT/ctel-mlist.txt | 27 + distrib/setup.all/capitel.act | 72 + distrib/setup.all/capitel.cfg | 789 +++ distrib/setup.all/capitel.nam | 17 + distrib/setup.all/capitel.num | 5572 ++++++++++++++++++ distrib/setup.all/capitel.prt | 14 + distrib/setup.all/china.num | 629 ++ distrib/setup.all/ita.num | 474 ++ distrib/setup.all/leame.txt | 320 + distrib/setup.all/licence.txt | 103 + distrib/setup.all/liesmich.txt | 374 ++ distrib/setup.all/lizenz.txt | 157 + distrib/setup.all/neues.txt | 439 ++ distrib/setup.all/nl.num | 371 ++ distrib/setup.all/order.txt | 1 + distrib/setup.all/orderbmt.txt | 1 + distrib/setup.all/pt.num | 129 + distrib/setup.all/readme.txt | 341 ++ distrib/setup.all/ringing.wav | Bin 0 -> 10026 bytes distrib/setup.all/swiss.num | 244 + distrib/setup.all/uk.num | 733 +++ distrib/setup.all/welcome.wav | Bin 0 -> 105186 bytes distrib/setup.all/whatsnew.txt | 442 ++ isdn/obj.unx/isdnc20.o | Bin 0 -> 20736 bytes isdn/obj.unx/isdncapi.o | Bin 0 -> 4480 bytes isdn/obj.win/isdncapi.obj | Bin 0 -> 4510 bytes isdn/obj.win/isdnwc20.obj | Bin 0 -> 29634 bytes isdn/source.os2/isdnmsg1.h | 269 + isdn/source.os2/isdnoc11.c | 1130 ++++ isdn/source.os2/loadoc11.c | 80 + isdn/source.os2/loadoc20.c | 77 + isdn/source/isdn.h | 79 + isdn/source/isdnc20.c | 1357 +++++ isdn/source/isdncapi.c | 247 + serial/OBJ.WIN/serial.obj | Bin 0 -> 10127 bytes serial/SOURCE/SERIAL.C | 338 ++ setup/obj.win/selfx.lib | Bin 0 -> 14150 bytes setup/obj.win/selfx.obj | Bin 0 -> 13117 bytes setup/obj.win/setup.lib | Bin 0 -> 65350 bytes setup/obj.win/setup.obj | Bin 0 -> 62000 bytes setup/source.win/avi/copy.avi | Bin 0 -> 16384 bytes setup/source.win/bmp/sellist.bmp | Bin 0 -> 9172 bytes setup/source.win/bmp/wizard1.bmp | Bin 0 -> 7658 bytes setup/source.win/bmp/wizard2.bmp | Bin 0 -> 1490 bytes setup/source.win/bmp/wizard2.bmp.org | Bin 0 -> 1180 bytes setup/source.win/fdi.h | 1070 ++++ setup/source.win/ico/setup1.ico | Bin 0 -> 4846 bytes setup/source.win/ico/sfx1.ico | Bin 0 -> 1078 bytes setup/source.win/m.bat | 1 + setup/source.win/makefile | 44 + setup/source.win/misc/cfgmgr32.dll | Bin 0 -> 23552 bytes setup/source.win/misc/dll_kolja/setupapi.dll | Bin 0 -> 338192 bytes setup/source.win/misc/dll_w2000/SETUPAPI.DLL | Bin 0 -> 566032 bytes setup/source.win/misc/setupapi.dll | Bin 0 -> 338192 bytes setup/source.win/selfx.c | 769 +++ setup/source.win/selfx.h | 23 + setup/source.win/selfx.rc | 515 ++ setup/source.win/setup.c | 3623 ++++++++++++ setup/source.win/setup.h | 66 + setup/source.win/setup.rc | 2564 ++++++++ util/obj.unx/dosstart.o | Bin 0 -> 686 bytes util/obj.unx/dtmf.o | Bin 0 -> 3420 bytes util/obj.unx/register.o | Bin 0 -> 3640 bytes util/obj.unx/silence.o | Bin 0 -> 1396 bytes util/obj.unx/vorwahl.o | Bin 0 -> 1684 bytes util/obj.win/dosstart.obj | Bin 0 -> 768 bytes util/obj.win/dtmf.obj | Bin 0 -> 3715 bytes util/obj.win/register.obj | Bin 0 -> 4854 bytes util/obj.win/silence.obj | Bin 0 -> 1367 bytes util/obj.win/vorwahl.obj | Bin 0 -> 1791 bytes util/source.os2/capi.h | 22 + util/source.os2/dosstart.c | 62 + util/source.unx/dosstart.c | 7 + util/source.win/dosstart.c | 43 + util/source/dosstart.h | 2 + util/source/dtmf.c | 194 + util/source/dtmf.h | 4 + util/source/register.c | 183 + util/source/register.h | 10 + util/source/silence.c | 45 + util/source/silence.h | 3 + util/source/vorwahl.c | 49 + util/source/vorwahl.h | 2 + wave/obj.unx/alw2wav.o | Bin 0 -> 3468 bytes wave/obj.unx/wav2alw.o | Bin 0 -> 10248 bytes wave/obj.win/alw2wav.obj | Bin 0 -> 3509 bytes wave/obj.win/wav2alw.obj | Bin 0 -> 14392 bytes wave/source.os2/WAV2ALW.C | 830 +++ wave/source/alw2wav.c | 256 + wave/source/alw2wav.h | 1 + wave/source/backups/wav2alw.c~0 | 882 +++ wave/source/backups/wav2alw.c~1 | 882 +++ wave/source/wav2alw.c | 882 +++ wave/source/wav2alw.h | 4 + 198 files changed, 48485 insertions(+) create mode 100644 answer/obj.unx/answer.o create mode 100644 answer/obj.win/answer.obj create mode 100644 answer/source/answer.c create mode 100644 answer/source/answer.h create mode 100644 capitel/obj.unx/capitel.o create mode 100644 capitel/source.os2/BMPICO/ACTION0.ICO create mode 100644 capitel/source.os2/BMPICO/ACTION1.ICO create mode 100644 capitel/source.os2/BMPICO/ACTIONS.BMP create mode 100644 capitel/source.os2/BMPICO/ADD.BMP create mode 100644 capitel/source.os2/BMPICO/CALL0.ICO create mode 100644 capitel/source.os2/BMPICO/CALL1.ICO create mode 100644 capitel/source.os2/BMPICO/CALL2.ICO create mode 100644 capitel/source.os2/BMPICO/CALL3.ICO create mode 100644 capitel/source.os2/BMPICO/CALLER0.ICO create mode 100644 capitel/source.os2/BMPICO/CALLER1.ICO create mode 100644 capitel/source.os2/BMPICO/CAPITEL.ICO create mode 100644 capitel/source.os2/BMPICO/DELETE.BMP create mode 100644 capitel/source.os2/BMPICO/DISABLE.BMP create mode 100644 capitel/source.os2/BMPICO/OLDBMP.ZIP create mode 100644 capitel/source.os2/BMPICO/PEOPLE.BMP create mode 100644 capitel/source.os2/BMPICO/PLAY.BMP create mode 100644 capitel/source.os2/BMPICO/PLAYALL.BMP create mode 100644 capitel/source.os2/BMPICO/PORT0.ICO create mode 100644 capitel/source.os2/BMPICO/PORT1.ICO create mode 100644 capitel/source.os2/BMPICO/PORTS.BMP create mode 100644 capitel/source.os2/BMPICO/ROTGRUEN.ZIP create mode 100644 capitel/source.os2/BMPICO/SETUP.BMP create mode 100644 capitel/source.os2/BMPICO/file_button.bmp create mode 100644 capitel/source.os2/CAPITEL.H create mode 100644 capitel/source.os2/CAPITEL.RC create mode 100644 capitel/source.os2/CNTR.C create mode 100644 capitel/source.os2/CNTR.H create mode 100644 capitel/source.os2/CONFIG.C create mode 100644 capitel/source.os2/CONFIG.H create mode 100644 capitel/source.os2/CONFIGEX.H create mode 100644 capitel/source.os2/CONFIGRC.H create mode 100644 capitel/source.os2/CTELOS2A.DEF create mode 100644 capitel/source.os2/CTELOS2C.DEF create mode 100644 capitel/source.os2/CTELOS2E.LNK create mode 100644 capitel/source.os2/CTELOS2G.LNK create mode 100644 capitel/source.os2/CTELOS2T.LNK create mode 100644 capitel/source.os2/DDE4.MSG create mode 100644 capitel/source.os2/LOADMCI.C create mode 100644 capitel/source.os2/LOADMCI.H create mode 100644 capitel/source.os2/REGIST.C create mode 100644 capitel/source.os2/REGIST.H create mode 100644 capitel/source.os2/STATBAR.C create mode 100644 capitel/source.os2/STATBAR.H create mode 100644 capitel/source.os2/SYSFILE.C create mode 100644 capitel/source.os2/SYSFILE.H create mode 100644 capitel/source.os2/TEXTE.H create mode 100644 capitel/source.os2/TOOLBAR.C create mode 100644 capitel/source.os2/TOOLBAR.H create mode 100644 capitel/source.os2/capitel.c create mode 100644 capitel/source.win/ACTION0.ICO create mode 100644 capitel/source.win/ACTION1.ICO create mode 100644 capitel/source.win/CALL0.ICO create mode 100644 capitel/source.win/CALL1.ICO create mode 100644 capitel/source.win/CALL2.ICO create mode 100644 capitel/source.win/CALL3.ICO create mode 100644 capitel/source.win/CALLER0.ICO create mode 100644 capitel/source.win/CALLER1.ICO create mode 100644 capitel/source.win/CAPITEL.H create mode 100644 capitel/source.win/CAPITEL.ICO create mode 100644 capitel/source.win/CAPITEL.RC create mode 100644 capitel/source.win/DANISH.RC create mode 100644 capitel/source.win/DUTCH.RC create mode 100644 capitel/source.win/ENGLISH.RC create mode 100644 capitel/source.win/FRENCH.RC create mode 100644 capitel/source.win/Finnish.rc create mode 100644 capitel/source.win/GERMAN.RC create mode 100644 capitel/source.win/Hungary.rc create mode 100644 capitel/source.win/ITALIAN.RC create mode 100644 capitel/source.win/NORWEG.RC create mode 100644 capitel/source.win/NYNORSK.RC create mode 100644 capitel/source.win/PORT0.ICO create mode 100644 capitel/source.win/PORT1.ICO create mode 100644 capitel/source.win/SPANISH.RC create mode 100644 capitel/source.win/TOOLBAR.BMP create mode 100644 capitel/source.win/TRAY_LRG.BMP create mode 100644 capitel/source.win/TRAY_SML.BMP create mode 100644 capitel/source.win/capitel.c create mode 100644 capitel/source.win/selfx.rc create mode 100644 capitel/source.win/setup.rc create mode 100644 capitel/source.win/toggle.txt create mode 100644 capitel/source/capitel.c create mode 100644 common/source/global.h create mode 100644 common/source/texte.h create mode 100644 common/source/version.h create mode 100644 distrib/GENKEY/GENKEY.C create mode 100644 distrib/GENKEY/MAKEFILE create mode 100644 distrib/SETUP.OS2/FILE_ID.DIZ create mode 100644 distrib/SETUP.OS2/INSTALL.CMD create mode 100644 distrib/SETUP.WIN/file_id.diz create mode 100644 distrib/SETUP.WIN/setup.inf create mode 100644 distrib/TEXT/ANN.TXT create mode 100644 distrib/TEXT/CAPITEL.TXT create mode 100644 distrib/TEXT/COLL.TXT create mode 100644 distrib/TEXT/HOBBES.TXT create mode 100644 distrib/TEXT/LEO.TXT create mode 100644 distrib/TEXT/MLIST.TXT create mode 100644 distrib/TEXT/TEAMCOLL.TXT create mode 100644 distrib/TEXT/TODO create mode 100644 distrib/TEXT/Y.DAT create mode 100644 distrib/TEXT/ctel-mlist.txt create mode 100644 distrib/setup.all/capitel.act create mode 100644 distrib/setup.all/capitel.cfg create mode 100644 distrib/setup.all/capitel.nam create mode 100644 distrib/setup.all/capitel.num create mode 100644 distrib/setup.all/capitel.prt create mode 100644 distrib/setup.all/china.num create mode 100644 distrib/setup.all/ita.num create mode 100644 distrib/setup.all/leame.txt create mode 100644 distrib/setup.all/licence.txt create mode 100644 distrib/setup.all/liesmich.txt create mode 100644 distrib/setup.all/lizenz.txt create mode 100644 distrib/setup.all/neues.txt create mode 100644 distrib/setup.all/nl.num create mode 100644 distrib/setup.all/order.txt create mode 100644 distrib/setup.all/orderbmt.txt create mode 100644 distrib/setup.all/pt.num create mode 100644 distrib/setup.all/readme.txt create mode 100644 distrib/setup.all/ringing.wav create mode 100644 distrib/setup.all/swiss.num create mode 100644 distrib/setup.all/uk.num create mode 100644 distrib/setup.all/welcome.wav create mode 100644 distrib/setup.all/whatsnew.txt create mode 100644 isdn/obj.unx/isdnc20.o create mode 100644 isdn/obj.unx/isdncapi.o create mode 100644 isdn/obj.win/isdncapi.obj create mode 100644 isdn/obj.win/isdnwc20.obj create mode 100644 isdn/source.os2/isdnmsg1.h create mode 100644 isdn/source.os2/isdnoc11.c create mode 100644 isdn/source.os2/loadoc11.c create mode 100644 isdn/source.os2/loadoc20.c create mode 100644 isdn/source/isdn.h create mode 100644 isdn/source/isdnc20.c create mode 100644 isdn/source/isdncapi.c create mode 100644 serial/OBJ.WIN/serial.obj create mode 100644 serial/SOURCE/SERIAL.C create mode 100644 setup/obj.win/selfx.lib create mode 100644 setup/obj.win/selfx.obj create mode 100644 setup/obj.win/setup.lib create mode 100644 setup/obj.win/setup.obj create mode 100644 setup/source.win/avi/copy.avi create mode 100644 setup/source.win/bmp/sellist.bmp create mode 100644 setup/source.win/bmp/wizard1.bmp create mode 100644 setup/source.win/bmp/wizard2.bmp create mode 100644 setup/source.win/bmp/wizard2.bmp.org create mode 100644 setup/source.win/fdi.h create mode 100644 setup/source.win/ico/setup1.ico create mode 100644 setup/source.win/ico/sfx1.ico create mode 100644 setup/source.win/m.bat create mode 100644 setup/source.win/makefile create mode 100644 setup/source.win/misc/cfgmgr32.dll create mode 100644 setup/source.win/misc/dll_kolja/setupapi.dll create mode 100644 setup/source.win/misc/dll_w2000/SETUPAPI.DLL create mode 100644 setup/source.win/misc/setupapi.dll create mode 100644 setup/source.win/selfx.c create mode 100644 setup/source.win/selfx.h create mode 100644 setup/source.win/selfx.rc create mode 100644 setup/source.win/setup.c create mode 100644 setup/source.win/setup.h create mode 100644 setup/source.win/setup.rc create mode 100644 util/obj.unx/dosstart.o create mode 100644 util/obj.unx/dtmf.o create mode 100644 util/obj.unx/register.o create mode 100644 util/obj.unx/silence.o create mode 100644 util/obj.unx/vorwahl.o create mode 100644 util/obj.win/dosstart.obj create mode 100644 util/obj.win/dtmf.obj create mode 100644 util/obj.win/register.obj create mode 100644 util/obj.win/silence.obj create mode 100644 util/obj.win/vorwahl.obj create mode 100644 util/source.os2/capi.h create mode 100644 util/source.os2/dosstart.c create mode 100644 util/source.unx/dosstart.c create mode 100644 util/source.win/dosstart.c create mode 100644 util/source/dosstart.h create mode 100644 util/source/dtmf.c create mode 100644 util/source/dtmf.h create mode 100644 util/source/register.c create mode 100644 util/source/register.h create mode 100644 util/source/silence.c create mode 100644 util/source/silence.h create mode 100644 util/source/vorwahl.c create mode 100644 util/source/vorwahl.h create mode 100644 wave/obj.unx/alw2wav.o create mode 100644 wave/obj.unx/wav2alw.o create mode 100644 wave/obj.win/alw2wav.obj create mode 100644 wave/obj.win/wav2alw.obj create mode 100644 wave/source.os2/WAV2ALW.C create mode 100644 wave/source/alw2wav.c create mode 100644 wave/source/alw2wav.h create mode 100644 wave/source/backups/wav2alw.c~0 create mode 100644 wave/source/backups/wav2alw.c~1 create mode 100644 wave/source/wav2alw.c create mode 100644 wave/source/wav2alw.h diff --git a/answer/obj.unx/answer.o b/answer/obj.unx/answer.o new file mode 100644 index 0000000000000000000000000000000000000000..0fdad574175129677ac72680be7608faca04ee66 GIT binary patch literal 20112 zcmbtb3wTu3wcZn6;bnqS1z$`=d6~pS5J6BAAUp&iArKM}hDkD$nGljNkA%>Ii6KIy zvBBFa)Yc|i5inS=YC#2paCu0-8tVfnRsmZj1{I3sp=j>^@3T&3a=`EFy?5l~KmT5P zuf6u#Yd>dvIAzLso6V-ok4<$@A*R%zfrez5hCwPy^)Rz)oLT+P%2SawC9394owJ^) zH66>1f0d_t>^jyV_2i}2*4E6~`6@rM^(V|wxhJ~igW8(F0A-YK=~G+t$^b1n)x+}* z4A4c8P2=*$;O9`~+1foMIM7U`wg0#BS(&hDqXl?bd zXN-y}_w>m4U(jeYw_CoHt=?^#i5hBL7pf1>nFnJG{~PVEICTtF<=Z?_Fv)X0{^({^ zHKGY(zK7lAuC5vY!)mH%Ug}=9Q`vM@sCFZJ)ePvV***y3mVRt6x>0hs%NB=hT4YD3 zhPgQK&gH4l8{EpEtJ0ZgX+_#yQ9I9;zj+rcix12+dbRqZG)&@im93_>^@ksRINucW zR^_ga6(`E^2{fO7tGryPVCP+5L|5*LP=BpF(qZsL_sD}wuNoVsG`I!U%-XwLS7Ep$ zYtFvqopg=Pg3`U?x^z^t#4c@C=4?*_d=j37u8Z2K-IglJI*ZP}uj8%EZo1~m&RYH+ z8fX!%x);S5a#gLtt5)4bQgtqB`Kk!IHPSN@Jin_E?}gDz^P-)ba)d(kc!lRdpb0`7=7KB0cwjUn%TD(P@pR>e0qXrrO4+$D@t-{E=9j zRDIE$zy5#m^(VNeeSBG?EAeQUWnrNiNI|5d8~=axzwx8>mpV&ybcfZByjSq)@|Q1< zPGjnC>BdlG*W`C@TLz3dLmBhp+})hdG5=Pa>H&wl_f?&PGNsCObgRG^-Ahc{r>B}y zS3%CcPK>mog|7I0ojBPRE)J;F{7yy%hT5&H6S|H0CsNN`#*AuCrktyS57uly4b?TT za#}I_Gi{b<97<>CNW-{g<*RJ-?eL4Z1=T zKjy6Gs2wXp{*MVt+X-}bPX*KPC{Im0Y2}{Yq1MmNN(~VY3wo0H=MR?^VY0Sx&b(Be zN0YQGnA_XjbIhuFwGX<}=)bJYnicz@0~2p5`pnEzv!WK!mRj@MmEX6v8ol_~icCzM zD^rePzG1Dpw){xXUc8(AY&1cep5LLpBt1PpqJ2tD)mH3RQayi#g8VL?_W_1Ym3!>v z+bK&7_AKAN4KFHc`FPlq24^2bw(wrSTom{T20?}~5gC)y@(ajSc`8~vqn$J7IXq{m z0gue~ry`Ax`KEpH9y=7@Zw}8;ewl5xW=h)^+nZ!_?oEm)*qhX$6wN?}^!$$I$nF92 zFS3@l-GjC^c(d#h%n{$xvo`$0T9QyKznh^*a-*zSp#6Hz2}_&jn4M}mG`jgK^loUq zp+2(%!yVtg1KUY5GSGqHDfZ?9=&U}6@s}R9vHTorgk>Q|!hTLMH~;v& zg|$;J)f~^Ea=N#SdbEZ>KX;`u8Oq4*sDk}g&Ao(8tg(Nyh@(~DxGv7x54r21T-Bu7 z+?5wPx~uh8{NW;Z<+l;b-iX@yR^`cvs>U}EdTLpNIsch4k#95l16u(-<3#Oz582VI zk#8+K+PnlqEaY!iqASgs6E?DuxA~-=DI>8P?QW>U{)o9v?U-lsm4|bGyRb1DsCVhw z|5`Z?1y_d&eq{fGUHa~2hm8fKV_=YW0AhWw`7(}C8}c`d)H+2R9AV}&3k0`cR-k3$ zvOP|#j&%d27M9nmV2Zg7ZMU9veHhfn0_+jjdiW7^V1U@jW-_LbyU(uC}7fg=8* zKPygk#2Q-1ju;&g=sCJWVC3jdfuMGTvAL=`8tf@HMpbP@J_NU6e209QS;TSX-YZbz zUZvx!W{k}}O24^vFfW~}Lkbld^66%Dx9nsyq?W)Vh#cg}w_&0F&YYEDKjJuQc{aig zTGpf*Q*q0#(D_qqGfeBK8}Q?Lf^Rn8#ke&FPRJj6|M4?S|7NdDmih17&fBiqV@$hPZ3Pwk~lUANKGX!T_V1S-YscC!rTd+1P} zSXg1YRbs4p8k<_8^iiN@JJ-Zno)PV=t$B4KhNsSu;hES@gxTFF_}j%?B0ZTFX^-^K zie$F5Q)@q^nr~;dmz}RGPN~kE=Geok=G6-q+g9i~9xrr=;s;y^-m@#N9Q0S&i3O#`h5n3iip{U2_TjF76^Y%M?ps}PIwwS%ZO|m}lx3i-8J1+I1`O$QBz4p7d)nUwG z=C&=mxf_av*0**&Y6dTCXd8UZwy^x>{yP@Ei?#MnR)cfOhnS<3imLj(rk$8>Q6AKoLv{V zx_mneBm|?&w@<>0LbIw^g(}yx6n4WC!FIgDl2;ieah0}w7hZR~#l$Y5L|&uqIKV{Q z6tWKHyqSsbGm)_>iAhX6!bIL@8i`e@;4)u^ddf(!HNOSps?T94)aVX1oGz`7ZoU)J zdT3HypKb#QDQLd79W^Iph1AO`3zd=}h}2h)q1j8%bVjjG=#@9v7z%HhE9) zS;l=;2TSnOym}a;3`fTdL*CIMuiSHE#;mqcF2*%?hoNEdkMTQK-yF;Q363s}+L;nr zd7;OunLSFc!iX4zKoR-$RL?&V72zQsy)Q-If$vLUxXEqPf!5>IGb4>l>Hq6XkCuk& znLVHu%b03;!Fcb$_ot0_MtaLH+SIdI+`pxUwGZyrVQ9==`c|~v{egRwzAamd@f~So zGko`X*z(gI0It(rC46ZjY#{zG!vbAmqBV6MvMx7u?njZ)cx> zmdUC4C7xJd$Y(~r2sG=G9)o9}=ke-V@X&mPel=|7xp&}|MaJ=9ghkkPH8I&D;LTkX zcU8JM?rPm~#=7hBjIx7x5N%_QMVIG@s;Yx3%;|83&K+u>F`KTLySw_F_=M}gwyyYd z_W4=)^E~_U7Rs*O;jWKH;*N(=(WPyefsxbw9Fyv<#-C^Tr};xn5tj4uba>~o^HK8+ zm?4dBPW9B`&ffEc#eT8)8#K?e@yfE5*Fc85@3216%|uARmbQ@4X>b7?@nc>H-|r!3 zsNtA6beZP0Xqb^pkH6kBeW9v1VSw%~{YOVAO5yODq~Gx}*yv4cT5iHNkNU$S))WRm zJFpwFwne<f-0!Mt4w|4vSymfG%L8xSeDUo=*G&j~0=_k7(hIE=w)>ku9=Mptz= zcNg%Vacs~hiww_C+GYL`t$otNF1G^xjDDHbcDK`}+wiySeYmu=9Hrawf$93;`&h57 zer56e@$L(K9IH1~mp84MRn}$Bfn7)TH`E?XOuTMy;pbP+FJ4*krS00J%qLm~c@C{! zeMfP_h3c$*Uu=jOTo=1}La)TUljGBO9BX_g@ynR4r|Y`^Zos2m7bSn3+A!#d^ZfPu zE`Bnz_mYst>o;IMo@!3UjN7f{)>Hmk}kB(fu>&b@H;q@^q-afSU zYt>-yyD9mB5l=qtK4u^I?xyDQ+Qt34Ons^BO#O)1+GlMQU0%wo9+T7*SrJ$9sNM6$ zy2BR+r@cEZp=siE%`HPNCU>=;N?38m_QGdF&ksmC{aIpMOr)Cl;#U*bZ%a#jrm1QD zq>)8G-R9hZD{*3QqJn{Pj#w&`wFy#Iwy)}6>&bmVaCX}|5b*)`_-zL& zuUYHtmlSI+>*f67!?zz^zgc~fwyD{kwDP?ZC+~|%JH9ox_(aUwsIildj5*z~)w${T zy!|&nH%QerZ%XUem~is*uODqWzWSm)cJm9i`d_@gq3hn_rq{M?%37Z}{Pquz?JtX4 zR9JkvWW%4X{yJvMQ;ny}y@@f;-S_$VLB$EHdTpAtcz(tkd)K@cvuW3$)YHpGHm{mi z@9c0o_Hb6Om^;sX+PX5K{QRa(rNs_1kj3zIbF_ZG*>_mi6e$ z>HSwW9^Mw$>(iv9lFz?;ZEVHru4wZF+uEE_-s<(y(f6I%bn)bx0SitZ^VG*Bx@!~M z8wO5&*tzBNgj2^RB_7%M(%pZGtlfM+`gx6g{N!u0AVNm2FHtA2N+@9?IEbII?PjUTje&eo(0 zN8%QZ+1%K9;3H4IvupLNq*L<`Rct$$KB;Augc#)Kf@W9oKc%}-*tC< zoM%f;FOEHYam&Sf9@sEpM0C>Ko6<`A)D75pGIPhSxR^B!jT;Z_8?(>pe5NVZ<6Lxc z>NB55ttqyn%|pwNefH_OiT#t)CY8sQ56s#yWJUej^{GwEw)C1b{K?(j*KD2`^JU_I z&E+5e?uQQtZdtuAA=d77R=@a3nRjc$>34d)yCHIa#4U@A`j9lan8a zj@^1B`M}?Dyekejsll6iy^y(P$FuwEvbV$?scR_rcXhmc$aZ{uYC}oInFGt>_nob) z&FmX@=Gk)lGYi&l-FYUhxv}Bc-AB&nKXtq;vLX6!XI3|tj4!&rE@7qf%jA;H#|qzZ zXPiH?XlHTknghoN59!i(L!X9(F7K|Mu>a&^@tJDf>WbO<&tCPfmtKD4*lMd zez9Ok_l*Z%oQ(etzS#Z6RWB~sxL{+;#@jhR4Z_vfeOP&~^z`@<+3DU&{U^_rbed__ z^2e@Ks`qtD-GpZVo;&c2z>|#U0X)<2%)yg~$B(Bwp2Rzc4pY8tHGR_f@ye(06`{+K zI6T`MP&v+GZ@^U$pX1KMdqKgFcnDQaQDI4ZU}3S6G<=<_-)>77ma8-5y4=oSLBO%l zx!B?N7Pty?T#kTup-bfk7P=k&U~zGgFQAGGoMnz|m#bLu`#*m3N9AtjcP?}}B+)^0 zl+Rn3hkxyJFp-au#k92;suSBRhbrY-T-D3}g|3`Ho2mSIG9+{q`-*bfai?!#I1hLO1uk(HzafAr+8%z@uAJGb zRLite6T9hmN47I(fuk_EFx%x*<7PhiV3uiHJZw|bQy!c)BW3KgsWYZen*ugw+O!#J zTuSoT8Iv-SXQZgKnUiLy^pqK6lc!7>lRS2^N}ifND`omU_L+qX3X4h$?djgU@xj8J zd+fL6c2i@~&of*Fc9gb{cNO{rs8jrjrg@8e-auJfg46Bx7KSI}6y>^d9Kix7TcHC+ z+~+7NbZ939iJC!|Ts2Y_l4D-WHu^OPGe<&GR9U@EPL`1YCBX zE6?i>_*_0$VSKl4^d3fuJ=f)2fT;1he1VwD@*>qmueoy3E^V$8bz!DK< zq)eYZEoDN=^qEs9*quSQedNfI_TWOZh}~J>w~zO^T%}GQ^)Q~}CXKT%3EHz=g+Zzr zjEYkWTu#4fq{|m>q1W%sE^y_>So4@QXrr`Ab|YZy<5H$1XW0Wq+7v(#nxzGHr{C_h zqjxO!z=jE9$KGQfG-2w@!S4;tsn_Bsm<7B>`G;{9a{0|@DHg$Vf1dr4!>5A=1eP9j4+7ivq5A)E|fV%UPh}F~2Ny6$aQX z|Iw!(a&iC3dl`O`@YLMMH{-(-9zQqW;rY<~^uZ191swYL(-oHIi7*lm`-L1kXZ>k{ zuJB*rF&{s-;R)9l{h(2v`dHS~cL(07*VK0m`t&sh()h9KznJ@htQT8;{b9a`^ts01 zX1&8e!|UyXdKaT0>!lCOdXw-@eY||+XY?&-n`s0%WqhUyn)y6v*Z>OTLw%(41SMHL zKEQl4&@57Tg?#wq5My$pRxn{AiLBNe}yOTx4N zit_NDrM_-D&X83;k!pzfs;-!!2&dnAp@vi-i}Rs; zHjpwy-bs1o-H>-sW#FvE%>O9fIX=w%Pm0{s{~S2`$CUpO@7PYY@jZC&6UP67cMe}O z|KIU$$79<6CEjnvW6J-H_d#L&d%W{9%#?RQLHfune+^y|!+1Xm@EL{YYUGL+&NSLR z9GtogegA5m3Z4XhKOW{!x8%>Za4&c{@{W`Ih2TwiFAyHEXp z{xcT2jh!JM`lBy+F(#xp@J@U9y`lM`JPF*+1T46$Z=yw>Y2kSm9%Qcw%6L35D zt-`+rPX#yqe@)n)i0vN&J|A-Kr&xXzcrmy`_+;=V@a@8tv(R6Pvr3L}N1%`2`qZxv z_`DQ|Pf+nw#$u;GW$dsK{Cn3>xleEfc#!0IS)T;;@c;*BIbQ0sWWeKdIdggT&nM)P~?X< zJTBZiv>mM7d9Hw8IdF*g1&RvbCR_}lB7FmdQ?7&87`VZ>liE;|+neWLS2?t^g9Sx} zd8l?gJUQO$^9SU8Do=L7fEV^Muiv|b?e^sqml1ILV+eDKipz8kIGPtiIMEvw`CJQ& za5ZBn9;?l!H=WsTA6=+BEWapQA%=7aICSZPB3wXt;IRUnnhWy+9z{FG!-A<)?&s}< zTlsO@Q5bMbG@9OHd?=qY7=RIlWe#0Kt}9^p)wt6N_>5Z!9Ywt5;uVQ`TVyojG6$ix zxV;je>-#Y?_|VO+02Jb`!AIva8(oAuH;EaeQAoo-d=XkuYzCK67dqrl_)7;8I!cuk z`AVIh0tfoDtz?cfU~OmiP~P0=<{Ht1n*^Wk%tq z(_3H^7X!6ShhKI<5hjGT;cMJanGQBaH~WciXd&*d+`8Jf3UTLWR%o$-9cdV07;4m{ zYtDu*3LQmmG&!fpm)lMmO~=6Hjp7VFXPDu^AjH(;H}1+*cFUY`Hf-pzYGN3OnyYk!r;nZ=Tgw|i<@`WVhL9kZRsXPD@Y4tt+PSWb;DO67}?<(N9{TC`aJR+*p7J#%!Y-uT!n%eZfM%?y{m{ z=`qn^^sYJNOtVFwg#AU+OM0_)12QvQ@!I?})K7NxO5r_S(Ab<2mUMKhmVmy9)L4=-9 zfYkF3!Dgl>DD|!ItFRBV;nJ=*FaihhQAAvrWDtkqTuj8~W;qd;U6+V=;rhamkVDVU1y?g2_WqhUMX3!$?K$fqmy6*BzT1a5E8lU!xp;+(C}|cMHBP z@+OggB>aT%^W>=id-4pWI(0Y7cLPSuLVODEFFaBBD8UrLG$QQC5IzS;|IR1BSt%EJ zrcwd&Yn1vKF-xic68^OC-vgQN59GaZ-W2=?akf&Yi15!hlHMB!UbeR{Fk%koDd7Xi z(NCkuk$(*FA$+GUdFdh4abV<)5LcfFQ@C$#g$9jq+eL1lJ>p$fq z@jr?P{}mDS{hI06PdrDCa$6*QyWm@b`+%HJ|0?{j;NJyLi2MuT=LEkKl&s3;#;+tfcq58uB>o|A>n)PJk>ojvRJPA)?+)K{pZp3jmp~ zj2!*EmK=8fjvVFIk)xdr_8BPI}2lu9C^ZyzLLKQR*+;m5v2 zcrH2iSqp?eEcmG4DkAKv75o)2B7l7hc~Gf85>el7Vkg8M5%v6C@C1M^G0!EfZy z`y3H=H88zIsaMEv#r#daK&b=d(EAs`_lYQXl*sk~xh|Y0$2#(Z$U9*Tp!_Nz^5F~Ep&oNLJ|l)9Y=`$h>S38nx!&rc;j0{=+* z9Krb__Yx~HpGf**!KEUvBFFmtb4gz<_@v0!5tl2qiRl*2=XWIieZeCl|Ck){@lWCs>}Qyc z`2H6;=ECoZXnzEJ&GvTzvi-M`$KbanxqxyoDQVESA-uV$GYA`J`CTdlHY*!gBsKMU-M)A&$lQhBy=Bn>Y{tBf6Ekmzby2cw#<& zt3>o64%n_*D8+~KR$WJ61okn4>jfJGHw(TZxK;2?!A8M7g8K#kEZ8K-`w-T1SdjN3 zjU(@DBXhmeG%n*gJjOb8M( z?F2^@)KO4JSrP`E83Y#yF09TosKeqo3W`DuYEXUUs<)vc;~JJuT))G4Foi#Hd8Mvg??RWjQj`Y(pK2G{@9t4bT%Ie( zH+R4kO{xUgRUev`u0)N9%X502nt8emL260FR?TsGq$t^7|D|UOWgC`HM zPAu_y=6jZSiso8J7SAv76uL?kg`!6PMtZ{5uPB+5_}+VqPG2*pWJTq-Vb`V4e7t3F{?S#dZZD~CtC_X$n~l*!*2Qcc-7|jfnXDvtF-sn6YrA+j`?al;7L|AV@uvfO?8jnC zisLi(MZ7-xYNh1KjBlNTm9~RFFUc4~JdNI2pRVms3%I7bCF>Ar` zV==8|VJ975Thh-HrndtLC-Vo!NNwzWZlwYpyukc=Vj}_YdA( zo?>hLZb9tY9ToZWUT!;beZ#ixlj^c|9;oWI*4ZyT#=5wt^P3|FAK9=~`8>O!*_yuM zqc6_f6`g%@M@-2V(QC~k#~vTiTED~DaPq76#vGf~GdkhImzP)ADlRrOl%Hsve*4w= zk2|y1_ldFfUB5H;`%A|ktgFut%bvA-#pGL7G#=X-+w;rx^o6JYy?tcms%~iW=&-f9 z!#y<{qN46P*Kp~~nt}7qoXB4v8}F{Oxi=1)@Q8EUY1`QoW8;r++LHR3sc!4t=;t-o ztb4EP^R+X!a)15SA9nV>;gx7-PF+k|^s3`U5fd-(Xr1GUJv?Ym#r9rbo9+qAUTcj> zH?Oa$eg63MDNXekG7c}!8ocTL9qDbyV;79r+88nDw@-esXVr}KvvZDC?mRSQY|VCV`U>2>LM^}hYHxnUVoN@9*(+IDH!JsU@-MWv@UWS93@H*nLL znY;GHMz5)F+;m{yh<#4yb4@Y%&IOkyJa^i>ro@UiCsv&J`pXMrZpp|VTM<(+Xx7G| zkFH<4VN%o5Z9T`PJo!$KHCx9-e;Yq=YsF{J|9oW7wpIIVF;aHy|8~>&bHX& z>*_1Yx;b7w8g?>kQvJfpa|f2j?fY?E-OTG_&%ID#eQw@{9lOtEH#gRwNIibB;Hi^~ zP4!WqoLkkrFst~6b+#4GZ!;EdJyG<5d-}z53wD>ptT}LU$k49WZ|qZV>w0+A=>2C_ z#?4e-UR8Nt!3$Uau;ta?zVP(0dkR)={$}3L9-9trz8C*@XmgLvwVUT{nzyNC(``IE z;zxW!ViIv_j-pH+o0Y|kALY)4E=PPyjtA4ZI#tHyy61um3x~!b6*h6s!g8|DEiPIZ z=bc~jORU+(dGZ#q9s3a%GEKNu%3X!I#q(WpMOaIM%Ok$kmXxO!&uPKec`mopSLk)j zcP?_2VJa@lbvZCS^J*E~hCJ_lx1-EgQc_&Xi&b!1NuhJGBgf^U#suqHov4a#^6i}O za;Tz%f@QET#gc&kaaE-~iS$p+5bXcg)?Ld}f~sGMeWQ@F5_6^lZ>u)1xOqenwbMi3jw4!-M#pOlTDW17mzM|Y=)?4!s2}K#< z@p@g>QrBEhnYYwc>MDxs-hHIl!ddfN&UqM39#^S1I>Z*Li`==aWIokZ7~Q@5;Nm=2 zskO}IU7{vU&zyYU#LUr|lc!A>ZFTzGR=eG9_089^Se=Ds)~r&OtK3;ie(3&)9Xrap z#AnTM75T``5EQHyU`3#;S+1foFS=<`q03pORoqn?Tx(C6GpEp%7j3lBO67`jHLW5# z)=`<`GGO9Z) zy~F8tdy0M`Jr|+Ob@&RM0iXK(e4jgtiyVCC`Hb_bR*#P6gHl&nuCqu?;lXvI>6tvz zJwcBpS4?vt9t(U}2NwT=O`fmR>Gc#B{gR(N7nTK`53Sz+sr^?<=XtY(^;O<~w9w!q zuhq3yUaRTa{W5mSs0n0G4`2?TxQQH|vOF}a<9d5NatREMpKKS>F|p1q4O$~;{`_yt z+YqiOCe$H9nO1vtJ=M_Dc&4+WOgckc^=^29Qee7#t++6?{Of^t-d8`cXB+db#_C3| zIsZH!skBTjU*+%U5x8VIkW)DLFY==fk+Ke&ALOq(8^u*le6J?6jj1NHb>&rPlCom_ z`FyH$?KIP5wN|E@%=W5>+ZFF^wVCac3c?D){o`A+)x@aUY3-U}_`b|`%DXr7yuwcW znXOtpOc#&!ZLDexs~z8#_;=1*`<18>>Qi|(3PF%nIR;XZ^X1E0T_UNjLidxd)i;vrEA(p8HK&nR^5fT;g(F~OskUBgaV@Fm z4GjzQcjeh*or2pp-Mz1Rz~#$$+fWe3t>Yi6&qy^=?i#k)+l68v%>31Z|2I%&lN*6B z?;hV?eZXAZiz6^IC<5Wtjpk*ikk?;LvewXW^X~nW;UJ}~<_vI)%4h~AH^;pt(v7}y zSM3RN*Nks7@1E9X-nHynGOTKg^WJFQ?Q8S<=~BkRyt`@m4-a>0*=OFJ*|v9C7fMve zfzHt6UrkAq_4P7w4E%nok>=9mu3b%W(oA(>3cd(ORS+31UpPgk`6N7{DCpXt2(P-6 zf~okfQo+3JVRQ_8D(EKf6rJZlG&0-VUBVQ&Ml=wSU8~4d)lYHW8z>mMOy=EWi%T7sBSMaH5b_E#{7>b`mRDlL z$O|tnxNiDDszYpAd-aFr>LeOsVl3%%=(Ljeoj9hMyDTcpAnrk9jpXIzy8_3gL#a#$&LN#-Q%5H7pEK9QA?-Irzl= zt~~h5^NA^VK50cuG4Yyr@l=6D1NgFQy)onqy3H3UU zz3N8aUHLc)|}eWWd6$u0Y?E+U5bIBUW8*Q(~7TpS4nxNU$guOxK+jW=?FfTW?2fEh;A1hbQ#L!&9Gkl_fs)i%(U9+Z8{nexIYusyuq6+RO!Z`O-?w1&i>C($D_~r_mzf$X2he7 z+r&RK8AUon)nJqG&}1y3*ehWrs+rb~&D37SiJKSO0o>})_jW3Thz%W?jc?x@R<8C| zLAab`uF!fhL<_o0J9Uc_x;5k-6z=bAVbO`(qpLO+S_H1IPU|2@oDqvG?|ppNuz7Hv zpgT%6H3jZ>>}#q&^!8BahH#~&n~G72dAB;{nwOD1=T-Mtf55eQH$MQl4YNqqPhB2L z#NNDzi~!fAAWU8tgs$R|Eu+l4@ii6(!=+A3(`d>MQ)rVm4Kpfl7cisJeo)vncN)Iu z5z){fzb#GLu3O!liuqIA7yLkCUiJct2#yW5yuAH4KemFJv`ei+xGziHJ$P@ZQ%7?3 z0q;Pa1HK4WOzQ9o*075Uv5Q2Xmb2<#olom%h=rK>{MGAdPjsbJu~LPm`d9Nxr{?zi zsR%9N^z?eA9TJbO=>i*WYfM4GKvwj8xjviA&>Ln&hZCIGq zsX#LqL*3{757}hp1CwQ~BJ zm*ScHJVJ^|^%{4rpHS>n8O^&_lY(2|kzt0BPchUg5~bE$y)AS@FREpO{;m_T)K^`7 z;G+4#Tsp-7$wl7VrTIMU+@c%B=-?#<`?!^zR&XXUzo2`tQu@hDjXxZl*xJ?fv+A2$ zY6QGRm(k^uYO4v%+gBiia(RHCeg#~p6Hm(!?e^*(NNd6NnEdOb78xA2Ef9Y+Z22&}#)TfiQ~qMU3X%{0^+@QrAZ!gO>Iq&5zTq z+;M#dhtwxf3nt9R&69a5;Kwkoo|-_9IH@7|J6g4L8`0*@8QuM=>b!$6U7@(xj#Wur068e^76NkA#V z4-5;bl!8w3$)v?qJ1uf@LFa%lm9umW2qS|l){;#2++d8>mO<3g(5;WydjyqB+k5|5 z)aSqZP?Ra2>nWRzmUunJFSK=UpVWzcc+4z+`;o?sExXD{jc+Na8CqAMn})wG7ufz{ye-p%7tmw(vi+h#G^~3yM`CP zD>~H{E%6kpMkZX87dn;F?%AEc&fLK)8_9Y2i?Wa?s%a~FT{$0(1zqV_uEnz+d()D% zCrb2hV1mwn6U&8WA%2Um5WK(gA(QinHwb3^a8keiqVY=aee#2|x21yEk)*)>?E_$H_4@pg8lPU|7QqdICh?Ut8ol~A9hLURhg zLCXmXXQ=jgx1knDFHTj77G3c!O3lfSfofu8OCMILvw!jF4X+Ip`a8A=B?>cLzG%h0(WM{eube8ivLAS6r7c`8i4AjD@ zkAuEpqCe?A!gLVS%+#r~m<%jRKhSV!5z1|#)0~km$>gKo-`HfxZM;l%J$V z@32HFebY~)(xTiVwIQH%&KoDSM389PaH*w(gy$Tol}Pe|gy&kRtpa7R=O?B13`lr> zQEK!j6~gm25GHiAau-On{2*uqYezt$x7tCXXL{gO*uRi!QTl^~m-|4XF6E$+oVN-j z%6(kg9h7#bL8I92M`_n7Li5)XBzk5DNc2n!NW?xJbOYxdBeiVMEv!8N6616UNQ~3p zfd+BvYEUNA(;(4D&x1tUwtz$#+huAaD2sEv4-(Nh1scs-D~P^;wJ7x7N7VUNkf`%r zpfPMW5+q6+1Nx40%m9hf95U4d6186m6186qx}Lo}4-&n#5hQx+FQ7i0`W8rx*nOaD zSo;9fjp-;Tk?Au~JkuFT--76!hDA9K8q2AdK=&~H3=;Qrgh^3iS-T2!FVi(3`s2R{ zr8h{}^#jGQHV`zP={C>=CY!WN0}WyAPS8ZA5uhGSqd}9H#(}b#vO#Sii!w{vJqWtU z+FYp>f<&)+L6bS}V$cPqrJyNHRiLR%D?q|?owQpG5}u!v+KV9JxdAkd^S%n2&h#2c z#Gn!M|Daivk3b?vi=^;wn${O2YGsu)2sDHJC4$bgm*F50mvl*^K{MHIinN;tn#EeV z)Ru$pW6ck`pJ}a3T@RYgS_9}P$fE27iCXQF^d9H|wmS?GwK@(GwfaobSD**k?wqvi z)?HB?tX&HddHaFpur>hXWEuhz@k;vVo-TNTn z?=VRC>jgpF@i&27Y}X&;W*P(%El&iA*bfJZ9HT(}*={08%n@#>6@o4!)uJo_;eWUr z7vk5?tW`^GCFp-y`-9ZhfJBSdN$pP{k@v5lx$JMJOx*<%Irf6`IrWfCZ32ln9|H~G z)PI56x!e{IJUj(>pgxP&@?0>YmrK|2Q${m~8*qp1rTCa5P! zsJdBaoz+Haef=rlT#0Z7IEGqpcart`2w_< zwbLLGq3=OUSUV5;4bvr%n7P7wYJJ{SQk10YK%zeef*#_$w}BpJvVnw`G>{lMcS#y8 zX&Ok3&ig@Pj>wg%9*`(w0ca_Eei%ewNLiHMfxdudQPzV_GHnDs!ggCg6-<8tiMqT2 z5_Q=l=?6&>*Jw2`gM{6UAW^^mGBsAFCW1u$hJz}(w9z0DaW_b;9~B@mvg<&zy0%-r(fplY^Dm)b;-sLO+r=7U5}KLlFNIVwTo4yXf( z_-z1*`27te#??WP7+0r2<(&7tq|1_`EZRJt1-cRSi%`ac`Z7%ci8=8B5E_M4Hwcpm zs2BuCph}s#9CR9*MX3WNa_U-{`W)yCr*4wkpQW}_YP&)7mcXJMl3J6rJ1(`)C7l92 z%B3}fRxo`Bx{kfHfv)8iMPRZL?dT)vCXlFAGN^|0-T_+4lp*c1KNYw8EkSI3~B%a3RgDhNHDdpmp_7pmzO}o%b!6{u-#ultC@C!{tdDydqJ4IFq%FAJ<0SrNccMo68?S! z34iS%QLC`tit-Q65djjlx&ibQYyCh+K^7$jB)lYogqJ%(Vw{eZ+APo-&N~ORmdOPY zc?&>d94rPs&8ZcjXPBy`-AZY<7W6Eqt^@s%=}*#bleF6h5-UWLOg#!J=Nu;`wSdHZ zejaoKkL)(k^-S%cK1{Slqd)e?n?R6=RUYUz*5-p+;n|`r1^vYIdl3Bx5*B40s4LSp zkQgs-gL<%b1SERvw4^pk-7rW+YH!droa0u|O-xCk=eR|7PzjGgW}1nU;a*ePo2P0@ROb zH7Jtn_YCMT*Y7P*JZt+vSbmV>e?T`eeGI}Efr#HpkjN2!gQ7gosog*rw8(Kas2OBY zt^=)OtuF{&hg7Rf9SmB}S}dq9Q-Vyr1M~uG86e>~OQuc$y~wFkK*IA(nK}pb5~sRA z!gGO4^@9Gysf$4`Gc5&)9n_Wx5I^+Ho!D zHrDz|x&_q4+F+2FOKhN_tfhjsG2H=rl_>)x{7nY^g|!)=zcS61sd*qVN{T>#+)k@H7ocepv4yGrh-Ls%b*4Be!(DDf7Wss=z7LbioUjvEz=uObgY_|t= zJICq>D3$3;kQlKopcK~5fkcEZfkX^0gOWMbbfZ>APf5K&BDEig-s@Ww8%TH_0}?y^ z@gQ*rOa~3(nz})vE+wFytocB%Gc5s$IR6$T#>-QnTR8P4km&u*pf_0C3VM_2Zy=HP zEs)5240I>g?*b^E?XE%xy~T75Xctp&kjOg}Bv#!d&~8q(gBqFc0-XX`lq}F5)+T^N z?C+Pf1oTf%T?TrasSflG(`wMWOizQ_Ko;dC(0i08kIOg~7wF6f}6&@4(%5IP&<>N?Qhnfimo8Wkf`?~vM9(5IX? z9mf}x;G}~=d*>_o+aRU0lJ0gny>T|`BvlDM%7@g>VGrP^{u6wRPbVaG4y)7~;41hC zpU!MUhxm|3-^yVNh53LfqtoJ((&9~&uKvRl1BkrRNBpLp7Trtq5ek+ygF-th%1Iw# zGhC9UjD-@gapdOs+;050&}o!MvzZPG*pN<7qk5$Z3iT;{Iw_9AV*Cfe{3nB|LceH_ zsju_1B&!V*zi7_Y+t59tSE!so>5fvT&+7_Skjx`DU_;7j{L}lP-H~3QorFFYJz?l= zXf+Sm1Ru9VYUeNvq7FW^4r%okExj8GjeW``lyOjKlnce-&UY;FxC&{O4=CuIqK~Bl zP-Y+(-7f(@`B0AOltoZzya#Nmpq$VttD&6IDKA5z4~;`n!@oi~gR6j__n^@I9Z)`k zLRW!Yr=YazY|cZW=m&D)Z_E_>wk(jV8;Yd6U)b<{ksO~=uiA80RK@;RgOU)x!=NN4 zG#Zqoq<4)`P85!r<^e=sjWsOjlRL7R%kU$wwt=>m6Qb9L&8kjq@-F5HmM0W z8kM901|==gW>nJB42s>Ju2)iQwsA%!X{J$0$u}tRDT|Cs>JvsKZJklEZ#5_hwl|GR z{C=a7@Uc-zJYiIl+Kftac!Vy_DG4c2MkRHyQAtZOD)vbRCDAt9sKn_DF-0V(Vj6Qg1XWX)$^wH8CO0s3eUtD#HP2|1<~1tz3x-@t zwhDtyQhc3JNw{dtmH4dDCTXiwV661TJVra4p!+>FIps}h!}C~ba_WAgl6K6f*grKW zDM@FIN^+}FNmWd`{z^?ri!v&9i$O_E8emY;;_2Jups|sfmXu^vlIeS9osE5zL9yG$ z=#{kiD%QX&uIy^hm1-*eY32yNuY0-bxQKHMkVDXqhjA+P!erBj7t2Q zMkVcigOU{gu~A7lVN?=ZjY?{}K}ojJci6$LNKW`kKcdo-6QhhaN&hz5B;RPXNohCQ zqz*RNq$MZm6?=UARHKqmVN?>^j7oB3cU>#&@hLW=l3Hg}(q1wu_8kT#!S=3Ei9cpk z5>6SF#5SXn9Nt4;!-N#8QAv$4Drt8Z75f;2l4zT1R1)VHm824*lKhZSNqNGkq|$fE zL1V+7m`3NV=oI_A1|`Wx-xvqmBqyFSDoJfd#U381&xLv3sMzUSE*4gaLg2%(V+vY}6^>POABz(*$r^7n~qE>9UBRkRhVs^A2#Tya_;G%m}XTUcD? z!WDglQtEQ%iEB+ME^!qFE5xH^>55vP`=p}P&<7D!C<#gA~Gdbbd(rC`36CqO?IN!G28Z9UKW(1dh>~<*s@(`QHLzK-S%62F;Lk8-6IK<|g z5QYAmH}TQx%qKvxq$xL3)pSZSlt$dSfwIPi*vtx1JUYeUF2~ty#?ex)v!Oy)geZT6 zQh`|_P&)ms=n0*&HzXH5n~IOtuJ52sG6(y)9AeX*rWyWdxvqz@E=tSgaF_T(@2{b{ zT#os!`8bcy;O7q5H1^W`3>Y^dAq5tG3n}zwjy@B0en@#xDvCNM%##Y$kd8(3%;jkc z)})Z<1n^?%nUo|bc{(K-N_Mc4NV({HC@KKY=Hn(L(!11fyfzaGE|hAZjTJ3E&p=6+ z3YA56R(xwhxgyvPDc1xmR2?NOSfT1Dt!i1Ei^8LP9;~F2@;|{!8YyoDD|S-qgOzxi z^`Frx)UK5}g(Id@=)1&xostHHzQGDaV>7Uh74D0PQ%1;TN6sxfVACpX;6izi9Pmer zVN;0mRfs}Q^ZHy}F=(3bS~qZCSi~@bndW(Dh>{kfj0{oe`9A%|V9#@*%+VlBNsUB3b5{TjVTsxN%}9AEhXY3OK?M zi;6=WyGw=Qutz?;(ZOq>_D)j0nqM}TszztO()pN*LlbcLC$bhT7LM{HJ$@d zM8_?9%Cs;l4jjqJr(rty;73Iqjmzf=V|yTuv&^Th4IQs56`WD*Sm;Dx@`^>{aONhG zaitw&ECf0W*MTI_iAct|_6sp}mWj%6CwT+zaZ;>$Mkes z105>ritFO}@F9-irC2*0Wv*Nw9T*C=c%H|lqz6m+E*wxR64H~9o3G^oo8)LA4rz7J zA(q^>si&2HhxrJQk_flr#cCX z+gOeOF&wy5fre2_4M5YTOu|{%m<}?uQ+pvzad{_chx}?iif%_Fj6OMnnvpa^)MbpT%~SjE-f`Q Z6Lp|#(L + +#ifndef UNIX +#include +#include +#include +#include +#endif + +#include +#include +#include +#include +#include + +#include "../../../units/common.src/bastypes.h" + +#include "../../../units/common.src/os.h" +#include "../../isdn/source/isdn.h" + +#include "../../isdn/source.os2/isdnmsg1.h" + +#include "../../../units/common.src/num2nam.h" +#include "../../wave/source/alw2wav.h" +#include "../../wave/source/wav2alw.h" +#include "answer.h" +#include "../../../units/common.src/util.h" +#include "../../util/source/vorwahl.h" +#include "../../util/source/dtmf.h" +#include "../../util/source/dosstart.h" +#include "../../util/source/silence.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../common/source/global.h" +#include "../../util/source/register.h" + +#define DEF_CTI_MSG_ENG "CapiTel CTI Window" +#define DEF_DISABLE_MSG_ENG "Please register.\n\nCapitel disabled!" +#define DEF_REG_MSG_ENG "Please register CapiTel!\n\n(or set ANSWER DELAY to 999 to use CapiTel as a freeware Caller-ID)" + +#define DEF_CTI_MSG_GER "CapiTel CTI Fenster" +#define DEF_DISABLE_MSG_GER "Bitte registreren.\n\nCapitel deaktiviert!" +#define DEF_REG_MSG_GER "Bitte registrieren Sie CapiTel!\n\n(oder setzen Sie VERZOEGERUNG auf 999 um CapiTel als Freeware Caller-ID zu benutzen)" + +char status_isdn=0; +char status_conv=0; +FILE *fh_ansage=NULL, *fh_ziel=NULL, *fh_fern=NULL; +char fh_ziel_name[512]; +char cbuffer[14*1024]; +char next_is_welcome=0; +void (*capitel_signal_function)( short, void * ); +char help_str[300]; +char welcome_file[300]; +char welcomeFile[300]; +unsigned long calllength; +char help_welcome_file[300]; +int raute; +int loesch; +int fernabfrage; +int any_dtmf_detected; +int dtmf_job; +char dtmf_str[200]; +char act_call_name[300]; +unsigned long use_ulaw_codec=0; +char msg_str_cti[300]; +char msg_str_reg[300]; +char msg_str_disable[300]; +tU32 play_beep=0; + +Thread_Id_Typ rescan_thread_id = 0; +unsigned long rescan_time_var = 0; + +unsigned long do_dtmf_find = 1; // default on +unsigned long do_silence_find = 0; // default on + +short conn_ind_cnt = 0; +short do_nerv_message = 1; + +short beep_cnt; +short max_beep_cnt; + +Thread_Id_Typ beep_thread_id = 0; +short num_calls = 0; + +char *beepdata= "\x43\x69\x01\xa1\x88\x70\x60\x46\x66\xf8\x18\x5f\x91" + "\xad\x89\x80\xd0\x98\x57\x79\x07\x5b\xc9\xc1\xd9\xc8" + "\xac\x90\xcb\x31\x31\x17\xc6\x6e\xe7\x12\x60\x70\x88" + "\x81\xed\x01\x16\x40\x58\x92\xeb\x28\x68\xd7\x91\x91" + "\x2f\x70\xac\xf8\x89\x59\xc7\xea\xa9\x21\x29\xa0\x2c" + "\xb0\x47\x11\x31\x67\xe8\x46\x53\xbe\xe0\xc0\x9e\x31" + "\xed\x21\xb8\xf0\xa0\x0b\x9f\x26\x86\x09\x71\x41\xde" + "\x50\xac\x28\xd9\x61\xf7\x1a\xc7\xf9\xdf\x60\xac\x60" + "\xb9\xad\x31\x83\x78\xe8\xaa\x7e\xa0\xe0\x13\x91\x2d" + "\xb9\xe0\x10\x58\x3f\x97\x22\x6e\x49\x31\xe1\x68\x2c" + "\xd0\x1e\x81\x01\x77\x8e\xcf\xe9\xaa\x00\x50\x78\xe1" + "\x2d\x41\x7e\x20\x48\x7a\x8e\xf8\xf8\xf7\xd1\x51\xb7" + "\xb0\x50\x78\x77\x09\xf3\xfa\xc9\xc1\x39\xd8\x2c\x70" + "\x6f\x31\x41\xc7\x06\xba\x47\x0e\x00\x70\x96\x41\xed" + "\x61\x28\x00\xf8\xca\xfa\x68\x28\x89\xd1\x71\x3a\x90" + "\xac\x08\xc9\x99\x1f\xab\x89\xe1\x97\x60\x2c\xc0\x29" + "\x11\xb1\xbf\x28\xde\x4f\x26\x80\xc0\xa2\x71\x2d\xd9" + "\x98\x30\x98\x23\xaf\x36\x86\x39\x91\xc1\x96\xac\x50" + "\x36\xa1\x21\x87\xca\xd7\x99\xef\x00\xac\x20\x19\xad" + "\x41\x4a\x38\x96\x9b\x66\xe0\x20\x27\xd1\xad\xe9\x80" + "\x90\x78\x1f\x07\x4e\xae\x79\xf1\xa1\x38\x2c\x90\xa2" + "\x01\x81\x07\xae\x67\x89\x42\x40\xd0\x08\x81\x2d\x81" + "\x86\x20\x68\xea\xa6\xd8\xf8\x29\x51\xd1\x4f\x30\xd0" + "\x48\x17\xe9\xeb\x2a\xf9\x41\x09\x20\xec\x30\x87\xf1" + "\x01\xa7\xe6\x33\xf7\x26\x40\xf0\xe6\x31\x2d\x21\x08" + "\x00\x48\xab\xee\x48\xa8\xb9\x51\x31\x9e\xd0\xd0\xa8" + "\x49\x39\x6f\x7b\xb9\x61\xc7\x00\x2c\x80\x49\xd1\xc1" + "\x33\xa8\x52\x7f\xb6\xc0\xc0\x03\x11\x2d\xb9\xa0\xb0" + "\xb8\x43\x0b\x56\x26\x19\x11\x81\x68\xac\x10\xde\xa1" + "\x59\xdf\x4b\x69\x19\x3b\xb0\xac\x18\x21\xad\x81\x2e" + "\xb8\x06\xa3\xf6\x60\x20\xf7\x51\xad\x37\x00\x70\xc8" + "\xa7\xdf\xa6\xe2\x59\x71\xd9\xd8\x2c\xf0\x73\x01\xe1" + "\x5f\xe2\xf7\x09\xfe\x30\xd0\x28\xc1\x2d\xe1\x76\xa0" + "\xa8\xab\xb6\xa0\xb8\xc9\xad\x91\x6b\xf0\x90\xe8\xa9" + "\xd7\x5a\x5b\x59\xb1\xe9\x80\xec\xc0\xd7\xf1\x61\x8f" + "\x5e\x3f\x77\x36\x30\xf0\xee\x71\x2d\x99\xb8\x80\x68" + "\x6b\xa6\xf8\xd6\x19\xad\xb1\xb6\x50\x90\x46\xb9\xc9" + "\x83\x13\x99\x61\x1f\x40\x2c\x20\x79\x11\x61\xea\xd6" + "\xca\x7f\xa8\xb0\x00\xdf\x51\xad\xe9\x20\x40\x88\xd3" + "\xe2\xe8\x3e\x21\x51\xe1\xb8\x2c\x70\xe2\x21\x99\x0f" + "\x43\x49\xd9\x42\xf0\xac\xb8\x61\xad\xe1\x5e\xc8\x1e" + "\xa3\x28\x00\xa0\xe9\xad\x51\x1f\xc0\x30\xe8\xe7\xef" + "\x86\xeb\xe1\x91\xf9\x20\x2c\xb0\xa7\x01\xa1\x8f\xca" + "\xa9\x09\xc6\x70\xd0\xb6\xb1\xad\x59\xa8\x58\x36\x2b" + "\xd6\xe0\xc8\x79\x2d\x71\x6e\x70\xf0\x76\xa9\xb7\x12" + "\xef\x21\xb1\x97\xc0\xec\x80\x69\x31\x21\xa3\x3e\xe7" + "\xf7\x28\x70\x30\x8b\x11\xad\x49\x78\x60\x56\xbb\xc6" + "\x98\xb6\x21\xad\xc1\x28\x50\xf0\x7e\x39\xe9\x8b\x4f" + "\xa1\x61\x03\xf0\x2c\xd8\x59\x11\x21\x32\xf6\xe3\xff" + "\x88\x30\x80\xf7\xad\xad\x77\xe0\xc0\x56\x2f\x0e\x68" + "\x92\x61\x51\xa1\x18\x2c\x30\x1b\xa1\xb9\x63\xef\xf9" + "\xd9\x5e\x90\xac\x68\x01\x51\x59\x86\x88\x52\x23\x88" + "\xc0\xd8\xb9\x2d\x11\xe3\x40\x40\x76\xe7\xfb\xb6\x43" + "\x81\x91\x09\x80\xec\xc0\x47\x01\x99\x63\x3b\x69\x89" + "\xa8\x10\x10\x3e\xf1\xad\xf9\xe8\x98\x26\x6b\xe8\xe0" + "\x68\xa1\x2d\x31\x66\x90\x30\x66\xa9\x27\x4e\x7f\x61" + "\xb1\xe7\x30\xec\xe0\x49\x31\xd9\xaa\xae\x37\xb7\x08" + "\x90\xb0\x3f\xd1\xad\xe9\x98\x20\x46\x4b\x16\x18\xe6" + "\x61\x2d\x81\xc8\xac\xb0\xf2\xb9\x17\x1a\xa7\x21\x61" + "\x62\x90\x2c\x38\x21\x91\xd9\x6e\x06\x4f\xff\xb8\xf0" + "\x60\x69\x2d\xd1\x27\x60\x80\xb6\x13\xe6\x08\x4a\x01" + "\x51\x99\x20\x2c\x40\x0f\xa1\x89\x8b\x9f\xd9\x19\x36" + "\xd0\xac\xf6\x41\xd1\x79\x46\x28\xaa\x5b\xb8\x40\xf8" + "\xd9\x2d\x71\x42\xb0\xc0\x06\x27\x82\x96\xcf\xc1\x91" + "\x57\x40\xec\x60\xd7\x81\xb9\xcb\x53\x49\x89\x88\xd0" + "\x90\x2a\x91\x51\x09\x68\xb8\x0e\x6a\xc8\x60\x56\x61" + "\x2d\x41\x56\x90\x40\x3e\x17\x2f\xde\x67\x01\x41\x53" + "\x70\x2c\xd8\xf9\xb1\xf9\x3a\x4a\xa9\x47\x38\x10\x40" + "\x37\xad\x51\x77\x18\xa0\x26\xaa\xe8\x58\xbe\xc1\x2d" + "\x21\x98\xac\xc0\xaa\xc9\xc7\x42\xc7\x61\x61\x9e\xd0" + "\x2c\x68\x61\x71\xf9\x4e\x9e\xe7\x0f\x98\x70\x20\xb9" + "\x2d\x11\x33\x80\xe0\xe6\xe3\xf6\x48\x23\x41\x51\x49" + "\x80\x2c\x80\x27\x59\xa9\x2a\x87\xa1\x99\xa8\x50\xd0" + "\x7e\xb1\x11\x49\x36\x96\xc3\x0b\x98\xb0\x48\x21\xed" + "\x31\x26\xb0\x80\xde\x9f\xfe\xd6\x27\xb1\x91\xc7\x30" + "\x2c\x20\x69\x61\x89\xab\xdf\x79\x69\xb8\xac\xf0\xcf" + "\x11\xd1\xa9\x08\xc8\x02\x22\x78\x80\x36\x01\x2d\x81" + "\x88\x90\x00\x72\x77\xcb\xa6\xf7\x41\x41\x4a\x10\x2c" + "\xb8\xd9\x41\xc9\xda\x63\x69\x87\xd8\xd0\x00\x29\xad" + "\x11\xa7\x58\x98\xbe\xa2\xc8\xa0\x62\xb1\x2d\xd9\xa0" + "\xac\x80\x73\x09\x5f\xb2\xd7\x01\xe1\x46\x50\xac\x76" + "\x81\xf1\xc9\x7e\x2e\xc7\xf3\xa0\x90\x58\x19\x2d\xf1" + "\xa2\x80\x20\x9e\x6b\xa8\xb8\xbf\xf1\x51\xe9\xc0\xac" + "\xe0\x37\xd9\xf7\x6a\x97\xe1\x79\x08\xac\x10\xda\xf1" + "\x91\xe9\x76\x46\x6f\x1a\xa0\x30\x88\x61\xed\x41\x76" + "\xb0\xe0\x6e\xcf\x66\x56\xf7\xf1\x71\xbf\x70\x2c\x98" + "\xc9\xe1\x29\x2a\x07\x19\xa9\x18\xac\x30\x07\xd1\x91" + "\x47\xc8\xe8\x8a\x2e\x58\x00\xa6\x91\x81\x5a\x6a\xa2" + "\x0e\xf2\xae\xb2\x82\xa2\x9a\x3a\x4a\x6a\x8a\xab\xea" + "\x6b\x2a\x0b\xaa\xcb\xab\x4b\xab\x4b\xab\xcb\xab\x0b" + "\xab\x8b\xab\x6b\xaa\x6b\xaa\xeb\xaa\x2b"; + +unsigned long beep_on_calls_freq; +unsigned long beep_on_calls_dura; +unsigned long beep_on_calls_delay; + +char dtmf_setcallback = 0; +extern short is_callback; + + +//**************************************************************************** + +void _Optlink capitel_rescan( void *arg) +{ + for (;;) { + OsSleep (1000*rescan_time_var); + capitel_signal_function( 8, NULL); // neu scannen + } +} + +void _Optlink boot (void *arg) +{ + while (comm_connected()) OsSleep (500); + OsSleep (3000); + OsBoot(); +} + +void _Optlink quit (void *arg) +{ + while (comm_connected()) OsSleep (500); + OsSleep (3000); + capitel_signal_function( 12, NULL); +} + +//short answer_version_expired(void) +//{ +// long expdate = 828398801 + 14 * 2592000; /* june 1st 97 */ +// time_t tod; +// +// time( &tod ); +// if ( tod > expdate ) return 1; +// return 0; +//} + +short iswav( char *filename ) +{ + FILE *fh; + char str[5] = "1234"; + + if( (fh = fopen( filename, "rb" )) != NULL ) { + fread( &str, 4, 1, fh ); + fclose( fh ); + fh = NULL; + str[4] = 0; + } + return !strcmp( str, "RIFF" ); +} + +long check_duration( char *filename ) +{ + FILE *fh = NULL; + long duration = 0; + char str[256]; + + if ((fh = fopen( filename, "r" )) != NULL) { + fgets( str, sizeof( str ), fh ); /* dummy read */ + fgets( str, sizeof( str ), fh ); /* dummy read */ + fgets( str, sizeof( str ), fh ); /* dummy read */ + fgets( str, sizeof( str ), fh ); /* duration in seconds */ + duration = (long) atoi( str ); + fclose( fh ); + fh = NULL; + } + return duration; +} + +void _Optlink convert_all_alw2wav( void *arg) +{ + FileInfoTyp FileInfo; + short rc; +// short max=0; + short i; + char helpstr[200]; + short bitmode = 0; + + bitmode = (!config_file_read_ulong(STD_CFG_FILE,GENERATE_16_BIT_WAVES,GENERATE_16_BIT_WAVES_DEF)); + status_conv = 1; + + rc = OsFindFirst(&FileInfo,CALL_MASK_WAV); + + while( rc == 0 ) + { + if( util_file_size(FileInfo.FileName )) + { + if( !iswav( FileInfo.FileName ) ) { + + strcpy (helpstr,FileInfo.FileName); + for( i=0 ; (helpstr[i]!='.')&&(i<(short)strlen(helpstr)) ; i++ ); + helpstr[i] = 0; + strcat( helpstr, ALW_EXT ); + util_copy_file (FileInfo.FileName, helpstr); + + rename( FileInfo.FileName, CONV_TMP ); + alw2wav( CONV_TMP, FileInfo.FileName, bitmode); + remove( CONV_TMP ); + } + } + rc = OsFindNext(&FileInfo); + } + + OsFindClose(&FileInfo); + + if (fernabfrage || dtmf_job) { + capitel_signal_function( 9, ""); // rufende von fernabfrage -> nicht anzeigen + remove (act_call_name); // *.wav + + for( i=0 ; (act_call_name[i]!='.')&&(i<(short)strlen(act_call_name)) ; i++ ); + act_call_name[i] = 0; + strcat( act_call_name, ALW_EXT); + remove (act_call_name); // *.alw + + for( i=0 ; (act_call_name[i]!='.')&&(i<(short)strlen(act_call_name)) ; i++ ); + act_call_name[i] = 0; + strcat( act_call_name, IDX_EXT ); + remove (act_call_name); // *.idx + + if (loesch && fernabfrage) { + rc = OsFindFirst(&FileInfo,CALL_MASK_IDX); + while( rc == 0 ) { + strcpy (helpstr,FileInfo.FileName); + + if( check_duration( helpstr ) > 0 ) + { + remove (helpstr); // *.idx + + for( i=0 ; (helpstr[i]!='.')&&(i<(short)strlen(helpstr)) ; i++ ); + helpstr[i] = 0; + strcat( helpstr, ALW_EXT ); + remove (helpstr); // *.alw + + for( i=0 ; (helpstr[i]!='.')&&(i<(short)strlen(helpstr)) ; i++ ); + helpstr[i] = 0; + strcat( helpstr, WAV_EXT ); + remove (helpstr); // *.wav + } + rc = OsFindNext(&FileInfo); + } + OsFindClose(&FileInfo); + capitel_signal_function( 8, NULL); // rufe geloescht -> neu scannen + } + } else { + capitel_signal_function( 6, &calllength ); // normaler ruf -> anzeigen + } + status_conv = 0; +} + +char *NextFileName(void) +{ + FileInfoTyp FileInfo; + short rc; + int help; + short res=0; + + if(next_is_welcome) { + strcpy( act_call_name, DEFALWFILE_NXT); + capitel_signal_function( 5, &res ); + return act_call_name; + } + + rc = OsFindFirst(&FileInfo,CALL_MASK_WAV); + while( rc == 0 ) { + sscanf (FileInfo.FileName,CALL_MAKE_MASK_WAV,&help); + if (help > res) { + res = help; + } + rc = OsFindNext(&FileInfo); + } + OsFindClose(&FileInfo); + + res++; + sprintf (act_call_name,CALL_MAKE_MASK_WAV,res); + capitel_signal_function( 5, &res ); + + return act_call_name; +} + +void answer_connect_ind (AnsConIndMsg *msg) +{ + static char ringring_file[200]; + TCapiInfo ConIndMsg; + char *help; +// short cnt; + char helpstr[200]; + + raute = 0; + loesch = 0; + fernabfrage = 0; + any_dtmf_detected = 0; + dtmf_job = 0; + dtmf_str[0] = 0; + beep_cnt = 0; + dtmf_setcallback = 0; + num_calls++; + + dtmf_init(); + + do_silence_find = config_file_read_ulong(STD_CFG_FILE,MAX_SILENCE_TIME,MAX_SILENCE_TIME_DEF); + do_dtmf_find = config_file_read_ulong(STD_CFG_FILE,DETECT_DTMF_TONES,DETECT_DTMF_TONES_DEF); +#ifndef RECOTEL + play_beep = config_file_read_ulong(STD_CFG_FILE,PLAY_BEEP,PLAY_BEEP_DEF); +#endif + + config_file_read_string(STD_CFG_FILE,WELCOME_WAVE,welcome_file, WELCOME_WAVE_DEF); + strcpy (welcome_file,check_time(welcome_file)); + + config_file_read_string(STD_CFG_FILE,RINGRING_WAVE,ringring_file, RINGRING_WAVE_DEF); + strcpy (ringring_file,check_time(ringring_file)); + + silence_reset( config_file_read_ulong (STD_CFG_FILE,MAX_SILENCE_TIME,MAX_SILENCE_TIME_DEF)); + + strcpy (ConIndMsg.caller_name , msg->caller_name); + strcpy (ConIndMsg.caller_org_name, msg->caller_org_name); + strcpy (ConIndMsg.called_name , msg->called_name); + ConIndMsg.is_digital = msg->is_digital; + + better_string(ConIndMsg.called_name,PRTFILE,8,ringring_file , ringring_file ); + better_string(ConIndMsg.called_name,PRTFILE,3,welcome_file , welcome_file ); + better_string(ConIndMsg.called_name,PRTFILE,2,ConIndMsg.called_name, ConIndMsg.called_name); + + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", helpstr); + if (!strcmp(helpstr,"1")) { + better_string(ConIndMsg.caller_name,NAMFILE,8,ringring_file , ringring_file ); + better_string(ConIndMsg.caller_name,NAMFILE,3,welcome_file , welcome_file ); + better_string(ConIndMsg.caller_name,NAMFILE,2,ConIndMsg.caller_name, ConIndMsg.caller_name); + } + + if (config_file_read_ulong(STD_CFG_FILE,EXPAND_CALLER_ID,EXPAND_CALLER_ID_DEF) && !strcmp(msg->caller_name,ConIndMsg.caller_name)) strcat (ConIndMsg.caller_name,vorwahl_get_name(msg->caller_name)); + + strcpy (fh_ziel_name,NextFileName()); + fh_ziel = fopen(fh_ziel_name, "wb"); + + if (strstr(welcome_file,WAV_EXT)) { + strcpy (help_welcome_file,welcome_file); + wav2alw_convert (help_welcome_file); + help = strstr(welcome_file,WAV_EXT); + *(++help) = 'a'; + *(++help) = 'l'; + *(++help) = 'w'; + } + + capitel_signal_function( 4 , (void *) &ConIndMsg ); + if (config_file_read_ulong(STD_CFG_FILE,PLAY_RINGRING_WAVE, PLAY_RINGRING_WAVE_DEF)) capitel_signal_function( 10, (void *) &ringring_file ); + status_isdn=1; + return; +} + +void answer_connect_b3_act_ind (void *msg) +{ + short cnt; + + status_isdn = 2; + comm_clear_all_buffer(); + + if( !util_file_exist( welcome_file ) ) + strcpy( welcome_file, util_strip_path(welcome_file) ); + if( !util_file_exist( welcome_file ) ) + strcpy( welcome_file,DEFALWFILE); + + fh_ansage = fopen(welcome_file, "rb"); + + + if (initRegistration()) max_beep_cnt = 4; else max_beep_cnt = 16; + + if (do_nerv_message) { + if (!initRegistration()) { + if (conn_ind_cnt++ >= CONN_CNT_DEACT) { + capitel_signal_function( 11, NULL ); + capitel_signal_function( 1 , msg_str_disable); + config_file_write_ulong (STD_CFG_FILE,CAPITEL_ACTIVE,0); + } else if (conn_ind_cnt > CONN_CNT_WARN) { + for (cnt=1;cnt <= (conn_ind_cnt-CONN_CNT_WARN); cnt++) capitel_signal_function( 1 , msg_str_reg); + } + } + } + + return; +} + +void answer_data_b3_ind (void *msg) +{ + long cnt; + + if( comm_data_available() ) { + if( (cnt = comm_read_block( cbuffer)) > 0 ) { + if( status_isdn == 4 ) { + if( fh_ziel != NULL ) fwrite( cbuffer, cnt, 1, fh_ziel); + if ((do_silence_find) && (!any_dtmf_detected)) silence_find (cbuffer,cnt); + } + if (do_dtmf_find) { + if (use_ulaw_codec) { + dtmf_find_ulaw (cbuffer,cnt); + } else { + dtmf_find_alaw (cbuffer,cnt); + } + } + } + } + return; +} + +void answer_disc_b3_ind (void *msg) +{ + status_isdn = 0; + + if( fh_ansage ) fclose( fh_ansage ); + if( fh_fern ) fclose( fh_fern ); + fh_ansage = fh_fern = NULL; + + return; +} + +void answer_data_b3_conf(void *msg) +{ + char cbuffer[1024]; + short readsize; + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if( status_isdn == 2 ) { + if((!raute) && (fh_ansage != NULL)) { + readsize=fread(cbuffer, 1, 1024, fh_ansage ); + if (readsize) { + comm_write_block( cbuffer, readsize ); + } else { + status_isdn = 3; + answer_data_b3_conf(NULL); + } + } else { + status_isdn = 3; + answer_data_b3_conf(NULL); + } + } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + else if( status_isdn == 3 ) { + if (play_beep) + { + if (beep_cnt++ < max_beep_cnt) { + comm_write_block( beepdata, 1024 ); + } else { + comm_begin_of_record(); + status_isdn = 4; + } + } + else + { + comm_begin_of_record(); + status_isdn = 4; + } + } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + else if( status_isdn == 5 ) { + if (fh_fern != NULL) { + readsize = fread(cbuffer, 1, 1024, fh_fern ); + if (readsize) comm_write_block( cbuffer, readsize ); + } + } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +} + +void answer_disc_ind (void *msg) +{ + char proc[200],parm[200],title[200]; + + calllength = 0; + + if( fh_ziel == NULL ) + calllength = 0; + else + { + calllength = util_file_size(fh_ziel_name)/8192; + fclose( fh_ziel ); + fh_ziel = NULL; + } + + if (next_is_welcome) { + remove( welcomeFile ); + rename( DEFALWFILE_NXT, welcomeFile ); + next_is_welcome=0; + } + OsStartThread (convert_all_alw2wav); + + if (config_file_read_ulong(STD_CFG_FILE,START_ON_DISCONNECT,START_ON_DISCONNECT_DEF)) { + config_file_read_string(STD_CFG_FILE,START_DISC_PROC ,proc ,START_DISC_PROC_DEF); + config_file_read_string(STD_CFG_FILE,START_DISC_PARM ,parm ,START_DISC_PARM_DEF); + config_file_read_string(STD_CFG_FILE,START_DISC_TITLE,title,START_DISC_TITLE_DEF); + dos_start (proc,parm,title); + } +} + +static short dtmf_activ = 0; + +void build_all_calls (void) +{ + FileInfoTyp FileInfo; + short rc; + short idx; + FILE *inpdat, *outdat; + char buff2[256]; + char nullbeep[1024]; + + memset (nullbeep, 0, 1024); + + rc = OsFindFirst(&FileInfo,CALL_MASK_ALW); + + remove (ALLFILE_ALW); + fh_fern = fopen (ALLFILE_ALW,"wb"); + if (fh_fern) fclose (fh_fern); + + while( rc == 0 ) { + fh_fern = fopen (ALLFILE_ALW,"ab"); + if (fh_fern) { + fwrite (beepdata,1,1024,fh_fern); + fclose (fh_fern); + } + util_append_file(FileInfo.FileName ,ALLFILE_ALW); + rc = OsFindNext(&FileInfo); + } + OsFindClose(&FileInfo); + fh_fern = fopen (ALLFILE_ALW,"ab"); + if (fh_fern) { + for (idx=1; idx <= 5; idx++) { + fwrite (nullbeep,1,1024,fh_fern); + fwrite (beepdata,1,1024,fh_fern); + } + fclose (fh_fern); + } + +// calls als abgehoert markieren + + rc = OsFindFirst(&FileInfo,CALL_MASK_IDX); + while( rc == 0 ) { + if(util_file_exist(FileInfo.FileName) && util_file_size(FileInfo.FileName)) { + if ((inpdat = fopen(FileInfo.FileName,"r")) != NULL){ + if ((outdat = fopen (CALL_TMP,"w")) != NULL) { + for (idx=1;idx<=6;idx++) {fgets (buff2,sizeof(buff2),inpdat);fputs (buff2,outdat);}; + fputs ("1\n",outdat); + fclose (outdat); + }; + fclose (inpdat); + remove (FileInfo.FileName); + rename (CALL_TMP,FileInfo.FileName); + } + } + rc = OsFindNext(&FileInfo); + } + OsFindClose(&FileInfo); +} + +void answer_dtmf_found (void *msg) +{ + char dtmf_char[2] = {0,0}; + short idx; + char pars_str[200]; + char activ_str[200]; + char proc[200],parm[200],title[200]; + + if (dtmf_activ) return; + dtmf_activ++; + + dtmf_char[0] = *(char*)msg; + any_dtmf_detected=1; + + switch (dtmf_char[0]) { + case '#': raute = 1; dtmf_str[0] = 0;break; + case '*': if (fernabfrage) loesch = 1;break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': strcat (dtmf_str,dtmf_char);break; + } + + if (dtmf_setcallback) { + if (strlen(dtmf_str)) { + if (!isdigit(dtmf_str[strlen(dtmf_str)-1])) { + dtmf_str[strlen(dtmf_str)-1] = 0; + } + config_file_write_string(STD_CFG_FILE, CALL_BACK_NUMBER, dtmf_str); + is_callback = 1; + } + } else if ((!dtmf_str[0]==0) && (strlen(dtmf_str) > 3)) { + + better_string(dtmf_str,ACTFILE,2,"DUMMY", pars_str); + better_string(dtmf_str,ACTFILE,6,"DUMMY", activ_str); + + if ((strcmp("DUMMY",pars_str)==0) || (strcmp("0",activ_str)==0)) pars_str[0]=0; + + if (pars_str[0] != 0) { + if (strcmp("REMOTECONTROL",pars_str)==0) { + dtmf_str[0] = 0; + fernabfrage = 1; + raute = 1; + +// calls zusammenstellen + + build_all_calls(); + +// calls abspielen + + fh_fern = fopen(ALLFILE_ALW , "rb"); + status_isdn = 5; + + for (idx=1;idx<= CAPI_NUM_B3_BLK; idx++) answer_data_b3_conf(NULL); // nur zum neuanstossen... + + } else if (strcmp("REBOOT",pars_str)==0) { + dtmf_str[0] = 0; + dtmf_job = 1; + comm_disc_req(); + OsStartThread (boot); + } else if (strcmp("DEACTIVATE",pars_str)==0) { + dtmf_str[0] = 0; + dtmf_job = 1; + config_file_write_ulong (STD_CFG_FILE,CAPITEL_ACTIVE,0); + capitel_signal_function( 11, NULL); + } else if (strcmp("QUIT",pars_str)==0) { + dtmf_str[0] = 0; + dtmf_job = 1; + comm_disc_req(); + OsStartThread (quit); + } else if (strcmp("SETCALLBACK",pars_str)==0) { + dtmf_str[0] = 0; + dtmf_job = 1; + dtmf_setcallback = 1; + } else { + dtmf_job = 1; + better_string(dtmf_str,ACTFILE,2,"", proc ); + better_string(dtmf_str,ACTFILE,3,"", parm ); + better_string(dtmf_str,ACTFILE,4,"", title); + dos_start(proc,parm,title); + dtmf_str[0]=0; + } + } + } + dtmf_activ--; +} + +void answer_silence_found (void *msg) +{ + comm_disc_req(); +} + +void answer_sigfunc( short num, void *msg ) +{ + switch( num ) { + case 1 : answer_connect_ind ( msg ); break; + case 2 : answer_connect_b3_act_ind( msg ); break; + case 3 : answer_data_b3_ind ( msg ); break; + case 4 : answer_disc_b3_ind ( msg ); break; + case 5 : answer_data_b3_conf ( msg ); break; + case 6 : answer_disc_ind ( msg ); break; + case 7 : capitel_signal_function ( 1, msg ); break; // warnings + case 8 : capitel_signal_function ( 2, msg ); break; // critical error + case 9 : capitel_signal_function ( 3, msg ); break; // fatal error + case 10: capitel_signal_function ( 7, msg ); break; // converting wav2alw + case 11: answer_dtmf_found ( msg ); break; // dtmf_found + case 12: answer_silence_found ( msg ); break; // silence_found + default : sprintf(help_str,"ANSWER: Unknown SigFunc: %d\n", num); capitel_signal_function( 1, help_str ); break; + } + return; +} + +void _Optlink beep_thread ( void *arg) +{ + short i; + + for (;;) { + OsSleep (beep_on_calls_delay); + for (i=0;i-@q@8vpLyQ*nRh;SXYP^VPwh!062hc}SRs}etgUs=Pz*g{mAKVNV;r0R%jigT zvNbn%`HQl$*xGS!VZ@>5&3A6xxbgDJ4bqe=7ds(}R(+wjI{D6}h1&NwQdU`PcW!Hv z)P2!LQTyp8`d=Pyy$e9|6-GpRmBr5LSZms$KW+uVW{f`ecR5>|eD#KOJoqQZM=Oh~ zt0!BZeEeXG5IYiUF4s!e#w)M=GmchS*gZeAAub;JOvekCM{CcV!i=ORs#_PY9VboGJu2bTt2Q-3{tG&8wys)k{py~za@mfEi@b~!u$OaJH} zHGa&XZOS?x{KwkN^jgLVq1#kG*;Ibql%08$oUie5hL3Z`QMtIz`2{V%`>Tdv&t>FQ zz+%eZHs#92_G5`-iKS(W_viVJxzkW!SJp~TjK`G@9vXM{nE}NXC};13O04a8^r^bq z={1Uj)eq1$8Y|})YO}LcT5h&(=U#_oQRaCo9cf4?+ay|9Loz!HSsj;9~2zbJXaru5Q|YjL_&SBEGeY+543zB$S-GQ+#Lwj%-#-r0 zE4v5tSsB9XWy53}4Cz!-q^zPFsl3c8%Z}U`D^l6@4PzMj#V}?Msl1RmKagYl_Z{q& z<0=SU-;-i6xow-=r6NnT3A=p%K&0%X?H5od2qWdm3Aa#Cfk^qq6M;MJM6$=;EVpdi zc5mN6fB%r2Iw874iGR7HJKWhO%DJTw6DsgjAonQ86Jy?S&o6t@uJ<+*y3@ImXK$C? z**4MEw#SOByhIuf0`w8)u#NT!EAU)zT7FuEp*5`<_Eg|TF6QlKJ-U%hCQ-4h@)(0k zTKO`9r1E~qAlfa~9v=7vrd@RR4`e^ucu1DEHy)Vnuvg{+zkotdx4l^i_U}I=%gZt} zQ#=Q4j6D*d$8vZyB_m&2Q+^OhjB8VB6S5gX|!8B4?0Cksmfy$t^e2Ay8DQD@4-sBb7wkePLwT#|2-Og7P9x&i|M`1RcHu;ufvH zANbY^O#q#`xEA=HC9{yLggA@wx5LKzE0KAn=+@kX7=nX-lc;0*2r~6Xx79f4L^70T z7V8hth(ukfDIkl?AJ=GfXK_M(xk<-(q-l*@I;J5U_VqhZott*|gEo)%*O&;NDI71V zG{$=f<)&tYLuXSmzGJYNGTqeidux*M-42796Z)#qg+>H4I-(f^-Tm0WMHqNYaxZfn zTsw}TIo`K0fRiQ&d`(5LrPOR+Dc<7o&`8T}l8E2j0^2jQSg*1|#MgzU`ewHo|IL%O z;-;Brytc;el>NFLmiRh=auN9sjABDQRQ%+)xxY*zA4I11eaO^*5_l>u*ZCC6CQ(0) zd=~jQGWDManneGsAwcpcktI6Eky8IGupj&m&A$U20bi&2Pk<(|{yAhG&OVU!e+m2( z_*XUm4R99g``I{VLRS1s8CRlw&k zgBwW{_^4fq!bTk!J!MB3*UO5?Ehv%q(L`J_jYBe{f~Zkt=?>E{sfXQ2#E;PN%V%Q$fzMm2u=9c%*tmWut~)QM z32avW2y4MNfj`<>@KWv8_I=uJYtH>o{j9b>qxm<;v4OZ>Td>(*CB7HmAgp%+uXzWM z@jph6`a8&>pV0h><__`wLYyF?AG6v&M~?bWY5uh4r!{|0^D~-1PmcKC)%<%Jf28qe z8ZQ7D_vf1bO5-a;^!ruqf14bir(5vuvHy2!ybH+sk{lo0er@+Oeuaob^E9vpFa2}G z)k2)19r2$hM?ZOnlK+4l@m?ffBg9MO_{H%@;s=FzgLbrkl^nWjL>%6KrycFzhEH&d z6ru~5SdVoj|1iFL#JjPsv_m&RM4ThE?Go&yqkzkd4Pz!#bM&DLS%_N o6p<1ruhhu9135y*h$dp}(uk>!Ils5mNsSnC%zHHUYV6neFL_4XcK`qY literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/ACTION0.ICO b/capitel/source.os2/BMPICO/ACTION0.ICO new file mode 100644 index 0000000000000000000000000000000000000000..b5a40782e9f6230298073ffe83d1f99643153c4c GIT binary patch literal 362 zcmbV{p$@_@6h$vd1!5tS1OuOd#lVu)@GFRY0@UI9O*qUFeqo9)M*UK6HJyyouo z?zXROyI)9}G7hjpwN{!isGM^<=8rM2NuA}PC=>)-u%|ie@|>IN$I**BA$R VFW4E?kh?;bJM*^OKGc`Rd;k%fKo@z%4{K}Jgh^-cHVdjfTnL(NN#}R$4PXJe3 z@Rr}SAGqU$vj`lU!>Ea_T5DI{(TB-JlKlh-iQs`VL)*>r;v7raf~6#8Ye$2jwR%@X!QKp#XbUYqkWm`n>wDGUKVTlAO7$-nw?PuKCHZG<^TWy literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/ADD.BMP b/capitel/source.os2/BMPICO/ADD.BMP new file mode 100644 index 0000000000000000000000000000000000000000..306957dce7cb0671ea0953c8272f2e0696345cca GIT binary patch literal 290 zcmX|+Jqp7x4255zV7HV6N~a#DWGa+iAxH4mPO-OW%E@wwOd*>+6tY>BoYDv4eHOBQ zZjUQ~BM!KWpCm3gV~4#ELWxi;$SbJEab(FexR|(*h>9HE1W>RlmE?hF*t^L~J-NjE>(eLW*=_x6UOlhd+*%hg hB*V4O=gA4-&#O?$Hw`CURu0q}sa7UENKv`O#$SMKd6@tJ literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/CALL0.ICO b/capitel/source.os2/BMPICO/CALL0.ICO new file mode 100644 index 0000000000000000000000000000000000000000..e606d9ebd7d48e9103b1b05b1aa089b77bce827b GIT binary patch literal 896 zcmbtSJ5B>Z3^gIZ5`|5K(ttn-UHWu15uxG&6dYoqL88l?V8oG-Xmg0IqA91`pw*gZ zkC%u~19;_mp63}m^PI)il!%_-V%ImPSTlSP*oO~kLOb|i%)HG%fJ*rxvR%nLb*JF4 zb7HI2ior8(3jn1K^FsTAB3#~0b$isKXmv+4{nl6V&z;nFM590T)sFvIHh4yamrHYr zg~LA1h${U48uc4EBj#6qwLV`Z_~@Ox6s|);UnC5r?Onpm^0_x61X3#ZzECQJb*X2) zSNPqcv%{6{Ig}kI&jc~v{-OB=5XyJ=zSgceQnic}=XF1h#j8BdWe zhGzFn#}js)3BMfOa(O~rUEVRjnMY_O|GH0RZx=34kJWV6iY9z39OA4MPkD#c44R4Q v1bh-w<18i8WRS>RIzt198Z4$pl(y+fqO_O>+_Y!5^)<3yKg4Io2^`Qn3fjV| literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/CALL1.ICO b/capitel/source.os2/BMPICO/CALL1.ICO new file mode 100644 index 0000000000000000000000000000000000000000..df3b5acbf336c61311824918fe01395db86060ca GIT binary patch literal 896 zcmbtSJ5Iwu5S=6_u|i~9!WBXUi6$jChzM?|=yM1wC0+Ie7DvhfatK$E%PmrXgc#o2 zS=$nHFxKqMy!qL0y?I=T$Saic^n8so!Q){U&|L0hga@LkLw*Oy@;R~>%)6j27>CGF zj>n?{S9H_Ba*paI>;)ufp4i;E%*DsKg{*$r zrO06k0n4?6-r zhMjpiOn3Ml9?+0?ZP5pYIyXTL>e&B7A~!_S%Js>lBaL`R9Q>qh`kJ%`IbGCd%Gr@h zBNQh|WC{OEEkPhIMHSq_*J*1$i?F=MlT*|C*;lAJgLDoeKKKYZGw#Kd@OhxIm+kf& DcDLrE literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/CALL2.ICO b/capitel/source.os2/BMPICO/CALL2.ICO new file mode 100644 index 0000000000000000000000000000000000000000..54bb8f213c5d294a70eee8d52383a16bcedfb0b8 GIT binary patch literal 896 zcmbu7Jx&5q5XT2GutBm*B9$>>VngW-h*)_A4nZjGcqJ8jBo4qKwjx`;5)YKB zXs5H8H#7hF+Wo&>KFvks6*YN&x#7%sB6f^U$y{z|JrN$_Y2=UmFb`Mrj7qNKKP7?mRqzyhv=2a zVFm%$3{F(l3(W6>lRGTDuUnl5_fM7E{n~9+7V4hbB^X`FoZrkAij5T(iR<9;i5|oE z;JaPwv)KBa_~dm5FD&C**U`#u+{JFxG+}p+TP`=8`W7eW^2xIEHcDKevsxdpJ@5 literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/CALL3.ICO b/capitel/source.os2/BMPICO/CALL3.ICO new file mode 100644 index 0000000000000000000000000000000000000000..0dfa761829d81aafc9d87c149c4ee8ab98bf3567 GIT binary patch literal 896 zcmbtRu}%U(5FPRKPJ&3xH5v`r(bL&ngo+=q;3G~Nb9RiCREHnNM^KR~w-XF;eY3MG z5fV*wHgDhD%XOk-!Q;pqTmca z9?*l2_cQ7{h(7>u{uyu*eD!Y15!kX)E^}qw7@ z@4bL1E(-bl!6KiFuAyvOkqBeFjT4U>FqDsub_;E+q1D8Y$u zXX-sLop+dO!0A2H1#xma;`aN9GXOO#YVDZUMxssB2$lrVB>r7Ee?)W%dT)JefAKMt pa7KCrA3Zqu3Dj1f=*)ijGqX2otZ_F0@4F$0UxYzi`4)8B+uke68B3mT}0#lfB_#((cCww|NKA$iB zX$N4#I+M5T4hO7QgoyObzcs(3yH?-V_LV%9SA-CRb75MEtaqxQ{vUcl`*j2!dmuXC zYJOYi>g(QJfak>AW$9l7#tBn$<&;w7V=S$-z FcmsWXNtplu literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/CALLER1.ICO b/capitel/source.os2/BMPICO/CALLER1.ICO new file mode 100644 index 0000000000000000000000000000000000000000..856d39ac780b4d9ab893f6776a9341054ba4e0da GIT binary patch literal 362 zcmbVGF%H5o3_K*HbU>mr3;cwk6JKHKmTbvJH=e*(ct9S(%z$8OHggx1E--P?>1?0v zxI1hBG<-+uifpmNf{!q>Zual9-_l*mPnD@kVwQxQv$1ZRmQb~)Cd~hbHi%^pJh#AY z4P4zfRhO^6hXJq1xy!GA8y{*pSm_x!9ywA6^RXl#7Ar<0>U!yTK1qiXgZxiFrg=>J N9C(%Bd#x25gEtzoiiFDov1D)m20)<2oBiahpaYAb|QSDp~3W z=to>du;T>?L>2-s&pUfZ5tbA; zCw6Xod{EoAJN~bF{|Vk#@<-?BBBDjn-Q8V_y`{GVQhD0;jn{3kiBjGJJFuEms(WOo zPwL7azwZ4nSg>-C@*Xnd59cd?v-KZ-LS3KiE89==Jz|#SFx5S^-=5T! zzxk&3Ydu&TV`atB1(Fu@(mE6SMQMF*`)hOFL+(X*cR=XfgwFrGH9I5bxHija4?p02 z^t~OHt{7tTw&$Am+K&B<=?8b)Y&D(1eAqTa8dbw5og-;#G&vu7Sq)divMS#pq&Im> z13@5d&zc0y5JGONp$>Mbm=NQ&dXfb*eI@~GNfz^>+O1W-vUX)vTas}ynJA;iNYeg7 zFq|zB5f`HQ)?`!BWq~2!?){^!u9WS)>({iJ=`_o-sq5nz6c%;8SS0=G>dMUhQT^o~ zjDiXd2nb{R`8>lFN3P?~?!#bI)Nk)Qe_R$}Ik#oq^`F^BwDNrPSA~wk_?>7SdtKv) zUeeP9AN^goFD0}^&eqt*O8Cc%4ezD+*1rEWA`>56XiCu}zeB#ZIDCNrw%h!#l;hd$ zeljzTC;J2S9&Jt0DcWakqe%9?oy9o4l#!(kix3uSk2$8((KK33`znrj*an5{vzuk1 zFP_Nmd)GwSXZaG+4docz5Xy{l(-v}3{XO^1Q~N?c&yeut^O0`!I_I+TZZ`WcugMy| zg`=2K&T8Xlw9dE3KH6snl65N^x>eQH_EqGDxa4ZEk{r;>w{#y5MuTEh*f`r1{Mq=% zSBUjVxmlY^1K2&&$@Bm3XIKH9cU_2w*LK1Yum`x8Y`5!@5#|Uu^|Di4#7^0f{71t% zGVA1EsD3qE!K!lx*Dyy(aUjRX$n$NS#-)DB`){(3)4UYd)jMmG{;aGSp8Q-(mm7vH zy+?x<y1QC3>fVGkh(Y7%!vEWAN zR+WNgGO2?ShRMXiDGky`*n*!?Jpv=DQg8)^25AH<6K-&oxa(2{C_#3sN?|QvtI<_r zP?t_5oTwm0-~_`IcF-kHde2{ch!x5E=`=4ivySv?K$j!w9`zW<>#((D9!A`bO=|(& zcQ#kLxM^p556I4L7ChV(pQpZm2uEW!W#%MJHpTHQcY%~;EQ$lFQ^thZ6OY^6hguQ! zM!22gmh(W!C`8~JTZ-EhU;q&R7S^fiW(LQeg literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/DELETE.BMP b/capitel/source.os2/BMPICO/DELETE.BMP new file mode 100644 index 0000000000000000000000000000000000000000..016c2aa5f78dc7a01b43ac4c18ff4bfc12b43635 GIT binary patch literal 290 zcmYL@I}XAy5JU%wA|MnbM8$C^k+=(;-QmttB^S#fQsxNhmf3X_R<`DO_UGsO0pN@i zUeb&19XA|s6rsc|Aw{p^F-?=nH&}>Nq~IRFjuda1vi!Lp#N*1ESeChQX6}bhOiQe? zy*Jq!wzzUMer%>Vv)Wp$Yplf8SB9T0wl`MC=BGrB@|wz;`Spa)r;h*K_o_zA8;c@< EA60^TDgXcg literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/DISABLE.BMP b/capitel/source.os2/BMPICO/DISABLE.BMP new file mode 100644 index 0000000000000000000000000000000000000000..e69f3bfa1703d21e81d761e5a224151f49fb345d GIT binary patch literal 290 zcmX|+F%H5o3`LE^5D?0Mm^cn25_e!i8~~}=>@Aim^*ZzrJw&&5V@xN^cMw={{OtHU z$?0+=qAhLcjJSgzXiqCzgGj1N4T4PEhG8(&jjRSl5KR9@1kA}dt;_|?2~2@4X*RIT z^JGPlgS)O{YmkC5E5nm(V~jX}92~}RGArUt@y-TmK>zKUtze-pui59=Qc$S{CrHqMNe#vp^(w>)7}0ALDFULoVd>?_89v;8$~2kGnKP6B`<(YT z|L1w1=lFS{(8~Y-zyi_8L@>47q=Buz>rwx3fB*>J9TP)c8}m<7 z4KRnZ0blL4+I?+=W1?afh22yM9^=eiah5ZtJ%G%A( z-SVEWt^f3IHqTu4Y`=GlC=@v<=_!#!!?Mu5C1rYnUlTK2#hd<-Tsjsu8M8z2%Bp>! zd*c(@&;~rBMP?T8z}8E~MZF2>degVd*6)9SdeMm>OKbbfeTx9mG!u{%u<`kk*hwWs z@RnKf#TRejLX4ciYF4FMR8}Ug za9MygsD_p0F=(?GmYwFpawMr?ZAmAs_|74rvZTrNYB3{9A~+~15=SK6IbKjx_l0hf ztDy9caJKFEv58^H^PG*{l67l2w5<&k`%qn1Z_29pQ9;Aa+;EeW+;1r|+P19qYUW7+AFtWW z)6qkrQ1mC%PhV}m9xE-qk?eO#QJ!((+5N)7$M@YM5Su6P-zd!K#mmmi@cOc^yq5bH zmwNM3vGg3rtGPQn8|2GUAZb zEM+qstvdAlui@I?)OEHP*>&QkAANe_%&L82atJYx=!p_@v1@{lv9&h-N(tawVOivf zao=5-&l`L7Q~wZ6siqJMxDYi_;OV;49ifmK6%`r7(a<6;1rkP&hJ}VIfK9fb6eU8s zip4@?1kIiok2<~=Xyz#-Wpq_KQf2f$vrZLipvwgTfxN%>6^gZu%N<)O|Ig5n@;5N+ z-GH+YNeR7P^v~R2j&VJ~e1Ih1LPBG`AZT>eXkK&me8Lx@(O4_}6*OxtCQz)8@%SDH z8m$gw)+l(LToucVm|;UUI0uYaVUUMvfCb}>V-rDF`;TN%^K^97B`7Y|CXUV4SnK$B z)AV>$Y^O5@gV|I0SXuG=ktUOvgZ1Q*Y#hm$R9t&#rV24D6qNSr)n(OZ0xzH5idVL; z;R~#L{CO!6Bn&m<`5T{xY!bt1xN~H)iqD~45`Jb+4Vfgdl?lhb&FX*Mrg{XikhD4p zOidJF|2)(dAZe_L0{Ju&l14xm9O5qXtR8mUc1pDC!B7wPUSZJ?P4HAAB8J&~y}q#T z?Xze$V}!SVin-(Ycg>{_^=wuchodtuc(R<#+gH}gZq)Ox{xU+C7VLeL_xopWr{t!% zHSN~1a-EbQvA>HMqvaeSQt+=pmsAL@5Ov1kWYI6bf@B;gX7>S&byOgKuA?kqF_}!M zgTPbrn0rRT`NX1PvW=)07rg(#D#ykhECUIy@h*|xO(^MUVAYthhb=-*a*S{HKj!JO@jplGy%)NMAZKqM3jB?*Q{ zCcG~5xz8U@RmFA`-1Pgrx1zqbF9CVif$?Jk`R9zI*~?F$9Qkz@opf?A8~B!K{T=q_ z(WU}(Pp6;Iz3lR2xwE|DscCgk*(k&+#cHe6uJ#@Gou@L>0qu(n*I1|gzqL6Oc}|f= z9f`s;rGZMk?!%%J9@_@KBzb@yjs`a&Ww=Jo;iH|()PN5;XskK@5{D`h_zUUIfniKW zBck_7yj(fr+;i)sCB`IZXJMBeghr6M`5V}jeUAyrl>~0w-=~{VAXU}3DWI>*B-hbU z(V`96`<9u#BM;~=-uvIi3bT9H0#{CUpS{@uoL#5hI|513Ug~88R_%eA4+!wmXReS} z6X@Aj6HqyPRENsV5OeZ*lyEtGc!kP+k#q9-Q5G(Tk8@CY3JQP>cW^a);(@A5(X;9$ zA00jbK-FDZ000>W;KAWdGE}b6o|7*b9o|Jkqa9JSSfiT}y2U03fTsO=?%?>(1Q$7c--4{Qv*} literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/PEOPLE.BMP b/capitel/source.os2/BMPICO/PEOPLE.BMP new file mode 100644 index 0000000000000000000000000000000000000000..cddbc6099c2308e927ac551404356bda22341250 GIT binary patch literal 290 zcmX|5y9&cF47@_YZYc?rPW_yYh5n1TWJc5qbd7FI=ZVcXn&feTDbB_wb;2Y5nyp M+U_=8UhW?N{;F_zA^-pY literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/PLAY.BMP b/capitel/source.os2/BMPICO/PLAY.BMP new file mode 100644 index 0000000000000000000000000000000000000000..a7e930300c901074a8575c9eb8e89c34e0e61345 GIT binary patch literal 290 zcmYL@u?hk)5JX21j3OS0m7gP53F0TYom=UT4%8KUiw$O&lOWL&BD{&$FbqcDU?EfzOI@ytMmcEjQ--LJTbugU@T$zgd@G*@ z=skbYXHPyyUduZF^5f|2`TLaVM?O8qMBnq4q!jTCIg2XaX?>B*PkE}Ztbgu0X2SP9 Ot*Pw$!_mj1D}MnI%zjn? literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/PORT0.ICO b/capitel/source.os2/BMPICO/PORT0.ICO new file mode 100644 index 0000000000000000000000000000000000000000..a524d0993eaeb9d0fc7f2bf428439cd40f5825c6 GIT binary patch literal 362 zcmbV`u?@m76huD)g%pvKng%wZNW~VeEW{M9C_PgK@DQ$$MFSIH-nW#93M9@xpYBfI z_ITQfNXxpQ9USB!D;6lFj7xuC`hj+%y|46DJkBd(jD@@~t%B-3)!_e!-k?lJk!cTm zxW#{PT9ZM|p7is~*Vj!5LBG}JoGse(S*JltxoR-xs$OnqJsa0pXGP4*vI!ml`GGeA CnnW@H literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/PORT1.ICO b/capitel/source.os2/BMPICO/PORT1.ICO new file mode 100644 index 0000000000000000000000000000000000000000..7409b202bcbacb263bee29d8907a9543284d2340 GIT binary patch literal 362 zcmbV{Aritc6huD*GeIyzH3n{isNyOpT>R`1W^JKwmB7 Gb!8?m=ToWx literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/PORTS.BMP b/capitel/source.os2/BMPICO/PORTS.BMP new file mode 100644 index 0000000000000000000000000000000000000000..1bd896b6b81e8d788344914278b0f3a7c8bacdde GIT binary patch literal 290 zcmX|*K?(yQ3`PGy8Jtoqlv(vST^4!=SJGp+Dy}@4hnQ7yH#eyLNn}21eqvtq@wx*z zW5JX0!oA{#2`4%v-AO}YmPEDI&U#1Jz(_~sLk3z3_)?0~1aPgjF#MHF)C=}+TRVL5 z{=)}ymO0L3r_$^1~Z%b>l~m@S{h09{NQ+fIoH_ BXRZJM literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/ROTGRUEN.ZIP b/capitel/source.os2/BMPICO/ROTGRUEN.ZIP new file mode 100644 index 0000000000000000000000000000000000000000..fbb72c65a38e3206fa4def5f14bfa010ec6075fb GIT binary patch literal 639 zcmWIWW@Zs#U|`^2c;3B3;m4i4hx38FEJg+fAqF*u^rFVR)Z+Mzmh9w=)I7b+H&D*ztDf^^xo*SOPiuAwTD>t0*7Eo!{D0mL zzc)rdl0>FI@-yUNejIjvTY)=&{n77CSCS7Gv)^f*LKSH(#@XfU%a4tk%IhEB`x9^ZUadFZhqA(^UTA zPGRQXiSeEp&#j7T%J;ed-^0A)Q|}e&n-3ei`VBVk`|k!7llYdz$cD^ETVFk?VT?Q5-nHNMYu2;pyM#8~ZM!Pj6v=TZaq_3+9fy{@32n^0 zxOm?0Q!)37-<&NsDhu#tWD;S+6|)>b?}C5=!?s2cjV+#8!10W14rX8>oAVWD4%VQ9 V8N|v4vWf`^Cj#jkz$C`N006TD<@W#p literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/SETUP.BMP b/capitel/source.os2/BMPICO/SETUP.BMP new file mode 100644 index 0000000000000000000000000000000000000000..774f1e8d498c05ce77a053b4e25e28729364af1d GIT binary patch literal 290 zcmX|+O%B2!6okj01+69~#+66l7%ojbPfc8uU5Q=v3Wif~h#rQW>~J2hb^^@D`8ESx@wL)Cz|KEFfS<8=p@Ro0=#!VS5=-=nx~vn%9^7ehGEkD zYvjOEf07fL|LBgTHBDH(Zsk7VMl(AEYiU|W+M$U@49Yf OiHt1zS$RRY+QL6u#c#I& literal 0 HcmV?d00001 diff --git a/capitel/source.os2/BMPICO/file_button.bmp b/capitel/source.os2/BMPICO/file_button.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c4c9cd0ce40fded825d1be0609330d49006d84ba GIT binary patch literal 186 zcmXYqu?>JQ3Fb*XWJGrC^i)9GPbT9$o-{CCleJ<>EUjR(3jXARuYrx0} z9_@k literal 0 HcmV?d00001 diff --git a/capitel/source.os2/CAPITEL.H b/capitel/source.os2/CAPITEL.H new file mode 100644 index 0000000..b4a5247 --- /dev/null +++ b/capitel/source.os2/CAPITEL.H @@ -0,0 +1,119 @@ + +#define DefCntrFont "8.Helv" +#define Defv4CntrFont "9.WarpSans" + +#define FCF_V4_NOTEBOOKS 0x800 + +#ifndef FCF_CLOSEBUTTON +#define FCF_CLOSEBUTTON 0x04000000 +#endif + +#define UM_FLYOVER_BEGIN 1054 +#define UM_FLYOVER_END 1055 + +#define UM_WARNING (WM_USER+1) +#define UM_CRITICAL (WM_USER+2) +#define UM_FATAL (WM_USER+3) +#define UM_PLAYWAV (WM_USER+4) + +#define ID_FRAME 100 +#define ID_TOOLBAR 101 +#define ID_STATUSBAR 102 +#define ID_CNTR FID_CLIENT +#define ID_POPUP 103 + +#define ID_BMP_CALL0 150 +#define ID_BMP_CALL1 151 +#define ID_BMP_CALL2 152 +#define ID_BMP_PORT0 153 +#define ID_BMP_PORT1 154 +#define ID_BMP_CALLER0 155 +#define ID_BMP_CALLER1 156 +#define ID_BMP_ACTION0 157 +#define ID_BMP_ACTION1 158 +#define ID_BMP_CALL3 159 + +#define IDS_GENERAL 200 +#define IDI_SETUP 201 +#define IDI_EXIT 202 +#define IDI_TOGGLE 203 +#define IDI_HIDE 204 +#define IDI_REGISTRATION 205 + +#define IDS_HELP 210 +#define IDI_INFO 211 +#define IDI_README 212 +#define IDI_WHATSNEW 213 +#define IDI_LICENSE 214 +#define IDI_ORDER 215 +#define IDI_ORDERBMT 216 +#define IDI_HOMEPAGE 217 + +#define IDI_PORTS 220 +#define IDI_PEOPLE 221 +#define IDI_DTMF 222 + +#define IDS_CALL 230 +#define ID_CALL_PLAY 231 +#define ID_CALL_DEL 232 +#define ID_CALL_REC 233 +#define ID_CALL_PLAY_ALL 234 +#define ID_ADD_CALLER 235 + +#define ID_POPUP_PLAY 240 +#define ID_POPUP_DEL 241 +#define ID_POPUP_PLAY_ALL 242 +#define ID_POPUP_ADD_CALLER 243 + +#define ID_RECDLG 300 +#define ID_RECDLG_OK 301 +#define ID_RECDLG_ENTRY 302 +#define ID_RECDLG_CANCEL 303 + +#define ABOUT_DIALOG 320 +#define ABOUT_OK 321 +#define ABOUT_VERSION 322 +#define ABOUT_REG 323 + +#define INCALL_DIALOG 340 +#define INCALL_FROM 341 +#define INCALL_ON 342 + +#define ID_INCALL_START 345 +#define ID_INCALL_STOP 346 + +#define RECORD_DIALOG 350 +#define RECORD_REC 351 +#define RECORD_STATUS 352 +#define ID_RECINFO_STOP 355 + +#define REG_DIALOG 360 +#define REG_OK 361 +#define REG_NAME 362 +#define REG_CODE 363 + +#define IDD_MSGBOX 364 +#define IDD_MSGBOXEX 365 +#define IDC_ICONSTATIC 366 +#define IDC_TEXT 367 +#define IDC_CHECK 368 +#define STR_OK_BUTTON 369 +#define STR_CANCEL_BUTTON 370 +#define STR_YES_BUTTON 371 +#define STR_NO_BUTTON 372 + +typedef struct _CallInfo +{ + char caller[255], + date[10], + time[10], + calledEAZ[255], + filename[255]; + unsigned long seconds; + unsigned short heard; + unsigned short digital; +} TCallInfo; + +extern HPOINTER iconCapiTel; +extern HWND hwndFrame, hwndCntr, hwndToolbar, hwndStatusbar; + diff --git a/capitel/source.os2/CAPITEL.RC b/capitel/source.os2/CAPITEL.RC new file mode 100644 index 0000000..06216b5 --- /dev/null +++ b/capitel/source.os2/CAPITEL.RC @@ -0,0 +1,532 @@ +#include + +#include "capitel\source.os2\texte.h" +//#include "..\..\common\source\texte.h" +#include "capitel\source.os2\capitel.h" +#include "capitel\source.os2\configrc.h" +#include "common\source\global.h" +#include "common\source\version.h" + +ICON ID_FRAME PRELOAD capitel\source.os2\bmpico\capitel.ico + +ICON ID_BMP_CALL0 PRELOAD capitel\source.os2\bmpico\call0.ico +ICON ID_BMP_CALL1 PRELOAD capitel\source.os2\bmpico\call1.ico +ICON ID_BMP_CALL2 PRELOAD capitel\source.os2\bmpico\call2.ico +ICON ID_BMP_CALL3 PRELOAD capitel\source.os2\bmpico\call3.ico +ICON ID_BMP_PORT0 PRELOAD capitel\source.os2\bmpico\port0.ico +ICON ID_BMP_PORT1 PRELOAD capitel\source.os2\bmpico\port1.ico +ICON ID_BMP_CALLER0 PRELOAD capitel\source.os2\bmpico\caller0.ico +ICON ID_BMP_CALLER1 PRELOAD capitel\source.os2\bmpico\caller1.ico +ICON ID_BMP_ACTION0 PRELOAD capitel\source.os2\bmpico\action0.ico +ICON ID_BMP_ACTION1 PRELOAD capitel\source.os2\bmpico\action1.ico + +BITMAP ID_CALL_DEL PRELOAD capitel\source.os2\bmpico\delete.bmp +BITMAP IDI_TOGGLE PRELOAD capitel\source.os2\bmpico\disable.bmp + +BITMAP ID_CALL_PLAY PRELOAD capitel\source.os2\bmpico\play.bmp +BITMAP ID_CALL_PLAY_ALL PRELOAD capitel\source.os2\bmpico\playall.bmp + +BITMAP ID_ADD_CALLER PRELOAD capitel\source.os2\bmpico\add.bmp + +BITMAP IDI_PORTS PRELOAD capitel\source.os2\bmpico\ports.bmp +BITMAP IDI_PEOPLE PRELOAD capitel\source.os2\bmpico\people.bmp +BITMAP IDI_DTMF PRELOAD capitel\source.os2\bmpico\actions.bmp +BITMAP IDI_SETUP PRELOAD capitel\source.os2\bmpico\setup.bmp + +MENU ID_FRAME PRELOAD +BEGIN + + SUBMENU MENU_GENERAL, IDS_GENERAL, MIS_SUBMENU | MIS_TEXT, 0 + BEGIN + MENUITEM MENU_ACTIVE, IDI_TOGGLE, MIS_TEXT, 0 + MENUITEM MENU_CONTROLS, IDI_HIDE, MIS_TEXT, 0 + MENUITEM MENU_PROPERTIES, IDI_SETUP, MIS_TEXT, 0 + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_EXIT, IDI_EXIT, MIS_TEXT, 0 + END + + SUBMENU MENU_CALL, IDS_CALL, MIS_SUBMENU | MIS_TEXT, 0 + BEGIN + MENUITEM MENU_PLAY, ID_CALL_PLAY, MIS_TEXT, 0 + MENUITEM MENU_DELETE, ID_CALL_DEL, MIS_TEXT, 0 + MENUITEM MENU_ADD_CALLER, ID_ADD_CALLER, MIS_TEXT, 0 + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_PLAY_ALL, ID_CALL_PLAY_ALL, MIS_TEXT, 0 + MENUITEM MENU_RECORD, ID_CALL_REC, MIS_TEXT, 0 + END + + SUBMENU MENU_HELP, IDS_HELP, MIS_SUBMENU | MIS_TEXT, 0 + BEGIN + MENUITEM MENU_README, IDI_README, MIS_TEXT, 0 + MENUITEM MENU_WHATSNEW, IDI_WHATSNEW, MIS_TEXT, 0 + MENUITEM MENU_LICENSE, IDI_LICENSE, MIS_TEXT, 0 + MENUITEM MENU_ORDER, IDI_ORDER, MIS_TEXT, 0 + MENUITEM MENU_ORDERBMT, IDI_ORDERBMT, MIS_TEXT, 0 +/* MENUITEM MENU_HOMEPAGE, IDI_HOMEPAGE, MIS_TEXT, 0 */ + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_PRODUCT_INFO, IDI_INFO, MIS_TEXT, 0 + END +END + +MENU ID_POPUP PRELOAD +BEGIN + MENUITEM MENU_PLAY, ID_POPUP_PLAY, MIS_TEXT, 0 + MENUITEM MENU_DELETE, ID_POPUP_DEL, MIS_TEXT, 0 + MENUITEM MENU_ADD_CALLER, ID_POPUP_ADD_CALLER, MIS_TEXT, 0 + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_PLAY_ALL, ID_POPUP_PLAY_ALL, MIS_TEXT, 0 + MENUITEM MENU_RECORD, ID_CALL_REC, MIS_TEXT, 0 + + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_ACTIVE, IDI_TOGGLE, MIS_TEXT, 0 + MENUITEM MENU_CONTROLS, IDI_HIDE, MIS_TEXT, 0 + MENUITEM MENU_PROPERTIES, IDI_SETUP, MIS_TEXT, 0 + + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_PRODUCT_INFO, IDI_INFO, MIS_TEXT, 0 + + MENUITEM "", 0, MIS_SEPARATOR, 0 + MENUITEM MENU_EXIT, IDI_EXIT, MIS_TEXT, 0 + +END + +DLGTEMPLATE CFG_DIALOG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG MENU_CAPITEL_PROPERTIES, CFG_DIALOG, 55, 24, 392, 195, WS_VISIBLE, FCF_SYSMENU | + FCF_TITLEBAR | FCF_CLOSEBUTTON + BEGIN + DEFPUSHBUTTON MENU_SAVE, CFG_BUT_SAVE, 20, 4, 50, 14 + PUSHBUTTON MENU_CANCEL, CFG_BUT_CANCEL, 75, 4, 50, 14 + LTEXT MENU_HINT + 0, 140, 10, 250, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00FF0000L + PRESPARAMS PP_FONTNAMESIZE, "8.Helv" + NOTEBOOK CFG_NOTEBOOK, 0, 20, 392, 175, BKS_BACKPAGESBR | + BKS_MAJORTABRIGHT | BKS_STATUSTEXTCENTER | + BKS_SPIRALBIND | WS_GROUP | WS_CLIPSIBLINGS | FCF_V4_NOTEBOOKS + END +END + +DLGTEMPLATE CFG_NB_PAGE1 LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", CFG_NB_PAGE1, 0, 0, 300, 125, NOT FS_DLGBORDER | WS_VISIBLE + BEGIN + GROUPBOX MENU_DEFAULT_BEHAVIOUR, 0, 5, 5, 130, 130 + + AUTOCHECKBOX MENU_PLAY_RINGING, CFG_NBP1_RINGING, + 10, 115, 120, 10, WS_GROUP + AUTOCHECKBOX MENU_REST_WIN_CALL, CFG_NBP1_FLASH, + 10, 105, 120, 10, WS_GROUP + AUTOCHECKBOX MENU_CONF_CALL_DEL, CFG_NBP1_DELPROMPT, + 10, 95, 120, 10 + AUTOCHECKBOX MENU_IGNORE_EMPTY_CALLS, CFG_NBP1_IGNOREEMPTY, + 10, 85, 120, 10 + AUTOCHECKBOX MENU_SHOW_DIGITAL_CALLS, CFG_NBP1_SHOWDIGITAL, + 10, 75, 120, 10 + AUTOCHECKBOX MENU_EXPAND_CODE, CFG_NBP1_EXPAND, + 10, 65, 120, 10 + AUTOCHECKBOX MENU_DTMF_SUPPORT, CFG_NBP1_DTMF, + 10, 55, 120, 10 + AUTOCHECKBOX MENU_ULAW_CODEC, CFG_NBP1_ULAW_CODEC, + 10, 45, 120, 10 + + LTEXT MENU_ANSWER_DELAY, 0, 10, 32, 70, 8, DT_VCENTER + ENTRYFIELD "", CFG_NBP1_DELAY, 80, 33, 15, 6, ES_RIGHT | ES_MARGIN + LTEXT MENU_SECONDS, 0, 100, 32, 30, 8, DT_VCENTER + + LTEXT MENU_MAX_REC_TIME, 0, 10, 21, 70, 8, DT_VCENTER + ENTRYFIELD "", CFG_NBP1_MAXRECTIME, 80, 22, 15, 6, ES_RIGHT | ES_MARGIN + LTEXT MENU_SECONDS, 0, 100, 21, 30, 8, DT_VCENTER + + LTEXT MENU_SILENCE_DETECTION, 0, 10, 10, 70, 8, DT_VCENTER + ENTRYFIELD "", CFG_NBP1_SILENCE, 80, 11, 15, 6, ES_RIGHT | ES_MARGIN + LTEXT MENU_SECONDS, 0, 100, 10, 30, 8, DT_VCENTER + + GROUPBOX MENU_POPUP_GROUP, 0, 140, 103, 230, 26 + LTEXT MENU_POPUP_DESC, 0, 145, 109, 100, 8, DT_VCENTER + CONTROL "", CFG_NBP1_POPUPWINDOW, 256, 68, 79, 50, + WC_COMBOBOX, CBS_DROPDOWNLIST | WS_GROUP | + WS_TABSTOP | WS_VISIBLE + + GROUPBOX MENU_DEFAULT_FILES, 0, 140, 66, 230, 35 + + LTEXT MENU_WELCOME_WAV, 0, 145, 82, 60, 8, DT_VCENTER + ENTRYFIELD "", CFG_NBP1_WELCOME_FILE, 220, 83, 125, 6, ES_MARGIN + PUSHBUTTON "...", CFG_NBP1_WELCOME_FDLG, 350, 81, 15, 10 + + LTEXT MENU_RINGING_WAV, 0, 145, 71, 60, 8, DT_VCENTER + ENTRYFIELD "", CFG_NBP1_RINGING_FILE, 220, 72, 125, 6, ES_MARGIN + PUSHBUTTON "...", CFG_NBP1_RINGING_FDLG, 350, 70, 15, 10 + + GROUPBOX MENU_NOTIFY_GROUP, 0, 140, 40, 230, 24 + + LTEXT MENU_NOTIFY_TEXT, 0, 145, 45, 150, 8, DT_VCENTER + ENTRYFIELD "", CFG_NBP1_NOTIFY_NUMBER, 300, 46, 62, 6, ES_MARGIN + + GROUPBOX MENU_LOGFILE, 0, 140, 5, 230, 33 + + LTEXT MENU_HINT_LOG, + 0, 145, 20, 215, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00FF0000L + + ENTRYFIELD "", CFG_NBP1_LOGFILE, 147, 11, 215, 6, ES_MARGIN | + WS_GROUP + END +END + +DLGTEMPLATE CFG_NB_PAGE2 LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", CFG_NB_PAGE2, 0, 0, 0, 0, NOT FS_DLGBORDER | + WS_VISIBLE + BEGIN + CONTAINER CFG_NBP2_CNTR, 0, 0, 0, 0, CCS_SINGLESEL | CCS_MINIRECORDCORE | WS_GROUP + END +END + +DLGTEMPLATE CFG_NB_PAGE3 LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", CFG_NB_PAGE3, 0, 0, 0, 0, NOT FS_DLGBORDER | + WS_VISIBLE + BEGIN + CONTAINER CFG_NBP3_CNTR, 0, 0, 0, 0, CCS_SINGLESEL | CCS_MINIRECORDCORE | WS_GROUP + END +END + +DLGTEMPLATE CFG_NB_PAGE4 LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", CFG_NB_PAGE4, 0, 0, 0, 0, NOT FS_DLGBORDER | + WS_VISIBLE + BEGIN + CONTAINER CFG_NBP4_CNTR, 0, 0, 0, 0, CCS_SINGLESEL | CCS_MINIRECORDCORE | WS_GROUP + END +END + +MENU CFG_PEOPLE_POPUP LOADONCALL MOVEABLE DISCARDABLE +BEGIN + MENUITEM MENU_ADD, CFG_PEOPLE_ADD, MIS_TEXT, 0 + MENUITEM MENU_EDIT, CFG_PEOPLE_EDIT, MIS_TEXT, 0 + MENUITEM MENU_DELETE_SHORT, CFG_PEOPLE_DEL, MIS_TEXT, 0 +END + +DLGTEMPLATE CFG_PEOPLE_EDITDLG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG MENU_EDIT_CALLER, CFG_PEOPLE_EDITDLG, 0, 0, 244, 187, + WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR | FCF_CLOSEBUTTON + BEGIN + GROUPBOX " ", 0, 5, 23, 234, 161 + + AUTOCHECKBOX MENU_CALLER_ENABLED, CFG_PEOPLE_EDITDLG_ACTIVE, 12, 174, + 100, 10, WS_GROUP + + LTEXT MENU_NAME, 0, 12, 160, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_NAME, 68, 161, 160, 8, + ES_MARGIN | WS_GROUP + + LTEXT MENU_NUMBER, 0, 12, 148, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_NUMBER, 68, 149, 160, 8, + ES_MARGIN + + LTEXT MENU_CALLER_DEFHELP, 0, 12, 126, 220, 16, DT_WORDBREAK + PRESPARAMS PP_FONTNAMESIZE, "8.Helv" + + LTEXT MENU_WELCOME, 0, 12, 113, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_FILE, 68, 114, 143, 8, + ES_MARGIN + PUSHBUTTON "...", CFG_PEOPLE_EDITDLG_FILEDLG, 214, 112, 17, 12 + + LTEXT MENU_RINGING, 0, 12, 101, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_RINGING, 68, 102, 143, 8, + ES_MARGIN + PUSHBUTTON "...", CFG_PEOPLE_EDITDLG_RINGING_FDLG, 214, 100, 17, 12 + + LTEXT MENU_REACTION_D, 0, 12, 84, 90, 8, DT_VCENTER + CONTROL "", CFG_PEOPLE_EDITDLG_REJECT, 109, 37, 73, 58, + WC_COMBOBOX, CBS_DROPDOWNLIST | WS_GROUP | + WS_TABSTOP | WS_VISIBLE + + LTEXT MENU_ANSWER_DELAY_D, 0, 12, 67, 90, 8, DT_VCENTER + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_DELAY, 111, 68, 21, 8, + ES_RIGHT | ES_MARGIN | WS_GROUP + LTEXT MENU_SECONDS, 0, 137, 67, 40, 8 + + LTEXT MENU_MAX_REC_TIME_D, 0, 12, 55, 90, 8, DT_VCENTER + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_MAXRECTIM, 111, 56, 21, 8, + ES_RIGHT | ES_MARGIN + LTEXT MENU_SECONDS, 0, 137, 55, 40, 8 + + LTEXT MENU_NOTIFY_TEXT_D, 0, 12, 30, 120, 16, DT_WORDBREAK + ENTRYFIELD "", CFG_PEOPLE_EDITDLG_NOTIFY, 137, 31, 93, 8, ES_MARGIN + + DEFPUSHBUTTON MENU_OK, CFG_PEOPLE_EDITDLG_OK, 5, 4, 50, 14, WS_GROUP + PUSHBUTTON MENU_CANCEL, CFG_PEOPLE_EDITDLG_CANCEL, 60, 4, 50, 14 + END +END + +MENU CFG_PORTS_POPUP LOADONCALL MOVEABLE DISCARDABLE +BEGIN + MENUITEM MENU_ADD, CFG_PORTS_ADD, MIS_TEXT, 0 + MENUITEM MENU_EDIT, CFG_PORTS_EDIT, MIS_TEXT, 0 + MENUITEM MENU_DELETE, CFG_PORTS_DEL, MIS_TEXT, 0 +END + +DLGTEMPLATE CFG_PORTS_EDITDLG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG MENU_EDITING_PORTS, CFG_PORTS_EDITDLG, 0, 0, 244, 187, WS_VISIBLE, + FCF_SYSMENU | FCF_TITLEBAR | FCF_CLOSEBUTTON + BEGIN + GROUPBOX " ", 0, 5, 23, 234, 161 + + AUTOCHECKBOX MENU_PORT_ENABLED, CFG_PORTS_EDITDLG_ACTIVE, 12, 174, + 100, 10, WS_GROUP + + LTEXT MENU_DESCRIPTION_D, 0, 12, 160, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PORTS_EDITDLG_DESCR, 68, 161, 160, 8, + ES_MARGIN | WS_GROUP + + LTEXT MENU_EAZ_D, 0, 12, 148, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PORTS_EDITDLG_NUMBER, 68, 149, 160, 8, + ES_MARGIN | WS_GROUP + + LTEXT MENU_PORT_DEFHELP, 0, 12, 126, 220, 16, DT_WORDBREAK + PRESPARAMS PP_FONTNAMESIZE, "8.Helv" + + LTEXT MENU_WELCOME_D, 0, 12, 113, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PORTS_EDITDLG_FILE, 68, 114, 143, 8, + ES_MARGIN + PUSHBUTTON "...", CFG_PORTS_EDITDLG_FILEDLG, 214, 112, 17, 12 + + LTEXT MENU_RINGING_D, 0, 12, 101, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_PORTS_EDITDLG_RINGING, 68, 102, 143, 8, + ES_MARGIN + PUSHBUTTON "...", CFG_PORTS_EDITDLG_RINGING_FDLG, 214, 100, 17, 12 + + LTEXT MENU_REACTION_D, 0, 12, 84, 90, 8, DT_VCENTER + CONTROL "", CFG_PORTS_EDITDLG_REJECT, 109, 47, 73, 48, + WC_COMBOBOX, CBS_DROPDOWNLIST | WS_TABSTOP | + WS_VISIBLE | WS_GROUP + + LTEXT MENU_ANSWER_DELAY_D, 0, 12, 67, 90, 8, DT_VCENTER + ENTRYFIELD "", CFG_PORTS_EDITDLG_DELAY, 111, 68, 21, 8, + ES_RIGHT | ES_MARGIN | WS_GROUP + LTEXT MENU_SECONDS, 0, 137, 67, 40, 8 + + LTEXT MENU_MAX_REC_TIME_D, 0, 12, 55, 90, 8, DT_VCENTER + ENTRYFIELD "", CFG_PORTS_EDITDLG_MAXRECTIM, 111, 56, 21, 8, + ES_RIGHT | ES_MARGIN + LTEXT MENU_SECONDS, 0, 137, 55, 40, 8 + + LTEXT MENU_NOTIFY_TEXT_D, 0, 12, 30, 120, 16, DT_WORDBREAK + ENTRYFIELD "", CFG_PORTS_EDITDLG_NOTIFY, 137, 31, 93, 8, ES_MARGIN + + DEFPUSHBUTTON MENU_OK, CFG_PORTS_EDITDLG_OK, 5, 4, 50, 14, WS_GROUP + PUSHBUTTON MENU_CANCEL, CFG_PORTS_EDITDLG_CANCEL, 60, 4, 50, 14 + END +END + +MENU CFG_DTMF_POPUP LOADONCALL MOVEABLE DISCARDABLE +BEGIN + MENUITEM MENU_ADD, CFG_DTMF_ADD, MIS_TEXT, 0 + MENUITEM MENU_EDIT, CFG_DTMF_EDIT, MIS_TEXT, 0 + MENUITEM MENU_DELETE_SHORT, CFG_DTMF_DEL, MIS_TEXT, 0 +END + +DLGTEMPLATE CFG_DTMF_EDITDLG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG MENU_EDITING_ACTION, CFG_DTMF_EDITDLG, 0, 0, 244, 158, WS_VISIBLE, + FCF_SYSMENU | FCF_TITLEBAR | FCF_CLOSEBUTTON + BEGIN + GROUPBOX " ", 0, 5, 23, 234, 131 + + AUTOCHECKBOX MENU_ACTION_ENABLED, CFG_DTMF_EDITDLG_ACTIVE, 12, 145, 100, 10, WS_GROUP + + LTEXT MENU_DTMF_CODE, 0, 12, 132, 50, 8, DT_VCENTER + ENTRYFIELD "", CFG_DTMF_EDITDLG_CODE, 77, 133, 150, 8, + ES_MARGIN | WS_GROUP + + AUTORADIOBUTTON MENU_REMOTE_CONTROL, CFG_DTMF_EDITDLG_RB_RCONTROL, + 12, 115, 130, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON MENU_SET_NOTIFY, CFG_DTMF_EDITDLG_RB_SETNOTIFY, + 12, 105, 130, 10, WS_TABSTOP + AUTORADIOBUTTON MENU_REBOOT_CTEL, CFG_DTMF_EDITDLG_RB_REBOOT, + 12, 95, 130, 10, WS_TABSTOP + AUTORADIOBUTTON MENU_DEACTIVATE_CTEL, CFG_DTMF_EDITDLG_RB_DEACT, + 12, 85, 130, 10, WS_TABSTOP + AUTORADIOBUTTON MENU_QUIT_CTEL, CFG_DTMF_EDITDLG_RB_QUIT, + 12, 75, 130, 10, WS_TABSTOP + AUTORADIOBUTTON MENU_EXECUTE, CFG_DTMF_EDITDLG_RB_EXEC, + 12, 65, 130, 10, WS_TABSTOP + + LTEXT MENU_PROGRAM_D, 0, 23, 55, 50, 8, DT_VCENTER + LTEXT MENU_ARGUMENTS_D, 0, 23, 43, 50, 8, DT_VCENTER + LTEXT MENU_TITLE_D, 0, 23, 31, 50, 8, DT_VCENTER + + ENTRYFIELD "", CFG_DTMF_EDITDLG_EXEC_PRG, 77, 55, 150, 8, + ES_MARGIN | WS_GROUP | WS_DISABLED + ENTRYFIELD "", CFG_DTMF_EDITDLG_EXEC_ARG, 77, 43, 150, 8, + ES_MARGIN | WS_GROUP | WS_DISABLED + ENTRYFIELD "", CFG_DTMF_EDITDLG_EXEC_TITLE, 77, 31, 150, 8, + ES_MARGIN | WS_GROUP | WS_DISABLED + + DEFPUSHBUTTON MENU_OK, CFG_DTMF_EDITDLG_OK, 5, 4, 50, 14, WS_GROUP + PUSHBUTTON MENU_CANCEL, CFG_DTMF_EDITDLG_CANCEL, 60, 4, 50, 14 + END +END + +DLGTEMPLATE ABOUT_DIALOG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG PROD_INFO, ABOUT_DIALOG, 27, 30, 238, 105, + WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR | FCF_CLOSEBUTTON + BEGIN + LTEXT APPSHORT, 0, 5, 80, 100, 20, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + PRESPARAMS PP_FONTNAMESIZE, "24.Helv" + LTEXT "", ABOUT_VERSION, 5, 70, 80, 8, + DT_VCENTER + ICON ID_FRAME, 0, 15, 41, 21, 16 + RTEXT "Copyright (c) " APPDATE " by", 0, 100, 70, 130, 8, + DT_VCENTER + RTEXT APP_AUTOR_1, 0, 100, 60, 130, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + RTEXT APP_WERNER_INET, 0, 70, 53, 160, 8, + DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + PRESPARAMS PP_FONTNAMESIZE, "8.Helv" + RTEXT MENU_AND, 0, 100, 44, 130, 8, DT_VCENTER + RTEXT APP_AUTOR_2, 0, 100, 34, 130, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + RTEXT APP_CAWIM_INET, 0, 70, 27, + 160, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + PRESPARAMS PP_FONTNAMESIZE, "8.Helv" + RTEXT APP_HOMEPAGE, 0, 70, 20, + 160, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + PRESPARAMS PP_FONTNAMESIZE, "8.Helv" + RTEXT MENU_UNREG_COPY, ABOUT_REG, 50, 5, + 180, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00FF0000L + DEFPUSHBUTTON MENU_OK, ABOUT_OK, 5, 4, 40, 14 + END +END + +DLGTEMPLATE ID_RECDLG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG MENU_RECORD_WELCOME, ID_RECDLG, 49, 115, 204, 49, + WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR | FCF_CLOSEBUTTON + BEGIN + LTEXT MENU_ENTER_FILENAME, ID_TOOLBAR, 5, 35, 111, 8 + ENTRYFIELD "", ID_RECDLG_ENTRY, 7, 25, 189, 8, ES_MARGIN | WS_GROUP + DEFPUSHBUTTON MENU_OK, ID_RECDLG_OK, 5, 4, 40, 14, WS_GROUP + PUSHBUTTON MENU_CANCEL, ID_RECDLG_CANCEL, 50, 4, 60, 14 + END +END + +DLGTEMPLATE INCALL_DIALOG PRELOAD MOVEABLE DISCARDABLE +BEGIN + DIALOG "", INCALL_DIALOG, 93, 124, 123, 36, FS_DLGBORDER | + WS_VISIBLE + BEGIN + CTEXT MENU_INCOMMING_CALL, 0, 5, 24, 113, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00FF0000L + CTEXT MENU_FROM, INCALL_FROM, 5, 14, 113, 8, DT_VCENTER + CTEXT MENU_ON, INCALL_ON, 5, 4, 113, 8, DT_VCENTER + END +END + +DLGTEMPLATE RECORD_DIALOG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", RECORD_DIALOG, 89, 143, 161, 27, WS_VISIBLE + BEGIN + CTEXT MENU_RECORDING, RECORD_REC, 5, 14, 131, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00FF0000L + CTEXT MENU_CALL_SELF, RECORD_STATUS, 5, 4, 151, 8, + DT_VCENTER + END +END + +DLGTEMPLATE REG_DIALOG LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG MENU_REGISTRATION, REG_DIALOG, 93, 82, 220, 71, WS_VISIBLE, + FCF_SYSMENU | FCF_TITLEBAR + BEGIN + LTEXT MENU_NAME_AND_CODE, 0, 5, 58, 210, 8 + RTEXT MENU_NAME_D, 0, 13, 42, 35, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + RTEXT MENU_CODE_D, 0, 13, 27, 35, 8, DT_VCENTER + PRESPARAMS PP_FOREGROUNDCOLOR, 0x00000000L + ENTRYFIELD "", REG_NAME, 55, 43, 126, 8, ES_MARGIN + ENTRYFIELD "", REG_CODE, 55, 28, 126, 8, ES_MARGIN + DEFPUSHBUTTON MENU_OK, REG_OK, 5, 4, 40, 14 + PUSHBUTTON MENU_CANCEL, 0, 50, 4, 60, 14 + END +END + +DLGTEMPLATE IDD_MSGBOX LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", IDD_MSGBOX, 0, 0, 200, 52, WS_VISIBLE, FCF_SYSMENU|FCF_TITLEBAR|FCF_CLOSEBUTTON + BEGIN + DEFPUSHBUTTON "", DID_OK, 6, 5, 40, 14 + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + PUSHBUTTON "", DID_CANCEL, 50, 5, 40, 14 + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + ICON ID_FRAME, IDC_ICONSTATIC, 6, 27, 21, 16, WS_GROUP + LTEXT "", IDC_TEXT, 35, 27, 158, 16, DT_WORDBREAK + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + END +END + +DLGTEMPLATE IDD_MSGBOXEX LOADONCALL MOVEABLE DISCARDABLE +BEGIN + DIALOG "", IDD_MSGBOXEX, 0, 0, 200, 63, WS_VISIBLE, FCF_SYSMENU|FCF_TITLEBAR|FCF_CLOSEBUTTON + BEGIN + DEFPUSHBUTTON "", DID_OK, 6, 5, 40, 14 + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + PUSHBUTTON "", DID_CANCEL, 50, 5, 40, 14 + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + AUTOCHECKBOX "", IDC_CHECK, 35, 24, 158, 10 + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + ICON ID_FRAME, IDC_ICONSTATIC, 6, 38, 21, 16, + WS_GROUP + LTEXT "", IDC_TEXT, 35, 38, 158, 16, DT_WORDBREAK + PRESPARAMS PP_FONTNAMESIZE, "9.WarpSans" + END +END + + +ACCELTABLE ID_FRAME +BEGIN + VK_F3, IDI_EXIT, VIRTUALKEY + VK_DELETE, ID_CALL_DEL, VIRTUALKEY + VK_F4, IDI_EXIT, ALT, VIRTUALKEY + VK_F5, IDI_REGISTRATION, ALT, CONTROL, VIRTUALKEY + KEY_SS, IDI_SETUP, ALT + KEY_LS, IDI_SETUP, ALT + KEY_SA, IDI_TOGGLE, ALT + KEY_LA, IDI_TOGGLE, ALT + KEY_SR, ID_CALL_REC, ALT + KEY_LR, ID_CALL_REC, ALT + KEY_SP, ID_CALL_PLAY_ALL, ALT + KEY_LP, ID_CALL_PLAY_ALL, ALT + KEY_SC, IDI_HIDE, ALT + KEY_LC, IDI_HIDE, ALT + KEY_SN, ID_ADD_CALLER, ALT + KEY_LN, ID_ADD_CALLER, ALT +END + +STRINGTABLE PRELOAD +BEGIN + IDI_TOGGLE MENU_POP_TOGG + ID_CALL_PLAY MENU_POP_PLAY + ID_CALL_PLAY_ALL MENU_POP_PLAY_ALL + ID_CALL_DEL MENU_POP_DEL + ID_ADD_CALLER MENU_POP_ADD_CALLER + IDI_SETUP MENU_POP_OPEN + IDI_PORTS MENU_POP_EDIT_PORTS + IDI_PEOPLE MENU_POP_EDIT_CALLER + IDI_DTMF MENU_POP_EDIT_DTMF + STR_OK_BUTTON MENU_OK + STR_CANCEL_BUTTON MENU_CANCEL + STR_YES_BUTTON MENU_YES + STR_NO_BUTTON MENU_NO +END + diff --git a/capitel/source.os2/CNTR.C b/capitel/source.os2/CNTR.C new file mode 100644 index 0000000..ac44378 --- /dev/null +++ b/capitel/source.os2/CNTR.C @@ -0,0 +1,185 @@ +#define INCL_WIN +#define INCL_DOS + +#include +#include +#include + +#include "capitel.h" +#include "cntr.h" +#include "..\..\common\source\global.h" +//#include "..\..\common\source\texte.h" +#include "texte.h" + +#define NUM_OF_FIELDS 6 /* Number of Fields in Details View */ + +short InitContainer( void ) +{ + PFIELDINFO pfiDetails, pfiCurrent, pfiSplit; + CNRINFO cntrInfo; + FIELDINFOINSERT finfoInsert; + SIZEL iconSize = { 16, 16 }; + + int fields = NUM_OF_FIELDS; + + /* Remove all Container Items */ + WinSendMsg( hwndCntr, CM_REMOVERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Remove all Info about Details-View */ + WinSendMsg( hwndCntr, CM_REMOVEDETAILFIELDINFO, MPFROMP( NULL ), + MPFROM2SHORT( 0,CMA_FREE ) ); + + /* Get Storage for Colums */ + pfiDetails= (PFIELDINFO) PVOIDFROMMR( WinSendMsg(hwndCntr, + CM_ALLOCDETAILFIELDINFO, + MPFROMSHORT( fields ), + 0 ) ); + + if( pfiDetails == NULL ) + return -1; + + /* Set up 1st Column (Icon) */ + pfiCurrent = pfiDetails; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_BITMAPORICON | CFA_FIREADONLY | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = ""; + pfiCurrent->offStruct = FIELDOFFSET( CntrRec, itemInfo.icon ); + pfiCurrent->pUserData = NULL; + + /* Set up 2nd Column (Caller) */ + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_FIREADONLY | CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = CALLER; + pfiCurrent->offStruct = FIELDOFFSET( CntrRec, itemInfo.pcaller ); + pfiCurrent->pUserData = NULL; + + /* Set up 3rd Column (Data) */ + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_FIREADONLY | CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = DATE; + pfiCurrent->offStruct = FIELDOFFSET( CntrRec, itemInfo.pdate ); + pfiCurrent->pUserData = NULL; + + /* Set up 4th Column (Time) */ + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_FIREADONLY | CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = TIME; + pfiCurrent->offStruct = FIELDOFFSET( CntrRec, itemInfo.ptime ); + pfiCurrent->pUserData = NULL; + + /* Set up 5th Column (Seconds) */ + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_ULONG | CFA_FIREADONLY | CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = SECS; + pfiCurrent->offStruct = FIELDOFFSET( CntrRec, itemInfo.seconds ); + pfiCurrent->pUserData = NULL; + + /* Set up 6th Column (Called EAZ) */ + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_FIREADONLY | CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = DEST; + pfiCurrent->offStruct = FIELDOFFSET( CntrRec, itemInfo.pcalledEAZ ); + pfiCurrent->pUserData = NULL; + + /* Set up Container Info */ + cntrInfo.flWindowAttr = CV_DETAIL | CA_DETAILSVIEWTITLES | + CA_TITLESEPARATOR; + cntrInfo.cb = sizeof( CNRINFO ); + cntrInfo.cyLineSpacing = 1; + cntrInfo.slBitmapOrIcon = iconSize; +/* cntrInfo.xVertSplitbar = 350; */ +/* cntrInfo.pFieldInfoLast = pfiSplit; */ + + WinSendMsg( hwndCntr, CM_SETCNRINFO, MPFROMP( &cntrInfo ), + MPFROMLONG( CMA_FLWINDOWATTR | CMA_LINESPACING | + CMA_SLBITMAPORICON ) ); + + finfoInsert.cb = sizeof( FIELDINFOINSERT ); + finfoInsert.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; + finfoInsert.fInvalidateFieldInfo = TRUE; + finfoInsert.cFieldInfoInsert = fields; + + WinSendMsg( hwndCntr, CM_INSERTDETAILFIELDINFO, MPFROMP( pfiDetails ), + MPFROMP( &finfoInsert ) ); + + return 0; +} + +short AddItem( HPOINTER bmp, char *caller, char *date, char *time, + ULONG secs, char *calledEAZ, char *filename, char digital ) +{ + CntrRec *rec; + RECORDINSERT riInsert; + + rec = (CntrRec *) PVOIDFROMMR( WinSendMsg( hwndCntr, CM_ALLOCRECORD, + MPFROMLONG(sizeof(CntrRec)-sizeof(MINIRECORDCORE)), + MPFROMSHORT( 1 ) ) ); + + rec->itemInfo.icon = (HPOINTER) bmp; + rec->itemInfo.seconds = secs; + rec->itemInfo.digital = digital; + + strcpy( rec->itemInfo.caller, caller ); + strcpy( rec->itemInfo.date, date ); + strcpy( rec->itemInfo.time, time ); + strcpy( rec->itemInfo.filename, filename ); + strcpy( rec->itemInfo.calledEAZ, calledEAZ ); + + rec->itemInfo.pcaller = rec->itemInfo.caller; + rec->itemInfo.pdate = rec->itemInfo.date; + rec->itemInfo.ptime = rec->itemInfo.time; + rec->itemInfo.pfilename = rec->itemInfo.filename; + rec->itemInfo.pcalledEAZ = rec->itemInfo.calledEAZ; +//rec->itemInfo.pdigital = rec->itemInfo.digital; + + rec->core.hptrIcon = (HPOINTER) bmp; + rec->core.pszIcon = rec->itemInfo.caller; + + riInsert.cb = sizeof( RECORDINSERT ); + riInsert.pRecordOrder = ( PRECORDCORE ) CMA_END; + riInsert.pRecordParent = NULL; + riInsert.fInvalidateRecord = TRUE; + riInsert.zOrder = CMA_TOP; + riInsert.cRecordsInsert = 1; + + WinSendMsg( hwndCntr, + CM_INSERTRECORD, + MPFROMP( rec ), + MPFROMP( &riInsert ) ); + + WinSendMsg( hwndCntr, + CM_SETRECORDEMPHASIS, + MPFROMP( rec ), + MPFROM2SHORT( TRUE, CRA_SELECTED | CRA_CURSORED ) ); + + WinSendMsg( hwndCntr, + WM_CHAR, MPFROMSH2CH( KC_VIRTUALKEY, 0, 0 ), + MPFROM2SHORT( 0, VK_END ) ); + + return 0; +} + +void EmptyContainer( void ) +{ + /* Remove all Container Items */ + WinSendMsg( hwndCntr, CM_REMOVERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Redraw Container */ + WinSendMsg( hwndCntr, CM_INVALIDATERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_REPOSITION ) ); +} + diff --git a/capitel/source.os2/CNTR.H b/capitel/source.os2/CNTR.H new file mode 100644 index 0000000..3e1d1fc --- /dev/null +++ b/capitel/source.os2/CNTR.H @@ -0,0 +1,25 @@ +typedef struct _ItemInfo +{ + HPOINTER icon; + CHAR caller[255], + date[10], + time[10], + calledEAZ[255], + filename[255]; + ULONG seconds; + CHAR digital; + + PCHAR pcaller, pdate, ptime, pfilename, pcalledEAZ; + +} ITEMINFO; + +typedef struct _ContainerRecord +{ + MINIRECORDCORE core; + ITEMINFO itemInfo; +} CntrRec; + +short InitContainer( void ); +short AddItem( HPOINTER, char *, char *, char *, ULONG, char *, char *, char ); +void EmptyContainer( void ); + diff --git a/capitel/source.os2/CONFIG.C b/capitel/source.os2/CONFIG.C new file mode 100644 index 0000000..88d9b0d --- /dev/null +++ b/capitel/source.os2/CONFIG.C @@ -0,0 +1,3011 @@ +#define INCL_DOS +#define INCL_PM + +#include +#include +#include +#include +#include + +#include "capitel.h" +#include "cntr.h" +#include "..\..\common\source\version.h" +#include "..\..\common\source\global.h" +#include "texte.h" +//#include "..\..\common\source\texte.h" +#include "config.h" +#include "configrc.h" +#include "..\..\answer\source\answer.h" +#include "..\..\..\units\common.src\cfg_file.h" + +void centerDialog(HWND hwndFrame, HWND hWndDlg); +MRESULT EXPENTRY page1Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY page2Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY page3Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY page4Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); + +MRESULT EXPENTRY editPortProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY addPortProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY editPeopleProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY addPeopleProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY editDtmfProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY addDtmfProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); + +SHORT EXPENTRY sortPorts( PMINIRECORDCORE p1, PMINIRECORDCORE p2, PVOID tmp ); +SHORT EXPENTRY sortPeople( PMINIRECORDCORE p1, PMINIRECORDCORE p2, PVOID tmp ); +SHORT EXPENTRY sortDtmf( PMINIRECORDCORE p1, PMINIRECORDCORE p2, PVOID tmp ); + +void InitNotebook( LONG, LONG ); + +void InitEAZCntr( HWND ); +void FillEAZCntr( HWND ); +void AddItemToEAZCntr( HWND, HPOINTER, char *, char *, char *, char *, char *, char *, char *, char * ); +void SaveEAZSetup( HWND ); +void CheckEAZSetup( EAZSetup * ); + +void InitPeopleCntr( HWND ); +void FillPeopleCntr( HWND ); +void AddItemToPeopleCntr( HWND, HPOINTER, char *, char *, char *, char *, + char *, char *, char *, char * ); +void SavePeopleSetup( HWND ); +void CheckPeopleSetup( PeopleSetup * ); + +void InitDtmfCntr( HWND ); +void FillDtmfCntr( HWND ); +void AddItemToDtmfCntr( HWND hwnd, HPOINTER bmp, char *code, char *action, + char *params, char *title, char *type, char *active ); +void SaveDtmfSetup( HWND ); +void CheckDtmfSetup( DtmfSetup * ); + +char *strip_blanks( char * ); + +void MsgBox( char * ); + +extern void delete_cr(char *); +extern CntrRec *currRec; +extern HWND hwndCntr; + +ULONG ulPage1, ulPage2, ulPage3, ulPage4; + +SWP oldSWP; + +SIZEL iconSize = { 16L, 16L }; + +HWND hwndNotebook, hwndPage1, hwndPage2, hwndPage3, hwndPage4; +HWND hwndPeoplePopup, hwndPortPopup, hwndDtmfPopup; + +PeopleSetup *currPerson; +EAZSetup *currPort; +DtmfSetup *currDtmf; + +extern HPOINTER portsIcoActive; +extern HPOINTER portsIcoInactive; +extern HPOINTER callersIcoActive; +extern HPOINTER callersIcoInactive; +extern HPOINTER actionIcoActive; +extern HPOINTER actionIcoInactive; + +char* strip_blanks(char* pBuff) +{ + char* pHelp; + + pHelp = pBuff; + while(*pHelp && isspace(*pHelp)) pHelp++; + if(pHelp > pBuff) memmove(pBuff, pHelp, strlen(pHelp) + 1); + + pHelp = pBuff + strlen(pBuff) - 1; + while(pHelp >= pBuff && isspace(*pHelp)) pHelp--; + pHelp[1] = 0; + + return pBuff; +} + +MRESULT EXPENTRY configProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) +{ + short i, y; + char str[512]; + LONG lCxChar, lCyChar; + HPS hpsChar; + FONTMETRICS fmMetrics; + ULONG deletePrompt, ignoreEmpty, showDigital, restoreWin; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + hwndNotebook = WinWindowFromID( hwnd, CFG_NOTEBOOK ); + + hwndPage1 = WinLoadDlg( hwnd, hwndNotebook, page1Proc, NULLHANDLE, + CFG_NB_PAGE1, NULL ); + + hwndPage2 = WinLoadDlg( hwnd, hwndNotebook, page2Proc, NULLHANDLE, + CFG_NB_PAGE2, NULL ); + + hwndPage3 = WinLoadDlg( hwnd, hwndNotebook, page3Proc, NULLHANDLE, + CFG_NB_PAGE3, NULL ); + + hwndPage4 = WinLoadDlg( hwnd, hwndNotebook, page4Proc, NULLHANDLE, + CFG_NB_PAGE4, NULL ); + + hpsChar = WinGetPS( hwnd ); + GpiQueryFontMetrics( hpsChar, sizeof( fmMetrics ), &fmMetrics ); + WinReleasePS( hpsChar ); + lCxChar = fmMetrics.lAveCharWidth; + lCyChar = fmMetrics.lMaxBaselineExt; + + InitNotebook( lCxChar, lCyChar ); + + switch( *((short *) mp2) ) + { + case IDI_PORTS: + WinSendMsg( hwndNotebook, BKM_TURNTOPAGE, MPFROMLONG( ulPage2 ), + NULL ); + break; + case IDI_PEOPLE: + WinSendMsg( hwndNotebook, BKM_TURNTOPAGE, MPFROMLONG( ulPage3 ), + NULL ); + break; + case IDI_DTMF: + WinSendMsg( hwndNotebook, BKM_TURNTOPAGE, MPFROMLONG( ulPage4 ), + NULL ); + break; + default: + break; + } + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_BUT_CANCEL: + WinDismissDlg( hwnd, TRUE ); + break; + + case CFG_BUT_SAVE: + WinQueryDlgItemText( hwndPage1, CFG_NBP1_DELAY, sizeof( str ), str ); + config_file_write_ulong( STD_CFG_FILE, DEFAULT_ANSW_DELAY, + atoi( str ) ); + + WinQueryDlgItemText( hwndPage1, CFG_NBP1_MAXRECTIME, sizeof( str ), str ); + config_file_write_ulong( STD_CFG_FILE, DEFAULT_REC_TIME, + atoi( str ) ); + + WinQueryDlgItemText( hwndPage1, CFG_NBP1_SILENCE, sizeof( str ), str ); + config_file_write_ulong( STD_CFG_FILE, MAX_SILENCE_TIME, + atoi( str ) ); + + config_file_write_ulong( STD_CFG_FILE, SHOW_POPUP_WINDOW, + ( int )WinSendDlgItemMsg( hwndPage1, + CFG_NBP1_POPUPWINDOW, LM_QUERYSELECTION, 0, 0 ) ); + + WinQueryDlgItemText( hwndPage1, CFG_NBP1_LOGFILE, sizeof( str ), str ); + config_file_write_string( STD_CFG_FILE, NAME_OF_LOG_FILE, str ); + + WinQueryDlgItemText( hwndPage1, CFG_NBP1_WELCOME_FILE, sizeof( str ), str ); + config_file_write_string( STD_CFG_FILE, WELCOME_WAVE, str ); + + WinQueryDlgItemText( hwndPage1, CFG_NBP1_RINGING_FILE, sizeof( str ), str ); + config_file_write_string( STD_CFG_FILE, RINGRING_WAVE, str ); + + WinQueryDlgItemText( hwndPage1, CFG_NBP1_NOTIFY_NUMBER, sizeof( str ), str ); + config_file_write_string( STD_CFG_FILE, CALL_BACK_NUMBER, str ); + + i = (short) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_RINGING ), BM_QUERYCHECK, NULL, NULL ); + config_file_write_ulong( STD_CFG_FILE, PLAY_RINGRING_WAVE, i ); + + i = (short) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_44KHZ ), BM_QUERYCHECK, NULL, NULL ); + config_file_write_ulong( STD_CFG_FILE, GENERATE_16_BIT_WAVES, i ); + + i = (short) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_EXPAND ), BM_QUERYCHECK, NULL, NULL ); + config_file_write_ulong( STD_CFG_FILE, EXPAND_CALLER_ID, i ); + + i = (short) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_DTMF ), BM_QUERYCHECK, NULL, NULL ); + config_file_write_ulong( STD_CFG_FILE, DETECT_DTMF_TONES, i ); + + i = (short) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_ULAW_CODEC ), BM_QUERYCHECK, NULL, NULL ); + config_file_write_ulong( STD_CFG_FILE, CAPITEL_CODEC_ULAW, i ); + + deletePrompt = (ULONG) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_DELPROMPT ), BM_QUERYCHECK, NULL, + NULL ); + + ignoreEmpty = (ULONG) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_IGNOREEMPTY ), BM_QUERYCHECK, + NULL, NULL ); + + showDigital = (ULONG) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_SHOWDIGITAL ), BM_QUERYCHECK, + NULL, NULL ); + + restoreWin = (ULONG) WinSendMsg( WinWindowFromID( hwndPage1, + CFG_NBP1_FLASH ), BM_QUERYCHECK, + NULL, NULL ); + + config_file_write_ulong( STD_CFG_FILE, RESTORE_WINDOW_ON_NEW_CALL, + restoreWin ); + config_file_write_ulong( STD_CFG_FILE, CONFIRM_CALL_DELETE, + deletePrompt ); + config_file_write_ulong( STD_CFG_FILE, IGNORE_EMPTY_CALLS, + ignoreEmpty ); + config_file_write_ulong( STD_CFG_FILE, CAPITEL_IS_CALLER_ID, + showDigital ); + + + SaveEAZSetup( WinWindowFromID( hwndPage2, CFG_NBP2_CNTR ) ); + SavePeopleSetup( WinWindowFromID( hwndPage3, CFG_NBP3_CNTR ) ); + SaveDtmfSetup( WinWindowFromID( hwndPage4, CFG_NBP4_CNTR ) ); + + answer_wav2alw_convert_all(); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + break; + } + + default: + return( WinDefDlgProc( hwnd, msg, mp1, mp2 ) ); + } + + return 0; +} + +void InitNotebook( LONG lCxChar, LONG lCyChar ) +{ + ULONG ulWidth, version; + + ulWidth = 10 * lCxChar; + + /* Notebook Setup */ + WinSendMsg( hwndNotebook, BKM_SETDIMENSIONS, MPFROM2SHORT( ulWidth, + lCyChar*2 ), MPFROMSHORT( BKA_MAJORTAB ) ); + + WinSendMsg( hwndNotebook, BKM_SETDIMENSIONS, MPFROM2SHORT( 0, 0 ), + MPFROMSHORT( BKA_MINORTAB ) ); + + WinSendMsg( hwndNotebook, BKM_SETNOTEBOOKCOLORS, MPFROMLONG( CLR_BLACK ), + MPFROMSHORT( BKA_FOREGROUNDMAJORCOLORINDEX ) ); + + WinSendMsg( hwndNotebook, BKM_SETNOTEBOOKCOLORS, + MPFROMLONG( SYSCLR_FIELDBACKGROUND ), + MPFROMSHORT( BKA_BACKGROUNDMAJORCOLORINDEX ) ); + + WinSendMsg( hwndNotebook, BKM_SETNOTEBOOKCOLORS, + MPFROMLONG( SYSCLR_FIELDBACKGROUND ), + MPFROMSHORT( BKA_BACKGROUNDPAGECOLORINDEX ) ); + + /* Set Font & Size */ + DosQuerySysInfo( QSV_VERSION_MINOR, QSV_VERSION_MINOR, (PVOID) &version, + sizeof(ULONG) ); + + if( version == 40 ) + WinSetPresParam( hwndNotebook, PP_FONTNAMESIZE, sizeof( Defv4CntrFont ), + Defv4CntrFont ); + else + WinSetPresParam( hwndNotebook, PP_FONTNAMESIZE, sizeof( DefCntrFont ), + DefCntrFont ); + + /* Set up Page 1 */ + ulPage1 = LONGFROMMR( WinSendMsg( hwndNotebook, BKM_INSERTPAGE, 0, + MPFROM2SHORT( BKA_MAJOR | + BKA_STATUSTEXTON | BKA_AUTOPAGESIZE, + BKA_LAST ) ) ); + + WinSendMsg( hwndNotebook, BKM_SETSTATUSLINETEXT, MPFROMLONG( ulPage1 ), + MPFROMP( GENERALSET ) ); + + WinSendMsg( hwndNotebook, BKM_SETTABTEXT, MPFROMLONG( ulPage1 ), + MPFROMP( GENERAL ) ); + + WinSendMsg( hwndNotebook, BKM_SETPAGEWINDOWHWND, MPFROMLONG( ulPage1 ), + MPFROMHWND( hwndPage1 ) ); + + /* Set up Page 2 */ + + ulPage2 = LONGFROMMR( WinSendMsg( hwndNotebook, BKM_INSERTPAGE, 0, + MPFROM2SHORT( BKA_MAJOR | BKA_STATUSTEXTON | + BKA_AUTOPAGESIZE, BKA_LAST ) ) ); + + WinSendMsg( hwndNotebook, BKM_SETSTATUSLINETEXT, MPFROMLONG( ulPage2 ), + MPFROMP( PORTSSET ) ); + + WinSendMsg( hwndNotebook, BKM_SETTABTEXT, MPFROMLONG( ulPage2 ), + MPFROMP( PORTS ) ); + + WinSendMsg( hwndNotebook, BKM_SETPAGEWINDOWHWND, MPFROMLONG( ulPage2 ), + MPFROMHWND( hwndPage2 ) ); + + /* Set up Page 3 */ + + ulPage3 = LONGFROMMR( WinSendMsg( hwndNotebook, BKM_INSERTPAGE, 0, + MPFROM2SHORT( BKA_MAJOR | BKA_STATUSTEXTON | + BKA_AUTOPAGESIZE, BKA_LAST ) ) ); + + WinSendMsg( hwndNotebook, BKM_SETSTATUSLINETEXT, MPFROMLONG( ulPage3 ), + MPFROMP( CALLERSSET ) ); + + WinSendMsg( hwndNotebook, BKM_SETTABTEXT, MPFROMLONG( ulPage3 ), + MPFROMP( CALLERS ) ); + + WinSendMsg( hwndNotebook, BKM_SETPAGEWINDOWHWND, MPFROMLONG( ulPage3 ), + MPFROMHWND( hwndPage3 ) ); + + /* Set up Page 4 */ + + ulPage4 = LONGFROMMR( WinSendMsg( hwndNotebook, BKM_INSERTPAGE, 0, + MPFROM2SHORT( BKA_MAJOR | BKA_STATUSTEXTON | + BKA_AUTOPAGESIZE, BKA_LAST ) ) ); + + WinSendMsg( hwndNotebook, BKM_SETSTATUSLINETEXT, MPFROMLONG( ulPage4 ), + MPFROMP( MAINT_REMOTE_ACT ) ); + + WinSendMsg( hwndNotebook, BKM_SETTABTEXT, MPFROMLONG( ulPage4 ), + MPFROMP( REMOTE_ACT ) ); + + WinSendMsg( hwndNotebook, BKM_SETPAGEWINDOWHWND, MPFROMLONG( ulPage4 ), + MPFROMHWND( hwndPage4 ) ); + +} + +MRESULT EXPENTRY page1Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char str[512]; + int i; + FILEDLG fileDlg; + + switch( msg ) + { + case WM_INITDLG: + if( config_file_read_ulong( STD_CFG_FILE, PLAY_RINGRING_WAVE, PLAY_RINGRING_WAVE_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_RINGING ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, CONFIRM_CALL_DELETE, CONFIRM_CALL_DELETE_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_DELPROMPT ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, IGNORE_EMPTY_CALLS, IGNORE_EMPTY_CALLS_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_IGNOREEMPTY ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_IS_CALLER_ID, CAPITEL_IS_CALLER_ID_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_SHOWDIGITAL ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, RESTORE_WINDOW_ON_NEW_CALL, RESTORE_WINDOW_ON_NEW_CALL_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_FLASH ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, GENERATE_16_BIT_WAVES, GENERATE_16_BIT_WAVES_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_44KHZ ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, EXPAND_CALLER_ID, EXPAND_CALLER_ID_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_EXPAND ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, DETECT_DTMF_TONES, DETECT_DTMF_TONES_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_DTMF ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_CODEC_ULAW, CAPITEL_CODEC_ULAW_DEF ) ) + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP1_ULAW_CODEC ), BM_SETCHECK, + MPFROMSHORT( 1 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_DELAY, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_NBP1_MAXRECTIME, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_NBP1_LOGFILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_NBP1_WELCOME_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_NBP1_RINGING_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + sprintf( str, "%d", config_file_read_ulong( STD_CFG_FILE, DEFAULT_ANSW_DELAY, DEFAULT_ANSW_DELAY_DEF ) ); + WinSetDlgItemText( hwnd, CFG_NBP1_DELAY, (PSZ) str ); + + sprintf( str, "%d", config_file_read_ulong( STD_CFG_FILE, DEFAULT_REC_TIME, DEFAULT_REC_TIME_DEF ) ); + WinSetDlgItemText( hwnd, CFG_NBP1_MAXRECTIME, (PSZ) str ); + + sprintf( str, "%d", config_file_read_ulong( STD_CFG_FILE, MAX_SILENCE_TIME, MAX_SILENCE_TIME_DEF ) ); + WinSetDlgItemText( hwnd, CFG_NBP1_SILENCE, (PSZ) str ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_POPUPWINDOW, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( POPUP_NONE ) ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_POPUPWINDOW, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( POPUP_TOPLEFT ) ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_POPUPWINDOW, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( POPUP_TOPRIGHT ) ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_POPUPWINDOW, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( POPUP_BOTTOMLEFT ) ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_POPUPWINDOW, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( POPUP_BOTTOMRIGHT ) ); + + WinSendDlgItemMsg( hwnd, CFG_NBP1_POPUPWINDOW, LM_SELECTITEM, + MPFROMLONG(config_file_read_ulong(STD_CFG_FILE, + SHOW_POPUP_WINDOW,SHOW_POPUP_WINDOW_DEF)), MPFROMLONG(1)); + + config_file_read_string( STD_CFG_FILE, NAME_OF_LOG_FILE, str, NAME_OF_LOG_FILE_DEF); + WinSetDlgItemText( hwnd, CFG_NBP1_LOGFILE, (PSZ) str ); + + config_file_read_string( STD_CFG_FILE, WELCOME_WAVE, str, WELCOME_WAVE_DEF); + WinSetDlgItemText( hwnd, CFG_NBP1_WELCOME_FILE, (PSZ) str ); + + config_file_read_string( STD_CFG_FILE, RINGRING_WAVE, str, RINGRING_WAVE_DEF); + WinSetDlgItemText( hwnd, CFG_NBP1_RINGING_FILE, (PSZ) str ); + + config_file_read_string( STD_CFG_FILE, CALL_BACK_NUMBER, str, CALL_BACK_NUMBER_DEF); + WinSetDlgItemText( hwnd, CFG_NBP1_NOTIFY_NUMBER, (PSZ) str ); + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_NBP1_WELCOME_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVALWFILE; + strcpy( fileDlg.szFullFile, "*.WAV;*.ALW" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + { + WinSetDlgItemText( hwnd, CFG_NBP1_WELCOME_FILE, + fileDlg.szFullFile ); + } + + break; + + case CFG_NBP1_RINGING_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVFILE; + strcpy( fileDlg.szFullFile, "*.WAV" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + { + WinSetDlgItemText( hwnd, CFG_NBP1_RINGING_FILE, + fileDlg.szFullFile ); + } + + break; + default: + break; + } + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +MRESULT EXPENTRY page2Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + HWND hwndContainer; + PCNREDITDATA editData; + POINTL ptlMouse; + + switch( msg ) + { + case WM_INITDLG: + hwndContainer = WinWindowFromID( hwnd, CFG_NBP2_CNTR ); + + hwndPortPopup = WinLoadMenu( hwndNotebook, NULLHANDLE, + CFG_PORTS_POPUP ); + + InitEAZCntr( hwndContainer ); + FillEAZCntr( hwndContainer ); + + break; + + case WM_WINDOWPOSCHANGED: + WinSetWindowPos( WinWindowFromID( hwnd, CFG_NBP2_CNTR ), 0, 0, + 0, ( (PSWP) mp1 )->cx, ( (PSWP) mp1 )->cy, + SWP_MOVE | SWP_SIZE ); + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PORTS_QEDIT: + currPort = (EAZSetup *) WinSendMsg( WinWindowFromID( hwnd, + CFG_NBP2_CNTR ), + CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + /* automagically jump to real edit-function */ + + case CFG_PORTS_EDIT: + if( currPort == NULL ) + break; + + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) editPortProc, + NULLHANDLE, CFG_PORTS_EDITDLG, NULL ); + + break; + + case CFG_PORTS_ADD: + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) addPortProc, + NULLHANDLE, CFG_PORTS_EDITDLG, NULL ); + break; + + case CFG_PORTS_QDEL: + currPort = (EAZSetup *) WinSendMsg( WinWindowFromID( hwnd, + CFG_NBP2_CNTR ), + CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + /* automagically jump to real delete-function */ + + case CFG_PORTS_DEL: + if( currPort == NULL ) + break; + + if( WinMessageBox( HWND_DESKTOP, hwnd, + DELENTRY, + CTELMSG, 0, MB_YESNO | MB_ICONQUESTION | + MB_DEFBUTTON2 | MB_APPLMODAL | MB_MOVEABLE ) + == MBID_YES ) + { + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP2_CNTR ), + CM_REMOVERECORD, MPFROMP( &currPort ), + MPFROM2SHORT( 1, CMA_FREE | CMA_INVALIDATE ) ); + } + + break; + + + default: + break; + } + + return 0; + + case WM_CONTROL: + switch( SHORT2FROMMP( mp1 ) ) + { + case CN_ENTER: + if( (currPort = (EAZSetup *) ((PNOTIFYRECORDENTER) mp2)->pRecord) + == NULL ) + break; + + WinPostMsg( hwnd, WM_COMMAND, MPFROMSHORT( CFG_PORTS_EDIT ), NULL ); + break; + + case CN_REALLOCPSZ: + editData = (PCNREDITDATA) PVOIDFROMMP( mp2 ); + + if( editData->pFieldInfo != NULL ) + return (MPARAM) TRUE; + + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + + case CN_ENDEDIT: + currPort = (EAZSetup *) + (((PCNREDITDATA) PVOIDFROMMP( mp2 ))->pRecord); + + CheckEAZSetup( currPort ); + break; + + case CN_CONTEXTMENU: + currPort = (EAZSetup *) PVOIDFROMMP( mp2 ); + + WinQueryPointerPos( HWND_DESKTOP, &ptlMouse ); + WinMapWindowPoints( HWND_DESKTOP, hwndNotebook, &ptlMouse, 1 ); + + WinPopupMenu( hwndNotebook, hwnd, hwndPortPopup, ptlMouse.x, + ptlMouse.y, 0, PU_HCONSTRAIN | PU_VCONSTRAIN | + PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_MOUSEBUTTON2 | + PU_NONE ); + + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +void InitEAZCntr( HWND hwnd ) +{ + CNRINFO cntrInfo; + FIELDINFOINSERT finfoInsert; + PFIELDINFO pfiDetails, pfiCurrent, pfiSplit; + int fields; + ULONG version; + + /* Set Font & Size */ + DosQuerySysInfo( QSV_VERSION_MINOR, QSV_VERSION_MINOR, (PVOID) &version, + sizeof(ULONG) ); + + if( version == 40 ) + WinSetPresParam( hwnd, PP_FONTNAMESIZE, sizeof( Defv4CntrFont ), + Defv4CntrFont ); + else + WinSetPresParam( hwnd, PP_FONTNAMESIZE, sizeof( DefCntrFont ), + DefCntrFont ); + + /* Remove all Container Items */ + WinSendMsg( hwnd, CM_REMOVERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Remove all Info about Details-View */ + WinSendMsg( hwnd, CM_REMOVEDETAILFIELDINFO, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Get Storage for Columns */ + fields = 9; + + pfiDetails= (PFIELDINFO) PVOIDFROMMR( WinSendMsg(hwnd, + CM_ALLOCDETAILFIELDINFO, + MPFROMSHORT( fields ), + 0 ) ); + + if( pfiDetails == NULL ) + return; + + pfiCurrent = pfiDetails; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_BITMAPORICON | CFA_FIREADONLY | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = ""; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.icon ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = PORT; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.pdesc ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = EAZ_MSN; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.pport ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = WELCOME_WAV_ALW; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.palwfile ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = RINGING_WAV; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.pringingwave ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER | CFA_FIREADONLY; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = REACTION; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.preject ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = ANSWERDELAY; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.panswerdelay ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = MAXRECTIME; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.pmaxrectime); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = NOTIFY_NUMBER; + pfiCurrent->offStruct = FIELDOFFSET( EAZSetup, itemInfo.pnotifynumber ); + pfiCurrent->pUserData = NULL; + + + /* Set up Container Info */ + cntrInfo.flWindowAttr = CV_DETAIL | CA_DETAILSVIEWTITLES; + cntrInfo.pSortRecord = (PVOID) sortPorts; + cntrInfo.cb = sizeof( CNRINFO ); + cntrInfo.cyLineSpacing = 1; + cntrInfo.slBitmapOrIcon = iconSize; + + WinSendMsg( hwnd, CM_SETCNRINFO, MPFROMP( &cntrInfo ), + MPFROMLONG( CMA_FLWINDOWATTR | CMA_LINESPACING | + CMA_PSORTRECORD | CMA_SLBITMAPORICON ) ); + + finfoInsert.cb = sizeof( FIELDINFOINSERT ); + finfoInsert.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; + finfoInsert.fInvalidateFieldInfo = TRUE; + finfoInsert.cFieldInfoInsert = fields; + + WinSendMsg( hwnd, CM_INSERTDETAILFIELDINFO, MPFROMP( pfiDetails ), + MPFROMP( &finfoInsert ) ); + + return; +} + +SHORT EXPENTRY sortPorts( PMINIRECORDCORE p1, PMINIRECORDCORE p2, PVOID tmp ) +{ + return( strcmpi( ((EAZSetup *)p1)->itemInfo.port, + ((EAZSetup *)p2)->itemInfo.port ) ); +} + +void AddItemToEAZCntr( HWND hwnd, HPOINTER bmp, char *port, char *desc, char *alwfile, + char *reject_cause, char *maxrectime, char *delay, + char *ringing, char *notifynum ) +{ + EAZSetup *rec; + RECORDINSERT riInsert; + + rec = (EAZSetup *) PVOIDFROMMR( WinSendMsg( hwnd, CM_ALLOCRECORD, + MPFROMLONG(sizeof(EAZSetup)-sizeof(MINIRECORDCORE)), + MPFROMSHORT( 1 ) ) ); + + strcpy( rec->itemInfo.port, strip_blanks( port ) ); + strcpy( rec->itemInfo.desc, strip_blanks( desc ) ); + strcpy( rec->itemInfo.alwfile, strip_blanks( alwfile ) ); + strcpy( rec->itemInfo.reject_cause, strip_blanks( reject_cause ) ); + strcpy( rec->itemInfo.maxrectime, strip_blanks( maxrectime ) ); + strcpy( rec->itemInfo.answerdelay, strip_blanks( delay ) ); + strcpy( rec->itemInfo.ringingwave, strip_blanks( ringing ) ); + strcpy( rec->itemInfo.notifynumber, strip_blanks( notifynum ) ); + + rec->itemInfo.pport = rec->itemInfo.port; + rec->itemInfo.pdesc = rec->itemInfo.desc; + rec->itemInfo.palwfile = rec->itemInfo.alwfile; + rec->itemInfo.preject = rec->itemInfo.reject_cause; + rec->itemInfo.pmaxrectime = rec->itemInfo.maxrectime; + rec->itemInfo.panswerdelay = rec->itemInfo.answerdelay; + rec->itemInfo.pringingwave = rec->itemInfo.ringingwave; + rec->itemInfo.pnotifynumber = rec->itemInfo.notifynumber; + + rec->itemInfo.icon = bmp; + + rec->core.hptrIcon = (HPOINTER) bmp; + rec->core.pszIcon = rec->itemInfo.desc; + + CheckEAZSetup( rec ); + + riInsert.cb = sizeof( RECORDINSERT ); + riInsert.pRecordOrder = ( PRECORDCORE ) CMA_END; + riInsert.pRecordParent = NULL; + riInsert.fInvalidateRecord = TRUE; + riInsert.zOrder = CMA_TOP; + riInsert.cRecordsInsert = 1; + + WinSendMsg( hwnd, + CM_INSERTRECORD, + MPFROMP( rec ), + MPFROMP( &riInsert ) ); + +} + +void FillEAZCntr( HWND hwnd ) +{ + FILE *fh; + char str[512], port[512], desc[512], alwfile[512]; + char reject_cause[512], maxrectime[512], answerdelay[512]; + char ringing[512], notifynum[512]; + char *stok; + HPOINTER bmp; + + if( (fh = fopen( PRTFILE, "r" )) != NULL ) + { + while( fgets( str, 512, fh ) ) + { + delete_cr( str ); + + if( (strlen( str ) > 0) && (str[0] != '#') ) + { + stok = strtok( str, "|" ); + if( stok ) strcpy( port, stok ); + else strcpy( port, "?" ); + + stok = strtok( NULL, "|" ); + if( stok ) strcpy( desc, stok ); + else strcpy( desc, "?" ); + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( alwfile, stok ); + else *alwfile = 0; + + stok = strtok( NULL, "|" ); + if( stok ) + { + switch( atoi( stok ) ) + { + case 1: + strcpy( reject_cause, REJECT_1 ); + break; + case 2: + strcpy( reject_cause, REJECT_2 ); + break; + case 3: + strcpy( reject_cause, REJECT_3 ); + break; + default: + strcpy( reject_cause, REJECT_0 ); + break; + } + } + else strcpy( reject_cause, REJECT_0 ); + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( maxrectime, stok ); + else *maxrectime = 0; + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( answerdelay, stok ); + else *answerdelay = 0; + + stok = strtok( NULL, "|" ); + if( !stok || atoi(stok) ) bmp = portsIcoActive; + else bmp = portsIcoInactive; + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( ringing, stok ); + else *ringing = 0; + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( notifynum, stok ); + else *notifynum = 0; + + AddItemToEAZCntr( hwnd, bmp, port, desc, alwfile, reject_cause, + maxrectime, answerdelay, ringing, notifynum ); + } + } + + fclose( fh ); + } + + return; +} + +void SaveEAZSetup( HWND hwnd ) +{ + FILE *fh; + EAZSetup *pCore; + short reject, isActive; + + if( (fh = fopen( PRTFILE, "w" )) != NULL ) + { + fprintf( fh, CREATEMAINT, + PRTFILE, APPNAME ); + + pCore = (EAZSetup *) WinSendMsg( hwnd, CM_QUERYRECORD, NULL, + MPFROM2SHORT( CMA_FIRST, CMA_ITEMORDER ) ); + + while( pCore ) + { + if( strcmpi(pCore->itemInfo.reject_cause, REJECT_3) == 0 ) + reject = 3; + else if( strcmpi(pCore->itemInfo.reject_cause, REJECT_2) == 0 ) + reject = 2; + else if( strcmpi(pCore->itemInfo.reject_cause, REJECT_1) == 0 ) + reject = 1; + else + reject = 0; + + if( pCore->itemInfo.icon != portsIcoActive ) + isActive = 0; + else + isActive = 1; + + strip_blanks( pCore->itemInfo.port ); + strip_blanks( pCore->itemInfo.desc ); + strip_blanks( pCore->itemInfo.alwfile ); + strip_blanks( pCore->itemInfo.maxrectime ); + strip_blanks( pCore->itemInfo.answerdelay ), + strip_blanks( pCore->itemInfo.ringingwave ); + strip_blanks( pCore->itemInfo.notifynumber ); + + fprintf( fh, "%s|%s|%s|%d|%s|%s|%d|%s|%s\n", + strlen( pCore->itemInfo.port ) ? pCore->itemInfo.port : "?", + strlen( pCore->itemInfo.desc ) ? pCore->itemInfo.desc : "?", + strlen( pCore->itemInfo.alwfile ) ? pCore->itemInfo.alwfile : "*", + reject, + strlen( pCore->itemInfo.maxrectime ) ? pCore->itemInfo.maxrectime : "*", + strlen( pCore->itemInfo.answerdelay ) ? pCore->itemInfo.answerdelay : "*", + isActive, + strlen ( pCore->itemInfo.ringingwave ) ? pCore->itemInfo.ringingwave : "*", + strlen ( pCore->itemInfo.notifynumber ) ? pCore->itemInfo.notifynumber : "*"); + + pCore = (EAZSetup *) WinSendMsg( hwnd, CM_QUERYRECORD, + MPFROMP( pCore ), + MPFROM2SHORT( CMA_NEXT, CMA_ITEMORDER ) ); + } + + fclose( fh ); + } +} + +MRESULT EXPENTRY editPortProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char descr[512], alwfile[512], maxrectime[512], answerdelay[512]; + char reject[512], number[512], ringing[512], notifynum[512], isActive; + FILEDLG fileDlg; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + if( currPort->itemInfo.icon == portsIcoActive ) + WinSendMsg( WinWindowFromID( hwnd, CFG_PORTS_EDITDLG_ACTIVE ), + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + sprintf( descr, EDITINGPORT, currPort->itemInfo.port ); + WinSetWindowText( WinWindowFromID( hwnd, FID_TITLEBAR ), (PSZ) descr ); + + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_DESCR, + currPort->itemInfo.desc ); + + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_NUMBER, + currPort->itemInfo.port ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_FILE, + currPort->itemInfo.alwfile ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_RINGING, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_RINGING, + currPort->itemInfo.ringingwave ); + + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_MAXRECTIM, + currPort->itemInfo.maxrectime ); + + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_DELAY, + currPort->itemInfo.answerdelay ); + + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_REJECT, + currPort->itemInfo.reject_cause ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_0 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_1 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_2 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_3 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_NOTIFY, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_NOTIFY, + currPort->itemInfo.notifynumber ); + + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PORTS_EDITDLG_FILEDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVALWFILE; + strcpy( fileDlg.szFullFile, "*.WAV;*.ALW" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_FILE, + fileDlg.szFullFile ); + + break; + case CFG_PORTS_EDITDLG_RINGING_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVFILE; + strcpy( fileDlg.szFullFile, "*.WAV" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_RINGING, + fileDlg.szFullFile ); + + break; + + case CFG_PORTS_EDITDLG_OK: + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_DESCR, + sizeof( descr ), (PSZ) descr ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_NUMBER, + sizeof( number ), (PSZ) number ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_FILE, + sizeof( alwfile ), (PSZ) alwfile ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_RINGING, + sizeof( ringing ), (PSZ) ringing ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_MAXRECTIM, + sizeof( maxrectime ), (PSZ) maxrectime ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_DELAY, + sizeof( answerdelay ), (PSZ) answerdelay ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_REJECT, + sizeof( reject ), (PSZ) reject ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_NOTIFY, + sizeof( notifynum ), (PSZ) notifynum ); + + strcpy( currPort->itemInfo.desc, descr ); + strcpy( currPort->itemInfo.port, number ); + strcpy( currPort->itemInfo.alwfile, alwfile ); + strcpy( currPort->itemInfo.maxrectime, maxrectime ); + strcpy( currPort->itemInfo.answerdelay, answerdelay ); + strcpy( currPort->itemInfo.reject_cause, reject ); + strcpy( currPort->itemInfo.ringingwave, ringing ); + strcpy( currPort->itemInfo.notifynumber, notifynum ); + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_PORTS_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + if( isActive ) + currPort->itemInfo.icon = portsIcoActive; + else + currPort->itemInfo.icon = portsIcoInactive; + + CheckEAZSetup( currPort ); + + WinSendMsg( WinWindowFromID( hwndPage2, CFG_NBP2_CNTR ), + CM_INVALIDATERECORD, &currPort, + MPFROM2SHORT( 1, CMA_TEXTCHANGED ) ); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +MRESULT EXPENTRY addPortProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char descr[512], alwfile[512], maxrectime[512], answerdelay[512]; + char reject[512], number[512], isActive, ringing[512], notifynum[512]; + FILEDLG fileDlg; + HPOINTER Icon; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + WinSendMsg( WinWindowFromID( hwnd, CFG_PORTS_EDITDLG_ACTIVE ), + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_RINGING, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_REJECT, REJECT_0 ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_0 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_1 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_2 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_3 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PORTS_EDITDLG_NOTIFY, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PORTS_EDITDLG_FILEDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVALWFILE; + strcpy( fileDlg.szFullFile, "*.WAV;*.ALW" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_FILE, + fileDlg.szFullFile ); + + break; + + case CFG_PORTS_EDITDLG_RINGING_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVFILE; + strcpy( fileDlg.szFullFile, "*.WAV" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PORTS_EDITDLG_RINGING, + fileDlg.szFullFile ); + break; + + case CFG_PORTS_EDITDLG_OK: + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_DESCR, + sizeof( descr ), (PSZ) descr ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_NUMBER, + sizeof( number ), (PSZ) number ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_FILE, + sizeof( alwfile ), (PSZ) alwfile ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_RINGING, + sizeof( ringing ), (PSZ) ringing ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_MAXRECTIM, + sizeof( maxrectime ), (PSZ) maxrectime ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_DELAY, + sizeof( answerdelay ), (PSZ) answerdelay ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_REJECT, + sizeof( reject ), (PSZ) reject ); + + WinQueryDlgItemText( hwnd, CFG_PORTS_EDITDLG_NOTIFY, + sizeof( notifynum ), (PSZ) notifynum ); + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_PORTS_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + if( isActive ) + Icon = portsIcoActive; + else + Icon = portsIcoInactive; + + AddItemToEAZCntr( WinWindowFromID( hwndPage2, CFG_NBP2_CNTR ), Icon, + number, descr, alwfile, reject, maxrectime, + answerdelay, ringing, notifynum ); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +MRESULT EXPENTRY page3Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + HWND hwndContainer; + PCNREDITDATA editData; + POINTL ptlMouse; + + switch( msg ) + { + case WM_INITDLG: + hwndContainer = WinWindowFromID( hwnd, CFG_NBP3_CNTR ); + + hwndPeoplePopup = WinLoadMenu( hwndNotebook, NULLHANDLE, + CFG_PEOPLE_POPUP ); + + InitPeopleCntr( hwndContainer ); + FillPeopleCntr( hwndContainer ); + + break; + + case WM_WINDOWPOSCHANGED: + WinSetWindowPos( WinWindowFromID( hwnd, CFG_NBP3_CNTR ), 0, 0, + 0, ( (PSWP) mp1 )->cx, ( (PSWP) mp1 )->cy, + SWP_MOVE | SWP_SIZE ); + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PEOPLE_ADD: + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) addPeopleProc, + NULLHANDLE, CFG_PEOPLE_EDITDLG, NULL ); + break; + + case CFG_PEOPLE_QEDIT: + currPerson = (PeopleSetup *) WinSendMsg( WinWindowFromID( hwnd, + CFG_NBP3_CNTR ), + CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + /* automagically jump to real edit-function */ + + case CFG_PEOPLE_EDIT: + if( currPerson == NULL ) + break; + + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) editPeopleProc, + NULLHANDLE, CFG_PEOPLE_EDITDLG, NULL ); + + break; + + case CFG_PEOPLE_QDEL: + currPerson = (PeopleSetup *) WinSendMsg( WinWindowFromID( hwnd, + CFG_NBP3_CNTR ), + CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + /* automagically jump to real delete-function */ + + case CFG_PEOPLE_DEL: + if( currPerson == NULL ) + break; + + if( WinMessageBox( HWND_DESKTOP, hwnd, + DELENTRY, + CTELMSG, 0, MB_YESNO | MB_ICONQUESTION | + MB_DEFBUTTON2 | MB_APPLMODAL | MB_MOVEABLE ) + == MBID_YES ) + { + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP3_CNTR ), + CM_REMOVERECORD, MPFROMP( &currPerson ), + MPFROM2SHORT( 1, CMA_FREE | CMA_INVALIDATE ) ); + } + + break; + + default: + break; + } + + return 0; + + case WM_CONTROL: + switch( SHORT2FROMMP( mp1 ) ) + { + case CN_ENTER: + if( (currPerson = (PeopleSetup *) ((PNOTIFYRECORDENTER) mp2)->pRecord) + == NULL ) + break; + + WinPostMsg( hwnd, WM_COMMAND, MPFROMSHORT( CFG_PEOPLE_EDIT ), NULL ); + break; + + case CN_REALLOCPSZ: + editData = (PCNREDITDATA) PVOIDFROMMP( mp2 ); + + if( editData->pFieldInfo != NULL ) + return (MPARAM) TRUE; + + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + + case CN_ENDEDIT: + currPerson = (PeopleSetup *) + (((PCNREDITDATA) PVOIDFROMMP( mp2 ))->pRecord); + + CheckPeopleSetup( currPerson ); + + break; + + case CN_CONTEXTMENU: + currPerson = (PeopleSetup *) PVOIDFROMMP( mp2 ); + + WinQueryPointerPos( HWND_DESKTOP, &ptlMouse ); + WinMapWindowPoints( HWND_DESKTOP, hwndNotebook, &ptlMouse, 1 ); + + WinPopupMenu( hwndNotebook, hwnd, hwndPeoplePopup, ptlMouse.x, + ptlMouse.y, 0, PU_HCONSTRAIN | PU_VCONSTRAIN | + PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_MOUSEBUTTON2 | + PU_NONE ); + + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +void InitPeopleCntr( HWND hwnd ) +{ + CNRINFO cntrInfo; + FIELDINFOINSERT finfoInsert; + PFIELDINFO pfiDetails, pfiCurrent, pfiSplit; + int fields; + ULONG version; + + /* Set Font & Size */ + DosQuerySysInfo( QSV_VERSION_MINOR, QSV_VERSION_MINOR, (PVOID) &version, + sizeof(ULONG) ); + + if( version == 40 ) + WinSetPresParam( hwnd, PP_FONTNAMESIZE, sizeof( Defv4CntrFont ), + Defv4CntrFont ); + else + WinSetPresParam( hwnd, PP_FONTNAMESIZE, sizeof( DefCntrFont ), + DefCntrFont ); + + /* Remove all Container Items */ + WinSendMsg( hwnd, CM_REMOVERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Remove all Info about Details-View */ + WinSendMsg( hwnd, CM_REMOVEDETAILFIELDINFO, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Get Storage for Colums */ + fields = 9; + + pfiDetails= (PFIELDINFO) PVOIDFROMMR( WinSendMsg(hwnd, + CM_ALLOCDETAILFIELDINFO, + MPFROMSHORT( fields ), + 0 ) ); + + if( pfiDetails == NULL ) + return; + + /* Set up 1st Column */ + pfiCurrent = pfiDetails; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_BITMAPORICON | CFA_FIREADONLY | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = ""; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.icon ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = NAMEMSG; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.pname ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = NUMBERMSG; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.pnumber ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = WELCOME_WAV_ALW; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.palwfile ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = RINGING_WAV; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.pringingwave ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER | CFA_FIREADONLY; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = REACTION; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.preject ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = ANSWERDELAY; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.panswerdelay); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = MAXRECTIME; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.pmaxrectime); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_CENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = NOTIFY_NUMBER; + pfiCurrent->offStruct = FIELDOFFSET( PeopleSetup, itemInfo.pnotifynumber); + pfiCurrent->pUserData = NULL; + + /* Set up Container Info */ + cntrInfo.flWindowAttr = CV_DETAIL | CA_DETAILSVIEWTITLES; + cntrInfo.pSortRecord = (PVOID) sortPeople; + cntrInfo.cb = sizeof( CNRINFO ); + cntrInfo.cyLineSpacing = 1; + cntrInfo.slBitmapOrIcon = iconSize; + + WinSendMsg( hwnd, CM_SETCNRINFO, MPFROMP( &cntrInfo ), + MPFROMLONG( CMA_FLWINDOWATTR | CMA_LINESPACING | + CMA_PSORTRECORD | CMA_SLBITMAPORICON ) ); + + finfoInsert.cb = sizeof( FIELDINFOINSERT ); + finfoInsert.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; + finfoInsert.fInvalidateFieldInfo = TRUE; + finfoInsert.cFieldInfoInsert = fields; + + WinSendMsg( hwnd, CM_INSERTDETAILFIELDINFO, MPFROMP( pfiDetails ), + MPFROMP( &finfoInsert ) ); + + return; +} + +SHORT EXPENTRY sortPeople( PMINIRECORDCORE p1, PMINIRECORDCORE p2, PVOID tmp ) +{ + return( strcmpi( ((PeopleSetup *)p1)->itemInfo.name, + ((PeopleSetup *)p2)->itemInfo.name ) ); +} + +void AddItemToPeopleCntr( HWND hwnd, HPOINTER bmp, char *number, char *name, + char *alwfile, char *reject_cause, char *maxrectime, + char *delay, char *ringing, char *notifynum ) +{ + PeopleSetup *rec; + RECORDINSERT riInsert; + + rec = (PeopleSetup *) PVOIDFROMMR( WinSendMsg( hwnd, CM_ALLOCRECORD, + MPFROMLONG(sizeof(PeopleSetup)-sizeof(MINIRECORDCORE)), + MPFROMSHORT( 1 ) ) ); + + strcpy( rec->itemInfo.name, strip_blanks( name ) ); + strcpy( rec->itemInfo.number, strip_blanks( number ) ); + strcpy( rec->itemInfo.alwfile, strip_blanks( alwfile ) ); + strcpy( rec->itemInfo.reject_cause, strip_blanks( reject_cause ) ); + strcpy( rec->itemInfo.maxrectime, strip_blanks( maxrectime ) ); + strcpy( rec->itemInfo.answerdelay, strip_blanks( delay ) ); + strcpy( rec->itemInfo.ringingwave, strip_blanks( ringing ) ); + strcpy( rec->itemInfo.notifynumber, strip_blanks( notifynum ) ); + + rec->itemInfo.pname = rec->itemInfo.name; + rec->itemInfo.pnumber = rec->itemInfo.number; + rec->itemInfo.palwfile = rec->itemInfo.alwfile; + rec->itemInfo.preject = rec->itemInfo.reject_cause; + rec->itemInfo.pmaxrectime = rec->itemInfo.maxrectime; + rec->itemInfo.panswerdelay = rec->itemInfo.answerdelay; + rec->itemInfo.pringingwave = rec->itemInfo.ringingwave; + rec->itemInfo.pnotifynumber = rec->itemInfo.notifynumber; + + rec->itemInfo.icon = bmp; + + rec->core.hptrIcon = (HPOINTER) bmp; + rec->core.pszIcon = rec->itemInfo.name; + + CheckPeopleSetup( rec ); + + riInsert.cb = sizeof( RECORDINSERT ); + riInsert.pRecordOrder = (PRECORDCORE) CMA_END; + riInsert.pRecordParent = NULL; + riInsert.fInvalidateRecord = TRUE; + riInsert.zOrder = CMA_TOP; + riInsert.cRecordsInsert = 1; + + WinSendMsg( hwnd, + CM_INSERTRECORD, + MPFROMP( rec ), + MPFROMP( &riInsert ) ); +} + +void FillPeopleCntr( HWND hwnd ) +{ + FILE *fh; + char str[512], number[512], name[512], alwfile[512]; + char reject_cause[512], maxrectime[512], answerdelay[512], ringing[512]; + char notifynum[512]; + char *stok; + HPOINTER bmp; + + if( (fh = fopen( NAMFILE, "r" )) != NULL ) + { + while( fgets( str, 512, fh ) ) + { + delete_cr( str ); + + if( (strlen( str ) > 0) && (str[0] != '#') ) + { + stok = strtok( str, "|" ); + if( stok ) strcpy( name, stok ); + else strcpy( name, "?" ); + + stok = strtok( NULL, "|" ); + if( stok ) strcpy( number, stok ); + else strcpy( number, "?" ); + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( alwfile, stok ); + else *alwfile = 0; + + stok = strtok( NULL, "|" ); + if( stok != NULL ) + { + switch( *stok ) + { + case '0': + strcpy( reject_cause, REJECT_0 ); + break; + case '1': + strcpy( reject_cause, REJECT_1 ); + break; + case '2': + strcpy( reject_cause, REJECT_2 ); + break; + case '3': + strcpy( reject_cause, REJECT_3 ); + break; + default: + strcpy( reject_cause, REJECT_D ); + break; + } + } + else strcpy( reject_cause, REJECT_D ); + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( maxrectime, stok ); + else *maxrectime = 0; + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( answerdelay, stok ); + else *answerdelay = 0; + + stok = strtok( NULL, "|" ); + if( !stok || atoi( stok ) ) bmp = callersIcoActive; + else bmp = callersIcoInactive; + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( ringing, stok ); + else *ringing = 0; + + stok = strtok( NULL, "|" ); + if( stok && *stok != '*' ) strcpy( notifynum, stok ); + else *notifynum = 0; + + AddItemToPeopleCntr( hwnd, bmp, name, number, alwfile, reject_cause, + maxrectime, answerdelay, ringing, notifynum ); + } + } + + fclose( fh ); + + } + + return; +} + +void SavePeopleSetup( HWND hwnd ) +{ + FILE *fh; + PeopleSetup *pCore; + char reject; + short isActive; + + if( (fh = fopen( NAMFILE, "w" )) != NULL ) + { + fprintf( fh, CREATEMAINT, + NAMFILE, APPNAME ); + + pCore = (PeopleSetup *) WinSendMsg( hwnd, CM_QUERYRECORD, NULL, + MPFROM2SHORT( CMA_FIRST, CMA_ITEMORDER ) ); + + while( pCore ) + { + if( strcmpi(pCore->itemInfo.reject_cause, REJECT_3) == 0 ) + reject = '3'; + else if( strcmpi(pCore->itemInfo.reject_cause, REJECT_2) == 0 ) + reject = '2'; + else if( strcmpi(pCore->itemInfo.reject_cause, REJECT_1) == 0 ) + reject = '1'; + else if( strcmpi(pCore->itemInfo.reject_cause, REJECT_0) == 0 ) + reject = '0'; + else + reject = '*'; + + if( pCore->itemInfo.icon != callersIcoActive ) + isActive = 0; + else + isActive = 1; + + strip_blanks( pCore->itemInfo.name ); + strip_blanks( pCore->itemInfo.alwfile ); + strip_blanks( pCore->itemInfo.maxrectime ); + strip_blanks( pCore->itemInfo.answerdelay ); + strip_blanks( pCore->itemInfo.ringingwave ); + strip_blanks( pCore->itemInfo.notifynumber ); + + fprintf( fh, "%s|%s|%s|%c|%s|%s|%d|%s|%s\n", + strlen( pCore->itemInfo.number ) ? pCore->itemInfo.number : "?", + strlen( pCore->itemInfo.name ) ? pCore->itemInfo.name : "?", + strlen( pCore->itemInfo.alwfile ) ? pCore->itemInfo.alwfile : "*", + reject, + strlen( pCore->itemInfo.maxrectime ) ? pCore->itemInfo.maxrectime : "*", + strlen( pCore->itemInfo.answerdelay ) ? pCore->itemInfo.answerdelay : "*", + isActive, + strlen( pCore->itemInfo.ringingwave ) ? pCore->itemInfo.ringingwave : "*", + strlen( pCore->itemInfo.notifynumber ) ? pCore->itemInfo.notifynumber : "*"); + + pCore = (PeopleSetup *) WinSendMsg( hwnd, CM_QUERYRECORD, + MPFROMP( pCore ), + MPFROM2SHORT( CMA_NEXT, CMA_ITEMORDER ) ); + } + + fclose( fh ); + } +} + +MRESULT EXPENTRY addPeopleProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char number[512], name[512], alwfile[512]; + char reject_cause[512], maxrectime[512], answerdelay[512], isActive; + char ringing[512], notifynum[512]; + HPOINTER bmp; + FILEDLG fileDlg; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + WinSendMsg( WinWindowFromID( hwnd, CFG_PEOPLE_EDITDLG_ACTIVE ), + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_RINGING, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_REJECT, REJECT_D ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_D ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_0 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_1 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_2 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_3 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PEOPLE_EDITDLG_FILEDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVALWFILE; + strcpy( fileDlg.szFullFile, "*.WAV;*.ALW" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + fileDlg.szFullFile ); + + break; + + case CFG_PEOPLE_EDITDLG_RINGING_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVFILE; + strcpy( fileDlg.szFullFile, "*.WAV" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + fileDlg.szFullFile ); + + break; + + case CFG_PEOPLE_EDITDLG_OK: + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NUMBER, + sizeof( number ), (PSZ) number ); + + if( !strlen(number) ) + { + MsgBox( ERRNONUM ); + break; + } + else if( number[0] == '*' ) + { + MsgBox( ERRSTARINNUM ); + break; + } + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NAME, + sizeof( name ), (PSZ) name ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + sizeof( alwfile ), (PSZ) alwfile ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_MAXRECTIM, + sizeof( maxrectime ), (PSZ) maxrectime ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_DELAY, + sizeof( answerdelay ), (PSZ) answerdelay ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + sizeof( reject_cause ), (PSZ) reject_cause ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + sizeof( ringing ), (PSZ) ringing ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, + sizeof( ringing ), (PSZ) notifynum ); + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_PEOPLE_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + if( isActive ) + bmp = callersIcoActive; + else + bmp = callersIcoInactive; + + AddItemToPeopleCntr( WinWindowFromID( hwndPage3, CFG_NBP3_CNTR ), + bmp, number, name, alwfile, reject_cause, + maxrectime, answerdelay, ringing, notifynum ); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +MRESULT EXPENTRY editPeopleProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char number[512], name[512], alwfile[512]; + char reject_cause[512], maxrectime[512], answerdelay[512], isActive; + char ringing[512], notifynum[512]; + FILEDLG fileDlg; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + if( currPerson->itemInfo.icon == callersIcoActive ) + WinSendMsg( WinWindowFromID( hwnd, CFG_PEOPLE_EDITDLG_ACTIVE ), + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NUMBER, + currPerson->itemInfo.number ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NAME, + currPerson->itemInfo.name ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + currPerson->itemInfo.alwfile ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_RINGING, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + currPerson->itemInfo.ringingwave ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_MAXRECTIM, + currPerson->itemInfo.maxrectime ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_DELAY, + currPerson->itemInfo.answerdelay ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + currPerson->itemInfo.reject_cause ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_D ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_0 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_1 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_2 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_3 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, + currPerson->itemInfo.notifynumber ); + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PEOPLE_EDITDLG_FILEDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVALWFILE; + strcpy( fileDlg.szFullFile, "*.WAV;*.ALW" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + fileDlg.szFullFile ); + + break; + + case CFG_PEOPLE_EDITDLG_RINGING_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVFILE; + strcpy( fileDlg.szFullFile, "*.WAV" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + fileDlg.szFullFile ); + + break; + + case CFG_PEOPLE_EDITDLG_OK: + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NUMBER, + sizeof( number ), (PSZ) number ); + + if( !strlen(number) ) + { + MsgBox( ERRNONUM ); + break; + } + else if( number[0] == '*' ) + { + MsgBox( ERRSTARINNUM ); + break; + } + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NAME, + sizeof( name ), (PSZ) name ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + sizeof( alwfile ), (PSZ) alwfile ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + sizeof( ringing ), (PSZ) ringing ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_MAXRECTIM, + sizeof( maxrectime ), (PSZ) maxrectime ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_DELAY, + sizeof( answerdelay ), (PSZ) answerdelay ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + sizeof( reject_cause ), (PSZ) reject_cause ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, + sizeof( notifynum ), (PSZ) notifynum ); + + strcpy( currPerson->itemInfo.number, number ); + strcpy( currPerson->itemInfo.name, name ); + strcpy( currPerson->itemInfo.alwfile, alwfile ); + strcpy( currPerson->itemInfo.reject_cause, reject_cause ); + strcpy( currPerson->itemInfo.answerdelay, answerdelay ); + strcpy( currPerson->itemInfo.maxrectime, maxrectime ); + strcpy( currPerson->itemInfo.ringingwave, ringing ); + strcpy( currPerson->itemInfo.notifynumber, notifynum ); + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_PEOPLE_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + if( isActive ) + currPerson->itemInfo.icon = callersIcoActive; + else + currPerson->itemInfo.icon = callersIcoInactive; + + CheckPeopleSetup( currPerson ); + + WinSendMsg( WinWindowFromID( hwndPage3, CFG_NBP3_CNTR ), + CM_INVALIDATERECORD, &currPerson, + MPFROM2SHORT( 1, CMA_TEXTCHANGED ) ); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +MRESULT EXPENTRY page4Proc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + HWND hwndContainer; + PCNREDITDATA editData; + POINTL ptlMouse; + + switch( msg ) + { + case WM_INITDLG: + hwndContainer = WinWindowFromID( hwnd, CFG_NBP4_CNTR ); + + hwndDtmfPopup = WinLoadMenu( hwndNotebook, NULLHANDLE, + CFG_DTMF_POPUP ); + + InitDtmfCntr( hwndContainer ); + FillDtmfCntr( hwndContainer ); + + break; + + case WM_WINDOWPOSCHANGED: + WinSetWindowPos( WinWindowFromID( hwnd, CFG_NBP4_CNTR ), 0, 0, + 0, ( (PSWP) mp1 )->cx, ( (PSWP) mp1 )->cy, + SWP_MOVE | SWP_SIZE ); + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_DTMF_QEDIT: + currDtmf = (DtmfSetup *) WinSendMsg( WinWindowFromID( hwnd, + CFG_NBP4_CNTR ), + CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + /* automagically jump to real edit-function */ + + case CFG_DTMF_EDIT: + if( currDtmf == NULL ) + break; + + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) editDtmfProc, + NULLHANDLE, CFG_DTMF_EDITDLG, NULL ); + + break; + + case CFG_DTMF_ADD: + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) addDtmfProc, + NULLHANDLE, CFG_DTMF_EDITDLG, NULL ); + break; + + case CFG_DTMF_QDEL: + currDtmf = (DtmfSetup *) WinSendMsg( WinWindowFromID( hwnd, + CFG_NBP4_CNTR ), + CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + /* automagically jump to real delete-function */ + + case CFG_DTMF_DEL: + if( currDtmf == NULL ) + break; + + if( WinMessageBox( HWND_DESKTOP, hwnd, + DELENTRY, + CTELMSG, 0, MB_YESNO | MB_ICONQUESTION | + MB_DEFBUTTON2 | MB_APPLMODAL | MB_MOVEABLE ) + == MBID_YES ) + { + WinSendMsg( WinWindowFromID( hwnd, CFG_NBP4_CNTR ), + CM_REMOVERECORD, MPFROMP( &currDtmf ), + MPFROM2SHORT( 1, CMA_FREE | CMA_INVALIDATE ) ); + } + + break; + + + default: + break; + } + + return 0; + + case WM_CONTROL: + switch( SHORT2FROMMP( mp1 ) ) + { + case CN_ENTER: + if( (currDtmf = (DtmfSetup *) ((PNOTIFYRECORDENTER) mp2)->pRecord) + == NULL ) + break; + + WinPostMsg( hwnd, WM_COMMAND, MPFROMSHORT( CFG_DTMF_EDIT ), NULL ); + break; + + case CN_REALLOCPSZ: + editData = (PCNREDITDATA) PVOIDFROMMP( mp2 ); + + if( editData->pFieldInfo != NULL ) + return (MPARAM) TRUE; + + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + + case CN_ENDEDIT: + currDtmf = (DtmfSetup *) + (((PCNREDITDATA) PVOIDFROMMP( mp2 ))->pRecord); + + CheckDtmfSetup( currDtmf ); + + break; + + case CN_CONTEXTMENU: + currDtmf = (DtmfSetup *) PVOIDFROMMP( mp2 ); + + WinQueryPointerPos( HWND_DESKTOP, &ptlMouse ); + WinMapWindowPoints( HWND_DESKTOP, hwndNotebook, &ptlMouse, 1 ); + + WinPopupMenu( hwndNotebook, hwnd, hwndDtmfPopup, ptlMouse.x, + ptlMouse.y, 0, PU_HCONSTRAIN | PU_VCONSTRAIN | + PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_MOUSEBUTTON2 | + PU_NONE ); + + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +void InitDtmfCntr( HWND hwnd ) +{ + CNRINFO cntrInfo; + FIELDINFOINSERT finfoInsert; + PFIELDINFO pfiDetails, pfiCurrent, pfiSplit; + int fields; + ULONG version; + + /* Set Font & Size */ + DosQuerySysInfo( QSV_VERSION_MINOR, QSV_VERSION_MINOR, (PVOID) &version, + sizeof(ULONG) ); + + if( version == 40 ) + WinSetPresParam( hwnd, PP_FONTNAMESIZE, sizeof( Defv4CntrFont ), + Defv4CntrFont ); + else + WinSetPresParam( hwnd, PP_FONTNAMESIZE, sizeof( DefCntrFont ), + DefCntrFont ); + + /* Remove all Container Items */ + WinSendMsg( hwnd, CM_REMOVERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Remove all Info about Details-View */ + WinSendMsg( hwnd, CM_REMOVEDETAILFIELDINFO, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_FREE ) ); + + /* Get Storage for Columns */ + fields = 5; + + pfiDetails= (PFIELDINFO) PVOIDFROMMR( WinSendMsg(hwnd, + CM_ALLOCDETAILFIELDINFO, + MPFROMSHORT( fields ), + 0 ) ); + + if( pfiDetails == NULL ) + return; + + pfiCurrent = pfiDetails; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_BITMAPORICON | CFA_FIREADONLY | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER; + pfiCurrent->pTitleData = ""; + pfiCurrent->offStruct = FIELDOFFSET( DtmfSetup, itemInfo.icon ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = DTMF_CODE; + pfiCurrent->offStruct = FIELDOFFSET( DtmfSetup, itemInfo.pcode ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER | CFA_FIREADONLY; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = ACTION; + pfiCurrent->offStruct = FIELDOFFSET( DtmfSetup, itemInfo.paction ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_VCENTER | CFA_HORZSEPARATOR; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = ""; + pfiCurrent->offStruct = FIELDOFFSET( DtmfSetup, itemInfo.pparams ); + pfiCurrent->pUserData = NULL; + + pfiCurrent = pfiCurrent->pNextFieldInfo; + pfiCurrent->cb = sizeof( FIELDINFO ); + pfiCurrent->flData = CFA_STRING | CFA_HORZSEPARATOR | + CFA_VCENTER; + pfiCurrent->flTitle = CFA_VCENTER | CFA_FITITLEREADONLY; + pfiCurrent->pTitleData = WINDOW_TITLE; + pfiCurrent->offStruct = FIELDOFFSET( DtmfSetup, itemInfo.ptitle ); + pfiCurrent->pUserData = NULL; + + /* Set up Container Info */ + cntrInfo.flWindowAttr = CV_DETAIL | CA_DETAILSVIEWTITLES; + cntrInfo.pSortRecord = (PVOID) sortDtmf; + cntrInfo.cb = sizeof( CNRINFO ); + cntrInfo.cyLineSpacing = 1; + cntrInfo.slBitmapOrIcon = iconSize; + + WinSendMsg( hwnd, CM_SETCNRINFO, MPFROMP( &cntrInfo ), + MPFROMLONG( CMA_FLWINDOWATTR | CMA_LINESPACING | + CMA_PSORTRECORD | CMA_SLBITMAPORICON ) ); + + finfoInsert.cb = sizeof( FIELDINFOINSERT ); + finfoInsert.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; + finfoInsert.fInvalidateFieldInfo = TRUE; + finfoInsert.cFieldInfoInsert = fields; + + WinSendMsg( hwnd, CM_INSERTDETAILFIELDINFO, MPFROMP( pfiDetails ), + MPFROMP( &finfoInsert ) ); + + return; +} + +SHORT EXPENTRY sortDtmf( PMINIRECORDCORE p1, PMINIRECORDCORE p2, PVOID tmp ) +{ + return( strcmpi( ((DtmfSetup *)p1)->itemInfo.code, + ((DtmfSetup *)p2)->itemInfo.code ) ); +} + +void AddItemToDtmfCntr( HWND hwnd, HPOINTER bmp, char *code, char *action, + char *params, char *title, char *type, char *active ) +{ + DtmfSetup *rec; + RECORDINSERT riInsert; + + rec = (DtmfSetup *) PVOIDFROMMR( WinSendMsg( hwnd, CM_ALLOCRECORD, + MPFROMLONG(sizeof(DtmfSetup)-sizeof(MINIRECORDCORE)), + MPFROMSHORT( 1 ) ) ); + + strcpy( rec->itemInfo.code, code ); + strcpy( rec->itemInfo.action, action ); + strcpy( rec->itemInfo.params, params ); + strcpy( rec->itemInfo.title, title ); + strcpy( rec->itemInfo.type, type ); + strcpy( rec->itemInfo.active, active ); + + rec->itemInfo.pcode = rec->itemInfo.code; + rec->itemInfo.paction = rec->itemInfo.action; + rec->itemInfo.pparams = rec->itemInfo.params; + rec->itemInfo.ptitle = rec->itemInfo.title; + rec->itemInfo.ptype = rec->itemInfo.type; + rec->itemInfo.pactive = rec->itemInfo.active; + + rec->itemInfo.icon = bmp; + + rec->core.hptrIcon = (HPOINTER) bmp; + rec->core.pszIcon = rec->itemInfo.action; + + CheckDtmfSetup( rec ); + + riInsert.cb = sizeof( RECORDINSERT ); + riInsert.pRecordOrder = ( PRECORDCORE ) CMA_END; + riInsert.pRecordParent = NULL; + riInsert.fInvalidateRecord = TRUE; + riInsert.zOrder = CMA_TOP; + riInsert.cRecordsInsert = 1; + + WinSendMsg( hwnd, + CM_INSERTRECORD, + MPFROMP( rec ), + MPFROMP( &riInsert ) ); + +} + +void FillDtmfCntr( HWND hwnd ) +{ + FILE *fh; + char str[512], code[512], action[512], params[512], + title[512], type[512], active[512]; + char *stok; + HPOINTER bmp; + + if( (fh = fopen( ACTFILE, "r" )) != NULL ) + { + while( fgets( str, 512, fh ) ) + { + delete_cr( str ); + + if( (strlen( str ) > 0) && (str[0] != '#') ) + { + stok = strtok( str, "|" ); + if( stok ) strcpy( code, stok ); + else *code = 0; + + stok = strtok( NULL, "|" ); + if( stok ) + { + if( !strcmp( DTMF_REMOTECONTROL, stok ) ) + strcpy( action, DTMF_TEXT_RCONTROL ); + else if( !strcmp( DTMF_REBOOT, stok ) ) + strcpy( action, DTMF_TEXT_REBOOT ); + else if( !strcmp( DTMF_DEACTIVATE, stok ) ) + strcpy( action, DTMF_TEXT_DEACT ); + else if( !strcmp( DTMF_QUIT, stok ) ) + strcpy( action, DTMF_TEXT_QUIT ); + else if( !strcmp( DTMF_SETCALLBACK, stok ) ) + strcpy( action, DTMF_TEXT_SETNOTIFY ); + else + strcpy( action, stok ); + } + else *action = 0; + + stok = strtok( NULL, "|" ); + if( stok ) strcpy( params, stok ); + else *params = 0; + + stok = strtok( NULL, "|" ); + if( stok ) strcpy( title, stok ); + else *title = 0; + + stok = strtok( NULL, "|" ); + if( stok ) strcpy( type, stok ); + else *type = 0; + + stok = strtok( NULL, "|" ); + if( stok ) strcpy( active, stok ); + else strcpy( active, "1" ); + bmp = atoi(active) ? actionIcoActive : actionIcoInactive; + + AddItemToDtmfCntr( hwnd, bmp, code, action, params, title, + type, active ); + } + } + + fclose( fh ); + } + + return; +} + +void SaveDtmfSetup( HWND hwnd ) +{ + FILE *fh; + DtmfSetup *pCore; + char action[512]; + + if( (fh = fopen( ACTFILE, "w" )) != NULL ) + { + fprintf( fh, CREATEMAINT, + ACTFILE, APPNAME ); + + pCore = (DtmfSetup *) WinSendMsg( hwnd, CM_QUERYRECORD, NULL, + MPFROM2SHORT( CMA_FIRST, CMA_ITEMORDER ) ); + + while( pCore ) + { + if( !strcmp( DTMF_TEXT_RCONTROL, pCore->itemInfo.action ) ) + strcpy( action, DTMF_REMOTECONTROL ); + else if( !strcmp( DTMF_TEXT_REBOOT, pCore->itemInfo.action ) ) + strcpy( action, DTMF_REBOOT ); + else if( !strcmp( DTMF_TEXT_DEACT, pCore->itemInfo.action ) ) + strcpy( action, DTMF_DEACTIVATE ); + else if( !strcmp( DTMF_TEXT_QUIT, pCore->itemInfo.action ) ) + strcpy( action, DTMF_QUIT ); + else if( !strcmp( DTMF_TEXT_SETNOTIFY, pCore->itemInfo.action ) ) + strcpy( action, DTMF_SETCALLBACK ); + else + strcpy( action, pCore->itemInfo.action ); + + fprintf( fh, "%s|%s|%s|%s|%s|%s\n", + pCore->itemInfo.code, + action, + pCore->itemInfo.params, + pCore->itemInfo.title, + pCore->itemInfo.type, + pCore->itemInfo.active ); + + pCore = (DtmfSetup *) WinSendMsg( hwnd, CM_QUERYRECORD, + MPFROMP( pCore ), + MPFROM2SHORT( CMA_NEXT, CMA_ITEMORDER ) ); + } + + fclose( fh ); + } +} + +MRESULT EXPENTRY editDtmfProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char isActive; + short index; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_CODE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + if( currDtmf->itemInfo.active[0] == '1' ) + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_ACTIVE, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinSetDlgItemText( hwnd, CFG_DTMF_EDITDLG_CODE, + currDtmf->itemInfo.code ); + + if( !strcmp( DTMF_TEXT_RCONTROL, currDtmf->itemInfo.action ) ) + { + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_RCONTROL, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + } + else if( !strcmp( DTMF_TEXT_REBOOT, currDtmf->itemInfo.action ) ) + { + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_REBOOT, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + } + else if( !strcmp( DTMF_TEXT_DEACT, currDtmf->itemInfo.action ) ) + { + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_DEACT, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + } + else if( !strcmp( DTMF_TEXT_QUIT, currDtmf->itemInfo.action ) ) + { + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_QUIT, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + } + else if( !strcmp( DTMF_TEXT_SETNOTIFY, currDtmf->itemInfo.action ) ) + { + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_SETNOTIFY, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + } + else + { + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_EXEC, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG ), TRUE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG ), TRUE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE ), TRUE ); + + WinSetDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG, + currDtmf->itemInfo.action ); + + WinSetDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG, + currDtmf->itemInfo.params ); + + WinSetDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE, + currDtmf->itemInfo.title ); + } + + break; + + case WM_CONTROL: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_DTMF_EDITDLG_RB_EXEC: + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG ), TRUE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG ), TRUE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE ), TRUE ); + break; + + case CFG_DTMF_EDITDLG_RB_RCONTROL: + case CFG_DTMF_EDITDLG_RB_REBOOT: + case CFG_DTMF_EDITDLG_RB_DEACT: + case CFG_DTMF_EDITDLG_RB_QUIT: + case CFG_DTMF_EDITDLG_RB_SETNOTIFY: + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG ), FALSE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG ), FALSE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE ), FALSE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_DTMF_EDITDLG_OK: + strcpy( currDtmf->itemInfo.code, " " ); + strcpy( currDtmf->itemInfo.params, " " ); + strcpy( currDtmf->itemInfo.title, " " ); + strcpy( currDtmf->itemInfo.type, " " ); + + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_CODE, + sizeof( currDtmf->itemInfo.code ), + (PSZ) currDtmf->itemInfo.code ); + + index = (short) WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_RCONTROL, + BM_QUERYCHECKINDEX, NULL, NULL ); + index+= CFG_DTMF_EDITDLG_RB_RCONTROL; + + switch( index ) + { + case CFG_DTMF_EDITDLG_RB_RCONTROL: + strcpy( currDtmf->itemInfo.action, DTMF_TEXT_RCONTROL ); + break; + case CFG_DTMF_EDITDLG_RB_REBOOT: + strcpy( currDtmf->itemInfo.action, DTMF_TEXT_REBOOT ); + break; + case CFG_DTMF_EDITDLG_RB_DEACT: + strcpy( currDtmf->itemInfo.action, DTMF_TEXT_DEACT ); + break; + case CFG_DTMF_EDITDLG_RB_QUIT: + strcpy( currDtmf->itemInfo.action, DTMF_TEXT_QUIT ); + break; + case CFG_DTMF_EDITDLG_RB_SETNOTIFY: + strcpy( currDtmf->itemInfo.action, DTMF_TEXT_SETNOTIFY ); + break; + default: + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG, + sizeof( currDtmf->itemInfo.action ), + (PSZ) currDtmf->itemInfo.action ); + + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG, + sizeof( currDtmf->itemInfo.params ), + (PSZ) currDtmf->itemInfo.params ); + + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE, + sizeof( currDtmf->itemInfo.title ), + (PSZ) currDtmf->itemInfo.title ); + break; + } + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_DTMF_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + if( isActive ) + { + currDtmf->itemInfo.icon = actionIcoActive; + strcpy( currDtmf->itemInfo.active, "1" ); + } + else + { + currDtmf->itemInfo.icon = actionIcoInactive; + strcpy( currDtmf->itemInfo.active, "0" ); + } + + CheckDtmfSetup( currDtmf ); + + WinSendMsg( WinWindowFromID( hwndPage4, CFG_NBP4_CNTR ), + CM_INVALIDATERECORD, &currDtmf, + MPFROM2SHORT( 1, CMA_TEXTCHANGED ) ); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +MRESULT EXPENTRY addDtmfProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char isActive; + short index; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_CODE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_ACTIVE, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_RCONTROL, + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + break; + + case WM_CONTROL: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_DTMF_EDITDLG_RB_EXEC: + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG ), TRUE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG ), TRUE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE ), TRUE ); + break; + + case CFG_DTMF_EDITDLG_RB_RCONTROL: + case CFG_DTMF_EDITDLG_RB_REBOOT: + case CFG_DTMF_EDITDLG_RB_DEACT: + case CFG_DTMF_EDITDLG_RB_QUIT: + case CFG_DTMF_EDITDLG_RB_SETNOTIFY: + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG ), FALSE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG ), FALSE ); + WinEnableWindow( WinWindowFromID( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE ), FALSE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_DTMF_EDITDLG_OK: + { + HPOINTER bmp; + char code[512], action[512], params[512], title[512], active[512]; + + strcpy( code, " " ); + strcpy( params, " " ); + strcpy( title, " " ); + + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_CODE, + sizeof( code ), (PSZ) code ); + + index = (short) WinSendDlgItemMsg( hwnd, CFG_DTMF_EDITDLG_RB_RCONTROL, + BM_QUERYCHECKINDEX, NULL, NULL ); + index+= CFG_DTMF_EDITDLG_RB_RCONTROL; + + switch( index ) + { + case CFG_DTMF_EDITDLG_RB_RCONTROL: + strcpy( action, DTMF_TEXT_RCONTROL ); + break; + case CFG_DTMF_EDITDLG_RB_REBOOT: + strcpy( action, DTMF_TEXT_REBOOT ); + break; + case CFG_DTMF_EDITDLG_RB_DEACT: + strcpy( action, DTMF_TEXT_DEACT ); + break; + case CFG_DTMF_EDITDLG_RB_QUIT: + strcpy( action, DTMF_TEXT_QUIT ); + break; + case CFG_DTMF_EDITDLG_RB_SETNOTIFY: + strcpy( action, DTMF_TEXT_SETNOTIFY ); + break; + default: + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_PRG, + sizeof( action ), (PSZ) action ); + + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_ARG, + sizeof( params ), (PSZ) params ); + + WinQueryDlgItemText( hwnd, CFG_DTMF_EDITDLG_EXEC_TITLE, + sizeof( title ), (PSZ) title ); + break; + } + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_DTMF_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + if( isActive ) + { + bmp = actionIcoActive; + strcpy( active, "1" ); + } + else + { + bmp = actionIcoInactive; + strcpy( active, "0" ); + } + + AddItemToDtmfCntr( WinWindowFromID( hwndPage4, CFG_NBP4_CNTR ), + bmp, code, action, params, title, "0", active ); + + WinDismissDlg( hwnd, TRUE ); + break; + } + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + +void CheckEAZSetup( EAZSetup *rec ) +{ + if( !strlen( strip_blanks(rec->itemInfo.port) ) ) + strcpy( rec->itemInfo.port, "?" ); + + if( !strlen( strip_blanks(rec->itemInfo.desc) ) ) + strcpy( rec->itemInfo.desc, "?" ); + + if( !strlen( strip_blanks(rec->itemInfo.reject_cause) ) ) + strcpy( rec->itemInfo.reject_cause, REJECT_0 ); +} + +void CheckPeopleSetup( PeopleSetup *rec ) +{ + if( !strlen( strip_blanks(rec->itemInfo.name) ) ) + strcpy( rec->itemInfo.name, "?" ); + + if( !strlen( strip_blanks(rec->itemInfo.number) ) ) + strcpy( rec->itemInfo.number, "?" ); + + if( !strlen( strip_blanks(rec->itemInfo.reject_cause) ) ) + strcpy( rec->itemInfo.reject_cause, REJECT_0 ); +} + +void CheckDtmfSetup( DtmfSetup *rec ) +{ + if( !strlen( strip_blanks(rec->itemInfo.code) ) ) + strcpy( rec->itemInfo.code, "?" ); + + if( !strlen( strip_blanks(rec->itemInfo.action) ) ) + strcpy( rec->itemInfo.action, DTMF_TEXT_RCONTROL ); +} + +MRESULT EXPENTRY addNewCallerProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + char number[512], name[512], alwfile[512], *pt, reject; + char reject_cause[512], maxrectime[512], answerdelay[512], isActive; + char ringing[512], notifynum[512]; + HPOINTER bmp; + FILEDLG fileDlg; + FILE *fh; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( HWND_DESKTOP, hwnd ); + + WinSendMsg( WinWindowFromID( hwnd, CFG_PEOPLE_EDITDLG_ACTIVE ), + BM_SETCHECK, MPFROMSHORT( 1 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_FILE, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_RINGING, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_REJECT, REJECT_D ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_D ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_0 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_1 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_2 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + LM_INSERTITEM, MPFROMSHORT(LIT_END), + MPFROMP( REJECT_3 ) ); + + WinSendDlgItemMsg( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, EM_SETTEXTLIMIT, + MPFROMSHORT( 512 ), NULL ); + + strcpy( name, currRec->itemInfo.caller ); + pt = strchr( name, '(' ); + if( pt != NULL ) + *(pt-1) = 0; + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NUMBER, name ); + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case CFG_PEOPLE_EDITDLG_FILEDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVALWFILE; + strcpy( fileDlg.szFullFile, "*.WAV;*.ALW" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + fileDlg.szFullFile ); + + break; + + case CFG_PEOPLE_EDITDLG_RINGING_FDLG: + memset( &fileDlg, 0, sizeof(fileDlg) ); + + fileDlg.cbSize = sizeof( fileDlg ); + fileDlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; + fileDlg.pszTitle = (PSZ) CHOOSEWAVFILE; + strcpy( fileDlg.szFullFile, "*.WAV" ); + + WinFileDlg( HWND_DESKTOP, hwnd, &fileDlg ); + + if( fileDlg.lReturn == DID_OK ) + WinSetDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + fileDlg.szFullFile ); + + break; + + case CFG_PEOPLE_EDITDLG_OK: + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NUMBER, + sizeof( number ), (PSZ) number ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NAME, + sizeof( name ), (PSZ) name ); + + if( !strlen( strip_blanks( name ) ) ) + strcpy( name, number ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_FILE, + sizeof( alwfile ), (PSZ) alwfile ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_MAXRECTIM, + sizeof( maxrectime ), (PSZ) maxrectime ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_DELAY, + sizeof( answerdelay ), (PSZ) answerdelay ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_REJECT, + sizeof( reject_cause ), (PSZ) reject_cause ); + + if( strcmpi(reject_cause, REJECT_3) == 0 ) reject = '3'; + else if( strcmpi(reject_cause, REJECT_2) == 0 ) reject = '2'; + else if( strcmpi(reject_cause, REJECT_1) == 0 ) reject = '1'; + else if( strcmpi(reject_cause, REJECT_0) == 0 ) reject = '0'; + else reject = '*'; + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_RINGING, + sizeof( ringing ), (PSZ) ringing ); + + WinQueryDlgItemText( hwnd, CFG_PEOPLE_EDITDLG_NOTIFY, + sizeof( notifynum ), (PSZ) notifynum ); + + isActive = (char) WinSendMsg( WinWindowFromID( hwnd, + CFG_PEOPLE_EDITDLG_ACTIVE), BM_QUERYCHECK, + NULL, NULL ); + + strip_blanks( number ); + strip_blanks( name ); + strip_blanks( alwfile ); + strip_blanks( number ); + strip_blanks( name ); + strip_blanks( alwfile ); + strip_blanks( ringing ), + strip_blanks( notifynum ); + + if( (fh = fopen( NAMFILE, "a" )) != NULL ) + { + fprintf( fh, "%s|%s|%s|%c|%s|%s|%d|%s\n", + strlen( number ) ? number : "?", + strlen( name ) ? name : "?", + strlen( alwfile ) ? alwfile : "*", + reject, + strlen( maxrectime ) ? maxrectime : "*", + strlen( answerdelay ) ? answerdelay : "*", + isActive, + strlen( ringing ) ? ringing : "*", + strlen( notifynum ) ? notifynum : "*"); + + fclose( fh ); + + strcpy( currRec->itemInfo.caller, name ); + + WinSendMsg( hwndCntr, CM_INVALIDATERECORD, &currRec, + MPFROM2SHORT( 1, CMA_TEXTCHANGED ) ); + + } + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; + + default: + return WinDefDlgProc( hwnd, msg, mp1, mp2 ); + } + + return 0; +} + + \ No newline at end of file diff --git a/capitel/source.os2/CONFIG.H b/capitel/source.os2/CONFIG.H new file mode 100644 index 0000000..ac619e2 --- /dev/null +++ b/capitel/source.os2/CONFIG.H @@ -0,0 +1,64 @@ + +MRESULT EXPENTRY configProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY addNewCallerProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); + +typedef struct _EAZItemInfo +{ + HPOINTER icon; + CHAR port[512], + desc[512], + alwfile[512], + reject_cause[512], + maxrectime[512], + answerdelay[512], + ringingwave[512], + notifynumber[512]; + PCHAR pport, pdesc, palwfile, preject, pmaxrectime, panswerdelay, + pringingwave, pnotifynumber; +} EAZITEMINFO; + +typedef struct _EAZSetup +{ + MINIRECORDCORE core; + EAZITEMINFO itemInfo; +} EAZSetup; + +typedef struct _PeopleItemInfo +{ + HPOINTER icon; + CHAR name[512], + number[512], + alwfile[512], + reject_cause[512], + maxrectime[512], + answerdelay[512], + ringingwave[512], + notifynumber[512]; + PCHAR pnumber, pname, palwfile, preject, pmaxrectime, panswerdelay, + pringingwave, pnotifynumber; +} PEOPLEITEMINFO; + +typedef struct _PeopleSetup +{ + MINIRECORDCORE core; + PEOPLEITEMINFO itemInfo; +} PeopleSetup; + +typedef struct _DtmfItemInfo +{ + HPOINTER icon; + CHAR code[512], + action[512], + params[512], + title[512], + type[512], + active[512]; + PCHAR pcode, paction, pparams, ptitle, ptype, pactive; +} DTMFITEMINFO; + +typedef struct _DtmfSetup +{ + MINIRECORDCORE core; + DTMFITEMINFO itemInfo; +} DtmfSetup; + diff --git a/capitel/source.os2/CONFIGEX.H b/capitel/source.os2/CONFIGEX.H new file mode 100644 index 0000000..4501bf8 --- /dev/null +++ b/capitel/source.os2/CONFIGEX.H @@ -0,0 +1,5 @@ + +extern short isMinimized; + +extern SWP oldSWP; + diff --git a/capitel/source.os2/CONFIGRC.H b/capitel/source.os2/CONFIGRC.H new file mode 100644 index 0000000..60ab27e --- /dev/null +++ b/capitel/source.os2/CONFIGRC.H @@ -0,0 +1,105 @@ +/* Items of config-dialog */ + +#define CFG_DIALOG 1800 + +#define CFG_BUT_SAVE 1805 +#define CFG_BUT_CANCEL 1806 +#define CFG_NOTEBOOK 1807 + +#define CFG_NB_PAGE1 1900 +#define CFG_NB_PAGE2 1901 +#define CFG_NB_PAGE3 1902 +#define CFG_NB_PAGE4 1903 + +#define CFG_NBP1_DELAY 2000 +#define CFG_NBP1_44KHZ 2001 +#define CFG_NBP1_DELPROMPT 2002 +#define CFG_NBP1_MAXRECTIME 2003 +#define CFG_NBP1_LOGFILE 2005 +#define CFG_NBP1_IGNOREEMPTY 2006 +#define CFG_NBP1_SHOWDIGITAL 2007 +#define CFG_NBP1_FLASH 2008 +#define CFG_NBP1_EXPAND 2009 +#define CFG_NBP1_DTMF 2010 +#define CFG_NBP1_SILENCE 2011 +#define CFG_NBP1_POPUPWINDOW 2012 +#define CFG_NBP1_RINGING 2013 +#define CFG_NBP1_RINGING_FILE 2014 +#define CFG_NBP1_RINGING_FDLG 2015 +#define CFG_NBP1_WELCOME_FILE 2016 +#define CFG_NBP1_WELCOME_FDLG 2017 +#define CFG_NBP1_ULAW_CODEC 2018 +#define CFG_NBP1_NOTIFY_NUMBER 2019 + +#define CFG_NBP2_CNTR 2030 +#define CFG_NBP3_CNTR 2031 +#define CFG_NBP4_CNTR 2032 + +#define CFG_PEOPLE_POPUP 3000 +#define CFG_PEOPLE_ADD 3001 +#define CFG_PEOPLE_DEL 3002 +#define CFG_PEOPLE_QDEL 3003 +#define CFG_PEOPLE_EDIT 3004 +#define CFG_PEOPLE_QEDIT 3005 + +#define CFG_PEOPLE_EDITDLG 3010 +#define CFG_PEOPLE_EDITDLG_OK 3011 +#define CFG_PEOPLE_EDITDLG_CANCEL 3012 +#define CFG_PEOPLE_EDITDLG_NUMBER 3013 +#define CFG_PEOPLE_EDITDLG_NAME 3014 +#define CFG_PEOPLE_EDITDLG_FILE 3015 +#define CFG_PEOPLE_EDITDLG_FILEDLG 3016 +#define CFG_PEOPLE_EDITDLG_MAXRECTIM 3017 +#define CFG_PEOPLE_EDITDLG_DELAY 3018 +#define CFG_PEOPLE_EDITDLG_REJECT 3019 +#define CFG_PEOPLE_EDITDLG_ACTIVE 3020 +#define CFG_PEOPLE_EDITDLG_RINGING 3021 +#define CFG_PEOPLE_EDITDLG_RINGING_FDLG 3022 +#define CFG_PEOPLE_EDITDLG_NOTIFY 3023 + +#define CFG_PORTS_POPUP 3200 +#define CFG_PORTS_EDIT 3201 +#define CFG_PORTS_QEDIT 3202 +#define CFG_PORTS_ADD 3203 +#define CFG_PORTS_DEL 3204 +#define CFG_PORTS_QDEL 3205 + +#define CFG_PORTS_EDITDLG 3210 +#define CFG_PORTS_EDITDLG_OK 3211 +#define CFG_PORTS_EDITDLG_CANCEL 3212 +#define CFG_PORTS_EDITDLG_DESCR 3213 +#define CFG_PORTS_EDITDLG_FILE 3214 +#define CFG_PORTS_EDITDLG_FILEDLG 3215 +#define CFG_PORTS_EDITDLG_MAXRECTIM 3216 +#define CFG_PORTS_EDITDLG_DELAY 3217 +#define CFG_PORTS_EDITDLG_REJECT 3218 +#define CFG_PORTS_EDITDLG_NUMBER 3219 +#define CFG_PORTS_EDITDLG_ACTIVE 3220 +#define CFG_PORTS_EDITDLG_RINGING 3221 +#define CFG_PORTS_EDITDLG_RINGING_FDLG 3222 +#define CFG_PORTS_EDITDLG_NOTIFY 3223 + +#define CFG_DTMF_POPUP 3300 +#define CFG_DTMF_EDIT 3301 +#define CFG_DTMF_QEDIT 3302 +#define CFG_DTMF_ADD 3303 +#define CFG_DTMF_DEL 3304 +#define CFG_DTMF_QDEL 3305 + +#define CFG_DTMF_EDITDLG 3310 +#define CFG_DTMF_EDITDLG_OK 3311 +#define CFG_DTMF_EDITDLG_CANCEL 3312 +#define CFG_DTMF_EDITDLG_ACTIVE 3313 +#define CFG_DTMF_EDITDLG_CODE 3314 + +#define CFG_DTMF_EDITDLG_RB_RCONTROL 3315 +#define CFG_DTMF_EDITDLG_RB_SETNOTIFY 3316 +#define CFG_DTMF_EDITDLG_RB_REBOOT 3317 +#define CFG_DTMF_EDITDLG_RB_DEACT 3318 +#define CFG_DTMF_EDITDLG_RB_QUIT 3319 +#define CFG_DTMF_EDITDLG_RB_EXEC 3320 + +#define CFG_DTMF_EDITDLG_EXEC_PRG 3321 +#define CFG_DTMF_EDITDLG_EXEC_ARG 3322 +#define CFG_DTMF_EDITDLG_EXEC_TITLE 3323 + diff --git a/capitel/source.os2/CTELOS2A.DEF b/capitel/source.os2/CTELOS2A.DEF new file mode 100644 index 0000000..09906ea --- /dev/null +++ b/capitel/source.os2/CTELOS2A.DEF @@ -0,0 +1,7 @@ +NAME CAPITEL WINDOWAPI +DESCRIPTION 'CapiTel for OS/2 - (c) 1996-98 by Werner Fehn and Carsten Wimmer' +STACKSIZE 32000 +SEGMENTS + '_MSGSEG32' CLASS 'CODE' + + diff --git a/capitel/source.os2/CTELOS2C.DEF b/capitel/source.os2/CTELOS2C.DEF new file mode 100644 index 0000000..c0939dc --- /dev/null +++ b/capitel/source.os2/CTELOS2C.DEF @@ -0,0 +1,7 @@ +NAME CAPITEL WINDOWCOMPAT +DESCRIPTION 'CapiTel for OS/2 - (c) 1996-98 by Werner Fehn and Carsten Wimmer' +STACKSIZE 32000 +SEGMENTS + '_MSGSEG32' CLASS 'CODE' + + diff --git a/capitel/source.os2/CTELOS2E.LNK b/capitel/source.os2/CTELOS2E.LNK new file mode 100644 index 0000000..713fd6c --- /dev/null +++ b/capitel/source.os2/CTELOS2E.LNK @@ -0,0 +1,3 @@ +>ctelos2e.exe +ctelos2g.exe +ctelos2t.exe +|7k@;$u5TwrV@x_1dv5RcN!jHYRp#yiQ3As2T5^T~9MR zv&_Ypwi45~^8M$Wncek; zWCz~Zmz~{n{_|hX|9}5wK3ll5ke!{W%cN6x>t62IS6|m%_tL();B%+`Uj2LZzpejQ z{ZxbA@Os0~8Xh*(?eE%uWB-f$f4ct<`_D8c8lP?aZsX4z|I+xxfoBf9a^UR)?;rT& z!0^GF2VXmQ_uvNy|9yKWyDbk|x?7)Wz14cZ^&hSAqsGzOM}K{^p>4SB z*|t~P?za7+?c=ugV_!P<^06Nt``}n>d#3%x_BY!h`KE}mLAWuAKD)Nf9;c3$etcfQbhyYrWwpL7nM z{_5%1PQP{fcc(u(eYk6=>r$8A^+wlEx<2iiJoC*nzdCdBtbXtIO z_xbbd=ifg6;CxGWy8DIhA9eq&`y#u+zQ^8Y%{|GU&7M0wANCCPZuP#|`*Ck`-)!I0 zec$f8*Y~im@51#9w=TSM;jb5zt@qWvRknIy{i<(W=ZTS`Td4Z;|Lq6MIF4mA!)2o* zENvGx!(!ZVY-fZmYgT~=KUUT_%Nr(VMO){rq&ZrVd)y&H%l25#b{wAbMp(Gd!UkIH z?HytovwYKJCEKt-GsJ9%X%;iAbL>Nq!Wfm?6}y#^h!Y`VlP zROp>UeDR#`8S5OVW122qiw_X=aw9AyVW{MLEVDSnR<+zsTCT)`iY*$;0hzQMLFCS@ zY^QnzVmmb44Q$jkFhl2-M`-6%c!2a`NWW$vc*3m`4}_yjgH*4>UT{He)v_H5Z*m17 z9E2y7$`Rg|eN0&~#CxT)<11JU!9!YKExVrPc<^i+=5hkLBpU@~RUF8u8;%W=cw40a zS$O5mlYk;RDsB}zkpAQ);$D;69Y!K9LE}#Q!}!91LU>Tph59HkG`Usq)(Bz=4o%G| zRQlK&0tE=Ggi;0%OvDAQX;N+qbObS_B-|s@k#KVIq%e%!l9uDlCXKnQv`E!or z&E1@1ND~aC=F@}1$npvwiy7>aH;tU9oA}4Ht zxv)W5xS7x{^xrOrKVk#5E+q1zuof{zwpmBvA{sOfphYndbb;8r8yAp6bX{x&(juc# zQ38`a(ohSsi4@H&@~ejn17ldxL^dR0a0p2!EQ10C-4F>NZ*J$d+QWS^THH=Xi`&U) zaXT3;ZYQI~?PRpLous%;iJoa2P0&RqoY8y}-R;g|fA3RjMy=Q=InJ!F zp+8unRF{;gN%A*LAHh&~U|DGRorVz|?=ml7ouMGR88O#d91_ zDe*LhKUpR%o)cJBZY}e~e{=4U0>u z#dJm)WKo)oHqen-52K`MmR%X>k0D9%%@XFpsL^2TF{C-P_;~}(w=Svs6RdxHH)jE2 zq8(Nss(OAg#eyDr$1a8#MF^^@98^6hOu@`CI8xz~1GFErQArlI zq3YG+t}T1mL;`D}rR*cef<7_=bJa-5iLjgwslBBYS34E2Y24IynzBx#96{@QvNgAoGjEzTXD`Vr)d}e}tCKbM( z+`Ft0uOpO=R3zcGvMG8Iq}$>D?T2cw>Q8nhxxB*gvMPOTVTrzz^Ye?TMQTnY&$ z=}BmVbEYZ@VuCq}OTi*0xC +#include + +#define DLLNAME "MCIAPI" + +typedef ULONG (* EXPENTRY tPlayWavFile) ( HWND, PSZ, ULONG, PSZ, HWND ); + +tPlayWavFile mciPlayFile; + +HMODULE MMOS2Handle = NULLHANDLE; +char mmpmInstalled=0; + +short LoadMMPM( void ) +{ + UCHAR LoadError[128] = ""; + APIRET rc = NO_ERROR; + + rc = DosLoadModule( LoadError, sizeof(LoadError), DLLNAME, &MMOS2Handle ); + + if( rc != NO_ERROR) + return 0; + + rc = DosQueryProcAddr( MMOS2Handle, 0L, (PSZ)"mciPlayFile", + (PFN *) &mciPlayFile ); + + if( rc ) + { + DosFreeModule( MMOS2Handle ); + return 0; + } + + + mmpmInstalled = 1; + return 1; +} + +short UnLoadMMPM( void ) +{ + if( !mmpmInstalled ) + return 0; + + mmpmInstalled = 0; + DosFreeModule( MMOS2Handle ); + MMOS2Handle = NULLHANDLE; + return 1; +} + diff --git a/capitel/source.os2/LOADMCI.H b/capitel/source.os2/LOADMCI.H new file mode 100644 index 0000000..9a10369 --- /dev/null +++ b/capitel/source.os2/LOADMCI.H @@ -0,0 +1,8 @@ + +short LoadMMPM( void ); +short UnLoadMMPM( void ); + +extern ULONG (* EXPENTRY mciPlayFile) ( HWND, PSZ, ULONG, PSZ, HWND ); + +extern char mmpmInstalled; + diff --git a/capitel/source.os2/REGIST.C b/capitel/source.os2/REGIST.C new file mode 100644 index 0000000..37d68ee --- /dev/null +++ b/capitel/source.os2/REGIST.C @@ -0,0 +1,62 @@ +#define INCL_WINSHELLDATA +#define INCL_WINDIALOGS + +#include +#include +#include "capitel.h" +#include "..\..\common\source\global.h" +//#include "..\..\common\source\texte.h" +#include "texte.h" +//#include "..\..\..\units\common.src\cfg_file.h" +#include "..\..\util\source\register.h" + +void centerDialog(HWND hwndFrame, HWND hWndDlg); +void MsgBox( char * ); + +MRESULT EXPENTRY registrationProc( HWND hwnd, USHORT msg, + MPARAM mp1, MPARAM mp2 ) +{ + char str[100], str2[100]; + + switch( msg ) + { + case WM_INITDLG: + centerDialog( hwndFrame, hwnd ); + + if( queryRegistration( str, str2 ) ) + { + WinSetDlgItemText( hwnd, REG_NAME, str ); + WinSetDlgItemText( hwnd, REG_CODE, str2 ); + } + + break; + + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case REG_OK: + WinQueryDlgItemText( hwnd, REG_NAME, sizeof( str ), (PSZ) str ); + WinQueryDlgItemText( hwnd, REG_CODE, sizeof( str2 ), (PSZ) str2 ); + strcpy( str2, strupr( str2 ) ); + + if( setRegistration( str, str2 ) ) + MsgBox( THANKREG ); + else + MsgBox( INVALIDREG ); + + WinDismissDlg( hwnd, TRUE ); + break; + + default: + return( WinDefDlgProc( hwnd, msg, mp1, mp2 ) ); + } + break; + + default: + return( WinDefDlgProc( hwnd, msg, mp1, mp2 ) ); + } + + return 0; +} + + \ No newline at end of file diff --git a/capitel/source.os2/REGIST.H b/capitel/source.os2/REGIST.H new file mode 100644 index 0000000..ab244d5 --- /dev/null +++ b/capitel/source.os2/REGIST.H @@ -0,0 +1,4 @@ +MRESULT EXPENTRY registrationProc( HWND hwnd, USHORT msg, + MPARAM mp1, MPARAM mp2 ); + + \ No newline at end of file diff --git a/capitel/source.os2/STATBAR.C b/capitel/source.os2/STATBAR.C new file mode 100644 index 0000000..2736dec --- /dev/null +++ b/capitel/source.os2/STATBAR.C @@ -0,0 +1,79 @@ +#define INCL_WIN +#define INCL_DOS + +#include +#include + +#include "capitel.h" +#include "..\..\common\source\version.h" +#include "statbar.h" + +#define sBarClass "pmStatusbar" + +MRESULT EXPENTRY sBarProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); + +void registerStatusbar( HAB hab ) +{ + WinRegisterClass( hab, sBarClass, sBarProc, 0, 0 ); +} + +MRESULT EXPENTRY sBarProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) +{ + int cx, cy; + HWND hwndText; + RECTL rect; + HPS hps; + + switch( msg ) + { + case WM_CREATE: + WinCreateWindow( hwnd, WC_STATIC, APPNAME, SS_TEXT | WS_VISIBLE | + DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP, + ID_STATUSBAR, 0, NULL ); + break; + + case WM_SIZE: + cx = SHORT1FROMMP( mp2 ); + cy = SHORT2FROMMP( mp2 ) - 4; + + hwndText = WinWindowFromID( hwnd, ID_STATUSBAR ); + WinSetWindowPos( hwndText, HWND_TOP, 2, 2, cx, cy, SWP_MOVE | SWP_SIZE | + SWP_ZORDER ); + break; + + case WM_PAINT: { + RECTL rcl; + POINTL pt; + HPS hps = WinBeginPaint( hwnd, 0, 0 ); + + WinQueryWindowRect( hwnd, &rcl ); + WinFillRect( hps, &rcl, SYSCLR_BUTTONMIDDLE ); + + pt.x = rcl.xLeft; + pt.y = rcl.yTop - 1; + GpiSetColor( hps, SYSCLR_BUTTONDARK ); + GpiMove( hps, &pt ); + pt.x = rcl.xRight - 1; + GpiLine( hps, &pt ); + pt.x = rcl.xLeft; + pt.y = rcl.yTop - 2; + GpiSetColor( hps, CLR_WHITE ); + GpiMove( hps, &pt ); + pt.x = rcl.xRight - 1; + GpiLine( hps, &pt ); + + WinEndPaint( hps ); + } break; + + case SB_SETTEXT: + hwndText = WinWindowFromID( hwnd, ID_STATUSBAR ); + WinSetWindowText( hwndText, mp1 ); + break; + + default: + return( WinDefWindowProc( hwnd, msg, mp1, mp2 ) ); + } + + return FALSE; +} + diff --git a/capitel/source.os2/STATBAR.H b/capitel/source.os2/STATBAR.H new file mode 100644 index 0000000..ae50ad1 --- /dev/null +++ b/capitel/source.os2/STATBAR.H @@ -0,0 +1,8 @@ + +#define SB_SETTEXT WM_USER + +#define SetStatus(text) WinSendMsg( hwndStatusbar, SB_SETTEXT, \ + (MPARAM)text, 0 ); + +void registerStatusbar( HAB ); + diff --git a/capitel/source.os2/SYSFILE.C b/capitel/source.os2/SYSFILE.C new file mode 100644 index 0000000..2d7d2c2 --- /dev/null +++ b/capitel/source.os2/SYSFILE.C @@ -0,0 +1,122 @@ +#define INCL_DOSMISC + +#include +#include +#include +#include +#include + +#include "capitel.h" +#include "..\..\common\source\version.h" +#include "..\..\common\source\global.h" +#include "texte.h" +//#include "..\..\common\source\texte.h" + +#define BASEDIR ";]PT3]" +#define BOOTDIR "CPPU]" +#define PDDNAME "QPJOUEE/TZT" + +#define DAYS 62 // Number of Evaluation Days + +void MsgBox( char * ); +void ErrorBox( char *, HWND ); +char textmsg[]; + +short checkSystemFile( void ) +{ + char filename[256], appver[5]; + short i; + APIRET rc; + HFILE FileHandle = 0; + ULONG ActionTaken, bootdrive, version; + FILESTATUS3 FileInfo = {{0}}; + struct tm *ptmbuf; + struct tm tmbuf; + time_t tod, past, usetime; + short HOURMINSEC; + + strcpy( appver, APPVER ); + appver[1] = appver[2]; + appver[2] = 0; + HOURMINSEC = (short) atoi( appver ); + + HOURMINSEC &= 31; + + DosQuerySysInfo( QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, &bootdrive, + sizeof( bootdrive ) ); + + DosQuerySysInfo( QSV_VERSION_MINOR, QSV_VERSION_MINOR, &version, + sizeof( version ) ); + + if( version < 30 ) + sprintf( filename, "%c%s%s", bootdrive+65, BASEDIR, PDDNAME ); + else + sprintf( filename, "%c%s%s%s", bootdrive+65, BASEDIR, BOOTDIR, PDDNAME ); + + for( i=0 ; i < strlen( filename ) ; i++ ) + filename[i] = filename[i]-1; + + rc = DosOpen( filename, &FileHandle, &ActionTaken, 0L, 0L, + OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS, + OPEN_SHARE_DENYREADWRITE | OPEN_ACCESS_READWRITE, 0L ); + + if( rc ) + return 0; + + rc = DosQueryFileInfo( FileHandle, FIL_STANDARD, &FileInfo, + sizeof( FILESTATUS3 ) ); + + if( rc ) + return 0; + + time( &tod ); + ptmbuf = localtime( &tod ); + + if( !((FileInfo.ftimeCreation.twosecs == HOURMINSEC) && + (FileInfo.ftimeCreation.minutes == HOURMINSEC/2) && + (FileInfo.ftimeCreation.hours == HOURMINSEC/3)) ) + { + + FileInfo.ftimeCreation.twosecs = HOURMINSEC; + FileInfo.ftimeCreation.minutes = HOURMINSEC/2; + FileInfo.ftimeCreation.hours = HOURMINSEC/3; + + FileInfo.fdateCreation.day = ptmbuf->tm_mday; + FileInfo.fdateCreation.month = ptmbuf->tm_mon+1; + FileInfo.fdateCreation.year = ptmbuf->tm_year-80; + + DosSetFileInfo( FileHandle, FIL_STANDARD, &FileInfo, + sizeof( FILESTATUS3 ) ); + + DosClose( FileHandle ); + + MsgBox( USECTEL ); + + return 1; + } + + DosClose( FileHandle ); + + tmbuf.tm_sec = FileInfo.ftimeCreation.twosecs; + tmbuf.tm_min = FileInfo.ftimeCreation.minutes; + tmbuf.tm_hour = FileInfo.ftimeCreation.hours; + tmbuf.tm_mday = FileInfo.fdateCreation.day; + tmbuf.tm_mon = FileInfo.fdateCreation.month-1; + tmbuf.tm_year = FileInfo.fdateCreation.year+80; + + past = mktime( &tmbuf ); + + usetime = (tod-past) / (24*3600); + + if( usetime > DAYS ) + return 0; + + if( DAYS-usetime <= 31 ) + { + sprintf( textmsg, COPY_EXP_IN_N_DAYS, DAYS-usetime ); + ErrorBox( WARNING, hwndFrame ); + } + + return 1; +} + diff --git a/capitel/source.os2/SYSFILE.H b/capitel/source.os2/SYSFILE.H new file mode 100644 index 0000000..b43983b --- /dev/null +++ b/capitel/source.os2/SYSFILE.H @@ -0,0 +1,2 @@ +short checkSystemFile( void ); + diff --git a/capitel/source.os2/TEXTE.H b/capitel/source.os2/TEXTE.H new file mode 100644 index 0000000..dcedbfc --- /dev/null +++ b/capitel/source.os2/TEXTE.H @@ -0,0 +1,495 @@ +// Jetzt kommen die Strings in DEUTSCH: + +#ifdef LANG_GER + +// messages + +#define FROM_STR "%s" +#define ON_STR "auf %s" + +#define WARNING "CapiTel Warnung" +#define CRITICAL "CapiTel kritischer Fehler" +#define FATAL "CapiTel schwerer Fehler" + +#define DELCALL "M”chten Sie diesen Anruf wirklich l”schen?" +#define DELENTRY "M”chten Sie diesen Eintrag wirklich l”schen?" +#define REALYEXIT "M”chten Sie CapiTel beenden?" +#define REALYEXIT_CHK "~Diese Abfrage nicht mehr anzeigen" +#define CTELMSG "CapiTel Nachricht" +#define OKMSG "OK" + +#define DEACTMSG "Anrufbeantworter deaktiviert ..." +#define RECMSG "Ansagetext aufnehmen ..." +#define INITISDN "Initialisiere ISDN ..." +#define SCANCALLS "Suche nach Aufzeichnungen ..." +#define SHUTDOWN "Beenden ..." +#define DISCONV "Konvertiere Klangdateien ..." + +#define REGTOMSG "Registriert fr: %s" +#define UNREGTEXT "%s (UNREGISTRIERTE TESTVERSION)" +#define FREETEXT "%s (l„uft als Freeware Caller-ID)" +#define ISREGTEXT "%s (Registriert fr %s)" + +// main list + +#define CALLER "Anrufer" +#define DATE "Datum" +#define TIME "Zeit" +#define SECS "Sek." +#define DEST "Ziel" + +// setup + +#define REJECT_D "Port-Default" +#define REJECT_0 "Normal" +#define REJECT_1 "Besetzt" +#define REJECT_2 "Ablehnen" +#define REJECT_3 "Unerreichbar" + +#define POPUP_NONE "Gar nicht" +#define POPUP_TOPLEFT "Links oben" +#define POPUP_TOPRIGHT "Rechts oben" +#define POPUP_BOTTOMLEFT "Links unten" +#define POPUP_BOTTOMRIGHT "Rechts unten" + +// setup fehler-meldungen + +#define ERRNONUM "Keine Rufnummer angegeben!" +#define ERRSTARINNUM "Nur ein * in der Rufnummer ist nicht erlaubt!" + +// config + +#define DESCRIPTION "Beschreibung" +#define REACTION "Reaktion" +#define ANSWERDELAY "Verz”gerung" +#define MAXRECTIME "Aufnahmedauer" +#define CREATEMAINT "#\n# %s\n# Created and maintained by %s\n#\n" + +#define NAMEMSG "Name" +#define NUMBERMSG "Nummer" +#define ADDCALLER "Anrufer hinzufgen..." +#define CHOOSEWAVALWFILE "Ansagetext ausw„hlen" +#define CHOOSEWAVFILE "Klingeln ausw„hlen" +#define EDITINGCALLER "Anrufer bearbeiten..." +#define EDITINGPORT "Port bearbeiten..." + +#define THANKREG "Vielen Dank fr die Registrierung!\nBitte neu starten." +#define INVALIDREG "Fehlerhafte Registrierungsnummer!" +#define USECTEL "Mit der Benutzung von CapiTel akzeptieren Sie das Lizenzabkommen.\nLesen Sie LIZENZ.TXT oder LICENSE.TXT fr Details." + +#define DTMF_TEXT_RCONTROL "Fernabfrage" +#define DTMF_TEXT_REBOOT "Computer neu starten" +#define DTMF_TEXT_DEACT "CapiTel abschalten" +#define DTMF_TEXT_QUIT "CapiTel beenden" +#define DTMF_TEXT_SETNOTIFY "Weiterleitung „ndern" + +#define MAINT_REMOTE_ACT "Fernsteuerung bearbeiten" +#define REMOTE_ACT "~Fernsteuerung" +#define WELCOME_WAV_ALW "Ansage" +#define EAZ_MSN "EAZ/MSN" +#define RINGING_WAV "Klingeln" +#define DTMF_CODE "DTMF Nummer" +#define ACTION "Aktion" +#define WINDOW_TITLE "Fenstertitel" +#define NOTIFY_NUMBER "Benachrichtigen" +#define COPY_EXP_IN_N_DAYS "Diese Testversion verf„llt in %d Tagen.\nBitte registrieren!" +#define GENERALSET "Einstellungen" +#define GENERAL "~Allgemein" + +#define PORTSSET "Ports bearbeiten" +#define PORTS "Po~rts" +#define PORT "Port" + +#define CALLERSSET "Anrufer bearbeiten" +#define CALLERS "Anr~ufer" + +// Dateinamen fr das HELP Men + +#define EXEC_README "liesmich.txt" +#define EXEC_ORDER "bestell.txt" +#define EXEC_ORDERBMT "bestbmt.txt" +#define EXEC_LICENSE "lizenz.txt" +#define EXEC_WHATSNEW "neues.txt" + +// menues + +#define PROD_INFO "Produktinformationen" + +#define MENU_GENERAL "A~llgemein" +#define MENU_ACTIVE "~Aktiv\tAlt+A" +#define MENU_CONTROLS "Anzeigen\tAlt+C" +#define MENU_PROPERTIES "Ein~stellungen\tAlt+S" +#define MENU_EXIT "~Beenden" +#define MENU_CALL "Ru~f" +#define MENU_PLAY "~Abspielen\tEnter" +#define MENU_PLAY_ALL "Alles Abs~pielen\tAlt+P" +#define MENU_DELETE "~L”schen\tDel" +#define MENU_ADD_CALLER "~Neu hinzufgen\tAlt+N" +#define MENU_RECORD "~Aufnehmen (Selbstanruf)\tAlt+R" + +#define MENU_HELP "~Hilfe" +#define MENU_README "~Lies mich" +#define MENU_WHATSNEW "~Was ist neu?" +#define MENU_LICENSE "Li~zenz-Vertrag" +#define MENU_ORDER "~Bestell-Info" +#define MENU_ORDERBMT "Bestell-Info BMT ~Micro" +#define MENU_HOMEPAGE "~Homepage im Web" +#define MENU_PRODUCT_INFO "Produkt~informationen" + +#define MENU_CAPITEL_PROPERTIES "CapiTel Einstellungen" +#define MENU_OK "OK" +#define MENU_SAVE "~Sichern" +#define MENU_CANCEL "Abbrechen" +#define MENU_YES "~Ja" +#define MENU_NO "~Nein" +#define MENU_HINT "Tip fr Experten: Zeitabh„ngige Funktionen sind in der Dokumentation beschrieben." +#define MENU_DEFAULT_BEHAVIOUR "Einstellungen" +#define MENU_PLAY_RINGING "Klingelsignal abspielen" +#define MENU_GEN_16_WAV "Erzeuge 16-Bit Klangdateien" +#define MENU_REST_WIN_CALL "Bei Anruf Fenster wiederherstellen" +#define MENU_CONF_CALL_DEL "Warnung beim L”schen van Anrufen" +#define MENU_IGNORE_EMPTY_CALLS "Leere Anrufe ignorieren" +#define MENU_SHOW_DIGITAL_CALLS "Auch digitale Rufe anzeigen" +#define MENU_EXPAND_CODE "Ortsnahmen aus Vorwahl erkennen" +#define MENU_DTMF_SUPPORT "DTMF-Ton Erkennung aktivieren" +#define MENU_ULAW_CODEC "Sprache ist uLaw-codiert (USA)" +#define MENU_ANSWER_DELAY "Verz”gerung:" +#define MENU_MAX_REC_TIME "Aufnahmedauer:" +#define MENU_SILENCE_DETECTION "Ruheerkennung:" +#define MENU_POPUP_GROUP "Info-Fenster" +#define MENU_POPUP_DESC "Bei Anruf Info-Fenster anzeigen:" +#define MENU_LOGFILE "Logdatei" +#define MENU_HINT_LOG "Hinweis: Sie k”nnen auch eine PIPE oder ein Ger„t angeben!" +#define MENU_DEFAULT_FILES "Dateinamen" +#define MENU_WELCOME_WAV "Ansagetext:" +#define MENU_RINGING_WAV "Klingeln:" +#define MENU_NOTIFY_GROUP "Weiterleiten" +#define MENU_NOTIFY_TEXT "Bei neuen Anrufen folgende Nummer benachrichtigen:" +#define MENU_ADD "Hin~zufgen" +#define MENU_EDIT "~Bearbeiten" +#define MENU_DELETE_SHORT "~L”schen" + +#define MENU_EDIT_CALLER "Anrufer bearbeiten..." +#define MENU_NAME "Name:" +#define MENU_NUMBER "Nummer:" +#define MENU_CALLER_DEFHELP "Wenn Sie die folgenden Felder frei lassen, dann bleiben fr diesen Anrufer jeweils die entsprechenden Standard-Einstellungen wirksam." +#define MENU_WELCOME "Ansage:" +#define MENU_RINGING "Klingel:" +#define MENU_PORT_ENABLED "Port ist aktiviert" +#define MENU_CALLER_ENABLED "Eintrag ist aktiviert" +#define MENU_ACTION_ENABLED "Aktion ist aktiviert" +#define MENU_MAX_REC_TIME_D "Aufnahmedauer:" +#define MENU_ANSWER_DELAY_D "Verz”gerung:" +#define MENU_SECONDS "Sekunden" +#define MENU_REACTION_D "Reaktion:" +#define MENU_NOTIFY_TEXT_D "Bei neuen Anrufen folgende Nummer benachrichtigen:" + +#define MENU_EDITING_PORTS "Port bearbeiten..." +#define MENU_DESCRIPTION_D "Titel:" +#define MENU_EAZ_D "EAZ/MSN:" +#define MENU_PORT_DEFHELP "Wenn Sie die folgenden Felder frei lassen, dann bleiben fr diesen Port jeweils die entsprechenden Standard-Einstellungen wirksam." +#define MENU_WELCOME_D "Ansage:" +#define MENU_RINGING_D "Klingel:" + +#define MENU_EDITING_ACTION "Aktion bearbeiten..." +#define MENU_DTMF_CODE "DTMF-Code:" +#define MENU_REMOTE_CONTROL "Fernabfrage durchfhren" +#define MENU_REBOOT_CTEL "Den Computer neu starten" +#define MENU_DEACTIVATE_CTEL "CapiTel deaktivieren" +#define MENU_QUIT_CTEL "CapiTel beenden" +#define MENU_SET_NOTIFY "Weiterleitung „ndern" +#define MENU_EXECUTE "Programm ausfhren ..." +#define MENU_PROGRAM_D "Programm:" +#define MENU_ARGUMENTS_D "Parameter:" +#define MENU_TITLE_D "Titel:" +#define MENU_AND "und" + +#define MENU_UNREG_COPY "Unregistrierte Testversion" +#define MENU_RECORD_WELCOME "Neue Ansage aufnehmen..." +#define MENU_ENTER_FILENAME "Dateiname eingeben:" +#define MENU_INCOMMING_CALL "Anruf von" +#define MENU_RECORDING "Aufnehmen" +#define MENU_CALL_SELF "Rufen Sie sich bitte nun selbst an..." +#define MENU_REGISTRATION "Registrierung..." +#define MENU_NAME_AND_CODE "Eingabe des Namens und der Registrierungsnummer:" +#define MENU_NAME_D "Name:" +#define MENU_CODE_D "Nummer:" + +#define MENU_POP_TOGG "Bereitschaft „ndern" +#define MENU_POP_PLAY "Spiele ausgew„hlten Anruf ab" +#define MENU_POP_PLAY_ALL "Spiele alle Anrufe ab" +#define MENU_POP_DEL "L”sche ausgew„hlten Anruf" +#define MENU_POP_ADD_CALLER "Als neuen Anrufer hinzufgen" +#define MENU_POP_OPEN "Einstellungen" +#define MENU_POP_EDIT_PORTS "Bearbeite Ports" +#define MENU_POP_EDIT_CALLER "Bearbeite Anrufer" +#define MENU_POP_EDIT_DTMF "Bearbeite Fernsteuerung" + +#define MENU_FROM "von" +#define MENU_ON "auf" + +#define KEY_SS "s" +#define KEY_LS "S" +#define KEY_SX "x" +#define KEY_LX "X" +#define KEY_SA "a" +#define KEY_LA "A" +#define KEY_SR "r" +#define KEY_LR "R" +#define KEY_SC "c" +#define KEY_LC "C" +#define KEY_SP "p" +#define KEY_LP "P" +#define KEY_SN "n" +#define KEY_LN "N" + +#define KEY_P_SA "a" +#define KEY_P_LA "A" + +#else + +// messages + +#define FROM_STR "from %s" +#define ON_STR "on %s" + +#define WARNING "Capitel Warning" +#define CRITICAL "Capitel Critical Error" +#define FATAL "Capitel Fatal Error" + +#define DELCALL "Do you really want to delete this call?" +#define DELENTRY "Do you really want to remove this entry?" +#define REALYEXIT "Do you wish to end CapiTel?" +#define REALYEXIT_CHK "~Do not display this query again" +#define CTELMSG "CapiTel Message" +#define OKMSG "OK" + +#define DEACTMSG "Answering Machine disabled ..." +#define RECMSG "Recording new welcome text ..." +#define INITISDN "Initializing ISDN ..." +#define SCANCALLS "Scanning for calls ..." +#define SHUTDOWN "Shutting down ..." +#define DISCONV "Converting wave files ..." + +#define REGTOMSG "Registered to: %s" +#define UNREGTEXT "%s (UNREGISTERED EVALUATION COPY)" +#define FREETEXT "%s (runs as freeware Caller-ID)" +#define ISREGTEXT "%s (Registered to %s)" + +// main list + +#define CALLER "Caller" +#define DATE "Date" +#define TIME "Time" +#define SECS "Secs" +#define DEST "Dest." + +// setup + +#define REJECT_D "Port-Default" +#define REJECT_0 "Normal" +#define REJECT_1 "Busy" +#define REJECT_2 "Refuse" +#define REJECT_3 "Unavailable" + +#define POPUP_NONE "Never" +#define POPUP_TOPLEFT "Top left" +#define POPUP_TOPRIGHT "Top right" +#define POPUP_BOTTOMLEFT "Bottom left" +#define POPUP_BOTTOMRIGHT "Bottom right" + +// setup fehler-meldungen + +#define ERRNONUM "No number supplied!" +#define ERRSTARINNUM "Only a * in the number is not allowed!" + +// config + +#define DESCRIPTION "Description" +#define REACTION "Reaction" +#define ANSWERDELAY "Delay" +#define MAXRECTIME "Record time" +#define CREATEMAINT "#\n# %s\n# Created and maintained by %s\n#\n" + +#define NAMEMSG "Name" +#define NUMBERMSG "Number" +#define ADDCALLER "Add Caller..." +#define CHOOSEWAVALWFILE "Select Welcome Text" +#define CHOOSEWAVFILE "Select Ringing Wave" +#define EDITINGCALLER "Editing Caller..." +#define EDITINGPORT "Editing Port..." + +#define THANKREG "Thank you for your Registration!\nPlease restart." +#define INVALIDREG "Invalid Registration Code!" +#define USECTEL "By using CapiTel you accept the License Agreement.\nSee LICENSE.TXT or LIZENZ.TXT for details." + +#define DTMF_TEXT_RCONTROL "Remote control" +#define DTMF_TEXT_REBOOT "Reboot computer" +#define DTMF_TEXT_DEACT "Deactivate CapiTel" +#define DTMF_TEXT_QUIT "Exit CapiTel" +#define DTMF_TEXT_SETNOTIFY "Change callback number" + +#define MAINT_REMOTE_ACT "Maintain Remote Actions" +#define REMOTE_ACT "Rem~ote Actions" +#define WELCOME_WAV_ALW "Welcome" +#define EAZ_MSN "EAZ/MSN" +#define RINGING_WAV "Ringing" +#define DTMF_CODE "DTMF Code" +#define ACTION "Action" +#define WINDOW_TITLE "Window Title" +#define NOTIFY_NUMBER "Notify number" +#define COPY_EXP_IN_N_DAYS "This evaluation copy expires in %d days.\nPlease register!" +#define GENERALSET "General Settings" +#define GENERAL "~General" + +#define PORTSSET "Port Settings" +#define PORTS "Po~rts" +#define PORT "Port" + +#define CALLERSSET "Maintain Callers" +#define CALLERS "~Callers" + +// Dateinamen fuer das HELP Menue + +#define EXEC_README "readme.txt" +#define EXEC_ORDER "order.txt" +#define EXEC_ORDERBMT "orderbmt.txt" +#define EXEC_LICENSE "license.txt" +#define EXEC_WHATSNEW "whatsnew.txt" + +// menues + +#define PROD_INFO "Product Information" + +#define MENU_GENERAL "~General" +#define MENU_ACTIVE "~Active\tAlt+A" +#define MENU_CONTROLS "~Controls\tAlt+C" +#define MENU_PROPERTIES "Propertie~s\tAlt+S" +#define MENU_EXIT "Exit" +#define MENU_CALL "Ca~ll" +#define MENU_PLAY "P~lay\tEnter" +#define MENU_PLAY_ALL "~Play all\tAlt+P" +#define MENU_DELETE "~Delete\tDel" +#define MENU_ADD_CALLER "Add as ~new Caller\tAlt+N" +#define MENU_RECORD "~Record (call self)\tAlt+R" + +#define MENU_HELP "~Help" +#define MENU_README "~ReadMe" +#define MENU_WHATSNEW "~What's new?" +#define MENU_LICENSE "~License" +#define MENU_ORDER "~View Order-Form" +#define MENU_ORDERBMT "View ~BMT Micro Order-Form" +#define MENU_HOMEPAGE "~Homepage on the Web" +#define MENU_PRODUCT_INFO "Product ~Information" + +#define MENU_CAPITEL_PROPERTIES "CapiTel Properties" +#define MENU_OK "OK" +#define MENU_SAVE "~Save" +#define MENU_CANCEL "Cancel" +#define MENU_YES "~Yes" +#define MENU_NO "~No" +#define MENU_HINT "Hint for Experts: Time-dependent entries are described in the documentation." +#define MENU_DEFAULT_BEHAVIOUR "General" +#define MENU_PLAY_RINGING "Play ringing" +#define MENU_GEN_16_WAV "Generate 16 bit wave files" +#define MENU_REST_WIN_CALL "Restore Window on new calls" +#define MENU_CONF_CALL_DEL "Confirm when deleting calls" +#define MENU_IGNORE_EMPTY_CALLS "Ignore empty calls" +#define MENU_SHOW_DIGITAL_CALLS "Show also digital calls" +#define MENU_EXPAND_CODE "Expand area codes" +#define MENU_DTMF_SUPPORT "Recognize DTMF tones" +#define MENU_ULAW_CODEC "Speech data is uLaw-coded (USA)" +#define MENU_ANSWER_DELAY "Answering delay:" +#define MENU_MAX_REC_TIME "Max record time:" +#define MENU_SILENCE_DETECTION "Silence detection:" +#define MENU_POPUP_GROUP "Popup window" +#define MENU_POPUP_DESC "Show incoming call popup:" +#define MENU_LOGFILE "Logfile" +#define MENU_HINT_LOG "Hint: You may also specify a device or a named pipe!" +#define MENU_DEFAULT_FILES "Files" +#define MENU_WELCOME_WAV "Welcome text:" +#define MENU_RINGING_WAV "Ringing:" +#define MENU_NOTIFY_GROUP "Forward calls" +#define MENU_NOTIFY_TEXT "Notify me about new calls at this number:" +#define MENU_ADD "~Add" +#define MENU_EDIT "~Edit" +#define MENU_DELETE_SHORT "~Delete" + +#define MENU_EDIT_CALLER "Editing Caller..." +#define MENU_NAME "Name:" +#define MENU_NUMBER "Number:" +#define MENU_CALLER_DEFHELP "Leave the following fields empty to use the corresponding default settings for this caller." +#define MENU_WELCOME "Welcome:" +#define MENU_RINGING "Ringing:" +#define MENU_PORT_ENABLED "Port activated" +#define MENU_CALLER_ENABLED "Entry activated" +#define MENU_ACTION_ENABLED "Action activated" +#define MENU_MAX_REC_TIME_D "Max. record time:" +#define MENU_ANSWER_DELAY_D "Answering delay:" +#define MENU_SECONDS "seconds" +#define MENU_REACTION_D "Reaction:" +#define MENU_NOTIFY_TEXT_D "Notify me about new calls at this number:" + +#define MENU_EDITING_PORTS "Editing Port..." +#define MENU_DESCRIPTION_D "Description:" +#define MENU_EAZ_D "EAZ/MSN:" +#define MENU_PORT_DEFHELP "Leave the following fields empty to use the corresponding default settings for this port." +#define MENU_WELCOME_D "Welcome:" +#define MENU_RINGING_D "Ringing:" + +#define MENU_EDITING_ACTION "Editing Action..." +#define MENU_DTMF_CODE "DTMF code" +#define MENU_REMOTE_CONTROL "Remote control" +#define MENU_REBOOT_CTEL "Reboot computer" +#define MENU_DEACTIVATE_CTEL "Deactivate CapiTel" +#define MENU_QUIT_CTEL "Exit CapiTel" +#define MENU_SET_NOTIFY "Change callback number" +#define MENU_EXECUTE "Execute programm ..." +#define MENU_PROGRAM_D "Program:" +#define MENU_ARGUMENTS_D "Arguments:" +#define MENU_TITLE_D "Title:" +#define MENU_AND "and" + +#define MENU_UNREG_COPY "Unregistered Evaluation Copy" +#define MENU_RECORD_WELCOME "Record new welcome text..." +#define MENU_ENTER_FILENAME "Enter filename:" +#define MENU_INCOMMING_CALL "Incoming call" +#define MENU_RECORDING "Recording" +#define MENU_CALL_SELF "Please call yourself now..." +#define MENU_REGISTRATION "Registration..." +#define MENU_NAME_AND_CODE "Enter your name and your registration code:" +#define MENU_NAME_D "Name:" +#define MENU_CODE_D "Code:" + +#define MENU_POP_TOGG "Toggle Activation" +#define MENU_POP_PLAY "Play selected Call" +#define MENU_POP_PLAY_ALL "Play all Calls" +#define MENU_POP_DEL "Delete selected Call" +#define MENU_POP_ADD_CALLER "Add as new Caller" +#define MENU_POP_OPEN "Open Properties" +#define MENU_POP_EDIT_PORTS "Edit Ports" +#define MENU_POP_EDIT_CALLER "Edit Callers" +#define MENU_POP_EDIT_DTMF "Edit Remote Actions" + +#define MENU_FROM "from" +#define MENU_ON "on" + +#define KEY_SS "s" +#define KEY_LS "S" +#define KEY_SX "x" +#define KEY_LX "X" +#define KEY_SA "a" +#define KEY_LA "A" +#define KEY_SR "r" +#define KEY_LR "R" +#define KEY_SC "c" +#define KEY_LC "C" +#define KEY_SP "p" +#define KEY_LP "P" +#define KEY_SN "n" +#define KEY_LN "N" + +#define KEY_P_SA "a" +#define KEY_P_LA "A" + +#endif diff --git a/capitel/source.os2/TOOLBAR.C b/capitel/source.os2/TOOLBAR.C new file mode 100644 index 0000000..b5bdfe9 --- /dev/null +++ b/capitel/source.os2/TOOLBAR.C @@ -0,0 +1,214 @@ +#define INCL_WIN +#define INCL_DOS +#define INCL_PM + +#include +#include +#include + +#include "capitel.h" +#include "toolbar.h" +#include "statbar.h" + +#define tBarClass "pmToolbar" + +PFNWP oldButProc; +char useBubbles = 0; + +short queryDimensions( HWND, char *, ULONG *, ULONG * ); + +MRESULT EXPENTRY tBarProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); + +void registerToolbar( HAB hab ) +{ + WinRegisterClass( hab, tBarClass, tBarProc, 0, sizeof( ULONG ) ); +} + +MRESULT EXPENTRY tButProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) +{ + HWND hwndFly = WinQueryWindowULong( hwnd, QWL_USER ); + + switch( msg ) + { + case WM_MOUSEMOVE: + { + if( !hwndFly && useBubbles ) + WinStartTimer( 0, hwnd, 1 /* unused id */, 500 ); + return ( *oldButProc )( hwnd, msg, mp1, mp2 ); + } + break; + + case WM_TIMER: + { + RGB rgb; + HPS hps; + HAB hab; + RECTL rectl; + ULONG breite, hoehe; + POINTL p; + char str[200]; + + if( hwndFly ) + break; + + hab = WinQueryAnchorBlock( hwnd ); + + WinLoadString( hab, NULLHANDLE, WinQueryWindowUShort( hwnd, QWS_ID ), + sizeof( str ), str ); + + hwndFly = WinCreateWindow( HWND_DESKTOP, WC_STATIC, str, + SS_TEXT | DT_VCENTER | DT_CENTER, + 0, 0, 0, 0, hwnd, HWND_TOP, 0, 0, NULL ); + + rgb.bBlue = 0; + rgb.bGreen = 254; + rgb.bRed = 254; + WinSetPresParam( hwndFly, PP_BACKGROUNDCOLOR, sizeof( RGB ), &rgb ); + + rgb.bBlue = 0; + rgb.bGreen = 0; + rgb.bRed = 0; + WinSetPresParam( hwndFly, PP_FOREGROUNDCOLOR, sizeof( RGB ), &rgb ); + + WinSetPresParam( hwndFly, PP_FONTNAMESIZE, sizeof( DefCntrFont ), + DefCntrFont ); + + queryDimensions( hwndFly, str, &breite, &hoehe ); + + WinQueryPointerPos( HWND_DESKTOP, &p ); + p.y -= WinQuerySysValue( HWND_DESKTOP, SV_CYTITLEBAR ); + p.y -= hoehe/2; + p.x += 5; + + WinSetWindowPos( hwndFly, HWND_TOP, p.x, p.y, breite+4, hoehe+2, + SWP_SHOW | SWP_MOVE | SWP_SIZE ); + + WinSetWindowULong( hwnd, QWL_USER, (ULONG) hwndFly ); + } + break; + + case UM_FLYOVER_BEGIN: + useBubbles = 1; + break; + + case UM_FLYOVER_END: + WinStopTimer( 0, hwnd, 1 /* unused id */ ); + if( hwndFly ) + WinDestroyWindow( hwndFly ); + WinSetWindowULong( hwnd, QWL_USER, 0 ); + break; + + default: + return ( *oldButProc )( hwnd, msg, mp1, mp2 ); + } + + return FALSE; +} + +MRESULT EXPENTRY tBarProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) +{ + HENUM henum; + RECTL rect; + short height, i=0; + HWND hwndHelp; + char str[50]; + HPS hps; + + switch( msg ) + { + case WM_CREATE: + case WM_DESTROY: + case WM_SIZE: + break; + + case WM_COMMAND: + WinSendMsg( WinQueryWindow( hwnd, QW_OWNER ), msg, mp1, mp2 ); + break; + + case TB_REDRAW: + henum = WinBeginEnumWindows( hwnd ); + + while( (hwndHelp = WinGetNextWindow( henum )) != 0 ) + { + WinSetWindowPos( hwndHelp, 0, i+2, 3, 0, 0, SWP_MOVE ); + WinQueryWindowRect( hwndHelp, &rect ); + i += rect.xRight; + } + + break; + + case TB_ADDBUTTON: + WinQueryWindowRect( hwnd, &rect ); + height = rect.yTop - rect.yBottom; + + sprintf( str, "#%ld", (ULONG)mp1 ); + + hwndHelp = WinCreateWindow( hwnd, WC_BUTTON, str, WS_VISIBLE | + BS_PUSHBUTTON | BS_BITMAP | BS_NOPOINTERFOCUS, + 0, 0, height-4, height-4, + hwnd, HWND_BOTTOM, (ULONG)mp1, 0, NULL ); + + oldButProc = WinSubclassWindow( hwndHelp, tButProc ); + + WinPostMsg( hwnd, TB_REDRAW, 0, 0 ); + + break; + + case TB_ADDSPACE: + hwndHelp = WinCreateWindow( hwnd, WC_STATIC, NULL, !WS_VISIBLE, + 0, 0, (ULONG)mp1, 0, + hwnd, HWND_BOTTOM, 0, 0, NULL ); + + WinPostMsg( hwnd, TB_REDRAW, 0, 0 ); + + break; + + case TB_SETBITMAP: + sprintf( str, "#%ld", (ULONG)mp2 ); + hwndHelp = WinWindowFromID( hwnd, (USHORT)mp1 ); + WinSetWindowText( hwndHelp, (PSZ)str ); + WinPostMsg( hwnd, TB_REDRAW, 0, 0 ); + break; + + case TB_REMOVEBUTTONID: + hwndHelp = WinWindowFromID( hwnd, (USHORT) mp1 ); + if( hwndHelp ) + WinDestroyWindow( hwndHelp ); + break; + + case TB_HWNDFROMID: + return (MPARAM) WinWindowFromID( hwnd, (USHORT) mp1 ); + + case WM_PAINT: { + RECTL rcl; + POINTL pt; + + HPS hps = WinBeginPaint( hwnd, 0, 0 ); + + WinQueryWindowRect(hwnd,&rcl); + WinFillRect( hps, &rcl, SYSCLR_BUTTONMIDDLE ); + + pt.x = rcl.xLeft; + pt.y = rcl.yBottom; + GpiSetColor( hps, SYSCLR_BUTTONLIGHT ); + GpiMove( hps, &pt ); + pt.x = rcl.xRight - 1; + GpiLine( hps, &pt ); + pt.x = rcl.xLeft; + pt.y = rcl.yBottom + 1; + GpiSetColor( hps, SYSCLR_BUTTONDARK ); + GpiMove( hps, &pt ); + pt.x = rcl.xRight - 1; + GpiLine( hps, &pt ); + rcl.yBottom += 2; + WinEndPaint( hps ); + } + break; + + default: + return WinDefWindowProc( hwnd, msg, mp1, mp2 ); + } + + return FALSE; +} + diff --git a/capitel/source.os2/TOOLBAR.H b/capitel/source.os2/TOOLBAR.H new file mode 100644 index 0000000..0412319 --- /dev/null +++ b/capitel/source.os2/TOOLBAR.H @@ -0,0 +1,28 @@ + +#define TB_REDRAW WM_USER +#define TB_ADDBUTTON WM_USER+1 +#define TB_ADDSPACE WM_USER+2 +#define TB_REMOVEBUTTONID WM_USER+3 +#define TB_HWNDFROMID WM_USER+4 +#define TB_SETMSG WM_USER+5 +#define TB_SETBITMAP WM_USER+6 + +#define AddButton(id) WinPostMsg( hwndToolbar, TB_ADDBUTTON, \ + (MPARAM)id, 0 ); + +#define AddSpace(i) WinPostMsg( hwndToolbar, TB_ADDSPACE, \ + (MPARAM)i, 0 ); + +#define SetBitmap(id,bmp) WinPostMsg( hwndToolbar, TB_SETBITMAP, \ + (MPARAM)id, (MPARAM)bmp ); + +/* +typedef struct _ToolbarButton +{ + USHORT id; + char title[20]; +} tbarButton; +*/ + +void registerToolbar( HAB ); + diff --git a/capitel/source.os2/capitel.c b/capitel/source.os2/capitel.c new file mode 100644 index 0000000..073e2bb --- /dev/null +++ b/capitel/source.os2/capitel.c @@ -0,0 +1,1714 @@ +#ifdef LANG_GER +#define ACT_LANG LANGUAGE_GER +#else +#define ACT_LANG LANGUAGE_ENG +#endif + +#define INCL_PM +#define INCL_DOS +#define INCL_32 +#define INCL_MCIOS2 +#define INCL_WINWORKPLACE + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "capitel.h" +#include "..\..\common\source\version.h" +#include "configex.h" +#include "toolbar.h" +#include "statbar.h" +#include "cntr.h" +#include "config.h" +#include "configrc.h" +// #include "loadmci.h" +#include "regist.h" +#include "sysfile.h" + +#include "texte.h" +#include "..\..\answer\source\answer.h" +#include "..\..\common\source\global.h" +#include "..\..\..\units\common.src\cfg_file.h" +#include "..\..\util\source\dosstart.h" +#include "..\..\util\source\register.h" + +#define SetAppTitle( str ) WinSetWindowText( hwndFrame, (PSZ) str ); + +MRESULT EXPENTRY ctelFrameProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); +MRESULT EXPENTRY ctelCntrProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); +MRESULT EXPENTRY cmdProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY recProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY aboutProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY inCallProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2); +MRESULT EXPENTRY recordInfoProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2); + +void MsgBox( char * ); +void ErrorBox( char *, HWND ); +void sigFunc( short, void * ); +void ScanForCalls( void ); +void DeleteCall( void ); +void LoadBitmaps( HWND ); +void centerDialog( HWND, HWND ); +void copyFile( char *, char *); +void setHeard( CntrRec * ); +void delete_cr( char * ); +short queryDimensions( HWND, char *, ULONG *, ULONG * ); +short onlyDigits( char * ); +char *strip_blanks( char * ); +void shExecute( char *, BOOL ); + +void ctel_disc_ind( long, short ); +void ctel_filenum( short ); +void ctel_connect_ind( TCapiInfo * ); +void ctel_convert_status( short ); +void ctel_rescan( void ); + +int wavplay_start( HWND hwnd, char* wavFile ); +int wavplay_stop( short deviceID ); +short wavplay_current_deviceID = 0; + +int MyMsgBox(HWND hwndParent, HWND hwndOwner, + char* text, char* title, int style, int icon); +int MyMsgBoxEx(HWND hwndParent, HWND hwndOwner, + char* text, char* title, char* checktext, int style, int icon, + char* pCfgFile, char* pCfgKey); +MRESULT EXPENTRY MsgBoxProc( + HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); + +PFNWP oldFrameProc, oldCntrProc; +HPOINTER cntrIcoCall, cntrIcoCallWav, cntrIcoCallHeard, cntrIcoCallDigital; +HPOINTER portsIcoActive, portsIcoInactive, callersIcoActive, callersIcoInactive; +HPOINTER actionIcoActive, actionIcoInactive; +TCallInfo CallInfo; +char do_isdn_close = 0, isRecording = 0, wasInActive = 0; +char callPending = 0; +char recFile[256], textmsg[256], defaultBarText[256]; +CntrRec *currRec; + +char mmpmInstalled = 1; + +HWND hwndFrame, hwndCntr, hwndToolbar, hwndStatusbar, hwndPopup; +HWND hwndInCall = 0, hwndRecInfo = 0; + +int main( int argc, char *argv[] ) +{ + HAB hab; + HMQ hmq; + QMSG qmsg; + FRAMECDATA fcd; + int i; + + hab = WinInitialize( 0 ); + hmq = WinCreateMsgQueue( hab, 0 ); + + registerToolbar( hab ); + registerStatusbar( hab ); + + fcd.cb = sizeof( FRAMECDATA ); + fcd.flCreateFlags = FCF_MINMAX | FCF_SIZEBORDER | FCF_SYSMENU | + FCF_TITLEBAR | FCF_SHELLPOSITION | FCF_TASKLIST | + FCF_MENU | FCF_ICON | FCF_ACCELTABLE | FCF_CLOSEBUTTON; + fcd.hmodResources = 0; + fcd.idResources = ID_FRAME; + + hwndFrame = WinCreateWindow( HWND_DESKTOP, WC_FRAME, APPNAME, + 0, 0, 0, 0, 0, 0, HWND_TOP, ID_FRAME, + &fcd, 0 ); + + WinShowWindow( hwndFrame, FALSE ); + + WinCreateWindow( hwndFrame, "pmToolbar", "", 0, 10, 10, 30, 30, + hwndFrame, HWND_TOP, ID_TOOLBAR, 0, 0 ); + + WinCreateWindow( hwndFrame, "pmStatusbar", APPNAME, 0, 0, 0, 0, 0, + hwndFrame, HWND_TOP, ID_STATUSBAR, 0, 0 ); + + hwndCntr = WinCreateWindow( hwndFrame, WC_CONTAINER, 0, + CCS_MINIRECORDCORE | CCS_READONLY | + CCS_SINGLESEL, 0, 0, 0, 0, hwndFrame, + HWND_BOTTOM, FID_CLIENT, 0, 0 ); + + oldFrameProc = WinSubclassWindow( hwndFrame, ctelFrameProc ); + oldCntrProc = WinSubclassWindow( hwndCntr, ctelCntrProc ); + + hwndToolbar = WinWindowFromID( hwndFrame, ID_TOOLBAR ); + hwndStatusbar = WinWindowFromID( hwndFrame, ID_STATUSBAR ); + + hwndPopup = WinLoadMenu( hwndCntr, NULLHANDLE, ID_POPUP ); + + /* Fake window creation... */ + WinPostMsg( hwndFrame, WM_CREATE, 0, 0 ); + + while( WinGetMsg(hab, (PQMSG) &qmsg, 0, 0, 0) ) + WinDispatchMsg(hab, (PQMSG) &qmsg ); + + WinSetWindowPos( hwndFrame, 0, 0, 0, 0, 0, SWP_HIDE ); + WinStoreWindowPos( "CapiTel", "WinPos", hwndFrame ); + + WinDestroyWindow( hwndFrame ); + WinDestroyMsgQueue( hmq ); + WinTerminate( hab ); + + if( do_isdn_close ) + { + answer_exit(); + while( answer_cannot_close() ) DosSleep (300); + } + + return 0; +} + +MRESULT EXPENTRY ctelFrameProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) +{ + MRESULT rc; + PRECTL prectl; + SHORT countSwp; + PSWP pswp, pswpClient=0, pswpToolbar=0, pswpStatusbar=0; + int cy, cyStatus; + SWP swp, *sav; + RGB rgb; + ULONG fl; + TRACKINFO TrackInfo; + + switch( msg ) + { + case WM_CREATE: /* Faked Window Creation !!! */ + + if( !initRegistration() ) + { +/* + if( !checkSystemFile() ) + { + MsgBox( VEREXP ); + + WinDlgBox( HWND_DESKTOP, hwndFrame, (PFNWP) registrationProc, + NULLHANDLE, REG_DIALOG, NULL ); + + if( strlen( QueryRegName() ) > 0 ) + MsgBox( RESTART ); + + WinPostMsg( hwnd, WM_QUIT, 0, 0 ); + break; + } +*/ + + if (999 == config_file_read_ulong (STD_CFG_FILE,DEFAULT_ANSW_DELAY,DEFAULT_ANSW_DELAY_DEF)) { + sprintf( defaultBarText, FREETEXT, APPNAME ); + } else { + sprintf( defaultBarText, UNREGTEXT, APPNAME ); + } + } + else + sprintf( defaultBarText, ISREGTEXT, APPNAME, + QueryRegName() ); + + LoadBitmaps( hwnd ); + + AddButton( IDI_TOGGLE ); + AddSpace( 8 ); + AddButton( ID_CALL_PLAY ); + AddButton( ID_CALL_PLAY_ALL ); + AddButton( ID_CALL_DEL ); + AddSpace( 8 ); + AddButton( IDI_SETUP ); + AddButton( IDI_PORTS ); + AddButton( IDI_PEOPLE ); + AddButton( IDI_DTMF ); + + InitContainer( ); + + if( !(fl = config_file_read_ulong( STD_CFG_FILE, CAPITEL_RUN_CNT, CAPITEL_RUN_CNT_DEF )) ) + { + config_file_write_ulong( STD_CFG_FILE, CAPITEL_RUN_CNT, 1 ); + WinPostMsg( hwnd, WM_COMMAND, MPFROM2SHORT( IDI_SETUP, 0 ), NULL ); + } + else + { + config_file_write_ulong( STD_CFG_FILE, CAPITEL_RUN_CNT, ++fl ); + if( config_file_read_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, WINDOW_FRAMECTRLS_HIDDEN_DEF ) ) + { + config_file_write_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, 0 ); + WinPostMsg( hwndFrame, WM_COMMAND, MPFROM2SHORT( IDI_HIDE, 0 ), 0 ); + } + else + { + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_HIDE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_HIDE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + } + } + + if( !WinRestoreWindowPos( "CapiTel", "WinPos", hwndFrame ) ) + { + /* Set some defaults values */ + rgb.bBlue = 254; + rgb.bGreen = 254; + rgb.bRed = 254; + WinSetPresParam( hwndCntr, PP_BACKGROUNDCOLOR, sizeof( RGB ), &rgb ); + WinSetPresParam( hwndCntr, PP_FONTNAMESIZE, sizeof( DefCntrFont ), + DefCntrFont ); + + WinSetWindowPos( hwndFrame, 0, 15, 15, 450, 300, + SWP_MOVE | SWP_SIZE | SWP_SHOW ); + } + else + WinSetWindowPos( hwndFrame, HWND_TOP, 0, 0, 0, 0, SWP_SHOW | + SWP_ACTIVATE | SWP_ZORDER ); + + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + +// SetStatus( "Initializing MMPM..." ); +// LoadMMPM(); + + SetStatus( INITISDN ); + if( answer_init( sigFunc, 1 , ACT_LANG) ) + break; + + answer_listen(); + + do_isdn_close = 1; + + SetStatus( SCANCALLS ); + ScanForCalls(); + + SetStatus( defaultBarText ); + + break; + + case WM_CALCFRAMERECT: + rc = ( *oldFrameProc )( hwnd, msg, mp1, mp2 ); + + if( rc && mp2 ) + { + if( config_file_read_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, WINDOW_FRAMECTRLS_HIDDEN_DEF) ) + { + cy = 0; + cyStatus = 0; + } + else + { + cy = 30; + cyStatus = 22; + } + prectl = (PRECTL) mp1; + prectl->yTop -= (cy+cyStatus); + prectl->yBottom += cyStatus; + } + + return rc; + + case WM_FORMATFRAME: + countSwp = (int) (*oldFrameProc)(hwnd, msg, mp1, mp2); + pswp=(PSWP)mp1; + + if( config_file_read_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, WINDOW_FRAMECTRLS_HIDDEN_DEF ) ) + { + cy = 0; + cyStatus = 0; + } + else + { + cy = 30; + cyStatus = 22; + } + + sav=pswpToolbar=&pswp[countSwp-1]; + pswpStatusbar=&pswp[countSwp]; + pswpClient=&pswp[countSwp+1]; + + *pswpStatusbar = *sav; + *pswpClient = *sav; + + pswpClient->y += cyStatus; + pswpClient->cy -= cyStatus+cy; + + pswpToolbar->hwnd=WinWindowFromID(hwnd, ID_TOOLBAR); + pswpToolbar->y = (pswpClient->y+pswpClient->cy); + pswpToolbar->cy = cy; + + pswpStatusbar->hwnd=WinWindowFromID(hwnd, ID_STATUSBAR); + pswpStatusbar->y = pswpClient->y - cyStatus; + pswpStatusbar->cy = cyStatus; + + return MRFROMSHORT( countSwp+2 ); + + case WM_QUERYFRAMECTLCOUNT: + return MPFROMSHORT( (ULONG)((*oldFrameProc)(hwnd, msg, mp1, mp2)) +2 ); + + case WM_WINDOWPOSCHANGED: + pswp = (PSWP) PVOIDFROMMP( mp1 ); + if( pswp->fl & SWP_MINIMIZE ) + memcpy( &oldSWP, ++pswp, sizeof( SWP ) ); + return ( *oldFrameProc )( hwnd, msg, mp1, mp2 ); + + case WM_TRACKFRAME: + if( !(WinGetKeyState( HWND_DESKTOP, VK_BUTTON2 ) & 0x8000) ) + return ( *oldFrameProc )( hwnd, msg, mp1, mp2 ); + + WinSetFocus( HWND_DESKTOP, hwnd ); + WinQueryWindowPos( hwnd, &swp ); + + if( swp.fl & SWP_MINIMIZE ) + return ( *oldFrameProc )( hwnd, msg, mp1, mp2 ); + + memset ( &TrackInfo, 0, sizeof(TrackInfo) ) ; + + TrackInfo.cxBorder = 2 ; + TrackInfo.cyBorder = 2 ; + TrackInfo.cxGrid = 2 ; + TrackInfo.cyGrid = 2 ; + TrackInfo.cxKeyboard = 8 ; + TrackInfo.cyKeyboard = 8 ; + + WinQueryWindowPos ( hwnd, &swp ) ; + TrackInfo.rclTrack.xLeft = swp.x ; + TrackInfo.rclTrack.xRight = swp.x + swp.cx ; + TrackInfo.rclTrack.yBottom = swp.y ; + TrackInfo.rclTrack.yTop = swp.y + swp.cy ; + + WinQueryWindowPos ( HWND_DESKTOP, &swp ) ; + TrackInfo.rclBoundary.xLeft = swp.x ; + TrackInfo.rclBoundary.xRight = swp.x + swp.cx ; + TrackInfo.rclBoundary.yBottom = swp.y ; + TrackInfo.rclBoundary.yTop = swp.y + swp.cy ; + + TrackInfo.ptlMinTrackSize.x = 0 ; + TrackInfo.ptlMinTrackSize.y = 0 ; + TrackInfo.ptlMaxTrackSize.x = swp.cx ; + TrackInfo.ptlMaxTrackSize.y = swp.cy ; + + TrackInfo.fs = TF_MOVE | TF_STANDARD | TF_ALLINBOUNDARY ; + + if ( WinTrackRect ( HWND_DESKTOP, (HPS)NULL, &TrackInfo ) ) + { + WinSetWindowPos ( hwnd, 0, TrackInfo.rclTrack.xLeft, + TrackInfo.rclTrack.yBottom, 0, 0, SWP_MOVE ) ; + } + + return MPFROMSHORT( 1 ); + + case WM_COMMAND: + case WM_CONTROL: + return cmdProc( hwnd, msg, mp1, mp2 ); + + case WM_INITMENU: + if( SHORT1FROMMP( mp1 ) != IDS_CALL ) + break; + + currRec = (CntrRec *) WinSendMsg( hwndCntr, CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + + WinEnableMenuItem( (HWND) mp2, ID_CALL_PLAY, currRec && currRec->itemInfo.seconds ); + WinEnableMenuItem( (HWND) mp2, ID_CALL_DEL, currRec ); + WinEnableMenuItem( (HWND) mp2, ID_ADD_CALLER, currRec && onlyDigits( currRec->itemInfo.caller ) ); + + break; + + case WM_MSGBOXDISMISS: + WinDestroyWindow( (HWND) mp1 ); + break; + + case UM_WARNING: + ErrorBox( WARNING, hwnd ); + break; + + case UM_CRITICAL: + ErrorBox( CRITICAL, hwnd ); + break; + + case UM_FATAL: + ErrorBox( FATAL, hwnd ); + break; + + case UM_PLAYWAV: + + if(wavplay_current_deviceID) wavplay_stop(wavplay_current_deviceID); + remove("TEMP.WAV"); + wavplay_current_deviceID = wavplay_start(hwnd, textmsg); + + break; + + case MM_MCINOTIFY: + + if(SHORT1FROMMP(mp1) != MCI_NOTIFY_SUCCESSFUL || SHORT1FROMMP(mp2) != wavplay_current_deviceID) break; + + wavplay_stop(wavplay_current_deviceID); + wavplay_current_deviceID = 0; + remove("TEMP.WAV"); + + break; + + default: + return ( *oldFrameProc )( hwnd, msg, mp1, mp2 ); + } + + return FALSE; +} + + +MRESULT EXPENTRY ctelCntrProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) +{ + + switch( msg ) + { + case WM_CLOSE: + + if( MyMsgBoxEx( HWND_DESKTOP, hwndFrame, + REALYEXIT, CTELMSG, REALYEXIT_CHK, + MB_YESNO, SPTR_ICONQUESTION, + STD_CFG_FILE, CONFIRM_EXIT_PROGRAM ) != MBID_YES ) + return 0; + + break; + } + + return ( *oldCntrProc )( hwnd, msg, mp1, mp2 ); +} + + +MRESULT EXPENTRY cmdProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + POINTL ptlMouse; + RECTL Rectangle; + FRAMECDATA frameData; + short i; + + switch( msg ) + { + case WM_COMMAND: + switch( SHORT1FROMMP( mp1 ) ) + { + case IDI_EXIT: + WinPostMsg( WinWindowFromID(hwnd,FID_CLIENT), WM_CLOSE, 0, 0 ); + break; + + case IDI_SETUP: + case IDI_PORTS: + case IDI_PEOPLE: + case IDI_DTMF: + if( callPending || isRecording ) + break; + + i = SHORT1FROMMP( mp1 ); + + WinDlgBox( HWND_DESKTOP, hwndFrame, (PFNWP) configProc, + NULLHANDLE, CFG_DIALOG, (PVOID) &i ); + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, CAPITEL_ACTIVE_DEF ) ) + answer_listen(); + + break; + + case IDI_INFO: + WinDlgBox( HWND_DESKTOP, hwndFrame, (PFNWP) aboutProc, + NULLHANDLE, ABOUT_DIALOG, NULL ); + + break; + + case IDI_README: shExecute( EXEC_README, TRUE ); break; + case IDI_ORDER: shExecute( EXEC_ORDER, TRUE ); break; + case IDI_ORDERBMT: shExecute( EXEC_ORDERBMT, TRUE ); break; + case IDI_LICENSE: shExecute( EXEC_LICENSE, TRUE ); break; + case IDI_WHATSNEW: shExecute( EXEC_WHATSNEW, TRUE ); break; + case IDI_HOMEPAGE: shExecute( APP_HOMEPAGE, FALSE ); break; + + case IDI_REGISTRATION: + WinDlgBox( HWND_DESKTOP, hwndFrame, (PFNWP) registrationProc, + NULLHANDLE, REG_DIALOG, NULL ); + + if( strlen( QueryRegName() ) > 0 ) + { + sprintf( defaultBarText, ISREGTEXT, APPNAME, + QueryRegName() ); + SetStatus( defaultBarText ); + } + + break; + + case IDI_TOGGLE: + if( callPending || isRecording ) + break; + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, CAPITEL_ACTIVE_DEF ) ) + { +// SetBitmap( IDI_TOGGLE, ID_BMP_ONOFF0 ); + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, FALSE ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, FALSE ) ); + + SetStatus( DEACTMSG ); + + config_file_write_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, 0 ); + } + else + { +// SetBitmap( IDI_TOGGLE, IDI_TOGGLE ); + + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + SetStatus( defaultBarText ); + + config_file_write_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, 1 ); + } + + break; + + case IDI_HIDE: + if( config_file_read_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, WINDOW_FRAMECTRLS_HIDDEN_DEF ) ) + { + config_file_write_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, 0 ); + frameData.cb = sizeof( FRAMECDATA ); + frameData.flCreateFlags = FCF_TITLEBAR | FCF_SYSMENU | + FCF_MENU | FCF_MINMAX; + frameData.hmodResources = 0; + frameData.idResources = ID_FRAME; + WinCreateFrameControls( hwnd, &frameData, APPNAME ); + WinSendMsg( WinWindowFromID(hwnd, FID_TITLEBAR), TBM_SETHILITE, + MPFROMSHORT( TRUE ), 0 ); + + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_HIDE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_HIDE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, CAPITEL_ACTIVE_DEF ) ) + { + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) ); + } + else + { + WinSendMsg( WinWindowFromID( hwnd, FID_MENU ), MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, FALSE ) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_TOGGLE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, FALSE ) ); + } + + } + else + { + config_file_write_ulong( STD_CFG_FILE, WINDOW_FRAMECTRLS_HIDDEN, 1); + WinDestroyWindow( WinWindowFromID(hwnd, FID_SYSMENU) ); + WinDestroyWindow( WinWindowFromID(hwnd, FID_TITLEBAR) ); + WinDestroyWindow( WinWindowFromID(hwnd, FID_MINMAX) ); + WinDestroyWindow( WinWindowFromID(hwnd, FID_MENU) ); + + WinSendMsg( hwndPopup, MM_SETITEMATTR, + MPFROM2SHORT( IDI_HIDE, TRUE ), + MPFROM2SHORT( MIA_CHECKED, FALSE ) ); + } + + WinSendMsg( hwndFrame, WM_UPDATEFRAME, + MPFROMSHORT( FCF_TITLEBAR|FCF_SYSMENU|FCF_MENU| + FCF_MINMAX|ID_TOOLBAR ), 0 ); + + WinSendMsg( hwndToolbar, TB_REDRAW, 0, 0 ); + + break; + + case ID_CALL_PLAY: + currRec = (CntrRec *) WinSendMsg( hwndCntr, CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + /* automagically jump to the real play-function */ + + case ID_POPUP_PLAY: + if( (currRec == NULL) || (!mmpmInstalled) || + !(currRec->itemInfo.seconds) ) + break; + + answer_stop_bell(); + if(wavplay_current_deviceID) wavplay_stop(wavplay_current_deviceID); + copyFile( currRec->itemInfo.filename, "TEMP.WAV" ); + wavplay_current_deviceID = wavplay_start(hwnd, "TEMP.WAV"); + if(wavplay_current_deviceID) setHeard( currRec ); + break; + + case ID_CALL_PLAY_ALL: + case ID_POPUP_PLAY_ALL: + answer_stop_bell(); + answer_play_all(); + break; + + case ID_ADD_CALLER: + currRec = (CntrRec *) WinSendMsg( hwndCntr, CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + /* automagically jump to the real add-function */ + + case ID_POPUP_ADD_CALLER: + if( !currRec || !onlyDigits( currRec->itemInfo.caller ) ) + break; + + WinDlgBox( HWND_DESKTOP, hwnd, (PFNWP) addNewCallerProc, + NULLHANDLE, CFG_PEOPLE_EDITDLG, NULL ); + + break; + + case ID_CALL_DEL: + currRec = (CntrRec *) WinSendMsg( hwndCntr, CM_QUERYRECORDEMPHASIS, + MPFROMSHORT( CMA_FIRST ), + MPFROMSHORT( CRA_SELECTED ) ); + /* automagically jump to the real delete-function */ + + case ID_POPUP_DEL: + answer_stop_bell(); + if( currRec == NULL ) + break; + + if( !config_file_read_ulong( STD_CFG_FILE, CONFIRM_CALL_DELETE, CONFIRM_CALL_DELETE_DEF ) ) + { + DeleteCall(); + break; + } + + if( MyMsgBox( HWND_DESKTOP, hwndFrame, + DELCALL, + CTELMSG, MB_YESNO, SPTR_ICONQUESTION ) + == MBID_YES ) + + DeleteCall(); + + break; + + case ID_CALL_REC: + if( callPending || isRecording ) + break; + + if( WinDlgBox( HWND_DESKTOP, hwndFrame, (PFNWP) recProc, + NULLHANDLE, ID_RECDLG, NULL ) ) + break; + + isRecording = 1; + answer_record_welcome( recFile ); + hwndRecInfo = WinLoadDlg( HWND_DESKTOP, hwndFrame, + (PFNWP) recordInfoProc, + NULLHANDLE, RECORD_DIALOG, NULL ); + break; + + case ID_INCALL_START: + { + int iPopFlag; + + if(hwndInCall) break; + + iPopFlag = config_file_read_ulong(STD_CFG_FILE, + SHOW_POPUP_WINDOW, SHOW_POPUP_WINDOW_DEF); + if(!iPopFlag) break; + + hwndInCall = WinLoadDlg(HWND_DESKTOP, + hwndFrame, (PFNWP)inCallProc, 0, INCALL_DIALOG, &iPopFlag); + + break; + } + + case ID_INCALL_STOP: + + if(hwndInCall) + { + WinDestroyWindow(hwndInCall); + hwndInCall = 0; + } + break; + + case ID_RECINFO_STOP: + WinDestroyWindow( hwndRecInfo ); + break; + } + + break; + + case WM_CONTROL: + switch( SHORT2FROMMP( mp1 ) ) + { + case CN_ENTER: + if( (currRec = (CntrRec *) ((PNOTIFYRECORDENTER) mp2)->pRecord) + == NULL ) + break; + + WinPostMsg( hwnd, WM_COMMAND, MPFROMSHORT( ID_POPUP_PLAY ), NULL ); + break; + + case CN_CONTEXTMENU: + currRec = (CntrRec *) PVOIDFROMMP( mp2 ); + + if( !currRec ) + { + BOOL fEnable = FALSE; /* wegen compiler warnings ;-( */ + + /* Alles abschalten, weil kein richtiger Eintrag angewaehlt */ + WinEnableMenuItem( hwndPopup, ID_POPUP_PLAY, fEnable ); + WinEnableMenuItem( hwndPopup, ID_POPUP_DEL, fEnable ); + WinEnableMenuItem( hwndPopup, ID_POPUP_ADD_CALLER, fEnable ); + } + else + { + BOOL fEnable = TRUE; /* wegen compiler warnings ;-( */ + + /* Delete Call geht immer */ + WinEnableMenuItem( hwndPopup, ID_POPUP_DEL, fEnable ); + + /* Abspielbar ? */ + WinEnableMenuItem( hwndPopup, ID_POPUP_PLAY, (currRec->itemInfo.seconds)?TRUE:FALSE ); + + /* Add moeglich? */ + WinEnableMenuItem( hwndPopup, ID_POPUP_ADD_CALLER, onlyDigits( currRec->itemInfo.caller )?TRUE:FALSE ); + } + + WinQueryPointerPos( HWND_DESKTOP, &ptlMouse ); + WinMapWindowPoints( HWND_DESKTOP, hwndCntr, &ptlMouse, 1 ); + + WinPopupMenu( hwndCntr, hwnd, hwndPopup, ptlMouse.x, + ptlMouse.y, 0, PU_HCONSTRAIN | PU_VCONSTRAIN | + PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_MOUSEBUTTON2 | + PU_NONE ); + + break; + } + break; + } + + return FALSE; +} + +void MsgBox( char *message ) +{ + MyMsgBox( HWND_DESKTOP, hwndFrame, + (PSZ) message, + (PSZ) CTELMSG, + MB_OK, SPTR_ICONERROR ); + return; +} + +void ErrorBox( char *title, HWND hwnd ) +{ + MB2INFO boxInfo; + + boxInfo.cb = sizeof( boxInfo ); + boxInfo.cButtons = 1; + boxInfo.flStyle = MB_NONMODAL | MB_ERROR | MB_MOVEABLE; + boxInfo.hwndNotify = hwnd; + + strcpy( boxInfo.mb2d[0].achText, OKMSG ); + boxInfo.mb2d[0].idButton = 0; + boxInfo.mb2d[0].flStyle = BS_DEFAULT; + + WinMessageBox2( HWND_DESKTOP, hwnd, textmsg, title, + 0, (PMB2INFO) &boxInfo ); +} + +void sigFunc( short num, void *msg ) +{ + HAB hab; + HMQ hmq; + + hab = WinInitialize( 0 ); + hmq = WinCreateMsgQueue( hab, 0 ); + + switch( num ) + { + case 1: /* Warning Message */ + strcpy( textmsg, msg ); + WinSendMsg( hwndFrame, UM_WARNING, 0, 0 ); + break; + + case 2: /* Critical Error */ + strcpy( textmsg, msg ); + WinSendMsg( hwndFrame, UM_CRITICAL, 0, 0 ); + break; + + case 3: /* Fatal Error */ + MsgBox( msg ); + WinPostMsg( hwndFrame, WM_QUIT, 0, 0 ); + break; + + case 4: /* Incoming Call */ + ctel_connect_ind( (TCapiInfo *) msg ); + break; + + case 5: /* FileName of incoming call */ + ctel_filenum( *((short *) msg) ); + break; + + case 6: /* Connection closed */ + ctel_disc_ind( *((long *) msg), 1 ); + break; + + case 7: /* Idle Msg while converting */ + ctel_convert_status( *((short *) msg) ); + break; + + case 8: /* Rescan directory */ + ctel_rescan(); + break; + + case 9: /* Connection closed (no entry) */ + ctel_disc_ind( *((long *) msg), 0 ); + break; + + case 10: /* Play .WAV File */ + strcpy( textmsg, msg ); + WinSendMsg( hwndFrame, UM_PLAYWAV, 0, 0 ); + break; + + case 11: /* Deactivate CapiTel */ + SetStatus( DEACTMSG ); + config_file_write_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, 0 ); + break; + + case 12: /* Quit CapiTel */ + WinPostMsg( hwndFrame, WM_QUIT, 0, 0 ); + break; + + } + + WinDestroyMsgQueue( hmq ); + WinTerminate( hab ); +} + +void ctel_connect_ind( TCapiInfo *msg ) +{ + struct tm *tmbuf; + time_t tod; + char str[150], *number, *pt; + int i; + HAB hab; + HMQ hmq; + SWP swp; + + callPending = 1; + + time( &tod ); + tmbuf = localtime( &tod ); + + while (tmbuf->tm_year >= 100) tmbuf->tm_year -= 100; + + sprintf( CallInfo.date, "%02d.%02d.%02d", tmbuf->tm_mday, + tmbuf->tm_mon+1, tmbuf->tm_year ); + sprintf( CallInfo.time, "%02d:%02d:%02d", tmbuf->tm_hour, + tmbuf->tm_min, tmbuf->tm_sec ); + + strcpy( CallInfo.calledEAZ, msg->called_name ); + strcpy( CallInfo.caller, msg->caller_name ); + CallInfo.digital = msg->is_digital; + + hab = WinInitialize( 0 ); + hmq = WinCreateMsgQueue( hab, 0 ); + + if( !isRecording ) + WinSendMsg( hwndFrame, WM_COMMAND, MPFROM2SHORT( ID_INCALL_START, 0 ), 0 ); + else + WinSetDlgItemText( hwndRecInfo, RECORD_STATUS, (PSZ)"" ); + + WinDestroyMsgQueue( hmq ); + WinTerminate( hab ); +} + +void ctel_filenum( short num ) +{ + sprintf( CallInfo.filename, "CALL%04d.WAV", num ); +} + +void ctel_disc_ind( long secs, short addToContainer ) +{ + HAB hab; + HMQ hmq; + FILE *fh; + char str[256]; + int i; + HPOINTER bmp; + SWP swp; + + hab = WinInitialize( 0 ); + hmq = WinCreateMsgQueue( hab, 0 ); + + if( isRecording ) + { + isRecording = 0; + + WinSendMsg( hwndFrame, WM_COMMAND, + MPFROM2SHORT( ID_RECINFO_STOP, 0 ), 0 ); + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, CAPITEL_ACTIVE_DEF ) ) + { + SetStatus( defaultBarText ); + } + else + { + SetStatus( DEACTMSG ); + } + + WinDestroyMsgQueue( hmq ); + WinTerminate( hab ); + callPending = 0; + return; + } + + if (CallInfo.digital) + { + CallInfo.seconds = 0; + bmp = cntrIcoCallDigital; + } else { + switch( secs ) + { + case -1: + case 0: + CallInfo.seconds = 0; + bmp = cntrIcoCall; + break; + default: + CallInfo.seconds = secs; + bmp = cntrIcoCallWav; + break; + } + } + + if( config_file_read_ulong( STD_CFG_FILE, CAPITEL_ACTIVE, CAPITEL_ACTIVE_DEF ) ) + { + SetStatus( defaultBarText ); + } + else + { + SetStatus( DEACTMSG ); + } + + WinSendMsg( hwndFrame, WM_COMMAND, MPFROM2SHORT( ID_INCALL_STOP, 0 ), 0 ); + + /* Ignore empty call?? */ + if( (config_file_read_ulong( STD_CFG_FILE, IGNORE_EMPTY_CALLS, IGNORE_EMPTY_CALLS_DEF )) && (CallInfo.seconds == 0) ) + { + remove( CallInfo.filename ); + } + else + { + if( config_file_read_ulong( STD_CFG_FILE, RESTORE_WINDOW_ON_NEW_CALL, RESTORE_WINDOW_ON_NEW_CALL_DEF ) ) + { + WinQueryWindowPos( hwndFrame, &swp ); + if( swp.fl & SWP_MINIMIZE ) + WinSetWindowPos( hwndFrame, 0, 0, 0, 0, 0, SWP_RESTORE ); + } + + if( addToContainer ) + { + AddItem( bmp, CallInfo.caller, CallInfo.date, CallInfo.time, + CallInfo.seconds, CallInfo.calledEAZ, CallInfo.filename, CallInfo.digital ); + + strcpy( str, CallInfo.filename ); + + for( i=0 ; (str[i]!='.')&&(iitemInfo.filename ); + + remove( base ); /* remove .wav file */ + + for( i=0 ; (base[i]!='.')&&(i swpd.cx) sBLCx = swpd.cx - (dWidth + 1); + if ((sBLCy + dHeight) > swpd.cy) sBLCy = swpd.cy - (dHeight + 1); + + WinSetWindowPos(hWndDlg,HWND_TOP,sBLCx,sBLCy,0,0,SWP_MOVE); +} + +void copyFile( char *from, char *to ) +{ + char *dat; + FILE *fh_from, *fh_to; + long size; + + if( (fh_from = fopen( from, "rb" )) != NULL ) + { + if( (fh_to = fopen( to, "wb" )) != NULL ) + { + size = _filelength( fileno( fh_from ) ); + + dat = (char *) malloc( size ); + + fread( dat, size, 1, fh_from ); + fwrite( dat, size, 1, fh_to ); + + free( dat ); + + fclose( fh_to ); + } + + fclose( fh_from ); + } +} + +void setHeard( CntrRec *currRec ) +{ + char base[256]; + int i; + FILE *fh; + + strcpy( base, currRec->itemInfo.filename ); + + for( i=0 ; (base[i]!='.')&&(iitemInfo.caller, + currRec->itemInfo.date, currRec->itemInfo.time, + currRec->itemInfo.seconds, currRec->itemInfo.calledEAZ, + currRec->itemInfo.filename, currRec->itemInfo.digital ); + + fclose( fh ); + + if (currRec->itemInfo.digital) { + currRec->itemInfo.icon = (HPOINTER) cntrIcoCallDigital; + } else { + currRec->itemInfo.icon = (HPOINTER) cntrIcoCallHeard; + } + + WinSendMsg( hwndCntr, CM_INVALIDATERECORD, MPFROMP( NULL ), + MPFROM2SHORT( 0, CMA_REPOSITION ) ); +} + +short queryDimensions( HWND hwnd, char *str, ULONG *breite, ULONG *hoehe ) +{ + HPS hps; + POINTL p[TXTBOX_COUNT]; + + hps = WinGetPS( hwnd ); + GpiQueryTextBox( hps, strlen( str ), str, TXTBOX_COUNT, p ); + WinReleasePS( hps ); + + *breite = p[TXTBOX_BOTTOMRIGHT].x - p[TXTBOX_BOTTOMLEFT].x; + *hoehe = p[TXTBOX_TOPLEFT].y - p[TXTBOX_BOTTOMLEFT].y; + + return 0; +} + +short onlyDigits( char *str ) +{ + char tmp[256], *pt; + short i; + + strcpy( tmp, strip_blanks( str ) ); + if( strchr( tmp,'(' ) ) strchr( tmp, '(' )[-1] = 0; + + for( i=0 ; i < strlen( tmp ) ; i++ ) + { + if( (tmp[i] < 48) || (tmp[i] > 57) ) + return 0; + } + + return 1; +} + +int wavplay_start( HWND hwnd, char* wavFile ) { + + int rc; + MCI_OPEN_PARMS OpenParams; + MCI_PLAY_PARMS PlayParams; + MCI_GENERIC_PARMS GenericParams; + + memset(&OpenParams, 0, sizeof(OpenParams)); + OpenParams.pszElementName = wavFile; + + rc = mciSendCommand(0, MCI_OPEN, MCI_WAIT|MCI_OPEN_ELEMENT, &OpenParams, 0); + if(SHORT1FROMMP(rc) != MCIERR_SUCCESS) return 0; + + memset(&PlayParams, 0, sizeof(PlayParams)); + PlayParams.hwndCallback = hwnd; + + rc = mciSendCommand(OpenParams.usDeviceID, MCI_PLAY, MCI_NOTIFY, &PlayParams, 0); + if(SHORT1FROMMP(rc) != MCIERR_SUCCESS) { + wavplay_stop(OpenParams.usDeviceID); + return 0; + } + + return OpenParams.usDeviceID; + +} + +int wavplay_stop( short deviceID ) +{ + MCI_GENERIC_PARMS GenericParams; + + memset(&GenericParams, 0, sizeof(GenericParams)); + mciSendCommand(deviceID, MCI_STOP, MCI_WAIT, &GenericParams, 0); + mciSendCommand(deviceID, MCI_CLOSE, MCI_WAIT, &GenericParams, 0); + + return 1; + +} + +void shExecute( char *file, BOOL addPath ) +{ + HOBJECT hObj; + UCHAR complete[_MAX_PATH], currDir[_MAX_PATH]; + ULONG currDrive, driveMapping, len=_MAX_PATH; + + if( addPath ) + { + DosQueryCurrentDisk( &currDrive, &driveMapping ); + DosQueryCurrentDir( currDrive, currDir, &len ); + + sprintf( complete, "%c:\\%s\\%s", (UCHAR) 'A' + currDrive - 1, + currDir, file ); + } + else + { + strcpy( complete, file ); + } + + if( 0 != (hObj = WinQueryObject( (PSZ)complete )) ) + WinOpenObject( hObj, 0, TRUE ); +} + +typedef struct sMsgBoxStruct +{ + int extended; + char* text; + char* title; + char* check_text; + int* check_state; + int style; + HPOINTER icon; +} +tMsgBoxStruct; + + +int MyMsgBox(HWND hwndParent, HWND hwndOwner, + char* text, char* title, int style, int icon) +{ + int rc; + tMsgBoxStruct mb; + + mb.extended = 0; + mb.text = text; + mb.title = title; + mb.style = style; + mb.icon = WinQuerySysPointer(HWND_DESKTOP, icon, 1); + if(!mb.icon) mb.icon = WinLoadPointer(HWND_DESKTOP, 0, icon); + + rc = WinDlgBox(hwndParent,hwndOwner,MsgBoxProc,0,IDD_MSGBOX,&mb); + + if(mb.icon) WinDestroyPointer(mb.icon); + return rc; +} + +int MyMsgBoxEx(HWND hwndParent, HWND hwndOwner, + char* text, char* title, char* checktext, int style, int icon, + char* pCfgFile, char* pCfgKey) +{ + int rc; + tMsgBoxStruct mb; + int DontAskAgain = 0; + ULONG buffsize = sizeof(DontAskAgain); + + DontAskAgain = config_file_read_ulong(pCfgFile, pCfgKey, 0); + if(DontAskAgain) return (style == MB_YESNO) ? MBID_YES : MBID_OK; + + mb.extended = 1; + mb.text = text; + mb.title = title; + mb.check_text = checktext; + mb.check_state = &DontAskAgain; + mb.style = style; + mb.icon = WinQuerySysPointer(HWND_DESKTOP, icon, 1); + if(!mb.icon) mb.icon = WinLoadPointer(HWND_DESKTOP, 0, icon); + + rc = WinDlgBox(hwndParent,hwndOwner,MsgBoxProc,0,IDD_MSGBOXEX,&mb); + + if(mb.icon) WinDestroyPointer(mb.icon); + if((rc == MBID_YES || rc == MBID_OK) && DontAskAgain) + config_file_write_ulong(pCfgFile, pCfgKey, 1); + return rc; +} + +MRESULT EXPENTRY MsgBoxProc( + HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) +{ + switch(msg) + { + case WM_INITDLG: + { + HPS hps; + SWP swp; + RECTL rect; + HWND hwndText; + HPOINTER icon; + int textHeight = 0; + tMsgBoxStruct* pMb = (tMsgBoxStruct*)mp2; + char* c,* buff, ok_btn[128], cancel_btn[128], yes_btn[128], no_btn[128]; + + icon = (HPOINTER)WinSendDlgItemMsg(hwnd, + IDC_ICONSTATIC, SM_QUERYHANDLE, 0, 0); + if(icon) WinDestroyPointer(icon); + WinSendDlgItemMsg(hwnd, IDC_ICONSTATIC, + SM_SETHANDLE, MPFROMLONG(pMb->icon), 0); + + WinSetWindowText(hwnd, pMb->title); + WinSetDlgItemText(hwnd, IDC_TEXT, pMb->text); + + c = pMb->text; + hwndText = WinWindowFromID(hwnd, IDC_TEXT); + WinQueryWindowPos(hwndText, &swp); + hps = WinGetPS(hwndText); + while(*c) + { + WinQueryWindowRect(hwndText, &rect); + c += WinDrawText(hps, -1, c, &rect, 0, 0, + DT_LEFT|DT_TOP|DT_QUERYEXTENT|DT_WORDBREAK); + textHeight += rect.yTop - rect.yBottom; + } + WinReleasePS(hps); + if(textHeight > swp.cy) + { + textHeight -= swp.cy; + WinSetWindowPos(hwndText,0,0,0,swp.cx,swp.cy+textHeight,SWP_SIZE); + WinQueryWindowPos(WinWindowFromID(hwnd,IDC_ICONSTATIC), &swp); + WinSetWindowPos(WinWindowFromID(hwnd,IDC_ICONSTATIC), + 0,swp.x,swp.y+textHeight,0,0,SWP_MOVE); + WinQueryWindowPos(hwnd, &swp); + WinSetWindowPos(hwnd,0,0,0,swp.cx,swp.cy+textHeight,SWP_SIZE); + } + + if(pMb->extended == 1) + { + WinSetDlgItemText(hwnd, IDC_CHECK, pMb->check_text); + WinCheckButton(hwnd, IDC_CHECK, *(pMb->check_state)); + WinSetWindowULong(hwnd, QWL_USER, (ULONG)pMb->check_state); + } + + WinLoadString(0,0,STR_OK_BUTTON,sizeof(ok_btn),ok_btn); + WinLoadString(0,0,STR_CANCEL_BUTTON,sizeof(cancel_btn),cancel_btn); + WinLoadString(0,0,STR_YES_BUTTON,sizeof(yes_btn),yes_btn); + WinLoadString(0,0,STR_NO_BUTTON,sizeof(no_btn),no_btn); + + switch(pMb->style) + { + case MB_OKCANCEL: + WinSetDlgItemText(hwnd, DID_OK, ok_btn); + WinSetWindowUShort(WinWindowFromID(hwnd,DID_OK),QWS_ID,MBID_OK); + WinSetDlgItemText(hwnd, DID_CANCEL, cancel_btn); + WinSetWindowUShort(WinWindowFromID(hwnd,DID_CANCEL),QWS_ID,MBID_CANCEL); + break; + case MB_YESNO: + WinSetDlgItemText(hwnd, DID_OK, yes_btn); + WinSetWindowUShort(WinWindowFromID(hwnd,DID_OK),QWS_ID,MBID_YES); + WinSetDlgItemText(hwnd, DID_CANCEL, no_btn); + WinSetWindowUShort(WinWindowFromID(hwnd,DID_CANCEL),QWS_ID,MBID_NO); + break; + case MB_OK: + default: + WinSetDlgItemText(hwnd, DID_OK, ok_btn); + WinSetWindowUShort(WinWindowFromID(hwnd,DID_OK),QWS_ID,MBID_OK); + WinDestroyWindow(WinWindowFromID(hwnd,DID_CANCEL)); + break; + } + + centerDialog(WinQueryWindow(hwnd,QW_OWNER),hwnd); + break; + } + + case WM_CLOSE: + { + int* check_state = (int*)WinQueryWindowULong(hwnd, QWL_USER); + if(check_state) *check_state = WinQueryButtonCheckstate(hwnd, IDC_CHECK); + if(WinWindowFromID(hwnd,MBID_NO)) WinDismissDlg(hwnd, MBID_NO); + else WinDismissDlg(hwnd, MBID_CANCEL); + return 0; + } + + case WM_COMMAND: + + switch(SHORT1FROMMP(mp1)) + { + case MBID_OK: + case MBID_CANCEL: + case MBID_YES: + case MBID_NO: + { + int* check_state = (int*)WinQueryWindowULong(hwnd, QWL_USER); + if(check_state) *check_state = WinQueryButtonCheckstate(hwnd, IDC_CHECK); + if(SHORT1FROMMP(mp1) == MBID_CANCEL && WinWindowFromID(hwnd,MBID_NO)) + WinDismissDlg(hwnd, MBID_NO); + else WinDismissDlg(hwnd, SHORT1FROMMP(mp1)); + break; + } + } + return 0; + + } + + return WinDefDlgProc(hwnd, msg, mp1, mp2); +} diff --git a/capitel/source.win/ACTION0.ICO b/capitel/source.win/ACTION0.ICO new file mode 100644 index 0000000000000000000000000000000000000000..e42eb086f8fdaa608f976d64526d174489c4162c GIT binary patch literal 1078 zcmcIjF;2rk5F8^U+&MqM6-tXzBX|LS;3Yl@L|h>JguDb{DFr28NJIf0Mie$8FwEYa z69J}3!P>h!vwOEX@1B7KI~a{dFc~Mnfqb3^{(BP!H@A!A#RKhG zUmycNxkBIa16-kPMgPjM%oR?^PrP!4CA(zFX7a+O_~3$34HsmirEk2Kotn=0c$abB QnpS*hpZRXeUbSW;UxA?pi~s-t literal 0 HcmV?d00001 diff --git a/capitel/source.win/ACTION1.ICO b/capitel/source.win/ACTION1.ICO new file mode 100644 index 0000000000000000000000000000000000000000..f679f4d3b1a30bae69a2854743443e21eec4b1dd GIT binary patch literal 1078 zcmcIjJ5Iwu5PchvQlyA|0$icAC}o7;1l)leq<0ZZAkrXmgj^v~imecqQc!Y*SQOA< zL=g~y;mz*aeBuTqUi@a}&DiVp%my%MA&Md>dIs2~PZF>1Tfh->J?1o%kOtedK<;dl z$pBu+GVf>^BF}SrEr`1yq7liTrqpaAOfb#8GDm6VbP4 zh+|L>)FaxmtkSd2{ku<5?@)Oax`p)tQ0@TBF854kj8FQ&xBxDWf%84!bRRe)CzrtV ziq9#<_bK5zhh){Kj6G~d#>H7-Pn@G=_}4yhp?^l0MD-Rw5q8zXPlmk@+E1v~om3~q zS%tcrm?nY_w$4_!KT)O1?01I$m1ZoMHX`qMk~Io>HieY^M=3{dvXnrLM3Z5Pbn*i!`aMEw{JaOW99hjwEa`ZNQ6oge?`s@l7UZBPR1cdBeaEAn}$` z;Ac+2-j(p=KqTzQKKZd5G5UueTwx<_=K=Sg@x2{^JOAU!`4?gIcJ;l#cmr|IJfHvo literal 0 HcmV?d00001 diff --git a/capitel/source.win/CALL1.ICO b/capitel/source.win/CALL1.ICO new file mode 100644 index 0000000000000000000000000000000000000000..ad3a9b35d9a2f9b4b6775f6a576d68323cb253de GIT binary patch literal 318 zcmZvYF%E)26hwz;VnG4K#1>2MVBwYMDdb2d6tsI3kFb_j>l;3y^6$>f-`PI|kSbQ& zwsPGn>0$+TuAtHpmeR`qXp-2PrVyA`DJ9ewW!);p9bnlq?Ntxa&P(Wc4_#i(HdeBo zEmc0f?Z%oHl*;!Z&NCVNBYxMdxozJ0cy92QQwHxRXut{7ynD~*oSET&?B)J|&s};% F?guvNOl1H7 literal 0 HcmV?d00001 diff --git a/capitel/source.win/CALL2.ICO b/capitel/source.win/CALL2.ICO new file mode 100644 index 0000000000000000000000000000000000000000..5400ba6d5e2980c7f8758343167a7d89bfe2c900 GIT binary patch literal 318 zcmZvYF%E)26hwz;VnG3kiLI92fx;`%QCPr{OekpgC>~)uW3|5F6Dt4i%>14GLjb8_ zwQVccy^=0gVCM!Z9bqZ0{EsGyt!WB@X_Zn!eNon}QrrQSEz@3gAMLz^KD*H6)of!W z+u2g(Gum#fc|ob%^>Lob*ni>=!r9F9zg?6pyu7Le9oB}{>NVK5BS`r GN92B8?@uoP literal 0 HcmV?d00001 diff --git a/capitel/source.win/CALL3.ICO b/capitel/source.win/CALL3.ICO new file mode 100644 index 0000000000000000000000000000000000000000..7f04c6d483100afd1221bfcfa12fc1ae917fc144 GIT binary patch literal 318 zcmZutI}QRN5Pc*TBsNsmmiCrgSa_lBFrnD7+vAvQLCaA*f~^(42a!f+cpqkl5C9xA zgaF0K0S76e%8_u`k%7|q9~r;}vo2&>lv1c_)V5Ho9KlpcG-5w@yXCHF8Z8 zpb>!3_RBb?9KT>JQaCF(ewrVLch>0-lWY2I`|2FN|G1!3)$MKa3>q65%wrq zR*+;U%H&9jlqivBAi)h5iv?6x32;YSmVW(t13WRdVoW0?k>HjZ*g1VoS%807>kTzs z>~=d^O^EwLL_LB(4XL`2tf^hBmfq6Ixoe=^NYnN&K-)_%Otg$UJD5uCrf+M_hy9q& zW2%=UXBA50UZh@b^$i}w8t9h5q2Rl-OK4p4y6;PXZ^LtMeoiH8JrZF~mNUFAmNR08 zFK~vM?my?mI_FX~96*%ZNEKIpWHtseGc>Y^>s*W&9rYwSNjLg=UH2{XfuPJ(gW>rw zXh(^S1i;@Ph+`G^zCfUk!ZH|$Bp;1Z)J}xbC0UVJe>xI8cQ@Uyb*!H8@0+`uh>zX* z58$*r{Sb2T-Dw4t(4AjV&-JIse1F(+Hhte+NQUm>njX9Rt0)&v_SBYukt5b8cqopz z&jeK}wo7DBY=~E4?2>Ugq(d=gU3M%E>Cg6%j?afwJ_u2C8M!V*#-&Ja=x=$)J2A;G Dk)<*k literal 0 HcmV?d00001 diff --git a/capitel/source.win/CALLER1.ICO b/capitel/source.win/CALLER1.ICO new file mode 100644 index 0000000000000000000000000000000000000000..48994bfadf1e8ac73b6a33dc3535734f855a4dad GIT binary patch literal 1078 zcmb_bF>b>!3_RBbY`}x_gLo?Ph@$BW`h`BD-J&r-20x)+@R&``3;G3b?Nqo^1=t9C zlETDjG6iLPq)18>bwq#!H<-<4@UlpNJKCy>{^t$w#Mpu{AE}50x70uz^d)5gelR8) zYA(^XEv-*T_#om}1b;r{)tThTLo6R$u-4j!i}irQ8KB(St)*WK6xy<>jrZ5C$bBA% z{m}DTkEsh1`vBY$=;uIJvhVC1KJN2=-2OiIh$Jyl!CElfbYUHvPmWlYx2-4Y@0rS3>jJG&RpF(P1RqdpZ^F z*TFFp`qKewRUM@II#BhGgVon*eSO{GeqSe?iTz#sI=xn3r@p@K=tJ+l4ftBpBoZz9{<31C-regX;cEk&@A;vx#=Pq^SnDyDd?9#z@>G<5G@4)) +#define IS_WIN32S (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4)) +#define IS_WIN95 (BOOL)(!(IS_NT) && !(IS_WIN32S)) + +#define ID_MAIN 100 +#define ID_TOOLBAR 101 +#define ID_LIST 102 +#define ID_STATUS 103 +#define ID_POPUP 104 +#define ID_TOOLBARBMP 105 +#define ID_CALL0 106 +#define ID_CALL1 107 +#define ID_CALL2 108 +#define ID_PORT0 109 +#define ID_PORT1 110 +#define ID_CALLER0 111 +#define ID_CALLER1 112 +#define ID_ACTION0 113 +#define ID_ACTION1 114 +#define ID_CALL3 115 +#define ID_TRAYBMP_SML 116 +#define ID_TRAYBMP_LRG 117 + +#define IDM_TOGGLEACTIVATION 200 +#define IDM_HIDEFRAMECONTROLS 201 +#define IDM_PROPERTIES 202 +#define IDM_PROP_PORTS 203 +#define IDM_PROP_CALLERS 204 +#define IDM_PROP_ACTIONS 205 +#define IDM_EXIT 206 +#define IDM_PLAY 207 +#define IDM_PLAY_ALL 208 +#define IDM_DELETE 209 +#define IDM_SAVE_AS 210 +#define IDM_ADD_TO_CALLERS 211 +#define IDM_RECORD 212 +#define IDM_ABOUT 213 +#define IDM_NEW 214 +#define IDM_EDIT 215 +#define IDM_ACTIVE 216 +#define IDM_REGISTER 217 +#define IDM_HOMEPAGE 218 +#define IDM_README 219 +#define IDM_ORDER 220 +#define IDM_ORDERBMT 221 +#define IDM_LICENSE 222 +#define IDM_WHATSNEW 223 +#define IDM_TOPMOST 224 +#define IDM_SHOWTRAY 225 +#define IDM_MINHIDE 226 +#define IDM_SHOW 227 +#define IDM_SELECTALL 228 +#define IDM_INVERTSEL 229 + +#define STR_MENUHELP_MAIN1 500 +#define STR_MENUHELP_MAIN2 501 +#define STR_MENUHELP_MAIN3 502 +#define STR_MENUHELP_MAIN4 503 + +#define STR_ABOUT1 505 +#define STR_ABOUT2 506 +#define STR_ABOUT3 507 +#define STR_ABOUT_UNREG1 508 +#define STR_ABOUT_UNREG2 509 +#define STR_WINDOW_TITLE 510 +#define STR_TBAR_REG 511 +#define STR_TBAR_UNREG 512 +#define STR_TBAR_FREE 513 +#define STR_TBAR_DEACTIVATED 514 +#define STR_TBAR_CONVERTING 515 +#define STR_TBAR_RECWELCOME 516 +#define STR_LIST_COL1 517 +#define STR_LIST_COL2 518 +#define STR_LIST_COL3 519 +#define STR_LIST_COL4 520 +#define STR_LIST_COL5 521 +#define STR_PRT_LIST_COL1 522 +#define STR_PRT_LIST_COL2 523 +#define STR_CLR_LIST_COL1 524 +#define STR_CLR_LIST_COL2 525 +#define STR_ACT_LIST_COL1 526 +#define STR_ACT_LIST_COL2 527 +#define STR_REJECTCAUSE_D 528 +#define STR_REJECTCAUSE_0 529 +#define STR_REJECTCAUSE_1 530 +#define STR_REJECTCAUSE_2 531 +#define STR_REJECTCAUSE_3 532 +#define STR_POPWIN_NONE 533 +#define STR_POPWIN_TOPLEFT 534 +#define STR_POPWIN_TOPRIGHT 535 +#define STR_POPWIN_BOTTOMLEFT 536 +#define STR_POPWIN_BOTTOMRIGHT 537 +#define STR_LIST_ACTION_1 538 +#define STR_LIST_ACTION_2 539 +#define STR_LIST_ACTION_3 540 +#define STR_LIST_ACTION_4 541 +#define STR_LIST_ACTION_5 542 +#define STR_FDLG_WELCOME 543 +#define STR_FDLG_WELCOME_FILT 544 +#define STR_FDLG_RINGING 545 +#define STR_FDLG_RINGING_FILT 546 +#define STR_FDLG_RECORD 547 +#define STR_FDLG_RECORD_FILT 548 +#define STR_FDLG_SAVEAS 549 +#define STR_FDLG_SAVEAS_FILT 550 +#define STR_FDLG_SAVEAS_FILE 551 +#define STR_POPTEXT_1 552 +#define STR_POPTEXT_2 553 +#define STR_POPTEXT_3 554 +#define STR_ERROR 555 +#define STR_WARNING 556 +#define STR_MSG_REGOK 557 +#define STR_MSG_REGFAIL 558 +#define STR_ERR_NONUMBER 559 +#define STR_ERR_NODTMFCODE 560 +#define STR_HELP_README 561 +#define STR_ASK_REALYDELETE 562 +#define STR_ASK_REALYDELETE2 563 +#define STR_ASK_REALYEXIT 564 +#define STR_ASK_REALYEXIT_CHK 565 +#define STR_HELP_ORDER 566 +#define STR_HELP_ORDERBMT 567 +#define STR_HELP_LICENSE 568 +#define STR_HELP_WHATSNEW 569 + +#define IDD_ABOUT 1000 +#define IDD_PROPPAGE1 1001 +#define IDD_PROPPAGE2 1002 +#define IDD_PROPPAGE3 1003 +#define IDD_PROPPAGE4 1004 +#define IDD_EDITPORTLIST 1005 +#define IDD_EDITPORT 1006 +#define IDD_EDITCALLERLIST 1007 +#define IDD_EDITCALLER 1008 +#define IDD_EDITACTIONLIST 1009 +#define IDD_EDITACTION 1010 +#define IDD_REGISTER 1011 +#define IDD_POPUP 1012 + +#define IDD_MSGBOX 1500 +#define IDD_MSGBOXEX 1501 +#define IDC_ICO 1502 +#define IDC_TEXT 1503 +#define IDC_CHECK 1504 + +#define IDC_WAVE_RINGING 2000 +#define IDC_WAVE_16BIT 2001 +#define IDC_RESTORE_WINDOW 2002 +#define IDC_CONFIRM_DELETE 2003 +#define IDC_IGNORE_EMPTY 2004 +#define IDC_EXPAND_CALLER_ID 2005 +#define IDC_DTMF_SUPPORT 2006 +#define IDC_ANSWER_DELAY 2007 +#define IDC_RECORD_TIME 2008 +#define IDC_SILENCE 2009 +#define IDC_WELCOME_TEXT 2010 +#define IDC_RINGING_WAVE 2011 +#define IDC_LOGFILE 2012 +#define IDC_ULAW_CODEC 2013 +#define IDC_IS_CALLER_ID 2014 +#define IDC_POPUPWIN 2015 + +#define IDC_PORT_LIST 2100 +#define IDC_CALLER_LIST 2200 +#define IDC_ACTION_LIST 2300 + +#define IDC_DESCRIPTION 2400 +#define IDC_MSN 2401 +#define IDC_NAME 2402 +#define IDC_NUMBER 2403 +#define IDC_FILENAME 2404 +#define IDC_WAVENAME 2405 +#define IDC_REACTION 2406 +#define IDC_DELAY 2407 +#define IDC_MAXTIME 2408 +#define IDC_ENABLED 2409 +#define IDC_FILEDLG 2410 +#define IDC_WAVEDLG 2411 +#define IDC_FORWARD 2412 + +#define IDC_DTMFCODE 2500 +#define IDC_REMOTECONTROL 2501 +#define IDC_SET_CALLBACK 2502 +#define IDC_REBOOT 2503 +#define IDC_DEACTIVATE 2504 +#define IDC_QUIT 2505 +#define IDC_EXECUTE 2506 +#define IDC_PROGRAM 2507 +#define IDC_ARGUMENTS 2508 + +#define IDC_REGNAME 2600 +#define IDC_REGCODE 2601 + +#define IDC_TEXT1 2700 +#define IDC_TEXT2 2701 +#define IDC_TEXT3 2702 +#define IDC_TEXT4 2703 +#define IDC_TEXT5 2704 + +#define IDC_EDIT_PORTS 2800 +#define IDC_EDIT_CALLERS 2801 +#define IDC_EDIT_ACTIONS 2802 + +#define TID_REGTIMER 9999 + + +#endif diff --git a/capitel/source.win/CAPITEL.ICO b/capitel/source.win/CAPITEL.ICO new file mode 100644 index 0000000000000000000000000000000000000000..e237f1e26dae2042441461639ed7e805f11c55c0 GIT binary patch literal 1078 zcma)*ziQ(^5XMK*!3qQ?zkyvHDFrH1oF8eyg#-p?uXE>DF}QGPJxaQy6u7vB6uRHH zmhO^EihT07GvCbYA8SWuncdlHwJ_o3&g=(vvAF5`%wY9^}?W=`vf23E1Osd?{X6>W@m7y~P|ZL6hpMiyni51_)I zh10*(R@l@89O*gV{MG4n*Q6h{`gU8EW=8MyQDcs}3sZnrZ_d9V4(=Z({bIR&mG zU!6))zDb&Vd3AYHA0Mt$-d}2WIoahXP5#+lg_zc3zIK@4y1npQdkN|M`U^MtLC=9X zKb3ve#I@xdL(IgWc6$T#)KlwUz1dG{mQP$dzWa|kI(tKD)lgfFGoSFIEz|qgpgv!~ z6`cFL$NwB*It=|yfyRLIwLWLUJCt;Y0=mf>tCrP;8#kXUSH3ah#cv*nc6pQ6O>JHI zTJy8cUjXq|bFlmUL3fbaEk)i9`qW~@N8}*i_rP0@u!ljUI#E9PK&{v>^_`mi0a7I_ A<^TWy literal 0 HcmV?d00001 diff --git a/capitel/source.win/CAPITEL.RC b/capitel/source.win/CAPITEL.RC new file mode 100644 index 0000000..a34f3ee --- /dev/null +++ b/capitel/source.win/CAPITEL.RC @@ -0,0 +1,40 @@ + +#define _INC_WINDOWS_H_ #include +#define _INC_CAPITEL_H_ #include "capitel.h" +#define _INC_VERSION_H_ #include "..\..\common\source\version.h" +#define _INC_GLOBALS_H_ #include "..\..\common\source\global.h" + +_INC_WINDOWS_H_ +_INC_CAPITEL_H_ +_INC_VERSION_H_ +_INC_GLOBALS_H_ + +ID_MAIN ICON DISCARDABLE "CAPITEL.ICO" +ID_CALL0 ICON DISCARDABLE "CALL0.ICO" +ID_CALL1 ICON DISCARDABLE "CALL1.ICO" +ID_CALL2 ICON DISCARDABLE "CALL2.ICO" +ID_CALL3 ICON DISCARDABLE "CALL3.ICO" +ID_PORT0 ICON DISCARDABLE "PORT0.ICO" +ID_PORT1 ICON DISCARDABLE "PORT1.ICO" +ID_CALLER0 ICON DISCARDABLE "CALLER0.ICO" +ID_CALLER1 ICON DISCARDABLE "CALLER1.ICO" +ID_ACTION0 ICON DISCARDABLE "ACTION0.ICO" +ID_ACTION1 ICON DISCARDABLE "ACTION1.ICO" + +ID_TOOLBARBMP BITMAP DISCARDABLE "TOOLBAR.BMP" + +ID_TRAYBMP_SML BITMAP DISCARDABLE "TRAY_SML.BMP" +ID_TRAYBMP_LRG BITMAP DISCARDABLE "TRAY_LRG.BMP" + +#include "english.rc" +#include "german.rc" +#include "spanish.rc" +#include "french.rc" +#include "norweg.rc" +#include "dutch.rc" +#include "finnish.rc" +#include "italian.rc" +#include "nynorsk.rc" +#include "danish.rc" +#include "hungary.rc" + diff --git a/capitel/source.win/DANISH.RC b/capitel/source.win/DANISH.RC new file mode 100644 index 0000000..8beb725 --- /dev/null +++ b/capitel/source.win/DANISH.RC @@ -0,0 +1,522 @@ +// From: Bjarke Sřrensen BSO@merkantildata.dk + +LANGUAGE LANG_DANISH, SUBLANG_DEFAULT + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "A&lmen" + BEGIN + MENUITEM "Telefonsvarer &Aktiv\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "&Skjul Vindue Indstillinger\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Egenskaber ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Luk" , IDM_EXIT + END + POPUP "&Opkald" + BEGIN + MENUITEM "Afspi&l\tEnter" , IDM_PLAY + MENUITEM "Sl&et\tDel" , IDM_DELETE + MENUITEM "&Gem som ..." , IDM_SAVE_AS + MENUITEM "Gem Som &Ny Opkalder\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Afs&pil Alle\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Optag Velkomst\tAlt+R" , IDM_RECORD + END + POPUP "&Vis" + BEGIN + MENUITEM "&Altid Řverst" , IDM_TOPMOST + MENUITEM "&Vis Status i Proceslinje" , IDM_SHOWTRAY + MENUITEM "&Gem Hvis Minimeret" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Vćlg &Alle\tCtrl+A" , IDM_SELECTALL + MENUITEM "&Invertér velg" , IDM_INVERTSEL + END + POPUP "&Hjćlp" + BEGIN + MENUITEM "&LćsMig" , IDM_README + MENUITEM "&Hvad Er Nyt?" , IDM_WHATSNEW + MENUITEM "&Licens" , IDM_LICENSE + MENUITEM "&Vis Ordre Formular" , IDM_ORDER + MENUITEM "Vis BMT &Micro Ordre Formular" , IDM_ORDERBMT + MENUITEM "&Hjemmeside pĺ Internet" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Om CapiTel" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context" + BEGIN + MENUITEM "Afspil" , IDM_PLAY + MENUITEM "&Slet\tDel" , IDM_DELETE + MENUITEM "&Gem Som ..." , IDM_SAVE_AS + MENUITEM "Gem Som &Ny Opkalder\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Afs&pil Alle\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Optag Velkomst\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "Telefonsvarer &Aktiv\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "&Skjul Vindue Indstilinger\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "Egenskabe&r ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Om CapiTel" , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "&Luk" , IDM_EXIT + END + POPUP "Context_2" + BEGIN + MENUITEM "&Ny.." , IDM_NEW + MENUITEM "&Ret" , IDM_EDIT + MENUITEM "&Slet" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Aktiv" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Vis CapiTel" , IDM_SHOW + MENUITEM "&Afspil Alle Opkald" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "&Luk" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Aktiverer eller Deaktiverer telefonsvaren." + IDM_HIDEFRAMECONTROLS "Viser eller gemmer menuen, vćrktřjs- og statuslinie." + IDM_PROPERTIES "Ĺbner programindstillinger." + IDM_PROP_PORTS "Ĺbner en liste over alle porte." + IDM_PROP_CALLERS "Ĺbner en liste over alle kendte opkaldere." + IDM_PROP_ACTIONS "Ĺbner en liste med fjernstyrede funktioner." + IDM_EXIT "Lukker CapiTel." + IDM_PLAY "Afspiller valgte opkald." + IDM_PLAY_ALL "Afspiller alle opkald." + IDM_DELETE "Sletter det valgte opkald." + IDM_SAVE_AS "Gemmer valgte opkald til en lyd fil." + IDM_ADD_TO_CALLERS "Tilfřjer det valgte telefonnummer til opkalderliste." + IDM_RECORD "Optager Velkomst." + IDM_README "Ĺbner ReadMe.Txt." + IDM_WHATSNEW "Ĺbner WhatsNew.Txt." + IDM_LICENSE "Ĺbner Licens Aftalen." + IDM_ORDER "Ĺbner Ordre Formularen." + IDM_ORDERBMT "Ĺbner BMT Micro Ordre Formularen." + IDM_HOMEPAGE "Ĺbner CapiTels hjemmeside." + IDM_ABOUT "Viser produkt information." + IDM_SHOW "Aktiverer CapiTels hovedvindue." + IDM_TOPMOST "CapiTel forbliver ovenpĺ alle andre vinduer hvis ikke minimeret." + IDM_SHOWTRAY "Viser status ikon i proceslinjen." + IDM_MINHIDE "Skjul CapiTel hvis minimeret." + IDM_SELECTALL "Vćlger alle emner i vinduet." + IDM_INVERTSEL "Bytter om pĺ hvilke der er, og ikke er valgte." + + STR_MENUHELP_MAIN1 "Indeholder kommandoer til at ćndre CapiTels opfřrsel." + STR_MENUHELP_MAIN2 "Indeholder kommandoer til at afspille eller slette dine opkald." + STR_MENUHELP_MAIN3 "Indeholder kommandoer til at manipulere udseendet." + STR_MENUHELP_MAIN4 "Indeholder kommandoer til at vise Hjćlp." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Version %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s and %s" + STR_ABOUT_UNREG1 "Uregistreret evalueringskopi" + STR_ABOUT_UNREG2 "Registrer venligst CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Registreret til %s)" + STR_TBAR_UNREG "%s (UREGISTRERET EVALUERINGSKOPI)" + STR_TBAR_FREE "%s (křrer som freeware OpkalderID)" + STR_TBAR_DEACTIVATED "Telefonsvarer frakoblet ..." + STR_TBAR_CONVERTING "Konverterer wave filer ..." + STR_TBAR_RECWELCOME "Optager velkomst ..." + STR_LIST_COL1 "Opkalder" + STR_LIST_COL2 "Dato" + STR_LIST_COL3 "Tid" + STR_LIST_COL4 "Sek." + STR_LIST_COL5 "Destination" + STR_PRT_LIST_COL1 "Beskrivelse" + STR_PRT_LIST_COL2 "Kalde nummer (MSN)" + STR_CLR_LIST_COL1 "Navn" + STR_CLR_LIST_COL2 "Kalde nummer" + STR_ACT_LIST_COL1 "DTMF kode" + STR_ACT_LIST_COL2 "Funktion" + STR_REJECTCAUSE_D "Port indstilling" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Optaget" + STR_REJECTCAUSE_2 "Afvist" + STR_REJECTCAUSE_3 "Utilgćngelig" + STR_POPWIN_NONE "Aldrig" + STR_POPWIN_TOPLEFT "Řverst til venstre" + STR_POPWIN_TOPRIGHT "Řverst til hřjre" + STR_POPWIN_BOTTOMLEFT "Bunden til venstre" + STR_POPWIN_BOTTOMRIGHT "Bunden til hřjre" + STR_LIST_ACTION_1 "Fjernstyring" + STR_LIST_ACTION_2 "Genstart computeren" + STR_LIST_ACTION_3 "Deaktivér CapiTel" + STR_LIST_ACTION_4 "Luk CapiTel" + STR_LIST_ACTION_5 "Ćndre tilbagekaldsnummer" + STR_FDLG_WELCOME "Vćlg velkomst" + STR_FDLG_WELCOME_FILT "Velskomstsbesked\0*.WAV;*.ALW\0Alle filer (*.*)\0*\0" + STR_FDLG_RINGING "Vćlg ringelyd" + STR_FDLG_RINGING_FILT "Wave fil\0*.WAV\0Alle filer (*.*)\0*\0" + STR_FDLG_RECORD "Gem velkomst som" + STR_FDLG_RECORD_FILT "Velkomst\0*.ALW\0Alle filer (*.*)\0*\0" + STR_FDLG_SAVEAS "Gem opkald som" + STR_FDLG_SAVEAS_FILT "Wave fil\0*.WAV\0Alle filer (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Opkald fra %s.wav" + STR_POPTEXT_1 "Indgĺende opkald" + STR_POPTEXT_2 "Fra %s" + STR_POPTEXT_3 "Til %s" + STR_ERROR "Fejl" + STR_WARNING "Advarsel" + STR_MSG_REGOK "Tak for din registrering!" + STR_MSG_REGFAIL "Den angivene registreringskode er invalid.\n\nTjek venligst om du har angivet dit navn og din kode korrekt." + STR_ERR_NONUMBER "Angiv venligst et telefonnummer!" + STR_ERR_NODTMFCODE "Angiv venlist en DTMF kode!" + STR_ASK_REALYDELETE "Er du sikker pĺ at du vil slette de valgte opkald?" + STR_ASK_REALYDELETE2 "Du har ikke lyttet til alle de valgte opkald.\r\rEr du sikker pĺ at du vil slette dem alligevel?" + STR_ASK_REALYEXIT "Vil du lukke CapiTel?" + STR_ASK_REALYEXIT_CHK "&Vis ikke dette spřrgsmĺl igen" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Om CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel for Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Ophavsmćndene",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Nyheder og opdateringer",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Almen" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Opkaldsacceptering",-1,7,5,196,67 + LTEXT "Svar &efter",-1,14,21,70,8 + EDITTEXT IDC_ANSWER_DELAY,86,19,25,13,ES_AUTOHSCROLL + LTEXT "sekunder",-1,116,21,80,8 + LTEXT "&Begrćns optagetid til",-1,14,37,70,8 + EDITTEXT IDC_RECORD_TIME,86,35,25,13,ES_AUTOHSCROLL + LTEXT "sekunder",-1,116,37,75,8 + LTEXT "&Stop optagelse efter",-1,14,53,70,8 + EDITTEXT IDC_SILENCE,86,51,25,13,ES_AUTOHSCROLL + LTEXT "sekunders stilhed",-1,116,53,80,8 + GROUPBOX "Display",-1,7,75,196,147 + CONTROL "&Gendan minimeret vindue ved opkald", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 + CONTROL "Vis kun opkald hvor opkalder har efterladt en besked pĺ telefonsvaren", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 + CONTROL "&Hvis opkalderen er ukendt, vis da omrĺdekoden (virker kun i Tyskland!)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "Vis ogsĺ &digitale opkald (Fax, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "&Beskrćft sletning af opkald fra liste", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "Hvis hovedvinduet er minimeret og der kommer et opkald kan et pop-op vises.", + -1,14,180,170,16 + LTEXT "Vis pop-op vinude:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Telefonsvarer" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Velkomst",-1,7,5,196,50 + LTEXT "Brug fřlgene fil som &velkomst:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Gennemse ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Ring",-1,7,58,196,60 + CONTROL "Afs&pil fřlgene wave som 'ringende telefon' ved indkommende opkald:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Gennemse ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Porte og opkaldere",-1,7,121,196,102 + ICON ID_PORT1,-1,14,134,20,20 + LTEXT "Brug portlisten til at oprette dine egne opkaldsnumre som telefonsvaren skal reagere pĺ.", + -1,40,136,157,16 + PUSHBUTTON "Porte ...",IDC_EDIT_PORTS,105,158,90,14 + + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "Opkalds listen indeholder folk med kendte numre sĺ CapiTel kan vise deres navne.", + -1,40,180,157,16 + PUSHBUTTON "Kendte opkaldere ...",IDC_EDIT_CALLERS,105,202,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Fjernstyring" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Fjernstyring",-1,7,5,196,89 + CONTROL "Aktivér &DTMF tone genkaldelse",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Fjernstyringen gřr at du kan ringe til telefonsvaren og aflytte dine beskeder. Derudover kan CapiTel automatisk ringe dig op nĺr der er nye beskeder pĺ telefonsvaren.", + -1,14,37,180,24 + LTEXT "Ring til automatisk til mig pĺ fřlgene nummer:", + -1,14,69,95,16 + EDITTEXT IDC_FORWARD,110,73,85,13,ES_AUTOHSCROLL + GROUPBOX "Fjernstyringsfunktioner",-1,7,97,196,66 + ICON ID_ACTION1,-1,14,109,21,20 + LTEXT "Denne liste indeholder funktioner som kan aktiveres ved at trykke de tilsvarende DTMF koder.", + -1,40,111,156,24 + PUSHBUTTON "Fjernstyringsfunktioner ...",IDC_EDIT_ACTIONS,95,141, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Andet" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Valg",-1,7,5,196,32 + CONTROL "Tal&e data er µLaw kodet (kun i USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logning",-1,7,40,196,48 + LTEXT "Alle opkald skrives til denne fil:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Porte" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Annullér",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,174,50,50,14 + PUSHBUTTON "R&et",IDM_EDIT,174,67,50,14 + PUSHBUTTON "Sle&t",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Port" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Port er afbrudt",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,61,10 + LTEXT "&Beskrivelse:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Opkaldsnummer (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaktion:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Efterlad fřlgene felter tomme for at bruge standard indstillingerne for denne port.", + -1,14,77,160,16 + LTEXT "Svar efter",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "sekunder",-1,92,103,69,8 + LTEXT "Be&grćns til",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "sekunder",-1,92,120,69,8 + LTEXT "&Velkomst:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Gennemse ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&ingetone:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Gennemse ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Ring til mig &automatisk pĺ det fřlgene nummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Annullér",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Kendte Opkaldere" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Annullér",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,206,50,50,14 + PUSHBUTTON "R&et",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Slet",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Opkalder" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Enhed er deaktiveret",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,82,10 + LTEXT "&Beskrivelse:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "O&pkalders telefonnummer:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaktion:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Efterlad fřlgene felter tomme for at bruge standard indstillingerne for denne port.", + -1,14,77,160,16 + LTEXT "&Svar efter",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "sekunder",-1,92,103,69,8 + LTEXT "Be&grćns til",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "sekunder",-1,92,120,69,8 + LTEXT "&Velkomst:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Gennemse ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&ing:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Gennemse ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Ring til mig &automatisk pĺ fřlgene nummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Annullér",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Fjernstyringsfunktioner" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Annullér",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,174,50,50,14 + PUSHBUTTON "R&et",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Slet",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Handling" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Handligen er aktiveret",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,73,10 + LTEXT "&DTMF kode:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Ved indtastning af denne DTMF kode vil jeg ...",-1,14,47,165,8 + CONTROL "&Fjernstyr telefonsvaren, aflytte eller slette mine beskeder.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "Angiv &et nyt telefon nummer der skal ringes nĺr der er nye beskeder.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "Sluk &telefonsvaren.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "&Luk telefonsvaren.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "&Genstart computeren.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "&Start et externt program:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "Pr&ogram:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Ar&gumenter:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Annullér",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registrering" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Navn:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Kode:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Annullér",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Annullér",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Ja",IDYES,164,45,50,14 + PUSHBUTTON "&Nej",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Annullér",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Ja",IDYES,164,50,50,14 + PUSHBUTTON "&Nej",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/DUTCH.RC b/capitel/source.win/DUTCH.RC new file mode 100644 index 0000000..0e8ecfb --- /dev/null +++ b/capitel/source.win/DUTCH.RC @@ -0,0 +1,529 @@ + + +/* + * nederlands +dutch translation from: "Theo Fokkema" + */ + +LANGUAGE LANG_DUTCH, SUBLANG_DUTCH + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Algemeen" + BEGIN + MENUITEM "&Antwoordapparaat actief\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "Verberg s&chermbediening\tAlt+C", IDM_HIDEFRAMECONTROLS + MENUITEM "&Eigenschappen..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "A&fsluiten" , IDM_EXIT + END + POPUP "&Oproep" + BEGIN + MENUITEM "Afspe&len\tEnter" , IDM_PLAY + MENUITEM "&Wissen\tDel" , IDM_DELETE + MENUITEM "&Opslaan als ..." , IDM_SAVE_AS + MENUITEM "Toevoegen als &nieuwe beller\tAlt+N", IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Alles afs&pelen\tAlt+P" , IDM_PLAY_ALL + MENUITEM "Meldtekst opnemen\tAlt+R" , IDM_RECORD + END + POPUP "&Bekijk" + BEGIN + MENUITEM "&Altijd zichtbaar" , IDM_TOPMOST + MENUITEM "&Statusicoon in taakbalk" , IDM_SHOWTRAY + MENUITEM "&Verbergen bij minimaliseren" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Alles &selecteren\tCtrl+A" , IDM_SELECTALL + MENUITEM "Selectie o&mkeren" , IDM_INVERTSEL + END + POPUP "&Help" + BEGIN + MENUITEM "&LeesMij" , IDM_README + MENUITEM "&Wat is nieuw?" , IDM_WHATSNEW + MENUITEM "L&icentie" , IDM_LICENSE + MENUITEM "&Bekijk bestelformulier" , IDM_ORDER + MENUITEM "Bekijk BMT &Micro bestelformulier", IDM_ORDERBMT + MENUITEM "&Homepage op het Web" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Over CapiTel" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context" + BEGIN + MENUITEM "Afspelen" , IDM_PLAY + MENUITEM "&Wissen\tDel" , IDM_DELETE + MENUITEM "&Opslaan als ..." , IDM_SAVE_AS + MENUITEM "Toevoegen als &nieuwe beller\tAlt+N", IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Alles afs&pelen\tAlt+P" , IDM_PLAY_ALL + MENUITEM "Meldtekst opnemen\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "&Antwoordapparaat actief\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "Verberg s&chermbediening\tAlt+C", IDM_HIDEFRAMECONTROLS + MENUITEM "&Eigenschappen..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Over CapiTel" , IDM_ABOUT + END + POPUP "Context2" + BEGIN + MENUITEM "&Nieuw.." , IDM_NEW + MENUITEM "&Bewerken" , IDM_EDIT + MENUITEM "&Wissen" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Actief" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Toon CapiTel" , IDM_SHOW + MENUITEM "Alles afs&pelen" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "A&fsluiten" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Activeert of deactiveert het antwoordapparaat." + IDM_HIDEFRAMECONTROLS "Toont of verbergt het menu, de werkbalk en de statusbalk" + IDM_PROPERTIES "Opent de instellingen van het programma." + IDM_PROP_PORTS "Opent een lijst met alle poorten." + IDM_PROP_CALLERS "Opent een lijst met alle bekende bellers." + IDM_PROP_ACTIONS "Opent een lijst met op afstand bedienbare functies." + IDM_EXIT "Sluit Capitel af." + IDM_PLAY "Speelt de geselecteerde oproep af." + IDM_PLAY_ALL "Speelt alle oproepen af." + IDM_DELETE "Wist de geselecteerde oproep." + IDM_SAVE_AS "Opslaan van de geselekteerde oproep in een geluidsbestand." + IDM_ADD_TO_CALLERS "Voegt het telefoonnummer van de geselecteerde oproep toe aan het telefoonboek." + IDM_RECORD "Neemt een nieuwe meldtekst op." + IDM_README "Opent ReadMe.Txt." + IDM_WHATSNEW "Opent WhatsNew.Txt." + IDM_LICENSE "Opent de licentie-overeenkomst." + IDM_ORDER "Opent het bestelformulier." + IDM_ORDERBMT "Opent het BMT Micro bestelformulier." + IDM_HOMEPAGE "Opent de CapiTel homepage." + IDM_ABOUT "Toont productinformatie." + IDM_SHOW "Activeert het hoofdvenster van CapiTel." + IDM_TOPMOST "CapiTel blijft zichtbaar behalve bij minimaliseren." + IDM_SHOWTRAY "Toont een statusicoon in de taakbalk." + IDM_MINHIDE "Verberg CapiTel bij minimaliseren." + IDM_SELECTALL "Selecteert alle items in het venster." + IDM_INVERTSEL "Keert de selectie om." + STR_MENUHELP_MAIN1 "Bevat functies om het functioneren van CapiTel te beinvloeden." + STR_MENUHELP_MAIN2 "Bevat functies om oproepen af te spelen en te wissen" + STR_MENUHELP_MAIN3 "Bevat functies om de zichtbaarheid van CapiTel te beinvloeden." + STR_MENUHELP_MAIN4 "Bevat hulpfuncties" +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Versie %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s en %s" + STR_ABOUT_UNREG1 "Ongeregistreerde probeerversie" + STR_ABOUT_UNREG2 "Registreer CapiTel alstublieft!" + STR_WINDOW_TITLE APPNAME + STR_TBAR_REG "%s (Geregistreerd op naam van %s)" + STR_TBAR_UNREG "%s (ONGEREGISTREERDE PROBEERVERSIE)" + STR_TBAR_FREE "%s (loopt als freeware Caller-ID)" + STR_TBAR_DEACTIVATED "Antwoordapparaat gedeactiveerd ..." + STR_TBAR_CONVERTING "Conversie wav-bestanden ..." + STR_TBAR_RECWELCOME "Opname van meldtekst ..." + STR_LIST_COL1 "Oproeper" + STR_LIST_COL2 "Datum" + STR_LIST_COL3 "Tijd" + STR_LIST_COL4 "Sec." + STR_LIST_COL5 "Bestemming" + STR_PRT_LIST_COL1 "Omschrijving" + STR_PRT_LIST_COL2 "Roepnummer (MSN)" + STR_CLR_LIST_COL1 "Naam" + STR_CLR_LIST_COL2 "Oproep nummer" + STR_ACT_LIST_COL1 "DTMF-code" + STR_ACT_LIST_COL2 "Actie" + STR_REJECTCAUSE_D "Poortinstelling" + STR_REJECTCAUSE_0 "Normaal" + STR_REJECTCAUSE_1 "Bezet" + STR_REJECTCAUSE_2 "Weiger" + STR_REJECTCAUSE_3 "Niet beschikbaar" + STR_POPWIN_NONE "Nooit" + STR_POPWIN_TOPLEFT "Linksboven" + STR_POPWIN_TOPRIGHT "Rechtsboven" + STR_POPWIN_BOTTOMLEFT "Linksonder" + STR_POPWIN_BOTTOMRIGHT "Rechtsonder" + STR_LIST_ACTION_1 "Afstandsbediening" + STR_LIST_ACTION_2 "Herstart computer" + STR_LIST_ACTION_3 "Deactiveer CapiTel" + STR_LIST_ACTION_4 "Sluit CapiTel" + STR_LIST_ACTION_5 "Verander terugbelnummer" + STR_FDLG_WELCOME "Selecteer meldtekst" + STR_FDLG_WELCOME_FILT "Meldtekst\0*.WAV;*.ALW\0Alle bestanden (*.*)\0*\0" + STR_FDLG_RINGING "Selecteer rinkelen" + STR_FDLG_RINGING_FILT "Wave-bestand\0*.WAV\0Alle bestanden (*.*)\0*\0" + STR_FDLG_RECORD "Save Welcome Text As" + STR_FDLG_RECORD_FILT "Meldtekst\0*.ALW\0Alle bestanden (*.*)\0*\0" + STR_FDLG_SAVEAS "Oproep opslaan als" + STR_FDLG_SAVEAS_FILT "Wave-bestand\0*.WAV\0Alle bestanden (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Oproep van %s.wav" + STR_POPTEXT_1 "Inkomende oproep" + STR_POPTEXT_2 "Van %s" + STR_POPTEXT_3 "Naar %s" + STR_ERROR "Fout" + STR_WARNING "Attentie" + STR_MSG_REGOK "Bedankt voor uw registratie!" + STR_MSG_REGFAIL "De ingevulde registratiecode is ongeldig.\n\nControleer of uw naam en de code correct zijn ingevuld." + STR_ERR_NONUMBER "Vul alstublieft een telefoonnummer in!" + STR_ERR_NODTMFCODE "Vul alstublieft een DTMF-code in!" + STR_ASK_REALYDELETE "Weet u zeker dat u de geselecteerde oproep wilt verwijderen?" + STR_ASK_REALYDELETE2 "U heeft één of meer van de geselecteerde oproepen nog niet afgeluisterd.\r\rWeet u zeker dat u ze wil verwijderen?" + STR_ASK_REALYEXIT "CapiTel afsluiten?" + STR_ASK_REALYEXIT_CHK "Deze vraag niet opnieuw tonen" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + + + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Over CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel voor Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "De auteurs",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Nieuws en updates",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Algemeen" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Oproepacceptatie",-1,7,5,196,67 + LTEXT "&Telefoon opnemen na",-1,14,21,75,8 + EDITTEXT IDC_ANSWER_DELAY,91,19,25,13,ES_AUTOHSCROLL + LTEXT "seconden",-1,121,21,80,8 + LTEXT "&Beperk opnametijd tot",-1,14,37,75,8 + EDITTEXT IDC_RECORD_TIME,91,35,25,13,ES_AUTOHSCROLL + LTEXT "seconden",-1,121,37,75,8 + LTEXT "&Stop opname na",-1,14,53,65,8 + EDITTEXT IDC_SILENCE,81,51,25,13,ES_AUTOHSCROLL + LTEXT "seconden stilte",-1,111,53,80,8 + GROUPBOX "Schermweergave",-1,7,75,196,147 + CONTROL "&Herstel geminimaliseerd scherm bij nieuwe oproepen", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 + CONTROL "Toon &alleen oproepen waarbij een boodschap is achtergelaten", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 + CONTROL "Als de beller &onbekend is gebied tonen aan de hand van meegestuurd netnummer", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "Ook &digitale oproepen (fax, data) laten zien", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "&Verwijderen van oproepen uit de lijst bevestigen", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "Als het hoofdvenster geminimaliseerd is en er komt een oproep binnen kan er een popup-venster worden getoond", + -1,14,180,185,16 + LTEXT "Toon popup-venster:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 238 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Antwoordapparaat" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Meldtekst",-1,7,5,196,50 + LTEXT "Gebruik dit bestand als &meldtekst:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Bladeren ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Rinkelen",-1,7,58,196,60 + CONTROL "&Speel dit bestand af als 'rinkelende telefoon' bij inkomende oproepen:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Bladeren ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Poorten en telefoonnummers",-1,7,121,196,110 + ICON ID_PORT1,-1,14,134,20,20 + LTEXT "Gebruik de poortlijst om de nummers waarop CapiTel moet reageren in te vullen.", + -1,40,136,157,16 + PUSHBUTTON "Poorten ...",IDC_EDIT_PORTS,105,158,90,14 + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "De bekende bellers-lijst bevat telefoonnummers waarbij de naam van de oproeper bekend is, zodat Capitel deze kan weergeven.", + -1,40,180,157,24 + PUSHBUTTON "Bekende bellers ...",IDC_EDIT_CALLERS,105,210,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 178 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Afstandsbediening" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Afstandsbediening",-1,7,5,196,97 + CONTROL "Herkennen van &DTMF-tonen inschakelen",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Afstandsbediening stelt u in staat uw antwoordapparaat overal vandaan te bellen en berichten af te luisteren. Verder kan CapiTel u automatisch bellen zodra er een nieuw bericht is achtergelaten.", + -1,14,37,180,32 + LTEXT "Automatisch bellen naar het volgende telefoonnummer:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Afstandsbediening",-1,7,105,196,66 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "In deze lijst staan functies die geactiveerd kunnen worden door de bijbehorende DTMF-code in te toetsen op de telefoon.", + -1,40,119,156,24 + PUSHBUTTON "Op afstand bedienbare functies ...",IDC_EDIT_ACTIONS,75,149, + 120,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 103 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Overig" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Opties",-1,7,5,196,32 + CONTROL "Spr&aakdata is µLaw-gecodeerd (alleen in de USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logboek",-1,7,40,196,56 + LTEXT "Alle oproepen worden naar het volgende bestand geschreven:", + -1,14,52,180,16 + EDITTEXT IDC_LOGFILE,14,75,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Poorten" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Annuleren",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nieuw",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Bewerken",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Wissen",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Poort" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Poort is ingeschakeld",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,83,10 + LTEXT "&Omschrijving:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Roepnummer (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reactie:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Laat de volgende velden leeg als de standaardinstellingen voor deze poort gebruikt moeten worden.", + -1,14,77,200,16 + LTEXT "Be&antwoord na",-1,14,103,70,8 + EDITTEXT IDC_DELAY,88,101,25,13,ES_AUTOHSCROLL + LTEXT "seconden",-1,117,103,69,8 + LTEXT "&Beperk opnametijd tot",-1,14,120,70,8 + EDITTEXT IDC_MAXTIME,88,118,25,13,ES_AUTOHSCROLL + LTEXT "seconden",-1,117,120,69,8 + LTEXT "&Meldtekst:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "B&laderen ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&inkel:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bladeren ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Automatisch bellen naar het volgende telefoonnummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Annuleren",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Bekende bellers" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Annuleren",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Nieuw",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Bewerken",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Wissen",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Oproepers" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Regel is ingeschakeld",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,85,10 + LTEXT "&Omschrijving:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Telefoonnummer oproeper:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reactie:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Laat een of meer van de volgende velden leeg als hiervoor de standaardinstellingen gebruikt moeten worden.", + -1,14,77,200,16 + LTEXT "Be&antwoord na",-1,14,103,70,8 + EDITTEXT IDC_DELAY,88,101,25,13,ES_AUTOHSCROLL + LTEXT "seconden",-1,117,103,69,8 + LTEXT "&Beperk opnametijd tot",-1,14,120,70,8 + EDITTEXT IDC_MAXTIME,88,118,25,13,ES_AUTOHSCROLL + LTEXT "seconden",-1,117,120,69,8 + LTEXT "&Meldtekst:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bladeren ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&inkel:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bladeren ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Automatisch bellen naar het volgende telefoonnummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Annuleren",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Afstandsbedieningsfuncties" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Annuleren",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nieuw",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Bewerken",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Wissen",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Functie" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Functie is ingeschakeld",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,90,10 + LTEXT "&DTMF-code:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Deze DTMF-code heeft de volgende functie:",-1, + 14,47,165,8 + CONTROL "Het &antwoordapparaat op afstand bedienen, berichten beluisteren of wissen.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "Een nieuw &telefoonnummer invoeren wat gebeld wordt als er nieuwe berichten zijn.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "Het antwoordapparaat &uitschakelen.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "&CapiTel afsluiten.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "De computer opnieuw &opstarten.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "Een &extern programma starten:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "Pr&ogramma:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Ar&gumenten:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Annuleren",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registratie" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Naam:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Code:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Annuleren",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + + + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/ENGLISH.RC b/capitel/source.win/ENGLISH.RC new file mode 100644 index 0000000..9e47ca7 --- /dev/null +++ b/capitel/source.win/ENGLISH.RC @@ -0,0 +1,588 @@ +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&General" + BEGIN +#ifdef RECOTEL + MENUITEM "&RecoTel active\tAlt+A", IDM_TOGGLEACTIVATION +#else + MENUITEM "&Answering Machine Active\tAlt+A", IDM_TOGGLEACTIVATION +#endif + MENUITEM "&Hide Window Controls\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "P&roperties ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "E&xit" , IDM_EXIT + END + POPUP "&Call" + BEGIN + MENUITEM "P&lay\tEnter" , IDM_PLAY + MENUITEM "&Delete\tDel" , IDM_DELETE + MENUITEM "&Save As ..." , IDM_SAVE_AS + MENUITEM "Add As &New Caller\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Play All\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Record Welcome Text\tAlt+R" , IDM_RECORD + END + POPUP "&View" + BEGIN + MENUITEM "&Always On Top" , IDM_TOPMOST + MENUITEM "&Show Status in Taskbar" , IDM_SHOWTRAY + MENUITEM "&Hide When Minimized" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Select &All\tCtrl+A" , IDM_SELECTALL + MENUITEM "&Invert Selection" , IDM_INVERTSEL + END + POPUP "&Help" + BEGIN + MENUITEM "&ReadMe" , IDM_README +#ifndef RECOTEL + MENUITEM "&What's new?" , IDM_WHATSNEW +#endif + MENUITEM "&License" , IDM_LICENSE +#ifndef RECOTEL + MENUITEM "&View Order-Form" , IDM_ORDER + MENUITEM "View BMT &Micro Order-Form" , IDM_ORDERBMT + MENUITEM "&Homepage on the Web" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&About CapiTel" , IDM_ABOUT +#endif + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context" + BEGIN + MENUITEM "Play" , IDM_PLAY + MENUITEM "&Delete\tDel" , IDM_DELETE + MENUITEM "&Save As ..." , IDM_SAVE_AS + MENUITEM "Add As &New Caller\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Play All\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Record Welcome Text\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR +#ifdef RECOTEL + MENUITEM "&RecoTel Machine Active\tAlt+A", IDM_TOGGLEACTIVATION +#else + MENUITEM "&Answering Machine Active\tAlt+A", IDM_TOGGLEACTIVATION +#endif + MENUITEM "&Hide Window Controls\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "P&roperties ..." , IDM_PROPERTIES +#ifndef RECOTEL + MENUITEM SEPARATOR + MENUITEM "&About CapiTel" , IDM_ABOUT +#endif + MENUITEM SEPARATOR + MENUITEM "E&xit" , IDM_EXIT + END + POPUP "Context_2" + BEGIN + MENUITEM "&New.." , IDM_NEW + MENUITEM "&Edit" , IDM_EDIT + MENUITEM "&Delete" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Active" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Show CapiTel" , IDM_SHOW + MENUITEM "&Play All Calls" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "E&xit" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN +#ifdef RECOTEL + IDM_TOGGLEACTIVATION "Activates or deactivates RecoTel." +#else + IDM_TOGGLEACTIVATION "Activates or deactivates the answering machine." +#endif + IDM_HIDEFRAMECONTROLS "Shows or hides the menu, toolbar and statusbar." + IDM_PROPERTIES "Opens the settings of the program." + IDM_PROP_PORTS "Opens a list with all ports." + IDM_PROP_CALLERS "Opens a list with all known callers." + IDM_PROP_ACTIONS "Opens a list with remote controled actions." + IDM_EXIT "Closes CapiTel." + IDM_PLAY "Plays the selected call." + IDM_PLAY_ALL "Plays all calls." + IDM_DELETE "Deletes the selected call." + IDM_SAVE_AS "Saves the selected call to a sound file." + IDM_ADD_TO_CALLERS "Adds the phonenumber of selected call to caller list." + IDM_RECORD "Records a new welcome text." + IDM_README "Opens the ReadMe.Txt." + IDM_WHATSNEW "Opens the WhatsNew.Txt." + IDM_LICENSE "Opens the License Agreement." + IDM_ORDER "Opens the Order-Form." + IDM_ORDERBMT "Opens the BMT Micro Order-Form." + IDM_HOMEPAGE "Opens the CapiTel Homepage." + IDM_ABOUT "View product information." + IDM_SHOW "Activates the CapiTel main window." + IDM_TOPMOST "CapiTel remains in front of all other windows unless minimized." + IDM_SHOWTRAY "Shows status icon in the taskbar." + IDM_MINHIDE "Hide CapiTel when it is minimized." + IDM_SELECTALL "Selects all items in the window." + IDM_INVERTSEL "Reverses which items are selected and wich are not." + STR_MENUHELP_MAIN1 "Contains commands to change the behaviour of CapiTel." + STR_MENUHELP_MAIN2 "Contains commands to play or delete your calls." + STR_MENUHELP_MAIN3 "Contains commands for manipulating the view." + STR_MENUHELP_MAIN4 "Contains commands to display Help." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Version %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s and %s" + STR_ABOUT_UNREG1 "Unregistered evaluation copy" + STR_ABOUT_UNREG2 "Please register CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Registered to %s)" + STR_TBAR_UNREG "%s (UNREGISTERED EVALUATION COPY)" + STR_TBAR_FREE "%s (runs as freeware Caller-ID)" +#ifdef RECOTEL + STR_TBAR_DEACTIVATED "RecoTel disabled ..." +#else + STR_TBAR_DEACTIVATED "Answering machine disabled ..." +#endif + STR_TBAR_CONVERTING "Converting wave files ..." + STR_TBAR_RECWELCOME "Recording welcome text ..." + STR_LIST_COL1 "Caller" + STR_LIST_COL2 "Date" + STR_LIST_COL3 "Time" + STR_LIST_COL4 "Sec." + STR_LIST_COL5 "Destination" + STR_PRT_LIST_COL1 "Description" + STR_PRT_LIST_COL2 "Calling number (MSN)" + STR_CLR_LIST_COL1 "Name" + STR_CLR_LIST_COL2 "Calling number" + STR_ACT_LIST_COL1 "DTMF code" + STR_ACT_LIST_COL2 "Action" + STR_REJECTCAUSE_D "Port setting" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Busy" + STR_REJECTCAUSE_2 "Refuse" + STR_REJECTCAUSE_3 "Unavailable" + STR_POPWIN_NONE "Never" + STR_POPWIN_TOPLEFT "Top left" + STR_POPWIN_TOPRIGHT "Top right" + STR_POPWIN_BOTTOMLEFT "Bottom left" + STR_POPWIN_BOTTOMRIGHT "Bottom right" + STR_LIST_ACTION_1 "Remote control" + STR_LIST_ACTION_2 "Reboot computer" + STR_LIST_ACTION_3 "Deactivate CapiTel" + STR_LIST_ACTION_4 "Exit CapiTel" + STR_LIST_ACTION_5 "Change callback number" + STR_FDLG_WELCOME "Select Welcome Text" + STR_FDLG_WELCOME_FILT "Welcome text\0*.WAV;*.ALW\0All files (*.*)\0*\0" + STR_FDLG_RINGING "Select Ringing" + STR_FDLG_RINGING_FILT "Wave file\0*.WAV\0All files (*.*)\0*\0" + STR_FDLG_RECORD "Save Welcome Text As" + STR_FDLG_RECORD_FILT "Welcome text\0*.ALW\0All files (*.*)\0*\0" + STR_FDLG_SAVEAS "Save Call As" + STR_FDLG_SAVEAS_FILT "Wave file\0*.WAV\0All files (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Call from %s.wav" + STR_POPTEXT_1 "Incoming call" + STR_POPTEXT_2 "From %s" + STR_POPTEXT_3 "To %s" + STR_ERROR "Error" + STR_WARNING "Warning" + STR_MSG_REGOK "Thanks for your registration!" + STR_MSG_REGFAIL "The registration code entered is invalid.\n\nPlease check whether you have entered your name and the code correctly." + STR_ERR_NONUMBER "Please enter a phone number!" + STR_ERR_NODTMFCODE "Please enter a DTMF code!" + STR_ASK_REALYDELETE "Are you sure you want to delete the selected calls?" + STR_ASK_REALYDELETE2 "You haven't listen in some of the selected calls.\r\rAre you sure you want to delete them anyway?" + STR_ASK_REALYEXIT "Do you wish to end CapiTel?" + STR_ASK_REALYEXIT_CHK "&Do not display this query again" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "About CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel for Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "The authors",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "News and updates",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Call accepting",-1,7,5,196,67 +#ifdef RECOTEL + LTEXT "&Stop recording after",-1,14,23,65,8 + EDITTEXT IDC_SILENCE,81,21,25,13,ES_AUTOHSCROLL + LTEXT "seconds of silence",-1,111,23,80,8 +#else + LTEXT "&Pick up phone after",-1,14,21,65,8 + EDITTEXT IDC_ANSWER_DELAY,81,19,25,13,ES_AUTOHSCROLL + LTEXT "seconds",-1,111,21,80,8 + LTEXT "&Limit record time to",-1,14,37,65,8 + EDITTEXT IDC_RECORD_TIME,81,35,25,13,ES_AUTOHSCROLL + LTEXT "seconds",-1,111,37,75,8 + LTEXT "&Stop recording after",-1,14,53,65,8 + EDITTEXT IDC_SILENCE,81,51,25,13,ES_AUTOHSCROLL + LTEXT "seconds of silence",-1,111,53,80,8 +#endif + GROUPBOX "Display",-1,7,75,196,147 + CONTROL "&Restore minimized window on new calls", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 +#ifdef RECOTEL + CONTROL "Show &only those calls where the caller has left a message to the RecoTel", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 +#else + CONTROL "Show &only those calls where the caller has left a message on the answering machine", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 +#endif +#ifdef RECOTEL + CONTROL "Show also &digital calls (Fax, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,126,180,10 + CONTROL "&Confirm delete of a call from the list", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,140,180,10 + LTEXT "If the main window is minimized and a call comes in, a popup window can be displayed.", + -1,14,180,170,16 + LTEXT "Show popup window:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#else + CONTROL "&If the caller is unknown, display the area indicated by the transmitted area code (works only in Germany)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "Show also &digital calls (Fax, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "&Confirm delete of a call from the list", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "If the main window is minimized and a call comes in, a popup window can be displayed.", + -1,14,180,170,16 + LTEXT "Show popup window:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#endif +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +#ifdef RECOTEL +CAPTION "Answering settings" +#else +CAPTION "Answering Machine" +#endif +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Welcome text",-1,7,5,196,50 + LTEXT "Use the following file as &welcome text:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Browse ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Ring",-1,7,58,196,60 + CONTROL "&Play the following wave as 'ringing phone' on incoming calls:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Browse ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Ports and callers",-1,7,121,196,102 + ICON ID_PORT1,-1,14,134,20,20 +#ifdef RECOTEL + LTEXT "Use the port list to enter your own calling numbers on which RecoTel should react.", +#else + LTEXT "Use the port list to enter your own calling numbers on which the answering machine should react.", +#endif + -1,40,136,157,16 + PUSHBUTTON "Ports ...",IDC_EDIT_PORTS,105,158,90,14 + +#ifndef RECOTEL + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "The Callers list contains peoply with kown phone numbers, so CapiTel can show you their names.", + -1,40,180,157,16 + PUSHBUTTON "Known callers ...",IDC_EDIT_CALLERS,105,202,90,14 +#endif +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Remote Control" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Remote control",-1,7,5,196,97 + CONTROL "Enable &DTMF tone recognition",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Remote control allows you to call your answering machine and hear your messages from anywhere. Additionally, CapiTel can call you automatically when new messages are on the answering machine.", + -1,14,37,180,32 + LTEXT "Automatically call me at the following phone number:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Remote actions",-1,7,105,196,58 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "This list contains actions, which can be activated by entering the corresponding DTMF codes.", + -1,40,119,156,16 + PUSHBUTTON "Remote control actions ...",IDC_EDIT_ACTIONS,95,141, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Other" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Options",-1,7,5,196,32 + CONTROL "Sp&eech data is µLaw coded (only in the USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logging",-1,7,40,196,48 + LTEXT "All calls will be written to the following file:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Ports" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,174,24,50,14 + PUSHBUTTON "&New",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Edit",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Delete",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Port" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Port is enabled",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,63,10 + LTEXT "&Description:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Calling number (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaction:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Leave the following fields empty to use the corresponding default settings for this port.", + -1,14,77,160,16 + LTEXT "Pick &up after",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "seconds",-1,92,103,69,8 + LTEXT "&Limit record to",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "seconds",-1,92,120,69,8 + LTEXT "&Welcome text:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Browse ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&ing:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Browse ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Automatically call me at the following phone number:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Cancel",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +#ifdef RECOTEL +CAPTION "Subscriber Menu" +#else +CAPTION "Known Callers" +#endif +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,206,24,50,14 + PUSHBUTTON "&New",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Edit",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Delete",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Caller" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Entry is enabled",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,66,10 + LTEXT "&Description:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL +#ifndef RECOTEL + LTEXT "Caller's &phone number:",-1,14,42,80,8 +#else + LTEXT "Subscriber's number:",-1,14,42,80,8 +#endif + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaction:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#ifndef RECOTEL + LTEXT "Leave the following fields empty to use the corresponding default settings for this caller.", + -1,14,77,160,16 + LTEXT "Pick &up after",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "seconds",-1,92,103,69,8 + LTEXT "&Limit record to",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "seconds",-1,92,120,69,8 + LTEXT "&Welcome text:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Browse ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&ing:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Browse ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Automatically call me at the following phone number:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL +#endif + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Cancel",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Remote Control Actions" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,174,24,50,14 + PUSHBUTTON "&New",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Edit",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Delete",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Action" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Action is enabled",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,70,10 + LTEXT "&DTMF code:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "When dialing this DTMF code, i want to ...",-1, + 14,47,165,8 + CONTROL "&Remote control the answering machine, hearing or deleting my messages.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "&Enter a new phone number to be called automatically when there are new messages.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "&Turn off the answering machine.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "&Close the answering machine.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "Re&boot the computer.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "&Start an external program:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "Pr&ogram:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Ar&guments:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Cancel",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registration" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Name:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Code:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/FRENCH.RC b/capitel/source.win/FRENCH.RC new file mode 100644 index 0000000..fb0596e --- /dev/null +++ b/capitel/source.win/FRENCH.RC @@ -0,0 +1,526 @@ +/* + * franzoesich +french translation from: "Alain Roset" + */ + +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Général" + BEGIN + MENUITEM "Répondeur &automatique activé\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "&Cache l'écran de contrôle\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "P&ropriétés ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "Q&uitte" , IDM_EXIT + END + POPUP "&Appel" + BEGIN + MENUITEM "L&ecture\tEnter" , IDM_PLAY + MENUITEM "&Efface\tDel" , IDM_DELETE + MENUITEM "&Enregistrer sous ..." , IDM_SAVE_AS + MENUITEM "Ajouter &Nouvel appelant\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Lire tous\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Enregistrer texte de bienvenue\tAlt+R", IDM_RECORD + END + POPUP "&Affichage" + BEGIN + MENUITEM "&Toujours visible" , IDM_TOPMOST + MENUITEM "Lancer &réduit en icône" , IDM_SHOWTRAY + MENUITEM "&Cacher si réduit" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Sélectionner &tout\tCtrle+A" , IDM_SELECTALL + MENUITEM "In&verser la sélection" , IDM_INVERTSEL + END + POPUP "A&ide" + BEGIN + MENUITEM "&Lisez moi" , IDM_README + MENUITEM "&Quoi de neuf?" , IDM_WHATSNEW + MENUITEM "&Licence" , IDM_LICENSE + MENUITEM "&Voir bulletin de commande" , IDM_ORDER + MENUITEM "Voir bulletin de commande BMT &Micro" , IDM_ORDERBMT + MENUITEM "&Page Web sur le Net" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&A propos de CapiTel" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Contexte" + BEGIN + MENUITEM "Lire" , IDM_PLAY + MENUITEM "&Efface\tDel" , IDM_DELETE + MENUITEM "&Enregistrer sous ..." , IDM_SAVE_AS + MENUITEM "Ajouter &Nouvel appelant\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Lire tous\tAlt+P" , IDM_PLAY_ALL + MENUITEM "En®istrer texte de bienvenue\tAlt+R", IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "Répondeur &automatique activé\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "&Cache l'écran de contrôle\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "P&ropriétés ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&A propos de CapiTel" , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "Q&uitte" , IDM_EXIT + END + POPUP "Context2" + BEGIN + MENUITEM "&Nouveau.." , IDM_NEW + MENUITEM "&Editer" , IDM_EDIT + MENUITEM "&Supprimer" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Activer" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Ouvre CapiTel" , IDM_SHOW + MENUITEM "&Lit tous les appels" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "Q&uitte" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Active ou désactive le répondeur automatique." + IDM_HIDEFRAMECONTROLS "Affiche ou cache le menu, barre d'outils et de status." + IDM_PROPERTIES "Ouvre les paramčtres du programme." + IDM_PROP_PORTS "Ouvre une liste avec tous les ports." + IDM_PROP_CALLERS "Ouvre une liste avec tous les appelants connus." + IDM_PROP_ACTIONS "Ouvre une liste avec les contrôles ŕ distance." + IDM_EXIT "Ferme CapiTel." + IDM_PLAY "Lit les appels sélectionnés." + IDM_PLAY_ALL "Lit tous les appels." + IDM_DELETE "Efface les appels sélectionnés." + IDM_SAVE_AS "Enregistrer les appels sélectionnés dans un fichier." + IDM_ADD_TO_CALLERS "Ajoute le numéro de l'appel sélectionné dans la liste des appelants." + IDM_RECORD "Enregistre un nouveau texte de bienvenue." + IDM_README "Ouvre le fichier ReadMe.Txt." + IDM_WHATSNEW "Ouvre le fichier WhatsNew.Txt." + IDM_LICENSE "Ouvre l'accord pour la licence." + IDM_ORDER "Ouvre le formulaire de commande." + IDM_ORDERBMT "Ouvre le formulaire de commande de BMT Micro." + IDM_HOMEPAGE "Ouvre la page Web de CapiTel." + IDM_ABOUT "Voir informations sur le produit." + IDM_SHOW "Ouvre la fenętre principale de CapiTel." + IDM_TOPMOST "Maintient ouverte la fenętre principale de CapiTel." + IDM_SHOWTRAY "Affiche l'icône dans la barre des tâches." + IDM_MINHIDE "Cache la fenętre quand l'affichage est réduit." + IDM_SELECTALL "Sélectionne tous les objets de la fenętre." + IDM_INVERTSEL "Inverse la sélection." + STR_MENUHELP_MAIN1 "Contient les commandes pour modifier le comportement de CapiTel." + STR_MENUHELP_MAIN2 "Contient les commandes pour lire ou effacer vos appels." + STR_MENUHELP_MAIN3 "Contient les commandes pour modifier l'affichage." + STR_MENUHELP_MAIN4 "Contient les commandes pour afficher l'aide." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Version %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s et %s" + STR_ABOUT_UNREG1 "Copie d'évaluation non-enregistrée" + STR_ABOUT_UNREG2 "Veuillez enregistrer CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Enregistré au nom de %s)" + STR_TBAR_UNREG "%s (COPIE D'EVALUATION NON-ENREGISTREE)" + STR_TBAR_FREE "%s (fonctionne en mode freeware Caller-ID)" + STR_TBAR_DEACTIVATED "Répondeur automatique désactivé ..." + STR_TBAR_CONVERTING "En cours de conversion des fichiers waves ..." + STR_TBAR_RECWELCOME "En cours d'enregistrement du texte de bienvenue ..." + STR_LIST_COL1 "Appelant" + STR_LIST_COL2 "Date" + STR_LIST_COL3 "Heure" + STR_LIST_COL4 "Durée" + STR_LIST_COL5 "Destination" + STR_PRT_LIST_COL1 "Description" + STR_PRT_LIST_COL2 "Numéro de l'appelant (MSN)" + STR_CLR_LIST_COL1 "Nom" + STR_CLR_LIST_COL2 "Numéro de l'appelant" + STR_ACT_LIST_COL1 "Code DTMF" + STR_ACT_LIST_COL2 "Action" + STR_REJECTCAUSE_D "Configuration du port" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Occupé" + STR_REJECTCAUSE_2 "Refusé" + STR_REJECTCAUSE_3 "Indisponible" + STR_POPWIN_NONE "Jamais" + STR_POPWIN_TOPLEFT "En haut et ŕ gauche" + STR_POPWIN_TOPRIGHT "En haut et ŕ droite" + STR_POPWIN_BOTTOMLEFT "En bas et ŕ gauche" + STR_POPWIN_BOTTOMRIGHT "En bas et ŕ droite" + STR_LIST_ACTION_1 "Contrôle ŕ distance" + STR_LIST_ACTION_2 "Redémarre l'ordinateur" + STR_LIST_ACTION_3 "Désactive CapiTel" + STR_LIST_ACTION_4 "Quitte CapiTel" + STR_LIST_ACTION_5 "Modifie la numéro de callback" + STR_FDLG_WELCOME "Selectionne le texte de bienvenue" + STR_FDLG_WELCOME_FILT "Textes de bienvenue \0*.WAV;*.ALW\0Tous les fichiers (*.*)\0*\0" + STR_FDLG_RINGING "Selectionne sonnerie d'appel" + STR_FDLG_RINGING_FILT "Fichier wave \0*.WAV\0Tous les fichiers (*.*)\0*\0" + STR_FDLG_RECORD "Sauvegarde le texte de bienvenue" + STR_FDLG_RECORD_FILT "Textes de bienvenue\0*.ALW\0Tous les fichiers (*.*)\0*\0" + STR_FDLG_SAVEAS "Enregistrer l'appel sous ..." + STR_FDLG_SAVEAS_FILT "Fichier wave \0*.WAV\0Tous les fichiers (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Appel de %s.wav" + STR_POPTEXT_1 "Appel entrant" + STR_POPTEXT_2 "De %s" + STR_POPTEXT_3 "Pour %s" + STR_ERROR "Erreur" + STR_WARNING "Avertissement" + STR_MSG_REGOK "Merci pour votre enregistrement!" + STR_MSG_REGFAIL "Le code d'enregistrement n'est pas valide.\n\nMerci de vérifier que le nom et le code que vous avez entrés sont corrects." + STR_ERR_NONUMBER "Veuillez entrer un numéro de téléphone!" + STR_ERR_NODTMFCODE "Veuillez entrer un code DTMF!" + STR_ASK_REALYDELETE "Etes-vous sűr de vouloir effacer l'appel sélectionné?" + STR_ASK_REALYDELETE2 "Certains des appels sélectionnés n'ont pas été écoutés. Voulez-vous vraiment les supprimer?" + STR_ASK_REALYEXIT "Désirez-vous quitter CapiTel?" + STR_ASK_REALYEXIT_CHK "Ne pas réafficher cette requęte" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "A propos de CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel pour Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Les auteurs",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Nouveautés et mises ŕ jour",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 230, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Acceptation de l'appel",-1,7,5,216,67 + LTEXT "&Décroche votre téléphone aprčs",-1,14,21,110,8 + EDITTEXT IDC_ANSWER_DELAY,131,19,25,13,ES_AUTOHSCROLL + LTEXT "secondes",-1,161,21,40,8 + LTEXT "&Limite le temps d'enregistrement ŕ",-1,14,37,110,8 + EDITTEXT IDC_RECORD_TIME,131,35,25,13,ES_AUTOHSCROLL + LTEXT "secondes",-1,161,37,40,8 + LTEXT "&Stoppe l'enregistrement aprčs",-1,14,53,95,8 + EDITTEXT IDC_SILENCE,111,51,25,13,ES_AUTOHSCROLL + LTEXT "secondes de silence",-1,141,53,80,8 + GROUPBOX "Affiche",-1,7,75,216,147 + CONTROL "&Restaure un écran minimisé lors d'un nouvel appel", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,205,10 + CONTROL "Affiche &uniquement les appels engendrants l'enregistrement d'un message", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,205,18 + CONTROL "&Si l'appelant est inconnu, affiche la zone indiquée par le code zonal transmis (fonctionne uniquement en Allemagne)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,205,18 + CONTROL "Affiche également les appels &digitaux (Fax, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,205,10 + CONTROL "&Confirme l'effacement d'un appel de la liste", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,205,10 + LTEXT "Si l'écran principal est minimisé lors d'un appel entrant, un écran contextuel peut ętre affiché.", + -1,14,180,170,16 + LTEXT "Affiche l'écran contextuel:",-1,14,203,95,8 + COMBOBOX IDC_POPUPWIN,120,201,90,90,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 230, 222 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Répondeur automatique" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Texte de bienvenue",-1,7,5,216,50 + LTEXT "Utilise le fichier suivant comme texte de &bienvenue:",-1, + 14,18,200,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,140,13,ES_AUTOHSCROLL + PUSHBUTTON "Parcourir ...",IDC_FILEDLG,160,33,55,14 + GROUPBOX "Sonnerie",-1,7,58,216,52 + CONTROL "&Joue ce fichier wave en tant que sonnerie lors d'un appel:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,200,10 + EDITTEXT IDC_RINGING_WAVE,14,90,140,12,ES_AUTOHSCROLL + PUSHBUTTON "Parcourir ...",IDC_WAVEDLG,160,89,55,14 + GROUPBOX "Ports et appelants",-1,7,113,216,102 + ICON ID_PORT1,-1,14,126,20,20 + LTEXT "Utilisez la liste de ports pour entrer vos propres numéros d'appels sur lesquels le répondeur doit réagir.", + -1,40,128,177,16 + PUSHBUTTON "Ports ...",IDC_EDIT_PORTS,125,150,90,14 + ICON ID_CALLER1,-1,14,170,20,20 + LTEXT "La liste d'appelants contient des personnes avec des numéros connus. CapiTel peut vous montrer leurs noms.", + -1,40,172,177,16 + PUSHBUTTON "Appelants connus ...",IDC_EDIT_CALLERS,125,194,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 230, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Commande ŕ distance" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Contrôle ŕ distance",-1,7,5,216,97 + CONTROL "Active la reconnaissance &DTMF (tone)",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,169,10 + LTEXT "Le contrôle ŕ distance vous permet d'appeler votre répondeur automatique et d'écouter vos messages ŕ distance. Capitel peut également vous appeler lorsque de nouveaux messages sont enregistrés.", + -1,14,37,200,32 + LTEXT "R&appeler automatiquement au numéro suivant:", + -1,14,77,100,16 + EDITTEXT IDC_FORWARD,120,81,95,13,ES_AUTOHSCROLL + GROUPBOX "Commandes ŕ distance",-1,7,105,216,58 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "Cette liste contient les commandes que l'on peut activer en utilisant le code DTMF correspondant.", + -1,40,119,176,16 + PUSHBUTTON "Commandes ŕ distance ...",IDC_EDIT_ACTIONS,115,141, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 230, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Autres" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Options",-1,7,5,216,32 + CONTROL "Données parlé&es sont codées µLaw (uniquement USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,200,10 + GROUPBOX "Jounal des connections",-1,7,40,216,48 + LTEXT "Tous les appels vont ętre écrits dans le fichier suivant:", + -1,14,52,200,8 + EDITTEXT IDC_LOGFILE,14,67,200,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Ports" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Abandonner",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nouveau",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Edite",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Supprime",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Port" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Port activé",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,50,10 + LTEXT "&Description:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Numéro appelant (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Réaction:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Laissez les champs suivants vides afin d'utiliser les paramčtres par défaut de ce port.", + -1,14,77,160,16 + LTEXT "Décroche &aprčs",-1,14,103,77,8 + EDITTEXT IDC_DELAY,93,101,25,13,ES_AUTOHSCROLL + LTEXT "secondes",-1,122,103,69,8 + LTEXT "&Limite l'enregistrement ŕ",-1,14,120,77,8 + EDITTEXT IDC_MAXTIME,93,118,25,13,ES_AUTOHSCROLL + LTEXT "secondes",-1,122,120,69,8 + LTEXT "&Texte de bienvenue:",-1,14,137,66,8 + EDITTEXT IDC_FILENAME,82,135,90,13,ES_AUTOHSCROLL + PUSHBUTTON "Parcourir ...",IDC_FILEDLG,178,134,45,14 + LTEXT "Sonner&ie:",-1,14,154,66,8 + EDITTEXT IDC_WAVENAME,82,152,90,13,ES_AUTOHSCROLL + PUSHBUTTON "Parcourir ...",IDC_WAVEDLG,178,152,45,14 + LTEXT "R&appeler automatiquement au numéro suivant:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Abandonner",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Appelants connus" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Abandonner",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Nouveau",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Edite",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Supprime",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Appelants" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Entrée activée",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,62,10 + LTEXT "&Description:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Numéro de téléphone de l'a&ppelant:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Réaction:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Laissez les champs suivants vides afin d'utiliser les paramčtres par défauts de ce appelant.", + -1,14,77,160,16 + LTEXT "Décrochez &aprčs",-1,14,103,77,8 + EDITTEXT IDC_DELAY,93,101,25,13,ES_AUTOHSCROLL + LTEXT "secondes",-1,122,103,69,8 + LTEXT "&Limite l'enregistrement ŕ",-1,14,120,77,8 + EDITTEXT IDC_MAXTIME,93,118,25,13,ES_AUTOHSCROLL + LTEXT "secondes",-1,122,120,69,8 + LTEXT "&Texte de bienvenue:",-1,14,137,66,8 + EDITTEXT IDC_FILENAME,82,135,90,13,ES_AUTOHSCROLL + PUSHBUTTON "Parcourir ...",IDC_FILEDLG,178,134,45,14 + LTEXT "Sonner&ie:",-1,14,154,66,8 + EDITTEXT IDC_WAVENAME,82,152,90,13,ES_AUTOHSCROLL + PUSHBUTTON "Parcourir ...",IDC_WAVEDLG,178,152,45,14 + LTEXT "Ra&ppeler automatiquement au numéro suivant:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Abandonner",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Actions du contrôle ŕ distance" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Abandonner",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nouveau",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Edite",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Supprime",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Action" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Action activée",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,61,10 + LTEXT "Code &DTMF :",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Quand je compose ce code DTMF, je veux que ...",-1, + 14,47,165,8 + CONTROL "&Contrôle ŕ distance du répondeur, écoute ou supprime les messages.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,170,18 + CONTROL "&Entrez un nouveau numéro de téléphone pour l'appel automatique lors de nouveaux messages.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,170,18 + CONTROL "&Désactive le répondeur automatique.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,170,10 + CONTROL "&Ferme le répondeur automatique.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,170,10 + CONTROL "Re&boot l'ordinateur.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,170,10 + CONTROL "&Démarre un programme externe:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,170,10 + LTEXT "Pr&ogramme:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Ar&guments:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Abandonner",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Enregistrement" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Nom:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Code:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Abandonner",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/Finnish.rc b/capitel/source.win/Finnish.rc new file mode 100644 index 0000000..c3aa7f5 --- /dev/null +++ b/capitel/source.win/Finnish.rc @@ -0,0 +1,529 @@ + +/* +fin +fin translation from: "Jaakko Järviluoma" +*/ + +LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Yleistä" + BEGIN + MENUITEM "&Aktivoi vastaaja\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "P&iilota valikot\tAlt+I" , IDM_HIDEFRAMECONTROLS + MENUITEM "A&setukset ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "P&oistu" , IDM_EXIT + END + POPUP "&Puhelu" + BEGIN + MENUITEM "&Kuuntele\tEnter" , IDM_PLAY + MENUITEM "P&oista\tDel" , IDM_DELETE + MENUITEM "&Tallenna nimellä ..." , IDM_SAVE_AS + MENUITEM "Lisää &Soittajiin\tAlt+S" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "K&uuntele Kaikki\tAlt+U" , IDM_PLAY_ALL + MENUITEM "&Äänitä (soita itse)\tAlt+Ä" , IDM_RECORD + END + POPUP "&Ikkuna" + BEGIN + MENUITEM "&Aina päällimmäisenä" , IDM_TOPMOST + MENUITEM "&Näytä tehtäväpalkissa" , IDM_SHOWTRAY + MENUITEM "&Piilota pienennettäessä" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Valitse K&aikki\tCtrl+A" , IDM_SELECTALL + MENUITEM "K&äänteinen Valinta" , IDM_INVERTSEL + END + POPUP "&Apua" + BEGIN + MENUITEM "&Esittely" , IDM_README + MENUITEM "&Mitä uutta?" , IDM_WHATSNEW + MENUITEM "&Lisenssi" , IDM_LICENSE + MENUITEM "&Tilauslomake" , IDM_ORDER + MENUITEM "&BMT Micro-Tilauslomake" , IDM_ORDERBMT + MENUITEM "&Kotisivu Internetissä" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "Tietoja &CapiTel:sta" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context_1" + BEGIN + MENUITEM "Kuuntele" , IDM_PLAY + MENUITEM "P&oista\tDel" , IDM_DELETE + MENUITEM "&Tallenna nimellä ..." , IDM_SAVE_AS + MENUITEM "Lisää &Soittajiin\tAlt+S" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&K&uuntele Kaikki\tAlt+U" , IDM_PLAY_ALL + MENUITEM "&Äänitä (soita itse)\tAlt+Ä" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "&Aktivoi vastaaja\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "P&iilota valikot\tAlt+I" , IDM_HIDEFRAMECONTROLS + MENUITEM "As&etukset ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "Ti&etoja CapiTel:sta" , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "&Lopeta" , IDM_EXIT + END + POPUP "Context_2" + BEGIN + MENUITEM "&Uusi.." , IDM_NEW + MENUITEM "&Muokkaa" , IDM_EDIT + MENUITEM "&Poista" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Aktivoi" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Näytä CapiTel" , IDM_SHOW + MENUITEM "&Kuuntele Kaikki" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "&Lopeta" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Vastaajatoiminto päälle tai pois päältä." + IDM_HIDEFRAMECONTROLS "Näyttää tai piilottaa valikot." + IDM_PROPERTIES "Avaa Asetukset-ikkunan." + IDM_PROP_PORTS "Avaa Porttiasetukset-ikkunan." + IDM_PROP_CALLERS "Avaa Soittajat-tietokannan." + IDM_PROP_ACTIONS "Avaa Kauko-ohjausasetukset -ikkunan." + IDM_EXIT "Lopettaa CapiTel:n (sulkee ohjelman)." + IDM_PLAY "Kuuntele valittu viesti." + IDM_PLAY_ALL "Kuuntele kaikki viestit." + IDM_DELETE "Poistaa valitun viestin." + IDM_SAVE_AS "Tallentaa valitun viestin äänitiedostoksi." + IDM_ADD_TO_CALLERS "Lisää valitun soittajan numeron tietokantaan." + IDM_RECORD "Äänitä oma vastaajaviesti." + IDM_README "Avaa ReadMe.Txt -tiedoston." + IDM_WHATSNEW "Avaa WhatsNew.Txt -tiedoston." + IDM_LICENSE "Avaa License Agreement -tiedot." + IDM_ORDER "Avaa Tilauslomake." + IDM_ORDERBMT "Avaa BMT Micro -Tilauslomake." + IDM_HOMEPAGE "Avaa CapiTel-Kotisivun." + IDM_ABOUT "Näytä Tietoja ohjelmasta." + IDM_SHOW "Aktivoi CapiTel:n pääikkunan." + IDM_TOPMOST "CapiTel pysyy päällimmäisenä, paitsi pienennettynä." + IDM_SHOWTRAY "Näyttää tilakuvakkeen tehtäväpalkissa." + IDM_MINHIDE "Piilota CapiTel pienennettynä." + IDM_SELECTALL "Valitsee kaikki ikkunan kohteet." + IDM_INVERTSEL "Valitsee ne objektit, joita ei ole valittu, ja poistaa valinnan niiltä objekteilta, jotka on jo valittu." + + STR_MENUHELP_MAIN1 "CapiTel:n asetuksiin liittyvät toiminnot." + STR_MENUHELP_MAIN2 "Puheluihin liittyvät toiminnot." + STR_MENUHELP_MAIN3 "Ikkunan toiminnot." + STR_MENUHELP_MAIN4 "Ohjetiedostoihin liittyvät toiminnot." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Versio %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s ja %s" + STR_ABOUT_UNREG1 "Rekisteröimätön kokeiluversio" + STR_ABOUT_UNREG2 "Ole hyvä ja rekisteröi CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Rekisteröity nimelle %s)" + STR_TBAR_UNREG "%s (REKISTERÖIMÄTÖN KOKEILUVERSIO)" + STR_TBAR_FREE "%s (toimii Caller-ID ilmaisohjelmana)" + STR_TBAR_DEACTIVATED "Puhelinvastaaja pois päältä ..." + STR_TBAR_CONVERTING "Muunnetaan wave-tiedostoja ..." + STR_TBAR_RECWELCOME "Äänitetään vastaajaviestiä ..." + STR_LIST_COL1 "Soittaja" + STR_LIST_COL2 "Päivä" + STR_LIST_COL3 "Aika" + STR_LIST_COL4 "Kesto" + STR_LIST_COL5 "Kohde" + STR_PRT_LIST_COL1 "Kuvaus" + STR_PRT_LIST_COL2 "Oma puh.numero (MSN)" + STR_CLR_LIST_COL1 "Nimi" + STR_CLR_LIST_COL2 "Soittajan numero" + STR_ACT_LIST_COL1 "DTMF-koodi" + STR_ACT_LIST_COL2 "Tehtävä" + STR_REJECTCAUSE_D "Porttiasetukset" + STR_REJECTCAUSE_0 "Normaali" + STR_REJECTCAUSE_1 "Varattu" + STR_REJECTCAUSE_2 "Torju" + STR_REJECTCAUSE_3 "Tavoittamattomissa" + STR_POPWIN_NONE "Ei koskaan" + STR_POPWIN_TOPLEFT "Ylävasemmalla" + STR_POPWIN_TOPRIGHT "Yläoikealla" + STR_POPWIN_BOTTOMLEFT "Alavasemmalla" + STR_POPWIN_BOTTOMRIGHT "Alaoikealla" + STR_LIST_ACTION_1 "Kauko-ohjaus" + STR_LIST_ACTION_2 "Boottaa tietokone" + STR_LIST_ACTION_3 "CapiTel pois päältä" + STR_LIST_ACTION_4 "Sulje CapiTel" + STR_LIST_ACTION_5 "Muuta takaisinsoittonumero" + STR_FDLG_WELCOME "Valitse Vastaajaviesti" + STR_FDLG_WELCOME_FILT "Vastaajaviesti\0*.WAV;*.ALW\0All files (*.*)\0*\0" + STR_FDLG_RINGING "Valitse soittoääni" + STR_FDLG_RINGING_FILT "Wave-tiedosto\0*.WAV\0All files (*.*)\0*\0" + STR_FDLG_RECORD "Tallenna Vastaajaviesti Nimellä" + STR_FDLG_RECORD_FILT "Vastaajaviesti\0*.ALW\0All files (*.*)\0*\0" + STR_FDLG_SAVEAS "Tallenna viesti nimellä" + STR_FDLG_SAVEAS_FILT "Wave-tiedosto\0*.WAV\0All files (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Soittaja %s.wav" + STR_POPTEXT_1 "Saapuva puhelu" + STR_POPTEXT_2 "Soittaja %s" + STR_POPTEXT_3 "Kohteeseen %s" + STR_ERROR "Virhe" + STR_WARNING "Varoitus" + STR_MSG_REGOK "Kiitos rekisteröinnistä!" + STR_MSG_REGFAIL "Rekisteröintikoodi on virheellinen.\n\nTarkista että kirjoitit nimesi ja koodin oikein." + STR_ERR_NONUMBER "Kirjoita puhelinnumero!" + STR_ERR_NODTMFCODE "Kirjoita DTMF-koodi!" + STR_ASK_REALYDELETE "Oletko varma että haluat poistaa valitun puhelun?" + STR_ASK_REALYDELETE2 "Et ole kuunnellut kaikkia valittuja viestejä. Haluatko varmasti poistaa ne siitä huolimatta?" + STR_ASK_REALYEXIT "Suljetaanko CapiTel?" + STR_ASK_REALYEXIT_CHK "Älä näytä tätä kyselyä enää" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Tietoja CapiTel:sta" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel for Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Tekijät",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Uutisia ja päivityksiä",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Yleistä" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Puhelun hyväksyminen",-1,7,5,196,67 + LTEXT "&Vastaa kun kulunut",-1,14,21,70,8 + EDITTEXT IDC_ANSWER_DELAY,86,19,25,13,ES_AUTOHSCROLL + LTEXT "sekuntia",-1,116,21,80,8 + LTEXT "&Rajoita viestin pituus",-1,14,37,70,8 + EDITTEXT IDC_RECORD_TIME,86,35,25,13,ES_AUTOHSCROLL + LTEXT "sekuntiin",-1,116,37,75,8 + LTEXT "&Lopeta nauhoitus, kun",-1,14,53,70,8 + EDITTEXT IDC_SILENCE,86,51,25,13,ES_AUTOHSCROLL + LTEXT "sekuntia hiljaista",-1,116,53,80,8 + GROUPBOX "Näyttö",-1,7,75,196,147 + CONTROL "&Palauta pienennetty ikkuna puhelun tullessa", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 + CONTROL "&Näytä vain puhelut, joissa soittaja on jättänyt viestin vastaajaan", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 + CONTROL "&Jos soittaja on tuntematon, näytä soittajan suunta, suuntanumeron perusteella (toimii vain Saksassa)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "Näytä myös &digitaalipuhelut (Fax, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "V&ahvista puhelun poisto listalta", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "Jos pääikkuna on pienennettynä puhelun tullessa, voidaan näyttää popup-ikkuna.", + -1,14,180,170,16 + LTEXT "Näytä popup-ikkuna:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 238 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Puhelinvastaaja" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Vastaajaviesti",-1,7,5,196,50 + LTEXT "Käytä seuraavaa tiedostoa &vastaajaviestinä:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Näytä ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Soittoääni",-1,7,58,196,60 + CONTROL "Käytä seuraavaa tiedostoa &soittoäänenä, kun puhelu tulee:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Näytä ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Portit ja soittajat",-1,7,121,196,110 + ICON ID_PORT1,-1,14,134,20,20 + LTEXT "Lisää Porttilistaan omat puhelinnumerosi, joihin tuleviin soittoihin haluat ohjelman reagoivan.", + -1,40,136,157,16 + PUSHBUTTON "Portit ...",IDC_EDIT_PORTS,105,158,90,14 + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "Lisää Soittajat-listaan tuntemiesi soittajien tiedot, jotta CapiTel pystyy näyttämään sinulle soittajan nimen.", + -1,40,180,157,24 + PUSHBUTTON "Soittajat ...",IDC_EDIT_CALLERS,105,210,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 178 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kauko-ohjaus" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Kauko-ohjaus",-1,7,5,196,97 + CONTROL "Salli &DTMF-äänitaajuustunnistus",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Kauko-ohjauksen avulla voit soittaa omaan vastaajaasi ja kuunnella siihen jätetyt viestit mistä tahansa. Lisäksi, CapiTel voi soittaa sinulle automaattisesti, kun vastaajaan tulee uusi viesti.", + -1,14,37,180,32 + LTEXT "Uuden viestin tullessa, soita automaattisesti numeroon:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Kauko-ohjaustoiminnot",-1,7,105,196,66 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "Tämä lista sisältää toiminnot, jotka voidaan aktivoida näppäilemällä vastaavat DTMF (äänitaajuus) -koodit.", + -1,40,119,156,24 + PUSHBUTTON "Kauko-ohjaustoiminnot ...",IDC_EDIT_ACTIONS,95,149, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Muut" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Asetukset",-1,7,5,196,32 + CONTROL "&Puhe on µLaw koodattu (vain USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Loki",-1,7,40,196,48 + LTEXT "Kaikki soitot kirjataan seuraavaan tiedostoon:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Portit" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Peruuta",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Uusi",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Muokkaa",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Poista",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Portti" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Portti käytössä",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,62,10 + LTEXT "&Kuvaus:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Oma puh. numero (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "Rea&gointi:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Jätä seuraavat kentät tyhjiksi jos haluat käyttää vastaavia oletusasetuksia tässä portissa.", + -1,14,77,160,16 + LTEXT "&Vastaa kun kulunut",-1,14,103,67,8 + EDITTEXT IDC_DELAY,84,101,25,13,ES_AUTOHSCROLL + LTEXT "sekuntia",-1,112,103,69,8 + LTEXT "&Rajoita viestin pituus",-1,14,120,67,8 + EDITTEXT IDC_MAXTIME,84,118,25,13,ES_AUTOHSCROLL + LTEXT "sekuntiin",-1,112,120,69,8 + LTEXT "V&astaajaviesti:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Näytä ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Soittoääni:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Näytä ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Uuden viestin tullessa, soita automaattisesti numeroon:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Peruuta",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Soittajat" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Peruuta",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Uusi",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Muokkaa",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Poista",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Soittaja" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Käytä näitä asetuksia",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,83,10 + LTEXT "&Nimi:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Soittajan &puhelinnumero:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "Rea&gointi:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Jätä seuraavat kentät tyhjiksi jos haluat käyttää vastaavia oletusasetuksia tälle soittajalle.", + -1,14,77,160,16 + LTEXT "&Vastaa kun kulunut",-1,14,103,67,8 + EDITTEXT IDC_DELAY,84,101,25,13,ES_AUTOHSCROLL + LTEXT "sekuntia",-1,112,103,69,8 + LTEXT "&Rajoita viestin pituus",-1,14,120,67,8 + EDITTEXT IDC_MAXTIME,84,118,25,13,ES_AUTOHSCROLL + LTEXT "sekuntiin",-1,112,120,69,8 + LTEXT "V&astaajaviesti:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Näytä ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Soittoääni:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Näytä ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Uuden viestin tullessa, soita automaattisesti numeroon:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Peruuta",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Kauko-ohjaustoiminnot" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Peruuta",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Uusi",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Muokkaa",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Poista",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Toiminnot" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Toiminto käytössä",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,73,10 + LTEXT "&DTMF-koodi:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Kun näppäilen tämän DTMF-koodin, haluan ...",-1, + 14,47,165,8 + CONTROL "&Kauko-ohjata vastaajaa soittamaan tai poistamaan viestejä.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "&Lisätä uuden numeron, jonne vastaaja soittaa minulle uuden viestin tullessa.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "K&ytkeä vastaajan pois päältä.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "&Sulkea CapiTel:n.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "&Käynnistää tietokoneen uudelleen.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "K&äynnistää jonkin toisen ohjelman:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "&Ohjelma:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "&Parametrit:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Peruuta",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Rekisteröinti" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Nimi:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Koodi:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Peruuta",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END + diff --git a/capitel/source.win/GERMAN.RC b/capitel/source.win/GERMAN.RC new file mode 100644 index 0000000..c5bb449 --- /dev/null +++ b/capitel/source.win/GERMAN.RC @@ -0,0 +1,579 @@ +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "A&llgemein" + BEGIN +#ifdef RECOTEL + MENUITEM "&RecoTel aktiv\tAlt+A", IDM_TOGGLEACTIVATION +#else + MENUITEM "&Anrufbeantworter aktiv\tAlt+A", IDM_TOGGLEACTIVATION +#endif + MENUITEM "&Fensterelemente verstecken\tAlt+C", IDM_HIDEFRAMECONTROLS + MENUITEM "Ein&stellungen ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Beenden" , IDM_EXIT + END + POPUP "Ru&f" + BEGIN + MENUITEM "&Abspielen\tEnter" , IDM_PLAY + MENUITEM "&Löschen\tDel" , IDM_DELETE + MENUITEM "&Speichern als ..." , IDM_SAVE_AS + MENUITEM "Als Anrufer &hinzufügen\tAlt+N", IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Alle abs&pielen\tAlt+P" , IDM_PLAY_ALL + MENUITEM "Ansage&text aufnehmen" , IDM_RECORD + END + POPUP "&Ansicht" + BEGIN + MENUITEM "&Immer im Vordergrund" , IDM_TOPMOST + MENUITEM "&Zustand in Task-Leiste anzeigen", IDM_SHOWTRAY + MENUITEM "&Ausblenden, wenn minimiert" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Alles &markieren\tStrg+A" , IDM_SELECTALL + MENUITEM "Markierung &umkehren" , IDM_INVERTSEL + END + POPUP "&Hilfe" + BEGIN + MENUITEM "L&ies mich" , IDM_README +#ifndef RECOTEL + MENUITEM "&Was ist neu?" , IDM_WHATSNEW +#endif + MENUITEM "&Lizenz-Vertrag" , IDM_LICENSE +#ifndef RECOTEL + MENUITEM "&Bestell-Info" , IDM_ORDER + MENUITEM "Bestell-Info BMT &Micro" , IDM_ORDERBMT + MENUITEM "&Homepage im Web" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Info" , IDM_ABOUT +#endif + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context" + BEGIN + MENUITEM "Abspielen" , IDM_PLAY + MENUITEM "&Löschen\tDel" , IDM_DELETE + MENUITEM "&Speichern als ..." , IDM_SAVE_AS + MENUITEM "Als Anrufer &hinzufügen\tAlt+N", IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Alle abs&pielen\tAlt+P" , IDM_PLAY_ALL + MENUITEM "Ansage&text aufnehmen" , IDM_RECORD + MENUITEM SEPARATOR +#ifdef RECOTEL + MENUITEM "&RecoTel aktiv\tAlt+A", IDM_TOGGLEACTIVATION +#else + MENUITEM "&Anrufbeantworter aktiv\tAlt+A", IDM_TOGGLEACTIVATION +#endif + MENUITEM "&Fensterelemente verstecken\tAlt+C", IDM_HIDEFRAMECONTROLS + MENUITEM "Ein&stellungen ..." , IDM_PROPERTIES +#ifndef RECOTEL + MENUITEM SEPARATOR + MENUITEM "&Info" , IDM_ABOUT +#endif + MENUITEM SEPARATOR + MENUITEM "&Beenden" , IDM_EXIT + END + POPUP "Context2" + BEGIN + MENUITEM "&Neu.." , IDM_NEW + MENUITEM "&Bearbeiten" , IDM_EDIT + MENUITEM "&Löschen" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Aktiv" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&CapiTel anzeigen" , IDM_SHOW + MENUITEM "&Alle Rufe abspielen" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "&Beenden" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN +#ifdef RECOTEL + IDM_TOGGLEACTIVATION "Anrufbeantworter aktivieren oder deaktivieren." +#else + IDM_TOGGLEACTIVATION "Anrufbeantworter aktivieren oder deaktivieren." +#endif + IDM_HIDEFRAMECONTROLS "Menu-, Symbol- und Statusleiste ein- oder ausblenden." + IDM_PROPERTIES "Öffnet einen Dialog mit den Einstellungen des Programms." + IDM_PROP_PORTS "Öffnet eine Liste mit allen Ports." + IDM_PROP_CALLERS "Öffnet eine Liste mit allen bekannten Annrufern." + IDM_PROP_ACTIONS "Öffnet eine Liste mit Fernsteuerungs-Aktionen." + IDM_EXIT "Beendet das Programm." + IDM_PLAY "Spielt den ausgewählten Anruf ab." + IDM_PLAY_ALL "Spielt alle Anrufe ab." + IDM_DELETE "Löscht den ausgewählten Anruf." + IDM_SAVE_AS "Speichert den ausgewählten Anruf als Klangdatei." + IDM_ADD_TO_CALLERS "Fügt den den ausgewählten Anruf der Anrufer-Liste hinzu." + IDM_RECORD "Zeichnet einen neuen Ansagetext per Sebstanruf auf." + IDM_README "Zeigt die Datei LiesMich.Txt an." + IDM_WHATSNEW "Zeigt die Datei WhatsNew.Txt an." + IDM_LICENSE "Zeigt den Lizenz-Vertrag an." + IDM_ORDER "Zeigt das Bestell-Formular an." + IDM_ORDERBMT "Zeigt das Bestell-Formular für BMT-Micro an." + IDM_HOMEPAGE "Öffnet die CapiTel-Homepage." + IDM_ABOUT "Zeigt Produktinformationen an." + IDM_SHOW "Zeigt das Hauptfenster von CapiTel an." + IDM_TOPMOST "Bewirkt das CapiTel liegt vor allen anderen Fenstern liegt." + IDM_SHOWTRAY "Zeigt ein Status-Symbol in der Taskleiste an." + IDM_MINHIDE "Verbirgt das CapiTel-Fenster, wenn es minimiert wird." + IDM_SELECTALL "Wählt alle Objekte im Fenster aus." + IDM_INVERTSEL "Kehrt die Auswahl um." + STR_MENUHELP_MAIN1 "Enthält allgemeine Optionen." + STR_MENUHELP_MAIN2 "Enthält Befehle zum Abspielen und Löschen der Anrufe." + STR_MENUHELP_MAIN3 "Enthält Befehle zum Ändern der Anzeige." + STR_MENUHELP_MAIN4 "Enthält Befehle zum Anzeigen von Hilfe." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Version %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s und %s" + STR_ABOUT_UNREG1 "Unregistrierte Testversion" + STR_ABOUT_UNREG2 "Bitte registrieren Sie CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Registriert für %s)" + STR_TBAR_UNREG "%s (UNREGISTRIERTE TESTVERSION)" + STR_TBAR_FREE "%s (läuft als Freeware Caller-ID)" +#ifdef RECOTEL + STR_TBAR_DEACTIVATED "RecoTel deaktiviert ..." +#else + STR_TBAR_DEACTIVATED "Anrufbeantworter deaktiviert ..." +#endif + STR_TBAR_CONVERTING "Klangdateien werden konvertiert ..." + STR_TBAR_RECWELCOME "Ansagetext wird aufgenommen ..." + STR_LIST_COL1 "Anrufer" + STR_LIST_COL2 "Datum" + STR_LIST_COL3 "Uhrzeit" + STR_LIST_COL4 "Sek." + STR_LIST_COL5 "Ziel" + STR_PRT_LIST_COL1 "Beschreibung" + STR_PRT_LIST_COL2 "Rufnummer (MSN)" + STR_CLR_LIST_COL1 "Name" + STR_CLR_LIST_COL2 "Rufnummer" + STR_ACT_LIST_COL1 "DTMF-Folge" + STR_ACT_LIST_COL2 "Aktion" + STR_REJECTCAUSE_D "Port-Einstellung" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Besetzt" + STR_REJECTCAUSE_2 "Ablehnen" + STR_REJECTCAUSE_3 "Unerreichbar" + STR_POPWIN_NONE "Gar nicht" + STR_POPWIN_TOPLEFT "Links oben" + STR_POPWIN_TOPRIGHT "Rechts oben" + STR_POPWIN_BOTTOMLEFT "Links unten" + STR_POPWIN_BOTTOMRIGHT "Rechts unten" + STR_LIST_ACTION_1 "Fernabfrage" + STR_LIST_ACTION_2 "Computer neu starten" + STR_LIST_ACTION_3 "CapiTel abschalten" + STR_LIST_ACTION_4 "CapiTel beenden" + STR_LIST_ACTION_5 "Weiterleitung ändern" + STR_FDLG_WELCOME "Ansagetext auswählen" + STR_FDLG_WELCOME_FILT "Ansagetext\0*.WAV;*.ALW\0Alle Dateien (*.*)\0*\0" + STR_FDLG_RINGING "Klingeln auswählen" + STR_FDLG_RINGING_FILT "Klangdatei\0*.WAV\0Alle Dateien (*.*)\0*\0" + STR_FDLG_RECORD "Ansagetext speichern als" + STR_FDLG_RECORD_FILT "Ansagetext\0*.ALW\0Alle Dateien (*.*)\0*\0" + STR_FDLG_SAVEAS "Anruf speichern unter" + STR_FDLG_SAVEAS_FILT "Klangdatei\0*.WAV\0Alle Dateien (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Anruf von %s.wav" + STR_POPTEXT_1 "Anruf" + STR_POPTEXT_2 "Von %s" + STR_POPTEXT_3 "An %s" + STR_ERROR "Fehler" + STR_WARNING "Warnung" + STR_MSG_REGOK "Vielen Dank für ihre Registrierung!" + STR_MSG_REGFAIL "Die eingegebene Registrierungsnummer ist ungültig.\n\nBitte prüfen Sie, ob Sie Ihren Namen korrekt geschrieben haben und die Registrierungsnummer richtig eingegeben haben." + STR_ERR_NONUMBER "Bitte geben Sie eine Rufnummer ein!" + STR_ERR_NODTMFCODE "Bitte geben Sie eine DTMF-Folge ein!" + STR_ASK_REALYDELETE "Möchten Sie die ausgewählten Rufe wirklich löschen?" + STR_ASK_REALYDELETE2 "Sie haben einige der ausgewählten Rufe noch nicht abgehört.\r\rMöchten Sie diese dennoch löschen?" + STR_ASK_REALYEXIT "Möchten Sie CapiTel beenden?" + STR_ASK_REALYEXIT_CHK "&Diese Abfrage nicht mehr anzeigen" + STR_HELP_README "liesmich.txt" + STR_HELP_ORDER "bestell.txt" + STR_HELP_ORDERBMT "bestbmt.txt" + STR_HELP_LICENSE "lizenz.txt" + STR_HELP_WHATSNEW "neues.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Über CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel für Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Die Autoren",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Neues und Updates",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Rufannahme",-1,7,5,196,67 +#ifdef RECOTEL + LTEXT "&Nach",-1,14,23,20,8 + EDITTEXT IDC_SILENCE,36,21,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden Stille Aufnahme abbrechen",-1,65,23,125,8 +#else + LTEXT "&Telefonanrufe nach",-1,14,21,65,8 + EDITTEXT IDC_ANSWER_DELAY,81,19,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden annehmen",-1,111,21,80,8 + LTEXT "&Aufnahmedauer auf",-1,14,37,65,8 + EDITTEXT IDC_RECORD_TIME,81,35,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden begrenzen",-1,111,37,75,8 + LTEXT "&Nach",-1,14,53,20,8 + EDITTEXT IDC_SILENCE,36,51,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden Stille Aufnahme abbrechen",-1,65,53,125,8 +#endif + GROUPBOX "Anzeige",-1,7,75,196,147 + CONTROL "&Verstecktes Fenster bei neuen Anrufen aktivieren", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 +#ifdef RECOTEL + CONTROL "N&ur die Anrufe anzeigen, bei denen eine Nachricht auf RecoTel hinterlassen wurde", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 +#else + CONTROL "N&ur die Anrufe anzeigen, bei denen eine Nachricht auf dem Anrufbeantworter hinterlassen wurde", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 +#endif +#ifdef RECOTEL + CONTROL "Auch &Digitale Anrufe (Daten, Fax) anzeigen", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,126,180,10 + CONTROL "&Löschen von Anrufen aus der Liste bestätigen", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,140,180,10 + LTEXT "Wenn das Hauptfenster versteckt ist und ein Ruf ankommt, kann ein Info-Fenster angezeigt werden.", + -1,14,180,170,16 + LTEXT "Info-Fenster anzeigen:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#else + CONTROL "&Bei unbekannten Anrufern das Ortsnetz anzeigen, aus dem der Ruf kommt (nur innerhalb Deutschlands)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "Auch &Digitale Anrufe (Daten, Fax) anzeigen", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "&Löschen von Anrufen aus der Liste bestätigen", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "Wenn das Hauptfenster versteckt ist und ein Ruf ankommt, kann ein Info-Fenster angezeigt werden.", + -1,14,180,170,16 + LTEXT "Info-Fenster anzeigen:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#endif +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +#ifdef RECOTEL +CAPTION "Anrufbeantworter" +#else +CAPTION "Anrufbeantworter" +#endif +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Ansagetext",-1,7,5,196,50 + LTEXT "Die folgende Klang-Datei als Ansagetext verwenden:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Durchsuchen",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Klingel",-1,7,58,196,60 + CONTROL "Bei Anrufen folgende Klang-Datei als Telefon- klingeln abspielen:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Durchsuchen",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Ports und Anrufer",-1,7,121,196,102 + ICON ID_PORT1,-1,14,134,20,20 +#ifdef RECOTEL + LTEXT "Geben Sie in der Port-Liste die Rufnummern (MSNs) ein, auf die RecoTel reagieren soll.", +#else + LTEXT "Geben Sie in der Port-Liste die Rufnummern (MSNs) ein, auf die CapiTel reagieren soll.", +#endif + -1,40,136,157,16 + PUSHBUTTON "Ports ...",IDC_EDIT_PORTS,105,158,90,14 + +#ifndef RECOTEL + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "Tragen Sie in der Anrufer-Liste die Rufnummern und Namen von bekannten Anrufern ein.", + -1,40,180,157,16 + PUSHBUTTON "Bekannte Anrufer ...",IDC_EDIT_CALLERS,105,202,90,14 +#endif +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 178 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Fernabfrage" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Fernabfrage",-1,7,5,196,97 + CONTROL "DTMF-Ton Erkennung aktivieren",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Über Fernabfrage können Sie Ihren Anrufbeantworter anrufen, um neue Rufe abzuhören. Zusätzlich kann Ihr Anrufbeantworter Sie automatisch anrufen, wenn neue Nachrichten vorliegen.", + -1,14,37,180,32 + LTEXT "Folgende Rufnummer automatisch benachrichtigen:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Fernsteuerung",-1,7,105,196,66 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "In dieser Liste können Sie Aktionen definieren, die Sie ferngesteuert über DTMF-Töne auslösen können.", + -1,40,119,156,24 + PUSHBUTTON "Fernsteuerungs-Aktionen ...",IDC_EDIT_ACTIONS,95,149, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Sonstiges" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Optionen",-1,7,5,196,32 + CONTROL "&Sprachdaten sind µLaw-codiert (nur in den USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logging",-1,7,40,196,48 + LTEXT "Alle Anrufe werden in der folgenden Datei mitprotokolliert:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Ports" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Neu",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Bearbeiten",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Löschen",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Port" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "Port ist aktiviert",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,64,10 + LTEXT "Beschreibung:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Rufnummer (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "Reaktion:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Wenn Sie die folgenden Felder frei lassen, dann bleiben für diesen Port jeweils die entsprechenden Standard-Einstellungen wirksam.", + -1,14,77,215,16 + LTEXT "&Anrufe nach",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden annehmen",-1,92,103,69,8 + LTEXT "A&ufnahme auf",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden begrenzen",-1,92,120,69,8 + LTEXT "Ansagetext:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Durchsuchen",IDC_FILEDLG,168,134,55,14 + LTEXT "Klingel:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Durchsuchen",IDC_WAVEDLG,168,152,55,14 + LTEXT "Folgende Rufnummer bei Anrufen automatisch benachrichtigen:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Abbrechen",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Bekannte Anrufer" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Neu",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Bearbeiten",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Löschen",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Anrufer" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "Eintrag ist aktiviert",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,73,10 + LTEXT "Beschreibung:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Nummer des Anrufers:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "Reaktion:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Wenn Sie die folgenden Felder frei lassen, dann bleiben für diesen Anrufer jeweils die entsprechenden Standard-Einstellungen wirksam.", + -1,14,77,215,16 + LTEXT "&Anrufe nach",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden annehmen",-1,92,103,69,8 + LTEXT "A&ufnahme auf",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "Sekunden begrenzen",-1,92,120,69,8 + LTEXT "Ansagetext:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Durchsuchen",IDC_FILEDLG,168,134,55,14 + LTEXT "Klingel:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Durchsuchen",IDC_WAVEDLG,168,152,55,14 + LTEXT "Folgende Rufnummer bei Anrufen automatisch benachrichtigen:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Abbrechen",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Fernsteuerungs-Aktionen" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Neu",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Bearbeiten",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Löschen",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Aktion" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "Aktion ist aktiviert",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,71,10 + LTEXT "&DTMF-Folge:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Wenn ich diese Folge eingebe, dann möchte ich ...",-1, + 14,47,165,8 + CONTROL "Den Anrufbeantworter &fernsteuern. Sie können Nachrichten abhören und löschen.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "Die &Rufnummer zur automatischen Benachrichtigung ändern.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "Den Anrufbeantworter &abschalten.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "Den Anrufbeantworter &schließen.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "Den &Computer neu starten.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "Ein externes &Programm starten:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "Pr&ogramm:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "P&arameter:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Abbrechen",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registrierung" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Name:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Nummer:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Abbruch",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Ja",IDYES,164,45,50,14 + PUSHBUTTON "&Nein",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Ja",IDYES,164,50,50,14 + PUSHBUTTON "&Nein",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/Hungary.rc b/capitel/source.win/Hungary.rc new file mode 100644 index 0000000..b34bada --- /dev/null +++ b/capitel/source.win/Hungary.rc @@ -0,0 +1,608 @@ +/* + * hungary: hungarian translation from: "peter" goldbook@matavnet.hu + */ + +#pragma code_page(1250) + +LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "ü", IDM_TOGGLEACTIVATION , ASCII, ALT + "Ü", IDM_TOGGLEACTIVATION , ASCII, ALT + "a", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "A", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "ö", IDM_PLAY_ALL , ASCII, ALT + "Ö", IDM_PLAY_ALL , ASCII, ALT + "h", IDM_ADD_TO_CALLERS , ASCII, ALT + "H", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Általános" + BEGIN +#ifdef RECOTEL + MENUITEM "&RecoTel aktív\tAlt+R", IDM_TOGGLEACTIVATION +#else + MENUITEM "&Üzenetrögzítő aktív\tAlt+Ü", IDM_TOGGLEACTIVATION +#endif + MENUITEM "&Ablakkezelők elrejtése\tAlt+A" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Tulajdonságok ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Kilépés" , IDM_EXIT + END + POPUP "&Hívás" + BEGIN + MENUITEM "&Lejátszás\tEnter" , IDM_PLAY + MENUITEM "&Törlés\tDel" , IDM_DELETE + MENUITEM "&Mentés másként ..." , IDM_SAVE_AS + MENUITEM "&Hozzáadás új hívóként\tAlt+H" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Összes lejátszása\tAlt+Ö" , IDM_PLAY_ALL + MENUITEM "Üdvözlő szöveg felvétele" , IDM_RECORD + END + POPUP "&Nézet" + BEGIN + MENUITEM "&Mindig legfelül" , IDM_TOPMOST + MENUITEM "&Állapotjelző a tálcán" , IDM_SHOWTRAY + MENUITEM "&Elrejtés kis méretnél" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "&Összes kijelölése\tCtrl+Ö" , IDM_SELECTALL + MENUITEM "&Kijelölés megfordítása" , IDM_INVERTSEL + END + POPUP "&Súgó" + BEGIN + MENUITEM "&Olvass el (angol nyelvű)" , IDM_README +#ifndef RECOTEL + MENUITEM "&Újdonságok (angol nyelvű)" , IDM_WHATSNEW +#endif + MENUITEM "&Licenc (angol nyelvű)" , IDM_LICENSE +#ifndef RECOTEL + MENUITEM "&Megrendelőlap (angol nyelvű)" , IDM_ORDER + MENUITEM "&BMT Micro megrendelőlap (angol nyelvű)" , IDM_ORDERBMT + MENUITEM "&Honlap" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Névjegy" , IDM_ABOUT +#endif + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context" + BEGIN + MENUITEM "Lejátszás" , IDM_PLAY + MENUITEM "&Törlés\tDel" , IDM_DELETE + MENUITEM "&Mentés másként ..." , IDM_SAVE_AS + MENUITEM "&Hozzáadás új hívóként\tAlt+H" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Összes lejátszása\tAlt+Ö" , IDM_PLAY_ALL + MENUITEM "Üdvözlő szöveg felvétele" , IDM_RECORD + MENUITEM SEPARATOR +#ifdef RECOTEL + MENUITEM "&RecoTel aktív\tAlt+R", IDM_TOGGLEACTIVATION +#else + MENUITEM "&Üzenetrögzítő aktív\tAlt+Ü", IDM_TOGGLEACTIVATION +#endif + MENUITEM "&Ablakkezelők elrejtése\tAlt+A" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Tulajdonságok ..." , IDM_PROPERTIES +#ifndef RECOTEL + MENUITEM SEPARATOR + MENUITEM "&Névjegy" , IDM_ABOUT +#endif + MENUITEM SEPARATOR + MENUITEM "&Kilépés" , IDM_EXIT + END + POPUP "Context_2" + BEGIN + MENUITEM "&Új.." , IDM_NEW + MENUITEM "&Szerkesztés" , IDM_EDIT + MENUITEM "&Törlés" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Aktív" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&CapiTel megjelenítése" , IDM_SHOW + MENUITEM "&Összes hívás lejátszása" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "&Kilépés" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN +#ifdef RECOTEL + IDM_TOGGLEACTIVATION "Bekapcsolja vagy kikapcsolja a RecoTel-t." +#else + IDM_TOGGLEACTIVATION "Bekapcsolja vagy kikapcsolja az üzenetrögzítőt." +#endif + IDM_HIDEFRAMECONTROLS "Megjeleníti vagy elrejti a menüt, az eszköztárat és az állapotsort." + IDM_PROPERTIES "Megnyitja a program beállításait." + IDM_PROP_PORTS "Megnyitja a portokat tartalmazó listát." + IDM_PROP_CALLERS "Megnyitja az ismert hívókat tartalmazó listát." + IDM_PROP_ACTIONS "Megnyitja a távoli elérés eseményeit tartalmazó listát." + IDM_EXIT "Bezárja a CapiTel-t." + IDM_PLAY "Lejátsza a kijelölt hívást." + IDM_PLAY_ALL "Lejátsza az összes hívást." + IDM_DELETE "Törli a kijelölt hívást." + IDM_SAVE_AS "Hangfájlba menti a kijelölt hívást." + IDM_ADD_TO_CALLERS "A kijelölt hívás telefonszámát hozzáadja a hívók listájához." + IDM_RECORD "Új üdvözlő szöveget vesz fel." + IDM_README "Megnyitja a ReadMe.Txt-t." + IDM_WHATSNEW "Megnyitja a WhatsNew.Txt-t." + IDM_LICENSE "Megnyitja a licencszerződést." + IDM_ORDER "Megnyitja a megrendelőlapot." + IDM_ORDERBMT "Megnyitja a BMT Micro megrendelőlapot." + IDM_HOMEPAGE "Megnyitja a CapiTel honlapját." + IDM_ABOUT "Megjeleníti a termékinformációkat." + IDM_SHOW "Aktiválja a CapiTel fő ablakát." + IDM_TOPMOST "A CapiTel mindig látható lesz." + IDM_SHOWTRAY "Állapotjelző ikont jelenít meg a tálcán." + IDM_MINHIDE "Elrejti a CapiTel-t, amikor kis méretű." + IDM_SELECTALL "Kijelöli az ablakban lévő összes elemet." + IDM_INVERTSEL "Megfordítja a kijelölést." + STR_MENUHELP_MAIN1 "A CapiTel működésének beállításához tartalmaz parancsokat." + STR_MENUHELP_MAIN2 "Hívások lejátszására és törlésére tartalmaz parancsokat." + STR_MENUHELP_MAIN3 "A megjelenítés módosításához tartalmaz parancsokat." + STR_MENUHELP_MAIN4 "Segítségkéréshez tartalmaz parancsokat." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "%s verzió" + STR_ABOUT2 "Copyright (c) %s" + STR_ABOUT3 "%s és %s" + STR_ABOUT_UNREG1 "Regisztrálatlan próbaverzió" + STR_ABOUT_UNREG2 "Kérjük regisztráld a CapiTel-t!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Regisztrált felhasználó: %s)" + STR_TBAR_UNREG "%s (REGISZTRÁLATLAN PRÓBAVERZIÓ)" + STR_TBAR_FREE "%s (freeware hívó-azonosítóként működik)" +#ifdef RECOTEL + STR_TBAR_DEACTIVATED "RecoTel kikapcsolva ..." +#else + STR_TBAR_DEACTIVATED "Üzenetrögzítő kikapcsolva ..." +#endif + STR_TBAR_CONVERTING "Hangfájlok konvertálása ..." + STR_TBAR_RECWELCOME "Üdvözlő szöveg felvétele ..." + STR_LIST_COL1 "Hívó" + STR_LIST_COL2 "Dátum" + STR_LIST_COL3 "Idő" + STR_LIST_COL4 "Mp." + STR_LIST_COL5 "Hívott" + STR_PRT_LIST_COL1 "Megjegyzés" + STR_PRT_LIST_COL2 "Hívószám (MSN)" + STR_CLR_LIST_COL1 "Név" + STR_CLR_LIST_COL2 "Hívószám" + STR_ACT_LIST_COL1 "DTMF kód" + STR_ACT_LIST_COL2 "Esemény" + STR_REJECTCAUSE_D "Portbeállítás szerint" + STR_REJECTCAUSE_0 "Normál" + STR_REJECTCAUSE_1 "Foglalt" + STR_REJECTCAUSE_2 "Elutasít" + STR_REJECTCAUSE_3 "Nem elérhető" + STR_POPWIN_NONE "Soha" + STR_POPWIN_TOPLEFT "Fent balra" + STR_POPWIN_TOPRIGHT "Fent jobbra" + STR_POPWIN_BOTTOMLEFT "Lent balra" + STR_POPWIN_BOTTOMRIGHT "Lent jobbra" + STR_LIST_ACTION_1 "Távoli elérés" + STR_LIST_ACTION_2 "Számítógép újraindítása" + STR_LIST_ACTION_3 "CapiTel kikapcsolása" + STR_LIST_ACTION_4 "Kilépés a CapiTelből" + STR_LIST_ACTION_5 "Felhívandó szám megváltoztatása" + STR_FDLG_WELCOME "Üdvözlő szöveg kiválasztása" + STR_FDLG_WELCOME_FILT "Üdvözlő szöveg\0*.WAV;*.ALW\0Minden fájl (*.*)\0*\0" + STR_FDLG_RINGING "Csengőhang kiválasztása" + STR_FDLG_RINGING_FILT "WAV fájl\0*.WAV\0Minden fájl (*.*)\0*\0" + STR_FDLG_RECORD "Üdvözlő szöveg mentése mint" + STR_FDLG_RECORD_FILT "Üdvözlő szöveg\0*.ALW\0Minden fájl (*.*)\0*\0" + STR_FDLG_SAVEAS "Hívás mentése mint" + STR_FDLG_SAVEAS_FILT "WAV fájl\0*.WAV\0Minden fájl (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Hívás a %s.wav fájlból" + STR_POPTEXT_1 "Bejövő hívás" + STR_POPTEXT_2 "Hívó: %s" + STR_POPTEXT_3 "Hívott: %s" + STR_ERROR "Hiba" + STR_WARNING "Figyelmeztetés" + STR_MSG_REGOK "Köszönjük a regisztrációt!" + STR_MSG_REGFAIL "A beírt regisztációs szám helytelen.\n\nEllenőrizd, hogy a nevet és a kódot is helyesen írtad-e be." + STR_ERR_NONUMBER "Írj be egy telefonszámot!" + STR_ERR_NODTMFCODE "Írj be egy DTMF kódot!" + STR_ASK_REALYDELETE "Biztos hogy törölni akarod a kijelölt hívásokat?" + STR_ASK_REALYDELETE2 "Nem hallgattad meg az összes hívást a kijelöltek közül.\r\rBiztos hogy törölni akarod mindet?" + STR_ASK_REALYEXIT "Biztos ki akarsz lépni?" + STR_ASK_REALYEXIT_CHK "&Ne jelenjen meg többet ez a kérdés" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Névjegy" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel for Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "A készítők",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Hírek és frissítések",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Általános" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Hívásfogadás",-1,7,5,196,67 +#ifdef RECOTEL + LTEXT "&Felvétel megállítása",-1,14,21,77,8 + EDITTEXT IDC_SILENCE,93,19,25,13,ES_AUTOHSCROLL + LTEXT "másodperc csend után",-1,123,21,80,8 +#else + LTEXT "&Telefon felvétele",-1,14,21,77,8 + EDITTEXT IDC_ANSWER_DELAY,93,19,25,13,ES_AUTOHSCROLL + LTEXT "másodperc után",-1,123,21,75,8 + + LTEXT "&Felvételi idő korlátozása",-1,14,37,77,8 + EDITTEXT IDC_RECORD_TIME,93,35,25,13,ES_AUTOHSCROLL + LTEXT "másodpercre",-1,123,37,75,8 + + LTEXT "&Felvétel megállítása",-1,14,53,77,8 + EDITTEXT IDC_SILENCE,93,51,25,13,ES_AUTOHSCROLL + LTEXT "másodperc csend után",-1,123,53,75,8 +#endif + GROUPBOX "Megjelenítés",-1,7,75,196,147 + CONTROL "&A CapiTel ablakának megjelenítése bejövő híváskor", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 +#ifdef RECOTEL + CONTROL "&Csak azon hívások mutatása, amelyeknél a hívó üzenetet hagyott", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 +#else + CONTROL "&Csak azon hívások mutatása, amelyeknél a hívó üzenetet hagyott", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 +#endif +#ifdef RECOTEL + CONTROL "&Digitális hívások megjelenítése (fax, adat)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,126,180,10 + CONTROL "&Hívás törlésének jóváhagyása", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,140,180,10 + LTEXT "Ha a CapiTel kis méretű és hívás érkezik, a megadott helyen egy kis ablakot jeleníthet meg.", + -1,14,180,170,16 + LTEXT "Bejövő hívás kijelzése:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#else + CONTROL "&Ismeretlen hívó esetén mutassa a körzetet a felismert körzetszám alapján (csak Németországban)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "&Digitális hívások megjelenítése (fax, adat)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "&Hívás törlésének jóváhagyása", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "Ha a CapiTel kis méretű és hívás érkezik, egy kis ablakot jeleníthet meg.", + -1,14,180,170,16 + LTEXT "Bejövő hívás kijelzése:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#endif +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 222 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +#ifdef RECOTEL +CAPTION "Válasz-beállítások" +#else +CAPTION "Üzenetrögzítő" +#endif +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Üdvözlő szöveg",-1,7,5,196,50 + LTEXT "Az alábbi fájl használata &üdvözlő szövegként:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Tallózás ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Csengőhang",-1,7,58,196,52 + CONTROL "Az alábbi fájl &lejátszása bejövő hívás esetén:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,10 + + EDITTEXT IDC_RINGING_WAVE,14,90,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Tallózás ...",IDC_WAVEDLG,140,89,55,14 + GROUPBOX "Portok és hívók",-1,7,113,196,102 + ICON ID_PORT1,-1,14,126,20,20 +#ifdef RECOTEL + LTEXT "A portlistába írd be a saját telefonszámaidat, amikre a RecoTel reagálhat.", +#else + LTEXT "A portlistába írd be a saját telefonszámaidat, amikre az üzenetrögzítő reagálhat.", +#endif + -1,40,128,157,16 + PUSHBUTTON "Portok ...",IDC_EDIT_PORTS,105,150,90,14 + +#ifndef RECOTEL + ICON ID_CALLER1,-1,14,170,20,20 + LTEXT "Bejövő híváskor az ismert hívóknál szereplő személyeket a CapiTel név szerint azonosítja.", + -1,40,172,157,16 + PUSHBUTTON "Ismert hívók ...",IDC_EDIT_CALLERS,105,194,90,14 +#endif +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Távoli elérés" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Távoli elérés",-1,7,5,196,97 + CONTROL "&DTMF hangok felismerésének engedélyezése",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,160,10 + LTEXT "A távoli elérés segítségével bárhonnan felhívhatod az üzenetrögzítőt, és meghallgathatod az üzeneteket. Emellett a CapiTel automatikusan fel tud hívni, ha új üzenet érkezik.", + -1,14,37,180,32 + LTEXT "Automatikus hívás az alábbi telefonszámon:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Távoli események",-1,7,105,196,58 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "A lista olyan eseményeket tartalmaz, amelyeket a megfelelő DTMF kódokkal lehet végrehajtani.", + -1,40,119,156,16 + PUSHBUTTON "Távoli elérés események ...",IDC_EDIT_ACTIONS,95,141, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 103 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Egyéb" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Beállítások",-1,7,5,196,40 + CONTROL "A &hanghívások µLaw kódolva vannak (csak az USA-ban)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,14, + 20,150,18 + GROUPBOX "Naplózás",-1,7,48,196,48 + LTEXT "Az összes hívás az alábbi fájlban lesz rögzítve:", + -1,14,60,180,8 + EDITTEXT IDC_LOGFILE,14,75,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Portok" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Mégsem",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Új",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Szerkesztés",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Törlés",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Port" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Engedélyezett port",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,75,10 + LTEXT "&Megjegyzés:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Hívószám (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Válasz:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Ha az alábbi mezők üresek, akkor az alapértelmezett beállítások érvényesek.", + -1,14,77,160,16 + LTEXT "Telefon &felvétele",-1,14,103,65,8 + EDITTEXT IDC_DELAY,83,101,25,13,ES_AUTOHSCROLL + LTEXT "másodperc után",-1,112,103,69,8 + LTEXT "Felvétel &korlátozása",-1,14,120,65,8 + EDITTEXT IDC_MAXTIME,83,118,25,13,ES_AUTOHSCROLL + LTEXT "másodpercre",-1,112,120,69,8 + LTEXT "&Üdvözlő szöveg:",-1,14,137,55,8 + EDITTEXT IDC_FILENAME,73,135,89,13,ES_AUTOHSCROLL + PUSHBUTTON "Tallózás ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Csengőhang:",-1,14,154,55,8 + EDITTEXT IDC_WAVENAME,73,152,89,13,ES_AUTOHSCROLL + PUSHBUTTON "Tallózás ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "A&utomatikus hívás az alábbi telefonszámon:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Mégsem",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +#ifdef RECOTEL +CAPTION "Subscriber Menu" +#else +CAPTION "Ismert hívók" +#endif +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Mégsem",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Új",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Szerkesztés",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Törlés",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Hívó" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Aktív hívó",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,50,10 + LTEXT "&Megjegyzés:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL +#ifndef RECOTEL + LTEXT "&Hívó telefonszáma:",-1,14,42,80,8 +#else + LTEXT "Subscriber's number:",-1,14,42,80,8 +#endif + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Válasz:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +#ifndef RECOTEL + LTEXT "Ha az alábbi mezők üresek, akkor az alapértelmezett beállítások érvényesek.", + -1,14,77,160,16 + + LTEXT "Telefon &felvétele",-1,14,103,65,8 + EDITTEXT IDC_DELAY,83,101,25,13,ES_AUTOHSCROLL + LTEXT "másodperc után",-1,112,103,69,8 + + LTEXT "Felvétel &korlátozása",-1,14,120,65,8 + EDITTEXT IDC_MAXTIME,83,118,25,13,ES_AUTOHSCROLL + LTEXT "másodpercre",-1,112,120,69,8 + + LTEXT "&Üdvözlő szöveg:",-1,14,137,55,8 + EDITTEXT IDC_FILENAME,73,135,89,13,ES_AUTOHSCROLL + PUSHBUTTON "Tallózás ...",IDC_FILEDLG,168,134,55,14 + + LTEXT "&Csengőhang:",-1,14,154,55,8 + EDITTEXT IDC_WAVENAME,73,152,89,13,ES_AUTOHSCROLL + PUSHBUTTON "Tallózás ...",IDC_WAVEDLG,168,152,55,14 + + LTEXT "A&utomatikus hívás az alábbi telefonszámon:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL +#endif + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Mégsem",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Távoli elérés eseményei" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Mégsem",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Új",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Szerkesztés",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Törlés",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Esemény" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Aktív esemény",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,63,10 + LTEXT "&DTMF kód:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Ezen DTMF kód esetén ...",-1, + 14,47,165,8 + CONTROL "Az üzenetrögzítő &távoli irányítása, üzenetek hallgatása vagy törlése", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,170,18 + CONTROL "&Új telefonszám megadása, amelyet automatikusan felhív a program, ha új üzenet érkezik", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,170,18 + CONTROL "Üzenetrögzítő &kikapcsolása",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "Üzenetrögzítő &bezárása",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "&Számítógép újraindítása",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "Külső program &futtatása:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "&Program:",IDC_TEXT1,30,164,43,8 + EDITTEXT IDC_PROGRAM,75,163,115,13,ES_AUTOHSCROLL + LTEXT "Pa&raméterek:",IDC_TEXT2,30,180,43,8 + EDITTEXT IDC_ARGUMENTS,75,179,115,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Mégsem",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Regisztráció" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Név:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Kód:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Mégsem",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Mégsem",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Igen",IDYES,164,45,50,14 + PUSHBUTTON "&Nem",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Mégsem",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Igen",IDYES,164,50,50,14 + PUSHBUTTON "&Nem",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END + +#pragma code_page(DEFAULT) + + + diff --git a/capitel/source.win/ITALIAN.RC b/capitel/source.win/ITALIAN.RC new file mode 100644 index 0000000..a87b072 --- /dev/null +++ b/capitel/source.win/ITALIAN.RC @@ -0,0 +1,521 @@ +LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Generale" + BEGIN + MENUITEM "&Attiva Segreteria\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "Nascondi &Controlli\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "P&roprietŕ ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "E&sci" , IDM_EXIT + END + POPUP "&Call" + BEGIN + MENUITEM "&Ascolta\tEnter" , IDM_PLAY + MENUITEM "&Elimina\tDel" , IDM_DELETE + MENUITEM "&Salva con nome..." , IDM_SAVE_AS + MENUITEM "Aggiungi &Nuovo Chiamante\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Ascolta &Tutti\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Registra Benvenuto\tAlt+R" , IDM_RECORD + END + POPUP "&Finestra" + BEGIN + MENUITEM "In Primo Pi&ano" , IDM_TOPMOST + MENUITEM "&Mostra nella Taskbar" , IDM_SHOWTRAY + MENUITEM "&Nascondi quando Minimizzato" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Seleziona &Tutto\tCtrl+A" , IDM_SELECTALL + MENUITEM "&Inverti selezione" , IDM_INVERTSEL + END + POPUP "&Aiuto" + BEGIN + MENUITEM "L&eggimi" , IDM_README + MENUITEM "&Novitŕ" , IDM_WHATSNEW + MENUITEM "&Licenza" , IDM_LICENSE + MENUITEM "Modulo d'&Ordine" , IDM_ORDER + MENUITEM "Apri &Modulo d'Ordine BMT" , IDM_ORDERBMT + MENUITEM "&Homepage sul Web" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Informazioni su..." , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context_1" + BEGIN + MENUITEM "&Ascolta" , IDM_PLAY + MENUITEM "&Elimina\tDel" , IDM_DELETE + MENUITEM "&Salva con nome..." , IDM_SAVE_AS + MENUITEM "Aggiungi &Nuovo Chiamante\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Ascolta &Tutti\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Registra Benvenuto\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "&Attiva Segreteria\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "Nascondi &Controlli\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "P&roprietŕ ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Informazioni su..." , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "E&sci" , IDM_EXIT + END + POPUP "Context_2" + BEGIN + MENUITEM "&Nuovo.." , IDM_NEW + MENUITEM "&Modifica" , IDM_EDIT + MENUITEM "&Elimina" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Attivo" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Mostra CapiTel" , IDM_SHOW + MENUITEM "Ascolta &Tutti" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "E&sci" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Attiva o disattiva la segreteria." + IDM_HIDEFRAMECONTROLS "Mostra o nasconde il menu, la barra pulsanti e la barra di stato." + IDM_PROPERTIES "Apre le impostazioni del programma." + IDM_PROP_PORTS "Apre una lista di tutte le porte." + IDM_PROP_CALLERS "Apre una lista di tutti i chiamanti conosciuti." + IDM_PROP_ACTIONS "Apre una lista delle azioni controllate remotamente." + IDM_EXIT "Chiude CapiTel." + IDM_PLAY "Ascolta la chiamata selezionata." + IDM_PLAY_ALL "Ascolta tutte le chiamate." + IDM_DELETE "Elimina la chiamata selezionata." + IDM_SAVE_AS "Salva la telefonata selezionata come file audio." + IDM_ADD_TO_CALLERS "Aggiunge il numero della chiamata selezionata alla lista dei chiamanti." + IDM_RECORD "Registra un nuovo messaggio di benvenuto." + IDM_README "Apre ReadMe.Txt." + IDM_WHATSNEW "Apre WhatsNew.Txt." + IDM_LICENSE "Apre le Condizioni di Licenza." + IDM_ORDER "Apre il modulo d'ordine." + IDM_ORDERBMT "Apre il modulo d'ordine BMT." + IDM_HOMEPAGE "Apre l'home page di CapiTel." + IDM_ABOUT "Mostra le informazioni sul prodotto." + IDM_SHOW "Attiva la finestra principale di CapiTel." + IDM_TOPMOST "CapiTel rimane di fronte a tutte le altre finestre fino a quando viene minimizzato." + IDM_SHOWTRAY "Mostra l'icona di stato nella barra delle applicazioni." + IDM_MINHIDE "Nasconde CapiTel quando minimizzato." + IDM_SELECTALL "Seleziona tutti gli oggetti nella finestra." + IDM_INVERTSEL "Inverte gli oggetti selezionati con quelli non selezionati." + STR_MENUHELP_MAIN1 "Contiene i comandi per cambiare il comportamento di CapiTel." + STR_MENUHELP_MAIN2 "Contiene i comandi per ascoltare o eliminare le chiamate ricevute." + STR_MENUHELP_MAIN3 "Contiene i comandi per modificare la visualizzazione." + STR_MENUHELP_MAIN4 "Contiene i comandi per mostrare l'Aiuto." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Versione %s" + STR_ABOUT2 "Copyright (c) %s by" + STR_ABOUT3 "%s and %s" + STR_ABOUT_UNREG1 "Copia dimostrativa non registrata" + STR_ABOUT_UNREG2 "Registra CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Registrato da %s)" + STR_TBAR_UNREG "%s (COPIA DIMOSTRATIVA NON REGISTRATA)" + STR_TBAR_FREE "%s (eseguito come un Caller-ID gratuito)" + STR_TBAR_DEACTIVATED "Segreteria disabilitata ..." + STR_TBAR_CONVERTING "Conversione dei file wave in corso ..." + STR_TBAR_RECWELCOME "Registrazione del messaggio di benvenuto ..." + STR_LIST_COL1 "Chiamante" + STR_LIST_COL2 "Data" + STR_LIST_COL3 "Ora" + STR_LIST_COL4 "Sec." + STR_LIST_COL5 "Destinazione" + STR_PRT_LIST_COL1 "Descrizione" + STR_PRT_LIST_COL2 "Numero chiamato (MSN)" + STR_CLR_LIST_COL1 "Nome" + STR_CLR_LIST_COL2 "Numero chiamante" + STR_ACT_LIST_COL1 "Sequenza DTMF" + STR_ACT_LIST_COL2 "Azione" + STR_REJECTCAUSE_D "Impostazioni porta" + STR_REJECTCAUSE_0 "Normale" + STR_REJECTCAUSE_1 "Occupato" + STR_REJECTCAUSE_2 "Rifiuta" + STR_REJECTCAUSE_3 "Non disponibile" + STR_POPWIN_NONE "Mai" + STR_POPWIN_TOPLEFT "In alto a sinistra" + STR_POPWIN_TOPRIGHT "In alto a destra" + STR_POPWIN_BOTTOMLEFT "In basso a sinistra" + STR_POPWIN_BOTTOMRIGHT "In basso a destra" + STR_LIST_ACTION_1 "Controllo remoto" + STR_LIST_ACTION_2 "Riavvio computer" + STR_LIST_ACTION_3 "Disattiva CapiTel" + STR_LIST_ACTION_4 "Esci da CapiTel" + STR_LIST_ACTION_5 "Cambia numero di richiamata" + STR_FDLG_WELCOME "Seleziona testo di benvenuto" + STR_FDLG_WELCOME_FILT "Testo di benvenuto\0*.WAV;*.ALW\0Tutti i file (*.*)\0*\0" + STR_FDLG_RINGING "Seleziona la suoneria" + STR_FDLG_RINGING_FILT "File wave\0*.WAV\0Tutti i file (*.*)\0*\0" + STR_FDLG_RECORD "Salva testo di Benvenuto..." + STR_FDLG_RECORD_FILT "Testo di Benvenuto\0*.ALW\0Tutti i file (*.*)\0*\0" + STR_FDLG_SAVEAS "Salva la telefonata con nome" + STR_FDLG_SAVEAS_FILT "File wave\0*.WAV\0Tutti i file (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Telefonata da %s.wav" + STR_POPTEXT_1 "Chiamata in arrivo" + STR_POPTEXT_2 "Da %s" + STR_POPTEXT_3 "A %s" + STR_ERROR "Errore" + STR_WARNING "Attenzione" + STR_MSG_REGOK "Grazie per esserti registrato!" + STR_MSG_REGFAIL "Il codice di registrazione non č valido.\n\nControllo di aver inserito il tuo nome e il codice correttamente." + STR_ERR_NONUMBER "Inserisci il numero di telefono!" + STR_ERR_NODTMFCODE "Inserisci una sequenza DTMF!" + STR_ASK_REALYDELETE "Eliminare la chiamata selezionata?" + STR_ASK_REALYDELETE2 "Alcune telefonate non sono state ascoltate.\r\rSei sicuro di volerle eliminare?" + STR_ASK_REALYEXIT "Vuoi chiudere CapiTel?" + STR_ASK_REALYEXIT_CHK "Non chiedere piů" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Informazioni su..." +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel per Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Gli autori",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Novitŕ e aggiornamenti",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 238 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generale" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Accettazione della chiamata",-1,7,5,196,67 + LTEXT "&Rispondi dopo",-1,14,21,75,8 + EDITTEXT IDC_ANSWER_DELAY,95,19,25,13,ES_AUTOHSCROLL + LTEXT "secondi",-1,125,21,60,8 + LTEXT "&Limita la registrazione a",-1,14,37,75,8 + EDITTEXT IDC_RECORD_TIME,95,35,25,13,ES_AUTOHSCROLL + LTEXT "secondi",-1,125,37,60,8 + LTEXT "&Ferma la registrazione dopo",-1,14,53,90,8 + EDITTEXT IDC_SILENCE,106,51,25,13,ES_AUTOHSCROLL + LTEXT "secondi di silenzio",-1,136,53,60,8 + GROUPBOX "Mostra",-1,7,75,196,155 + CONTROL "&Rispristina le finestre minimizzate ad una nuova chiamata", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,18 + CONTROL "&Mostra solo quelle chiamate dove il chiamante ha lasciato un messaggio", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,112,180,18 + CONTROL "&Se il chimante č sconosciuto, mostra l'area indicata dal prefisso (funziona solo in Germania)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,134,180,18 + CONTROL "Mostra anche le chiamate &digitali (Fax, Dati)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,156,180,10 + CONTROL "&Conferma l'eliminazione di una chiamata dalla lista", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,170,180,10 + LTEXT "Se la finestra principale č minimizzata e arriva una chiamata, apri una finestra di avviso.", + -1,14,188,170,16 + LTEXT "Mostra una finestra di avviso:",-1,14,211,95,8 + COMBOBOX IDC_POPUPWIN,115,209,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 238 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Segreteria" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Testo di Benvenuto",-1,7,5,196,50 + LTEXT "Usa il file seguente come testo di &Benvenuto:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Sfoglia ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Squillo",-1,7,58,196,60 + CONTROL "&Esegui i seguenti file wave come 'squillo' per le chiamate in arrivo:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Sfoglia ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Porte e chiamanti",-1,7,121,196,110 + ICON ID_PORT1,-1,14,134,20,20 + LTEXT "Usa la lista delle porte per inserire i numeri chiamanti con i quali la segreteria deve interagire.", + -1,40,136,157,16 + PUSHBUTTON "Porte ...",IDC_EDIT_PORTS,105,158,90,14 + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "La lista dei Chiamanti contiene le persone con numeri telefonici conosciuti, cosě che CapiTel possa mostrarti i nomi.", + -1,40,180,157,24 + PUSHBUTTON "Chiamanti conosciuti ...",IDC_EDIT_CALLERS,105,210,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 162 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Controllo remoto" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Controllo remoto",-1,7,5,196,89 + CONTROL "Abilita il riconoscimento dei toni &DTMF",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Il controllo remoto permette di chiamare la segreteria e di ascoltare i messaggi ovunque. Inoltre, CapiTel puň chiamarti quando arrivano nuovi messaggi.", + -1,14,37,180,24 + LTEXT "Chiama automaticamente questo numero telefonico:", + -1,14,69,95,16 + EDITTEXT IDC_FORWARD,110,73,85,13,ES_AUTOHSCROLL + GROUPBOX "Azioni remote",-1,7,97,196,58 + ICON ID_ACTION1,-1,14,109,21,20 + LTEXT "Questa lista contiene azioni che possono essere attivate inserendo le sequenze DTMF corrispondenti.", + -1,40,111,156,16 + PUSHBUTTON "Azioni di controllo remoto ...",IDC_EDIT_ACTIONS,95,133, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Altro" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Opzioni",-1,7,5,196,32 + CONTROL "I dati &vocali sono codificati µLaw (solo negli USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logging",-1,7,40,196,48 + LTEXT "Tutte le chiamate verranno scritte sul seguente file:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Porte" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Annulla",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nuovo",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Modifica",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Elimina",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Porta" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "La &port č abilitata",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,70,10 + LTEXT "&Descrizione:",-1,14,25,85,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Numero telefonico (MSN):",-1,14,42,85,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Azione:",-1,14,59,85,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Lasciate vuoti i seguenti campi per usare le impostazioni predefinite per questa porta.", + -1,14,77,160,16 + LTEXT "&Rispondi dopo",-1,14,103,75,8 + EDITTEXT IDC_DELAY,93,101,25,13,ES_AUTOHSCROLL + LTEXT "secondi",-1,122,103,69,8 + LTEXT "&Limita la registrazione a",-1,14,120,75,8 + EDITTEXT IDC_MAXTIME,93,118,25,13,ES_AUTOHSCROLL + LTEXT "secondi",-1,122,120,69,8 + LTEXT "Testo di &Benvenuto:",-1,14,137,65,8 + EDITTEXT IDC_FILENAME,83,135,79,13,ES_AUTOHSCROLL + PUSHBUTTON "Sfoglia ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Squillo:",-1,14,154,65,8 + EDITTEXT IDC_WAVENAME,83,152,79,13,ES_AUTOHSCROLL + PUSHBUTTON "Sfoglia ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Chiamami &automaticamente al seguente numero telefonico:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Annulla",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Chiamanti conosciuti" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Annulla",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Nuovo",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Modifica",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Elimina",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Chiamante" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Abilitato",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,66,10 + LTEXT "&Descrizione:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Numero &chiamante:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Azione:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Lasciate vuoti i seguenti campi per usare le impostazioni predefinite per questo chiamante.", + -1,14,77,160,16 + LTEXT "&Rispondi dopo",-1,14,103,75,8 + EDITTEXT IDC_DELAY,93,101,25,13,ES_AUTOHSCROLL + LTEXT "secondi",-1,122,103,69,8 + LTEXT "&Limita la registrazione a",-1,14,120,75,8 + EDITTEXT IDC_MAXTIME,93,118,25,13,ES_AUTOHSCROLL + LTEXT "secondi",-1,122,120,69,8 + LTEXT "Testo di &Benvenuto:",-1,14,137,65,8 + EDITTEXT IDC_FILENAME,83,135,79,13,ES_AUTOHSCROLL + PUSHBUTTON "Sfoglia ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Squillo:",-1,14,154,65,8 + EDITTEXT IDC_WAVENAME,83,152,79,13,ES_AUTOHSCROLL + PUSHBUTTON "Sfoglia ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Chiamami &automaticamente al seguente numero telefonico:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Annulla",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Azioni del controllo remoto" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Annulla",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nuovo",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Modifica",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Elimina",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Azione" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Abilitata",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,70,10 + LTEXT "Codice &DTMF:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Quando digito questa sequenza DTMF, desidero ...",-1, + 14,47,165,8 + CONTROL "Controlla &remotamente la segreteria, ascoltando o eliminando i messaggi.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,175,18 + CONTROL "&Inserisci un nuovo numero telefonico da chiamare automaticamente quando ci sono nuovi messaggi.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,175,18 + CONTROL "&Disattiva la segreteria.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,175,10 + CONTROL "&Chiudi la segreteria.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,175,10 + CONTROL "Ri&avvia il computer.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,175,10 + CONTROL "&Esegui un programma:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,175,10 + LTEXT "Pr&ogramma:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "&Opzioni linea di comando:",IDC_TEXT2,26,180,82,8 + EDITTEXT IDC_ARGUMENTS,110,179,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Annulla",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registrazione" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Nome:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Codice:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Annulla",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/NORWEG.RC b/capitel/source.win/NORWEG.RC new file mode 100644 index 0000000..29059cb --- /dev/null +++ b/capitel/source.win/NORWEG.RC @@ -0,0 +1,536 @@ +/* + * Norsk (Norwegian bokmal) +norwegian translation from: "Stale Pedersen" + */ + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Hovedmeny" + BEGIN + MENUITEM "&Telefonsvarer Aktiv\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "&Skjul Vindu Kontroller\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "I&nnstillinger" , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "S&lutt" , IDM_EXIT + END + POPUP "&Ringing" + BEGIN + MENUITEM "H&řr\tEnter" , IDM_PLAY + MENUITEM "&Slett\tDel" , IDM_DELETE + MENUITEM "&Lagre som ..." , IDM_SAVE_AS + MENUITEM "Legg Til N&y\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Hřr Alt\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Spill Inn Melding\tAlt+R" , IDM_RECORD + END + POPUP "&Vis" + BEGIN + MENUITEM "&Alltid Fremst" , IDM_TOPMOST + MENUITEM "&Vis Status I Oppgavelinjen" , IDM_SHOWTRAY + MENUITEM "&Skjul Ved Minimering" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Select &Alle\tCtrl+A" , IDM_SELECTALL + MENUITEM "&Fjer Merking" , IDM_INVERTSEL + END + POPUP "&Hjelp" + BEGIN + MENUITEM "&Les Meg" , IDM_README + MENUITEM "&Nyheter" , IDM_WHATSNEW + MENUITEM "&Lisens" , IDM_LICENSE + MENUITEM "&Bestillingsblankett" , IDM_ORDER + MENUITEM "BMT B&estillingblankett" , IDM_ORDERBMT + MENUITEM "&Hjemmeside" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Om CapiTel" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Meny I" + BEGIN + MENUITEM "Hřr" , IDM_PLAY + MENUITEM "&Slett\tDel" , IDM_DELETE + MENUITEM "&Lagre som ..." , IDM_SAVE_AS + MENUITEM "Legg Til &Ny\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "H&řr Alt\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Spill Inn Melding\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "&Telefonsvarer Aktiv\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "&Skjul Vindu Og Kontroller\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "E&iendom ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Info" , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "&Om CapiTel" , IDM_ABOUT + END + POPUP "Meny II" + BEGIN + MENUITEM "&Ny.." , IDM_NEW + MENUITEM "&Endre" , IDM_EDIT + MENUITEM "&Slett" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Aktiv" , IDM_ACTIVE + END + POPUP "Meny III" + BEGIN + MENUITEM "&Vis CapiTel" , IDM_SHOW + MENUITEM "&Hřr Alle" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "S&lutt" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Slĺ Telefonsvarer Av/ Pĺ." + IDM_HIDEFRAMECONTROLS "Meny Og Statuslinje Av/ Pĺ." + IDM_PROPERTIES "Programinnstillinger." + IDM_PROP_PORTS "Portinnstillinger." + IDM_PROP_CALLERS "Kjente Innringere." + IDM_PROP_ACTIONS "Fjernstyringsinnstilling." + IDM_EXIT "Steng CapiTel." + IDM_PLAY "Hřr Valgt Samtale." + IDM_PLAY_ALL "Hřr Alle Samtaler." + IDM_DELETE "Slett Valgt Samtale." + IDM_SAVE_AS "Lagrer det valgte anropet til en lydfil." + IDM_ADD_TO_CALLERS "Legg Telefonnummer i Ringelisten." + IDM_RECORD "Lag Ny Velkomstmelding." + IDM_README "Les LesMeg.Txt." + IDM_WHATSNEW "Les Nyheter.Txt." + IDM_LICENSE "Les Lisensavtale." + IDM_ORDER "Les Bestillingsblanketten." + IDM_ORDERBMT "Les BMT Mikro Bestillingsblankett." + IDM_HOMEPAGE "Vis CapiTel Hjemmeside." + IDM_ABOUT "Vis Produktinformasjon." + IDM_SHOW "Vis CapiTel's Hovedvindu." + IDM_TOPMOST "CapiTel Er Fremste Vindu Dersom Den Ikke Minimeres." + IDM_SHOWTRAY "Vis Statusikon I Oppgavelinja." + IDM_MINHIDE "Skjul CapiTel Ved Minimering." + IDM_SELECTALL "Velg alle element i vinduet" + IDM_INVERTSEL "Fjern de valgte element" + STR_MENUHELP_MAIN1 "Kommandosett For CapiTel." + STR_MENUHELP_MAIN2 "Spill/ Slettekommandoer." + STR_MENUHELP_MAIN3 "Kommandoer For Endring Av Visning." + STR_MENUHELP_MAIN4 "Hjelpefilkommandoer." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Versjon %s" + STR_ABOUT2 "Kopirett (c) %s Av" + STR_ABOUT3 "%s Og %s" + STR_ABOUT_UNREG1 "UREGISTRERT Kopi" + STR_ABOUT_UNREG2 "Vennligst Registrer CapiTel!" + STR_WINDOW_TITLE APPNAME + STR_TBAR_REG "%s (Registrert Til %s)" + STR_TBAR_UNREG "%s (UREGISTRERT KOPI)" + STR_TBAR_FREE "%s (kjřrer som freeware Ringer-ID)" + STR_TBAR_DEACTIVATED "Telefonsvarer Avslĺtt ..." + STR_TBAR_CONVERTING "Konverterer WAVE Filer ..." + STR_TBAR_RECWELCOME "Spiller Inn Velkomstmelding ..." + STR_LIST_COL1 "Ringer" + STR_LIST_COL2 "Dato" + STR_LIST_COL3 "Tid" + STR_LIST_COL4 "Sek." + STR_LIST_COL5 "Mottaker" + STR_PRT_LIST_COL1 "Beskrivelse" + STR_PRT_LIST_COL2 "Ringt Nummer (MSN)" + STR_CLR_LIST_COL1 "Navn" + STR_CLR_LIST_COL2 "Oppringt Nummer" + STR_ACT_LIST_COL1 "DTMF Kode" + STR_ACT_LIST_COL2 "Handling" + STR_REJECTCAUSE_D "Port Oppsett" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Opptatt" + STR_REJECTCAUSE_2 "Avvis" + STR_REJECTCAUSE_3 "Stengt" + STR_POPWIN_NONE "Aldri" + STR_POPWIN_TOPLEFT "Topp Venstre" + STR_POPWIN_TOPRIGHT "Topp Hřyre" + STR_POPWIN_BOTTOMLEFT "Bunn Venstre" + STR_POPWIN_BOTTOMRIGHT "Bunn Hřyre" + STR_LIST_ACTION_1 "Fjernkontroll" + STR_LIST_ACTION_2 "Omstart" + STR_LIST_ACTION_3 "Steng CapiTel" + STR_LIST_ACTION_4 "Avslutt CapiTel" + STR_LIST_ACTION_5 "Endre Ring Tilbakenummer" + STR_FDLG_WELCOME "Velg Velkommentekst" + STR_FDLG_WELCOME_FILT "Velkommentekst\0*.WAV;*.ALW\0All files (*.*)\0*\0" + STR_FDLG_RINGING "Velg Ringing" + STR_FDLG_RINGING_FILT "WAVE fil\0*.WAV\0Alle Filer (*.*)\0*\0" + STR_FDLG_RECORD "Lagre Velkommentekst Som" + STR_FDLG_RECORD_FILT "Velkommentekst\0*.ALW\0Alle Filer (*.*)\0*\0" + STR_FDLG_SAVEAS "Lagre anrop som" + STR_FDLG_SAVEAS_FILT "WAVE fil\0*.WAV\0Alle Filer (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Anrop fra %s.wav" + STR_POPTEXT_1 "Inngĺende Ring" + STR_POPTEXT_2 "Fra %s" + STR_POPTEXT_3 "Til %s" + STR_ERROR "FEIL" + STR_WARNING "Advarsel" + STR_MSG_REGOK "Takk For Registrering!" + STR_MSG_REGFAIL "FEIL Registreringskode.\n\nVennligst Tast Inn Navn og Kode Korrekt." + STR_ERR_NONUMBER "Oppgi Et Telefonnummer!" + STR_ERR_NODTMFCODE "Oppgi En DTMF Kode!" + STR_ASK_REALYDELETE "Vil Du Slette Gjeldende Samtale?" + STR_ASK_REALYDELETE2 "Du har ikke h rt pĺ noen av de valgte anropene.\r\rVil du slette de uansett?" + STR_ASK_REALYEXIT "nsker du og avslutte CapiTel?" + STR_ASK_REALYEXIT_CHK "Ikke vis denne meldingen igjen" + STR_HELP_README "lesmeg.txt" + STR_HELP_ORDER "bestill.txt" + STR_HELP_ORDERBMT "besBMT.txt" + STR_HELP_LICENSE "lisens.txt" + STR_HELP_WHATSNEW "nyhet.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Om CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel For Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Rettighetshaver",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Nyheter",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 214 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hovedmeny" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Ring Godtatt",-1,7,5,196,67 + LTEXT "&Aktiver Svarer Etter",-1,14,21,75,8 + EDITTEXT IDC_ANSWER_DELAY,91,19,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder",-1,121,21,80,8 + LTEXT "&Opptakstid Begrenset Til",-1,14,37,75,8 + EDITTEXT IDC_RECORD_TIME,91,35,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder",-1,121,37,75,8 + LTEXT "&Stopp Opptak Etter",-1,14,53,75,8 + EDITTEXT IDC_SILENCE,91,51,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder Stillhet",-1,121,53,80,8 + GROUPBOX "Vis",-1,7,75,196,131 + CONTROL "&Gjenopprett Vindu Ved Ny Samtale", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 + CONTROL "Vis &Kun Ring Hvor Det Er lagt Melding Pĺ Svareren", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,10 + CONTROL "&Ved Ukjent Samtale - Vis Retningsnummer (Fungerer Kun I Tyskland)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,118,180,18 + CONTROL "Vis &Ogsĺ samtaler Som (Faks, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,140,180,10 + CONTROL "&Bekreft Sletting Av Poster i Ringelisten", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,154,180,10 + LTEXT "Skal CapiTel Ĺpne Vindu Ved Innkomne Ring?", + -1,14,172,170,8 + LTEXT "Vis Vindu:",-1,14,187,75,8 + COMBOBOX IDC_POPUPWIN,100,185,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 222 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Telefonsvarer" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Velkommentekst",-1,7,5,196,50 + LTEXT "Bruk Fřlgende &Velkomstekst:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Finn ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Ring",-1,7,58,196,52 + CONTROL "&Spill 'Ringer' Ved Inngĺende Samtaler:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,10 + EDITTEXT IDC_RINGING_WAVE,14,90,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Finn ...",IDC_WAVEDLG,140,89,55,14 + GROUPBOX "Porter Og Navn",-1,7,113,196,102 + ICON ID_PORT1,-1,14,126,20,20 + LTEXT "Bruk Port-listen For Og Angi Hvilket Tlf.nr. Som Skal Benytte Telefonsvareren.", + -1,40,128,157,16 + PUSHBUTTON "Porter ...",IDC_EDIT_PORTS,105,150,90,14 + ICON ID_CALLER1,-1,14,170,20,20 + LTEXT "Ringelisten Har Kjente Navn - CapiTel Kan Vise Deg Navnet I Stede For Telefonnummer.", + -1,40,172,157,16 + PUSHBUTTON "Kjent Innringer ...",IDC_EDIT_CALLERS,105,194,90,14 +END + + + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Fjernkontroll" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Fjernkontroll",-1,7,5,196,97 + CONTROL "Sett &DTMF Gjenkjenning",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + + LTEXT "Ved Fjernkontroll Kan Du Ringe Opp Telefonsvareren Og Hřr Innleste Beskjeder. I Tillegg Kan CapiTel Automatisk Ringe Til Et Oppgitt Nummer Nĺr En Beskjed Er Lagt Inn Pĺ Telefonsvareren.", + -1,14,37,180,32 + LTEXT "Automatisk Tilbakering Til Fřlgende Telefonnummer:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Fjernkontroll",-1,7,105,196,58 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "Listen Inneholder Kommandorer Som Kan Aktiveres Med DTMF-Koder.", + -1,40,119,156,16 + PUSHBUTTON "Fjernkontroll: Handling ...",IDC_EDIT_ACTIONS,95,141, + 100,14 +END + + + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Annet" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Tillegg",-1,7,5,196,32 + CONTROL "Sn&akking Er µLaw Koder (Kun i USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logger",-1,7,40,196,48 + LTEXT "Alle Ring Vil Bli Skrevet Til Fila:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + + + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Porter" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Endre",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Slett",IDM_DELETE,174,84,50,14 +END + + + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Port" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Port Er Koblet",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,59,10 + LTEXT "&Beskrivelse:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Ringt Nummer (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaksjon:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Blankt Felt = Standardverdier.", + -1,14,81,160,8 + LTEXT "Ta &Av Etter",-1,14,103,62,8 + EDITTEXT IDC_DELAY,80,101,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder",-1,109,103,69,8 + LTEXT "&Begrens Opptak Til",-1,14,120,62,8 + EDITTEXT IDC_MAXTIME,80,118,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder",-1,109,120,69,8 + LTEXT "&Velkommen:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Finn ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&ing:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Finn ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Ring Automatisk Dette Telefonnummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Avbryt",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Kjente Personer" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Endre",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Slett",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Innringer" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Feltet Er Aktivt",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,62,10 + LTEXT "&Beskrivelse:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Innringers Telefonnummer:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaksjon:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Blankt Felt = Gjeldende Innstilling For Denne Personen.", + -1,14,81,160,8 + LTEXT "Ta &Av Etter",-1,14,103,62,8 + EDITTEXT IDC_DELAY,80,101,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder",-1,109,103,69,8 + LTEXT "&Begrens Opptak Til",-1,14,120,62,8 + EDITTEXT IDC_MAXTIME,80,118,25,13,ES_AUTOHSCROLL + LTEXT "Sekunder",-1,109,120,69,8 + LTEXT "&Velkommen:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Finn ...",IDC_FILEDLG,168,134,55,14 + LTEXT "R&ing:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Finn ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "&Ring Automatisk Fřlgende Telefonnummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Avbryt",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Fjernstyring" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Endre",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Slett",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Handling" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Handling Er Aktiv",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,71,10 + LTEXT "&DTMF Kode:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Ved Ringing Med Disse DTMF Koder, Řnsker Jeg ...",-1, + 14,47,165,8 + CONTROL "&Fjernstyre Telefonsvareren - m/ Avspilling Eller Sletting Av Meldinger.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "&Oppgi Et Telefonnummer Som Det Ringes Nĺr Det Er Nye Meldinger I Svareren.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "&Slĺ Av Telefonsvareren.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "&Lukk Telefonsvareren.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "Om&start Datamaskinen.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "&Start Et Eksternt Program:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "Pr&ogram:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Ar&gument:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Avbryt",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registrering" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Nave:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Kode:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/NYNORSK.RC b/capitel/source.win/NYNORSK.RC new file mode 100644 index 0000000..46495e3 --- /dev/null +++ b/capitel/source.win/NYNORSK.RC @@ -0,0 +1,525 @@ +/* + * Norsk (Norwegian nynorsk) +norwegian translation from: "Pal Unanue" + */ + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&Generelt" + BEGIN + MENUITEM "&Aktivér telefonsvarar\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "&Skjul kontrollar\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Eigenskapar" , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "A&vslutt" , IDM_EXIT + END + POPUP "&Call" + BEGIN + MENUITEM "&Spel av\tEnter" , IDM_PLAY + MENUITEM "S&lett\tDel" , IDM_DELETE + MENUITEM "&Lagre som ..." , IDM_SAVE_AS + MENUITEM "&Ny innringar\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "Spel av &alle\tAlt+P" , IDM_PLAY_ALL + MENUITEM "Ny &utgĺande melding\tAlt+R" , IDM_RECORD + END + POPUP "&View" + BEGIN + MENUITEM "&Altid řverst" , IDM_TOPMOST + MENUITEM "&Ikon i oppgĺvelinja" , IDM_SHOWTRAY + MENUITEM "&Skjul ved minimér" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Select &Alle\tCtrl+A" , IDM_SELECTALL + MENUITEM "&Fjer Merking" , IDM_INVERTSEL + END + POPUP "&Help" + BEGIN + MENUITEM "&LesMeg" , IDM_README + MENUITEM "&Kva er nytt?" , IDM_WHATSNEW + MENUITEM "L&isens" , IDM_LICENSE + MENUITEM "&Bestillingsordre" , IDM_ORDER + MENUITEM "Sjĺ pĺ BMT &Micro -ordre" , IDM_ORDERBMT + MENUITEM "Heimeside pĺ &vev" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "&Avslutt" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context_1" + BEGIN + MENUITEM "Spel" , IDM_PLAY + MENUITEM "&Slett\tDel" , IDM_DELETE + MENUITEM "&Lagre som ..." , IDM_SAVE_AS + MENUITEM "Legg til &ny innringar\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "S&pel alle\tAlt+P" , IDM_PLAY_ALL + MENUITEM "Ny &utgĺande melding\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "Aktivér &telefonsvarar\tAlt+A", IDM_TOGGLEACTIVATION + MENUITEM "Skjul &kontrollar\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Eigenskapar ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Om CapiTel" , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "&Avslutt" , IDM_EXIT + END + POPUP "Context_2" + BEGIN + MENUITEM "&Ny.." , IDM_NEW + MENUITEM "&Rediger" , IDM_EDIT + MENUITEM "&Slett" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Aktiv" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Syn fram CapiTel" , IDM_SHOW + MENUITEM "S&pel alle samtalar" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "&Avslutt" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Aktiverar eller deaktiverar telefonsvararen." + IDM_HIDEFRAMECONTROLS "Syner fram eller skjular meny, verktřylinje og ststuslinje." + IDM_PROPERTIES "Opnar innstillingane." + IDM_PROP_PORTS "Opnar ei liste over linjane." + IDM_PROP_CALLERS "Opnar ei liste med alle kjende innringarar." + IDM_PROP_ACTIONS "Opnar ei liste med alle fjernstyrde kontrollar." + IDM_EXIT "Lukkar CapiTel." + IDM_PLAY "Spelar den valde samtala." + IDM_PLAY_ALL "Spelar alle samtalar." + IDM_DELETE "Slettar den valde samtalen." + IDM_SAVE_AS "Lagrar dei valde samtalane til ein lydfil." + IDM_ADD_TO_CALLERS "Legg telefonnummeret til lista." + IDM_RECORD "Speler inn ein ny velkomsttekst." + IDM_README "Opnar ReadMe.Txt." + IDM_WHATSNEW "Opnar WhatsNew.Txt." + IDM_LICENSE "Opnar Lisensavtalen." + IDM_ORDER "Opnar bestillingsskjemaet." + IDM_ORDERBMT "Opnar BMT Micro sitt bestillingsskjema." + IDM_HOMEPAGE "Opnar CapiTel si heimeside." + IDM_ABOUT "Sjĺ pĺ produktinformasjonen." + IDM_SHOW "Aktiverar CapiTel sitt hovudvindu." + IDM_TOPMOST "CapiTel forblir foran alle andre vinduar, om ikkje den minimerast." + IDM_SHOWTRAY "Synar fram eit statusikon i oppgĺvelinja." + IDM_MINHIDE "Skjul CapiTel nĺr minimert." + IDM_SELECTALL "Velg alle element i vinduet" + IDM_INVERTSEL "Fjern de valgte element" + STR_MENUHELP_MAIN1 "Inneheld kommandoar for ĺ stille inn CapiTel." + STR_MENUHELP_MAIN2 "Inneheld kommandoar for ĺ spele eller slette dine samtalar." + STR_MENUHELP_MAIN3 "Inneheld kommandoar for ĺ endre pĺ framsyninga." + STR_MENUHELP_MAIN4 "Inneheld kommandoar for ĺ syne frĺ hjelp-menyen." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Versjon %s" + STR_ABOUT2 "Opphavsrettighetar (c) %s av" + STR_ABOUT3 "%s og %s" + STR_ABOUT_UNREG1 "Uregistrert versjon" + STR_ABOUT_UNREG2 "Vćr snill og reistrer CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Registert til %s)" + STR_TBAR_UNREG "%s (UREGISTRERT PRŘVEKOPI)" + STR_TBAR_FREE "%s (Kjřrar som freeware 'Hvem ringar?')" + STR_TBAR_DEACTIVATED "Telefonsvarar deaktivert ..." + STR_TBAR_CONVERTING "Omsett WAV-filar ..." + STR_TBAR_RECWELCOME "Spelar inn velkomsttekst ..." + STR_LIST_COL1 "Innringar" + STR_LIST_COL2 "Dato" + STR_LIST_COL3 "Tid" + STR_LIST_COL4 "Sek." + STR_LIST_COL5 "Mĺl" + STR_PRT_LIST_COL1 "Beskrivelse" + STR_PRT_LIST_COL2 "Til nummer (MSN)" + STR_CLR_LIST_COL1 "Namn" + STR_CLR_LIST_COL2 "Til nummer" + STR_ACT_LIST_COL1 "DTMF kode" + STR_ACT_LIST_COL2 "Handling" + STR_REJECTCAUSE_D "Linja si innstilling" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Oppteke" + STR_REJECTCAUSE_2 "Nekt" + STR_REJECTCAUSE_3 "Ikkje tilgjengelig" + STR_POPWIN_NONE "Aldri" + STR_POPWIN_TOPLEFT "Řverst, venstre" + STR_POPWIN_TOPRIGHT "Řverst, hřgre" + STR_POPWIN_BOTTOMLEFT "Nederst, venstre" + STR_POPWIN_BOTTOMRIGHT "Nederst, hřgre" + STR_LIST_ACTION_1 "Fjernstyring" + STR_LIST_ACTION_2 "Omstart av maskina" + STR_LIST_ACTION_3 "Slĺ av CapiTel" + STR_LIST_ACTION_4 "Avslutt CapiTel" + STR_LIST_ACTION_5 "Forandring av tilbakeringingsnummeret" + STR_FDLG_WELCOME "Val av velkomstmelding" + STR_FDLG_WELCOME_FILT "Velkomstmelding\0*.WAV;*.ALW\0Alle filar (*.*)\0*\0" + STR_FDLG_RINGING "Ringetone" + STR_FDLG_RINGING_FILT "Wav-fil\0*.WAV\0Alle filar (*.*)\0*\0" + STR_FDLG_RECORD "Lagre velkomstmeldinga som" + STR_FDLG_RECORD_FILT "Velkomstmelding\0*.ALW\0Alle filar (*.*)\0*\0" + STR_FDLG_SAVEAS "Lagre samtale som" + STR_FDLG_SAVEAS_FILT "Wav-fil\0*.WAV\0Alle filar (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Samtale frĺ %s.wav" + STR_POPTEXT_1 "Innkommande samtale" + STR_POPTEXT_2 "Frĺ %s" + STR_POPTEXT_3 "Til %s" + STR_ERROR "Feil" + STR_WARNING "Advarsel" + STR_MSG_REGOK "Takk for registreringa!" + STR_MSG_REGFAIL "Registreringskoden er ikkje korrekt.\n\nVćr snill og sjĺ til at du har riktig namn og kode." + STR_ERR_NONUMBER "Skriv inn eit telefonnummer!" + STR_ERR_NODTMFCODE "Oppgi ein DTMF-kode!" + STR_ASK_REALYDELETE "Vil du slette den valde samtalen?" + STR_ASK_REALYDELETE2 "Du har ikkje lytta til nokre av dei valde samtalane.\r\Er du sikke pĺ at du vil fjerne dei?" + STR_ASK_REALYEXIT "nsker du og slutte CapiTel?" + STR_ASK_REALYEXIT_CHK "Ikkje vis denne meldinga igjen" + STR_HELP_README "readme.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Om CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel for Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Forfattarane",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Nyhetar og oppgradering",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "OK",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generelt" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Motteking av samtalar",-1,7,5,196,67 + LTEXT "&Ta rřret etter",-1,14,21,65,8 + EDITTEXT IDC_ANSWER_DELAY,81,19,25,13,ES_AUTOHSCROLL + LTEXT "sekund",-1,111,21,80,8 + LTEXT "&Begrens opptak til",-1,14,37,65,8 + EDITTEXT IDC_RECORD_TIME,81,35,25,13,ES_AUTOHSCROLL + LTEXT "sekund",-1,111,37,75,8 + LTEXT "&Stopp opptak etter",-1,14,53,65,8 + EDITTEXT IDC_SILENCE,81,51,25,13,ES_AUTOHSCROLL + LTEXT "sekund med stillhet",-1,111,53,80,8 + GROUPBOX "Vindu",-1,7,75,196,147 + CONTROL "&Gjenopprett vindu ved innkommande samtale", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,180,10 + CONTROL "&Syn fram berre dei samtalane med ein beskjed pĺ telefonsvararen", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,180,18 + CONTROL "&Om innringaren ikkje er kjend, syn fram retningsnummeret. (Fungerar berre i Tyskland.)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,180,18 + CONTROL "Syn fram &digitale samtalar (Fax, Data)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,180,10 + CONTROL "&Bekreft ved sletting av samtalar", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,180,10 + LTEXT "Om hovudvinduet er minimert nĺr ein samtale kjem inn, syn dĺ fram eit minivindu", + -1,14,180,170,16 + LTEXT "Syn fram minivindu:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Telefonsvarar" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Velkomstmelding",-1,7,5,196,50 + LTEXT "Bruk den fřlgande fila som &velkomstmelding:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Bla igjenom ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Ringetone",-1,7,58,196,60 + CONTROL "&Spel den fřlgande fila som 'ringetone' pĺ innkommande samtaler:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Bla igjenom ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Linjar og innringarar",-1,7,121,196,102 + ICON ID_PORT1,-1,14,134,20,20 + LTEXT "Bruk denne lista til ĺ styre oppfřrselen til dei forskjellige telefonnumra linja har.", + -1,40,136,157,16 + PUSHBUTTON "Linje ...",IDC_EDIT_PORTS,105,158,90,14 + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "Kjenninglista inneheld folk med kjende telefonnummer sĺ CapiTel kan syne fram namn deira.", + -1,40,180,157,16 + PUSHBUTTON "Kjenningliste ...",IDC_EDIT_CALLERS,105,202,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Fjernstyring" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Fjernstyring",-1,7,5,196,97 + CONTROL "Aktivér &DTMF tonegjenkjenning",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "Fjernstyring gjřr at du kan ringe CapiTel og hřre beskjedar som er lagt igjen. I tillegg, kan CapiTel automatisk rige deg nĺr det er nye beskjedar pĺ telefonsvararen.", + -1,14,37,180,32 + LTEXT "Ring meg automatisk pĺ fřlgande telefonnummer:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Fjernstyrte handlingar",-1,7,105,196,58 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "Denne lista inneheld handlingar som kan aktiveres ved inntasting av DTMF-tonar.", + -1,40,119,156,16 + PUSHBUTTON "Fjernstyrte handlingar ...",IDC_EDIT_ACTIONS,95,141, + 100,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Anna" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Val",-1,7,5,196,32 + CONTROL "St&emmedata er koda i µLaw-format (berre i USA)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Logg",-1,7,40,196,48 + LTEXT "Alle samtalar blir logga til fřlgande fil:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Linjar" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Rediger",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Slett",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Linje" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Linja er aktiv",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,63,10 + LTEXT "&Beskrivelse:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "L&injenummer (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "&Reaksjon:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Lat dei fřlgande felta vere tomme om du vil bruke dei vanlege innstillingane for linja", + -1,14,77,160,16 + LTEXT "&Ta rřret etter",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "sekund",-1,92,103,69,8 + LTEXT "&Begrens opptak til",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "sekund",-1,92,120,69,8 + LTEXT "&Velkomstmelding:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bla gjennom ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Ringetone:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bla gjennom ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Ring meg &automatisk pĺ fřlgande nummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Avbryt",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Kjenningliste" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,206,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Rediger",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Slett",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Innringar" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Innringaren er aktivert",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,66,10 + LTEXT "&Beskrivelse:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Innringars t&elefonnummer:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "R&eaksjon:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Lat dei fřlgande felta vere tomme for ĺ bruke dei vanlege innstillingane for innringaren", + -1,14,77,160,16 + LTEXT "&Ta rřret etter",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "sekund",-1,92,103,69,8 + LTEXT "Begrens &opptak til",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "sekund",-1,92,120,69,8 + LTEXT "&Velkomstmelding:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bla gjennom ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Ringetone:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Bla gjennom ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Ring meg a&utomatisk pĺ fřlgande nummer:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,128,209,50,14 + PUSHBUTTON "Avbryt",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Fjernstyrte handlingar" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "OK",IDOK,174,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Ny",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Rediger",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Slett",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Handling" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Hanlinga er aktiv",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,70,10 + LTEXT "&DTMF-kode:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Nĺr eg trykkar denne DTMF-koden vil eg ...",-1, + 14,47,165,8 + CONTROL "&Fjernstyre svararen, hřre eller slette beskjedar.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,160,18 + CONTROL "&Oppgi eit nytt nummer som skal ringes nĺr det er nye beskjedar.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,160,18 + CONTROL "&Slĺ av svararen.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,160,10 + CONTROL "&Lukke svararen.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,160,10 + CONTROL "&Omstarte maskina.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,160,10 + CONTROL "Starte &eit anna program:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,160,10 + LTEXT "Pr&ogram:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Ar&gumentar:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",1,96,210,50,14 + PUSHBUTTON "Avbryt",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registrering" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Namn:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Kode:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,150,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/PORT0.ICO b/capitel/source.win/PORT0.ICO new file mode 100644 index 0000000000000000000000000000000000000000..d6a44351e9a9061030cfb7d184041eb94ee56f3c GIT binary patch literal 1078 zcmbtTF_MEY3>4vJLI*#9>L$NPUXVB3FGz>Gxbv6%lq;{Kiwh>cm4pb%FjwRRD|uyO ztQ8Oyw4_$}v%aFcTy;4!2aBO*^^xhZEJ z0k}BD?$s*qJ?8>u-5f7-?2)Ka$`W%3H|G8}c*KyemmUj4P9Y;!cwRQZezGC<*f2c@ z(f1MOZGjrtgRc-v{7NohmaCtV_qVa{zd6aI88wE2mn|H`#MANr*I zl>)1r`m2_~{DS@b`~oeIy&gadwWu!nO|BN{GVyVt~+yf<0pqv#( te4Qi3Ar1sx5FDQZE>!q_aIV6Y1{W!PFUTA6gg{Ccrzag;;qvs9lqn5q3^rC~rCVdd zB?OYJHM`nb*+{c8kYR)Eb_=n62HZ22Wy;?+z$3XmIblj7!yP@~qrc@Gzyaq{pyw3c zdqydQI1qx&2tGoI`^s$Fwo=QxuB#XeuC9eRow^uXYhNVC`9Zv?O;vND9V-qJ7n&5l zx3mx7wc&nuL_y@tSMY`$AzaV8z9Ug|Dv1N3Iyq{1+Z;7wg_^`b&*|@U;^%&5DyXhj zVKrX_Rzii=d=XrUB)n$Y0L_<1D3Kb%cAk`x$Tp`oUP-q3UD~H++2(bgb6e{iwth}) z(*f(MHt~L3Z_ecm4zYAVJC0+YUihB_rf>hXr!0#NJV~DuhR8w~R_J*M#xV#cG!ZhFzw@(w0PVQpN&o-= literal 0 HcmV?d00001 diff --git a/capitel/source.win/SPANISH.RC b/capitel/source.win/SPANISH.RC new file mode 100644 index 0000000..4c4960e --- /dev/null +++ b/capitel/source.win/SPANISH.RC @@ -0,0 +1,527 @@ +/* + * spanish +spanish translation from: "Juan Miguel Sosso" + */ + +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH + +ID_MAIN ACCELERATORS MOVEABLE PURE +BEGIN + "a", IDM_SELECTALL , ASCII, VIRTKEY, CONTROL + "a", IDM_TOGGLEACTIVATION , ASCII, ALT + "A", IDM_TOGGLEACTIVATION , ASCII, ALT + "c", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "C", IDM_HIDEFRAMECONTROLS, ASCII, ALT + "p", IDM_PLAY_ALL , ASCII, ALT + "P", IDM_PLAY_ALL , ASCII, ALT + "n", IDM_ADD_TO_CALLERS , ASCII, ALT + "N", IDM_ADD_TO_CALLERS , ASCII, ALT + VK_F5, IDM_REGISTER , ASCII, VIRTKEY, CONTROL, ALT +END + + +ID_MAIN MENU DISCARDABLE +BEGIN + POPUP "&General" + BEGIN + MENUITEM "&Activar contestador\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "&Ocultar menú y botones\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Configuración ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "&Salir" , IDM_EXIT + END + POPUP "&Llamada" + BEGIN + MENUITEM "R&eproducir\tEnter" , IDM_PLAY + MENUITEM "&Borrar\tDel" , IDM_DELETE + MENUITEM "&Guardar como..." , IDM_SAVE_AS + MENUITEM "Registrar &número\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Reproducir todas\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Grabar mensaje\tAlt+R" , IDM_RECORD + END + POPUP "&Ver" + BEGIN + MENUITEM "&Siempre visible" , IDM_TOPMOST + MENUITEM "&Mostrar icono de estado" , IDM_SHOWTRAY + MENUITEM "&Ocultar al minimizar" , IDM_MINHIDE + MENUITEM SEPARATOR + MENUITEM "Seleccionar &Todo\tCtrl+A" , IDM_SELECTALL + MENUITEM "&Invertir Selección" , IDM_INVERTSEL + + END + POPUP "&Ayuda" + BEGIN + MENUITEM "&Leame" , IDM_README + MENUITEM "&Novedades" , IDM_WHATSNEW + MENUITEM "&Licencia" , IDM_LICENSE + MENUITEM "&Formulario de pedido" , IDM_ORDER + MENUITEM "Formulario de pedido de BMT &Micro" , IDM_ORDERBMT + MENUITEM "&Web de CapiTel" , IDM_HOMEPAGE + MENUITEM SEPARATOR + MENUITEM "Acerca de &CapiTel" , IDM_ABOUT + END +END + +ID_POPUP MENU DISCARDABLE +BEGIN + POPUP "Context" + BEGIN + MENUITEM "Reproducir" , IDM_PLAY + MENUITEM "&Borrar\tDel" , IDM_DELETE + MENUITEM "&Guardar como..." , IDM_SAVE_AS + MENUITEM "Registrar &número\tAlt+N" , IDM_ADD_TO_CALLERS + MENUITEM SEPARATOR + MENUITEM "&Reproducir todas\tAlt+P" , IDM_PLAY_ALL + MENUITEM "&Grabar mensaje\tAlt+R" , IDM_RECORD + MENUITEM SEPARATOR + MENUITEM "&Activar Contestador\tAlt+A" , IDM_TOGGLEACTIVATION + MENUITEM "&Ocultar menú y botones\tAlt+C" , IDM_HIDEFRAMECONTROLS + MENUITEM "&Configuración ..." , IDM_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "Acerca de Capi&Tel" , IDM_ABOUT + MENUITEM SEPARATOR + MENUITEM "&Salir" , IDM_EXIT + END + POPUP "Context2" + BEGIN + MENUITEM "&Nuevo.." , IDM_NEW + MENUITEM "&Editar" , IDM_EDIT + MENUITEM "&Borrar" , IDM_DELETE + MENUITEM SEPARATOR + MENUITEM "&Activar" , IDM_ACTIVE + END + POPUP "Tray_1" + BEGIN + MENUITEM "&Mostrar CapiTel" , IDM_SHOW + MENUITEM "&Reproducir llamadas" , IDM_PLAY_ALL + MENUITEM SEPARATOR + MENUITEM "&Cerrar" , IDM_EXIT + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDM_TOGGLEACTIVATION "Activa o desactiva el contestador." + IDM_HIDEFRAMECONTROLS "Oculta o muestra el menú, barra de botones y línea de estado." + IDM_PROPERTIES "Configuración del programa." + IDM_PROP_PORTS "Líneas de teléfonos (MSN)." + IDM_PROP_CALLERS "Lista de los números conocidos." + IDM_PROP_ACTIONS "Acciones de control remoto." + IDM_EXIT "Cerrar CapiTel." + IDM_PLAY "Reproduce la llamada seleccionada." + IDM_PLAY_ALL "Reproduce todas las llamadas." + IDM_DELETE "Borra la llamada seleccionada." + IDM_SAVE_AS "Guarda la llamada seleccionada en un archivo de sonido." + IDM_ADD_TO_CALLERS "Ańadir el número de la llamada a la lista." + IDM_RECORD "Graba el mensaje del contestador." + IDM_README "Abrir el archivo LEAME.Txt." + IDM_WHATSNEW "Abrir el archivo WhatsNew.Txt." + IDM_LICENSE "Abrir el acuerdo de licencia." + IDM_ORDER "Abrir el formulario de pedido." + IDM_ORDERBMT "Abrir el formulario de pedido de BMT Micro." + IDM_HOMEPAGE "Ir al web de CapiTel." + IDM_ABOUT "Información acerca de CapiTel." + IDM_SHOW "Activa la ventana principal de CapiTel." + IDM_TOPMOST "Mostrar CapiTel siempre encima de todas las ventanas." + IDM_SHOWTRAY "Mostrar icono de estado situado al lado de la barra de tareas." + IDM_MINHIDE "Ocultar CapiTel de la barra de tareas al minimizar." + IDM_SELECTALL "Selecciona todos los elementos en la ventana." + IDM_INVERTSEL "Invierte los elementos que están y no están seleccionados." + + STR_MENUHELP_MAIN1 "Configura las opciones del programa." + STR_MENUHELP_MAIN2 "Comandos para reproducir o borrar sus llamadas." + STR_MENUHELP_MAIN3 "Opciones para controlar la visualización." + STR_MENUHELP_MAIN4 "Comandos de ayuda." +END + +STRINGTABLE DISCARDABLE +BEGIN + STR_ABOUT1 "Versión %s" + STR_ABOUT2 "Copyright (c) %s por" + STR_ABOUT3 "%s y %s" + STR_ABOUT_UNREG1 "Versión no registrada" + STR_ABOUT_UNREG2 "ˇPor favor, registre CapiTel!" + STR_WINDOW_TITLE APPSHORT + STR_TBAR_REG "%s (Registrado a %s)" + STR_TBAR_UNREG "%s (VERSIÓN NO REGISTRADA)" + STR_TBAR_FREE "%s (modo gratuíto sólo Caller-ID)" + STR_TBAR_DEACTIVATED "Contestador desactivado ..." + STR_TBAR_CONVERTING "Convirtiendo archivo wave ..." + STR_TBAR_RECWELCOME "Grabando mensaje ..." + STR_LIST_COL1 "Interlocutor" + STR_LIST_COL2 "Fecha" + STR_LIST_COL3 "Hora" + STR_LIST_COL4 "Segs." + STR_LIST_COL5 "Línea" + STR_PRT_LIST_COL1 "Descripción" + STR_PRT_LIST_COL2 "Número (MSN)" + STR_CLR_LIST_COL1 "Nombre" + STR_CLR_LIST_COL2 "Número" + STR_ACT_LIST_COL1 "Código DTMF" + STR_ACT_LIST_COL2 "Acción" + STR_REJECTCAUSE_D "Por defecto" + STR_REJECTCAUSE_0 "Normal" + STR_REJECTCAUSE_1 "Comunicando" + STR_REJECTCAUSE_2 "Rechazar" + STR_REJECTCAUSE_3 "No contestar" + STR_POPWIN_NONE "Nunca" + STR_POPWIN_TOPLEFT "Arriba izquierda" + STR_POPWIN_TOPRIGHT "Arriba derecha" + STR_POPWIN_BOTTOMLEFT "Abajo izquierda" + STR_POPWIN_BOTTOMRIGHT "Abajo derecha" + STR_LIST_ACTION_1 "Control remoto" + STR_LIST_ACTION_2 "Reiniciar ordenador" + STR_LIST_ACTION_3 "Desactivar CapiTel" + STR_LIST_ACTION_4 "Salir de CapiTel" + STR_LIST_ACTION_5 "Cambiar número de retorno" + STR_FDLG_WELCOME "Seleccionar mensaje" + STR_FDLG_WELCOME_FILT "Mensaje\0*.WAV;*.ALW\0Todos los archivos (*.*)\0*\0" + STR_FDLG_RINGING "Seleccionar Ringing" + STR_FDLG_RINGING_FILT "Archivos Wave\0*.WAV\0Todos los archivos (*.*)\0*\0" + STR_FDLG_RECORD "Grabar mensaje como" + STR_FDLG_RECORD_FILT "Mensajes\0*.ALW\0Todos los archivos (*.*)\0*\0" + STR_FDLG_SAVEAS "Guardar llamada como" + STR_FDLG_SAVEAS_FILT "Archivos Wave\0*.WAV\0Todos los archivos (*.*)\0*\0" + STR_FDLG_SAVEAS_FILE "Llamada de %s.wav" + STR_POPTEXT_1 "Llamada entrante" + STR_POPTEXT_2 "De %s" + STR_POPTEXT_3 "Para %s" + STR_ERROR "Error" + STR_WARNING "Atención" + STR_MSG_REGOK "ˇGracias por registrarse!" + STR_MSG_REGFAIL "El código de registro no es válido.\n\nPor favor verifique si ha introducido su nombre y el código correctamente." + STR_ERR_NONUMBER "ˇPor favor, introduzca un número de teléfono!" + STR_ERR_NODTMFCODE "ˇPor favor, introduzca el código DTMF!" + STR_ASK_REALYDELETE "żEstá seguro de querer borrar la llamada seleccionada?" + STR_ASK_REALYDELETE2 "No ha escuchado alguna de las llamadas seleccionadas.\r\rżEstá seguro de querer borrarlas?" + STR_ASK_REALYEXIT "żQuiere salir de CapiTel?" + STR_ASK_REALYEXIT_CHK "No hacer esta pregunta de nuevo" + STR_HELP_README "leame.txt" + STR_HELP_ORDER "order.txt" + STR_HELP_ORDERBMT "orderbmt.txt" + STR_HELP_LICENSE "licence.txt" + STR_HELP_WHATSNEW "whatsnew.txt" +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 219, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Acerca de CapiTel" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,5,209,59 + ICON ID_MAIN,-1,17,20,21,20 + LTEXT "CapiTel para Windows",-1,55,15,115,8 + LTEXT ".",IDC_TEXT1,55,25,115,8 + LTEXT ".",IDC_TEXT2,55,40,115,8 + LTEXT ".",IDC_TEXT3,55,50,115,8 + GROUPBOX "Los autores",-1,5,67,209,65 + LTEXT APP_AUTOR_1,-1,15,80,60,8 + LTEXT APP_WERNER_INET,-1,80,80,100,8 + LTEXT APP_CAWIM_INET,-1,80,105,130,8 + LTEXT APP_AUTOR_2,-1,15,105,60,8 + LTEXT APP_WERNER_WWW,-1,80,90,100,8 + LTEXT APP_CAWIM_WWW,-1,80,115,100,8 + GROUPBOX "Novedades y actualizaciones",IDC_TEXT4,5,137,209,25 + CTEXT APP_HOMEPAGE,IDC_TEXT5,12,148,196,8 + PUSHBUTTON "Aceptar",IDOK,85,171,50,14 +END + +IDD_PROPPAGE1 DIALOG DISCARDABLE 0, 0, 210, 230 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Aceptar llamadas",-1,7,5,196,67 + LTEXT "&Descolgar en",-1,14,21,65,8 + EDITTEXT IDC_ANSWER_DELAY,86,19,25,13,ES_AUTOHSCROLL + LTEXT "segundos",-1,116,21,80,8 + LTEXT "&Tiempo de grabación",-1,14,37,67,8 + EDITTEXT IDC_RECORD_TIME,86,35,25,13,ES_AUTOHSCROLL + LTEXT "segundos",-1,116,37,75,8 + LTEXT "&Parar grabación en",-1,14,53,65,8 + EDITTEXT IDC_SILENCE,86,51,25,13,ES_AUTOHSCROLL + LTEXT "segundos de silencio",-1,116,53,80,8 + GROUPBOX "Mostrar",-1,7,75,196,147 + CONTROL "&Restaurar ventana minimizada con nuevas llamadas", + IDC_RESTORE_WINDOW,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,90,185,10 + CONTROL "&Mostrar sólo las llamadas cuando se haya dejado un mensaje en el contestador", + IDC_IGNORE_EMPTY,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,104,185,18 + CONTROL "Si el &número es desconocido, mostrar el area indicada por el codigo de áreas (funciona sólo en Alemania)", + IDC_EXPAND_CALLER_ID,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,126,185,18 + CONTROL "Mostrar también las llamadas &digitales (Fax, Datos)", + IDC_IS_CALLER_ID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,148,185,10 + CONTROL "&Confirmar el borrado de una llamada de la lista", + IDC_CONFIRM_DELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 14,162,185,10 + LTEXT "Si la ventana principal está minimizada y se recibe una llamada, se puede mostrar una pequeńa ventana.", + -1,14,180,170,16 + LTEXT "Mostrar la ventana:",-1,14,203,75,8 + COMBOBOX IDC_POPUPWIN,100,201,70,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP +END + +IDD_PROPPAGE2 DIALOG DISCARDABLE 0, 0, 210, 238 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Contestador" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Mensaje de bienvenida",-1,7,5,196,50 + LTEXT "Usar el siguiente archivo como &mensaje de bienvenida:",-1, + 14,18,180,8 + EDITTEXT IDC_WELCOME_TEXT,14,34,120,13,ES_AUTOHSCROLL + PUSHBUTTON "Seleccionar ...",IDC_FILEDLG,140,33,55,14 + GROUPBOX "Llamada",-1,7,58,196,60 + CONTROL "&Ejecutar el siguiente wave como 'sonido telefónico' en las llamadas entrantes:", + IDC_WAVE_RINGING,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,14,73,175,18 + EDITTEXT IDC_RINGING_WAVE,14,98,120,12,ES_AUTOHSCROLL + PUSHBUTTON "Seleccionar ...",IDC_WAVEDLG,140,97,55,14 + GROUPBOX "Líneas y llamadas",-1,7,121,196,110 + ICON ID_PORT1,-1,14,134,20,20 + LTEXT "Configurar los números de las líneas de teléfono que el contestador debe usar.", + -1,40,136,157,16 + PUSHBUTTON "Líneas ...",IDC_EDIT_PORTS,105,158,90,14 + ICON ID_CALLER1,-1,14,178,20,20 + LTEXT "Configurar la lista de números conocidos para mostrar sus nombres cuando se reciba una llamada.", + -1,40,180,157,24 + PUSHBUTTON "Números conocidos ...",IDC_EDIT_CALLERS,105,210,90,14 +END + +IDD_PROPPAGE3 DIALOG DISCARDABLE 0, 0, 210, 170 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Control Remoto" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Control remoto",-1,7,5,196,97 + CONTROL "Habilitar reconocimiento de tono &DTMF",IDC_DTMF_SUPPORT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,20,149,10 + LTEXT "El control remoto le permite llamar a su contestador y oír sus mensajes desde cualquier parte. Adicionalmente, CapiTel puede llamarlo automáticamente cuando haya nuevos mensajes en el contestador.", + -1,14,37,180,32 + LTEXT "Llamar automáticamente al siguiente número:", + -1,14,77,95,16 + EDITTEXT IDC_FORWARD,110,81,85,13,ES_AUTOHSCROLL + GROUPBOX "Aciones del control remoto",-1,7,105,196,58 + ICON ID_ACTION1,-1,14,117,21,20 + LTEXT "Configurar la lista de acciones a realizar según el código DTMF introducido.", + -1,40,119,156,16 + PUSHBUTTON "Aciones del control remoto ...",IDC_EDIT_ACTIONS,90,141, + 105,14 +END + +IDD_PROPPAGE4 DIALOG DISCARDABLE 0, 0, 210, 95 +STYLE WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Más" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Opciones",-1,7,5,196,32 + CONTROL "Datos del &habla codificados µLaw (sólo en EEUU)", + IDC_ULAW_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14, + 20,180,10 + GROUPBOX "Registro de sucesos",-1,7,40,196,48 + LTEXT "Registrar todas las llamadas en el siguiente archivo:", + -1,14,52,180,8 + EDITTEXT IDC_LOGFILE,14,67,180,12,ES_AUTOHSCROLL +END + +IDD_EDITPORTLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Líneas" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_PORT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "Aceptar",IDOK,174,7,50,14 + PUSHBUTTON "Cancelar",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nueva",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Editar",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Borrar",IDM_DELETE,174,84,50,14 +END + +IDD_EDITPORT DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Línea" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Activa",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,36,10 + LTEXT "&Descripción:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "&Número (MSN):",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "A&cción:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Deje las siguientes opciones vacías para usar la configuración por defecto correspondiente a esta línea.", + -1,14,77,200,16 + LTEXT "&Descolgar en",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "segundos",-1,92,103,69,8 + LTEXT "&Límitar a",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "segundos",-1,92,120,69,8 + LTEXT "&Mensaje:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Seleccionar ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Sonido:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Seleccionar ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Llamar &automáticamente al siguiente número:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "Aceptar",1,128,209,50,14 + PUSHBUTTON "Cancelar",2,181,209,50,14 +END + +IDD_EDITCALLERLIST DIALOGEX 0, 0, 263, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Números Conocidos" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_CALLER_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,192,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "Aceptar",IDOK,206,7,50,14 + PUSHBUTTON "Cancelar",IDCANCEL,206,24,50,14 + PUSHBUTTON "&Nuevo",IDM_NEW,206,50,50,14 + PUSHBUTTON "&Editar",IDM_EDIT,206,67,50,14 + PUSHBUTTON "&Borrar",IDM_DELETE,206,84,50,14 +END + +IDD_EDITCALLER DIALOG DISCARDABLE 0, 0, 238, 230 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Números" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,224,195 + CONTROL "&Activo",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,7,36,10 + LTEXT "&Nombre:",-1,14,25,80,8 + EDITTEXT IDC_DESCRIPTION,100,23,100,13,ES_AUTOHSCROLL + LTEXT "Número de &teléfono:",-1,14,42,80,8 + EDITTEXT IDC_MSN,100,40,100,13,ES_AUTOHSCROLL + LTEXT "A&cción:",-1,14,59,80,8 + COMBOBOX IDC_REACTION,100,57,100,80,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Deje las siguientes opciones vacías para usar la configuración por defecto correspondiente a este número.", + -1,14,77,200,16 + LTEXT "&Descolgar en",-1,14,103,45,8 + EDITTEXT IDC_DELAY,63,101,25,13,ES_AUTOHSCROLL + LTEXT "segundos",-1,92,103,69,8 + LTEXT "&Límitar a",-1,14,120,45,8 + EDITTEXT IDC_MAXTIME,63,118,25,13,ES_AUTOHSCROLL + LTEXT "segundos",-1,92,120,69,8 + LTEXT "&Mensaje:",-1,14,137,45,8 + EDITTEXT IDC_FILENAME,63,135,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Seleccionar ...",IDC_FILEDLG,168,134,55,14 + LTEXT "&Sonido:",-1,14,154,45,8 + EDITTEXT IDC_WAVENAME,63,152,99,13,ES_AUTOHSCROLL + PUSHBUTTON "Seleccionar ...",IDC_WAVEDLG,168,152,55,14 + LTEXT "Llamar automáticamente al siguiente númer&o:", + -1,15,177,105,16 + EDITTEXT IDC_FORWARD,128,180,95,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "Aceptar",1,128,209,50,14 + PUSHBUTTON "Cancelar",2,181,209,50,14 +END + +IDD_EDITACTIONLIST DIALOGEX 0, 0, 231, 194 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Acciones de control remoto" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_ACTION_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | + LVS_SORTASCENDING | WS_TABSTOP,7,7,160,180, + WS_EX_CLIENTEDGE + DEFPUSHBUTTON "Aceptar",IDOK,174,7,50,14 + PUSHBUTTON "Cancelar",IDCANCEL,174,24,50,14 + PUSHBUTTON "&Nueva",IDM_NEW,174,50,50,14 + PUSHBUTTON "&Editar",IDM_EDIT,174,67,50,14 + PUSHBUTTON "&Borrar",IDM_DELETE,174,84,50,14 +END + +IDD_EDITACTION DIALOG DISCARDABLE 0, 0, 207, 231 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Acción" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " ",-1,7,7,192,195 + CONTROL "&Activa",IDC_ENABLED,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,14,7,36,10 + LTEXT "Código &DTMF:",-1,14,25,50,8 + EDITTEXT IDC_DTMFCODE,75,23,50,13,ES_AUTOHSCROLL + LTEXT "Al marcar este código DTMF, hacer ...",-1, + 14,47,165,8 + CONTROL "Control &remoto del contestador, para escuchar o borrar los mensajes.", + IDC_REMOTECONTROL,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE | WS_GROUP | WS_TABSTOP,14,62,170,18 + CONTROL "&Introducir un nuevo número para ser llamado automáticamente cuando haya nuevos mensajes.", + IDC_SET_CALLBACK,"Button",BS_AUTORADIOBUTTON | BS_TOP | + BS_MULTILINE,14,84,170,18 + CONTROL "Desactivar el &contestador.",IDC_DEACTIVATE, + "Button",BS_AUTORADIOBUTTON,14,106,170,10 + CONTROL "C&errar CapiTel.",IDC_QUIT,"Button", + BS_AUTORADIOBUTTON,14,120,170,10 + CONTROL "Reiniciar el &ordenador.",IDC_REBOOT,"Button", + BS_AUTORADIOBUTTON,14,134,170,10 + CONTROL "Ejecutar un &programa externo:",IDC_EXECUTE,"Button", + BS_AUTORADIOBUTTON,14,148,170,10 + LTEXT "Pro&grama:",IDC_TEXT1,26,164,40,8 + EDITTEXT IDC_PROGRAM,70,163,120,13,ES_AUTOHSCROLL + LTEXT "Argu&mentos:",IDC_TEXT2,26,180,40,8 + EDITTEXT IDC_ARGUMENTS,70,179,120,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "Aceptar",1,96,210,50,14 + PUSHBUTTON "Cancelar",2,149,210,50,14 +END + +IDD_REGISTER DIALOG DISCARDABLE 0, 0, 207, 46 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Registro" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "&Nombre:",-1,7,11,30,8 + EDITTEXT IDC_REGNAME,40,8,80,13,ES_AUTOHSCROLL + LTEXT "&Código:",-1,7,27,30,8 + EDITTEXT IDC_REGCODE,40,24,80,13,ES_AUTOHSCROLL + DEFPUSHBUTTON "Aceptar",IDOK,150,7,50,14 + PUSHBUTTON "Cancelar",IDCANCEL,150,24,50,14 +END + +IDD_POPUP DIALOG DISCARDABLE 0, 0, 80, 37 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_TEXT1,5,5,70,8 + LTEXT "",IDC_TEXT2,5,15,70,8 + LTEXT "",IDC_TEXT3,5,25,70,8 +END + +IDD_MSGBOX DIALOG DISCARDABLE 0, 0, 275, 66 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,45,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,45,50,14 + PUSHBUTTON "&Yes",IDYES,164,45,50,14 + PUSHBUTTON "&No",IDNO,218,45,50,14 + ICON "",IDC_ICO,7,9,18,20 + LTEXT "",IDC_TEXT,40,9,228,24 +END + +IDD_MSGBOXEX DIALOG DISCARDABLE 0, 0, 275, 71 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "OK",IDOK,164,50,50,14 + PUSHBUTTON "Cancel",IDCANCEL,218,50,50,14 + PUSHBUTTON "&Yes",IDYES,164,50,50,14 + PUSHBUTTON "&No",IDNO,218,50,50,14 + ICON "",IDC_ICO,7,9,21,20 + LTEXT "",IDC_TEXT,40,9,228,8 + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,40,28,228,10 +END diff --git a/capitel/source.win/TOOLBAR.BMP b/capitel/source.win/TOOLBAR.BMP new file mode 100644 index 0000000000000000000000000000000000000000..a803d6477df36d781de1e3da9e38d26c703a132a GIT binary patch literal 1680 zcmZ8h!D{425UuTPdTJHX8jLZ=E<9DG^w3v&pAPs^MlL15K~VO7K+yX;b{K+itq1n{e|lc*E_Og@OyQ7 zj_}PV=pDYoDF~;VfW*_&6GeTFuXqaL=_Vp^BLHVBhFl~rggB9uei0&vCspCZR9@&R z2>#+fKM#aoVmu26zBhEKk)#I`9HGutw4gKmqDHG`lyX$8vPc!D50b^P%p&zCoXOS1 z6-i75D7buMysHhPo)^=|z~#VQYk{)61DA6o%2-Gh6*H}-1830^rE$<07#VlO?Rv)a z=*~fggB!@=X=m1ncIr**#duqj`=o?cL?+md{63BXc%6S4NcJU{s!oz?2u47!>2e#S zIY^aDm?z`VPzn0B$xv%IjJMN#B0m<|4Y>T=u^hXAaZ<)Sj+6*pXOSmAY-e=^k@AGP z9bNKTdlXXmnvn&Ikr`UsmRz@Co$xH%_xql=R1hi>Uk4vFvb&j&i>AVbb%Z|O#v$}W z`=Y;vqK1-*tPgm@$6P9qQHH@bVA)`f+IsWF0nvD#D5bLBin4K760O`pHF2J}E+f`? z_L1XyBn!3YRpB_)Bkr&a5RvGjTT3263#2qT`-jp%&-bLOv1G~Ga@%`15p$>me1R?) zfo*H{Hqv+F(TtIscF~q_S)_}F#%j^%2`K0Af;3UKQCSA7v;J;>fJxoPtv71|hZ_ts z`o&nb)aQ)VSwYdc7q*4JFC$z4X9046rW4$tixd|D@ohLh=my<3RXl{q7!kT)e>ieq z$^Yr6HU0?`yA31T({($2o<0v?zFXbNN|e_{*sQBK;$JdicxMQ}S-vzzY&k>T4RZ%m zAj3_}R6E8#_{Kh%1kCJ*z&)K)3ug%S4dL#h<>wZyv>RH{P3Sw_Ik=AF16-9=d^@N| zme`(3SkY4uD{w4mpW>12qcQd?+4sU^;0yZk3kx=Un6?8reG2m0=vw?#j`H~TOCMmQ zN8q=Sc4*?<;kO5@lCG2qxWAqK0LKTZ%Edm*LpST2K(@P?OCo{Gg4_dfj-l-eLJx1y z)qgKpTZqj;Djt-X<-$JdX|ROSM?+{5N~r4`P*7#=RC{fPH(VtL!aGah*<`xE|BIi# zW_<-tP*@Sz<)<#`(G03;;DB8OSHI%Jb*$&_K|v$-q*m!N;50UK2GzMvlZ%b;GrAkh u4yF3}oOHVX|Bt9O7Hf)AZpQG4mrwz7DMnx%q)fLbj;KcF3N<^G_uapC)*f^K literal 0 HcmV?d00001 diff --git a/capitel/source.win/TRAY_LRG.BMP b/capitel/source.win/TRAY_LRG.BMP new file mode 100644 index 0000000000000000000000000000000000000000..14fb4146de4e4b54d46367a2236de5a8fa9a551a GIT binary patch literal 868 zcmZuvJ#X7E5PhK!6j2*iYIN_~QGmv7-3#O=Xb1$40Rq$k0@#{jP2pehmNEV*-MS^t z6agNt??@H-Xe8e8N%x-aiR6!;=M$vs7xOp98RHA%1OmtT!P19U2XLV4^2AJt{eI8c z3YrE~4KaAzE2guSeHgxVjmPZ2>~n4EubuzYx({c`oWkF^ik$az&-dNPDZN5!A6m>x zJ>WHBr?AwhGC;Y7gT#yHY1fnGrdsOC5G`$ZSY+EmO!PIRXSdT)aV;N9{F{ z0crWS2$$dC=}eZOFF%E6;oXyO5K^_XHo&4SR+D;C)s=BiJAK|L>MG->uOnWN6m_Vp zf0{TwRvbxFn&xm!no_CB*cUNC6k#|fS!j#x?{M$v(3OGy4)^BoHO8XYMy^@R-l(`; z(`}1+?qU0C*m`7Ka0!BPiOra22go1D<3-*P^Ocb)i00&PAL9%E7P5wHj4!3iiiVA6 z`16RV8P=Pto7_X%!uOD9idkB%kP$l&@wB9B`T=so%B6497f%YV?AtHcrTWNi0-T)( US@zs->2Ka*m+Ho~^KF5XzgIQYtN;K2 literal 0 HcmV?d00001 diff --git a/capitel/source.win/TRAY_SML.BMP b/capitel/source.win/TRAY_SML.BMP new file mode 100644 index 0000000000000000000000000000000000000000..37a1e1607ebdc5c2da8eb2392bf5282535a607d0 GIT binary patch literal 758 zcmZvay-ve06on7zm2J^TfrSZ)l`$d`3kzcB9Wq57k&q}7Qk#ins$ZpBNBSsijFbf; zF_?30RDRRg=g8;l^QXr)9{YwoSsG7VGtzszHb^ zLQu!XpANB;CaVqHpI#bhHa2&eG5;#WB*vOmR+9Oxy;(up#1w{8RfbjbB5V-dL2}I` zc!on};*7N{VOEvl?8xh75k~s2!{o>gOFu*sQs2oKa?M--7dBTv9C9D}psel?`Slsh z1YF1NSdF@zu7=aKwM1}kr=x0AR%ILB<^ifNN2(n6VW>(nr`C_(OTL9N8&xt?>m4M( z4DX7;*zOVTfu~fs0JnLFdO)?E=Z?KjNNO>I15TP$4pc3N#&Yd042@D^J9&aUU#0WY zd6QF=ZjW&H>?168Av4HaSt)`{xhQ4S?|*vo!)$(g&*Hqb9^#eGn+e*pQ}##I0S literal 0 HcmV?d00001 diff --git a/capitel/source.win/capitel.c b/capitel/source.win/capitel.c new file mode 100644 index 0000000..5baf730 --- /dev/null +++ b/capitel/source.win/capitel.c @@ -0,0 +1,5174 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "..\..\..\units\common.src\bastypes.h" + +#include "capitel.h" +#include "..\..\util\source\register.h" +#include "..\..\..\units\common.src\cfg_file.h" +#include "..\..\..\units\common.src\util.h" +#include "..\..\common\source\global.h" +#include "..\..\common\source\version.h" +#include "..\..\answer\source\answer.h" +#include "..\..\..\units\common.src\os.h" +#include "..\..\..\units\common.src\num2nam.h" +#include "..\..\wave\source\alw2wav.h" + +typedef struct sCall +{ + int iNum; + int iState; + int iDuration; + int iIsDigital; + SYSTEMTIME sTime; + char cCallerName[256]; + char cCallerNameOrg[256]; + char cCalledPort[256]; + char cWavFileName[MAX_PATH]; + char cAlwFileName[MAX_PATH]; + char cIdxFileName[MAX_PATH]; +} +tCall; + +LANGID xLangID = 0; +HINSTANCE xAppInst = 0; +static tCall sLastCall; + +void capitel_init (void); +void capitel_exit (void); +void capitel_record_welcome (char *name); +void capitel_dorescan (void); + +int onlyDigits(char* s); + +#define WM_TRAY_CALLBACK WM_USER+10 + +#define MAINWNDCLASS "CapitelClass" +#define MAINWNDEXTRA (6 * sizeof(long)) + +#define MainWnd_GetShowTray(hwnd) \ + (GetWindowLong((hwnd),0)) + +#define MainWnd_SetShowTray(hwnd,uFlg) \ + (SetWindowLong((hwnd),0,(LONG)(uFlg))) + +#define MainWnd_GetHideMin(hwnd) \ + (GetWindowLong((hwnd),1*sizeof(long))) + +#define MainWnd_SetHideMin(hwnd,uFlg) \ + (SetWindowLong((hwnd),1*sizeof(long),(LONG)(uFlg))) + +#define MainWnd_GetTrayImgLst(hwnd) \ + ((HIMAGELIST)GetWindowLong((hwnd),2*sizeof(long))) + +#define MainWnd_SetTrayImgLst(hwnd,hImgLst) \ + (SetWindowLong((hwnd),2*sizeof(long),(LONG)(hImgLst))) + +#define MainWnd_GetTrayData(hwnd) \ + ((NOTIFYICONDATA*)GetWindowLong((hwnd),3*sizeof(long))) + +#define MainWnd_SetTrayData(hwnd,pData) \ + (SetWindowLong((hwnd),3*sizeof(long),(LONG)(pData))) + +#define MainWnd_GetTrayStatus(hwnd) \ + (GetWindowLong((hwnd),4*sizeof(long))) + +#define MainWnd_SetTrayStatus(hwnd,iStat) \ + (SetWindowLong((hwnd),4*sizeof(long),(LONG)(iStat))) + +#define MainWnd_GetToolTip(hwnd) \ + ((HWND)GetWindowLong((hwnd),5*sizeof(long))) + +#define MainWnd_SetToolTip(hwnd,hwndTTip) \ + (SetWindowLong((hwnd),5*sizeof(long),(LONG)(hwndTTip))) + +int CheckRegistration(char* name, char* code) +{ + if(!checkRegCode(name,code)) return 0; + + config_file_write_string(STD_CFG_FILE, REGISTER_NAME, name); + config_file_write_string(STD_CFG_FILE, REGISTER_CODE, code); + + return 1; +} + +static int iNumBitmap = 13; +static TBBUTTON tbButtons[] = /* fuer CreateToolbarEx() */ +{ + {0, IDM_TOGGLEACTIVATION ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {0, 0 ,0, TBSTYLE_SEP }, + {1, IDM_PLAY ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {2, IDM_PLAY_ALL ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {3, IDM_SAVE_AS ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {4, IDM_DELETE ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {0, 0 ,0, TBSTYLE_SEP }, + {5, IDM_PROPERTIES ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {6, IDM_PROP_PORTS ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, + {7, IDM_PROP_CALLERS ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, +#ifndef RECOTEL + {8, IDM_PROP_ACTIONS ,TBSTATE_ENABLED, TBSTYLE_BUTTON}, +#endif +}; + +HWND hwndMain = 0; +HWND hwndPopup = 0; +HMENU hPopupMenu = 0; + +static char cLastWavTmp[MAX_PATH]; + +int PreviousInstance(void); +int CenterWindow(HWND hwndChild, HWND hwndParent); +HWND CreateMainWindow(HINSTANCE hInstance, int nCmdShow); +int DisplayProperties(HWND hwnd); +LANGID GetDefaultLanguage(char* res_id); + +WNDPROC oldListProc; +LRESULT CALLBACK newListProc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK AboutProc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK PropPage1Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK PropPage2Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK PropPage3Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK PropPage4Proc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK EditPortListProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK EditPortProc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK EditCallerListProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK EditCallerProc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK EditActionListProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK EditActionProc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK RegisterDialogProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK PopupDialogProc(HWND, UINT, WPARAM, LPARAM); + +LRESULT CALLBACK MsgBoxProc(HWND, UINT, WPARAM, LPARAM); + +int MyMsgBox(HWND hwndOwner, + char* pText, char* pTitle, int fStyle, char* pIcon); + +int MyMsgBoxEx(HWND hwndOwner, + char* pText, char* pTitle, char* pChkText, int fStyle, + char* pIcon, char* pCfgFile, char* pCfgKey); + +void MainListInit(HWND hwndList); +int MainListInsertCall(HWND hwndList, HWND hwndTTip, tCall* pCall, int select); +tCall* MainListGetCall(HWND hwndList, int index); +void MainListUpdateIcon(HWND hwndList, int index); +void MainListSort(HWND hwndList, int iColumn); + +int AddToCallers(HWND hwnd, char* pFileName, char* pNumber); + +void sigFunc(short num, void *msg); + +void shExecute( char * ); +void shRecycle( char * ); + +int InitTrayIcon(HWND hwnd); +int UpdateTrayIcon(HWND hwnd); +int CleanupTrayIcon(HWND hwnd); +int GetTrayIconRect(RECT* pRect); + +int StoreWindowAttributes(HWND hwnd); +int RestoreWindowAttributes(HWND hwnd); + +int PlayCalls(HWND hwndList, int iPlayAll); +int GetSpecialFolderPath(HWND hwndOwner, int nFolder, char* pPathBuff); + +int AddToolTip(HWND hwndList, HWND hwndTTip, int iItemIdx, char* pText); +int DelToolTip(HWND hwndList, HWND hwndTTip, int iItemIdx); +int UpdateToolRect(HWND hwndList, HWND hwndTTip, int iItemIdx); +int UpdateAllToolRect(HWND hwndList, HWND hwndTTip); + +int SaveCall(tCall* pCall); +int ReadCall(tCall* pCall, char* pFileName); + + +/* + * + * WinMain() + * + * Erstellt das Hauptfenster und bearbeitet die + * dort eingehenden Messages. + * + */ + +int APIENTRY WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + MSG msg; + char* pArg; + HANDLE hAccel; + UCHAR cName[MAX_PATH]; + +//#ifdef RECOTEL +// if (time(0) > 921273393) return(1); +//#endif + + if(PreviousInstance()) return 0; + + xAppInst = hInstance; + xLangID = GetDefaultLanguage(MAKEINTRESOURCE(IDD_ABOUT)); + + pArg = strtok(lpCmdLine, " "); + while(pArg) + { + if(!stricmp(pArg,"/lang:eng")) + xLangID = MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); + else if(!stricmp(pArg,"/lang:hun")) + xLangID = MAKELANGID(LANG_HUNGARIAN, SUBLANG_DEFAULT); + else if(!stricmp(pArg,"/lang:ger")) + xLangID = MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN); + else if(!stricmp(pArg,"/lang:fre")) + xLangID = MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH); + else if(!stricmp(pArg,"/lang:spa")) + xLangID = MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH); + else if(!stricmp(pArg,"/lang:nor")) + xLangID = MAKELANGID(LANG_NORWEGIAN,SUBLANG_NORWEGIAN_BOKMAL); + else if(!stricmp(pArg,"/lang:dut")) + xLangID = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH); + else if(!stricmp(pArg,"/lang:fin")) + xLangID = MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT); + else if(!stricmp(pArg,"/lang:ita")) + xLangID = MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN); + else if(!stricmp(pArg,"/lang:nyn")) + xLangID = MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK); + else if(!stricmp(pArg,"/lang:dan")) + xLangID = MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT); + pArg = strtok(0, " "); + } + + if(IS_NT) SetThreadLocale(MAKELCID(xLangID,SORT_DEFAULT)); + + GetModuleFileName(0, cName, sizeof(cName)); + if(strrchr(cName,'\\')) strrchr(cName,'\\')[0] = 0; + SetCurrentDirectory(cName); + + hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(ID_MAIN)); + hPopupMenu = LoadMenu(hInstance, MAKEINTRESOURCE(ID_POPUP)); + hwndMain = CreateMainWindow(hInstance, nCmdShow); + + capitel_init(); + + while(GetMessage(&msg,0,0,0)) + { + if(!TranslateAccelerator(msg.hwnd, hAccel, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + +// capitel_exit(); + + return msg.wParam; +} + + +/* + * + * PreviousInstance() + * + * Ueberprueft, ob es schon eine Instanz von uns gibt. Wenn ja, + * wird das zugehoerige Fenster aktiviert. + * + */ + +int PreviousInstance(void) +{ + HWND hwnd; + char* pHelp, cName[MAX_PATH]; + + GetModuleFileName(0, cName, sizeof(cName)); + + pHelp = cName; + while(*pHelp) *pHelp = tolower(*pHelp == '\\' ? '_' : *pHelp), pHelp++; + CreateMutex(0, 1, cName); + if(GetLastError() != ERROR_ALREADY_EXISTS) return 0; + + hwnd = FindWindow(MAINWNDCLASS,0); + if(hwnd) + { + if(IsIconic(hwnd)) ShowWindow(hwnd, SW_RESTORE); + if(!IsWindowVisible(hwnd)) ShowWindow(hwnd, SW_SHOW); + SetForegroundWindow(hwnd); + } + + return 1; +} +/* + * + * CreateMainWindow() + * + * registriert die Hauptfenster-Klasse und erstellt + * das Hauptfenster. + * + */ + +HWND CreateMainWindow(HINSTANCE hInstance, int nCmdShow) +{ + HWND hwnd; + WNDCLASS wc; + LONG baseunit = GetDialogBaseUnits(); + char cTitle[256]; + + int initial_x = ((200 * LOWORD(baseunit)) / 4) + (GetSystemMetrics(SM_CXSIZEFRAME) * 2) + (GetSystemMetrics(SM_CXEDGE) * 2); + int initial_y = initial_x * 2 / 3; + + InitCommonControls(); + + wc.style = CS_HREDRAW|CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = MAINWNDEXTRA; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ID_MAIN)); + wc.hCursor = LoadCursor(0, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wc.lpszMenuName = MAKEINTRESOURCE(ID_MAIN); + wc.lpszClassName = MAINWNDCLASS; + + if(!RegisterClass(&wc)) return 0; + + LoadString(hInstance, STR_WINDOW_TITLE, cTitle, sizeof(cTitle)); + hwnd = CreateWindow(MAINWNDCLASS, cTitle, WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, 0, 0, hInstance, 0); + if(!hwnd) return 0; + + if(!RestoreWindowAttributes(hwnd)) + { + MoveWindow(hwnd, 0, 0, initial_x, initial_y, 0); + CenterWindow(hwnd, GetDesktopWindow()); + ShowWindow(hwnd, nCmdShow); + } + + UpdateWindow(hwnd); + + return hwnd; +} + + +/* + * + * WndProc() + * + * Hauptfenster-Prozedur + * + */ + +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + HWND hwndTbar = GetDlgItem(hwnd, ID_TOOLBAR); + HWND hwndList = GetDlgItem(hwnd, ID_LIST); + HWND hwndStat = GetDlgItem(hwnd, ID_STATUS); + HWND hwndTTip = MainWnd_GetToolTip(hwnd); + + switch(message) + { + case WM_CREATE: + { + NMHDR nmHdr; + +// capitel_init(); + + hwndTbar = CreateToolbarEx(hwnd, + WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS, + ID_TOOLBAR, iNumBitmap, xAppInst, ID_TOOLBARBMP, + tbButtons, sizeof(tbButtons)/sizeof(TBBUTTON), + 20, 18, 20, 18, sizeof(TBBUTTON)); + + hwndList = CreateWindowEx(WS_EX_CLIENTEDGE, + WC_LISTVIEW, 0, WS_CHILD|WS_VISIBLE|LVS_REPORT, + 0, 0, 0, 0, hwnd, (HMENU)ID_LIST, xAppInst, 0); + + hwndStat = CreateWindow(STATUSCLASSNAME, + 0, WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP, + 0, 0, 0, 0, hwnd, (HMENU)ID_STATUS, xAppInst, 0); + + oldListProc = (WNDPROC)SetWindowLong(hwndList, + GWL_WNDPROC, (ULONG)newListProc); + + hwndTTip = CreateWindow(TOOLTIPS_CLASS, 0, + TTS_ALWAYSTIP, 0, 0, 0, 0, hwnd, 0, xAppInst, 0); + MainWnd_SetToolTip(hwnd, hwndTTip); + SendMessage(hwndTTip, TTM_ACTIVATE, (WPARAM)1, 0); + + if(config_file_read_ulong(STD_CFG_FILE, + CAPITEL_ACTIVE,CAPITEL_ACTIVE_DEF)) + SendMessage(hwnd, WM_USER, (WPARAM)8, 0); + else + SendMessage(hwnd, WM_USER, (WPARAM)9, 0); + +#ifndef RECOTEL + if(!initRegistration() && + config_file_read_ulong(STD_CFG_FILE,DEFAULT_ANSW_DELAY,DEFAULT_ANSW_DELAY_DEF) != 999) + DialogBoxParam(xAppInst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, (DLGPROC)AboutProc, 1); +#endif + + MainListInit(hwndList); + InitTrayIcon(hwnd); + + nmHdr.hwndFrom = hwndList; + nmHdr.idFrom = ID_LIST; + nmHdr.code = LVN_ITEMCHANGED; + SendMessage(hwnd, WM_NOTIFY, (WPARAM)ID_LIST, (LPARAM)&nmHdr); + + if(!config_file_read_ulong(STD_CFG_FILE,CAPITEL_RUN_CNT,CAPITEL_RUN_CNT_DEF)) + PostMessage(hwnd, WM_COMMAND, (WPARAM)IDM_PROPERTIES, 0); + config_file_write_ulong(STD_CFG_FILE,CAPITEL_RUN_CNT,config_file_read_ulong(STD_CFG_FILE,CAPITEL_RUN_CNT,CAPITEL_RUN_CNT_DEF)+1); + + break; + } + +// case WM_SETTINGCHANGE: +// { +// NMHDR sNmHdr = { hwndList, ID_LIST, LVN_ITEMCHANGED }; +// SendMessage(hwnd, WM_NOTIFY, (WPARAM)ID_LIST, (LPARAM)&sNmHdr); +// break; +// } + + case WM_SYSCOLORCHANGE: + + SendMessage(hwndTbar, WM_SYSCOLORCHANGE, wParam, lParam); +// SendMessage(hwndTree, WM_SYSCOLORCHANGE, wParam, lParam); +// SendMessage(hwndGrip, WM_SYSCOLORCHANGE, wParam, lParam); + SendMessage(hwndList, WM_SYSCOLORCHANGE, wParam, lParam); + SendMessage(hwndStat, WM_SYSCOLORCHANGE, wParam, lParam); + + break; + + case WM_SIZE: + if(GetWindowLong(hwnd, GWL_USERDATA)) + SetWindowPos(hwndList, 0, 0, 0, LOWORD(lParam), HIWORD(lParam), SWP_NOZORDER); + else { + RECT rectStat, rectTbar; + SendMessage(hwndTbar, WM_SIZE, 0, 0); + SendMessage(hwndStat, WM_SIZE, 0, 0); + GetWindowRect(hwndTbar, &rectTbar); + GetWindowRect(hwndStat, &rectStat); + SetWindowPos(hwndList, 0, 0, rectTbar.bottom - rectTbar.top, LOWORD(lParam), HIWORD(lParam) - (rectStat.bottom - rectStat.top) - (rectTbar.bottom - rectTbar.top), SWP_NOZORDER); + } + break; + + case WM_ACTIVATE: + if(LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE) + SetFocus(hwndList); + return 0; + + case WM_MENUSELECT: + { + UINT help[2] = {0, 0}; + + if(HIWORD(wParam) & MF_POPUP && !(HIWORD(wParam) & MF_SYSMENU)) + help[0] = (UINT)lParam, help[1] = STR_MENUHELP_MAIN1; + + MenuHelp(message, wParam, lParam, (HMENU)help[0], xAppInst, hwndStat, help); + + return 0; + } + + case WM_NOTIFY: + + switch(((NMHDR*)lParam)->code) + { + case TTN_NEEDTEXT: + + ((TOOLTIPTEXT*)lParam)->hinst = xAppInst; + ((TOOLTIPTEXT*)lParam)->lpszText = (char*)((NMHDR*)lParam)->idFrom; + return 0; + + case LVN_COLUMNCLICK: + + MainListSort(hwndList, ((NM_LISTVIEW*)lParam)->iSubItem); + return 0; + + case LVN_ITEMCHANGED: + { + tCall* pCall; + int iIdx, iCnt, iSelCnt, iPlayCnt, iSelPlayCnt; + + iCnt = ListView_GetItemCount(hwndList); + iSelCnt = ListView_GetSelectedCount(hwndList); + + for(iIdx = iPlayCnt = iSelPlayCnt = 0; iIdx < iCnt; iIdx++) + { + pCall = MainListGetCall(hwndList, iIdx); + if(pCall->iDuration == 0) + continue; + iPlayCnt++; + if(ListView_GetItemState(hwndList,iIdx,LVIS_SELECTED)) + iSelPlayCnt++; + } + + SendMessage(hwndTbar, TB_ENABLEBUTTON, + (WPARAM)IDM_PLAY, MAKELPARAM(iSelPlayCnt,0)); + SendMessage(hwndTbar, TB_ENABLEBUTTON, + (WPARAM)IDM_PLAY_ALL, MAKELPARAM(iPlayCnt,0)); + SendMessage(hwndTbar, TB_ENABLEBUTTON, + (WPARAM)IDM_SAVE_AS, MAKELPARAM((iSelCnt == 1 && iSelPlayCnt == 1),0)); + SendMessage(hwndTbar, TB_ENABLEBUTTON, + (WPARAM)IDM_DELETE, MAKELPARAM(iSelCnt,0)); + + UpdateTrayIcon(hwnd); + return 0; + } + + case LVN_DELETEITEM: + { + int iCnt; + tCall* pCall; + + pCall = MainListGetCall(hwndList, ((NMLISTVIEW*)lParam)->iItem); + DelToolTip(hwndList, hwndTTip, ((NMLISTVIEW*)lParam)->iItem); + free(pCall); + + PostMessage(hwndList, WM_VSCROLL, 0, 0); + + iCnt = ListView_GetItemCount(hwndList) - 1; + SendMessage(hwndTbar, TB_ENABLEBUTTON, + (WPARAM)IDM_PLAY_ALL, MAKELPARAM(iCnt,0)); + + UpdateTrayIcon(hwnd); + return 0; + } + + case NM_DBLCLK: + + case NM_RETURN: + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_PLAY, 1), (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 0; + + case LVN_KEYDOWN: + if(((LV_KEYDOWN*)lParam)->wVKey == VK_DELETE) + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_DELETE, 1), (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 0; + + } + break; + + case WM_SYSCOMMAND: + + if(wParam == SC_MINIMIZE && MainWnd_GetHideMin(hwnd)) + { + RECT sRcFrm, sRcTo; + + GetWindowRect(hwnd, &sRcFrm); /* animation berechnen und */ + if(GetTrayIconRect(&sRcTo)) /* anzeigen ... */ + DrawAnimatedRects(hwnd, IDANI_CAPTION, &sRcFrm, &sRcTo); + + ShowWindow(hwnd, SW_HIDE); /* fenster unsichtbar machen */ + return 0; + } + break; + + case WM_INITMENU: + { + tCall* pCall; + char caller[256] = ""; + int iIdx, iCnt, iSelCnt, iPlayCnt, iSelPlayCnt; + + iCnt = ListView_GetItemCount(hwndList); + iSelCnt = ListView_GetSelectedCount(hwndList); + + for(iIdx = iPlayCnt = iSelPlayCnt = 0; iIdx < iCnt; iIdx++) + { + pCall = MainListGetCall(hwndList,iIdx); + if(pCall->iDuration == 0) + continue; + iPlayCnt++; + if(ListView_GetItemState(hwndList,iIdx,LVIS_SELECTED)) + iSelPlayCnt++; + } + + iIdx = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); + + if((HMENU)wParam == GetSubMenu(hPopupMenu,0)) + SetMenuDefaultItem((HMENU)wParam, IDM_PLAY, 0); + else if((HMENU)wParam == GetSubMenu(hPopupMenu,2)) + SetMenuDefaultItem((HMENU)wParam, IDM_SHOW, 0); + + ListView_GetItemText(hwndList, iIdx, 0, caller, sizeof(caller)); + + EnableMenuItem((HMENU)wParam, IDM_PLAY, + iSelPlayCnt ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_PLAY_ALL, + iPlayCnt ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_SAVE_AS, + (iSelCnt == 1 && iSelPlayCnt == 1) ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_DELETE, + iSelCnt ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_ADD_TO_CALLERS, + (iSelCnt == 1 && onlyDigits(caller)) ? MF_ENABLED : MF_GRAYED); + + CheckMenuItem((HMENU)wParam, IDM_TOPMOST, /* menu-item checken, */ + (GetWindowLong(hwnd,GWL_EXSTYLE) & WS_EX_TOPMOST) ? /* wenn topmost */ + MF_CHECKED : MF_UNCHECKED); + + CheckMenuItem((HMENU)wParam, IDM_SHOWTRAY, /* show-tray-status */ + MainWnd_GetShowTray(hwnd) ? MF_CHECKED : MF_UNCHECKED); /* checken */ + + CheckMenuItem((HMENU)wParam, IDM_MINHIDE, /* hide-minimized */ + MainWnd_GetHideMin(hwnd) ? MF_CHECKED : MF_UNCHECKED); /* checken */ + + return 0; + } + + case WM_TRAY_CALLBACK: /* user hat tray-icon geklickt */ + + if((int)wParam != 1) return 1; + switch(lParam) + { + case WM_LBUTTONDBLCLK: + + SetForegroundWindow(hwnd); + PostMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_SHOW,0), 0); + break; + + case WM_RBUTTONUP: + { + POINT pPos; + SetForegroundWindow(hwnd); + GetCursorPos(&pPos); + PostMessage(hwnd, WM_CONTEXTMENU, 0, MAKELPARAM(pPos.x,pPos.y)); + break; + } + } + return 0; + + case WM_COMMAND: + + switch(LOWORD(wParam)) { + +// dispatcher ist hier / wfehn + + case IDM_TOGGLEACTIVATION: + { + int active; + + active = !config_file_read_ulong( + STD_CFG_FILE, CAPITEL_ACTIVE, CAPITEL_ACTIVE_DEF); + + config_file_write_ulong( + STD_CFG_FILE, CAPITEL_ACTIVE, active); + + SendMessage(hwnd, + WM_USER, active ? (WPARAM)8 : (WPARAM)9, 0); + + return 0; + } + + case IDM_HIDEFRAMECONTROLS: + + if(GetWindowLong(hwnd, GWL_USERDATA)) + { + RECT rect; + ShowWindow(hwndTbar, 1); + ShowWindow(hwndStat, 1); + SetMenu(hwnd, (HMENU)GetWindowLong(hwnd, GWL_USERDATA)); + SetWindowLong(hwnd, GWL_USERDATA, 0); + GetClientRect(hwnd, &rect); + SendMessage(hwnd, WM_SIZE, 0, MAKELPARAM(rect.right-rect.left,rect.bottom-rect.top)); + CheckMenuItem(GetMenu(hwnd), + IDM_HIDEFRAMECONTROLS, MF_UNCHECKED); + CheckMenuItem(hPopupMenu, + IDM_HIDEFRAMECONTROLS, MF_UNCHECKED); + } + else + { + ShowWindow(hwndTbar, 0); + ShowWindow(hwndStat, 0); + SetWindowLong(hwnd, GWL_USERDATA, (LONG)GetMenu(hwnd)); + SetMenu(hwnd, 0); + CheckMenuItem(GetMenu(hwnd), + IDM_HIDEFRAMECONTROLS, MF_CHECKED); + CheckMenuItem(hPopupMenu, + IDM_HIDEFRAMECONTROLS, MF_CHECKED); + } + return 0; + + case IDM_PROPERTIES: + DisplayProperties(hwnd); + return 0; + + case IDM_PROP_PORTS: + DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITPORTLIST), + hwnd, (DLGPROC)EditPortListProc); + return 0; + + case IDM_PROP_CALLERS: + DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITCALLERLIST), + hwnd, (DLGPROC)EditCallerListProc); + return 0; + + case IDM_PROP_ACTIONS: + DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITACTIONLIST), + hwnd, (DLGPROC)EditActionListProc); + return 0; + + case IDM_EXIT: + + SendMessage(hwnd, WM_CLOSE, 0, 0); + return 0; + + case IDM_PLAY: + + answer_stop_bell(); + PlayCalls(hwndList, 0); /* play selected calls */ + return 0; + + case IDM_PLAY_ALL: + + answer_stop_bell(); + PlayCalls(hwndList, 1); /* play all calls */ + return 0; + + case IDM_DELETE: + { + tCall* pCall; + char cBuff[256]; + int iIdx, iWarn; + + answer_stop_bell(); + + iIdx = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); + if(iIdx < 0) return 0; /* nothing to delete -> get out */ + + for(iWarn = 0; iIdx >= 0; + iIdx = ListView_GetNextItem(hwndList,iIdx,LVNI_SELECTED)) + { + pCall = MainListGetCall(hwndList, iIdx); + if(pCall->iDuration && !pCall->iState) + iWarn++; /* unabgehoerte rufe zaehlen */ + } + + if(iWarn) /* immer warnen, wenn nicht */ + { /* abgehoerte rufe ausgewaehlt */ + LoadString(xAppInst,STR_ASK_REALYDELETE2,cBuff,sizeof(cBuff)); + if(MyMsgBox(hwnd,cBuff,APPSHORT,MB_YESNO,IDI_WARNING) + != IDYES) return 0; + } + else if(config_file_read_ulong(STD_CFG_FILE, + CONFIRM_CALL_DELETE,CONFIRM_CALL_DELETE_DEF)) + { + LoadString(xAppInst,STR_ASK_REALYDELETE,cBuff,sizeof(cBuff)); + if(MyMsgBox(hwnd,cBuff,APPSHORT,MB_YESNO,IDI_QUESTION) + != IDYES) return 0; + } + + while((iIdx = ListView_GetNextItem(hwndList,-1,LVNI_SELECTED)) >= 0) + { + pCall = MainListGetCall(hwndList, iIdx); + + remove(pCall->cWavFileName); + shRecycle(pCall->cAlwFileName); + shRecycle(pCall->cIdxFileName); + + ListView_DeleteItem(hwndList, iIdx); + } + + UpdateTrayIcon(hwnd); + + return 0; + } + + case IDM_SAVE_AS: + { + tCall* pCall; + int iIdx, iHlp; + OPENFILENAME sOpenFileName; + char cAlwFile[MAX_PATH], cWavFile[MAX_PATH], cPath[MAX_PATH], + cTmp1[256], cTmp2[256], cTitle[256], cFilt[256], * pHlp; + + iIdx = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); + if(iIdx < 0) return 0; + + pCall = MainListGetCall(hwndList, iIdx); + strcpy(cAlwFile, pCall->cAlwFileName); + + memset(&sOpenFileName, 0, sizeof(sOpenFileName)); + + LoadString(xAppInst,STR_FDLG_SAVEAS_FILE,cTmp1,sizeof(cTmp1)); + ListView_GetItemText(hwndList, iIdx, 0, cTmp2, sizeof(cTmp2)); + sprintf(cWavFile, cTmp1, cTmp2); + + for(pHlp = cWavFile; *pHlp; pHlp++) + { + switch(*pHlp) + { + case '<': case '>': case ':': case '|': case '/': + case '\\': case '\"': memmove(pHlp,pHlp+1,strlen(pHlp)); + } + } + + LoadString(xAppInst,STR_FDLG_SAVEAS,cTitle,sizeof(cTitle)); + iHlp = LoadString(xAppInst,STR_FDLG_SAVEAS_FILT,cFilt,sizeof(cFilt)); + cFilt[iHlp] = cFilt[iHlp+1] = 0; + + GetSpecialFolderPath(hwnd, CSIDL_PERSONAL, cTmp1); + config_file_read_string(STD_CFG_FILE, + WINDOW_SAVECALLAS_PATH, cPath, cTmp1); + + sOpenFileName.lStructSize = sizeof(sOpenFileName); + sOpenFileName.hwndOwner = hwnd; + sOpenFileName.lpstrFilter = cFilt; + sOpenFileName.lpstrFile = cWavFile; + sOpenFileName.nMaxFile = sizeof(cWavFile); + sOpenFileName.lpstrTitle = cTitle; + sOpenFileName.lpstrInitialDir = cPath; + sOpenFileName.Flags = OFN_EXPLORER|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST; + + if(GetSaveFileName(&sOpenFileName)) + { + UpdateWindow(hwnd); + SetCursor(LoadCursor(0,IDC_WAIT)); /* show wait cursor */ + + strncpy(cPath, cWavFile, /* extract */ + sOpenFileName.nFileOffset - 1); /* target */ + cPath[sOpenFileName.nFileOffset - 1] = 0; /* path and */ + config_file_write_string(STD_CFG_FILE, /* save to */ + WINDOW_SAVECALLAS_PATH, cPath); /* cfg-file */ + + iHlp = !config_file_read_ulong(STD_CFG_FILE, + GENERATE_16_BIT_WAVES, GENERATE_16_BIT_WAVES_DEF); + alw2wav(cAlwFile, cWavFile, (short)iHlp); + + SetCursor(LoadCursor(0,IDC_ARROW)); /* remove wait cur */ + } + + return 0; + } + + case IDM_ADD_TO_CALLERS: + { + int iIdx; + char cNumber[256]; + + iIdx = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); + if(iIdx < 0) return 0; + + ListView_GetItemText(hwndList, iIdx, 0, cNumber, sizeof(cNumber)); + if(!onlyDigits(cNumber)) return 0; + if(strchr(cNumber,'(')) strchr(cNumber,'(')[-1] = 0; + + AddToCallers(hwnd, NAMFILE, cNumber); + capitel_dorescan(); + return 0; + } + + case IDM_RECORD: + { + int iLen; + OPENFILENAME filename; + char buff[256], cTitle[256], cFilt[256]; + + strcpy(buff, DEFALWFILE); + memset(&filename, 0, sizeof(filename)); + LoadString(xAppInst,STR_FDLG_RECORD,cTitle,sizeof(cTitle)); + iLen = LoadString(xAppInst,STR_FDLG_RECORD_FILT,cFilt,sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = buff; + filename.nMaxFile = sizeof(buff); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_HIDEREADONLY|OFN_NOCHANGEDIR| + OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + if(GetSaveFileName(&filename)) + capitel_record_welcome(buff); + return 0; + } + + case IDM_TOPMOST: /* switch zwischen topmost und */ + /* non-topmost */ + SetWindowPos(hwnd, + (GetWindowLong(hwnd,GWL_EXSTYLE) & WS_EX_TOPMOST) ? + HWND_NOTOPMOST:HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); + return 0; + + case IDM_SHOWTRAY: /* tray-icon ein/aus-schalten */ + + if(!MainWnd_GetShowTray(hwnd)) + MainWnd_SetShowTray(hwnd, 1); + else + MainWnd_SetShowTray(hwnd, 0), MainWnd_SetHideMin(hwnd, 0); + + UpdateTrayIcon(hwnd); + return 0; + + case IDM_MINHIDE: /* hide-when-minimized ein/aus */ + + if(MainWnd_GetHideMin(hwnd)) + MainWnd_SetHideMin(hwnd, 0); + else + MainWnd_SetHideMin(hwnd, 1), MainWnd_SetShowTray(hwnd, 1); + + UpdateTrayIcon(hwnd); + return 0; + + case IDM_SELECTALL: + { + int iCnt, iIdx; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + ListView_SetItemState(hwndList, iIdx, LVIS_SELECTED, LVIS_SELECTED); + + return 0; + } + + case IDM_INVERTSEL: + { + int iCnt, iIdx; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + ListView_SetItemState(hwndList, iIdx, + ListView_GetItemState(hwndList,iIdx,LVIS_SELECTED) ? + 0 : LVIS_SELECTED, LVIS_SELECTED); + } + return 0; + } + + case IDM_SHOW: /* fenster wiederherstellen */ + + if(IsIconic(hwnd)) /* fenster ist minimiert? */ + ShowWindow(hwnd, SW_RESTORE); /* -> fenster restaurieren */ + else if(IsWindowVisible(hwnd)) /* fenster ist sichtbar? */ + ShowWindow(hwnd, SW_SHOW); /* -> einfach nur anzeigen */ + else + { + RECT sRcFrm; + WINDOWPLACEMENT sPlace; + + sPlace.length = sizeof(sPlace); + GetWindowPlacement(hwnd, &sPlace); /* animation berechnen und */ + if(GetTrayIconRect(&sRcFrm) ) /* anzeigen ... */ + DrawAnimatedRects(hwnd, IDANI_CAPTION, &sRcFrm, &sPlace.rcNormalPosition); + + ShowWindow(hwnd, SW_SHOW); /* fenster sichtbar machen */ + } + return 0; + + case IDM_HOMEPAGE: + + shExecute(APP_HOMEPAGE); + return 0; + + case IDM_README: + { + char cCmd[256]; + LoadString(xAppInst,STR_HELP_README,cCmd,sizeof(cCmd)); + shExecute(cCmd); + return 0; + } + + case IDM_ORDER: + { + char cCmd[256]; + LoadString(xAppInst,STR_HELP_ORDER,cCmd,sizeof(cCmd)); + shExecute(cCmd); + return 0; + } + + case IDM_ORDERBMT: + { + char cCmd[256]; + LoadString(xAppInst,STR_HELP_ORDERBMT,cCmd,sizeof(cCmd)); + shExecute(cCmd); + return 0; + } + + case IDM_LICENSE: + { + char cCmd[256]; + LoadString(xAppInst,STR_HELP_LICENSE,cCmd,sizeof(cCmd)); + shExecute(cCmd); + return 0; + } + + case IDM_WHATSNEW: + { + char cCmd[256]; + LoadString(xAppInst,STR_HELP_WHATSNEW,cCmd,sizeof(cCmd)); + shExecute(cCmd); + return 0; + } + + case IDM_ABOUT: + DialogBox(xAppInst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, (DLGPROC)AboutProc); + return 0; + + case IDM_REGISTER: + DialogBox(xAppInst, MAKEINTRESOURCE(IDD_REGISTER), hwnd, (DLGPROC)RegisterDialogProc); + return 0; + + } + break; + + case WM_CONTEXTMENU: + + if((HWND)wParam == hwndList) /* context-menu im hauptfenster */ + { + int iIdx; + POINT pt; + RECT rcItem; + + if(lParam == 0xFFFFFFFF) /* tastatur-event? */ + { + iIdx = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); + if(iIdx < 0) SetRectEmpty(&rcItem); /* rechteck holen */ + else ListView_GetItemRect(hwndList, iIdx, &rcItem, 1); + pt.x = rcItem.left + (rcItem.right - rcItem.left) / 2; /* mitte */ + pt.y = rcItem.top + (rcItem.bottom - rcItem.top) / 2; /* suchen */ + ClientToScreen(hwndList, &pt); /* in screen-koord. umwandeln */ + } + else + { + pt.x = LOWORD(lParam); + pt.y = HIWORD(lParam); + } + + TrackPopupMenu(GetSubMenu(hPopupMenu,0), + TPM_LEFTBUTTON|TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, 0); + } + else if((HWND)wParam == 0) /* context-menu im tray */ + { + TrackPopupMenu(GetSubMenu(hPopupMenu,2), + TPM_LEFTBUTTON|TPM_RIGHTBUTTON, LOWORD(lParam), HIWORD(lParam), 0, hwnd, 0); + } + break; + + case WM_ENDSESSION: + + SendMessage(hwnd, WM_CLOSE, 1, 0); + return 0; + + case WM_CLOSE: + + if(!wParam && MyMsgBoxEx(hwnd,MAKEINTRESOURCE(STR_ASK_REALYEXIT), + APPSHORT,MAKEINTRESOURCE(STR_ASK_REALYEXIT_CHK),MB_YESNO, + IDI_QUESTION,STD_CFG_FILE,CONFIRM_EXIT_PROGRAM) != IDYES) + return 0; + + CleanupTrayIcon(hwnd); /* tray-icon entfernen */ + StoreWindowAttributes(hwnd); /* fenster-position speichern */ + + break; + + case WM_DESTROY: + + capitel_exit(); + + DestroyWindow(MainWnd_GetToolTip(hwnd)); + DestroyWindow(hwndList); + DestroyWindow(hwndStat); + PostQuitMessage(0); + + break; + +// wfehn + + case WM_USER: + switch(wParam) + { + case 1: // warning + + MyMsgBox(hwnd, (char*)lParam, APPSHORT, MB_OK, IDI_WARNING); + free((char*)lParam); + + return 0; + + case 2: // critical error + + MyMsgBox(hwnd, (char*)lParam, APPSHORT, MB_OK, IDI_ERROR); + free((char*)lParam); + + return 0; + + case 3: // fatal error + + MyMsgBox(hwnd, (char*)lParam, APPSHORT, MB_OK, IDI_ERROR); + free((char*)lParam); + + return 0; + + case 4: // insert item + { + int index = MainListInsertCall(hwndList, + hwndTTip, &sLastCall, 1); + + if(!config_file_read_ulong(STD_CFG_FILE, + RESTORE_WINDOW_ON_NEW_CALL,RESTORE_WINDOW_ON_NEW_CALL_DEF)) + return 0; + + if(IsIconic(hwnd)) + ShowWindow(hwnd, SW_RESTORE); + else if(!IsWindowVisible(hwnd)) + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_SHOW,0), 0); + + return 0; + } + + case 5: // rescan + { + short rc; + tCall sCall; + FileInfoTyp FileInfo; + + ListView_DeleteAllItems(hwndList); + + for(rc = OsFindFirst(&FileInfo,CALL_MASK_IDX); + rc == 0; rc = OsFindNext(&FileInfo)) + { + memset(&sCall, 0, sizeof(sCall)); + if(!ReadCall(&sCall,FileInfo.FileName)) continue; + + better_string(sCall.cCallerName, NAMFILE, 2, + sCall.cCallerName, sCall.cCallerName); + + MainListInsertCall(hwndList, hwndTTip, &sCall, 0); + } + + OsFindClose(&FileInfo); + return 0; + } + + case 6: // show incoming-call-popup + { + int iPopFlag; + + if(hwndPopup) return 0; + + iPopFlag = config_file_read_ulong(STD_CFG_FILE, + SHOW_POPUP_WINDOW, SHOW_POPUP_WINDOW_DEF); + if(!iPopFlag) return 0; + + hwndPopup = CreateDialogParam(xAppInst, + MAKEINTRESOURCE(IDD_POPUP), hwnd, + (DLGPROC)PopupDialogProc, (LPARAM)iPopFlag); + + return 0; + } + + case 7: // destroy incoming-call-popup + { + if(!hwndPopup) return 0; + + DestroyWindow(hwndPopup); + hwndPopup = 0; + + return 0; + } + + case 8: // set status-text to 'registered to...' + { + char cFmt[256], cTxt[256], cName[128]; + + if(initRegistration()) + { + config_file_read_string(STD_CFG_FILE, + REGISTER_NAME, cName, REGISTER_NAME); + + LoadString(xAppInst, STR_TBAR_REG, cFmt, sizeof(cFmt)); + sprintf(cTxt,cFmt, APPNAME, cName); + } + else + { + LoadString(xAppInst, STR_TBAR_UNREG, cFmt, sizeof(cFmt)); + sprintf(cTxt, cFmt, APPNAME); + } + + SendMessage(hwndStat, SB_SETTEXT, 0, (LPARAM)cTxt); + CheckMenuItem(GetMenu(hwnd), + IDM_TOGGLEACTIVATION, MF_CHECKED); + CheckMenuItem(hPopupMenu, + IDM_TOGGLEACTIVATION, MF_CHECKED); + + UpdateTrayIcon(hwnd); + + return 0; + } + + case 9: // set status-text to 'disabled...' + { + char cTxt[256]; + + LoadString(xAppInst, STR_TBAR_DEACTIVATED, cTxt, sizeof(cTxt)); + SendMessage(hwndStat, SB_SETTEXT, 0, (LPARAM)cTxt); + + CheckMenuItem(GetMenu(hwnd), + IDM_TOGGLEACTIVATION, MF_UNCHECKED); + CheckMenuItem(hPopupMenu, + IDM_TOGGLEACTIVATION, MF_UNCHECKED); + + UpdateTrayIcon(hwnd); + + return 0; + } + case 10: // set status-text to 'converting...' + { + char cTxt[256]; + + LoadString(xAppInst, STR_TBAR_CONVERTING, cTxt, sizeof(cTxt)); + SendMessage(hwndStat, SB_SETTEXT, 0, (LPARAM)cTxt); + + return 0; + } + case 11: // set status-text to 'recording welcome text...' + { + char cTxt[256]; + + LoadString(xAppInst, STR_TBAR_RECWELCOME, cTxt, sizeof(cTxt)); + SendMessage(hwndStat, SB_SETTEXT, 0, (LPARAM)cTxt); + + return 0; + } + } + break; + + } + + return DefWindowProc(hwnd, message, wParam, lParam); + +} + + +/* + * + * newListProc() + * + * mit dieser Funktion wird das ListView-Control + * unterklassiert, damit es keine WM_COMMAND-messages + * verschluckt. + * + */ + +LRESULT CALLBACK newListProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch(message) + { + case WM_HSCROLL: + case WM_VSCROLL: + UpdateAllToolRect(hwnd, MainWnd_GetToolTip(GetParent(hwnd))); + break; + + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_MBUTTONDOWN: + case WM_MBUTTONUP: + case WM_MOUSEMOVE: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + { + MSG msg = { hwnd, message, wParam, lParam }; + SendMessage(MainWnd_GetToolTip(GetParent(hwnd)), + TTM_RELAYEVENT, 0, (LPARAM)&msg); + break; + } + + case WM_COMMAND: + if(!lParam) + return SendMessage(GetParent(hwnd), message, wParam, lParam); + break; + + } + return CallWindowProc(oldListProc, hwnd, message, wParam, lParam); +} + +/* + * + * DisplayProperties() + * + * ™ffnet den Properties-Dialog. + * + */ + +int DisplayProperties(HWND hwnd) +{ + int iResult; + PROPSHEETPAGE page[4]; + PROPSHEETHEADER header; + char* ppText[5], cBuff[256]; + int i=0; + + LoadString(xAppInst, STR_POPWIN_NONE, cBuff, sizeof(cBuff)); + ppText[0] = strdup(cBuff); + LoadString(xAppInst, STR_POPWIN_TOPLEFT, cBuff, sizeof(cBuff)); + ppText[1] = strdup(cBuff); + LoadString(xAppInst, STR_POPWIN_TOPRIGHT, cBuff, sizeof(cBuff)); + ppText[2] = strdup(cBuff); + LoadString(xAppInst, STR_POPWIN_BOTTOMLEFT, cBuff, sizeof(cBuff)); + ppText[3] = strdup(cBuff); + LoadString(xAppInst, STR_POPWIN_BOTTOMRIGHT, cBuff, sizeof(cBuff)); + ppText[4] = strdup(cBuff); + + memset(page, 0, sizeof(page)); + memset(&header, 0, sizeof(header)); + + i = 0; + + page[i].dwSize = sizeof(PROPSHEETPAGE); + page[i].dwFlags = PSP_DLGINDIRECT; + page[i].hInstance = xAppInst; + page[i].pResource = LoadResource(0, + FindResource(0,MAKEINTRESOURCE(IDD_PROPPAGE1),RT_DIALOG)); + page[i].pfnDlgProc = (DLGPROC)PropPage1Proc; + page[i++].lParam = (LPARAM)ppText; + + page[i].dwSize = sizeof(PROPSHEETPAGE); + page[i].dwFlags = PSP_DLGINDIRECT; + page[i].hInstance = xAppInst; + page[i].pResource = LoadResource(0, + FindResource(0,MAKEINTRESOURCE(IDD_PROPPAGE2),RT_DIALOG)); + page[i++].pfnDlgProc = (DLGPROC)PropPage2Proc; + +#ifndef RECOTEL + page[i].dwSize = sizeof(PROPSHEETPAGE); + page[i].dwFlags = PSP_DLGINDIRECT; + page[i].hInstance = xAppInst; + page[i].pResource = LoadResource(0, + FindResource(0,MAKEINTRESOURCE(IDD_PROPPAGE3),RT_DIALOG)); + page[i++].pfnDlgProc = (DLGPROC)PropPage3Proc; +#endif + + page[i].dwSize = sizeof(PROPSHEETPAGE); + page[i].dwFlags = PSP_DLGINDIRECT; + page[i].hInstance = xAppInst; + page[i].pResource = LoadResource(0, + FindResource(0,MAKEINTRESOURCE(IDD_PROPPAGE4),RT_DIALOG)); + page[i++].pfnDlgProc = (DLGPROC)PropPage4Proc; + + header.dwSize = sizeof(PROPSHEETHEADER); + header.dwFlags = PSH_NOAPPLYNOW|PSH_PROPTITLE|PSH_PROPSHEETPAGE; + header.hwndParent = hwnd; + header.hInstance = xAppInst; + header.pszCaption = APPSHORT; + header.nPages = i; + header.nStartPage = 0; + header.ppsp = page; + + iResult = PropertySheet(&header); + + if(iResult) answer_listen(); + + free(ppText[0]); + free(ppText[1]); + free(ppText[2]); + free(ppText[3]); + free(ppText[4]); + + FreeResource((HGLOBAL)page[0].pResource); + FreeResource((HGLOBAL)page[1].pResource); + FreeResource((HGLOBAL)page[2].pResource); + FreeResource((HGLOBAL)page[3].pResource); + + return iResult; +} + + +/* + * + * AboutProc() + * + * AboutDialog-Prozedur + * + */ + +LRESULT CALLBACK AboutProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + char cFmt[256], cTxt[256]; + + LoadString(xAppInst, STR_ABOUT1, cFmt, sizeof(cFmt)); + sprintf(cTxt, cFmt, APPVER); + SetDlgItemText(hwnd, IDC_TEXT1, cTxt); + + LoadString(xAppInst, STR_ABOUT2, cFmt, sizeof(cFmt)); + sprintf(cTxt, cFmt, APPDATE); + SetDlgItemText(hwnd, IDC_TEXT2, cTxt); + + LoadString(xAppInst, STR_ABOUT3, cFmt, sizeof(cFmt)); + sprintf(cTxt, cFmt, APP_AUTOR_1, APP_AUTOR_2); + SetDlgItemText(hwnd, IDC_TEXT3, cTxt); + + if(!lParam) + { + CenterWindow(hwnd, GetWindow(hwnd,GW_OWNER)); + } + else + { + LoadString(xAppInst, STR_ABOUT_UNREG1, cTxt, sizeof(cTxt)); + SetDlgItemText(hwnd, IDC_TEXT4, cTxt); + + LoadString(xAppInst, STR_ABOUT_UNREG2, cTxt, sizeof(cTxt)); + SetDlgItemText(hwnd, IDC_TEXT5, cTxt); + + EnableWindow(GetDlgItem(hwnd, IDOK), 0); + SetWindowLong(hwnd, DWL_USER, 1); + SetTimer(hwnd, TID_REGTIMER, 10000, 0); + + CenterWindow(hwnd, GetDesktopWindow()); + } + return 1; + } + + case WM_TIMER: + + if((int)wParam == TID_REGTIMER) + { + EnableWindow(GetDlgItem(hwnd, IDOK), 1); + SetWindowLong(hwnd, DWL_USER, 0); + KillTimer(hwnd, TID_REGTIMER); + } + return 1; + + case WM_COMMAND: + + if(!GetWindowLong(hwnd, DWL_USER)) + EndDialog(hwnd, 1); + + return 1; + } + + return 0; +} + + +/* + * + * PropPage1Proc() ... PropPage4Proc() + * + * Dialog-Prozeduren fr die einzelnen + * Seiten des Properties-Dialogs. + * + */ + +LRESULT CALLBACK PropPage1Proc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + char cVal[128], cDef[128]; + char** ppText = (char**)((PROPSHEETPAGE*)lParam)->lParam; + + /* werte aus konfig-datei lesen und + dialog-controls initialisieren */ + + /* groupbox "rufannahme" */ + + ltoa(DEFAULT_ANSW_DELAY_DEF,cDef,10); + config_file_read_string(STD_CFG_FILE, + DEFAULT_ANSW_DELAY, cVal, cDef); + SetDlgItemText(hwnd, IDC_ANSWER_DELAY, cVal); + + ltoa(DEFAULT_REC_TIME_DEF,cDef,10); + config_file_read_string(STD_CFG_FILE, + DEFAULT_REC_TIME, cVal, cDef); + SetDlgItemText(hwnd, IDC_RECORD_TIME, cVal); + + ltoa(MAX_SILENCE_TIME_DEF,cDef,10); + config_file_read_string(STD_CFG_FILE, + MAX_SILENCE_TIME, cVal, cDef); + SetDlgItemText(hwnd, IDC_SILENCE, cVal); + + /* groupbox "anzeige" */ + + CheckDlgButton(hwnd, IDC_RESTORE_WINDOW, + config_file_read_ulong(STD_CFG_FILE, + RESTORE_WINDOW_ON_NEW_CALL,RESTORE_WINDOW_ON_NEW_CALL_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwnd, IDC_IGNORE_EMPTY, + config_file_read_ulong(STD_CFG_FILE, + IGNORE_EMPTY_CALLS,IGNORE_EMPTY_CALLS_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwnd, IDC_EXPAND_CALLER_ID, + config_file_read_ulong(STD_CFG_FILE, + EXPAND_CALLER_ID,EXPAND_CALLER_ID_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwnd, IDC_CONFIRM_DELETE, + config_file_read_ulong(STD_CFG_FILE, + CONFIRM_CALL_DELETE,CONFIRM_CALL_DELETE_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwnd, IDC_IS_CALLER_ID, + config_file_read_ulong(STD_CFG_FILE, + CAPITEL_IS_CALLER_ID,CAPITEL_IS_CALLER_ID_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + SendDlgItemMessage(hwnd, IDC_POPUPWIN, CB_ADDSTRING, 0, (LPARAM)ppText[0]); + SendDlgItemMessage(hwnd, IDC_POPUPWIN, CB_ADDSTRING, 0, (LPARAM)ppText[1]); + SendDlgItemMessage(hwnd, IDC_POPUPWIN, CB_ADDSTRING, 0, (LPARAM)ppText[2]); + SendDlgItemMessage(hwnd, IDC_POPUPWIN, CB_ADDSTRING, 0, (LPARAM)ppText[3]); + SendDlgItemMessage(hwnd, IDC_POPUPWIN, CB_ADDSTRING, 0, (LPARAM)ppText[4]); + + SendDlgItemMessage(hwnd, IDC_POPUPWIN, CB_SETCURSEL, + config_file_read_ulong(STD_CFG_FILE, + SHOW_POPUP_WINDOW,SHOW_POPUP_WINDOW_DEF), 0); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_APPLY) + { + char buff[256]; + + /* groupbox "rufannahme" */ + + GetDlgItemText(hwnd, IDC_ANSWER_DELAY, buff, sizeof(buff)); + config_file_write_ulong(STD_CFG_FILE, + DEFAULT_ANSW_DELAY, atoi(buff)); + + GetDlgItemText(hwnd, IDC_RECORD_TIME, buff, sizeof(buff)); + config_file_write_ulong(STD_CFG_FILE, + DEFAULT_REC_TIME, atoi(buff)); + + GetDlgItemText(hwnd, IDC_SILENCE, buff, sizeof(buff)); + config_file_write_ulong(STD_CFG_FILE, + MAX_SILENCE_TIME, atoi(buff)); + + /* groupbox "anzeige" */ + + config_file_write_ulong(STD_CFG_FILE, RESTORE_WINDOW_ON_NEW_CALL, + !!IsDlgButtonChecked(hwnd, IDC_RESTORE_WINDOW)); + + config_file_write_ulong(STD_CFG_FILE, IGNORE_EMPTY_CALLS, + !!IsDlgButtonChecked(hwnd, IDC_IGNORE_EMPTY)); + + config_file_write_ulong(STD_CFG_FILE, EXPAND_CALLER_ID, + !!IsDlgButtonChecked(hwnd, IDC_EXPAND_CALLER_ID)); + + config_file_write_ulong(STD_CFG_FILE, CONFIRM_CALL_DELETE, + !!IsDlgButtonChecked(hwnd, IDC_CONFIRM_DELETE)); + + config_file_write_ulong(STD_CFG_FILE, CAPITEL_IS_CALLER_ID, + !!IsDlgButtonChecked(hwnd, IDC_IS_CALLER_ID)); + + config_file_write_ulong(STD_CFG_FILE, SHOW_POPUP_WINDOW, + SendDlgItemMessage(hwnd,IDC_POPUPWIN,CB_GETCURSEL,0,0)); + } + return 1; + } + + return 0; +} + + +LRESULT CALLBACK PropPage2Proc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + char cFile[MAX_PATH]; + + /* werte aus konfig-datei lesen und + dialog-controls initialisieren */ + + /* groupbox "ansagetext" */ + + config_file_read_string(STD_CFG_FILE, + WELCOME_WAVE, cFile, WELCOME_WAVE_DEF); + SetDlgItemText(hwnd, IDC_WELCOME_TEXT, cFile); + + /* groupbox "klingel" */ + + CheckDlgButton(hwnd, IDC_WAVE_RINGING, + config_file_read_ulong(STD_CFG_FILE, + PLAY_RINGRING_WAVE,PLAY_RINGRING_WAVE_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + config_file_read_string(STD_CFG_FILE, + RINGRING_WAVE, cFile, RINGRING_WAVE_DEF); + SetDlgItemText(hwnd, IDC_RINGING_WAVE, cFile); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_APPLY) + { + char buff[256]; + + /* groupbox "ansagetext" */ + + GetDlgItemText(hwnd, IDC_WELCOME_TEXT, buff, sizeof(buff)); + config_file_write_string(STD_CFG_FILE, WELCOME_WAVE, buff); + + /* groupbox "klingel" */ + + config_file_write_ulong(STD_CFG_FILE, PLAY_RINGRING_WAVE, !!IsDlgButtonChecked(hwnd, IDC_WAVE_RINGING)); + + GetDlgItemText(hwnd, IDC_RINGING_WAVE, buff, sizeof(buff)); + config_file_write_string(STD_CFG_FILE, RINGRING_WAVE, buff); + } + return 1; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDC_FILEDLG: + { + int iLen; + OPENFILENAME filename; + char cFile[MAX_PATH], cTitle[256], cFilt[256]; + + LoadString(xAppInst, STR_FDLG_WELCOME, cTitle, sizeof(cTitle)); + iLen = LoadString(xAppInst, STR_FDLG_WELCOME_FILT, cFilt, sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + GetDlgItemText(hwnd, IDC_WELCOME_TEXT, cFile, sizeof(cFile)); + + memset(&filename, 0, sizeof(filename)); + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = cFile; + filename.nMaxFile = sizeof(cFile); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&filename)) + { + char cDir[MAX_PATH]; + GetModuleFileName(0, cDir, sizeof(cDir)); + if(strrchr(cDir,'\\')) *strrchr(cDir,'\\') = 0; + if(strncmp(cFile,cDir,strlen(cDir))) + SetDlgItemText(hwnd, IDC_WELCOME_TEXT, cFile); + else + SetDlgItemText(hwnd, IDC_WELCOME_TEXT,cFile+strlen(cDir)+1); + } + return 1; + } + + case IDC_WAVEDLG: + { + int iLen; + OPENFILENAME filename; + char cFile[MAX_PATH], cTitle[256], cFilt[256]; + + LoadString(xAppInst, STR_FDLG_RINGING, cTitle, sizeof(cTitle)); + iLen = LoadString(xAppInst, STR_FDLG_RINGING_FILT, cFilt, sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + GetDlgItemText(hwnd, IDC_RINGING_WAVE, cFile, sizeof(cFile)); + + memset(&filename, 0, sizeof(filename)); + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = cFile; + filename.nMaxFile = sizeof(cFile); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&filename)) + { + char cDir[MAX_PATH]; + GetModuleFileName(0, cDir, sizeof(cDir)); + if(strrchr(cDir,'\\')) *strrchr(cDir,'\\') = 0; + if(strncmp(cFile,cDir,strlen(cDir))) + SetDlgItemText(hwnd, IDC_RINGING_WAVE, cFile); + else + SetDlgItemText(hwnd, IDC_RINGING_WAVE,cFile+strlen(cDir)+1); + } + + return 1; + } + + case IDC_EDIT_PORTS: + + DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITPORTLIST), + hwnd, (DLGPROC)EditPortListProc); + + return 1; + + case IDC_EDIT_CALLERS: + + DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITCALLERLIST), + hwnd, (DLGPROC)EditCallerListProc); + + return 1; + + } + return 1; + + } + + return 0; +} + + +LRESULT CALLBACK PropPage3Proc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + char cVal[1024]; + + /* werte aus konfig-datei lesen und + dialog-controls initialisieren */ + + CheckDlgButton(hwnd, IDC_DTMF_SUPPORT, + config_file_read_ulong(STD_CFG_FILE, + DETECT_DTMF_TONES,DETECT_DTMF_TONES_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + config_file_read_string(STD_CFG_FILE, + CALL_BACK_NUMBER, cVal, CALL_BACK_NUMBER_DEF); + SetDlgItemText(hwnd, IDC_FORWARD, cVal); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_APPLY) + { + char buff[256]; + + config_file_write_ulong(STD_CFG_FILE,DETECT_DTMF_TONES, + !!IsDlgButtonChecked(hwnd, IDC_DTMF_SUPPORT)); + + GetDlgItemText(hwnd, IDC_FORWARD, buff, sizeof(buff)); + config_file_write_string(STD_CFG_FILE, CALL_BACK_NUMBER, buff); + + } + return 1; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDC_EDIT_ACTIONS: + + DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITACTIONLIST), + hwnd, (DLGPROC)EditActionListProc); + + return 1; + } + return 1; + + } + return 0; +} + + +LRESULT CALLBACK PropPage4Proc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + char cFile[MAX_PATH]; + + /* werte aus konfig-datei lesen und + dialog-controls initialisieren */ + + CheckDlgButton(hwnd, IDC_ULAW_CODEC, + config_file_read_ulong(STD_CFG_FILE, + CAPITEL_CODEC_ULAW,CAPITEL_CODEC_ULAW_DEF) ? + BST_CHECKED : BST_UNCHECKED); + + config_file_read_string(STD_CFG_FILE, + NAME_OF_LOG_FILE, cFile, NAME_OF_LOG_FILE_DEF); + SetDlgItemText(hwnd, IDC_LOGFILE, cFile); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_APPLY) + { + char buff[256]; + + config_file_write_ulong(STD_CFG_FILE, CAPITEL_CODEC_ULAW, + !!IsDlgButtonChecked(hwnd, IDC_ULAW_CODEC)); + + GetDlgItemText(hwnd, IDC_LOGFILE, buff, sizeof(buff)); + config_file_write_string(STD_CFG_FILE, NAME_OF_LOG_FILE, buff); + } + return 1; + } + return 0; +} + +/* ------------------------------------------------------------------------ + * die folgenden funktionen dienen zum editieren der port-liste + * ------------------------------------------------------------------------ */ + +typedef enum +{ + eUnchanged = -2, eDefault = -1, + eNormal = 0, eBusy = 1, eRefuse = 2, eUnavailable = 3 +} +tReaction; + +typedef struct sPort +{ + int fActive; + char cDsc[256]; + char cMsn[256]; + char cWelcomeWave[1024]; + char cRingingWave[1024]; + char cForwardNumber[1024]; + tReaction eReact; + char cOldReact[1024]; + char cAnsDly[1024]; + char cMaxRec[1024]; +} +tPort; + +typedef struct sCaller +{ + int fActive; + char cDsc[256]; + char cClip[256]; + char cWelcomeWave[1024]; + char cRingingWave[1024]; + char cForwardNumber[1024]; + tReaction eReact; + char cOldReact[1024]; + char cAnsDly[1024]; + char cMaxRec[1024]; +} +tCaller; + +typedef enum +{ + eRemoteControl, + eReboot, + eDeactivate, + eQuit, + eSetCallback, + eCommandLine +} +tActionType; + +typedef struct sAction +{ + int fActive; + char cDtmf[256]; + tActionType eType; + char cCmdProg[1024]; + char cCmdArgs[1024]; +} +tAction; + + +void* GetSelectedPtr(HWND hwndList); +void* GetItemPtr(HWND hwndList, int iIdx); + + +int InsertPort(HWND hwndList, tPort* pPort); +int UpdatePort(HWND hwndList, tPort* pPort); +int DelPort(HWND hwndList, tPort* pPort); + +#define GetSelectedPort(hwnd) \ + ((tPort*)GetSelectedPtr((hwnd))) +#define GetItemPort(hwnd,idx) \ + ((tPort*)GetItemPtr((hwnd),(idx))) + +int LoadPortList(HWND hwndList, char* pFileName); +int SavePortList(HWND hwndList, char* pFileName); +int FreePortList(HWND hwndList); + + +int InsertCaller(HWND hwndList, tCaller* pCaller); +int UpdateCaller(HWND hwndList, tCaller* pCaller); +int DelCaller(HWND hwndList, tCaller* pCaller); + +#define GetSelectedCaller(hwnd) \ + ((tCaller*)GetSelectedPtr((hwnd))) +#define GetItemCaller(hwnd,idx) \ + ((tCaller*)GetItemPtr((hwnd),(idx))) + +int LoadCallerList(HWND hwndList, char* pFileName); +int SaveCallerList(HWND hwndList, char* pFileName); +int FreeCallerList(HWND hwndList); + + +int InsertAction(HWND hwndList, tAction* pAction); +int UpdateAction(HWND hwndList, tAction* pAction); +int DelAction(HWND hwndList, tAction* pAction); + +#define GetSelectedAction(hwnd) \ + ((tAction*)GetSelectedPtr((hwnd))) +#define GetItemAction(hwnd,idx) \ + ((tAction*)GetItemPtr((hwnd),(idx))) + +int LoadActionList(HWND hwndList, char* pFileName); +int SaveActionList(HWND hwndList, char* pFileName); +int FreeActionList(HWND hwndList); + + +void* GetSelectedPtr(HWND hwndList) +{ + int iIdx; + + iIdx = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); + if(iIdx < 0) return 0; + + return GetItemPtr(hwndList, iIdx); +} + +void* GetItemPtr(HWND hwndList, int iIdx) +{ + LV_ITEM sItem; + + sItem.mask = LVIF_PARAM; + sItem.iItem = iIdx; + sItem.iSubItem = 0; + + if(!ListView_GetItem(hwndList,&sItem)) return 0; + else return (void*)sItem.lParam; +} + +int CALLBACK SortPortsFunc( + LPARAM lParam1, + LPARAM lParam2, + LPARAM lParamSort) +{ + tPort* pPort1, * pPort2; + + pPort1 = (tPort*)lParam1; + pPort2 = (tPort*)lParam2; + + return strnicmp(pPort1->cDsc, pPort2->cDsc, strlen(pPort1->cDsc)); +} + +int InsertPort(HWND hwndList, tPort* pPort) +{ + int iIdx; + LV_ITEM sItem; + + memset(&sItem, 0, sizeof(sItem)); + sItem.mask = LVIF_PARAM; + sItem.iItem = ListView_GetItemCount(hwndList); + sItem.iSubItem = 0; + sItem.lParam = (LPARAM)pPort; + + iIdx = ListView_InsertItem(hwndList, &sItem); + UpdatePort(hwndList, pPort); + + return 1; +} + +int UpdatePort(HWND hwndList, tPort* pPort) +{ + int iIdx; + RECT rcClient; + LV_ITEM sItem; + LV_FINDINFO sFind; + + sFind.flags = LVFI_PARAM; + sFind.lParam = (LPARAM)pPort; + + iIdx = ListView_FindItem(hwndList, -1, &sFind); + if(iIdx < 0) return 0; + + sItem.mask = LVIF_IMAGE; + sItem.iItem = iIdx; + sItem.iSubItem = 0; + sItem.iImage = pPort->fActive; + ListView_SetItem(hwndList, &sItem); + + ListView_SetItemText(hwndList, iIdx, 0, pPort->cDsc); + ListView_SetItemText(hwndList, iIdx, 1, pPort->cMsn); + + ListView_SortItems(hwndList, SortPortsFunc, 0); + + GetClientRect(hwndList, &rcClient); + ListView_SetColumnWidth(hwndList, 1, + rcClient.right - ListView_GetColumnWidth(hwndList,0)); + + return 1; +} + +int DelPort(HWND hwndList, tPort* pPort) +{ + int iIdx; + RECT rcClient; + LV_FINDINFO sFind; + + sFind.flags = LVFI_PARAM; + sFind.lParam = (LPARAM)pPort; + + iIdx = ListView_FindItem(hwndList, -1, &sFind); + if(iIdx < 0) return 0; + + ListView_DeleteItem(hwndList, iIdx); + + GetClientRect(hwndList, &rcClient); + ListView_SetColumnWidth(hwndList, 1, + rcClient.right - ListView_GetColumnWidth(hwndList,0)); + + free(pPort); + + return 1; +} + +int LoadPortList(HWND hwndList, char* pFileName) +{ + FILE* pFile; + tPort* pPort; + char cLine[4096], * pHlp; + + pFile = fopen(pFileName, "r"); + if(!pFile) return 0; + + while(fgets(cLine,sizeof(cLine),pFile)) + { + util_delete_cr(cLine); /* delete trailing cr/lf */ + + if(!cLine[0] || cLine[0] == '#') /* skip if comment or */ + continue; /* empty line */ + + pPort = (tPort*)calloc(1, sizeof(tPort)); /* allocate and zero out mem */ + + pHlp = strtok(cLine, "|"); /* get msn */ + if(pHlp) strcpy(pPort->cMsn, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get description */ + if(pHlp) strcpy(pPort->cDsc, pHlp); + else strcpy(pPort->cDsc, pPort->cMsn); /* no dsc? take msn as dsc ... */ + + if(pHlp) pHlp = strtok(0, "|"); /* get welcome-wave */ + if(pHlp && pHlp[0] != '*') strcpy(pPort->cWelcomeWave, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get reaction */ + if(!pHlp) pPort->eReact = eNormal; + else + { + strcpy(pPort->cOldReact, pHlp); + while(isdigit(*pHlp)) pHlp++; + if(*pHlp) pPort->eReact = eUnchanged; + else pPort->eReact = atoi(pPort->cOldReact); + } + + if(pHlp) pHlp = strtok(0, "|"); /* get max rec time */ + if(pHlp && pHlp[0] != '*') strcpy(pPort->cMaxRec, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get answer delay */ + if(pHlp && pHlp[0] != '*') strcpy(pPort->cAnsDly, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get active flag */ + pPort->fActive = pHlp ? atoi(pHlp) : 1; + + if(pHlp) pHlp = strtok(0, "|"); /* get ring-wave */ + if(pHlp && pHlp[0] != '*') strcpy(pPort->cRingingWave, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get forward-number */ + if(pHlp && pHlp[0] != '*') strcpy(pPort->cForwardNumber, pHlp); + + InsertPort(hwndList, pPort); + } + + fclose(pFile); + + return 1; +} + +int SavePortList(HWND hwndList, char* pFileName) +{ + FILE* pFile; + tPort* pPort; + int iIdx, iCnt; + + pFile = fopen(pFileName, "w"); + if(!pFile) return 0; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + pPort = GetItemPort(hwndList, iIdx); + if(!pPort) continue; + + if(pPort->eReact != eUnchanged) + sprintf(pPort->cOldReact, "%d", (int)pPort->eReact); + + fprintf(pFile, "%s|%s|%s|%s|%s|%s|%s|%s|%s\n", + strlen(pPort->cMsn) ? pPort->cMsn : "?", + strlen(pPort->cDsc) ? pPort->cDsc : "?", + strlen(pPort->cWelcomeWave) ? pPort->cWelcomeWave : "*", + pPort->cOldReact, + strlen(pPort->cMaxRec) ? pPort->cMaxRec : "*", + strlen(pPort->cAnsDly) ? pPort->cAnsDly : "*", + pPort->fActive ? "1" : "0", + strlen(pPort->cRingingWave) ? pPort->cRingingWave : "*", + strlen(pPort->cForwardNumber) ? pPort->cForwardNumber : "*"); + } + + fclose(pFile); + + return 1; +} + +int FreePortList(HWND hwndList) +{ + tPort* pPort; + int iIdx, iCnt; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + pPort = GetItemPort(hwndList, iIdx); + if(pPort) free(pPort); + } + + return 1; +} + + +int CALLBACK SortCallersFunc( + LPARAM lParam1, + LPARAM lParam2, + LPARAM lParamSort) +{ + tCaller* pCaller1, * pCaller2; + + pCaller1 = (tCaller*)lParam1; + pCaller2 = (tCaller*)lParam2; + + return strnicmp(pCaller1->cDsc, pCaller2->cDsc, strlen(pCaller1->cDsc)); +} + +int InsertCaller(HWND hwndList, tCaller* pCaller) +{ + int iIdx; + LV_ITEM sItem; + + memset(&sItem, 0, sizeof(sItem)); + sItem.mask = LVIF_PARAM; + sItem.iItem = ListView_GetItemCount(hwndList); + sItem.iSubItem = 0; + sItem.lParam = (LPARAM)pCaller; + + iIdx = ListView_InsertItem(hwndList, &sItem); + UpdateCaller(hwndList, pCaller); + + return 1; +} + +int UpdateCaller(HWND hwndList, tCaller* pCaller) +{ + int iIdx; + RECT rcClient; + LV_ITEM sItem; + LV_FINDINFO sFind; + + sFind.flags = LVFI_PARAM; + sFind.lParam = (LPARAM)pCaller; + + iIdx = ListView_FindItem(hwndList, -1, &sFind); + if(iIdx < 0) return 0; + + sItem.mask = LVIF_IMAGE; + sItem.iItem = iIdx; + sItem.iSubItem = 0; + sItem.iImage = pCaller->fActive; + ListView_SetItem(hwndList, &sItem); + + ListView_SetItemText(hwndList, iIdx, 0, pCaller->cDsc); + ListView_SetItemText(hwndList, iIdx, 1, pCaller->cClip); + + ListView_SortItems(hwndList, SortCallersFunc, 0); + GetClientRect(hwndList, &rcClient); + ListView_SetColumnWidth(hwndList, 1, + rcClient.right - ListView_GetColumnWidth(hwndList,0)); + + return 1; +} + +int DelCaller(HWND hwndList, tCaller* pCaller) +{ + int iIdx; + RECT rcClient; + LV_FINDINFO sFind; + + sFind.flags = LVFI_PARAM; + sFind.lParam = (LPARAM)pCaller; + + iIdx = ListView_FindItem(hwndList, -1, &sFind); + if(iIdx < 0) return 0; + + ListView_DeleteItem(hwndList, iIdx); + + GetClientRect(hwndList, &rcClient); + ListView_SetColumnWidth(hwndList, 1, + rcClient.right - ListView_GetColumnWidth(hwndList,0)); + + free(pCaller); + + return 1; +} + +int LoadCallerList(HWND hwndList, char* pFileName) +{ + FILE* pFile; + tCaller* pCaller; + char cLine[4096], * pHlp; + + pFile = fopen(pFileName, "r"); + if(!pFile) return 0; + + while(fgets(cLine,sizeof(cLine),pFile)) + { + util_delete_cr(cLine); /* delete trailing cr/lf */ + + if(!cLine[0] || cLine[0] == '#') /* skip if comment or */ + continue; /* empty line */ + + pCaller = (tCaller*)calloc(1, sizeof(tCaller)); /* alloc & zero out mem */ + + pHlp = strtok(cLine, "|"); /* get msn */ + if(pHlp) strcpy(pCaller->cClip, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get description */ + if(pHlp) strcpy(pCaller->cDsc, pHlp); + else strcpy(pCaller->cDsc, pCaller->cClip); /* no dsc? take num as dsc */ + + if(pHlp) pHlp = strtok(0, "|"); /* get welcome-wave */ + if(pHlp && pHlp[0] != '*') strcpy(pCaller->cWelcomeWave, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get reaction */ + if(!pHlp || !strcmp(pHlp,"*")) pCaller->eReact = eDefault; + else + { + strcpy(pCaller->cOldReact, pHlp); + while(isdigit(*pHlp)) pHlp++; + if(*pHlp) pCaller->eReact = eUnchanged; + else pCaller->eReact = atoi(pCaller->cOldReact); + } + + if(pHlp) pHlp = strtok(0, "|"); /* get max rec time */ + if(pHlp && pHlp[0] != '*') strcpy(pCaller->cMaxRec, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get answer delay */ + if(pHlp && pHlp[0] != '*') strcpy(pCaller->cAnsDly, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get active flag */ + pCaller->fActive = pHlp ? atoi(pHlp) : 1; + + if(pHlp) pHlp = strtok(0, "|"); /* get ring-wave */ + if(pHlp && pHlp[0] != '*') strcpy(pCaller->cRingingWave, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get forward-number */ + if(pHlp && pHlp[0] != '*') strcpy(pCaller->cForwardNumber, pHlp); + + InsertCaller(hwndList, pCaller); + } + + fclose(pFile); + + return 1; +} + +int SaveCallerList(HWND hwndList, char* pFileName) +{ + FILE* pFile; + int iIdx, iCnt; + tCaller* pCaller; + + pFile = fopen(pFileName, "w"); + if(!pFile) return 0; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + pCaller = GetItemCaller(hwndList, iIdx); + if(!pCaller) continue; + + if(pCaller->eReact != eUnchanged) + sprintf(pCaller->cOldReact, (pCaller->eReact == eDefault) ? + "*" : "%d", (int)pCaller->eReact); + + fprintf(pFile, "%s|%s|%s|%s|%s|%s|%s|%s|%s\n", + strlen(pCaller->cClip) ? pCaller->cClip : "?", + strlen(pCaller->cDsc) ? pCaller->cDsc : "?", + strlen(pCaller->cWelcomeWave) ? pCaller->cWelcomeWave : "*", + pCaller->cOldReact, + strlen(pCaller->cMaxRec) ? pCaller->cMaxRec : "*", + strlen(pCaller->cAnsDly) ? pCaller->cAnsDly : "*", + pCaller->fActive ? "1" : "0", + strlen(pCaller->cRingingWave) ? pCaller->cRingingWave : "*", + strlen(pCaller->cForwardNumber) ? pCaller->cForwardNumber : "*"); + } + + fclose(pFile); + + return 1; +} + +int FreeCallerList(HWND hwndList) +{ + tCaller* pCaller; + int iIdx, iCnt; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + pCaller = GetItemCaller(hwndList, iIdx); + if(pCaller) free(pCaller); + } + + return 1; +} + +int AddToCallers(HWND hwnd, char* pFileName, char* pNumber) +{ + FILE* pFile; + tCaller sCaller; + + memset(&sCaller, 0, sizeof(sCaller)); + strcpy(sCaller.cClip, pNumber); + sCaller.fActive = 1; + + if(!DialogBoxParam(xAppInst, + MAKEINTRESOURCE(IDD_EDITCALLER),hwnd, + (DLGPROC)EditCallerProc,(LPARAM)&sCaller)) return 0; + + pFile = fopen(pFileName, "a"); + if(!pFile) return 0; + + sprintf(sCaller.cOldReact, + (sCaller.eReact == eDefault) ? "*" : "%d", (int)sCaller.eReact); + + fprintf(pFile, "%s|%s|%s|%s|%s|%s|%s|%s|%s\n", + strlen(sCaller.cClip) ? sCaller.cClip : "?", + strlen(sCaller.cDsc) ? sCaller.cDsc : "?", + strlen(sCaller.cWelcomeWave) ? sCaller.cWelcomeWave : "*", + sCaller.cOldReact, + strlen(sCaller.cMaxRec) ? sCaller.cMaxRec : "*", + strlen(sCaller.cAnsDly) ? sCaller.cAnsDly : "*", + sCaller.fActive ? "1" : "0", + strlen(sCaller.cRingingWave) ? sCaller.cRingingWave : "*", + strlen(sCaller.cForwardNumber) ? sCaller.cForwardNumber : "*"); + + fclose(pFile); + + return 1; +} + + +int CALLBACK SortActionsFunc( + LPARAM lParam1, + LPARAM lParam2, + LPARAM lParamSort) +{ + tAction* pAction1, * pAction2; + + pAction1 = (tAction*)lParam1; + pAction2 = (tAction*)lParam2; + + return strnicmp(pAction1->cDtmf, pAction2->cDtmf, strlen(pAction1->cDtmf)); +} + +int InsertAction(HWND hwndList, tAction* pAction) +{ + int iIdx; + LV_ITEM sItem; + + memset(&sItem, 0, sizeof(sItem)); + sItem.mask = LVIF_PARAM; + sItem.iItem = ListView_GetItemCount(hwndList); + sItem.iSubItem = 0; + sItem.lParam = (LPARAM)pAction; + + iIdx = ListView_InsertItem(hwndList, &sItem); + UpdateAction(hwndList, pAction); + + return 1; +} + +int UpdateAction(HWND hwndList, tAction* pAction) +{ + int iIdx; + RECT rcClient; + LV_ITEM sItem; + char cText[1024]; + LV_FINDINFO sFind; + + sFind.flags = LVFI_PARAM; + sFind.lParam = (LPARAM)pAction; + + iIdx = ListView_FindItem(hwndList, -1, &sFind); + if(iIdx < 0) return 0; + + sItem.mask = LVIF_IMAGE; + sItem.iItem = iIdx; + sItem.iSubItem = 0; + sItem.iImage = pAction->fActive; + ListView_SetItem(hwndList, &sItem); + + ListView_SetItemText(hwndList, iIdx, 0, pAction->cDtmf); + switch(pAction->eType) + { + case eRemoteControl: + LoadString(xAppInst, STR_LIST_ACTION_1, cText, sizeof(cText)); break; + case eReboot: + LoadString(xAppInst, STR_LIST_ACTION_2, cText, sizeof(cText)); break; + case eDeactivate: + LoadString(xAppInst, STR_LIST_ACTION_3, cText, sizeof(cText)); break; + case eQuit: + LoadString(xAppInst, STR_LIST_ACTION_4, cText, sizeof(cText)); break; + case eSetCallback: + LoadString(xAppInst, STR_LIST_ACTION_5, cText, sizeof(cText)); break; + case eCommandLine: + strcpy(cText, pAction->cCmdProg); break; + } + ListView_SetItemText(hwndList, iIdx, 1, cText); + + ListView_SortItems(hwndList, SortActionsFunc, 0); + + GetClientRect(hwndList, &rcClient); + ListView_SetColumnWidth(hwndList, 1, + rcClient.right - ListView_GetColumnWidth(hwndList,0)); + + return 1; +} + +int DelAction(HWND hwndList, tAction* pAction) +{ + int iIdx; + RECT rcClient; + LV_FINDINFO sFind; + + sFind.flags = LVFI_PARAM; + sFind.lParam = (LPARAM)pAction; + + iIdx = ListView_FindItem(hwndList, -1, &sFind); + if(iIdx < 0) return 0; + + ListView_DeleteItem(hwndList, iIdx); + + GetClientRect(hwndList, &rcClient); + ListView_SetColumnWidth(hwndList, 1, + rcClient.right - ListView_GetColumnWidth(hwndList,0)); + + free(pAction); + + return 1; +} + +int LoadActionList(HWND hwndList, char* pFileName) +{ + FILE* pFile; + tAction* pAction; + char cLine[4096], * pHlp; + + pFile = fopen(pFileName, "r"); + if(!pFile) return 0; + + while(fgets(cLine,sizeof(cLine),pFile)) + { + util_delete_cr(cLine); /* delete trailing cr/lf */ + + if(!cLine[0] || cLine[0] == '#') /* skip if comment or */ + continue; /* empty line */ + + pAction = (tAction*)calloc(1, sizeof(tAction)); /* alloc & zero out mem */ + + pHlp = strtok(cLine, "|"); /* get dtmf code */ + if(pHlp) strcpy(pAction->cDtmf, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get action */ + if(pHlp && !stricmp(pHlp,DTMF_REMOTECONTROL)) + pAction->eType = eRemoteControl; + else if(pHlp && !stricmp(pHlp,DTMF_REBOOT)) + pAction->eType = eReboot; + else if(pHlp && !stricmp(pHlp,DTMF_DEACTIVATE)) + pAction->eType = eDeactivate; + else if(pHlp && !stricmp(pHlp,DTMF_QUIT)) + pAction->eType = eQuit; + else if(pHlp && !stricmp(pHlp,DTMF_SETCALLBACK)) + pAction->eType = eSetCallback; + else + { + pAction->eType = eCommandLine; + if(pHlp) strcpy(pAction->cCmdProg, pHlp); + } + + if(pHlp) pHlp = strtok(0, "|"); /* get arguments */ + if(pHlp) strcpy(pAction->cCmdArgs, pHlp); + + if(pHlp) pHlp = strtok(0, "|"); /* get window-title and skip */ + if(pHlp) pHlp = strtok(0, "|"); /* get empty field and skip */ + + if(pHlp) pHlp = strtok(0, "|"); /* get active flag */ + pAction->fActive = pHlp ? atoi(pHlp) : 1; + + InsertAction(hwndList, pAction); + } + + fclose(pFile); + + return 1; +} + +int SaveActionList(HWND hwndList, char* pFileName) +{ + FILE* pFile; + int iIdx, iCnt; + tAction* pAction; + char* pCol2, * pCol3; + + pFile = fopen(pFileName, "w"); + if(!pFile) return 0; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + pAction = GetItemAction(hwndList, iIdx); + if(!pAction) continue; + + switch(pAction->eType) + { + case eRemoteControl: + pCol2 = DTMF_REMOTECONTROL; pCol3 = 0; break; + case eReboot: + pCol2 = DTMF_REBOOT; pCol3 = 0; break; + case eDeactivate: + pCol2 = DTMF_DEACTIVATE; pCol3 = 0; break; + case eQuit: + pCol2 = DTMF_QUIT; pCol3 = 0; break; + case eSetCallback: + pCol2 = DTMF_SETCALLBACK; pCol3 = 0; break; + case eCommandLine: + pCol2 = pAction->cCmdProg; pCol3 = pAction->cCmdArgs; break; + } + + fprintf(pFile, "%s|%s|%s| | |%s\n", + strlen(pAction->cDtmf) ? pAction->cDtmf : "?", + pCol2 && strlen(pCol2) ? pCol2 : " ", + pCol3 && strlen(pCol3) ? pCol3 : " ", + pAction->fActive ? "1" : "0"); + } + + fclose(pFile); + + return 1; +} + +int FreeActionList(HWND hwndList) +{ + tAction* pAction; + int iIdx, iCnt; + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) + { + pAction = GetItemAction(hwndList, iIdx); + if(pAction) free(pAction); + } + + return 1; +} + + +/* + * + * EditPortListProc() + * + * EditPortList-Dialog Prozedur + * + */ + +LRESULT CALLBACK EditPortListProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + HWND hwndList = GetDlgItem(hwnd, IDC_PORT_LIST); + + switch (message) + { + case WM_INITDIALOG: + { + HICON hIcon; + LV_COLUMN sListCol; + HIMAGELIST hImgLst; + char cTitle[256]; + LONG baseunit = GetDialogBaseUnits(); + + hImgLst = ImageList_Create( + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), 1, 1, 1); + + hIcon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_PORT0)); + ImageList_AddIcon(hImgLst, hIcon); + DeleteObject(hIcon); + + hIcon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_PORT1)); + ImageList_AddIcon(hImgLst, hIcon); + DeleteObject(hIcon); + + ListView_SetImageList(hwndList, hImgLst, LVSIL_SMALL); + + LoadString(xAppInst,STR_PRT_LIST_COL1,cTitle,sizeof(cTitle)); + sListCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM; + sListCol.fmt = LVCFMT_LEFT; + sListCol.cx = (55 * LOWORD(baseunit)) / 4; + sListCol.pszText = cTitle; + ListView_InsertColumn(hwndList, (sListCol.iSubItem = 0), &sListCol); + + LoadString(xAppInst,STR_PRT_LIST_COL2,cTitle,sizeof(cTitle)); + sListCol.cx = (63 * LOWORD(baseunit)) / 4; + sListCol.pszText = cTitle; + ListView_InsertColumn(hwndList, (sListCol.iSubItem = 1), &sListCol); + + LoadPortList(hwndList, PRTFILE); + + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 0); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 0); + CenterWindow(hwnd, GetWindow(hwnd,GW_OWNER)); + + return 1; + } + + case WM_CONTEXTMENU: + + TrackPopupMenu(GetSubMenu(hPopupMenu,1), TPM_LEFTBUTTON|TPM_RIGHTBUTTON, LOWORD(lParam), HIWORD(lParam), 0, hwnd, 0); + return 1; + + case WM_INITMENU: + { + tPort* pPort = GetSelectedPort(hwndList); + + EnableMenuItem((HMENU)wParam, IDM_EDIT, + pPort ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_DELETE, + pPort ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_ACTIVE, + pPort ? MF_ENABLED : MF_GRAYED); + + CheckMenuItem((HMENU)wParam, IDM_ACTIVE, + (pPort && pPort->fActive) ? MF_CHECKED : MF_UNCHECKED); + + return 1; + } + + + case WM_NOTIFY: + + switch(((NMHDR*)lParam)->code) + { + case NM_DBLCLK: + + SendMessage(hwnd, WM_COMMAND, + MAKEWPARAM(IDM_EDIT, 1), (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 1; + + case LVN_KEYDOWN: + + if(((LV_KEYDOWN*)lParam)->wVKey == VK_DELETE) + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_DELETE, 1), + (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 1; + + case LVN_ITEMCHANGED: + + if(GetSelectedPort(hwndList)) + { + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 1); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 1); + } + else + { + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 0); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 0); + } + return 1; + } + return 1; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDOK: + + SavePortList(hwndList, PRTFILE); + EndDialog(hwnd, 1); + break; + + case IDCANCEL: + + EndDialog(hwnd, 0); + break; + + case IDM_NEW: + { + tPort* pPort; + + pPort = (tPort*)DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITPORT), hwnd, (DLGPROC)EditPortProc); + + if(pPort) InsertPort(hwndList, pPort); + + return 1; + } + + case IDM_EDIT: + { + tPort* pPort = GetSelectedPort(hwndList); + + if(!pPort) return 1; + + if(DialogBoxParam(xAppInst,MAKEINTRESOURCE(IDD_EDITPORT), + hwnd,(DLGPROC)EditPortProc,(LPARAM)pPort)) + UpdatePort(hwndList, pPort); + + return 1; + } + + case IDM_DELETE: + { + tPort* pPort = GetSelectedPort(hwndList); + + if(!pPort) return 1; + DelPort(hwndList, pPort); + + return 1; + } + + case IDM_ACTIVE: + { + tPort* pPort = GetSelectedPort(hwndList); + + if(!pPort) return 1; + pPort->fActive = !pPort->fActive; + UpdatePort(hwndList, pPort); + + return 1; + } + } + return 1; + + case WM_DESTROY: + + FreePortList(hwndList); + return 1; + } + + return 0; +} + + +/* + * + * EditPortProc() + * + * EditPort-Dialog Prozedur + * + */ + +LRESULT CALLBACK EditPortProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + tPort* pPort = (tPort*)GetWindowLong(hwnd, DWL_USER); + + switch (message) + { + case WM_INITDIALOG: + { + char cTxt[64]; + + pPort = (tPort*)lParam; + SetWindowLong(hwnd, DWL_USER, (LONG)pPort); + + LoadString(xAppInst, STR_REJECTCAUSE_0, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_1, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_2, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_3, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + if(!pPort) + { + CheckDlgButton(hwnd, IDC_ENABLED, BST_CHECKED); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_SETCURSEL, 0, 0); + } + else + { + CheckDlgButton(hwnd, + IDC_ENABLED, pPort->fActive ? BST_CHECKED : BST_UNCHECKED); + + SetDlgItemText(hwnd, IDC_DESCRIPTION, pPort->cDsc); + SetDlgItemText(hwnd, IDC_MSN, pPort->cMsn); + + switch(pPort->eReact) + { + case eNormal: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,0,0); + break; + case eBusy: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,1,0); + break; + case eRefuse: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,2,0); + break; + case eUnavailable: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,3,0); + break; + } + + SetDlgItemText(hwnd, IDC_DELAY, pPort->cAnsDly); + SetDlgItemText(hwnd, IDC_MAXTIME, pPort->cMaxRec); + + SetDlgItemText(hwnd, IDC_FILENAME, pPort->cWelcomeWave); + SetDlgItemText(hwnd, IDC_WAVENAME, pPort->cRingingWave); + SetDlgItemText(hwnd, IDC_FORWARD, pPort->cForwardNumber); + } + + CenterWindow(hwnd, GetWindow(hwnd, GW_OWNER)); + return 1; + } + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDC_FILEDLG: + { + int iLen; + OPENFILENAME filename; + char cFile[MAX_PATH], cTitle[256], cFilt[256]; + + LoadString(xAppInst, STR_FDLG_WELCOME, cTitle, sizeof(cTitle)); + iLen = LoadString(xAppInst, STR_FDLG_WELCOME_FILT, cFilt, sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + GetDlgItemText(hwnd, IDC_FILENAME, cFile, sizeof(cFile)); + memset(&filename, 0, sizeof(filename)); + + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = cFile; + filename.nMaxFile = sizeof(cFile); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&filename)) + { + char cDir[MAX_PATH]; + GetModuleFileName(0, cDir, sizeof(cDir)); + if(strrchr(cDir,'\\')) *strrchr(cDir,'\\') = 0; + if(strncmp(cFile,cDir,strlen(cDir))) + SetDlgItemText(hwnd, IDC_FILENAME, cFile); + else + SetDlgItemText(hwnd, IDC_FILENAME, cFile+strlen(cDir)+1); + } + + return 1; + } + case IDC_WAVEDLG: + { + int iLen; + char cFile[MAX_PATH], cTitle[256], cFilt[256]; + OPENFILENAME filename; + + LoadString(xAppInst, STR_FDLG_RINGING, cTitle, sizeof(cTitle)); + iLen = LoadString(xAppInst, STR_FDLG_RINGING_FILT, cFilt, sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + GetDlgItemText(hwnd, IDC_WAVENAME, cFile, sizeof(cFile)); + memset(&filename, 0, sizeof(filename)); + + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = cFile; + filename.nMaxFile = sizeof(cFile); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&filename)) + { + char cDir[MAX_PATH]; + GetModuleFileName(0, cDir, sizeof(cDir)); + if(strrchr(cDir,'\\')) *strrchr(cDir,'\\') = 0; + if(strncmp(cFile,cDir,strlen(cDir))) + SetDlgItemText(hwnd, IDC_WAVENAME, cFile); + else + SetDlgItemText(hwnd, IDC_WAVENAME, cFile+strlen(cDir)+1); + } + + return 1; + } + + case IDOK: + + if(!GetWindowTextLength(GetDlgItem(hwnd,IDC_MSN))) + { + MyMsgBox(hwnd, + MAKEINTRESOURCE(STR_ERR_NONUMBER), + MAKEINTRESOURCE(STR_WARNING), MB_OK, IDI_WARNING); + return 1; + } + + if(!pPort) pPort = (tPort*)calloc(1,sizeof(tPort)); + + pPort->fActive = !!IsDlgButtonChecked(hwnd, IDC_ENABLED); + + GetDlgItemText(hwnd, IDC_DESCRIPTION, + pPort->cDsc, sizeof(pPort->cDsc)); + GetDlgItemText(hwnd, IDC_MSN, + pPort->cMsn, sizeof(pPort->cMsn)); + + switch(SendDlgItemMessage(hwnd,IDC_REACTION,CB_GETCURSEL,0,0)) + { + case 0: pPort->eReact = eNormal; break; + case 1: pPort->eReact = eBusy; break; + case 2: pPort->eReact = eRefuse; break; + case 3: pPort->eReact = eUnavailable; break; + } + + GetDlgItemText(hwnd, IDC_DELAY, + pPort->cAnsDly, sizeof(pPort->cAnsDly)); + GetDlgItemText(hwnd, IDC_MAXTIME, + pPort->cMaxRec, sizeof(pPort->cMaxRec)); + + GetDlgItemText(hwnd, IDC_FILENAME, + pPort->cWelcomeWave, sizeof(pPort->cWelcomeWave)); + GetDlgItemText(hwnd, IDC_WAVENAME, + pPort->cRingingWave, sizeof(pPort->cRingingWave)); + GetDlgItemText(hwnd, IDC_FORWARD, + pPort->cForwardNumber, sizeof(pPort->cForwardNumber)); + + EndDialog(hwnd, (int)pPort); + return 1; + + case IDCANCEL: + + EndDialog(hwnd, 0); + return 1; + } + return 1; + + } + + return 0; +} + +/* + * + * EditCallerListProc() + * + * EditCallerList-Dialog Prozedur + * + */ + +LRESULT CALLBACK EditCallerListProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + HWND hwndList = GetDlgItem(hwnd, IDC_CALLER_LIST); + + switch (message) + { + case WM_INITDIALOG: + { + HICON hIcon; + char cTitle[256]; + LV_COLUMN sListCol; + HIMAGELIST hImgLst; + LONG baseunit = GetDialogBaseUnits(); + + hImgLst = ImageList_Create( + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), 1, 1, 1); + + hIcon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_CALLER0)); + ImageList_AddIcon(hImgLst, hIcon); + DeleteObject(hIcon); + + hIcon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_CALLER1)); + ImageList_AddIcon(hImgLst, hIcon); + DeleteObject(hIcon); + + ListView_SetImageList(hwndList, hImgLst, LVSIL_SMALL); + + LoadString(xAppInst,STR_CLR_LIST_COL1,cTitle,sizeof(cTitle)); + sListCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM; + sListCol.fmt = LVCFMT_LEFT; + sListCol.cx = (65 * LOWORD(baseunit)) / 4; + sListCol.pszText = cTitle; + ListView_InsertColumn(hwndList, (sListCol.iSubItem = 0), &sListCol); + + LoadString(xAppInst,STR_CLR_LIST_COL2,cTitle,sizeof(cTitle)); + sListCol.cx = (77 * LOWORD(baseunit)) / 4; + sListCol.pszText = cTitle; + ListView_InsertColumn(hwndList, (sListCol.iSubItem = 1), &sListCol); + + LoadCallerList(hwndList, NAMFILE); + + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 0); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 0); + CenterWindow(hwnd, GetWindow(hwnd,GW_OWNER)); + + return 1; + } + + case WM_CONTEXTMENU: + + TrackPopupMenu(GetSubMenu(hPopupMenu,1), TPM_LEFTBUTTON|TPM_RIGHTBUTTON, LOWORD(lParam), HIWORD(lParam), 0, hwnd, 0); + return 1; + + case WM_INITMENU: + { + tCaller* pCaller = GetSelectedCaller(hwndList); + + EnableMenuItem((HMENU)wParam, IDM_EDIT, + pCaller ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_DELETE, + pCaller ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_ACTIVE, + pCaller ? MF_ENABLED : MF_GRAYED); + + CheckMenuItem((HMENU)wParam, IDM_ACTIVE, + (pCaller && pCaller->fActive) ? MF_CHECKED : MF_UNCHECKED); + + return 1; + } + + + case WM_NOTIFY: + + switch(((NMHDR*)lParam)->code) + { + case NM_DBLCLK: + + SendMessage(hwnd, WM_COMMAND, + MAKEWPARAM(IDM_EDIT, 1), (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 1; + + case LVN_KEYDOWN: + + if(((LV_KEYDOWN*)lParam)->wVKey == VK_DELETE) + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_DELETE, 1), + (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 1; + + case LVN_ITEMCHANGED: + + if(GetSelectedCaller(hwndList)) + { + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 1); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 1); + } + else + { + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 0); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 0); + } + return 1; + } + return 1; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDOK: + + SaveCallerList(hwndList, NAMFILE); + EndDialog(hwnd, 1); + break; + + case IDCANCEL: + + EndDialog(hwnd, 0); + break; + + case IDM_NEW: + { + tCaller* pCaller; + + pCaller = (tCaller*)DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITCALLER), hwnd, (DLGPROC)EditCallerProc); + + if(pCaller) InsertCaller(hwndList, pCaller); + + return 1; + } + + case IDM_EDIT: + { + tCaller* pCaller = GetSelectedCaller(hwndList); + + if(!pCaller) return 1; + + if(DialogBoxParam(xAppInst,MAKEINTRESOURCE(IDD_EDITCALLER), + hwnd,(DLGPROC)EditCallerProc,(LPARAM)pCaller)) + UpdateCaller(hwndList, pCaller); + + return 1; + } + + case IDM_DELETE: + { + tCaller* pCaller = GetSelectedCaller(hwndList); + + if(!pCaller) return 1; + DelCaller(hwndList, pCaller); + + return 1; + } + + case IDM_ACTIVE: + { + tCaller* pCaller = GetSelectedCaller(hwndList); + + if(!pCaller) return 1; + pCaller->fActive = !pCaller->fActive; + UpdateCaller(hwndList, pCaller); + + return 1; + } + } + return 1; + + case WM_DESTROY: + + FreeCallerList(hwndList); + return 1; + } + + return 0; +} + +/* + * + * EditCallerProc() + * + * EditCallerProc-Dialog Prozedur + * + */ + +LRESULT CALLBACK EditCallerProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + tCaller* pCaller = (tCaller*)GetWindowLong(hwnd, DWL_USER); + + switch (message) + { + case WM_INITDIALOG: + { + char cTxt[256]; + + pCaller = (tCaller*)lParam; + SetWindowLong(hwnd, DWL_USER, (LONG)pCaller); + + LoadString(xAppInst, STR_REJECTCAUSE_D, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_0, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_1, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_2, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + LoadString(xAppInst, STR_REJECTCAUSE_3, cTxt, sizeof(cTxt)); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_ADDSTRING, 0, (LPARAM)cTxt); + + if(!pCaller) + { + CheckDlgButton(hwnd, IDC_ENABLED, BST_CHECKED); + SendDlgItemMessage(hwnd, IDC_REACTION, CB_SETCURSEL, 0, 0); + } + else + { + CheckDlgButton(hwnd, + IDC_ENABLED, pCaller->fActive ? BST_CHECKED : BST_UNCHECKED); + + SetDlgItemText(hwnd, IDC_DESCRIPTION, pCaller->cDsc); + SetDlgItemText(hwnd, IDC_MSN, pCaller->cClip); + + switch(pCaller->eReact) + { + case eDefault: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,0,0); + break; + case eNormal: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,1,0); + break; + case eBusy: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,2,0); + break; + case eRefuse: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,3,0); + break; + case eUnavailable: + SendDlgItemMessage(hwnd,IDC_REACTION,CB_SETCURSEL,4,0); + break; + } + + SetDlgItemText(hwnd, IDC_DELAY, pCaller->cAnsDly); + SetDlgItemText(hwnd, IDC_MAXTIME, pCaller->cMaxRec); + + SetDlgItemText(hwnd, IDC_FILENAME, pCaller->cWelcomeWave); + SetDlgItemText(hwnd, IDC_WAVENAME, pCaller->cRingingWave); + SetDlgItemText(hwnd, IDC_FORWARD, pCaller->cForwardNumber); + } + + CenterWindow(hwnd, GetWindow(hwnd, GW_OWNER)); + return 1; + } + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDC_FILEDLG: + { + int iLen; + OPENFILENAME filename; + char cFile[MAX_PATH], cTitle[256], cFilt[256]; + + LoadString(xAppInst, STR_FDLG_WELCOME, cTitle, sizeof(cTitle)); + iLen = LoadString(xAppInst, STR_FDLG_WELCOME_FILT, cFilt, sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + GetDlgItemText(hwnd, IDC_FILENAME, cFile, sizeof(cFile)); + memset(&filename, 0, sizeof(filename)); + + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = cFile; + filename.nMaxFile = sizeof(cFile); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&filename)) + { + char cDir[MAX_PATH]; + GetModuleFileName(0, cDir, sizeof(cDir)); + if(strrchr(cDir,'\\')) *strrchr(cDir,'\\') = 0; + if(strncmp(cFile,cDir,strlen(cDir))) + SetDlgItemText(hwnd, IDC_FILENAME, cFile); + else + SetDlgItemText(hwnd, IDC_FILENAME, cFile+strlen(cDir)+1); + } + + return 1; + } + case IDC_WAVEDLG: + { + int iLen; + char cFile[1024], cTitle[256], cFilt[256]; + OPENFILENAME filename; + + LoadString(xAppInst, STR_FDLG_RINGING, cTitle, sizeof(cTitle)); + iLen = LoadString(xAppInst, STR_FDLG_RINGING_FILT, cFilt, sizeof(cFilt)); + cFilt[iLen] = cFilt[iLen+1] = 0; + + GetDlgItemText(hwnd, IDC_WAVENAME, cFile, sizeof(cFile)); + memset(&filename, 0, sizeof(filename)); + + filename.lStructSize = sizeof(filename); + filename.hwndOwner = hwnd; + filename.hInstance = xAppInst; + filename.lpstrFilter = cFilt; + filename.lpstrFile = cFile; + filename.nMaxFile = sizeof(cFile); + filename.lpstrTitle = cTitle; + filename.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY| + OFN_NOCHANGEDIR|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&filename)) + { + char cDir[MAX_PATH]; + GetModuleFileName(0, cDir, sizeof(cDir)); + if(strrchr(cDir,'\\')) *strrchr(cDir,'\\') = 0; + if(strncmp(cFile,cDir,strlen(cDir))) + SetDlgItemText(hwnd, IDC_WAVENAME, cFile); + else + SetDlgItemText(hwnd, IDC_WAVENAME, cFile+strlen(cDir)+1); + } + + return 1; + } + + case IDOK: + + if(!GetWindowTextLength(GetDlgItem(hwnd,IDC_MSN))) + { + MyMsgBox(hwnd, + MAKEINTRESOURCE(STR_ERR_NONUMBER), + MAKEINTRESOURCE(STR_WARNING), MB_OK, IDI_WARNING); + return 1; + } + + if(!pCaller) pCaller = (tCaller*)calloc(1,sizeof(tCaller)); + + pCaller->fActive = !!IsDlgButtonChecked(hwnd, IDC_ENABLED); + + GetDlgItemText(hwnd, IDC_DESCRIPTION, + pCaller->cDsc, sizeof(pCaller->cDsc)); + GetDlgItemText(hwnd, IDC_MSN, + pCaller->cClip, sizeof(pCaller->cClip)); + + switch(SendDlgItemMessage(hwnd,IDC_REACTION,CB_GETCURSEL,0,0)) + { + case 0: pCaller->eReact = eDefault; break; + case 1: pCaller->eReact = eNormal; break; + case 2: pCaller->eReact = eBusy; break; + case 3: pCaller->eReact = eRefuse; break; + case 4: pCaller->eReact = eUnavailable; break; + } + + GetDlgItemText(hwnd, IDC_DELAY, + pCaller->cAnsDly, sizeof(pCaller->cAnsDly)); + GetDlgItemText(hwnd, IDC_MAXTIME, + pCaller->cMaxRec, sizeof(pCaller->cMaxRec)); + + GetDlgItemText(hwnd, IDC_FILENAME, + pCaller->cWelcomeWave, sizeof(pCaller->cWelcomeWave)); + GetDlgItemText(hwnd, IDC_WAVENAME, + pCaller->cRingingWave, sizeof(pCaller->cRingingWave)); + GetDlgItemText(hwnd, IDC_FORWARD, + pCaller->cForwardNumber, sizeof(pCaller->cForwardNumber)); + + EndDialog(hwnd, (int)pCaller); + return 1; + + case IDCANCEL: + + EndDialog(hwnd, 0); + return 1; + } + return 1; + + } + + return 0; +} + + +/* + * + * EditActionListProc() + * + * EditActionList-Dialog Prozedur + * + */ + +LRESULT CALLBACK EditActionListProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + HWND hwndList = GetDlgItem(hwnd, IDC_ACTION_LIST); + + switch (message) + { + case WM_INITDIALOG: + { + HICON hIcon; + char cTitle[256]; + LV_COLUMN sListCol; + HIMAGELIST hImgLst; + LONG baseunit = GetDialogBaseUnits(); + + hImgLst = ImageList_Create( + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), 1, 1, 1); + + hIcon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_ACTION0)); + ImageList_AddIcon(hImgLst, hIcon); + DeleteObject(hIcon); + + hIcon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_ACTION1)); + ImageList_AddIcon(hImgLst, hIcon); + DeleteObject(hIcon); + + ListView_SetImageList(hwndList, hImgLst, LVSIL_SMALL); + + LoadString(xAppInst,STR_ACT_LIST_COL1,cTitle,sizeof(cTitle)); + sListCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM; + sListCol.fmt = LVCFMT_LEFT; + sListCol.cx = (40 * LOWORD(baseunit)) / 4; + sListCol.pszText = cTitle; + ListView_InsertColumn(hwndList, (sListCol.iSubItem = 0), &sListCol); + + LoadString(xAppInst,STR_ACT_LIST_COL2,cTitle,sizeof(cTitle)); + sListCol.cx = (78 * LOWORD(baseunit)) / 4; + sListCol.pszText = cTitle; + ListView_InsertColumn(hwndList, (sListCol.iSubItem = 1), &sListCol); + + LoadActionList(hwndList, ACTFILE); + + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 0); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 0); + CenterWindow(hwnd, GetWindow(hwnd,GW_OWNER)); + + return 1; + } + + case WM_CONTEXTMENU: + + TrackPopupMenu(GetSubMenu(hPopupMenu,1), TPM_LEFTBUTTON|TPM_RIGHTBUTTON, LOWORD(lParam), HIWORD(lParam), 0, hwnd, 0); + return 1; + + case WM_INITMENU: + { + tAction* pAction = GetSelectedAction(hwndList); + + EnableMenuItem((HMENU)wParam, IDM_EDIT, + pAction ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_DELETE, + pAction ? MF_ENABLED : MF_GRAYED); + EnableMenuItem((HMENU)wParam, IDM_ACTIVE, + pAction ? MF_ENABLED : MF_GRAYED); + + CheckMenuItem((HMENU)wParam, IDM_ACTIVE, + (pAction && pAction->fActive) ? MF_CHECKED : MF_UNCHECKED); + + return 1; + } + + case WM_NOTIFY: + + switch(((NMHDR*)lParam)->code) + { + case NM_DBLCLK: + + SendMessage(hwnd, WM_COMMAND, + MAKEWPARAM(IDM_EDIT, 1), (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 1; + + case LVN_KEYDOWN: + + if(((LV_KEYDOWN*)lParam)->wVKey == VK_DELETE) + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_DELETE, 1), + (LPARAM)((NMHDR*)lParam)->hwndFrom); + return 1; + + case LVN_ITEMCHANGED: + + if(GetSelectedAction(hwndList)) + { + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 1); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 1); + } + else + { + EnableWindow(GetDlgItem(hwnd,IDM_EDIT), 0); + EnableWindow(GetDlgItem(hwnd,IDM_DELETE), 0); + } + return 1; + } + return 1; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDOK: + + SaveActionList(hwndList, ACTFILE); + EndDialog(hwnd, 1); + break; + + case IDCANCEL: + + EndDialog(hwnd, 0); + break; + + case IDM_NEW: + { + tAction* pAction; + + pAction = (tAction*)DialogBox(xAppInst, + MAKEINTRESOURCE(IDD_EDITACTION), hwnd, (DLGPROC)EditActionProc); + + if(pAction) InsertAction(hwndList, pAction); + + return 1; + } + + case IDM_EDIT: + { + tAction* pAction = GetSelectedAction(hwndList); + + if(!pAction) return 1; + + if(DialogBoxParam(xAppInst,MAKEINTRESOURCE(IDD_EDITACTION), + hwnd,(DLGPROC)EditActionProc,(LPARAM)pAction)) + UpdateAction(hwndList, pAction); + + return 1; + } + + case IDM_DELETE: + { + tAction* pAction = GetSelectedAction(hwndList); + + if(!pAction) return 1; + DelAction(hwndList, pAction); + + return 1; + } + + case IDM_ACTIVE: + { + tAction* pAction = GetSelectedAction(hwndList); + + if(!pAction) return 1; + pAction->fActive = !pAction->fActive; + UpdateAction(hwndList, pAction); + + return 1; + } + } + return 1; + + case WM_DESTROY: + + FreeActionList(hwndList); + return 1; + } + + return 0; +} + + + +/* + * + * EditActionProc() + * + * EditAction-Dialog Prozedur + * + */ + +LRESULT CALLBACK EditActionProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + tAction* pAction = (tAction*)GetWindowLong(hwnd, DWL_USER); + + switch (message) + { + case WM_INITDIALOG: + + pAction = (tAction*)lParam; + SetWindowLong(hwnd, DWL_USER, (LONG)pAction); + + if(!pAction) + { + CheckDlgButton(hwnd, IDC_ENABLED, BST_CHECKED); + SendDlgItemMessage(hwnd, IDC_REMOTECONTROL, BM_CLICK, 0, 0); + } + else + { + CheckDlgButton(hwnd, + IDC_ENABLED, pAction->fActive ? BST_CHECKED : BST_UNCHECKED); + + SetDlgItemText(hwnd, IDC_DTMFCODE, pAction->cDtmf); + + switch(pAction->eType) + { + case eRemoteControl: + SendDlgItemMessage(hwnd, IDC_REMOTECONTROL, BM_CLICK, 0, 0); + break; + case eReboot: + SendDlgItemMessage(hwnd, IDC_REBOOT, BM_CLICK, 0, 0); + break; + case eDeactivate: + SendDlgItemMessage(hwnd, IDC_DEACTIVATE, BM_CLICK, 0, 0); + break; + case eQuit: + SendDlgItemMessage(hwnd, IDC_QUIT, BM_CLICK, 0, 0); + break; + case eSetCallback: + SendDlgItemMessage(hwnd, IDC_SET_CALLBACK, BM_CLICK, 0, 0); + break; + case eCommandLine: + SendDlgItemMessage(hwnd, IDC_EXECUTE, BM_CLICK, 0, 0); + SetDlgItemText(hwnd, IDC_PROGRAM, pAction->cCmdProg); + SetDlgItemText(hwnd, IDC_ARGUMENTS, pAction->cCmdArgs); + break; + } + } + + CenterWindow(hwnd, GetWindow(hwnd, GW_OWNER)); + return 1; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDC_REMOTECONTROL: + case IDC_SET_CALLBACK: + case IDC_REBOOT: + case IDC_DEACTIVATE: + case IDC_QUIT: + case IDC_EXECUTE: + + EnableWindow(GetDlgItem(hwnd,IDC_TEXT1), + IsDlgButtonChecked(hwnd, IDC_EXECUTE) == BST_CHECKED); + EnableWindow(GetDlgItem(hwnd,IDC_TEXT2), + IsDlgButtonChecked(hwnd, IDC_EXECUTE) == BST_CHECKED); + EnableWindow(GetDlgItem(hwnd,IDC_PROGRAM), + IsDlgButtonChecked(hwnd, IDC_EXECUTE) == BST_CHECKED); + EnableWindow(GetDlgItem(hwnd,IDC_ARGUMENTS), + IsDlgButtonChecked(hwnd, IDC_EXECUTE) == BST_CHECKED); + + return 1; + + case IDOK: + + if(!GetWindowTextLength(GetDlgItem(hwnd,IDC_DTMFCODE))) + { + MyMsgBox(hwnd, + MAKEINTRESOURCE(STR_ERR_NODTMFCODE), + MAKEINTRESOURCE(STR_WARNING), MB_OK, IDI_WARNING); + return 1; + } + + if(!pAction) pAction = (tAction*)calloc(1,sizeof(tAction)); + + pAction->fActive = !!IsDlgButtonChecked(hwnd, IDC_ENABLED); + + GetDlgItemText(hwnd, IDC_DTMFCODE, + pAction->cDtmf, sizeof(pAction->cDtmf)); + + if(IsDlgButtonChecked(hwnd,IDC_REMOTECONTROL) == BST_CHECKED) + pAction->eType = eRemoteControl; + else if(IsDlgButtonChecked(hwnd,IDC_REBOOT) == BST_CHECKED) + pAction->eType = eReboot; + else if(IsDlgButtonChecked(hwnd,IDC_DEACTIVATE) == BST_CHECKED) + pAction->eType = eDeactivate; + else if(IsDlgButtonChecked(hwnd,IDC_QUIT) == BST_CHECKED) + pAction->eType = eQuit; + else if(IsDlgButtonChecked(hwnd,IDC_SET_CALLBACK) == BST_CHECKED) + pAction->eType = eSetCallback; + else if(IsDlgButtonChecked(hwnd,IDC_EXECUTE) == BST_CHECKED) + { + pAction->eType = eCommandLine; + GetDlgItemText(hwnd, IDC_PROGRAM, + pAction->cCmdProg, sizeof(pAction->cCmdProg)); + GetDlgItemText(hwnd, IDC_ARGUMENTS, + pAction->cCmdArgs, sizeof(pAction->cCmdArgs)); + } + + EndDialog(hwnd, (int)pAction); + return 1; + + case IDCANCEL: + + EndDialog(hwnd, 0); + return 1; + } + return 1; + + } + + return 0; +} + + +/* + * + * RegisterDialogProc() + * + * RegisterDialog-Prozedur + * + */ + +LRESULT CALLBACK RegisterDialogProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + char cVal[64]; + + config_file_read_string(STD_CFG_FILE, + REGISTER_NAME, cVal, REGISTER_NAME_DEF); + SetDlgItemText(hwnd, IDC_REGNAME, cVal); + + config_file_read_string(STD_CFG_FILE, + REGISTER_CODE, cVal, REGISTER_CODE_DEF); + SetDlgItemText(hwnd, IDC_REGCODE, cVal); + + CenterWindow(hwnd, GetWindow(hwnd, GW_OWNER)); + + return 1; + } + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDOK: + { + char name[64], code[64]; + + GetDlgItemText(hwnd, IDC_REGNAME, name, sizeof(name)); + GetDlgItemText(hwnd, IDC_REGCODE, code, sizeof(code)); + + if(!CheckRegistration(name,code)) + { + MyMsgBox(hwnd, + MAKEINTRESOURCE(STR_MSG_REGFAIL), APPSHORT, MB_OK, IDI_ERROR); + } + else + { + MyMsgBox(hwnd, + MAKEINTRESOURCE(STR_MSG_REGOK), APPSHORT, MB_OK, IDI_INFORMATION); + } + + EndDialog(hwnd, 1); + return 1; + } + + case IDCANCEL: + + EndDialog(hwnd, 1); + return 1; + } + return 1; + } + + return 0; +} + + +/* + * + * PopupDialogProc() + * + * PopupDialog-Prozedur + * + */ + +LRESULT CALLBACK PopupDialogProc( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG: + { + HWND hwndOwner; + char cText[256], cFmt[256]; + + LoadString(xAppInst, STR_POPTEXT_1, cText, sizeof(cText)); + SetDlgItemText(hwnd, IDC_TEXT1, cText); + + LoadString(xAppInst, STR_POPTEXT_2, cFmt, sizeof(cFmt)); + sprintf(cText, cFmt, sLastCall.cCallerName); + SetDlgItemText(hwnd, IDC_TEXT2, cText); + + LoadString(xAppInst, STR_POPTEXT_3, cFmt, sizeof(cFmt)); + sprintf(cText, cFmt, sLastCall.cCalledPort); + SetDlgItemText(hwnd, IDC_TEXT3, cText); + + hwndOwner = GetWindow(hwnd,GW_OWNER); + if(!IsIconic(hwndOwner) && IsWindowVisible(hwndOwner)) + { + CenterWindow(hwnd, GetWindow(hwnd,GW_OWNER)); + SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); + } + else + { + RECT rDsk, rDlg; + + GetWindowRect(hwnd, &rDlg); + if(!SystemParametersInfo(SPI_GETWORKAREA,sizeof(rDsk),&rDsk,0)) + { + rDsk.left = rDsk.top = 0; + rDsk.right = GetSystemMetrics(SM_CXSCREEN); + rDsk.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + switch(lParam) + { + case 1: // top left + SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE); + break; + + case 2: // top right + SetWindowPos(hwnd, HWND_TOPMOST, + rDsk.right - rDlg.right + rDlg.left, 0, 0, 0, SWP_NOSIZE); + break; + + case 3: // bottom left + SetWindowPos(hwnd, HWND_TOPMOST, 0, + rDsk.bottom - rDlg.bottom + rDlg.top, 0, 0, SWP_NOSIZE); + break; + + default: // bottom right + SetWindowPos(hwnd, HWND_TOPMOST, + rDsk.right - rDlg.right + rDlg.left, + rDsk.bottom - rDlg.bottom + rDlg.top, 0, 0, SWP_NOSIZE); + break; + } + } + + return 0; + } + } + return 0; +} + +/* + * + * MainListInit() + * + * Initialisiert die Liste im HauptFenster. + * + */ + +void MainListInit(HWND hwndList) +{ + HICON icon; + LV_COLUMN lvc; + HIMAGELIST imgl; + char cTitle[256]; + LONG baseunit = GetDialogBaseUnits(); + + imgl = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 1, 1, 1); + + icon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_CALL0)); + ImageList_AddIcon(imgl, icon); + DeleteObject(icon); + + icon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_CALL1)); + ImageList_AddIcon(imgl, icon); + DeleteObject(icon); + + icon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_CALL2)); + ImageList_AddIcon(imgl, icon); + DeleteObject(icon); + + icon = LoadIcon(xAppInst, MAKEINTRESOURCE(ID_CALL3)); + ImageList_AddIcon(imgl, icon); + DeleteObject(icon); + + ListView_SetImageList(hwndList, imgl, LVSIL_SMALL); + + LoadString(xAppInst,STR_LIST_COL1,cTitle,sizeof(cTitle)); + lvc.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM; + lvc.fmt = LVCFMT_LEFT; + lvc.cx = (70 * LOWORD(baseunit)) / 4; + lvc.pszText = cTitle; + ListView_InsertColumn(hwndList, (lvc.iSubItem = 0), &lvc); + + LoadString(xAppInst,STR_LIST_COL2,cTitle,sizeof(cTitle)); + lvc.cx = (30 * LOWORD(baseunit)) / 4; + lvc.pszText = cTitle; + ListView_InsertColumn(hwndList, (lvc.iSubItem = 1), &lvc); + + LoadString(xAppInst,STR_LIST_COL3,cTitle,sizeof(cTitle)); + lvc.cx = (30 * LOWORD(baseunit)) / 4; + lvc.pszText = cTitle; + ListView_InsertColumn(hwndList, (lvc.iSubItem = 2), &lvc); + + LoadString(xAppInst,STR_LIST_COL4,cTitle,sizeof(cTitle)); + lvc.cx = (20 * LOWORD(baseunit)) / 4; + lvc.pszText = cTitle; + ListView_InsertColumn(hwndList, (lvc.iSubItem = 3), &lvc); + + LoadString(xAppInst,STR_LIST_COL5,cTitle,sizeof(cTitle)); + lvc.cx = (50 * LOWORD(baseunit)) / 4; + lvc.pszText = cTitle; + ListView_InsertColumn(hwndList, (lvc.iSubItem = 4), &lvc); + +} + + +/* + * + * MainListInsertCall() + * + * Fgt der Liste im Hauptfenster ein Item hinzu. + * + */ + +int MainListInsertCall(HWND hwndList, HWND hwndTTip, tCall* pCall, int select) +{ + int index; + LV_ITEM lvi; + tCall* pNewCall; + char cTime[256], cDate[256], cDuration[64]; + + pNewCall = (tCall*)malloc(sizeof(tCall)); + memcpy(pNewCall, pCall, sizeof(tCall)); + + sprintf(cDuration, "%d", pNewCall->iDuration); + GetDateFormat(LOCALE_USER_DEFAULT, 0, + &pNewCall->sTime, 0, cDate, sizeof(cDate)); + GetTimeFormat(LOCALE_USER_DEFAULT, 0, + &pNewCall->sTime, 0, cTime, sizeof(cTime)); + + + lvi.mask = LVIF_TEXT|LVIF_PARAM; + lvi.iItem = ListView_GetItemCount(hwndList); + lvi.iSubItem = 0; + lvi.pszText = pNewCall->cCallerName; + lvi.lParam = (LPARAM)pNewCall; + + index = ListView_InsertItem(hwndList, &lvi); + ListView_SetItemText(hwndList, index, 1, cDate); + ListView_SetItemText(hwndList, index, 2, cTime); + ListView_SetItemText(hwndList, index, 3, cDuration); + ListView_SetItemText(hwndList, index, 4, pNewCall->cCalledPort); + + if(select) + { + ListView_SetItemState(hwndList, index, + LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED); + ListView_EnsureVisible(hwndList, index, 0); + } + + MainListUpdateIcon(hwndList, index); + + AddToolTip(hwndList, hwndTTip, index, pNewCall->cCallerNameOrg); + + return index; +} + + +/* + * + * MainListGetCall() + * + * Liefert das Handle des Items, das bei + * InsertItem gesetzt wurde. + * + */ + +tCall* MainListGetCall(HWND hwndList, int index) +{ + LV_ITEM lvi; + + lvi.mask = LVIF_PARAM; + lvi.iItem = index; + lvi.iSubItem = 0; + + if(!ListView_GetItem(hwndList, &lvi)) return 0; + + return (tCall*)lvi.lParam; +} + + +/* + * + * MainListUpdateIcon() + * + * W„hlt das einem List-Item zugeordnete Icon aus. + * icon ist ein 0-basierter index. + * + */ + +void MainListUpdateIcon(HWND hwndList, int index) +{ + LV_ITEM lvi; + tCall* pCall; + + pCall = MainListGetCall(hwndList, index); + if(!pCall) return; + + lvi.mask = LVIF_IMAGE; + lvi.iItem = index; + lvi.iSubItem = 0; + + if(pCall->iIsDigital) /* digitaler ruf */ + lvi.iImage = 3; + else if(pCall->iDuration == 0) /* ruf ohne text */ + lvi.iImage = 0; + else if(pCall->iState) /* ruf ist schon abgehoert */ + lvi.iImage = 2; + else /* ruf ist noch nicht abgehoert */ + lvi.iImage = 1; + + ListView_SetItem(hwndList, &lvi); + + return; +} + + +int CALLBACK MainListSortFunc( + LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) +{ + int iResult; + tCall* pCall1, * pCall2; + FILETIME sFTime1, sFTime2; + + iResult = 0; + pCall1 = (tCall*)lParam1; + pCall2 = (tCall*)lParam2; + + switch(lParamSort) + { + case 0: // nach caller name sortieren + + iResult = strncmp(pCall1->cCallerName, + pCall2->cCallerName, strlen(pCall1->cCallerName)); + break; + + case 1: + case 2: // nach time-stamp sortieren + + SystemTimeToFileTime(&pCall1->sTime, &sFTime1); + SystemTimeToFileTime(&pCall2->sTime, &sFTime2); + iResult = CompareFileTime(&sFTime1, &sFTime2); + break; + + case 3: // nach dauer und typ sortieren + + if(pCall1->iIsDigital && !pCall2->iIsDigital) iResult = 1; + else if(!pCall1->iIsDigital && pCall2->iIsDigital) iResult = -1; + else iResult = pCall1->iDuration - pCall2->iDuration; + break; + + case 4: // nach ziel-port sortieren + + iResult = strncmp(pCall1->cCalledPort, + pCall2->cCalledPort, strlen(pCall1->cCalledPort)); + break; + } + + return iResult; +} + +/* + * + * MainListSort() + * + * Sortiert die Anrufe in Hauptfenster + * + */ + +void MainListSort(HWND hwndList, int iColumn) +{ + ListView_SortItems(hwndList, MainListSortFunc, iColumn); +} + +/* + * + * CenterWindow() + * + * Zentriert ein Fenster relativ zu einem anderen. + * + */ + +int CenterWindow(HWND hwndChild, HWND hwndParent) { + + int xNew, yNew; + int wChild, hChild, wParent, hParent; + RECT rChild, rParent, rWorkArea; + + GetWindowRect(hwndChild, &rChild); + wChild = rChild.right - rChild.left; + hChild = rChild.bottom - rChild.top; + + GetWindowRect(hwndParent, &rParent); + wParent = rParent.right - rParent.left; + hParent = rParent.bottom - rParent.top; + + if(!SystemParametersInfo(SPI_GETWORKAREA, sizeof(rWorkArea), &rWorkArea, 0)) { + rWorkArea.left = rWorkArea.top = 0; + rWorkArea.right = GetSystemMetrics(SM_CXSCREEN); + rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + xNew = rParent.left + ((wParent - wChild) / 2); + if(xNew < rWorkArea.left) xNew = rWorkArea.left; + else if((xNew+wChild) > rWorkArea.right) xNew = rWorkArea.right - wChild; + + yNew = rParent.top + ((hParent - hChild) / 2); + if(yNew < rWorkArea.top) yNew = rWorkArea.top; + else if ((yNew+hChild) > rWorkArea.bottom) yNew = rWorkArea.bottom - hChild; + + return SetWindowPos(hwndChild, 0, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + +} + +//############################################################################ +//############################################################################ +//############################################################################ +//############################################################################ + +short next_welcome = 0; + +void capitel_connect_ind (TCapiInfo *msg) +{ + sLastCall.iIsDigital= msg->is_digital; + strcpy(sLastCall.cCallerName, msg->caller_name); + strcpy(sLastCall.cCallerNameOrg, msg->caller_org_name); + strcpy(sLastCall.cCalledPort, msg->called_name); + + PostMessage(hwndMain, WM_USER, (WPARAM)6, 0); /* show incoming-call-popup */ +} + +void capitel_number_of_call (short num) +{ + memset(&sLastCall, 0, sizeof(sLastCall)); + + sLastCall.iNum = num; + sprintf(sLastCall.cWavFileName, CALL_MAKE_MASK_WAV, sLastCall.iNum); + sprintf(sLastCall.cAlwFileName, CALL_MAKE_MASK_ALW, sLastCall.iNum); + sprintf(sLastCall.cIdxFileName, CALL_MAKE_MASK_IDX, sLastCall.iNum); +} + +void capitel_have_no_carrier (unsigned long sec) +{ + PostMessage(hwndMain, WM_USER, (WPARAM)7, 0); /* close incoming-call-popup */ + + sLastCall.iDuration = sec; /* dauer speichern */ + GetLocalTime(&sLastCall.sTime); /* timestamp erzeugen */ + + if(!sLastCall.iDuration && + config_file_read_ulong(STD_CFG_FILE,IGNORE_EMPTY_CALLS,IGNORE_EMPTY_CALLS_DEF)) + { + Sleep(1000); + remove(sLastCall.cWavFileName); + remove(sLastCall.cAlwFileName); + } + else if(!next_welcome) + { + PostMessage(hwndMain, WM_USER, (WPARAM)4, (LPARAM)NULL); + SaveCall(&sLastCall); + } + + next_welcome = 0; + + if (config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE,CAPITEL_ACTIVE_DEF)) + PostMessage(hwndMain, WM_USER, (WPARAM)8, 0); + else + PostMessage(hwndMain, WM_USER, (WPARAM)9, 0); +} + +void capitel_convert (unsigned long converting) +{ + if (converting) + PostMessage(hwndMain, WM_USER, (WPARAM)10, 0); + else + PostMessage(hwndMain, WM_USER, (WPARAM)8, 0); +} + +void capitel_dorescan (void) +{ + PostMessage(hwndMain, WM_USER, (WPARAM)5, (LPARAM)NULL); +} + +void capitel_remote_control (void) +{ + PostMessage(hwndMain, WM_USER, (WPARAM)7, 0); /* close incoming-call-popup */ + capitel_dorescan(); +} + +void capitel_play_waw (char *msg) +{ + PlaySound(msg, 0, SND_FILENAME|SND_ASYNC); +} + +void capitel_deactivate (void) +{ + PostMessage(hwndMain, WM_USER, (WPARAM)9, 0); +} + +void capitel_doexit (void) +{ + PostMessage(hwndMain, WM_CLOSE, 1, 0); +} + +// ########################################################################## + +void sigFunc(short num, void *msg) { + + switch(num) { + case 1 : + case 2 : + case 3 : { char* c = strdup((char*)msg); PostMessage(hwndMain, WM_USER, (WPARAM)num, (LPARAM)c); break; } + case 4 : capitel_connect_ind (msg); break; // incomming call + case 5 : capitel_number_of_call (*(short *)msg); break; // filename of incomming call + case 6 : capitel_have_no_carrier (*(unsigned long *)msg); break; // off_hook + case 7 : capitel_convert (*(unsigned long *)msg); break; // converting wav's + case 8 : capitel_dorescan (); break; // rescan + case 9 : capitel_remote_control (); break; // remote_control + case 10 : capitel_play_waw (msg); break; // play wav + case 11 : capitel_deactivate (); break; // deactivate + case 12 : capitel_doexit (); break; // exit capitel + default : sigFunc (1,"Unknown sigFunc in Capitel"); break; // unknown function + } + return; +} + +short init_error = 0; + +void capitel_init(void) +{ + if(!answer_init(sigFunc,1,LANGUAGE_ENG)) + { + answer_listen(); + answer_wav2alw_convert_all (); + PostMessage(hwndMain, WM_USER, (WPARAM)5, (LPARAM)NULL); + } else { + init_error = 1; + } +} + +void capitel_exit (void) +{ + if(strlen(cLastWavTmp)) /* delete temp-file from last */ + remove(cLastWavTmp); /* playback */ + + if (!init_error) { + answer_exit(); + while (answer_cannot_close()) Sleep(300); + } +} + +void capitel_record_welcome (char *name) +{ + PostMessage(hwndMain, WM_USER, (WPARAM)11, 0); + answer_record_welcome (name); + next_welcome = 1; +} + + +int onlyDigits(char* s) +{ + while(*s && *s != '(') if(!isdigit(*s) && !isspace(*s)) return 0; else s++; + return 1; +} + +void shExecute(char* pCmd) +{ + ShellExecute(GetDesktopWindow(), 0, pCmd, 0, 0, SW_SHOWDEFAULT); +} + +void shRecycle( char *prog ) +{ + SHFILEOPSTRUCT op; + UCHAR currDir[MAX_PATH], *buff; + + if( GetCurrentDirectory( sizeof( currDir ), currDir ) ) + { + buff = malloc( strlen(currDir) + strlen(prog) + 2 ); + + strcpy( buff, currDir ); + strcat( buff, "\\" ); /* append backslash */ + strcat( buff, prog ); + buff[strlen(buff)+1] = '\0'; /* double null-terminated! */ + + if( util_file_size(buff) > 0 ) + { + memset( &op, 0, sizeof( op ) ); + + op.wFunc = FO_DELETE; + op.pFrom = (LPCSTR) buff; + op.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | + FOF_NOERRORUI | FOF_RENAMEONCOLLISION | + FOF_SILENT; + + SHFileOperation( &op ); + } + else + remove( buff ); + + free( buff ); + } +} + +LANGID GetSystemLanguage() +{ + HKEY hKey; + LANGID iLangID; + char cLocale[16]; + HINSTANCE hKrnlDll; + int iResult, iType, iSize; + LANGID (APIENTRY *GetUserDefaultUILanguage)(void); + + iLangID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); + + if(IS_W2K) + { + hKrnlDll = LoadLibrary("kernel32.dll"); + if(!hKrnlDll) return iLangID; + + GetUserDefaultUILanguage = (LANGID(APIENTRY*)(void)) + GetProcAddress(hKrnlDll, "GetUserDefaultUILanguage"); + if(!GetUserDefaultUILanguage) + { + FreeLibrary(hKrnlDll); + return iLangID; + } + + iLangID = GetUserDefaultUILanguage(); + } + else if(IS_NT) + { + iResult = RegOpenKeyEx(HKEY_USERS, + ".DEFAULT\\Control Panel\\International", 0, KEY_READ, &hKey); + + if(iResult == ERROR_SUCCESS) + { + iSize = sizeof(cLocale); + iResult = RegQueryValueEx(hKey, "Locale", 0, &iType, cLocale, &iSize); + + if(iResult == ERROR_SUCCESS && iType == REG_SZ) + iLangID = LANGIDFROMLCID(strtoul(cLocale,0,16)); + + RegCloseKey(hKey); + } + } + else + { + iResult = RegOpenKeyEx(HKEY_CURRENT_USER, + "Control Panel\\Desktop\\ResourceLocale", 0, KEY_READ, &hKey); + + if(iResult == ERROR_SUCCESS) + { + iSize = sizeof(cLocale); + iResult = RegQueryValueEx(hKey, 0, 0, &iType, cLocale, &iSize); + + if(iResult == ERROR_SUCCESS && iType == REG_SZ) + iLangID = LANGIDFROMLCID(strtoul(cLocale,0,16)); + + RegCloseKey(hKey); + } + } + + return iLangID; +} + +BOOL EnumResLangProc( + HANDLE hModule, + LPCTSTR lpszType, + LPCTSTR lpszName, + WORD wIDLanguage, + LONG lParam) +{ + + (*((LANGID**)lParam))[0] = wIDLanguage; + (*((LANGID**)lParam))[1] = 0; + (*((LANGID**)lParam))++; + return 1; + +} +LANGID* GetResourceLanguages(char* res_id) +{ + static LANGID lang[256]; + LANGID* pLang = lang; + + lang[0] = 0; + EnumResourceLanguages(0, RT_DIALOG, res_id, + (ENUMRESLANGPROC)EnumResLangProc, (LONG)&pLang); + + return lang; +} + +LANGID GetDefaultLanguage(char* res_id) +{ + int i; + LANGID DefLang; + LANGID* pResLang; + + DefLang = GetSystemLanguage(); + pResLang = GetResourceLanguages(res_id); + + for(i = 0; pResLang[i]; i++) + if(pResLang[i] == DefLang) + return pResLang[i]; + + for(i = 0; pResLang[i]; i++) + if(PRIMARYLANGID(pResLang[i]) == PRIMARYLANGID(DefLang)) + return pResLang[i]; + + return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); +} + +int InitTrayIcon(HWND hwnd) +{ + HIMAGELIST hImgLst; + NOTIFYICONDATA* pData; + + hImgLst = ImageList_LoadBitmap(xAppInst, + MAKEINTRESOURCE((GetSystemMetrics(SM_CXSMICON)>16) ? + ID_TRAYBMP_LRG : ID_TRAYBMP_SML), + (GetSystemMetrics(SM_CXSMICON)>16) ? 20 : 16, 0, 0x00808000); + + MainWnd_SetTrayImgLst(hwnd, hImgLst); + + pData = (NOTIFYICONDATA*)calloc(1,sizeof(NOTIFYICONDATA)); + pData->cbSize = sizeof(NOTIFYICONDATA); + pData->hWnd = hwnd; + pData->uID = 0; + pData->uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; + pData->uCallbackMessage = WM_TRAY_CALLBACK; + pData->hIcon = 0; + LoadString(xAppInst, STR_WINDOW_TITLE, pData->szTip, sizeof(pData->szTip)); + + MainWnd_SetTrayData(hwnd, pData); + + return 0; +} + +int UpdateTrayIcon(HWND hwnd) +{ + LVITEM sItem; + HWND hwndList; + HIMAGELIST hImgLst; + NOTIFYICONDATA* pData; + int iState, iIdx, iMax; + + hwndList = GetDlgItem(hwnd, ID_LIST); + + hImgLst = MainWnd_GetTrayImgLst(hwnd); + pData = MainWnd_GetTrayData(hwnd); + if(!pData) return 0; + + if(MainWnd_GetShowTray(hwnd)) /* status anzeigen -> */ + { + iMax = ListView_GetItemCount(hwndList); /* anzahl rufe in liste ... */ + iState = iMax ? 1 : 0; + + for(iIdx = 0; iIdx < iMax; iIdx++) /* durch die liste gehen und */ + { /* pruefen, ob nicht-abgehoerte */ + sItem.mask = LVIF_IMAGE; /* rufe dabei sind */ + sItem.iItem = iIdx; + sItem.iSubItem = 0; + ListView_GetItem(hwndList, &sItem); + if(sItem.iImage == 1) iState = 2; + } + + if(!(GetMenuState(GetMenu(hwnd),IDM_TOGGLEACTIVATION,0) & MF_CHECKED)) + iState = 3; + + if(MainWnd_GetTrayStatus(hwnd) != iState) /* status veraendert? */ + { + if(pData->hIcon) DeleteObject(pData->hIcon); /* icon ersetzen */ + pData->hIcon = ImageList_GetIcon(hImgLst, iState, ILD_TRANSPARENT); + MainWnd_SetTrayStatus(hwnd, iState); /* status merken */ + if(pData->uID) Shell_NotifyIcon(NIM_MODIFY, pData); /* tray-icon */ + else pData->uID = 1, Shell_NotifyIcon(NIM_ADD, pData); /* setzen */ + } + else if(!pData->hIcon) /* noch kein icon geladen? */ + { + pData->hIcon = ImageList_GetIcon(hImgLst, iState, ILD_TRANSPARENT); + if(pData->uID) Shell_NotifyIcon(NIM_MODIFY, pData); + else pData->uID = 1, Shell_NotifyIcon(NIM_ADD, pData); + } + } + else /* status nicht anzeigen -> */ + { + MainWnd_SetTrayStatus(hwnd, 0); /* alles loeschen ... */ + if(pData->hIcon) DeleteObject(pData->hIcon), pData->hIcon = 0; + if(pData->uID) Shell_NotifyIcon(NIM_DELETE, pData), pData->uID = 0; + } + + return 1; +} + +int CleanupTrayIcon(HWND hwnd) +{ + NOTIFYICONDATA* pData; + + ImageList_Destroy(MainWnd_GetTrayImgLst(hwnd)); + MainWnd_SetTrayImgLst(hwnd, 0); + + pData = MainWnd_GetTrayData(hwnd); + + if(pData->hIcon) DeleteObject(pData->hIcon); + if(pData->uID) Shell_NotifyIcon(NIM_DELETE, pData); + + free(pData); + MainWnd_SetTrayData(hwnd, 0); + + return 1; +} + +int GetTrayIconRect(RECT* pRect) +{ + APPBARDATA sTaskBar; + + sTaskBar.cbSize = sizeof(&sTaskBar); /* position der taskbar holen */ + if(!SHAppBarMessage(ABM_GETTASKBARPOS,&sTaskBar)) return 0; + + pRect->left = sTaskBar.rc.right - GetSystemMetrics(SM_CYICON); + pRect->top = sTaskBar.rc.bottom - GetSystemMetrics(SM_CYICON); + pRect->right = sTaskBar.rc.right; /* rechte untere ecke der */ + pRect->bottom = sTaskBar.rc.bottom; /* taskbar errechnen */ + + return 1; +} + +int StoreWindowAttributes(HWND hwnd) +{ + HWND hwndList; + char cBuff[256]; + WINDOWPLACEMENT sWndPlace; + + hwndList = GetDlgItem(hwnd, ID_LIST); + + sWndPlace.length = sizeof(sWndPlace); /* wichtig: GetWindowPlacement */ + GetWindowPlacement(hwnd,&sWndPlace); /* liefert auch dann die letzte */ + /* gueltige position, wenn das */ + /* fenster minimiert wurde! */ + config_file_write_ulong(STD_CFG_FILE, WINDOW_XPOS, + sWndPlace.rcNormalPosition.left); + config_file_write_ulong(STD_CFG_FILE, WINDOW_YPOS, + sWndPlace.rcNormalPosition.top); + config_file_write_ulong(STD_CFG_FILE, WINDOW_XSIZE, + sWndPlace.rcNormalPosition.right - sWndPlace.rcNormalPosition.left); + config_file_write_ulong(STD_CFG_FILE, WINDOW_YSIZE, + sWndPlace.rcNormalPosition.bottom - sWndPlace.rcNormalPosition.top); + + sprintf(cBuff, "%d,%d,%d,%d,%d,%d", + IsIconic(hwnd) ? 1 : 0, + IsZoomed(hwnd) ? 1 : 0, + !IsWindowVisible(hwnd) ? 1 : 0, + (GetWindowLong(hwnd,GWL_EXSTYLE) & WS_EX_TOPMOST) ? 1 : 0, + MainWnd_GetShowTray(hwnd), + MainWnd_GetHideMin(hwnd)); + + config_file_write_string(STD_CFG_FILE, WINDOW_VIEW_FLAGS, cBuff); + + sprintf(cBuff, "%d,%d,%d,%d,%d", + ListView_GetColumnWidth(hwndList,0), + ListView_GetColumnWidth(hwndList,1), + ListView_GetColumnWidth(hwndList,2), + ListView_GetColumnWidth(hwndList,3), + ListView_GetColumnWidth(hwndList,4)); + + config_file_write_string(STD_CFG_FILE, WINDOW_COL_SIZE, cBuff); + + config_file_write_ulong(STD_CFG_FILE, + WINDOW_FRAMECTRLS_HIDDEN, !!GetWindowLong(hwnd,GWL_USERDATA)); + + return 1; +} + +int RestoreWindowAttributes(HWND hwnd) +{ + HWND hwndList; + char cBuff[128]; + int iCol0, iCol1, iCol2, iCol3, iCol4, xPos, yPos, xSize, ySize; + int iIsMin = 0, iIsMax = 0, iHide = 0, iTop = 0, iShowTray = 0, iMinHide = 0; + + hwndList = GetDlgItem(hwnd, ID_LIST); + + xPos = config_file_read_ulong(STD_CFG_FILE, WINDOW_XPOS, WINDOW_XPOS_DEF); + yPos = config_file_read_ulong(STD_CFG_FILE, WINDOW_YPOS, WINDOW_YPOS_DEF); + xSize = config_file_read_ulong(STD_CFG_FILE, WINDOW_XSIZE, WINDOW_XSIZE_DEF); + ySize = config_file_read_ulong(STD_CFG_FILE, WINDOW_YSIZE, WINDOW_YSIZE_DEF); + + if(!xSize || !ySize) return 0; + + config_file_read_string(STD_CFG_FILE, + WINDOW_VIEW_FLAGS, cBuff, WINDOW_VIEW_FLAGS_DEF); + + sscanf(cBuff,"%d,%d,%d,%d,%d,%d", + &iIsMin, &iIsMax, &iHide, &iTop, &iShowTray, &iMinHide); + + config_file_read_string(STD_CFG_FILE, + WINDOW_COL_SIZE, cBuff, WINDOW_COL_SIZE_DEF); + + if(sscanf(cBuff,"%d,%d,%d,%d,%d",&iCol0,&iCol1,&iCol2,&iCol3,&iCol4) == 5) + { + ListView_SetColumnWidth(hwndList, 0, iCol0); + ListView_SetColumnWidth(hwndList, 1, iCol1); + ListView_SetColumnWidth(hwndList, 2, iCol2); + ListView_SetColumnWidth(hwndList, 3, iCol3); + ListView_SetColumnWidth(hwndList, 4, iCol4); + } + + if(config_file_read_ulong(STD_CFG_FILE, + WINDOW_FRAMECTRLS_HIDDEN,WINDOW_FRAMECTRLS_HIDDEN_DEF)) + { + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_HIDEFRAMECONTROLS,1), 0); + } + + MoveWindow(hwnd, xPos, yPos, xSize, ySize, 0); + + if(!iHide) + { + if(iIsMax) ShowWindow(hwnd, SW_MAXIMIZE); + else if(iIsMin) ShowWindow(hwnd, SW_MINIMIZE); + else ShowWindow(hwnd, SW_SHOW); + } + + if(iTop) SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, + 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE); + + if(iShowTray) + MainWnd_SetShowTray(hwnd, iShowTray), + UpdateTrayIcon(hwnd); + + if(iMinHide) + MainWnd_SetHideMin(hwnd, iMinHide); + + return 1; +} + +typedef struct sMsgBoxParms +{ + char* pText; + char* pTitle; + char* pCheckText; + int* pCheckFlag; + int fStyle; + int fExtended; + HICON hIcon; +} +tMsgBoxParms; + +int MyMsgBox(HWND hwndOwner, + char* pText, char* pTitle, int fStyle, char* pIcon) +{ + int iRet; + HINSTANCE hInst; + tMsgBoxParms sParms; + char cText[2048], cTitle[256]; + + hInst = GetModuleHandle(0); + + if(!HIWORD((DWORD)pText)) + LoadString(hInst, LOWORD((DWORD)pText), cText, sizeof(cText)), + sParms.pText = cText; + else sParms.pText = pText; + + if(!pTitle) + GetWindowText(hwndOwner, cTitle, sizeof(cTitle)), + sParms.pTitle = cTitle; + else if(!HIWORD((DWORD)pTitle)) + LoadString(hInst, LOWORD((DWORD)pTitle), cTitle, sizeof(cTitle)), + sParms.pTitle = cTitle; + else sParms.pTitle = pTitle; + + sParms.fStyle = fStyle; + sParms.fExtended = 0; + sParms.hIcon = LoadIcon(0, pIcon); + if(!sParms.hIcon) sParms.hIcon = LoadIcon(hInst, pIcon); + + iRet = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_MSGBOX), + hwndOwner, (DLGPROC)MsgBoxProc, (LPARAM)&sParms); + + if(sParms.hIcon) DeleteObject(sParms.hIcon); + return iRet; +} + +int MyMsgBoxEx(HWND hwndOwner, + char* pText, char* pTitle, char* pChkText, int fStyle, + char* pIcon, char* pCfgFile, char* pCfgKey) +{ + HINSTANCE hInst; + tMsgBoxParms sParms; + int iRet, fCheck = 0; + char cText[2048], cTitle[256], cChkText[256]; + + fCheck = config_file_read_ulong(pCfgFile, pCfgKey, 0); + if(fCheck) return (fStyle == MB_YESNO) ? IDYES : IDOK; + + hInst = GetModuleHandle(0); + + if(!HIWORD((DWORD)pText)) + LoadString(hInst, LOWORD((DWORD)pText), cText, sizeof(cText)), + sParms.pText = cText; + else sParms.pText = pText; + + if(!pTitle) + GetWindowText(hwndOwner, cTitle, sizeof(cTitle)), + sParms.pTitle = cTitle; + else if(!HIWORD((DWORD)pTitle)) + LoadString(hInst, LOWORD((DWORD)pTitle), cTitle, sizeof(cTitle)), + sParms.pTitle = cTitle; + else sParms.pTitle = pTitle; + + if(!HIWORD((DWORD)pChkText)) + LoadString(hInst, LOWORD((DWORD)pChkText), cChkText, sizeof(cChkText)), + sParms.pCheckText = cChkText; + else sParms.pCheckText = pChkText; + + sParms.fStyle = fStyle; + sParms.fExtended = 1; + sParms.pCheckFlag = &fCheck; + sParms.hIcon = LoadIcon(0, pIcon); + if(!sParms.hIcon) sParms.hIcon = LoadIcon(hInst, pIcon); + + iRet = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_MSGBOXEX), + hwndOwner, (DLGPROC)MsgBoxProc, (LPARAM)&sParms); + + if(sParms.hIcon) DeleteObject(sParms.hIcon); + if((iRet == IDYES || iRet == IDOK) && fCheck) + config_file_write_ulong(pCfgFile, pCfgKey, 1); + return iRet; + +} + +LRESULT CALLBACK MsgBoxProc( + HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch(uMsg) + { + case WM_INITDIALOG: + { + HDC hdc; + RECT sRc; + char cBuf[32]; + HWND hwndOwner; + HGDIOBJ hOldObj; + int iNeedH, iCurrH; + tMsgBoxParms* pParms = (tMsgBoxParms*)lParam; + + SetWindowText(hwnd, pParms->pTitle); + SetDlgItemText(hwnd, IDC_TEXT, pParms->pText); + + GetClientRect(GetDlgItem(hwnd,IDC_TEXT),&sRc); + iCurrH = sRc.bottom; + hdc = GetDC(GetDlgItem(hwnd,IDC_TEXT)); + hOldObj = SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); + iNeedH = DrawText(hdc, pParms->pText, + strlen(pParms->pText), &sRc, DT_LEFT|DT_CALCRECT|DT_WORDBREAK); + SelectObject(hdc, hOldObj); + ReleaseDC(GetDlgItem(hwnd,IDC_TEXT), hdc); + + if(iNeedH > iCurrH) + { + GetWindowRect(hwnd, &sRc); + SetWindowPos(hwnd, 0, 0, 0, sRc.right - sRc.left, sRc.bottom - + sRc.top + iNeedH - iCurrH, SWP_NOMOVE | SWP_NOZORDER); + + GetWindowRect(GetDlgItem(hwnd,IDC_TEXT), &sRc); + SetWindowPos(GetDlgItem(hwnd,IDC_TEXT), 0, 0, 0, + sRc.right - sRc.left, iNeedH, SWP_NOMOVE | SWP_NOZORDER); + + GetWindowRect(GetDlgItem(hwnd,IDOK), &sRc); + ScreenToClient(hwnd, (POINT*)&sRc); + SetWindowPos(GetDlgItem(hwnd,IDOK), 0, sRc.left, sRc.top + + iNeedH - iCurrH, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + + GetWindowRect(GetDlgItem(hwnd,IDCANCEL), &sRc); + ScreenToClient(hwnd, (POINT*)&sRc); + SetWindowPos(GetDlgItem(hwnd,IDCANCEL), 0, sRc.left, sRc.top + + iNeedH - iCurrH, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + + GetWindowRect(GetDlgItem(hwnd,IDYES), &sRc); + ScreenToClient(hwnd, (POINT*)&sRc); + SetWindowPos(GetDlgItem(hwnd,IDYES), 0, sRc.left, sRc.top + + iNeedH - iCurrH, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + + GetWindowRect(GetDlgItem(hwnd,IDNO), &sRc); + ScreenToClient(hwnd, (POINT*)&sRc); + SetWindowPos(GetDlgItem(hwnd,IDNO), 0, sRc.left, sRc.top + + iNeedH - iCurrH, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + + GetWindowRect(GetDlgItem(hwnd,IDC_CHECK), &sRc); + ScreenToClient(hwnd, (POINT*)&sRc); + SetWindowPos(GetDlgItem(hwnd,IDC_CHECK), 0, sRc.left, sRc.top + + iNeedH - iCurrH, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + } + + if(pParms->hIcon) + { + SendDlgItemMessage(hwnd, IDC_ICO, + STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)pParms->hIcon); + } + + if(pParms->fExtended == 1) + { + SetDlgItemText(hwnd, IDC_CHECK, pParms->pCheckText); + CheckDlgButton(hwnd, IDC_CHECK, + *(pParms->pCheckFlag) ? BST_CHECKED : BST_UNCHECKED); + SetWindowLong(hwnd, DWL_USER, (LONG)pParms->pCheckFlag); + } + + switch(pParms->fStyle) + { + case MB_OKCANCEL: + DestroyWindow(GetDlgItem(hwnd,IDYES)); + DestroyWindow(GetDlgItem(hwnd,IDNO)); + SendMessage(hwnd, DM_SETDEFID, (WPARAM)IDOK, 0); + break; + case MB_YESNO: + DestroyWindow(GetDlgItem(hwnd,IDOK)); + DestroyWindow(GetDlgItem(hwnd,IDCANCEL)); + SendMessage(hwnd, DM_SETDEFID, (WPARAM)IDYES, 0); + break; + default: + GetDlgItemText(hwnd, IDOK, cBuf, sizeof(cBuf)); + SetDlgItemText(hwnd, IDCANCEL, cBuf); + DestroyWindow(GetDlgItem(hwnd,IDOK)); + DestroyWindow(GetDlgItem(hwnd,IDYES)); + DestroyWindow(GetDlgItem(hwnd,IDNO)); + SetWindowLong(GetDlgItem(hwnd,IDCANCEL), GWL_ID, IDOK); + SendMessage(hwnd, DM_SETDEFID, (WPARAM)IDOK, 0); + break; + } + + hwndOwner = GetWindow(hwnd,GW_OWNER); + + if(!IsWindowVisible(hwndOwner) || IsIconic(hwndOwner)) + CenterWindow(hwnd, 0); + else + CenterWindow(hwnd, hwndOwner); + + ShowWindow(hwnd, SW_SHOW); + + return 1; + } + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDOK: + case IDYES: + case IDCANCEL: + case IDNO: + { + int* pChkFlag = (int*)GetWindowLong(hwnd, DWL_USER); + if(pChkFlag) *pChkFlag = IsDlgButtonChecked(hwnd, IDC_CHECK); + EndDialog(hwnd, LOWORD(wParam)); + return 1; + } + } + } + + return 0; +} + +/* + * + * PlayCalls() + * + * spielt alle oder alle ausgewaelten anrufe ab + * + */ + +int PlayCalls(HWND hwndList, int iPlayAll) +{ + char* pHlp; + tCall* pCall; + int iCnt, iIdx, iHlp; + FILE* pFile1, * pFile2; + char cTmp[MAX_PATH], cAlwTmp[MAX_PATH], cWavTmp[MAX_PATH]; + + GetTempPath(sizeof(cTmp), cTmp); /* generate unique file in */ + GetTempFileName(cTmp, ALW, 0, cAlwTmp); /* the system's temp-dir */ + GetTempFileName(cTmp, WAV, 0, cWavTmp); /* for alw and wav files */ + + pFile1 = fopen(cAlwTmp, "wb"); /* open temporary alw-file */ + if(!pFile1) return 0; + + SetCursor(LoadCursor(0,IDC_WAIT)); /* show wait cursor */ + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) /* step through all items */ + { + if(!iPlayAll && /* skip if not selected to play */ + !ListView_GetItemState(hwndList,iIdx,LVIS_SELECTED)) continue; + + pCall = MainListGetCall(hwndList,iIdx); /* get info about this call */ + if(pCall->iIsDigital) continue; /* digital call? -> skip it */ + if(pCall->iDuration == 0) continue; /* no voice msg? -> skip it */ + + if(ftell(pFile1)) /* this is not first call? */ + fwrite(beepdata, 1024, 1, pFile1); /* write beep to temp alw */ + + pFile2 = fopen(pCall->cAlwFileName, "rb"); /* try to open this file */ + if(!pFile2) continue; /* failed? -> skip it */ + + pHlp = (char*)malloc(10240); /* alloc buff for copy */ + while(iHlp = fread(pHlp,1,10240,pFile2)) /* copy contents of the file */ + fwrite(pHlp, 1, iHlp, pFile1); /* to temp alw */ + free(pHlp); /* free copy buff */ + + fclose(pFile2); /* close alw file of this call */ + } + + fclose(pFile1); /* close temp-alw */ + + iHlp = !config_file_read_ulong(STD_CFG_FILE, + GENERATE_16_BIT_WAVES, GENERATE_16_BIT_WAVES_DEF); + alw2wav(cAlwTmp, cWavTmp, (short)iHlp); /* convert temp-alw to wav */ + remove(cAlwTmp); /* delete temp-alw */ + + SetCursor(LoadCursor(0,IDC_ARROW)); /* remove wait cursor */ + + if(!PlaySound(cWavTmp,0,SND_FILENAME|SND_ASYNC)) /* start playback */ + { + remove(cWavTmp); /* failed? remove temp-wav */ + return 0; /* and get out here */ + } + + if(strlen(cLastWavTmp)) /* delete temp-file */ + remove(cLastWavTmp); /* from last playback */ + strcpy(cLastWavTmp, cWavTmp); /* remember temp file name */ + + iCnt = ListView_GetItemCount(hwndList); + for(iIdx = 0; iIdx < iCnt; iIdx++) /* again, step through items */ + { + if(!iPlayAll && /* skip if not selected to play */ + !ListView_GetItemState(hwndList,iIdx,LVIS_SELECTED)) continue; + + pCall = MainListGetCall(hwndList,iIdx); /* get info about this call */ + if(pCall->iIsDigital) continue; /* digital call? -> skip it */ + if(pCall->iDuration == 0) continue; /* no voice msg? -> skip it */ + + pCall->iState = 1; + MainListUpdateIcon(hwndList, iIdx); /* set icon to 'heared msg' */ + SaveCall(pCall); /* save new state to idx-file */ + } + + return 1; +} + +int GetSpecialFolderPath(HWND hwndOwner, + int nFolder, char* pPathBuff) +{ + int rc; + LPMALLOC pIMalloc; + ITEMIDLIST* pItemIdList; + + pPathBuff[0] = 0; + + if(SHGetMalloc(&pIMalloc) != NOERROR) + return 0; + + if(SHGetSpecialFolderLocation(hwndOwner, nFolder, &pItemIdList) != NOERROR) + { + pIMalloc->lpVtbl->Release(pIMalloc); + return 0; + } + + rc = SHGetPathFromIDList(pItemIdList, pPathBuff); + pIMalloc->lpVtbl->Free(pIMalloc, pItemIdList); + pIMalloc->lpVtbl->Release(pIMalloc); + + if(!rc) return 0; + else return strlen(pPathBuff); +} + +int AddToolTip(HWND hwndList, HWND hwndTTip, int iItemIdx, char* pText) +{ + tCall* pCall; + TOOLINFO info; + + pCall = MainListGetCall(hwndList, iItemIdx); + + memset(&info, 0, sizeof(info)); + info.cbSize = sizeof(info); + info.uFlags = 0; + info.hwnd = hwndList; + info.uId = (UINT)pCall->iNum; + info.lpszText = pText; + + SendMessage(hwndTTip, TTM_ADDTOOL, 0, (LPARAM)&info); + UpdateToolRect(hwndList, hwndTTip, iItemIdx); + + return 1; +} + +int DelToolTip(HWND hwndList, HWND hwndTTip, int iItemIdx) +{ + tCall* pCall; + TOOLINFO info; + + pCall = MainListGetCall(hwndList, iItemIdx); + + info.cbSize = sizeof(info); + info.uFlags = 0; + info.hwnd = hwndList; + info.uId = (UINT)pCall->iNum; + + SendMessage(hwndTTip, TTM_DELTOOL, 0, (LPARAM)&info); + + return 1; +} + +int UpdateToolRect(HWND hwndList, HWND hwndTTip, int iItemIdx) +{ + tCall* pCall; + TOOLINFO info; + + pCall = MainListGetCall(hwndList, iItemIdx); + + memset(&info, 0, sizeof(info)); + info.cbSize = sizeof(info); + info.uFlags = 0; + info.hwnd = hwndList; + info.uId = (UINT)pCall->iNum; + + ListView_GetItemRect(hwndList, iItemIdx, &info.rect, LVIR_BOUNDS); + + SendMessage(hwndTTip, TTM_NEWTOOLRECT, 0, (LPARAM)&info); + + return 1; +} + +int UpdateAllToolRect(HWND hwndList, HWND hwndTTip) +{ + int iCnt = ListView_GetItemCount(hwndList); + while(iCnt--) UpdateToolRect(hwndList, hwndTTip, iCnt); + return 1; +} + +int SaveCall(tCall* pCall) +{ + FILE* pFile; + + pFile = fopen(pCall->cIdxFileName, "w"); + if(!pFile) return 0; + + fprintf(pFile, "%s\n", pCall->cCallerName); + fprintf(pFile, "%02hu.%02hu.%04hu\n", + pCall->sTime.wDay, pCall->sTime.wMonth, pCall->sTime.wYear); + fprintf(pFile, "%02hu:%02hu:%02hu\n", + pCall->sTime.wHour, pCall->sTime.wMinute, pCall->sTime.wSecond); + fprintf(pFile, "%d\n", pCall->iDuration); + fprintf(pFile, "%s\n", pCall->cCalledPort); + fprintf(pFile, "%s\n", pCall->cWavFileName); + fprintf(pFile, "%d\n", pCall->iState); + fprintf(pFile, "%d\n", pCall->iIsDigital); + fprintf(pFile, "%s\n", pCall->cCallerNameOrg); + + fclose(pFile); + + return 1; +} + +int ReadCall(tCall* pCall, char* pFileName) +{ + int iLine; + FILE* pFile; + char* pHlp, cLine[256]; + + pFile = fopen(pFileName, "r"); + if(!pFile) return 0; + + for(pHlp = pFileName; *pHlp && !isdigit(*pHlp); pHlp++) ; + + pCall->iNum = atoi(pHlp); + strcpy(pCall->cIdxFileName, pFileName); + sprintf(pCall->cAlwFileName, CALL_MAKE_MASK_ALW, pCall->iNum); + + for(iLine = 0; fgets(cLine,sizeof(cLine),pFile); iLine++) + { + while(isspace(cLine[strlen(cLine)-1])) + cLine[strlen(cLine)-1] = 0; + + switch(iLine) + { + case 0: strcpy(pCall->cCallerName, cLine); break; + case 1: sscanf(cLine, "%hu.%hu.%hu", + &pCall->sTime.wDay, &pCall->sTime.wMonth, &pCall->sTime.wYear); break; + case 2: sscanf(cLine, "%hu:%hu:%hu", + &pCall->sTime.wHour, &pCall->sTime.wMinute, &pCall->sTime.wSecond); break; + case 3: pCall->iDuration = atoi(cLine); break; + case 4: strcpy(pCall->cCalledPort, cLine); break; + case 5: strcpy(pCall->cWavFileName, cLine); break; + case 6: pCall->iState = atoi(cLine); break; + case 7: pCall->iIsDigital = atoi(cLine); break; + case 8: strcpy(pCall->cCallerNameOrg, cLine); break; + } + } + + fclose(pFile); + + return 1; +} diff --git a/capitel/source.win/selfx.rc b/capitel/source.win/selfx.rc new file mode 100644 index 0000000..629c748 --- /dev/null +++ b/capitel/source.win/selfx.rc @@ -0,0 +1,9 @@ + +#define RES_MAIN_ICON "..\\..\\setup\\source.win\\ico\\sfx1.ico" + +#define RES_COPY_AVI "..\\..\\setup\\source.win\\avi\\copy.avi" + +#define SFX_COMMANDLINE "setup.exe" +#define SFX_CABINETNAME "..\\..\\capitel\\obj.win\\selfx.cab" + +#include "..\..\setup\source.win\selfx.rc" diff --git a/capitel/source.win/setup.rc b/capitel/source.win/setup.rc new file mode 100644 index 0000000..7715db6 --- /dev/null +++ b/capitel/source.win/setup.rc @@ -0,0 +1,39 @@ + +#define RES_MAIN_ICON "..\\..\\setup\\source.win\\ico\\setup1.ico" + +#define RES_NEWWIZ_WATER1 "..\\..\\setup\\source.win\\bmp\\wizard1.bmp" +#define RES_NEWWIZ_WATER2 "..\\..\\setup\\source.win\\bmp\\wizard2.bmp" +#define RES_IMGLST_BITMAP "..\\..\\setup\\source.win\\bmp\\sellist.bmp" + + +#define TEXT_ENG_TITLE "CapiTel for Windows Setup" +#define TEXT_ENG_INSTALL "This wizard installs CapiTel for Windows onto your computer, a full-featured and highly configurable answering machine for ISDN.\r\rCapiTel provides many handy functions which you can customise to your requirements. You can configure personalised greetings for individual callers, call your mobile phone when new messages are left by specific callers and much more.\r\rPlease press Next to begin the installation." + +#define TEXT_GER_TITLE "CapiTel für Windows Setup" +#define TEXT_GER_INSTALL "Dieser Assistent installiert CapiTel für Windows auf Ihrem Computer, einen komfortablen Anrufbeantworter für Ihren ISDN-Anschluß.\r\rCapiTel bietet eine Vielzahl von praktischen Funktionen, die Sie einfach an Ihre Bedürfnisse anpassen können. Sie können bestimmten Personen spezielle Ansagetexte zuordnen, sich bei neuen Anrufen automatisch benachrichtigen lassen, und vieles mehr.\r\rKlicken Sie auf 'Weiter', um die Installation zu beginnen." + +#define TEXT_FRE_TITLE "Installation de CapiTel sous Windows" +#define TEXT_FRE_INSTALL "Cette procédure installe CapiTel sous Windows, répondeur automatique hautement configurable pour ligne RNIS, sur votre ordinateur.\r\rCapiTel offre une multitude de fonctions pratiques que vous pourrez configurer ŕ votre guise. Vous pouvez configurer des messages d'acceuil personnalisés selon l'appelant, appeler votre téléphone mobile quand un nouveau message est laissé par une tierce personne, ainsi que beaucoup d'autres fonctions pratiques.\r\r Appuyez sur 'Suivant' pour lancer l'installation." + +#define TEXT_ITA_TITLE "CapiTel per il setup di Windows" +#define TEXT_ITA_INSTALL "Questo assistente di Windows installa CapiTel sul vostro computer, una segreteria telefonica per ISDN completa esemplice da configurare.\r\rCapiTel offre una varietŕ di funzioni pratiche, chesi possono facilmente adeguare ad ogni esigenza. Si possono assegnare particolari annunci della segreteria telefonica ad utenti differenti, farsichiamare, ad esempio sul telefono cellulare, quando determinate persone hannolasciato un messaggio e molto di piů.\r\rSelezionare 'Avanti' per iniziare l'installazione." + +#define TEXT_DUT_TITLE "Capitel voor Windows setup" +#define TEXT_DUT_INSTALL "Deze Deze wizard installeert Capitel, een luxe antwoordapparaat voor uw ISDN-lijn, op uw computer.\r\rCapiTel biedt veel handige functies die u naar eigen behoefte kunt aanpassen. Zo kunt u specifieke welkomstboodschappen instellen voor bepaalde bellers en uw mobiele telefoon laten bellen wanneer een nieuwe boodschap is ontvangen. En nog veel meer...\r\rKlik op 'Volgende' om met de installatie te beginnen." + +#define TEXT_DAN_TITLE "CapiTel for Windows Setup" +#define TEXT_DAN_INSTALL "Denne wizard installerer CapiTel pĺ din computer, en luksori s telefonsvarer for din ISDN linie.\r\rCapiTel leverer en masse handy funktioner, du kan ćndre efter dine behov. Du kan konfigurere velkomster til bestemte personer og CapiTel can ringe din mobil op, nĺr der er en y besked. Og meget mere...\r\rTryk venligst pĺ 'Nćste' for at starte installationen." + +#define TEXT_FIN_TITLE "CapiTel for Windows Asennus" +#define TEXT_FIN_INSTALL "Tämä asennusohjelma asentaa tietokoneeseesi monipuolisen ja helppokäyttöisen ISDN-puhelinvastaajan, CapiTel:n.\r\rCapiTel sisältää useita hyödyllisiä toimintoja, joita voit muokata omien tarpeittesi mukaisiksi. Voit esim. määritellä yksilöllisen vastaajatervehdyksen kullekin soittajalle, ohjelma voi soittaa matkapuhelimeesi kun tietty henkilö on jättänyt viestin ja paljon muuta...\r\rPaina Next-painiketta aloittaaksesi asennuksen." + +#define TEXT_NOR_TITLE "CapiTel for Windows oppsett" +#define TEXT_NOR_INSTALL "Programmet vil installere CapiTel pĺdin PC, en lukseri s telefonsvarer for din ISDN-linje.\r\rCapiTel tilbyr en rekke funksjoner som du kan skreddersy for ditt behov. Du kan lage personlige til spesielle personer, og du kan ringe mobiltelefonen nĺr nye meldinger er ankommet, plussmye mere...\r\rVennligst trykk 'Neste' for ĺinstallere CapiTel" + +#define TEXT_SPA_TITLE "Instalación de CapiTel para Windows" +#define TEXT_SPA_INSTALL "Este asistente instala CapiTel para Windows en tu ordenador, un contestador automático para RDSI altamente configurable y con todas sus características.\r\rCapitel proporciona muchas funciones prácticas que pueden ser personalizadas según las necesidades. Se pueden configurar saludos personalizados para llamantes individuales, llamar a tu teléfono móvil cuando nuevos mensajes son dejados por llamantes específicos y mucho más.\r\rPor favor, pulsa Siguiente para iniciar la instalación." + +//#define TEXT_SWE_TITLE "Installation av CapiTel under Windows" +//#define TEXT_SWE_INSTALL "Programmet installerar CapiTel pĺ din dator. CapiTel är en fullödig telefonsvarare för din ISDN-lina.\r\rCapiTel har en mängd praktiska funktioner som kan anpassas efter behov. Du kan konfigurera välkomsttexten för olika personer och automatiskt ringa upp din mobiltelefon när ett meddelande inkommer. Och mycket mer...\r\rTryck 'Nästa' för att pĺbörja installationen." + +#include "..\..\setup\source.win\setup.rc" \ No newline at end of file diff --git a/capitel/source.win/toggle.txt b/capitel/source.win/toggle.txt new file mode 100644 index 0000000..e27e1f0 --- /dev/null +++ b/capitel/source.win/toggle.txt @@ -0,0 +1,36 @@ +From: "Peter" +Newsgroups: de.comp.os.ms-windows.programmer +References: <387a50fa.3938603@news.oche.de> +Subject: Re: caps-lock, num-lock und scroll lock manipulieren +Date: Tue, 11 Jan 2000 14:25:43 +0100 +Lines: 22 +X-Priority: 3 +X-MSMail-Priority: Normal +X-Newsreader: Microsoft Outlook Express 5.00.2919.6600 +X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600 +NNTP-Posting-Host: 212.144.200.5 +Message-ID: <387b2e7f.0@news.arcor-ip.de> +X-Trace: 11 Jan 2000 14:22:07 +0100, 212.144.200.5 +Path: news.oche.de!news.rwth-aachen.de!akk.uni-karlsruhe.de!rz.uni-karlsruhe.de!newsfeed.nacamar.de!newsfeed.arcor-ip.de!news.arcor-ip.de!212.144.200.5 +Xref: news.oche.de de.comp.os.ms-windows.programmer:17627 + + +"Werner Fehn" schrieb im Newsbeitrag +news:387a50fa.3938603@news.oche.de... +> hi, +> +> ich suche code oder hinweise, wie ich obige led's blinken lassen kann. +> +> danke schonmal +> werner + +Hallo... + +Am einfachsten geht's mit getürkten Tastatureingaben mit Hilfe der +API-Funktion "keybd_event". +Beispiel: MSDN Article ID: Q177674. + +Tschau... +Peter + + diff --git a/capitel/source/capitel.c b/capitel/source/capitel.c new file mode 100644 index 0000000..63ce013 --- /dev/null +++ b/capitel/source/capitel.c @@ -0,0 +1,160 @@ +#include + +#ifndef unix +#include +#include +#endif + +#include +#include +#include +#include + +#include "../../../units/common.src/bastypes.h" + +#include "../../../units/common.src/os.h" +#include "../../answer/source/answer.h" +#include "../../isdn/source.os2/isdnmsg1.h" +#include "../../../units/common.src/num2nam.h" +#include "../../common/source/version.h" +#include "../../common/source/texte.h" +#include "../../util/source/dosstart.h" +#include "../../common/source/global.h" + +void capitel_number_of_call (short num) +{ + if (num > 0) { printf (CALL_MAKE_MASK_WAV, num);printf (" ");} + if (num == 0) printf (" ->record <-"); + if (num < 0) printf (" ->offhook<-"); +} + +void capitel_have_no_carrier (unsigned long sec) +{ + printf (", %3ld seconds.\n", sec); +} + +void capitel_remote_control (void) +{ + printf (", RC.\n"); +} + +void capitel_connect_ind (TCapiInfo *msg) +{ + struct tm *tmbuf; + time_t tod; + char cip = 'A'; + + if (msg->is_digital) cip = 'D'; + + time( &tod ); + tmbuf = localtime( &tod ); + +//printf ("\r\norg=%s\r\n",msg->caller_org_name); + + printf("%02d/%02d/%02d %02d:%02d:%02d, %s, from %s(%c)", tmbuf->tm_mday, tmbuf->tm_mon+1, tmbuf->tm_year+1900,tmbuf->tm_hour, tmbuf->tm_min, tmbuf->tm_sec, msg->called_name, msg->caller_name, cip ); + return; +} + +void capitel_convert (unsigned long tip) +{ + if (tip) { +// printf ("Capitel disabled while converting...\n"); + } else { +// printf ("Converting done...\n"); + } +}; + +void capitel_deactivate (void) +{ + printf ("Capitel deactivated!\n"); +} +void capitel_exit (void) +{ + printf ("Capitel stops\n"); + exit (99); +} + +void show_copyright(void) +{ + printf ("\n"); + printf (APPSHORT); +#ifdef WIN32 + printf (" for WINDOWS 95 and WINDOWS/NT, Version "); +#endif +#ifdef OS2 + printf (" for OS/2, Version "); +#endif +#ifdef UNIX + printf (" for UNIX, Version "); +#endif + printf (APPVER); + printf ("\n\n"); + printf ("%s %s <%s>\n" , "Copyright (c) " APPDATE " by", APP_AUTOR_2, APP_CAWIM_INET ); + printf (" and %s <%s>\n\n", APP_AUTOR_1, APP_WERNER_INET); +} + +char c = '#'; + +void sigFunc ( short num, void *msg ) +{ + switch( num ) { + + case 1 : printf ("\n\nWarning Message: %s\n\n",(char*)msg); break; // warning string + case 2 : printf ("\n\nCritical Error : %s\n\n",(char*)msg); break; // critical error string + case 3 : printf ("\n\nFatal Error : %s\n\n",(char*)msg); c = 27; break; // fatal error string + case 4 : capitel_connect_ind (msg); break; // incomming call + case 5 : capitel_number_of_call (*(short *)msg); break; // filename of incomming call + case 6 : capitel_have_no_carrier (*(unsigned long *)msg); break; // off_hook + case 7 : capitel_convert (*(unsigned long *)msg); break; // converting wav's + case 8 : break; // rescan + case 9 : capitel_remote_control (); break; // remote_control + case 10 : break; // play wav + case 11 : capitel_deactivate (); break; // deactivate + case 12 : capitel_exit (); break; // exit capitel + default : printf ("Unknown capitel_sigfunc: %d\n", num); break; + } + return; +} + +int main(void) +{ + char device[100]; + + setbuf( stdout, NULL ); + show_copyright(); + + printf("Press ESC to abort or 'C' to clear screen or 'R' to record new welcome text.\n"); + printf("Starting answering machine on "); + + if(!answer_init( sigFunc, 1, LANGUAGE_ENG)) { + answer_name_of_interface(device); + printf ("%s ...\n\n",device); + answer_listen(); + while( c != 27 ) { + OsSleep (300); +#ifdef UNIX + c = toupper(getchar()); +#else + c = toupper(getch()); +#endif + switch (c) { + case 'C' : printf(""); + printf("Press ESC to abort or 'C' to clear screen or 'R' to record new welcome text.\n\n"); + break; + case 'R' : answer_record_welcome(DEFALWFILE); + printf("\n\nThe next imcomming call will be stored as new welcome text.\n"); + break; + } + } + answer_exit(); + + printf("\n\nClosing %s ...\n", device); + while (answer_cannot_close()){ + OsSleep (300); + } + } else { + printf("ERROR: Can't initialize comm-device!\n"); + } + return (0); +} + diff --git a/common/source/global.h b/common/source/global.h new file mode 100644 index 0000000..8897ea3 --- /dev/null +++ b/common/source/global.h @@ -0,0 +1,288 @@ + +// einige sprachunabhaenhige und auch sonst ziemlich wichtige texte + +#define APP_HOMEPAGE "http://www.2tec.com" + +#define APP_WERNER_INET "wf@2tec.com" +#define APP_CAWIM_INET "cw@2tec.com" + +#define APP_WERNER_WWW "http://www.2tec.com/wf" +#define APP_CAWIM_WWW "http://www.2tec.com/cw" + +#define APP_AUTOR_1 "Werner Fehn" +#define APP_AUTOR_2 "Carsten Wimmer" + +// files + +#define INIFILE "capitel.ini" +#define ININAME "capitel" + +#define DEFALWFILE "welcome.alw" +#define DEFALWFILE_NXT "welcome.nxt" + +#define PRTFILE "capitel.prt" +#define NAMFILE "capitel.nam" +#define NUMFILE "capitel.num" +#define ACTFILE "capitel.act" + +#define ALLFILE_ALW "all_call.alw" +#define ALLFILE_WAV "all_call.wav" + +#define CONV_TMP "conv.tmp" +#define CALL_TMP "call.tmp" + +#define CALL_MASK_WAV "call*.wav" +#define CALL_MASK_IDX "call*.idx" +#define CALL_MASK_ALW "call*.alw" + +#define CALL_MAKE_MASK_WAV "call%04d.wav" +#define CALL_MAKE_MASK_ALW "call%04d.alw" +#define CALL_MAKE_MASK_IDX "call%04d.idx" + +#define WAV_EXT ".wav" +#define ALW_EXT ".alw" +#define IDX_EXT ".idx" + +#define WAV "wav" +#define ALW "alw" +#define IDX "idx" + + +#define WINDOW_SAVECALLAS_PATH "window_savecallas_path" +#define WINDOW_SAVECALLAS_PATH_DEF 0 /* this has no default!!! */ + +// dtmf + +#define DTMF_REMOTECONTROL "REMOTECONTROL" +#define DTMF_REBOOT "REBOOT" +#define DTMF_QUIT "QUIT" +#define DTMF_DEACTIVATE "DEACTIVATE" +#define DTMF_SETCALLBACK "SETCALLBACK" + +// registration + +#define CONN_CNT_WARN 2 +#define CONN_CNT_DEACT 5 + +// sonstige + +#define STD_STRING_LEN 250 + + +#define LANGUAGE_GER 0 +#define LANGUAGE_ENG 1 +#define LANGUAGE_FRA 2 + +// cfg-file + +#define STD_CFG_FILE "capitel.cfg" +#define IS_DTMF_UP_DEF 50000 +#define IS_DTMF_DOWN_DEF 13000 + + +#define DEFAULT_REC_TIME "default_max_record_time" +#define DEFAULT_REC_TIME_DEF 300 + +#define DEFAULT_ANSW_DELAY "default_answer_delay" +#define DEFAULT_ANSW_DELAY_DEF 5 + +#define MAX_SILENCE_TIME "default_max_silence_time" +#define MAX_SILENCE_TIME_DEF 10 + +#define RINGRING_WAVE "filename_ringring_wave" +#define RINGRING_WAVE_DEF "ringing.wav" + +#define WELCOME_WAVE "filename_welcome_wave" +#define WELCOME_WAVE_DEF "welcome.wav" + +#define NAME_OF_DEBUG_FILE "filename_debug" +#define NAME_OF_DEBUG_FILE_DEF "" + +#define DEBUG_DATA_B3 "debug_data_b3" +#define DEBUG_DATA_B3_DEF 0 + +#define NAME_OF_LOG_FILE "filename_log" +#define NAME_OF_LOG_FILE_DEF "capitel.log" + +#define GENERATE_16_BIT_WAVES "wave_16bit" +#define GENERATE_16_BIT_WAVES_DEF 1 + +#define PLAY_RINGRING_WAVE "wave_play_ringring" +#define PLAY_RINGRING_WAVE_DEF 1 + +#define SET_SIGNAL "capi_set_signal" +#define SET_SIGNAL_DEF 1 + +#define SERV_CONTROLLER "capi_controller" +#define SERV_CONTROLLER_DEF 1 + +#define CAPITEL_ACTIVE "capitel_active" +#define CAPITEL_ACTIVE_DEF 1 + +#define CAPITEL_ACTIVE_ON_STARTUP "capitel_active_on_startup" +#define CAPITEL_ACTIVE_ON_STARTUP_DEF 1 + +#define CAPITEL_ACTIVE_TIME "capitel_active_time" +#define CAPITEL_ACTIVE_TIME_DEF 1 + +#define CAPITEL_RUN_CNT "capitel_run_cnt" +#define CAPITEL_RUN_CNT_DEF 0 + +#define EXPAND_CALLER_ID "expand_caller_id" +#define EXPAND_CALLER_ID_DEF 1 + +#define DETECT_DTMF_TONES "dtmf_support" +#define DETECT_DTMF_TONES_DEF 1 + +#define RESCAN_TIME "rescan_time" +#define RESCAN_TIME_DEF 0 + +#define RESTORE_WINDOW_ON_NEW_CALL "window_restore" +#define RESTORE_WINDOW_ON_NEW_CALL_DEF 1 + +#define SHOW_POPUP_WINDOW "show_popup_window" +#define SHOW_POPUP_WINDOW_DEF 4 + +#define CONFIRM_CALL_DELETE "window_confirm_delete" +#define CONFIRM_CALL_DELETE_DEF 1 + +#define CONFIRM_EXIT_PROGRAM "window_confirm_exit" +#define CONFIRM_EXIT_PROGRAM_DEF 0 + +#define IGNORE_EMPTY_CALLS "window_ignore_empty" +#define IGNORE_EMPTY_CALLS_DEF 0 + +#define WINDOW_FRAMECTRLS_HIDDEN "window_frame_controls_hidden" +#define WINDOW_FRAMECTRLS_HIDDEN_DEF 0 + +#define START_ON_DISCONNECT "start_disconnect" +#define START_ON_DISCONNECT_DEF 0 + +#define START_DISC_PROC "start_disc_proc" +#define START_DISC_PROC_DEF "" + +#define START_DISC_PARM "start_disc_parm" +#define START_DISC_PARM_DEF "" + +#define START_DISC_TITLE "start_disc_title" +#define START_DISC_TITLE_DEF "" + +#define WINDOW_XPOS "window_xpos" +#define WINDOW_XPOS_DEF 0 + +#define WINDOW_YPOS "window_ypos" +#define WINDOW_YPOS_DEF 0 + +#define WINDOW_XSIZE "window_xsize" +#define WINDOW_XSIZE_DEF 0 + +#define WINDOW_YSIZE "window_ysize" +#define WINDOW_YSIZE_DEF 0 + +#define WINDOW_COL_SIZE "window_col_size" +#define WINDOW_COL_SIZE_DEF "" + +#define WINDOW_VIEW_FLAGS "window_view_flags" +#define WINDOW_VIEW_FLAGS_DEF "" + +#define REGISTER_NAME "register_name" +#define REGISTER_NAME_DEF "" + +#define REGISTER_CODE "register_code" +#define REGISTER_CODE_DEF "" + +//capi 1.1: +#define TEXT_UNKNOWN "text_unknown" +#define TEXT_UNKNOWN_DEF "Unknown" + +//capi 2.0: +#define TEXT_UNKNOWN_ISDN "text_unknown_isdn" +#define TEXT_UNKNOWN_ISDN_DEF "Unknown ISDN" + +//capi 2.0: +#define TEXT_UNKNOWN_ANALOG "text_unknown_analog" +#define TEXT_UNKNOWN_ANALOG_DEF "Unknown analog" + +//capi 2.0: +#define OUTGOING_NUMBER "outgoing_number" +#define OUTGOING_NUMBER_DEF "" + +#define COM_DEVICE "com_device" +#define COM_DEVICE_DEF 0 + +#define BEEP_ON_CALLS "beep_on_calls" +#define BEEP_ON_CALLS_DEF 0 + +#define BEEP_ON_CALLS_FREQ "beep_on_calls_frequency" +#define BEEP_ON_CALLS_FREQ_DEF 4000 + +#define BEEP_ON_CALLS_DURA "beep_on_calls_duration" +#define BEEP_ON_CALLS_DURA_DEF 500 + +#define BEEP_ON_CALLS_DELAY "beep_on_calls_delay" +#define BEEP_ON_CALLS_DELAY_DEF 5000 + +#define CAPITEL_PRIORITY "capitel_priority" +#define CAPITEL_PRIORITY_DEF 2 + +#define CAPITEL_AFFINITY "capitel_affinity" +#define CAPITEL_AFFINITY_DEF 1 + +#define CAPITEL_CTI_SUPPORT "capitel_cti_support" +#define CAPITEL_CTI_SUPPORT_DEF 0 + +#define CAPITEL_CTI_PROGRAM "capitel_cti_program" +#define CAPITEL_CTI_PROGRAM_DEF "" + +#define CAPITEL_CODEC_ULAW "capitel_codec_ulaw" +#define CAPITEL_CODEC_ULAW_DEF 0 + +#define DTMF_DOWN_BORDER "dtmf_down_border" +#define DTMF_DOWN_BORDER_DEF IS_DTMF_DOWN_DEF + +#define DTMF_UP_BORDER "dtmf_up_border" +#define DTMF_UP_BORDER_DEF IS_DTMF_UP_DEF + +#define SILENCE_BORDER "silence_border" +#define SILENCE_BORDER_DEF 85 + +#define OUT_CIP_VALUE "out_cip_value" +#define OUT_CIP_VALUE_DEF 1 + +#define CALL_BACK_NUMBER "call_back_number" +#define CALL_BACK_NUMBER_DEF "" + +#define CALL_BACK_ACTIVE "call_back_active" +#define CALL_BACK_ACTIVE_DEF "1" + +#define CALL_BACK_LIMIT "call_back_limit" +#define CALL_BACK_LIMIT_DEF 2 + +#define CAPITEL_IS_CALLER_ID "capitel_is_caller_id" +#define CAPITEL_IS_CALLER_ID_DEF 1 + +#define MODEM_INIT_STR "modem_init_string" +#define MODEM_INIT_STR_DEF "at&f$ibp=trans$isci=0,1,1,0,0s153=255" + +#define MODEM_RING_STR "modem_ring_string" +#define MODEM_RING_STR_DEF "RING" + +#define MODEM_CONNECT_STR "modem_connect_string" +#define MODEM_CONNECT_STR_DEF "CONNECT " + +#define MODEM_SEARCH_FROM_COM "modem_search_from_com" +#define MODEM_SEARCH_FROM_COM_DEF 1 + +#define MODEM_SEARCH_TO_COM "modem_search_to_com" +#define MODEM_SEARCH_TO_COM_DEF 8 + +#define MODEM_BITRATE "modem_bitrate" +#define MODEM_BITRATE_DEF 115200 + +#define PLAY_BEEP "play_beep" +#define PLAY_BEEP_DEF 1 + +#define ZERO_BEHAVIOR "zero_behavior" +#define ZERO_BEHAVIOR_DEF 0 + + diff --git a/common/source/texte.h b/common/source/texte.h new file mode 100644 index 0000000..d01806c --- /dev/null +++ b/common/source/texte.h @@ -0,0 +1,37 @@ +// Jetzt kommen die Strings in DEUTSCH: + +#ifdef LANG_GER + +// messages + +#define STR_NOT_FOUND "%s nicht gefunden!" + +#define VEREXP "Version abgelaufen! Bitte registrieren." +#define RESTART "Bitte CapiTel neu starten!" + +#define DEACTMSG2 "Deaktivieren!" +#define QUITMSG "Beenden!" + +#define CAPITEL_DISABLED "Bitte registrieren.\n\nCapitel inaktiv!" +#define ANSWER_SIGFUNCTION "ANSWER: Unbekannte SigFunc: %d\n" +#define CAPITEL_SIGFUNCTION "CAPITEL: Unbekannte SigFunc: %d\n" + + +#else + +// messages + +#define STR_NOT_FOUND "%s not found!" + +#define VEREXP "Version expired! Please register!" +#define RESTART "Please restart CapiTel!" + +#define DEACTMSG2 "Deactivate!" +#define QUITMSG "Quit!" + +#define CAPITEL_DISABLED "Please register.\n\nCapitel disabled!" +#define ANSWER_SIGFUNCTION "ANSWER: Unknown SigFunc: %d\n" +#define CAPITEL_SIGFUNCTION "CAPITEL: Unknown SigFunc: %d\n" + + +#endif diff --git a/common/source/version.h b/common/source/version.h new file mode 100644 index 0000000..4455ec6 --- /dev/null +++ b/common/source/version.h @@ -0,0 +1,18 @@ +#ifdef RECOTEL + + #define APPSHORT "RecoTel" + #define APPNAME "RecoTel v1.00" + #define APPVER "1.00" + #define APPDATE "1999" + #define APPVER_FULL "Version 1.00" + +#else + + #define APPSHORT "CapiTel" + #define APPNAME "CapiTel v3.99 Beta" + #define APPVER "3.99 Beta" + #define APPDATE "1996-2004" + #define APPVER_FULL "Version 3.99 Beta" + +#endif + diff --git a/distrib/GENKEY/GENKEY.C b/distrib/GENKEY/GENKEY.C new file mode 100644 index 0000000..1da121b --- /dev/null +++ b/distrib/GENKEY/GENKEY.C @@ -0,0 +1,188 @@ +#include +#include +#include + +#include "..\..\util\source\register.h" + +///* DUMMY, damit register.c so bleiben kann wie es ist ! */ +//void config_file_read_string( char *a, char *b, char *c, char *d ) +//{ +// return; +//} + +char *genkey( char *name ) +{ +static char str[100], dest[21]; + short i; + + strcpy( str, name ); + strcat( str, "o83zhb,q1#0o`1-hqpx*2" ); + str[21] = 0; + strcpy( str, strupr( str ) ); + + for( i=0 ; i < 21 ; i++ ) + { + switch( str[i] ) + { + case 'A': + case 'B': + case 'C': + str[i] = '7'; + break; + case 'D': + case 'E': + case 'F': + str[i] = '3'; + break; + case 'G': + case 'H': + case 'I': + str[i] = '5'; + break; + case 'J': + case 'K': + case 'L': + str[i] = 'E'; + break; + case 'M': + case 'N': + case 'O': + str[i] = '0'; + break; + case 'P': + case 'Q': + case 'R': + str[i] = '2'; + break; + case 'S': + case 'T': + case 'U': + str[i] = 'F'; + break; + case 'V': + case 'W': + case 'X': + str[i] = 'A'; + break; + case 'Y': + case 'Z': + str[i] = '8'; + break; +/* + case '0':str[i] = '1';break; + case '1':str[i] = '9';break; + case '2':str[i] = '5';break; + case '3':str[i] = 'C';break; + case '4':str[i] = 'E';break; + case '5':str[i] = '3';break; + case '6':str[i] = 'F';break; + case '7':str[i] = '2';break; + case '8':str[i] = '6';break; + case '9':str[i] = '4';break; +*/ + default: + str[i] = 'B'; + break; + } + + dest[0] = str[16]; + dest[1] = str[2]; + dest[2] = str[8]; + dest[3] = '3'; + dest[4] = str[13]; + dest[5] = 'D'; + dest[6] = str[3]; + dest[7] = str[9]; + dest[8] = str[0]; + dest[9] = str[1]; + dest[10] = str[11]; + dest[11] = str[14]; + dest[12] = str[5]; + dest[13] = str[0]; + dest[14] = str[12]; + dest[15] = str[6]; + dest[16] = str[4]; + dest[17] = str[3]; + dest[18] = str[2]; + dest[19] = 'F'; + dest[20] = 0; + + } + + return dest; +} + +int main( int argc, char *argv[] ) +{ + char name[100], nameser[100], key[21], *result; + short rc; + short i, from, to, j; + + + while (1) + { + printf("\r\nName ('EXIT' leaves, 'X' goes to serial numbers): "); + result = gets( name ); + if (!stricmp(name,"EXIT")) return (0); + if (stricmp(name,"X")) + { + strcpy( key, genkey( name ) ); + rc = checkRegCode( name, key ); + if (!rc) + { + printf("### ERROR: Code is not OK!!! ###\r\n" ); + return (1); + } + printf ("-----------\r\n\r\n"); + printf ("Hello!\r\n\r\n"); + printf ("Thank you for registering CapiTel and for supporting the\r\n"); + printf ("Shareware concept!\r\n\r\n"); + printf ("To register, start CapiTel and press CTRL-ALT-F5 in the main-window.\r\n"); + printf ("In the dialog, enter the following data:\r\n\r\n"); + printf ("Name : %s\r\n", name ); + printf ("Code : %s\r\n\r\n", key ); + printf ("This will register your personal copy of CapiTel.\r\n\r\n"); + printf ("Please send a short note to cawim@garrincha.oche.de to\r\n"); + printf ("notify us that you have received the registration code.\r\n\r\n"); + printf ("Greetings,\r\n"); + printf ("the CapiTel authors.\r\n\r\n"); + printf ("-----------\r\n"); + } + else + { + printf ("\r\nfrom : "); result = gets(name); from = (short)atoi(name); + printf ("to : " ); result = gets(name); to = (short)atoi(name); + printf ("Base name: " ); result = gets(name); printf ("\r\n"); + + for (i=from;i<=to;i++) + { + sprintf (nameser,"%s%07d",name, i); + for (j=0;j<(short)strlen(nameser);j++) + { + switch (nameser[j]) + { + case '0' : nameser[j] = 'N'; break; + case '1' : nameser[j] = 'E'; break; + case '2' : nameser[j] = 'Z'; break; + case '3' : nameser[j] = 'D'; break; + case '4' : nameser[j] = 'V'; break; + case '5' : nameser[j] = 'F'; break; + case '6' : nameser[j] = 'S'; break; + case '7' : nameser[j] = 'I'; break; + case '8' : nameser[j] = 'A'; break; + case '9' : nameser[j] = 'U'; break; + } + } + strcpy( key, genkey( nameser ) ); + rc = checkRegCode( nameser, key ); + if (!rc) + { + printf("### ERROR: Code is not OK!!! ###\r\n" ); + return (1); + } + printf ("Name=%s, Code=%s\n", nameser, key); + } + } + } +} + diff --git a/distrib/GENKEY/MAKEFILE b/distrib/GENKEY/MAKEFILE new file mode 100644 index 0000000..bce7efb --- /dev/null +++ b/distrib/GENKEY/MAKEFILE @@ -0,0 +1,12 @@ +!include + +ccflags = $(cflags) -D_MT -Zp1 +clflags_con = $(conflags) + +all: genkey.exe + +genkey.obj: makefile genkey.c + cl $(ccflags) genkey.c ..\..\util\source\register.c ..\..\..\units\win.src\os_win.c ..\..\..\units\common.src\cfg_file.c ..\..\..\units\common.src\util.c ..\..\..\units\common.src\num2nam.c /DWIN32 + +genkey.exe: genkey.obj + $(link) $(clflags_con) genkey.obj num2nam.obj register.obj os_win.obj util.obj cfg_file.obj $(guilibsmt) shell32.lib diff --git a/distrib/SETUP.OS2/FILE_ID.DIZ b/distrib/SETUP.OS2/FILE_ID.DIZ new file mode 100644 index 0000000..b4c9d37 --- /dev/null +++ b/distrib/SETUP.OS2/FILE_ID.DIZ @@ -0,0 +1,4 @@ +CapiTel -- an ISDN CAPI 1.1 +*and* CAPI 2.0 based 32-Bit +Answering Machine and +Caller-ID for OS/2 WARP. diff --git a/distrib/SETUP.OS2/INSTALL.CMD b/distrib/SETUP.OS2/INSTALL.CMD new file mode 100644 index 0000000..391850e --- /dev/null +++ b/distrib/SETUP.OS2/INSTALL.CMD @@ -0,0 +1,99 @@ +/***************************************************************************/ +/*** CapiTel Installation Rexx-Script ***/ +/*** (c) 1996-98 by Carsten Wimmer and Werner Fehn ***/ +/*** All Rights Reserved. ***/ +/***************************************************************************/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs +Call SysCls + +say "" +say " =============================================================================" +say "" +say " ////// /////// ////// // /////// ////// //" +say " // // // // // // // // //" +say " // /////// ////// // // //// //" +say " // // // // // // // //" +say " ////// // // // // // ////// //////" +say "" +say " ISDN CAPI based Answering Machine and Caller-ID for OS/2 PM or VIO" +say "" +say " Installation" +say "" +say " =============================================================================" +say "" +say "" + +say "Do you want to install the (g)erman, (e)nglish, or (t)ext version?" +say "Moechten Sie die (d)eutsche, (e)nglische oder die (T)ext-Version" +say "installieren?" +call charout, "> " + +pull answ . + +say "" + +select + when ((answ = "G") | (answ = "g") | (answ = "D") | (answ = "d")) then do + "ren ctelos2g.exe capitel.exe >NUL" + "del ctelos2e.exe >NUL" + "del ctelos2t.exe >NUL" + "del license.txt > NUL" + "del order.txt > NUL" + "del orderbmt.txt > NUL" + "del whatsnew.txt > NUL" + "del readme.txt > NUL" + end + when ((answ = "E") | (answ = "e")) then do + "ren ctelos2e.exe capitel.exe >NUL" + "del ctelos2g.exe >NUL" + "del ctelos2t.exe >NUL" + "del lizenz.txt > NUL" + "del bestell.txt > NUL" + "del bestbmt.txt > NUL" + "del neues.txt > NUL" + "del liesmich.txt > NUL" + end + when ((answ = "T") | (answ = "t")) then do + "ren ctelos2t.exe capitel.exe >NUL" + "del ctelos2e.exe >NUL" + "del ctelos2g.exe >NUL" + "del lizenz.txt > NUL" + "del bestell.txt > NUL" + "del bestbmt.txt > NUL" + "del neues.txt > NUL" + "del liesmich.txt > NUL" + end + otherwise + say "Aborting Installation!" + say "Installation abgebrochen!" + say "" + exit +end + +say "Should I create a CapiTel object on your desktop? (Y/N)" +say "Soll ich ein CapiTel Objekt auf Ihrer Arbeitsoberflaeche anlegen? (J/N)" +call charout, "> " + +pull answ . + +say "" + +if answ <> "Y" & answ <> "y" & answ <> "J" & answ <> "j" then do + say "No object has been created." + say "Es wurde kein Objekt angelegt." + say "" + exit +end + +ctEXE = "\CAPITEL.EXE" +myDir = directory() +setupString = "EXENAME="||myDir||ctEXE||";STARTUPDIR="||myDir";REPLACE" +call SysCreateObject "WPProgram", "CapiTel", "", setupString + +say "Object has been created." +say "Objekt wurde angelegt." + +exit + diff --git a/distrib/SETUP.WIN/file_id.diz b/distrib/SETUP.WIN/file_id.diz new file mode 100644 index 0000000..b485432 --- /dev/null +++ b/distrib/SETUP.WIN/file_id.diz @@ -0,0 +1,4 @@ +CapiTel -- an ISDN CAPI 2.0 +based 32-Bit Answering Machine +and Caller-ID for Windows 95, +Windows 98 and Windows NT. diff --git a/distrib/SETUP.WIN/setup.inf b/distrib/SETUP.WIN/setup.inf new file mode 100644 index 0000000..71127cd --- /dev/null +++ b/distrib/SETUP.WIN/setup.inf @@ -0,0 +1,97 @@ + +[Version] +Signature="$Chicago$" + +[Install] +CopyFiles = CapiTelFiles, SetupFiles +DelFiles = CapiTelOld +MakeIcons = CapiTelIcons +Uninstall = CapiTel, "CapiTel" + +[Remove] +DelFiles = CapiTelFiles, CapiTelScratch, SetupFiles +DelIcons = CapiTelIcons + +[CapiTelFiles] +; the program himself +capitel.exe +capitelt.exe +; user's config, don't overwrite +capitel.act,,, 0x10 +capitel.cfg,,, 0x10 +capitel.nam,,, 0x10 +capitel.num,,, 0x10 +capitel.prt,,, 0x10 +; wave files, don't overwrite +ringing.wav,,, 0x10 +welcome.wav,,, 0x10 +; just-for-info files, overwrite +order.txt +orderbmt.txt +bestbmt.txt +bestell.txt +licence.txt +lizenz.txt +readme.txt +liesmich.txt +leame.txt +whatsnew.txt +neues.txt +; number files for other countrys +nl.num +uk.num +swiss.num + +[CapiTelOld] +setup.exe +setup.inf +setupapi.dll +cfgmgr32.dll +unwise.exe +uninst.isu +install.log + +[CapiTelScratch] +file_id.diz +capitel.log +ringing.alw +welcome.alw + +[SetupFiles] +; setup files +setup.exe +setup.inf +setupapi.dll +cfgmgr32.dll + +[CapiTelIcons] +CPRG, "CapiTel\CapiTel", %32768%"\CapiTel.exe",,,,1 +CPRG, "CapiTel\"%ReadMeTxt%, %32768%"\"%ReadMeTxt% +CPRG, "CapiTel\"%WhatsNewTxt%, %32768%"\"%WhatsNewTxt% +CPRG, "CapiTel\"%LicenseTxt%, %32768%"\"%LicenseTxt% +CPRG, "CapiTel\www.2tec.com", "http://www.2tec.com" + +[DestinationDirs] +DefaultDestDir = 24, "CapiTel" +CapiTelFiles = 32768 +CapiTelOld = 32768 +CapiTelScratch = 32768 +SetupFiles = 32768, "Setup" + +; englische strings (default) +[Strings] +ReadMeTxt = "readme.txt" +WhatsNewTxt = "whatsnew.txt" +LicenseTxt = "licence.txt" + +; deutsche strings +[Strings.0407] +ReadMeTxt = "liesmich.txt" +WhatsNewTxt = "neues.txt" +LicenseTxt = "lizenz.txt" + +; spanische strings +[Strings.040a] +ReadMeTxt = "leame.txt" +WhatsNewTxt = "whatsnew.txt" +LicenseTxt = "licence.txt" diff --git a/distrib/TEXT/ANN.TXT b/distrib/TEXT/ANN.TXT new file mode 100644 index 0000000..bee43d1 --- /dev/null +++ b/distrib/TEXT/ANN.TXT @@ -0,0 +1,65 @@ + + + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + + ISDN CAPI based Answering Machine + and Caller-ID for OS/2, Windows 95, + Windows 98 and Windows NT + + + + + + Introduction: + ~~~~~~~~~~~~ + CapiTel is a 32-Bit Answering Machine and Caller-ID for OS/2, Windows 95, + Windows 98 and Windows NT. Graphical and Text-Mode Versions are available + for all operating systems. + + + Main Features: + ~~~~~~~~~~~~~ + - 32-Bit Multi-Threaded Answering Machine (as Shareware) + - 32-Bit Caller-ID (as FREEWARE) + - Graphical and Text-Mode versions for OS/2, based on CAPI 1.1 and 2.0 + - Graphical and Text-Mode versions for Win 95/NT, based on CAPI 2.0 + - Complete Support for .WAV-Files + - Remote Control Functions, controlled by DTMF tones. + - Silence Detection + - Completely configurable + - Available in english and german + + + Availability: + ~~~~~~~~~~~~ + All CapiTel versions can be found here: + + - World Wide Web: http://www.oche.de/~cawim/capitel.html + http://www.bmtmicro.com + + - BBS: Programmers' Heaven, +49-241-9519012 (ISDN), Area CAPITEL + + - FidoNet FileRequest: Zottelbox + Line 1 : 2:2432/518 VFC/V34/FAX +49-5233-99527 2400-28800 + Line 2+3: 2:2432/518 X75 (RINGDOWN) +49-5233-99527 64000 + Line 4 : 2:2432/519 V32bis +49-5233-99528 2400-14400 + Limits : 50 Files / 4 MB NoReq.: 3:30-4:29 (ZMH) + + Magics CTELOS2 for the OS/2 versions (capi 1.1/2.0) + CTELWIN for the W95/NT versions (capi 2.0) + + - BMTMicro: http://www.bmtmicro.com + + You are explicitly allowed to distribute the unmodified CapiTel + ZIP-archive on the Internet, on Shareware CD-Roms, on Bulletin Board + Systems and so on. + + + + diff --git a/distrib/TEXT/CAPITEL.TXT b/distrib/TEXT/CAPITEL.TXT new file mode 100644 index 0000000..54eaccd --- /dev/null +++ b/distrib/TEXT/CAPITEL.TXT @@ -0,0 +1,183 @@ +offen: + + +------------------------------------------------------------------------------- + +c - reboot+login-problematik bei nt ins readme. FIXED + +c - feature wuensche willkommen, aber... + - CT ist nur AB + - easy to use/configure + FIXED! + +c - WIN: 0 Byte WAVs nicht ins Recycle Bin schieben. FIXED! + +c - OS2: informational compiler warnings in capitel.c. FIXED! + +c - OS2: mehrmals starten. FIXED! -> 2 installationen, 2x starten, funzt! + +c - OS/2: neue help-menue eintraege (readme, webseite etc.) FIXED! + +c - OS2: alaw/ulaw umschaltung, CAPITEL_CODEC_ULAW (0 oder 1). FIXED! +c - WIN: alaw/ulaw umschaltung, CAPITEL_CODEC_ULAW (0 oder 1). FIXED! + +c - code generator eq-test einbauen. FIXED! + +c - win: delete to recycle bin. FIXED! + +c - falsche deutsche tokens bei den dtmf actions + FIXED ! + +c - Pixel-Fehler in der Win Version + Tritt nur bei mir auf, vielleicht grafik-treiber problem + +c - Der "Tip fuer Experten" in den Einstellungen ist breiter als das Fenster. + Nicht nachvollziehbar, unwichtig + +c - Die Bubble-Help erscheint bei mir genau UNTER der Maus, wird also von der + Maus verdeckt. + Nicht nachvollziehbar, unwichtig + +c - Im Register "Ports" müsste es jetzt statt EAZ natürlich MSN heissen. + User hatte vielleicht eine veraltete Version. Derzeit wird korrekt + EAZ/MSN (OS/2) bzw. MSN (Win) angezeigt + +c- "Add as new Caller" bei Win95 verhaelt sich anders + FIXED ! + +c - w32: flasche reihenfolge der buttons. + FIXED ! + +c - "anachronism used" warnings in loadwc20.c und capi20.h + FIXED ! + +c - "ignore empty calls" ignoriert *alle* calls! FIXED ! + +c - dtmf reboot funktioniert nicht (nt only) FIXED ! + +c - * abfangen in caller-liste als nummer. FIXED ! + +c - w32 abot-box: copyright/web-addresse. FIXED ! + +c - readme+webadresse etc. in help menue. FIXED ! + +c - answer_stop_beep() einbauen FIXED ! + + +w - Anrufer ohne Rufnummer sind immer "". FIXED ! + +w - Crash wenn man per DTMF ein Programm startet (vielleicht erst + nach Auflegen?!) FIXED ! + +w - wfehn?: numbering plan os2 diva. w95? FIXED! + +w - Parameter Uebergabe funzt nicht bei Execute Program. FIXED ! + +w - copyright auf 1998 erweitern. FIXED ! + +w - capitel_active_on_startup. FIXED ! + +w - DTMF: + o Ich habe die DTMF-Unterstuetzung eingestellt + o Es war der Eintrag 'Capitel deaktivieren' mit dem DTMF-Code 1515 + eingetragen. + o Diesen Eintrag habe ich deaktiviert (Das Symbol wurde grau). + o Dann habe ich den Eintrag 'Fernabfrage' mit dem Code 15151 + eingetragen und aktiviert. + o Beim Testen mittels Selbstanruf und Eingabe von 15151 hat Capitel + allerdings schon auf den DTMF-Code 1515 'Capitel deaktivieren' + reagiert, obwohl dieser Eintrag deaktiviert war. + FIXED ! + +w - Remote Actions: enable/disable klappt nicht + In capitel.act wird 0/1 korrekt eingetragen. FIXED ! + +w - beep_on_calls (answer_stop_beep() in oberfläche fehlt noch). FIXED ! + +w - prio vom EXE aendern (kojac's code einbauen) FIXED ! + +w - prio vom os2 exe aendern. FIXED + +w - win nt: konfigurierbarkeit affinity. FIXED + +w - regcode ändern. FIXED. + +w - numbering plan besser machen. FIXED + +w - funzt reboot noch unter win95? FIXED + +w - CTI. FIXED! + +w - alaw/ulaw unten. FIXED! + +w - Win: Direkt installerbares EXE, statt ZIP. FIXED! + +w - install: kein ueberschreiben von cfg/nam/prt/act files. FIXED! + +------------------------------------------------------------------------------------ + +Ideen: + + - Spezielle Ansage fuer alle 's + - Pro Port ein eigenes Verzeichnis + - Container konfigurierbar machen + - Vertical Slider abschalten + - Sound bei reinkommendem Ruf (general, port+caller spezifisch) + - Minimized Icon aendern bei Ruf + - Expire von Anrufen nach X Tagen + - Abgehoerte Anrufe kenntlich machen + - Launch Program after incoming call + - Dynamische Breite des Popups "Incoming Call.." + - Zeitabhaenige Ansagen + - Zufaellig ausgewaehlte Ansagen + - Rexx Interface + - Rufweiterschaltung / Pager-Unterstuetzung + - Skipping von Nachrichten per #-Taste beim Abhören + - Ansage des Aufnahmezeitpunkts von Nachrichten + - Mehrere calls markieren und dann nur diese loeschen/abspielen + - Abspielen stoppen + - Play all / add as new caller - Features ins ReadMe + - In der About-Box: Die eMail- und Web-Adressen koennten markierbar + (Cut&Paste!) sein. + - CapiTel starten koennen, auch wenn keine CAPI installiert ist + - Vom Container aus direkt zum entsprechenden Caller-Setting springen + - Confirmation bevor deaktiviert wird + - Kontextsens. Hilfe + - Volume Control + - Sortieren der einzelnen Spalten im Container + - Win: Tray Icon only + - Win: CapiTel als Service + - Match bei anrufender Nummer: 01234 sollte vor 0123* matchen! + - mehrmals starten, konfigurierbar (auch in distrib) + + - Loop parameter for each ringing-wav + (Today: I have to make LARGE wav files to let it ring for a while). + - Larger popup dialogbox when calls arrive!. Important! + (Today: too small on 1024x768) + - a GUI for advanced features ("chunks") in cfg file! + - storing of container size/position + - stop ringing-wav when call is picked up (by handset) + - a graphical user interface for call-log; button in toolbar, + statistics for call-log (calls per user, average call time and so on) + - possibility to take over call (by handset) + - CTI; starting program when call is arriving; i.e. showing picture + of person calling + - Parameter to turn off all welcome-WAVs (except the default). + - Parameter for playing default-WAV before personal welcome-message + - Voice-Box (Scripting abilities. Caller is presented a menu; like telebanking) + - Show both number and caller in container/call list + + - remote control: + 1. activate port, + 2. play only calls to the attached port (default), play calls to + all ports (with DTMF) + 3. play only new calls (default), play all calls (with DTMF) + 4. One call forward, one call backward (one time repeat, two times one + call back, three times 2 calls back ...) + 5. delete one call (i.e. last played) + 6. record and play announcement + 7. a program play with parameter info.wav (i.e.) + + + + diff --git a/distrib/TEXT/COLL.TXT b/distrib/TEXT/COLL.TXT new file mode 100644 index 0000000..9354845 --- /dev/null +++ b/distrib/TEXT/COLL.TXT @@ -0,0 +1,38 @@ + + ============================================================================== + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + Collective Order + + ============================================================================== + + A single CapiTel license costs 55.00 DM (German Marks). + + If you are going to organize a collective order, you will get + a special price. Have a look at the following price table: + + Number of Licenses Price for each License + ================== ====================== + 1 - 9 55,- DM + 10 - 19 50,- DM + 20 - 29 45,- DM + 30 - 49 40,- DM + 50+ 35,- DM + + The organizer sends a list of all attending persons to Carsten Wimmer. + It must include the Names, EMail Addresses, postal Addresses, Phone and + Fax numbers. Also make clear who is interested to be informed about + new CapiTel versions. The organizer has to transfer the _whole_ money + to Carsten Wimmer's bank account, as described in ORDER.TXT. + After this he receives a list of all CapiTel registration codes, so he + can send them to the members of the collective order. + + ============================================================================== + Thank you for supporting the Shareware concept! + ============================================================================== + diff --git a/distrib/TEXT/HOBBES.TXT b/distrib/TEXT/HOBBES.TXT new file mode 100644 index 0000000..8a90b23 --- /dev/null +++ b/distrib/TEXT/HOBBES.TXT @@ -0,0 +1,14 @@ +Upload Information Template for Hobbes +====================================== + +Archive Name: ctel110.zip +Program Description: CapiTel v1.10 (ISDN CAPI 1.1 Answering Machine for OS/2 PM) +Operating System/Version: OS/2 v2 and up +Program Source: authors +Replaces: os2/comm/ctel100.zip + +Your name: Carsten Wimmer +Your email address: cawim@garrincha.oche.de + +Proposed directory for placement: os2/comm/ + diff --git a/distrib/TEXT/LEO.TXT b/distrib/TEXT/LEO.TXT new file mode 100644 index 0000000..8891d51 --- /dev/null +++ b/distrib/TEXT/LEO.TXT @@ -0,0 +1,14 @@ +Upload Information Template for ftp.leo.org +=========================================== + +Archive Name: ctel110.zip +Program Description: CapiTel v1.10 (ISDN CAPI 1.1 Answering Machine for OS/2 PM) +Operating System/Version: OS/2 v2 and up +Program Source: authors +Replaces: /pub/comp/os/os2/comm/ctel100.zip + +Your name: Carsten Wimmer +Your email address: cawim@garrincha.oche.de + +Proposed directory for placement: /pub/comp/os/os2/comm + diff --git a/distrib/TEXT/MLIST.TXT b/distrib/TEXT/MLIST.TXT new file mode 100644 index 0000000..d6806c4 --- /dev/null +++ b/distrib/TEXT/MLIST.TXT @@ -0,0 +1,52 @@ +-- + +>>>> help +This is Brent Chapman's "Majordomo" mailing list manager, version 1.93. + +In the description below items contained in []'s are optional. When +providing the item, do not include the []'s around it. + +It understands the following commands: + + subscribe [
] + Subscribe yourself (or
if specified) to the named . + + unsubscribe [
] + Unsubscribe yourself (or
if specified) from the named . + + get + Get a file related to . + + index + Return an index of files you can "get" for . + + which [
] + Find out which lists you (or
if specified) are on. + + who + Find out who is on the named . + + info + Retrieve the general introductory information for the named . + + lists + Show the lists served by this Majordomo server. + + help + Retrieve this message. + + end + Stop processing commands (useful if your mailer adds a signature). + +Commands should be sent in the body of an email message to +"Majordomo@sundancer.tng.oche.de". + +Commands in the "Subject:" line NOT processed. + +If you have any questions or problems, please contact +"Majordomo-Owner@sundancer.tng.oche.de". + +>>>> +>>>> +>>>> -- +END OF COMMANDS diff --git a/distrib/TEXT/TEAMCOLL.TXT b/distrib/TEXT/TEAMCOLL.TXT new file mode 100644 index 0000000..8548654 --- /dev/null +++ b/distrib/TEXT/TEAMCOLL.TXT @@ -0,0 +1,39 @@ + + ============================================================================== + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + Collective Order + ** only for Team OS/2 Members ** + + ============================================================================== + + A single CapiTel license costs 55.00 DM (German Marks). + + If you are going to organize a collective order for Team OS/2 members, + you will get a special price. Have a look at the following price table: + + Number of Licenses Price for each License + ================== ====================== + 1 - 9 50,- DM + 10 - 19 45,- DM + 20 - 29 40,- DM + 30 - 49 35,- DM + 50+ 30,- DM + + The organizer sends a list of all attending persons to Carsten Wimmer. + It must include the Names, Team Number, EMail Addresses, postal Addresses, + Phone and Fax numbers. Also make clear who is interested to be informed about + new CapiTel versions. The organizer has to transfer the _whole_ money + to Carsten Wimmer's bank account, as described in ORDER.TXT. + After this he receives a list of all CapiTel registration codes, so he + can send them to the members of the collective order. + + ============================================================================== + Thank you for supporting the Shareware concept! + ============================================================================== + diff --git a/distrib/TEXT/TODO b/distrib/TEXT/TODO new file mode 100644 index 0000000..38e3825 --- /dev/null +++ b/distrib/TEXT/TODO @@ -0,0 +1,21 @@ +Bugs: + x Wenn WAV+IDX geloescht und Ruf wird abgespielt -> CRASH + x Wenn Kontext-Menue im Container offen war und ein Systembutton + betaetigt wurde -> PM haengt + - MMPM Bug + +Features: + - Button, um alle Anrufe abspielen zu koennen + - Spezielle Ansage fuer alle 's + - Pro Port ein eigenes Verzeichnis + - Container konfigurierbar machen + - Vertical Slider abschalten + x Sound bei reinkommendem Ruf (general, port+caller spezifisch) + - Minimized Icon aendern bei Ruf + - Expire von Anrufen nach X Tagen + x Abgehoerte Anrufe kenntlich machen + - Launch Program after incoming call + - Dynamische Breite des Popups "Incoming Call.." + - Zeitabhaenige Ansagen + - Zufaellig ausgewaehlte Ansagen + diff --git a/distrib/TEXT/Y.DAT b/distrib/TEXT/Y.DAT new file mode 100644 index 0000000..021bca8 --- /dev/null +++ b/distrib/TEXT/Y.DAT @@ -0,0 +1,3 @@ +y +J + diff --git a/distrib/TEXT/ctel-mlist.txt b/distrib/TEXT/ctel-mlist.txt new file mode 100644 index 0000000..75f9362 --- /dev/null +++ b/distrib/TEXT/ctel-mlist.txt @@ -0,0 +1,27 @@ + + ============================================================================== + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + The Mailing-List + + ============================================================================== + + There has been an Internet Mailing-List set up for CapiTel, where you can + discuss bugs etc. with other users and the authors themselves. + + To subscribe, send an EMail to majordomo@sundancer.oche.de and + put "subscribe capitel" (without quotes of course) in its body. To + unsubscribe at a later time, do the same with "unsubscribe capitel". + If you want to get more help, use "help" in the message's body. + + The address of the list is capitel@sundancer.oche.de + + We hope to hear from you soon. + + ============================================================================== + diff --git a/distrib/setup.all/capitel.act b/distrib/setup.all/capitel.act new file mode 100644 index 0000000..773f25a --- /dev/null +++ b/distrib/setup.all/capitel.act @@ -0,0 +1,72 @@ +# +# CapiTel.ACT +# Created and maintained by CapiTel +# + +####################################################################### +# # +# Hardcoded actions: # +# # +####################################################################### +# # +# First column: # +# DTMF-code for the desired action. It must have 4 digits or more. # +# It can be one of "0123456789ABCD" # +# # +# Second column: # +# "action". This can be one of: # +# REMOTECONTROL to play all recorded calls. # +# REBOOT to rebooting your computer. # +# DEACTIVATE to deactivating CapiTel. # +# QUIT to quit CapiTel. # +# SETCALLBACK to overide callback number. # +# # +# Third to fifth column: # +# Must be a blank. # +# # +# Sixth column: # +# Sets this entry active (=1) or not (=0) # +# # +####################################################################### + +1111|REMOTECONTROL| | | |1 +1212|SETCALLBACK| | | |1 +1313|REBOOT| | | |1 +1414|DEACTIVATE| | | |1 +1515|QUIT| | | |1 + +####################################################################### +# # +# User actions: # +# # +####################################################################### +# # +# First column: # +# DTMF-code for the desired action. It must have 4 digits or more. # +# It can be one of "0123456789ABCD" # +# # +# Second column: # +# "action". This can be any programm or batch. Batches must be # +# started over command.com (or cmd.exe) # +# # +# Third column: # +# Is the paramerter for the program. If there is no parameter, fill # +# in a blank. # +# # +# Fourth column: # +# Is the name of the new window. This parameter ist only supported by # +# OS/2. If you don't want to set up a window name, fill in a blank. # +# # +# Fifth column: # +# Fill in a blank. # +# # +# Sixth column: # +# Sets this entry active (=1) or not (=0) # +# # +####################################################################### + +1616|c:\os2\xcopy.exe|c:\*.* d:\*.* /s|BackUp| |1 +1717|c:\os2\mdos\command.com|/C c:\dos.bat|DOSBAT| |1 +1818|c:\windows\regedit.exe| | | |1 +1919|c:\winnt\regedit.exe| | | |1 + diff --git a/distrib/setup.all/capitel.cfg b/distrib/setup.all/capitel.cfg new file mode 100644 index 0000000..c068ab4 --- /dev/null +++ b/distrib/setup.all/capitel.cfg @@ -0,0 +1,789 @@ +# ======================================================================== +# +# ////// /////// ////// // /////// ////// // +# // // // // // // // // // +# // /////// ////// // // //// // +# // // // // // // // // +# ////// // // // // // ////// ////// +# +# ======================================================================== + + + +########################################################################## +# +# name : +# +# flags: could be one of: WIN : supported from the WINDOWS version +# +# NT : supported on Windows/NT only +# +# OS2 : supported from the OS/2 version +# +# TIM : this entry could be time dependent +# note: time dependent functions can only +# be setup here and not in the setup of +# capitel to prevent normal-user confusion +# +# CAPI20 : this option runs on capi 2.0 only. +# +# CAPI11 : this option runs on capi 1.1 only. +# +# ALAW : this option runs only on isdn networks +# with A-Law voice codec. +# +# info : +# +########################################################################## + + + +########################################################################## +# +# info for time dependent configuration: +# +# a time dependent setup has the following syntax: +# +# entryname=[~][~]...[~] +# +# a chunk have the following syntax: +# +# chunk_n=-,, +# +# day could be one of Mo, Tu, We, Th, Fr, Sa or Su. dayranges must +# have lower day-value first. "FR-MO" is not allowed. use two chunks +# instead (FR-SU & MO-MO). the same with time setup. +# +# hints: +# +# - capitel parses the chunks from left to right and stops after first hit. +# - time dependent lines have a maximum of 512 characters. +# - the default value is used, if no chunk hits. +# +# example: +# +# capitel_active_time=0~Mo-Fr,8:00-17:00,1 +# +# capitel only active monday to friday from 8:00 to 17:00 +# +# +# capitel_active_time=1~Mo-Fr,12:30-13:00,1~Mo-Fr,7:30-16:00,0 +# +# capitel is only deactiv monday to friday from 7:30 to 12:30 and +# 13:00 to 16:00. +# +# +# filename_welcome_wave=hello.wav~Mo-Su,23:00-23:59,too_late.wav~Mo-Su,00:00-7:30,too_late.wav +# +# plays hello.wav, but in time from 23:00 to 7:30 it plays too_late.wav. +# +########################################################################## + + + +########################################################################## +# +# name : default_answer_delay +# flags: OS2 WIN TIM +# info : this is the default delay for answering calls in seconds, if no +# other value is specified in PORT or CALLER setup. +# +########################################################################## + +default_answer_delay=3 + + + +########################################################################## +# +# name : default_max_record_time +# flags: OS2 WIN TIM +# info : this is the default maximum recording time for calls in seconds, +# if no other value is specified in PORT or CALLER setup. +# +########################################################################## + +default_max_record_time=180 + + + +########################################################################## +# +# name : default_max_silence_time +# flags: OS2 WIN TIM +# info : after this time in seconds, capitel disconnects the call and the +# recording, if silence is on the line. +# +########################################################################## + +default_max_silence_time=120 + + + +########################################################################## +# +# name : filename_debug +# flags: OS2 WIN +# info : the name of a debugfile or a pipe (not on W95). this file +# contains a full capi-trace. his trace can help to find problems. +# +########################################################################## + +filename_debug= + + + +########################################################################## +# +# name : debug_data_b3 +# flags: OS2 WIN +# info : flag for debugging also data_b3-messages. works only with +# FILENAME_DEBUG +# +########################################################################## + +debug_data_b3=0 + + + +########################################################################## +# +# name : filename_log +# flags: OS2 WIN +# info : the name of a logfile or a pipe (not on W95). this file contains +# information abaout all incomming calls. +# +########################################################################## + +filename_log=calls.log + + + +########################################################################## +# +# name : filename_welcome_wave +# flags: OS2 WIN TIM +# info : this is the default welcome.wav, if no other value is specified +# in PORT or CALLER setup. +# +########################################################################## + +filename_welcome_wave=welcome.wav + + + +########################################################################## +# +# name : wave_play_ringing +# flags: OS2 WIN TIM +# info : set capitel to signal incomming calls with a wave-file +# +########################################################################## + +wave_play_ringring=1 + + + +########################################################################## +# +# name : filename_ringring_wave +# flags: OS2 WIN TIM +# info : name for a wave-file that capitel will play, if a call is +# incomming. +# +########################################################################## + +filename_ringring_wave=ringing.wav + + + +########################################################################## +# +# name : wave_16bit +# flags: OS2 WIN +# info : sets capitel to generate 16bit waves's. +# +########################################################################## + +wave_16bit=1 + + + +########################################################################## +# +# name : capi_set_signal +# flags: OS2 WIN +# info : set the working mode to the isdn-driver from polling- to +# signaling-mode. if it runs, set it up to signaling (1). +# +# note: if you have problems with capitel on a teles capi 1.1, that +# the cpu-usage goes up to 100%: turn this parameter to 0. +# +########################################################################## + +capi_set_signal=1 + + + +########################################################################## +# +# name : capi_controller +# flags: OS2 WIN +# info : the number of your isdn-controller. capitel counts the controller +# up from one (!!!), regardless that capi 1.1 counts it from zero. +# +########################################################################## + +capi_controller=1 + + + +########################################################################## +# +# name : capitel_active +# flags: OS2 WIN +# info : sets capitel active (=1) or deactiv (=0). this entry corresponds +# to the TOGGLE-ACTIVATION-button of capitel. do not chance this +# value. it's for internal use only. +# +########################################################################## + +capitel_active=1 + + +########################################################################## +# +# name : capitel_active_on_startup +# flags: OS2 WIN +# info : sets capitel active (=1) or deactiv (=0) on startup. +# +########################################################################## + +capitel_active_on_startup=1 + + +########################################################################## +# +# name : capitel_active_time +# flags: OS2 WIN TIM +# info : here you can setup time dependent activation of capitel. +# in this example the first chunk ist redundant. +# +########################################################################## + +capitel_active_time=1~Mo-Su,00:00-23:59,1 + + + +########################################################################## +# +# name : capitel_run_cnt +# flags: OS2 WIN +# info : run counter. for internal use only. if zero, capitel starts with +# setup dialog +# +########################################################################## + +capitel_run_cnt=0 + + + +########################################################################## +# +# name : dtmf_support +# flags: OS2 WIN TIM +# info : sets dtmf suport on (1) and off (0). +# +########################################################################## + +dtmf_support=1 + + + +########################################################################## +# +# name : expand_caller_id +# flags: OS2 WIN +# info : if set, capitel expands unknown incomming calls with a area-code +# (if possible). +# +########################################################################## + +expand_caller_id=0 + + + +########################################################################## +# +# name : rescan_time +# flags: OS2 WIN +# info : value in seconds, that capitel tells to rescan calling entry in +# the display. only relevant, if other institutions deletes calls +# on your hard-disk (e.g. www-scrips) +# +########################################################################## + +rescan_time=0 + + + +########################################################################## +# +# name : window_restore +# flags: OS2 WIN +# info : refer to capitel setup dialog +# +########################################################################## + +window_restore=1 + + + +########################################################################## +# +# name : window_confirm_delete +# flags: OS2 WIN +# info : refer to capitel setup dialog +# +########################################################################## + +window_confirm_delete=0 + + + +########################################################################## +# +# name : +# flags: OS2 WIN +# info : refer to capitel setup dialog +# +########################################################################## + +window_ignore_empty=0 + + + +########################################################################## +# +# name : +# flags: OS2 WIN +# info : refer to capitel setup dialog +# +########################################################################## + +window_frame_controls_hidden=0 + +# internal flags (win version only) + +window_xpos= +window_ypos= +window_xsize= +window_ysize= +window_col_size= +window_view_flags= + + +########################################################################## +# +# name : start_disconnect +# flags: OS2 WIN TIM +# info : flag for starting a program every time of a (d-chanel-)disconnect. +# +########################################################################## + +start_disconnect=0 + +start_disc_proc=c:\windows\regedit.exe +start_disc_parm= +start_disc_title= + + +########################################################################## +# +# name : register_name +# flags: OS2 WIN +# info : your registration name +# +########################################################################## + +register_name=all friends of CapiTel + +########################################################################## +# +# name : register_code +# flags: OS2 WIN +# info : your register code +# +########################################################################## + +register_code=7E033DB37EBB27053BEF + +########################################################################## +# +# name : text_unknown +# flags: OS2 WIN TIM CAPI11 +# info : text, that capitel display as 'name" of a unknown isdn or +# analog caller +# +########################################################################## + +text_unknown=Unknown + + +########################################################################## +# +# name : text_unknown_analog +# flags: OS2 WIN TIM CAPI20 ALAW +# info : text, that capitel display as 'name" of a unknown analog caller +# +########################################################################## + +text_unknown_analog=Unknown analog + +########################################################################## +# +# name : text_unknown_isdn +# flags: OS2 WIN TIM CAPI20 ALAW +# info : text, that capitel display as 'name" of a unknown isdn caller +# +########################################################################## + +text_unknown_isdn=Unknown ISDN + + +########################################################################## +# +# name : outgoing_number +# flags: OS2 WIN TIM CAPI20 +# info : outgoing msn used for callback. please only set up your msn. not +# your full number. e.g. if your full nummer is +49 241 9519011 only +# set up 9519011 here. if you set up a wrong number your telephone +# provider ignores your setting and fill it up with your base number. +# +########################################################################## + +outgoing_number= + + +########################################################################## +# +# name : com_device +# flags: WIN OS2 +# info : 0 = detect device automatic (capi 2.0 -> capi 1.1 -> modem/ta) +# 1 = use capi 1.1 +# 2 = use capi 2.0 +# 3 = do not use capi. search for modem/ta instead (WIN only) +# +########################################################################## + +com_device=0 + + +########################################################################## +# +# name : beep_on_calls +# flags: OS2 WIN +# info : capitel will beep, if calls are available +# +########################################################################## + +beep_on_calls=0 + + +########################################################################## +# +# name : beep_on_calls_freq +# flags: OS2 WIN +# info : beep frequency (Hz) +# +########################################################################## + +beep_on_calls_frequency=4000 + + +########################################################################## +# +# name : beep_on_calls_duration +# flags: OS2 WIN +# info : duration of one beep (ms) +# +########################################################################## + +beep_on_calls_duration=500 + + +########################################################################## +# +# name : beep_on_calls_delay +# flags: OS2 WIN +# info : delay between two signalisations (ms) +# +########################################################################## + +beep_on_calls_delay=5000 + + +########################################################################## +# +# name : capitel_priority +# flags: OS2 WIN +# info : set programm priority as follow: +# +# [WIN] +# 1 = IDLE_PRIORITY_CLASS +# 2 = NORMAL_PRIORITY_CLASS +# 3 = HIGH_PRIORITY_CLASS +# 4 = REALTIME_PRIORITY_CLASS +# +# [OS/2] +# 0 = PRTYC_NOCHANGE +# 1 = PRTYC_IDLETIME +# 2 = PRTYC_REGULAR +# 3 = PRTYC_TIMECRITICAL +# 4 = PRTYC_FOREGROUNDSERVER +# +########################################################################## + +capitel_priority=2 + + +########################################################################## +# +# name : capitel_affinity (NOT SUPPORTED YET!!!) +# flags: NT (does anybody kwow about a API for OS/2?) +# info : set the cpu number bitmask on which capitel will run on SMP-machines +# +# example: 1 -> on cpu 1 only +# 2 -> on cpu 2 only +# 3 -> on cpu 1 and on cpu 2 +# ... +# +########################################################################## + +capitel_affinity=1 + + +########################################################################## +# +# name : capitel_cti_support +# flags: OS2 WIN +# info : 0 -> CTI support is OFF +# 1 -> CTI support is ON +# +########################################################################## + +capitel_cti_support=0 + + +########################################################################## +# +# name : capitel_cti_program +# flags: OS2 WIN +# info : e.g.: "capitel_cti_program=CTI.EXE" will start: +# a) CTI.EXE with CallerId as his first parameter, if CallerId is known. +# e.g. "CTI.EXE 00492419519011" if i call to you. +# b) CTI.EXE with no parameter, if CallerId is unknown +# +########################################################################## + +capitel_cti_program= + + +########################################################################## +# +# name : capitel_codec_ulaw +# flags: OS2 WIN +# info : 0 -> capitel uses a A-LAW codec for dtmf and wav-support +# 1 -> capitel uses a U-LAW codec for dtmf and wav-support +# +# note : A-LAW codecs are used in all european countries +# U-LAW codecs are used e.g. in the USA or malaysia +# +########################################################################## + +capitel_codec_ulaw=0 + + +########################################################################## +# +# name : dtmf_down_border +# flags: OS2 WIN +# info : an higher value will increase the chance to recognise an dtmf-tone, +# but also increase the chance to recognise a wrong tone. +# +########################################################################## + +dtmf_down_border=13000 + + +########################################################################## +# +# name : dtmf_up_border +# flags: OS2 WIN +# info : an lower value will increase the chance to recognise an dtmf-tone, +# but also increase the chance to recognise a wrong tone. +# +# +########################################################################## + +dtmf_up_border=50000 + + +########################################################################## +# +# name : capitel_is_caller_id +# flags: OS2 WIN +# info : 1 = capitel is also an full caller-id programm +# 0 = capitel is only a answering machine +# +########################################################################## + +capitel_is_caller_id=1 + + +########################################################################## +# +# name : out_cip_value +# flags: OS2 WIN CAPI20 +# info : defines the cip-value (isdn-service) for the callback +# 1 = speech (default) +# 4 = 3.1 kHz audio +# 16 = telephony +# +########################################################################## + +out_cip_value=1 + + +########################################################################## +# +# name : call_back_number +# flags: OS2 WIN CAPI20 +# info : defines the number for the callback +# (e.g. the number of your cellular phone). +# if no number ist defined, no callback will be made. +# +# note: if no number is set, no callback will be made. so, over +# the remote action SETCALLBACK you can also disable callback +# by entering no number. +# +########################################################################## + +call_back_number= + + +########################################################################## +# +# name : call_back_active +# flags: OS2 WIN CAPI20 TIM +# info : enables and disables callback +# +########################################################################## + +call_back_active=1 + + +########################################################################## +# +# name : call_back_limit +# flags: OS2 WIN CAPI20 +# info : callback only if recorded time is more than this value (in sec). +# +########################################################################## + +call_back_limit=2 + + +########################################################################## +# +# name : silence_border +# flags: OS2 WIN +# info : a bigger value will result in more frequently silence-detection +# +########################################################################## + +silence_border=85 + + +########################################################################## +# +# name : show_popup_window +# flags: WIN +# info : internal use only. do not modify! +# +########################################################################## + +show_popup_window=4 + + +########################################################################## +# +# name : modem_search_from_com +# flags: OS2 WIN +# info : on this comport capitel starts searching for a modem/ta. +# +########################################################################## + +modem_search_from_com=1 + + +########################################################################## +# +# name : modem_search_to_com +# flags: OS2 WIN +# info : on this comport capitel stops searching for a modem/ta. +# +########################################################################## + +modem_search_to_com=4 + + +########################################################################## +# +# name : modem_bitrate +# flags: OS2 WIN +# info : bitrate for communication from the pc to the modem/ta +# (for isdn is must be 115200). +# +########################################################################## + +modem_bitrate=115200 + + +########################################################################## +# +# name : modem_init_string +# flags: OS2 WIN +# info : this string must the modem/ta set up to: +# a) initialize the modem +# b) sets the b-channel-protocolls to transparent on all three layers. +# c) sets the modem to accept analog calls (3.1khz, audio & telephony) +# d) sets the modem to show the calling numbers in the RING-line +# e) sets the modem to use DTR to hang up +# +# note: do NOT set the S0-Register in this init-string +# +########################################################################## + +#ELSA TANGO 1000/2000: +modem_init_string=at&f$ibp=trans$isci=0,1,1,0,0s153=255 + + +########################################################################## +# +# name : zero_behavior +# flags: OS2 WIN +# info : 0: don't change the incomming number (caller-id) +# 1: delete leading zero (if there is one) +# 2: add a leading zero to the number +# +# note: some capi-drivers don't provide the well numbering plan, defined +# in ETS 300 102-1 (e.g. eicon diva) +# +########################################################################## + +zero_behavior=0 + + + + diff --git a/distrib/setup.all/capitel.nam b/distrib/setup.all/capitel.nam new file mode 100644 index 0000000..a071829 --- /dev/null +++ b/distrib/setup.all/capitel.nam @@ -0,0 +1,17 @@ +# 1st col.: number of caller +# 2nd col.: name of caller +# 3rd col.: welcome.wav for this entry +# 4th col.: reject-cause for this entry (0=normal, 1=busy, 2=refuse, 3=unavailable) +# 5th col.: max. recording time +# 6th col.: answering delay +# 7th col.: active flag +# 8th col.: ringing.wav +# 9th col.: callback number +# +# note: - "*" star means port default +# - insert a blank for no settings +# +089-*|Caller from Munich|*|*|*|*|1|*|* +0241-9519011|Werner|*|*|*|*|1|*|* +0241-9209025|Carsten|*|*|*|*|1|*|* + diff --git a/distrib/setup.all/capitel.num b/distrib/setup.all/capitel.num new file mode 100644 index 0000000..144c28b --- /dev/null +++ b/distrib/setup.all/capitel.num @@ -0,0 +1,5572 @@ +0171:D1-Net +0172:D2-Net +001:USA +06485:Nentershausen Westerwald +09671:Oberviechtach +09748:Kothen +033395:Zerpenschleuse +036028:Kammerforst +036463:Gebstedt +036766:Schalkau +037603:Wildenfels +038373:Katzow +05042:Bad Muender am Deiste +05233:Steinheim Westf +07125:Bad Urach +08377:Unterthingau +08801:Seeshaupt +03745:Falkenstein +06698:Schrecksbach +09131:Erlangen +02183:Rommerskirchen +02302:Witten +036041:Bad Tennstedt +036968:Rossdorf +05446:Rehden Kreis Diepholz +05751:Rinteln +0771:Donaueschingen +07452:Nagold +07529:Waldburg Wuertt +07643:Herbolzheim Breisgau +06081:Usingen +09153:Schnaittach +09344:Grossrinderfeld-Gerch +09535:Pfarrweisach +02587:Ennigerloh-Westkirch +05964:Laehden +034636:Schafstaedt +04288:Horstedt Kr Rotenbur +04479:Molbergen-Peheim +04903:Wymeer +03341:Strausberg +06294:Krautheim Jagst +06222:Wiesloch +07665:March Breisgau +08845:Bad Kohlgrub +02842:Kamp-Lintfort +036481:Neustadt / Orla +036784:Stuetzerbach +038391:Altenkirchen +09175:Spalt +09366:Geroldshausen Unterf +04734:Stadland-Seefeld +04925:Hinte +09480:Suenching +06435:Wallmerod Westerw +06626:Wildeck Hess-Obersuh +05064:Bad Salzdetfurth-Gro +05255:Altenbeken +08327:Rettenberg +08441:Pfaffenhofen a d Ilm +08709:Eching Niederbay +08823:Mittenwald +07147:Sachsenheim Wuertt +07261:Sinsheim +0038:Jugoslawien +00509:Haiti +03881:Grevesmuehlen +03576:Weisswasser +038378:Heringsdorf +05468:Bramsche Hase-Engter +05582:St Andreasberg +05659:Ringgau +05773:Stemwede-Wehdem +02324:Hattingen Ruhr +034654:Stolberg +05277:Hoexter-Fuerstenau +04330:Emkendorf +04407:Wardenburg +04521:Eutin +07474:Haigerloch +06108:Muehlheim am Main +08654:Freilassing +09103:Cadolzburg +02651:Mayen +037204:Lichtenstein +039852:Schoenermark +0461:Flensburg +05609:Ahnatal +05723:Bad Nenndorf +04161:Buxtehude +04238:Kirchlinteln-Neddena +04352:Damp +04543:Nusse +07806:Bad Peterstal-Griesb +08867:Rottenbuch Oberbay +06053:Waechtersbach +06244:Westhofen Rheinhess +09197:Egloffstein +09621:Amberg Oberpf +02673:Ellenz-Poltersdorf +02864:Reken +034659:Blankenheim +034773:Schwittersdorf +039751:Penkun +08136:Markt Indersdorf +04756:Odisheim +04947:Aurich Ostfriesland- +08250:Hilgertshausen-Tande +00972:Israel +00241:Gabun +03385:Rathenow +03504:Dippoldiswalde +06457:Burgwald Eder +06571:Wittlich +06648:Bad Salzschlirf +02133:Dormagen +05086:Celle-Scheuen +05205:Bielefeld-Sennestadt +034672:Rossleben +034975:Goerzig +037608:Waldenburg +039953:Schwinkendorf +06762:Kastellaun +07402:Fluorn-Winzeln +08349:Stoetten a Auerberg +08463:Greding +03831:Stralsund +06031:Friedberg Hessen +06593:Hillesheim Eifel +06784:Idar-Oberstein-Weier +00263:Simbabwe +036082:Ershausen +038295:Satow +05341:Salzgitter +05532:Stadtoldendorf +0033:Frankreich +07233:Niefern-oeschelbronn +07424:Spaichingen +039031:Daehre +05745:Stemwede-Levern +05936:Twist Emsl +02291:Waldbroel +02368:Oer-Erkenschwick +02482:Hellenthal Eifel +02601:Nauort +035931:Koenigswartha +04183:Jesteburg +07751:Waldshut-Tiengen (ON +07942:Neuenstein Wuertt +00689:Franzoesisch-Polynesien +06266:Hassmersheim +09529:Oberschleichach +09643:Auerbach Oberpf +09834:Dornhausen b Gunzenh +033920:Walsleben +02695:Insul Ahr +037323:Lichtenberg +039857:Drense +039971:Gnoien +08081:Dorfen Stadt +04892:Schenefeld Mittelholst +04778:Wingst +08158:Tutzing +08272:Wertingen +03335:Finowfurt +06479:Waldbrunn Westerwald +09665:Koenigstein Oberpf +09856:Duerrwangen +034493:Goessnitz +035936:Sohland +039036:Binde +039453:Derenburg +039774:Moenkebude +05036:Neustadt am Ruebenberg +08294:Horgau +07042:Vaihingen an der Enz +03471:Bernburg +033604:Lebus +039976:Gross Buetzin +05363:Wolfsburg-Vorsfelde +05554:Moringen +02105:Meerbusch-Buederich +04302:Kirchbarkau +07255:Graben-Neudorf +07446:Lossburg +0971:Bad Kissingen +06003:Rosbach v d Hoehe +09147:Nennslingen +09261:Kronach +09338:Roettingen Unterfr +037209:Einsiedel +05767:Warmsen +037341:Ehrenfriedersdorf +02509:Nottuln-Appelhuelsen +02623:Ransbach-Baumbach +033200:Bergholz-Rehbruecke +04706:Schiffdorf +07773:Bodman-Ludwigshafen +07964:Stoedtlen +09452:Langquaid +06407:Rabenau Hess +09092:Wemding +09283:Rehau +09474:Schmidmuehlen +02645:Vettelschoss +02836:Wachtendonk +033609:Brieskow-Finkenheerd +035954:Grossharthau +039054:Flechtingen +08031:Rosenheim Oberbay +04537:Suelfeld Holst +04651:Westerland +04842:Nordstrand +0661:Fulda +08222:Burgau Schwab +06429:Stadtallendorf-Schwe +06543:Buechenbeuren +06734:Flonheim +09920:Bischofsmais +033925:Wustrau +037328:Grossschirma +039994:Metschow +05172:Ilsede +08435:Ehekirchen +03379:Mahlow +03493:Bitterfeld +035752:Ruhland +05194:Bispingen +036087:Wuenstheuterode +034291:Borsdorf +02432:Wassenberg +02241:Siegburg +039458:Heudeber +04133:Wittorf Kr Lueneburg +04324:Brokstedt +07277:Woerth-Buechelberg +07391:Ehingen Donau +07582:Bad Buchau +08762:Wartenberg Oberbay +09402:Regenstauf +09828:Ruegland +09942:Viechtach +02263:Engelskirchen +02454:Gangelt +033741:Niedergoersdorf +05831:Wittingen +05908:Wietmarschen-Lohne +08784:Hohenthann +04155:Buechen +04346:Gettorf +07532:Meersburg Bodensee +07723:Furtwangen +0082:Korea(Republik) +00966:Saudi Arabien +06047:Altenstadt Hess +06161:Brensbach +06238:Dirmstein +06352:Kirchheimbolanden +037346:Geyer +034296:Groitzsch +02590:Duelmen-Buldern +02667:Stein-Neukirch +02858:Huenxe +02972:Schmallenberg +04482:Hatten Oldb +04559:Wensin +04673:Joldelund +04864:Oldenswort +033205:Michendorf +035436:Laasow +03421:Torgau +03307:Zehdenick +06374:Weilerbach +06565:Dudeldorf +035032:Langenhennersdorf +05504:Friedland Kr Goetting +02994:Marsberg-Westheim +034498:Rositz +039779:Eggesin +06756:Sobernheim-Eckweiler +07936:Schrozberg-Bartenste +08053:Endorf Oberbay +08266:Kirchheim Schwab +08380:Achberg +08457:Vohburg a d Donau +08571:Simbach a Inn +09424:Strasskirchen +03329:Stahnsdorf +06396:Hinterweidenthal +06587:Zerf +037465:Tannenbergsthal +038302:Sagard +039393:Werben +039999:Tutow +05144:Wathlingen +05335:Schladen +06706:Wallhausen Kr Bad Kr +07150:Muenchingen Wuertt +07227:Lichtenau Baden +08593:Untergriesbach +09964:Stallwang +03847:Sternberg +03961:Altentreptow +09233:Arzberg Oberfr +0046:Schweden +037364:Reitzenhain +033847:Goerzke +035454:Uckro +038201:Gelbensande +038825:Kluetz +039292:Biederitz +04177:Drage Elbe +05662:Felsberg Hess +05853:Neu Darchau +07554:Heiligenberg Baden +07745:Jestetten +06183:Erlensee +06302:Winnweiler +09446:Altmannstein +09560:Grub a Forst +033746:Werbig +02689:Dierdorf +02922:Werl +038724:Siggelkow +039059:Wegenstedt +08075:Amerang +0351:Dresden +07958:Rot am See-Brettheim +09637:Falkenberg Oberpf +03443:Weissenfels +03634:Soemmerda +09468:Zell Oberpf +09659:Leuchtenberg +09773:Unsleben +037369:Wolkenstein +02944:Rietberg-Mastholte +033966:Dranse +035876:Weissenberg +038206:Graal-Mueritz +038320:Tribsees +04836:Hennstedt Dithm +04950:Holtland +08330:Legau +08407:Grossmehring +06728:Ober-Hilbersheim +06842:Blieskastel +037382:Geringswalde +05166:Walsrode-Kirchboitze +05357:Grasleben +02404:Alsdorf Rheinl +035472:Schlepzig +035775:Pechern +038843:Bennin +04105:Seevetal +05471:Bohmte +07172:Lorch Wuertt +07249:Stutensee +03869:Duemmer +07363:Lauchheim +08734:Reisbach Niederbay +09255:Marktleugast +02426:Noervenich +033764:Mittenwalde +034904:Oranienbaum +038307:Poseritz +05684:Frielendorf +05875:Emmendorf +04623:Boeklund +04432:Doetlingen-Brettorf +04509:Gross Groenau +07576:Krauchenwies +06324:Hassloch Pfalz +07504:Horgenzell +08756:Nandlstadt +09086:Fremdingen +02448:Hellenthal Eifel-Res +02562:Gronau Westf +02639:Anhausen Kr Neuwied +02753:Erndtebrueck +033984:Blumenthal +035894:Haehnichen +036731:Unterloquitz +038224:Gresenhorst +039297:Eickendorf +04454:Jade +08025:Miesbach +09277:Warmensteinach +06346:Annweiler am Trifels +06651:Rasdorf b Huenfeld +0861:Traunstein Oberbay +09391:Marktheidenfeld +035055:Hoeckendorf +035793:Elstra +038426:Neuburg +038729:Marnitz +08238:Gessertshausen +08543:Aidenbach +04858:St Margarethen Holst +04972:Langeoog +09701:Waldberg Unterfr +0041:Schweiz +03606:Heiligenstadt +06864:Mettlach +02235:Erftstadt +034601:Teutschenthal +034922:Muehlanger +035692:Kerkwitz +039398:Gross Garz +05379:Sassenburg-Grussendor +04127:Westerhorn +04241:Bassum +05493:Neuenkirchen Oldenburg +05803:Rosche +07194:Spiegelberg +07385:Gomadingen +06133:Oppenheim +06695:Jesberg +09205:Vorbach +02257:Bad Muenstereifel-Rec +02066:Duisburg-Homberg +02371:Iserlohn +035477:Rietzneuendorf +038848:Vellahn +05634:Waldeck Hess +04149:Fredenbeck +04263:Scheessel +05825:Wieren +07335:Wiesensteig +07831:Hausach Schwarzwaldb +06155:Griesheim Hess +09227:Neuenmarkt +09341:Tauberbischofsheim +09532:Maroldsweisach +02584:Warendorf-Milte +02775:Driedorf +033769:Toepchin +034606:Teicha +034909:Aken +035697:Bagenz +04285:Rhade b Zeven +04667:Dagebuell +05961:Haseluenne +07739:Hilzingen +07853:Kehl-Bodersweier +08161:Freising +06291:Adelsheim +06482:Runkel Lahn +06559:Leidenborn +06673:Haunetal +033365:Luedersdorf / Eberswalde-Finow +034202:Delitzsch +05307:Braunschweig-Wenden +05421:Dissen am Teutoburge +08374:Dietmannsried +08565:Baumgarten Niederbay +09723:Roethlein +07122:St Johann Wuertt +09745:Wildflecken +09936:Wallerfing +0023222:Sierra Leone +03933:Genthin +03628:Arnstadt +06509:Buedlich +06623:Rotenburg a d Fulda +034422:Osterfeld +036332:Ellrich +039400:Wefensleben +05138:Sehnde +05252:Bad Lippspringe +05329:Schulenberg im Oberh +05443:Lemfoerde +07144:Marbach am Neckar +08706:Vilsheim +0033078:Andorra +00506:Costa Rica +03573:Senftenberg +03764:Meerane +034321:Leisnig +05656:Waldkappel +02393:Sundern Sauerland-Al +034927:Globig +038462:Baumgarten +039602:Kleeth +04404:Elsfleth +05465:Neuenkirchen b Bramsche +07357:Attenweiler +07471:Hechingen +07662:Vogtsburg im Kaisers +06105:Moerfelden-Walldorf +09363:Arnstein Unterfr +09554:Untersteinbach Unter +036736:Arnsgereuth +033080:Marienthal +033989:Sadenbeck +038229:Bad Suelze +08302:Goerisried +04498:Saterland-Ramsloh +04731:Nordenham +04922:Borkum +03437:Grimma +0551:Goettingen +06241:Worms +06432:Diez +09385:Kolitzheim +02747:Molzhain +02861:Borken Westf +02938:Ense +034743:Ermsleben +036653:Lehesten +039721:Liepen +04639:Schafflund +04753:Balje Kr Stade +04944:Wiesmoor +08133:Haimhausen Oberbay +08324:Hindelang +03382:Lehnin +03501:Pirna +06645:Ulrichstein +06836:ueberherrn +09576:Isling +02207:Kuerten-Duerscheid +034207:Zwochau +036873:Themar +038783:Dallmin +039923:Priborn +05083:Hohne b Celle +05274:Nieheim +07166:Adelberg +08537:Aigen a Inn +08651:Bad Reichenhall +08728:Geratskirchen +0090:Tuerkei +09172:Georgensgmuend +02725:Lennestadt-Oedingen +05678:Hofgeismar-Beberbeck +02534:Muenster-Roxel +036337:Schiedungen +036451:Buttelstedt +039822:Kratzeburg +04235:Langwedel Kr Verden +04426:Wangerland-Horumersi +07684:Glottertal +07803:Gengenbach +06127:Niedernhausen Taunus +09194:Ebermannstadt +09504:Stadelhofen +038788:Gross Warnow +05933:Lathen +039001:Apenburg +02365:Marl +02556:Metelen +036254:Friedrichswerth +039607:Kotelow +039928:Moellenhagen +04257:Schweringen +04371:Burg auf Fehmarn +04562:Groemitz +07825:Kippenheim +06263:Neckargerach +06454:Lichtenfels Hess-Sac +09831:Gunzenhausen +09908:Schoefweg +033085:Seilershof +039203:Barleben +05202:Oerlinghausen +08346:Pforzen +08460:Holnstein +04775:Grossenwoerden +04966:Neuboerger +00260:Sambia +0241:Aachen +03523:Coswig / Dresden +06667:Steinau an der Strasse +06781:Idar-Oberstein +06858:Ottweiler-Fuerth +02152:Kempen +039405:Hoetensleben +05606:Zierenberg +07307:Senden Iller +00359:Bulgarien +06050:Biebergemuend +09008:Unterringingen +09122:Schwabach +034344:Kohren-Sahlis +02174:Burscheid Rheinl +036878:Brattendorf +038485:Dabel +05742:Preussisch Oldendorf +04180:Koenigsmoor +07634:Heitersheim +09526:Kleinsteinach +02692:Kelberg +034243:Bad Dueben +039827:Schwarz +03332:Schwedt +06476:Mengerskirchen +09853:Wilburgstetten +034445:Stoessen +05224:Enger Westf +039423:Wegeleben +039726:Ducherow +08177:Muensing Starnberger +08291:Zusmarshausen +08368:Halblech +0054:Argentinien +039208:Loitsche +039322:Tangermuende +05437:Menslage +05551:Northeim +0751:Ravensburg +07329:Steinheim am Albuch +07443:Dornstetten Wuertt +03949:Oschersleben +09144:Pleinfeld +09335:Aub Kr Wuerzburg +02387:Drensteinfurt-Walste +039221:Moeckern +05955:Esterwegen +04393:Boostedt +04703:Loxstedt-Donnern +07961:Ellwangen Jagst +06094:Weibersbrunn +06285:Wallduern-Altheim +09548:Muehlhausen Mittelfr +09662:Vilseck +036373:Buttstaedt +05033:Wunstorf-Grossenheido +09875:Wolframs-Eschenbach +02102:Ratingen +034362:Muegeln +05246:Verl +08509:Ruderting +08623:Kirchweidach +07138:Schwaigern Wuertt +07252:Bretten Baden +034261:Kuehren +02196:Wermelskirchen +02506:Muenster-Wolbeck +02620:Neuhaeusel Westerwald +05573:Uslar-Volpriehausen +05764:Steyerberg +07465:Emmingen-Liptingen +07656:Schluchsee +06404:Lich Hess +09357:Graefendorf +09471:Burglengenfeld +039006:Miesterhorst +034463:Bad Koesen +035603:Burg / Spreewald +036259:Tabarz +039744:Rothenklempenow +05977:Spelle +08105:Gilching +06426:Fronhausen Lahn +037430:Eichigt +05055:Fassberg +08432:Burgheim +03681:Suhl +039428:Pabstorf +05459:Hoerstel +05382:Bad Gandersheim +04207:Oyten +04321:Neumuenster +07274:Germersheim +06022:Obernburg a Main +09280:Selbitz Oberfr +09166:Muenchsteinach +02833:Kerken +036694:Schkoelen +039327:Klietz +04725:Helgoland +06731:Alzey +06235:Schifferstadt +09188:Postbauer-Heng +09493:Beratzhausen +02664:Rennerod Westerw +02855:Voerde Niederrhein +035823:Ostritz +039226:Hohenziatz +08241:Buchloe +09803:Colmberg +04556:Gnissau +04747:Beverstedt +04861:Toenning +04938:Hagermarsch +00963:Syrien +03304:Velten +06562:Speicher Eifel +06639:Ottrau +06753:Meisenheim Glan +035608:Gross Ossnig +035722:Lauta +036075:Dingelstaedt +036378:Ostramondra +039749:Grambow +039863:Seehausen / Prenzlau +05191:Soltau +07083:Bad Herrenalb +07202:Karlsbad +08454:Karlshuld +02642:Remagen +02337:Hagen-Dahl +02451:Geilenkirchen +02528:Ennigerloh-Enniger +039345:Parchen +0441:Oldenburg Oldb +04534:Steinburg Kr Stormar +04152:Geesthacht +04343:Laboe +05905:Beesten +07720:Villingen-Schwenning +08858:Kochel a See-Walchen +06044:Schotten Hess +09307:Unteraltertheim +09421:Straubing +02359:Kierspe +02473:Simmerath +033931:Rheinsberg +035727:Burghammer +035841:Grossschoenau +039244:Steutz +04174:Stelle Kr Harburg +04365:Heringsdorf Holst +05850:Neetze Kr Lueneburg +07628:Efringen-Kirchen +07742:Klettgau +07933:Creglingen +06066:Michelstadt-Vielbrun +06257:Seeheim-Jugenheim +06371:Landstuhl +09634:Wiesau +033830:Ziesar +02686:Weyerbusch +02991:Marsberg-Bredelar +039881:Ringenwalde +08072:Haag Oberbay +08263:Breitenbrunn Schwab +04769:Bremervoerde-Iselersh +04883:Suederstapel +09825:Herrieden +00254:Kenia +03631:Nordhausen +06584:Wellen Mosel +06775:Strueth Taunus +035828:Reichenbach / Oberlausitz +05332:Schoeppenstedt +05409:Hilter am Teutoburge +05523:Bad Sachsa +037435:Reuth +034385:Mutzschen +035204:Wilsdruff +07224:Gernsbach +08667:Seebruck Chiemsee +08781:Rottenburg a d Laabe +03844:Schwaan +09869:Wettringen Mittelfr +02401:Baesweiler +039262:Guesten +039886:Milmersdorf +05354:Jerxheim +05545:Hann Muenden-Hedemuend +08808:Paehl +04102:Ahrensburg +07246:Malsch +07551:ueberlingen Bodensee +0951:Bamberg +03866:Cambs +09252:Helmbrechts +09443:Abensberg +035020:Struppen +035209:Mohorn +035323:Sonnewalde +039482:Gatersleben +05872:Stoetze +04506:Stockelsdorf-Krumbec +07764:Herrischried +07955:Wallhausen Wuertt +06393:Fischbach b Dahn +06703:Woellstein Rheinhess +09465:Neukirchen-Balbini +09656:Moosbach b Vohenstra +037756:Breitenbrunn +05027:Linsburg +05141:Celle +039363:Angern +08094:Steinhoering +08285:Burtenbach +08404:Oberdolling +07033:Weil der Stadt +09847:Ergersheim +09961:Mitterfels +03462:Bad Duerrenberg +06725:Gau-Algesheim +07977:Oberrot b Gaildorf +08022:Tegernsee +033835:Golzow / Brandenburg +035025:Liebstadt +05163:Fallingbostel-Dorfma +08426:Walting Kr Eichstaett +08639:Neumarkt-St Veit +08731:Dingolfing +08753:Appersdorf +07055:Neuweiler Kr Calw +09083:Moettingen +09274:Hollfeld +00226:Obervolta +03675:Sonneberg +06747:Emmelshausen +06861:Merzig +02423:Langerwehe +02232:Bruehl Rheinl +02309:Waltrop +033734:Felgentreu +035341:Bad Liebenwerda +05185:Duingen +04124:Glueckstadt +05376:Wesendorf Niedersach +05681:Homberg Efze +07191:Backnang +07268:Bad Rappenau-Obergim +07382:Roemerstein +06207:Wald-Michelbach +06321:Neustadt an der Weinstrasse +06130:Schwabenheim a d Sel +07459:Nagold-Hochdorf +036701:Lichte +033633:Spreenhagen +02636:Burgbrohl +02750:Bad Berleburg-Dieden +02827:Goch-Hassum +02941:Lippstadt +04833:Wesselburen +035240:Tauscha +039267:Schneidlingen +04528:Schoenwalde am Bungsb +04642:Kappeln Schlei +07573:Stetten am kalten Ma +06534:Muelheim Mosel +06229:Neckarsteinach +06343:Bad Bergzabern +09606:Pfreimd +02581:Warendorf +02772:Herborn Hess +02963:Brilon-Messinghausen +033436:Proetzel +036921:Wutha-Farnroda +039487:Friedrichsbrunn +04473:Emstek +04664:Neukirchen b Niebuell +04855:Eddelak +09720:Thomashof b Schweinf +00880:Bangladesch +03603:BadLangensalza +06556:Pronsfeld +06670:Ludwigsau Hess +09933:Wallersdorf +02041:Bottrop +02985:Winterberg Westf-Nie +033638:Ruedersdorf +035245:Burkhardswalde +039083:Messdorf +039386:Seehausen / Altmark +04877:Hennstedt b Itzehoe +05304:Meine +08257:Inchenhofen +08562:Triftern +00248:Seschellen +0062:Indonesien +09202:Waischenfeld +02254:Weilerswist +05631:Korbach +05822:Ebstorf +02445:Schleiden Eifel +04146:Stade-Buetzfleth +04260:Visselhoevede-Wittorf +04337:Jevenstedt +04451:Varel Jadebusen +0641:Giessen +07905:Langenburg Wuertt +06152:Gross-Gerau +03761:Werdau +035364:Lebusa +036201:Walschleben +038735:Plau +05653:Sontra +05844:Clenze +04168:Neu Wulmstorf-Elstorf +04282:Sittensen +04401:Brake Unterweser +07545:Immenstaad am Bodens +07736:Tengen +06174:Koenigstein im Taunus +09551:Burgwindheim +09628:Ursensollen +09742:Kalbach Rhoen +033335:Pinnow +033656:Bahro +035263:Groeditz +08066:Bad Feilnbach +04495:Friesoythe-Thuele +04805:Schafstedt Dithm +07949:Pfedelbach-Untersteinbach +06387:St Julian Pfalz +06578:Salmtal +06692:Neustadt Hessen +09955:Mamming +033234:Wustermark +033972:Breddin +036605:Bad Koestritz +05135:Burgwedel-Fuhrberg +05326:Langelsheim +08393:Holzguenz +08584:Breitenberg Niederba +07141:Ludwigsburg Wuertt +07332:Lauterstein +08703:Essenbach +03838:Bergen / Ruegen +03647:Poessneck +09977:Arnschwang +037292:Oederan +05462:Ankum +02204:Bergisch Gladbach-Be +033454:Woelsickendorf +038753:Woebbelin +039088:Letzlingen +05157:Emmerthal-Boerry +05271:Hoexter +07163:Ebersbach an der Fil +07354:Erolzheim Kr Biberac +08725:Wurmannsquick +06102:Neu-Isenburg +09246:Trockau +09360:Thuengen +02608:Welschneudorf +02722:Attendorn Westf +033674:Trebatsch +033977:Gumtow +036421:Camburg +038331:Rakow +0331:Potsdam +04423:Wilhelmshaven-Fedder +05675:Trendelburg +07567:Leutkirch im Allgaeu- +07681:Waldkirch Breisgau +06196:Bad Soden am Taunus +06506:Welschbillig +06620:Philippsthal Werra +09573:Staffelstein Oberfr +02935:Sundern Sauerland-Ha +033876:Buschow +036623:Berga +036926:Creuzburg +038854:Redefin +08207:Affing +04827:Wacken +04941:Aurich Ostfriesland +08321:Sonthofen +09764:Irmelshausen +00503:El Salvador +06833:Rehlingen Saar +06451:Frankenberg Eder +06642:Schlitz +0841:Ingolstadt Donau +02957:Wuennenberg-Haaren +033055:Kremmen +033472:Golzow / Seelow +035268:Stauchitz +036843:Benshausen +038450:Tarnow +0385:Schwerin +04849:Hooge Hallig +04963:Doerpen +08152:Herrsching a Ammerse +08343:Aitrang +03592:Kirschau +03902:Diesdorf +06855:Freisen +08534:Tettenweis +09905:Bernried Niederbay +02226:Rheinbach +036628:Zeulenroda +036742:Uhlstaedt +05293:Paderborn-Dahl +05484:Kattenvenne +05603:Gudensberg +04232:Langwedel Kr Verden +07376:Langenenslingen +08556:Haidmuehle +08670:Reischach Kr Altoetting +08861:Schongau +03996:Teterow +06124:Bad Schwalbach +09077:Bachhagel +09191:Forchheim Oberfr +09268:Teuschnitz +036944:Rentwertshausen +037297:Thum +02553:Ochtrup +02744:Herdorf Sieg +036206:Grossfahner +038872:Rehna +04445:Visbek Kr Vechta +04636:Langballig +09382:Gerolzhofen +00852:Hongkong +06337:Grossbundenbach +09409:Pielenhofen +09523:Hofheim Unterfr +033679:Wendisch Rietz +036426:Ottendorf / Stadtroda +08038:Vogtareuth +04772:Oberndorf Oste +06359:Gruenstadt +06473:Leun Lahn +06664:Sinntal-Sterbfritz +09927:Kirchberg Wald +036022:Grossengottern +038859:Zachun +08365:Wertach +07304:Blaustein Wuertt +00356:Malta +09005:Bissingen Schwab +035387:Seyda +036962:Vacha +033477:Trebnitz +02248:Hennef Sieg-Uckerath +02362:Dorsten +038758:Doemitz +04254:Eystrup +07708:Geisingen Baden-Leip +07822:Ettenheim +06146:Hochheim am Main +09332:Marktbreit +02575:Greven Westf-Reckenf +038354:Wusterhusen +05838:Gross Oesingen +05952:Soegel +04276:Borstel b Sulingen +04467:Wittmund-Funnix +07844:Rheinau Baden +06282:Wallduern +09736:Oberthulba +02979:Schmallenberg-Kirchr +036646:Tanna +036949:Obermassfeld +05221:Herford +04794:Worpswede-Ostersode +03733:Annaberg-Buchholz +036848:Wernshausen +05625:Naumburg Hess +02171:Leverkusen-Opladen +038455:Plaaz +07440:Bad Rippoldsau-Schap +07631:Muellheim Baden +07326:Neresheim +09141:Weissenburg i Bay +02193:Wermelskirchen-Dabri +02384:Welver +033394:Blumberg +036027:Lengenfeld unterm Stein +038372:Usedom +05456:Velpe +04204:Thedinghausen +05647:Lichtenau Westf-Klei +05761:Stolzenau Weser +07348:Beimerstetten +07462:Immendingen +03968:Schoenbeck +06401:Gruenberg Hess +07653:Lenzkirch +09354:Rieneck +09545:Buttenheim +02597:Senden Westf +036967:Geisa +08102:Hoehenkirchen +04298:Lilienthal +04489:Apen +04608:Handewitt +04722:Cuxhaven-Altenbruch +03542:Luebbenau +0531:Braunschweig +06805:Kleinblittersdorf +09872:Heilsbronn +034635:Bad Lauchstaedt +05052:Hermannsburg +05129:Soehlde +05434:Essen Oldenburg +08196:Puergen +08387:Weiler-Simmerberg +08506:Fuerstenzell-Bad Hoehe +07135:Brackenheim +0039541:San Marino +03564:Schwarze Pumpe +03946:Quedlinburg +06827:Eppelborn +036462:Ossmannstedt +036783:Gehren +037602:Kirchberg +039833:Mirow +05074:Rodewald +05265:Doerentrup +08642:uebersee +07157:Waldenbuch +07271:Woerth a Rhein +0039:Italien +03586:Neugersdorf +09163:Dachsbach +02334:Hagen-Hohenlimburg +02525:Beckum-Neubeckum +05592:Gleichen-Bremke +05902:Freren +04340:Achterwehr +04531:Bad Oldesloe +07484:Simmersfeld +07675:Bernau Baden +06232:Speyer +06423:Wetter Hess +09376:Collenberg +09567:Gemuenda +02738:Netphen +02852:Hamminkeln +034653:Rottleberode +034956:Zoerbig +038794:Cumlosen +039934:Klein Plasten +04744:Loxstedt-Stotel +04935:Juist +08124:Forstern Oberbay +09681:Windischeschenbach +06636:Romrod +06445:Schoeffengrund +09398:Birkenfeld b Wuerzbur +09708:Bad Bocklet +02874:Isselburg +037203:Gersdorf / Hohenstein-Ernstthal +039851:Goeritz +08146:Moorenweis +08337:Altenstadt Iller +09822:Bechhofen a d Heide +04766:Basdahl +04957:Detern +0221:Koeln +03395:Pritzwalk +06658:Poppenhausen Wasserkuppe +06772:Nastaetten +06849:Kirkel +034658:Hayn +034772:Helbra +05406:Belm +05520:Braunlage +08664:Chieming +06041:Glauburg +09185:Sulzbuerg Oberpf +037607:Ebersbrunn +05924:Bad Bentheim-Gildeha +038377:Zinnowitz +02661:Bad Marienberg Weste +02547:Rosendahl-Osterwick +034671:Bad Frankenhausen +04248:Bassum-Neubruchhause +04362:Heiligenhafen Holst +04553:Geschendorf +039952:Grammentin +07930:Boxberg Baden +03301:Oranienburg +06254:Lautertal Odenwald +09135:Hessdorf Mittelfr +09326:Markt Einersheim +09631:Tirschenreuth +02378:Froendenberg-Langsche +02683:Asbach Westerw +02802:Alpen +038294:Neubuckow +05946:Georgsdorf +04384:Selent Holst +07761:Bad Saeckingen +07838:Nordrach +07952:Gerabronn +06276:Hesseneck +06085:Waldsolms +06467:Hatzfeld Eder +06581:Saarburg Saar +034979:Wulfen +035930:Seitschen +037423:Adorf +039030:Brunau +039957:Gielow +05024:Rohrsen Kr Nienburg +08091:Kirchseeon +07221:Baden-Baden +08168:Attenkirchen +08282:Krumbach Schwaben +09653:Eslarn +03727:Mittweida +03841:Wismar +09844:Obernzenn +02165:Juechen +037322:Brand-Erbisdorf +05428:Melle Wiehengeb-Neue +05542:Witzenhausen +05733:Vlotho +08686:Petting +04171:Winsen Luhe +07243:Ettlingen +07434:Winterlingen +07625:Zell im Wiesental +0034:Spanien +00677:Salomonen +06063:Bad Koenig +039452:Ilsenburg +02306:Luenen +033704:Baruth +035935:Kleinwelka +036081:Arenshausen +05259:Bad Driburg-Neuenhee +04193:Henstedt-Ulzburg +04503:Timmendorfer Strand +05373:Hillerse Kr Gifhorn +05564:Dassel Solling +05755:Kalletal-Varenholz +07265:Angelbachtal +06204:Viernheim +07456:Haiterbach Wuertt +07570:Sigmaringen-Gutenste +09157:Alfeld Mittelfr +02824:Kalkar +033603:Falkenhagen / Seelow +039975:Thuerkow +05777:Diepenau-Essern +09271:Alladorf +09348:Werbach-Gamburg +04830:Suederhastedt Holst +07669:St Maergen +07974:Buehlerzell +09462:Falkenstein Oberpf +06298:Moeckmuehl +06531:Bernkastel-Kues +06722:Ruedesheim am Rhein +09675:Altendorf b Nabburg +037208:Oberlichtenau +039856:Beenz +05237:Augustdorf +05351:Helmstedt +0731:Ulm Donau +08423:Titting +04929:Ihlow +07052:Bad Liebenzell +07129:Lichtenstein Wuertt +08805:Hohenpeissenberg +03672:Rudolstadt +03863:Crivitz +06553:Schoenecken +06744:Oberwesel Rhein +034492:Lucka +039035:Kuhfelde +039773:Altwarp +05068:Elze Leine +05182:Gronau Leine +05301:Lehre-Essenrode +04121:Elmshorn +08445:Gerolsbach +08636:Ampfing +02137:Neuss-Norf +05586:Wieda +05705:Petershagen-Windheim +02251:Euskirchen +02633:Brohl-Luetzing +033924:Raegelin +037327:Rechenberg-Bienenmuehle +04143:Drochtersen +04334:Bredenbek b Rendsbur +04525:Ahrensboek +07478:Hirrlingen Kr Tuebing +06035:Reichelsheim Wetterau +06226:Meckesheim +06340:Woerth-Schaidt +09179:Freystadt +039457:Benneckenstein +02655:Weibern Brohltal +08041:Bad Toelz +08232:Schwabmuenchen +09293:Berg Oberfr +09484:Brennberg +04852:Brunsbuettel +04547:Gudow Kr Hzgt Lauenburg +04661:Niebuell +09603:Floss +06439:Holzappel Rhein-Lahn +06171:Oberursel Taunus +06362:Alsenz +09625:Kastl b Amberg Oberp +039053:Sueplingen +02677:Lutzerath +02982:Medebach +033608:Jacobsdorf +033929:Guehlen Glienicke +035953:Burkau +04683:Oldsum +04874:Todenbuettel +08063:Feldkirchen-Westerha +08254:Altomuenster +03431:Doebeln +03622:Waltershausen +06575:Landscheid Eifel +06766:Kisselbach Hunsrueck +033204:Beelitz +034295:Krensitz +035435:Gollmitz +039993:Hohenmocker +0421:Bremen +05209:Guetersloh-Friedrichs +05323:Clausthal-Zellerfeld +07520:Bodnegg +08467:Kinding +08581:Waldkirchen Niederba +08772:Mallersdorf-Pfaffenb +00267:Botsuana +09107:Trautskirchen +09221:Kulmbach +033841:Belzig +034497:Langenleuba-Niederhain +02159:Meerbusch-Osterath +02273:Kerpen Rheinl-Horrem +02464:Aldenhoven b Juelich +035751:Welzow +039778:Ferdinandshof +04165:Hollenstedt Nordheid +04356:Gross Wittensee +05841:Luechow Niedersachs +07733:Engen Hegau +06057:Floersbachtal +09129:Wendelstein +09243:Pottenstein +09434:Bodenwoehr +02295:Ruppichteroth +05863:Zernien Niedersachs +02486:Nettersheim +02605:Loef +033209:Caputh +035971:Sebnitz +037464:Schoeneck +038301:Putbus +039392:Roennebeck +039998:Loitz +04187:Buchholz in der Nord +04492:Saterland +04802:Wrohm +06384:Konken +06503:Hermeskeil +07755:Weilheim Kr Waldshut +037363:Zoeblitz +035453:Drahnsdorf +035756:Hosena +05132:Lehrte +07946:Bretzfeld +08085:St Wolfgang b Dorfen +08276:Baar Schwaben +07024:Wendlingen am Neckar +09647:Kirchenthumbach +09761:Bad Koenigshofen +09952:Eichendorf +03644:Apolda +0234:Bochum +06597:Juenkerath +06788:Sien +09974:Sattelpeilnstein +039058:Uthmoeden +05345:Baddeckenstedt +05536:Holzminden-Neuhaus +05650:Cornberg Hess +07237:Neulingen +07351:Biberach an der Riss +07428:Rosenfeld Wuertt +07542:Tettnang +03971:Anklam +0931:Wuerzburg +02223:Koenigswinter +035875:Obercunnersdorf +037368:Deutschneudorf +05176:Edemissen +05367:Ruehen +05481:Lengerich Westf +05672:Bad Karlshafen +07182:Welzheim +07259:oestringen +07373:Zwiefalten +07564:Bad Wurzach +08744:Gerzen +06007:Rosbach v d Hoehe-Rodheim +09074:Hoechstaedt a d Donau +09265:Pressig +06121:Wiesbaden +037381:Penig +05694:Diemelstadt +02741:Betzdorf Sieg +02627:Braubach +02932:Arnsberg-Neheim-Huest +033846:Dippmannsdorf +035471:Birkenhainichen +035774:Boxberg +038824:Mallenthin +039291:Calbe +04633:Satrup +04824:Krempe Holst +06334:Thaleischweiler-Froeschen +06525:Irrel +07586:Herbertingen +07777:Sauldorf +033745:Petkus +038723:Kladrum +05154:Aerzen +08204:Mickhausen +08226:Bibertal Schwab +08340:Baisweil +08531:Pocking +07046:Zaberfeld +08722:Gangkofen +0047:Norwegen +00331:Paris +03475:Lutherstadt Eisleben +06852:Nohfelden +033965:Herzsprung +038205:Tessin +039296:Welsleben +08553:Spiegelau +02436:Wegberg-Roedgen +038842:Luettenmark +04137:Barendorf Kr Luenebur +07705:Donaueschingen-Wolte +04251:Hoya +04328:Rickling +04442:Lohne Oldenburg +07395:Ehingen Donau-Daechin +06029:Moembris +09287:Selb +039397:Geestgottberg +02954:Ruethen-Oestereiden +08035:Raubling +033763:Bestensee +034600:Ostrau / Halle +034903:Coswig / Anhalt +04846:Hattstedt +038306:Samtens +06661:Schluechtern +09924:Bodenmais +035893:Muecka +036730:Sitzendorf +08248:Lamerdingen +08362:Fuessen +0042:Tschechoslowakai +00353:Irland +03921:Burg / Magdeburg +06874:Wadern-Nunkirchen +09002:Rain Lech +02054:Essen-Kettwig +02245:Much +08766:Gammelsdorf +035054:Lauenstein +035792:Ossling +038728:Domsuehl +05198:Schneverdingen-Winte +05508:Gleichen-Rittmarshau +05622:Fritzlar +0621:Ludwigshafen am Rhei +09406:Mintraching +02572:Emsdetten +02763:Drolshagen-Bleche +035691:Baerenklau +04464:Wittmund-Carolinensi +06356:Carlsberg Pfalz +09428:Kirchroth +09542:Schesslitz +09733:Muennerstadt +02594:Duelmen +02904:Bestwig +033983:Gross Pankow +035476:Wittmannsdorf +038223:Saal +038847:Boizenburg +04486:Edewecht-Friedrichsf +04791:Osterholz-Scharmbeck +08057:Sachrang Chiemgau +08171:Wolfratshausen +03425:Wurzen +06569:Bickendorf +06683:Ehrenberg Rhoen +06802:Voelklingen-Lauterbac +09946:Hohenwarth b Koetztin +033768:Prieros +034605:Groebers +038425:Kirchdorf +05126:Algermissen +05431:Quakenbrueck +08384:Roethenbach Allgaeu +07132:Neckarsulm +07323:Gerstetten +03943:Wernigerode +02267:Wipperfuerth +02381:Hamm Westf +033364:Gross Ziethen +034921:Kemberg +038324:Velgast +05644:Willebadessen-Peckel +04159:Basthorst +04273:Kirchdorf b Sulingen +05835:Wahrenholz +07727:Voehrenbach +07841:Achern Baden +06165:Breuberg +09351:Gemuenden a Main +02408:Aachen-Kornelimuenste +02522:Oelde +035797:Schwepnitz +036331:Ilfeld +05857:Bleckede-Brackede +05971:Rheine +04295:Emtinghausen +04605:Medelby +07558:Illmensee +07672:St Blasien +06306:Trippstadt +06187:Nidderau Hess +06420:Lahntal +09564:Rodach +034926:Pretzsch +035696:Briesnig +08193:Geltendorf +08503:Neuhaus a Inn +04932:Norderney +03447:Altenburg +03561:Guben +06824:Ottweiler +09777:Ostheim v d Rhoen +038228:Dettmannsdorf-Koelzow +05453:Recke +036735:Probstzella +05148:Steinhorst Niedersachsen +05262:Extertal +05339:Gielde +07154:Kornwestheim +07345:Langenau Wuertt +03965:Burow +03774:Schwarzenberg +02331:Hagen +034742:Sylda-Harkerode +036652:Wurzbach +05284:Schwalenberg +05475:Bohmte-Hunteburg +08547:Osterhofen-Gergweis +04109:Tangstedt Bz Hamburg +04223:Ganderkesee-Bookholz +07176:Spraitbach +07367:Aalen Wuertt-Ebnat +08661:Grabenstaett Chiemsee +03987:Templin +0091:Indien +09182:Velburg +09373:Amorbach +038782:Reetz +02735:Neunkirchen Siegerland +033369:Oderberg +034206:Roetha +038461:Buetzow +039601:Friedland / Mecklenburg +039922:Dambeck +04550:Buehnsdorf +04627:Doerpstedt +04741:Nordholz b Bremerhaven +07389:Heroldstatt +08121:Markt Schwaben +06328:Elmstein +06442:Braunfels +06633:Homberg Ohm +09395:Homburg a Main +02948:Lippstadt-Rebbeke +036450:Kranichfeld +039821:Carpin +05071:Schwarmstedt +08029:Kreuth b Tegernsee +08143:Inning a Ammersee +0365:Gera +04954:Moormerland +08334:Groenenbach +03583:Zittau +06464:Angelburg Hess-Goenne +06655:Neuhof Kr Fulda +07835:Zell am Harmersbach +034325:Luettewitz-Dreissig +02779:Greifenstein Hess-Be +038466:Juergenshagen +039606:Glienke +05403:Bad Iburg +08165:Neufahrn b Freising +04976:Spiekeroog +09727:Marktsteinach +09841:Bad Windsheim +03724:Burgstaedt +06677:Neuenstein Hess +06868:Mettlach-Tuensdorf +02162:Viersen +05425:Borgholzhausen +02353:Halver +033084:Gutengermendorf +034224:Belgern +039202:Gross Ammensleben +04245:Neuenkirchen b Bassum +05807:Altenmedingen +05921:Nordhorn +07431:Albstadt-Ebingen +07622:Schopfheim +08683:Tittmoning +06251:Bensheim +0821:Augsburg +09209:Emtmannsberg +09323:Iphofen +02680:Muendersbach +02566:Legden +02871:Bocholt +034426:Kayna +036336:Klettenberg +039404:Ausleben +04267:Lauenbrueck +04381:Luetjenburg +04458:Wiefelstede-Spohle +04763:Gnarrenburg +05829:Wriedel +05943:Emlichheim +06159:Messel +06201:Weinheim Bergstr +09345:Kuelsheim Baden +09536:Kirchlauter +038787:Gloewen +02588:Harsewinkel-Greffen +02821:Kleve Niederrhein +034343:Regis-Breitingen +036253:Georgenthal +038484:Ventschow +039000:Beetzendorf +039321:Arneburg +039927:Nossentiner Huette +04289:Kirchtimke +05021:Nienburg Weser +03342:Neuenhagen +03533:Elsterwerda +05965:Klein Berssen +06295:Rosenberg Baden +06486:Katzenelnbogen +034242:Hohenpriessnitz +039826:Blankensee +05043:Lauenau +05234:Horn-Bad Meinberg +07971:Gaildorf +08378:Buchenberg b Kempten +08802:Huglfing +07126:Burladingen-Melching +07240:Pfinztal +09749:Oberbach Unterfranken +03860:Raben Steinfeld +03937:Osterburg +09132:Herzogenaurach +02375:Balve +05447:Lembruch +05561:Einbeck +034444:Luetzen +039422:Badersleben +05752:Auetal-Hattendorf +07453:Altensteig Wuertt +07644:Kenzingen +0055:Brasilien +007044:Kiew +06082:Schmitten Taunus-Nie +08633:Tuessling +08824:Oberau Loisach +09154:Pommelsbrunn +02325:Herne-Wanne-Eickel +02630:Muelheim-Kaerlich +033089:Himmelpfort +034361:Dahlen +039207:Colbitz +05583:Braunlage-Hohegeiss +04331:Rendsburg +04408:Hude Oldenburg +04522:Ploen +05774:Wagenfeld-Stroehen +07475:Burladingen +07666:Denzlingen +0511:Hannover +06109:Frankfurt am Main-Be +06223:Neckargemuend +09367:Unterpleichfeld +02843:Rheinberg +039409:Eilsleben +08306:Ronsberg +09481:Pfatter +09672:Neunburg vorm Wald +04735:Butjadingen-Stollham +04926:Krummhoern-Greetsiel +03364:Eisenhuettenstadt +06627:Nentershausen Hess +06741:St Goar +035602:Drebkau +05065:Sibbesse +036258:Friemar +036372:Kleinneuhausen +036693:Crossen (Krossen) +039005:Kusey +02303:Unna +034462:Laucha +039743:Zerrenthin +07071:Tuebingen +07148:Grossbottwar +03691:Eisenach +07262:Eppingen +00973:Bahrain +035822:Hagenwerder +039225:Altengrabow +05278:Hoexter-Ovenhausen +05702:Petershagen-Lahde +08846:Uffing a Staffelsee +02134:Dinslaken +04140:Estorf Kr Stade +07403:Dunningen Wuertt +0291:Meschede +03909:Kloetze +06032:Bad Nauheim +09176:Allersberg +02461:Juelich +02538:Drensteinfurt-Rinker +02652:Mendig +036074:Worbis +036377:Rastenberg +039427:Stroebeck +039748:Viereck +039862:Schmoelln / Prenzlau +04239:Doerverden-Westen +04353:Ascheffel +04544:Berkenthin +07807:Neuried Ortenaukreis +06245:Biblis +06436:Dornburg Westerw +06550:Irrhausen +08868:Schwabsoien +02865:Raesfeld +034348:Frohburg +034783:Gerbstedt +08137:Petershausen Oberbay +08251:Aichach +08328:Balderschwang +04757:Wanna +04871:Hohenwestedt +04948:Wiesmoor-Marcardsmoo +08442:Wolnzach +09198:Heiligenstadt Oberfr +03386:Premnitz +06763:Kirchberg Hunsrueck +06267:Fahrenbach Baden +06381:Kusel +06458:Rosenthal Hess +039243:Nedlitz +05206:Bielefeld-Joellenbeck +05320:Torfhaus Post Bad Ha +06572:Manderscheid Eifel +08082:Schwindegg +08273:Nordendorf +04779:Freiburg Elbe +04893:Hohenaspe +07021:Kirchheim unter Teck +08464:Dietfurt a d Altmuehl +09644:Pressath +03641:Jena +06594:Birresborn +06785:Herrstein +09104:Emskirchen +09835:Ehingen Mittelfr +02156:Willich-Anrath +034467:Eckartsberga +035607:Jaenschwalde +05533:Bodenwerder +05724:Obernkirchen +08677:Burghausen Salzach +04162:Jork Niederelbe +07234:Tiefenbronn +07425:Trossingen +00264:Namibia +00591:Bolivien +06054:Birstein +09126:Eckental +09431:Schwandorf +09622:Hirschau Oberpf +035827:Nieder Seifersdorf +05937:Geeste-Gross Hesepe +037434:Bobenneukirchen +02369:Dorsten-Wulfen +02674:Bad Bertrich +035203:Tharandt +04184:Hanstedt Nordheide +039344:Guesen +07943:Schoental Jagst +0201:Essen +06190:Hattersheim am Main +06500:Waldrach +07447:Baiersbronn-Schwarze +07561:Leutkirch im Allgaeu +02696:Nohn Eifel +035726:Gross Saerchen +039885:Jakobshagen +05768:Petershagen-Heimsen +05882:Gorleben +09148:Ettenstatt +04630:Barderup +04707:Langen b Bremerhaven +04821:Itzehoe +07774:Eigeltingen +07965:Ellwangen-Roehlingen +09262:Wallenfels +06408:Buseck +06522:Mettendorf +09339:Ippesheim +09453:Thalmassing Oberpf +035208:Radeburg +035322:Doberlug-Kirchhain +039349:Parey +05037:Bad Rehburg +05151:Hameln +05228:Vlotho-Exter +0711:Stuttgart +07043:Maulbronn +08295:Altenmuenster Schwab +09666:Illschwang +09857:Schopfloch Mittelfr +03663:Schleiz +09971:Cham Oberpf +039362:Grieben / Tangerhuette +05364:Velpke Niedersachs +05555:Moringen-Fredelsloh +05746:Roedinghausen +037755:Schoenheide +02292:Windeck Sieg +04303:Schlesen +02602:Montabaur +034384:Grossbothen +039248:Dobritz +07256:Philippsburg +03876:Perleberg +06004:Lich Hess-Eberstadt +09071:Dillingen a d Donau +02242:Hennef Sieg +02433:Hueckelhoven +02624:Hoehr-Grenzhausen +033834:Pritzerbe +035327:Priessen +05691:Arolsen +04134:Embsen Kr Lueneburg +07392:Laupheim +07583:Bad Schussenried +07702:Blumberg Baden +06026:Grossostheim +06331:Pirmasens +09284:Schwarzenbach a d Sa +037439:Jocketa +02646:Koenigsfeld Eifel +02837:Weeze +02951:Bueren +033733:Stuelpe +039481:Hedersleben +04652:List +04843:Vioel +0491:Leer Ostfriesland +08032:Rohrdorf Kr Rosenheim +08223:Ichenhausen +06544:Rhaunen Hunsrueck +06735:Eppelsheim Rheinhess +033632:Hangelsberg +039266:Foerderstedt +05173:uetze +08550:Philippsreut +08741:Vilsbiburg +02106:Dormagen +00350:Gibraltar +03685:Hildburghausen +03494:Wolfen +06757:Becherbach b Kirn Na +06871:Wadern +02051:Velbert +035024:Stadt Wehlen +05195:Neuenkirchen Lueneburg +05505:Hardegsen +08458:Gaimersheim +08572:Tann Niederbay +08649:Schleching +0063:Philippinien +09093:Polsingen +09403:Donaustauf +02264:Marienheide +02455:Waldfeucht +035244:Kroegis +05832:Hankensbuettel +05909:Wettrup +04156:Talkau +04347:Flintbek +04461:Jever +07724:St Georgen im Schwar +00967:Jemen(Arabische Republiken) +06162:Reinheim Odenwald +06239:Bobenheim-Roxheim +06353:Freinsheim +06048:Buedingen Hess-Eckart +033839:Wusterwitz +02859:Wesel-Bislich +02973:Eslohe Sauerland +05101:Pattensen +08054:Breitbrunn a Chiemse +08245:Tuerkheim Wertach +04674:Ockholm +04865:Osterhever +09497:Seubersdorf Oberpf +09921:Regen +06566:Koerperich Eifel +06375:Wallhalben +09447:Essing +09561:Coburg +033435:Rehfelde +033870:Zollchow +035363:Fermerswalde +036920:Grossenlupnitz +05123:Schellerten +08076:Pfaffing a d Attel +08267:Dirlewang +07959:Frankenhardt +08381:Lindenberg i Allgaeu +09638:Neualbenreuth +09829:Flachslanden +0214:Leverkusen +03635:Koelleda +06397:Leimen Pfalz +06588:Pluwig +06893:Saarbruecken-Ensheim +033334:Greiffenberg +033637:Beerfelde +036705:Oberweissbach +039082:Mieste +05336:Semmenstedt +05527:Duderstadt +05641:Warburg +07228:Forbach Baden +07533:Allensbach +08785:Rottenburg a d Laabe +09943:Lam Oberpf +03962:Penzlin +09965:St Englmar +09234:Neusorg +007812:Leningrad +033971:Kyritz +02591:Luedinghausen +033233:Ketzin +036604:Muenchenbernsdorf +05854:Bleckede-Barskamp +04602:Freienwill +04178:Radbruch +04292:Ritterhude +04483:Ovelgoenne Kr Wesermarsch +07746:Wutoeschingen +07937:Doerzbach +06184:Langenselbold +06303:Enkenbach-Alsenborn +07555:Deggenhausertal +08735:Gangkofen-Kollbach +02732:Kreuztal Westf +02923:Lippetal-Herzfeld +035249:Basslitz +036200:Elxleben +037291:Augustusburg +039087:Jerchel +04624:Kropp +05685:Knuellwald +07577:Veringenstadt +09256:Stammbach +06325:Lambrecht Pfalz +06630:Schwalmtal Hess-Stor +06707:Windesheim +06821:Neunkirchen Saar +033976:Wutike +033238:Senzke +033655:Grunow +05145:Beedenbostel +08331:Memmingen +09469:Neubaeu Oberpf +04951:Weener +07151:Waiblingen +0911:Nuernberg / Fuerth +09774:Oberelsbach +0027:Suedafrika +03771:Aue +03466:Artern +06843:Gersheim +02405:Wuerselen +05167:Walsrode-Westenholz +05281:Bad Pyrmont +05358:Bahrdorf-Mackendorf +05472:Bad Essen +05663:Spangenberg +036622:Triebes +036925:Marksuhl +04106:Quickborn Kr Pinneberg +07173:Heubach +07364:Oberkochen +03679:Neuhaus am Rennweg +03984:Prenzlau +00671:Guam +02045:Bottrop-Kirchhellen +02236:Wesseling Rheinl +02427:Nideggen +02541:Coesfeld +035267:Diesbar-Seusslitz +036842:Oberhof +038752:Zierzow +04128:Kollmar +04242:Syke +04433:Doetlingen +05494:Holdorf Niedersachs +05804:Raetzlingen Kr Uelzen +06134:Mainz-Kastel +07195:Winnenden +07386:Hayingen +07505:Fronreute +02449:Blankenheim Ahr +02563:Stadtlohn +02754:Bad Laasphe-Feudinge +02945:Lippstadt-Benninghau +033673:Weichensdorf +036741:Bad Blankenburg +04455:Jade-Schweiburg +04646:Mohrkirch +04837:Blankenmoor +08026:Hausham +09087:Marktoffingen +09278:Weidenberg +06347:Hochstadt Pfalz +06461:Biedenkopf +06652:Huenfeld +09392:Faulbach Unterfr +038853:Droennewitz +036943:Bettenhausen +037296:Stollberg +033875:Rhinow +033458:Falkenberg / Mark +036205:Graefenroda +04859:Windbergen +036640:Remptendorf +04973:Wittmund-Burhafe +08239:Langenneufnach +08544:Eging a See +03721:Meinersdorf +06865:Mettlach-Orscholz +06674:Friedewald Hess +09937:Oberpoering +033054:Liebenwalde +033678:Storkow +036425:Isserstedt +05231:Detmold +05308:Lehre +05422:Melle Wiehengeb +08375:Weitnau +07123:Metzingen Wuertt +03629:Stadtilm +06887:Schmelz Saar +09206:Obernsees +02181:Grevenbroich +02372:Hemer +036021:Schlotheim +038234:Born +038858:Lassahn +05635:Voehl +04264:Sottrum Kr Rotenburg +05826:Suderburg +07527:Wolfegg +07641:Emmendingen +07832:Haslach im Kinzigtal +09533:Untermerzbach +09724:Stadtlauringen +038757:Neustadt-Glewe +038871:Cramon +036961:Bad Liebenstein +02585:Warendorf-Hoetmar +02776:Bad Endbach-Hartenro +033476:Marxwalde +04477:Lastrup Kr Cloppenbu +04668:Klanxbuell +035386:Prettin +038454:Kritzkow +06483:Selters Taunus +09364:Zellingen +09555:Aschbach Oberfr +09746:Zeitlofs +033393:Gross Schoenebeck +038353:Guetzkow +08303:Waltenhofen +0381:Rostock +04499:Barssel +04923:Krummhoern-Pewsum +03361:Fuerstenwalde +06696:Gilserberg +036645:Muehltroff +036948:Roemhild +038876:Roggendorf +05139:Burgwedel +05253:Bad Driburg +05444:Wagenfeld +08707:Adlkofen +07145:Markgroeningen +07336:Lonsee +08821:Garmisch-Partenkirch +00507:Pakistan +03765:Reichenbach / Vogtland +09151:Hersbruck +09228:Thurnau +09342:Wertheim +036847:Steinbach-Hallenberg +05657:Meissner b Eschwege +05771:Rahden Westf +05848:Trebel +05962:Herzlake +02394:Neuenrade-Affeln +04286:Gyhum +04405:Edewecht +07663:Eichstetten +07854:Kehl-Goldscheuer +06292:Seckach +06220:Wilhelmsfeld +08652:Berchtesgaden +09173:Thalmaessing Mittelfr +02535:Sendenhorst-Alberslo +036026:Struth +036461:Bad Sulza +036764:Neuhaus-Schierschnitz +037601:Muelsen St. Jakob +038371:Karlshagen +039832:Wesenberg +04541:Ratzeburg +04732:Stadland-Rodenkirche +07685:Gutach im Breisgau +06433:Hadamar Westerw +06624:Heringen Werra +09386:Pressath +036966:Kaltennordheim +038459:Laage +05062:Holle b Hildesheim +08134:Odelzhausen +08325:Oberstaufen-Thalkirchen +08630:Oberneukirchen Oberbay +0345:Halle +04945:Grossefehn-Timmel +03574:Lauchhammer +06837:Wallerfangen +02131:Neuss +02208:Niederkassel +034652:Allstedt +034955:Gossa +038793:Dergenthin +039933:Vollrathsruhe +05084:Hambuehren +05275:Hoexter-Ottbergen +05466:Merzen +07358:Eberhardzell +07472:Rottenburg am Neckar +08538:Pocking-Hartkirchen +06106:Rodgau +09101:Langenzenn +036782:Schmiedefeld +04236:Kirchlinteln +07804:Oppenau +06128:Taunusstein +06051:Gelnhausen +06242:Osthofen Rheinhess +09195:Adelsdorf +02862:Suedlohn +034639:Wallendorf +09505:Litzendorf +04563:Haffkrug +04754:Buelkau +06455:Frankenau Hess +06646:Grebenau +033398:Werneuchen +08347:Friesenried +08461:Beilngries +04967:Rhauderfehn-Burlage +03596:Neustadt / Sachsen +06668:Birstein-Lichenroth +02153:Nettetal-Lobberich +05607:Fuldatal +05721:Stadthagen +0070172:Minsk +07308:Nersingen +07422:Schramberg +02366:Herten Westf +02557:Wettringen Kr Steinf +02671:Cochem +034771:Querfurt +05934:Haren Ems-Ruetenbrock +04258:Schwarme +04372:Westfehmarn +07826:Schuttertal +07940:Kuenzelsau +06264:Neudenau +09832:Wassertruedingen +037606:Lengenfeld / Vogtland +05203:Werther Westf +038376:Zirchow +034973:Osternienburg +039951:Faulenrost +04776:Osten Oste-Altendorf +00261:Madagaskar +06782:Birkenfeld Nahe +06477:Greifenstein Hess-Ne +06591:Gerolstein +09854:Wittelshofen +037202:Claussnitz +038293:Kuehlungsborn +05034:Neustadt am Ruebenberg +05225:Spenge +08178:Icking Isartal +08292:Dinkelscherben +08369:Rueckholz +07231:Pforzheim +03546:Luebben +03737:Rochlitz +03928:Schoenebeck +0581:Uelzen +09009:Kaisheim +02175:Leichlingen Rheinlan +05438:Bakum Kr Vechta-Luesc +05552:Katlenburg +05743:Espelkamp-Gestringen +09123:Lauf a d Pegnitz +04181:Buchholz in der Nord +07444:Alpirsbach +07635:Schliengen +06073:Babenhausen Hess +09336:Buetthard +09527:Knetzgau +09641:Grafenwoehr +02693:Antweiler +05956:Rastdorf Huemmling +02388:Hamm Westf-uentrop +036484:Knau +0340:Dessau +04394:Bokhorst +04704:Drangstedt +07962:Fichtenau +06286:Wallduern-Rippberg +06405:Laubach Hess +09358:Goessenheim +09472:Hohenfels Oberpf +02834:Straelen +033703:Sperenberg +034776:Rothenschirmbach +039451:Wasserleben +039754:Loecknitz +05978:Hoerstel-Dreierwalde +08106:Vaterstetten +09549:Trabelsdorf +09663:Neukirchen b Sulzbach +06732:Woerrstadt +06809:Grossrosseln +09876:Rohr Mittelfr +037422:Markneukirchen +02103:Hilden +034978:Radegast +039956:Neukalen +05056:Winsen-Meissendorf +05247:Harsewinkel +05361:Wolfsburg +07062:Beilstein Wuertt +07139:Neuenstadt am Kocher +07253:Bad Schoenborn +08624:Obing +03682:Zella-Mehlis +09145:Solnhofen +02507:Havixbeck +05574:Oberweser Hess +05765:Raddestorf +02621:Lahnstein +037207:Hainichen +037321:Frankenstein +039855:Weggun +04208:Grasberg +04322:Bordesholm +07466:Beuron +07657:Eisenbach Hochschwar +07771:Stockach +06095:Bessenbach +09167:Oberscheinfeld +09281:Hof Saale +02338:Breckerfeld +02452:Heinsberg Rheinl +02529:Oelde-Stromberg +02643:Altenahr +034491:Schmoelln / Leipzig +035934:Grossdubrau +039034:Fleetmark +039772:Rothemuehl +04344:Schoenberg Holstein +04535:Nahe +05906:Luenne +00964:Irak +06236:Neuhofen Pfalz +06427:Coelbe-Schoenstadt +06541:Traben-Trarbach +09189:Sindlbach +037326:Frauenstein +033923:Flecken Zechlin +02856:Hamminkeln-Bruenen +02970:Eslohe Sauerland-Cob +033602:Alt Zeschdorf +08433:Koenigsmoos +04748:Stubben b Bremerhave +04862:Garding +04939:Baltrum +09804:Aurach +0030:Griechenland +03377:Zossen +03491:Wittenberg +06754:Martinstein +036085:Reinholterode +05383:Lutter am Barenberge +05502:Dransfeld +05192:Munster Kr Soltau +04131:Lueneburg +07084:Schoemberg b Neuenbuer +07275:Kandel Pfalz +0271:Siegen +06023:Alzenau Unterfr +06776:Dachsenhausen Taunus +08073:Gars a Inn +09635:Baernau +02261:Gummersbach +033607:Briesen / Mark +035952:Grossroehrsdorf +039052:Erxleben +05524:Bad Lauterberg im Ha +08591:Obernzell +04153:Lauenburg Elbe +07225:Gaggenau +07721:Villingen-Schwenning +08782:Pfeffenhausen +09826:Weidenbach Mittelfr +00255:Tansania +06045:Gedern +09231:Marktredwitz +09422:Bogen Niederbay +02474:Nideggen-Schmidt +05851:Dahlenburg +033203:Kleinmachnow +037344:Crottendorf +039992:Goermin +08051:Prien a Chiemsee +04175:Egestorf Nordheide +04366:Groemitz-Cismar +04480:Ovelgoenne Kr Wesermarsch +04557:Blunk +04671:Bredstedt +07629:Tegernau Baden +06181:Hanau +06258:Gernsheim Rhein +06372:Bruchmuehlbach-Miesau +06449:Ehringshausen Dill-K +02992:Marsberg +033708:Rangsdorf +035939:Pommritz +039039:Bonese +039456:Altenbrak +039777:Borckenfriede +04884:Schwabstedt +06563:Kyllburg +07203:Walzbachtal +07743:uehlingen-Birkendorf +07934:Weikersheim +03632:Sondershausen +06585:Ralingen a d Sauer +06394:Wieslautern +06704:Langenlonsheim +09657:Waldthurn +033928:Wildberg / Neustadt +037463:Bergen / Auerbach +038300:Vitte +039997:Jarmen +05028:Pennigsehl +05142:Eschede +05333:Dettum +07034:Ehningen Kr Boeblinge +08095:Aying +08405:Stammham b Ingolstad +09771:Bad Neustadt +09848:Simmershofen +09962:Schwarzach Niederbay +02402:Stolberg Rheinl +05355:Frellstedt +05546:Scheden +034294:Rackwitz +035434:Altdoebern +035755:Ortrand +037362:Seiffen +04103:Wedel Holstein +07247:Linkenheim-Hochstett +07361:Aalen Wuertt +07552:Pfullendorf Baden +03867:Luebstorf +03981:Neustrelitz +0781:Offenburg +08809:Wessobrunn +09253:Weissenstadt +02687:Horhausen Westerwald +05873:Eimke +034496:Noebdenitz +039057:Raetzlingen +09444:Siegenburg +00299:Groenland +04621:Schleswig +07765:Rickenbach Hotzenw +03441:Zeitz +03327:Werder +06322:Bad Duerkheim +09275:Speichersdorf +09466:Stamsried +02637:Weissenthurm Rhein +02751:Bad Berleburg +02828:Emmerich-Elten +02942:Geseke +033208:Fahrland +034299:Gaschwitz +035439:Zinnitz +035874:Bernstadt +037349:Scheibenberg +039391:Lueckstedt +04529:Bujendorf +04643:Gelting Angeln +04834:Buesum +06535:Osann-Monzel +06726:Lorch Rheingau +08023:Bayrischzell +033845:Borkheide +05164:Hodenhagen +035452:Golssen +035773:Schleife +038823:Selmsdorf +08427:Wellheim +08541:Vilshofen Niederbay +07056:Gechingen Kr Calw +08732:Frontenhausen +0048:Polen +02424:Vettweiss +02233:Huerth Rheinl +033744:Hohenseefeld +035975:Hohnstein +038722:Raduhn +05377:Ehra-Lessien +04125:Seestermuehe +05491:Damme Duemmer +05682:Borken Hessen +07269:Sulzfeld Baden +07383:Muensingen Wuertt-Butt +07574:Gammertingen +06131:Mainz +09203:Neudrossenfeld +038204:Broderstorf +02255:Euskirchen-Flamershe +02446:Heimbach Eifel +033964:Fretzdorf +035892:Horka +037367:Lengefeld +038828:Schoenberg +039295:Zuchau +04261:Rotenburg Wuemme +04338:Alt Duvenstedt +04452:Zetel-Neuenburg +0471:Bremerhaven +05823:Bienenbuettel +06039:Karben +06344:Schwegenheim +07906:Braunsbach +02773:Haiger +02964:Brilon-Alme +035053:Glashuette +038841:Neuhaus / Elbe +08045:Lenggries-Fall +08236:Fischach Schwab +04856:Kronprinzenkoog +04665:Emmelsbuell-Horsbuell +09607:Luhe-Wildenau +09721:Schweinfurt +06557:Hallschlag +037468:Treuen +05186:Salzhemmendorf-Wallensen +033762:Zeuthen +038305:Gingst +039396:Neukirchen +05305:Sickte +08563:Birnbach Rottal +07192:Murrhardt +07502:Wolpertswende +08754:Volkenschwand +03931:Stendal +09956:Aufhausen b Landau a +02064:Dinslaken +05441:Diepholz +05632:Willingen Upland +033982:Hoppenrade / Pritzwalk +035475:Straupitz +038222:Semlow +05327:Bad Grund Harz +07142:Bietigheim-Bissingen +07333:Laichingen +07524:Bad Waldsee +08394:Lautrach +08585:Grainet +040:Hamburg +09225:Stadtsteinach +038424:Bobitz +02391:Plettenberg +02582:Everswinkel +033767:Friedersdorf +034907:Jeber-Bergfrieden +038727:Mestlin +04169:Sauensiek +04283:Tarmstedt +04474:Garrel +05845:Bergen Dumme +07546:Oberteuringen +07660:St Peter Schwarzw +06175:Friedrichsdorf Taunu +07851:Kehl +09438:Freihoels +09552:Burghaslach +038323:Prohn +033969:Stepenitz +034920:Kropstaedt +038209:Sanitz +08067:Tuntenhausen +08258:Sielenbach +08372:Oberguenzburg +0981:Ansbach +0043:Oesterreich +03435:Oschatz +06693:Neuental +06507:Neumagen-Dhron +06621:Bad Hersfeld +09574:Marktzeuln +038429:Glasin +035058:Pretzschendorf +035796:Panschwitz-Kuckau +036330:Grossberndten +05136:Burgdorf Kr Hannover +05250:Delbrueck Westf +04828:Laegerdorf +04942:Suedbrookmerland +08208:Eurasburg b Friedber +08322:Oberstdorf +08704:Pfettrach Niederbay +03571:Hoyerswerda +03762:Crimmitschau +06834:Bous +09765:Trappstadt +09978:Schoenthal Oberpf +02205:Roesrath +05654:Herleshausen +034604:Niemberg +034925:Bad Schmiedeberg +035695:Simmersdorf +038328:Miltzow +04402:Rastede +05158:Hessisch Oldendorf-H +05272:Brakel Westf +07164:Boll Kr Goeppingen +07355:Hochdorf Riss +08726:Schoenau Niederbay +06103:Langen in Hessen +09170:Schwand b Nuernberg +00504:Honduras +02723:Kirchhundem +033363:Altenhof +036734:Leutenberg +038227:Luedershagen +05676:Liebenau Hess +04496:Friesoythe-Markhause +04806:Sarzbuettel +04920:Wirdum Ostfriesl +07568:Bad Wurzach-Hauerz +07682:Elzach +06430:Hahnstaetten +09192:Graefenberg +09269:Tettau +09383:Wiesentheid +02554:Laer Kr Steinfurt +02745:Brachbach Sieg +034609:Salzmuende +036651:Lobenstein +08131:Dachau +09502:Frensdorf +04446:Bakum Kr Vechta +0671:Bad Kreuznach +04637:Sterup +04751:Otterndorf Niederelbe +06643:Herbstein +06338:Hornbach Pfalz +06452:Battenberg Eder +09906:Mariaposching +02958:Bueren-Harth +033368:Hohensaaten +034205:Markranstaedt +039600:Zwiedorf +08344:Westendorf b Kaufbeu +08535:Haarbach +04964:Rhede Ems +06856:St Wendel-Niederkirc +02150:Meerbusch-Lank +02227:Bornheim Rheinl-Mert +02532:Ostbevern +05294:Hoevelhof-Espeln +05485:Ladbergen +05604:Grossalmerode +04233:Blender +08862:Steingaden Oberbay +0092:Pakistan +00662:Bangkok +00853:Macau +09006:Mertingen +09120:Leinburg +034324:Ostrau / Sachsen +02058:Wuelfrath +02363:Datteln +034741:Frose +039605:Gross Nemerow +05626:Zwesten +04255:Martfeld +05931:Meppen +07632:Badenweiler +07709:Wutach +07823:Seelbach Schutter +06147:Trebur +06261:Mosbach Baden +09524:Zeil a Main +036739:Rottenbach +036871:Heldburg +038781:Mellen +039921:Ankershagen +08039:Rott a Inn +08153:Wessling Oberbay +04468:Friedeburg Ostfriesl +04773:Lamstedt +03521:Meissen +06665:Sinntal-Altengronau +06474:Villmar +09928:Kirchdorf i Wald +034425:Droyssig +036335:Grosswechsungen +039820:Triepkendorf +05108:Gehrden Han +05222:Bad Salzuflen +069:Frankfurt am Main +08366:Oy-Mittelberg +07305:Erbach Donau +08557:Mauth +08671:Altoetting +00357:Zypern +03925:Stassfurt +09873:Wassermungenau +034342:Neukieritzsch +036252:Tambach-Dietharz +038483:Brueel +039926:Grabowhoefe +05244:Rietberg +05435:Berge b Quakenbrueck +08388:Hergensweiler +07136:Bad Friedrichshall +07250:Kraichtal +07327:Dischingen +07441:Freudenstadt +03947:Thale +0056:Bulgarien +09142:Treuchtlingen +09333:Sommerhausen +034223:Dommitzsch +02385:Hamm Westf-Rhynern +02504:Telgte +033083:Schulzendorf +036454:Magdala +039201:Wolmirstedt +039825:Wokuhl +04277:Schwafoerden +05648:Brakel Westf-Gehrden +05839:Wittingen-Ohrdorf +05953:Boerger +07654:Loeffingen +06092:Heimbuchenthal +06283:Hardheim Odenw +06402:Hungen +09355:Frammersbach +039724:Klein Buenzow +05031:Wunstorf +02598:Senden Westf-Ottmars +034443:Teuchern +034746:Giersleben +039403:Groeningen +04795:Osterholz-Scharmbeck +0361:Erfurt +09546:Burgebrach +09737:Schwaerzelbach +09851:Dinkelsbuehl +06806:Heusweiler +05975:Rheine-Mesum +06233:Frankenthal Pfalz +06424:Ebsdorfergrund +033088:Falkenthal +036459:Blankenhain +039206:Eichenbarleben +039320:Schinne +05053:Fassberg-Mueden +07485:Empfingen +04936:Grossheide +07676:Feldberg Schwarzwald +08507:Dommelstadl +08621:Trostberg +09377:Freudenberg-Boxtal +09491:Hemau +06637:Feldatal +06751:Sobernheim +09568:Neustadt b Coburg +09682:Erbendorf +034241:Jesewitz +039408:Hadmersleben +05266:Lemgo-Kirchheide +05457:Hopsten-Schale +05571:Uslar +04205:Ottersberg +07081:Wildbad im Schwarzwa +07158:Neuhausen auf den Fildern +07272:Ruelzheim +07463:Muehlheim an der Dona +03969:Siedenbollentin +06020:Heigenbruecken +09164:Langenfeld Mittelfr +039742:Bruessow +036257:Luisenthal +036371:Schlossvippach +039004:Koeckte +02526:Sendenhorst +02831:Geldern +04532:Bargteheide +04609:Eggebek +04723:Cuxhaven-Altenwalde +034461:Nebra +035601:Peitz +039421:Osterwieck +05593:Bovenden-Lenglern +09186:Lauterhofen Oberpf +02739:Wilnsdorf +02853:Schermbeck +04554:Wahlstedt +04745:Bederkesa +06446:Hohenahr +0871:Landshut +039426:Hessen +08338:Boehen +08452:Geisenfeld +0051:Peru +04958:Jemgum +036692:Buergel +05903:Emsbueren +038488:Demen +02335:Wetter Ruhr +034347:Oelzschau +08856:Penzberg +06042:Buedingen Hess +09305:Estenfeld +02357:Herscheid Westf +05925:Wietmarschen +02471:Roetgen Eifel +02548:Duelmen-Rorup +02662:Hachenburg +039224:Bueden +04249:Bassum-Nordwohlde +04363:Lensahn +07931:Bad Mergentheim +007:Russland, UdSSR +03302:Hennigsdorf +06255:Lindenfels Odenw +09823:Leutershausen +036376:Straussfurt +039861:Gramzow +08261:Mindelheim +04767:Bremervoerde-Bevern +04881:Friedrichstadt Eider +06659:Eichenzell +06773:Kamp-Bornhofen Rhein +034782:Mansfeld +039325:Vinzelberg +05407:Wallenhorst +05521:Herzberg am Harz +08665:Inzell +089:Muenchen +02166:Moenchengladbach-Rhey +039242:Proedel +05429:Melle Wiehengeb-Well +05543:Staufenberg Niedersa +05734:Bad Oeynhausen-Bergk +08687:Tengling +04172:Salzhausen Lueneburge +07435:Albstadt-Laufen +07626:Kandern +00678:Vanuatu +09441:Kelheim +09632:Waldsassen +02684:Puderbach Westerw +05947:Laar Vechte +02379:Menden Sauerland-Asb +02803:Wesel-Buederich +034466:Janisroda +035606:Briesen / Cottbus +039009:Badel +039747:Zuesedom +04385:Hohenfelde b Kiel +07839:Bad Rippoldsau-Schap +07953:Blaufelden +0202:Wuppertal +06391:Dahn +06468:Dautphetal-Mornshaus +06582:Freudenburg +06701:Sprendlingen Rheinhe +035202:Klingenberg +039343:Jerichow +05025:Estorf Weser +08283:Neuburg a d Kammel +09845:Oberdachstetten +08169:Hallbergmoos +07031:Boeblingen +07222:Rastatt +03537:Jessen +06723:Oestrich-Winkel +09867:Geslau +035725:Wittichenau +05161:Walsrode +05238:Nieheim-Himmighausen +05352:Schoeningen +08806:Utting a Ammersee +07053:Bad Teinach-Zavelste +07244:Weingarten Baden +02307:Kamen Westf +02421:Dueren +05565:Einbeck-Wenzen +04194:Sievershuetten +04504:Pansdorf Holst +07457:Rottenburg am Neckar +07571:Sigmaringen +07762:Wehr Baden +06205:Hockenheim +06086:Graevenwiesbach +09349:Werbach-Wenkheim +09463:Rossbach Oberpf +037433:Gutenfuerst +037754:Zwoenitz +039361:Luederitz +02825:uedem +034383:Trebsen +035826:Koenigshain +08092:Grafing b Muenchen +07975:Abtsgmuend-Untergroeni +08402:Muenchsmuenster +09654:Pleystein +03346:Seelow +0561:Kassel +06341:Landau in der Pfalz +06532:Zeltingen-Rachtig +09294:Regnitzlosau +02961:Brilon +033833:Wollin +039884:Hassleben +08042:Lenggries +08233:Kissing +08424:Nassenfels +04853:St Michaelisdonn +09676:Winklarn +03601:Muehlhausen +06745:Gondershausen Hunsrue +039348:Klitsche +033732:Hennickendorf +035207:Moritzburg +037438:Bad Brambach +05069:Nordstemmen +05183:Lamspringe +04122:uetersen +05374:Isenbuettel +07266:Kirchardt +08446:Poernbach +08637:Lohkirchen +03695:Bad Salzungen +03886:Gadebusch +08751:Mainburg +09081:Noerdlingen +09158:Offenhausen Mittelfr +039247:Gueterglueck +02443:Mechernich +02634:Rengsdorf Kr Neuwied +033631:Bad Saarow-Pieskow +035844:Oybin +08020:Weyarn +04526:Ascheberg Holstein +04335:Hohn b Rendsburg +07903:Mainhardt +09272:Fichtelberg +06227:Walldorf Baden +06150:Weiterstadt +09222:Presseck +09604:Wernberg-Koeblitz +02465:Inden b Juelich +02656:Baar Eifel +02770:Eschenburg +035023:Bad Gottleuba +035326:Schoenborn +05842:Schnega +04166:Ahlerstedt +04357:Sehestedt Eider +04471:Cloppenburg +04662:Leck +07734:Gailingen +06058:Gruendau +06172:Bad Homburg v d Hoehe +06249:Guntersblum +06363:Niederkirchen Kr Kaiserslautern +02678:Buechel b Cochem +02983:Winterberg Westf-Sie +039366:Kehnert +05302:Vechelde +06554:Waxweiler +08064:Au b Bad Aibling +04684:Langeness Hallig +04875:Stafstedt b Rendsbur +09626:Hohenburg +09931:Plattling +0251:Muenster +03623:Friedrichroda +06881:Lebach +039265:Loederburg +05820:Suhlendorf +02252:Zuelpich +039889:Boitzenburg +05324:Vienenburg +05706:Porta Westfalica +04144:Himmelpforten Nieder +08468:Pondorf b Riedenburg +08582:Roehrnbach +08773:Neufahrn Niederbay +0064:Neuseeland +06036:Woelfersheim +02274:Elsdorf Rheinl +033434:Herzfelde +039485:Gernrode +05346:Liebenburg +05651:Eschwege +0761:Freiburg im Breisgau +07352:Ochsenhausen +07429:Egesheim +07543:Kressbronn am Bodens +00595:Paraguay +09244:Betzenstein +09435:Schwarzenfeld +039081:Kakerbeck +05864:Jameln Han +02296:Reichshof-Bruechermuehle +033333:Tantow +033636:Steinhoefel +035243:Weinboehla +036704:Steinheid +039384:Arendsee +04188:Welle Nordheide +04493:Friesoythe-Gehlenber +04803:Pahlen +07947:Forchtenberg +06385:Reichenbach-Steegen +06504:Thalfang +09648:Neustadt a Kulm +09762:Saal a d Saale +033232:Brieselang +033838:aewesin +033970:Neustadt / Dosse +035028:Krippen +08086:Buchbach Oberbay +09953:Pilsting +07025:Neuffen +00268:Swasiland +03836:Wolgast +06789:Heimbach Nahe +06831:Saarlouis +09975:Geigant +02202:Bergisch Gladbach +033452:Neulewin +035248:Schoenfeld +035362:Schoenewalde +038733:Karbow +039086:Jaevenitz +05155:Emmerthal +07161:Goeppingen +08532:Griesbach i Rottal +08723:Arnstorf +03476:Hettstedt +02224:Bad Honnef +02606:Winningen Mosel +033654:Fuenfeichen +05368:Parsau +05482:Tecklenburg +05673:Immenhausen Hess +04230:Verden Aller-Walle +04307:Raisdorf +04421:Wilhelmshaven +07374:Uttenweiler +07565:Aichstetten b Leutki +03994:Malchin +06008:Echzell +06122:Hofheim am Taunus-Wa +09266:Mitwitz +09571:Lichtenfels Bay +036603:Weida +02628:Rhens +02742:Wissen Sieg +02933:Sundern Sauerland +036924:Mihla +08205:Dasing +04634:Husby b Flensburg +04825:Burg Dithmarschen +06526:Bollendorf +038738:Karow +05695:Twistetal +06144:Bischofsheim b Ruesselsheim +02764:Kirchhundem-Welschen +02955:Bueren-Wewelsburg +033338:Stolpe +033470:Lietzen +035266:Heyda +036841:Schleusingen +038751:Picher +04770:Wischhafen +04847:Ohrstedt +04961:Papenburg +06335:Trulben +07587:Hosskirch +06853:Marpingen +07706:Bad Duerrheim Schwarz +08036:Stephanskirchen Sims +08341:Kaufbeuren +033237:Paulinenaue +033672:Pfaffendorf +033975:Dannenwalde +036608:Seelingstedt +05177:Edemissen-Abbensen +05601:Schauenburg +08554:Schoenberg Niederbay +07183:Rudersberg Wuertt +07302:Pfaffenhofen a d Roth +08745:Bodenkirchen +09288:Bad Steben +09903:Schoellnach +00354:Island +09075:Gloett +038852:Wittenburg +0451:Luebeck +036204:Stotternheim +036621:Elsterberg +033439:Fredersdorf +02246:Lohmar Rheinland +04138:Betzendorf Kr Luenebu +04252:Bruchhausen-Vilsen +04329:Langwedel Holst +04443:Dinklage +02360:Haltern-Lippramsdorf +02551:Steinfurt-Burgsteinf +033874:Stechow +09407:Wenzenbach +09521:Hassfurt +02573:Nordwalde +033053:Zehlendorf +038334:Grammendorf +04465:Friedeburg Ostfriesl +06357:Standenbuehl +09734:Burkardroth +06471:Weilburg +09925:Bayerisch Eisenstein +02977:Schmallenberg-Boedefe +036929:Ruhla +038233:Prerow +05105:Barsinghausen +08249:Ettringen Wertach +08363:Pfronten +03731:Freiberg +06684:Hofbieber-Schwarzbac +06875:Nonnweiler-Primstal +09003:Harburg Schwaben +033457:Altreetz +05199:Schneverdingen-Heber +037295:Lugau +05509:Rosdorf +05623:Edertal +02268:Kuerten +02382:Ahlen Westf +033677:Glienicke +036424:Kahla +05836:Wittingen-Radenbeck +04274:Varrel b Sulingen +07651:Titisee-Neustadt +07728:Niedereschach +07842:Kappelrodeck +06166:Fischbachtal +09429:Rain Niederbay +09543:Hirschaid +033879:Schollene +036626:Auma +04487:Grossenkneten-Huntlos +04792:Worpswede +09947:Neukirchen b Hl Blut +035385:Annaburg +038756:Grabow +05432:Loeningen +08385:Hergatz +07133:Lauffen am Neckar +07324:Herbrechtingen +03944:Blankenburg +06897:Sulzbach Saar +03371:Luckenwalde +06825:Illingen Saar +02191:Remscheid +02501:Muenster-Hiltrup +038352:Kemnitz +05149:Wienhausen +05263:Barntrup +05454:Hoerstel-Riesenbeck +04202:Achim b Bremen +05645:Borgentreich-Borghol +07346:Illerkirchberg +0961:Weiden Oberpf +00589:Uruguay +03966:Coelpin +09161:Neustadt a d Aisch +09238:Roeslau +09352:Lohr a Main +02595:Olfen +02905:Bestwig-Ramsbeck +036020:Ebeleben +036209:Klettbach +036644:Hirschberg +036947:Juechsen +038875:Schlagsdorf +04296:Schwanewede-Aschward +04606:Wanderup +05858:Hitzacker-Wietzetze +07673:Schoenau im Schwarzwa +06188:Kahl a Main +06307:Schopp +06421:Marburg +06803:Mandelbachtal-Ommers +033475:Letschin +05241:Guetersloh +036846:Dietzhausen +038453:Mistorf +05127:Harsum +08194:Vilgertshofen +04933:Dornum Ostfriesl +08504:Tittling +09565:Untersiemau +03448:Meuselwitz +03562:Forst +06443:Ehringshausen Dill +06634:Gemuenden Felda +09778:Fladungen +036025:Koerner +037600:Neumark +038370:Kroeslin +05072:Neustadt am Ruebenberg +08335:Fellheim +08640:Reit im Winkl +04955:Westoverledingen +0228:Bonn +02409:Stolberg Rheinl-Gres +02332:Gevelsberg +02523:Wadersloh +036965:Stadtlengsfeld +038458:Zehna +05285:Bad Pyrmont-Kleinenb +04224:Gross Ippener +05476:Ostercappeln-Venne +07482:Horb am Neckar-Detti +09183:Burgthann +09374:Eschau +02545:Rosendahl-Darfeld +02736:Burbach Siegerl +02850:Rees-Haldern +02927:Bad Sassendorf-Neuen +034633:Braunsbedra +034954:Roitzsch +04551:Bad Segeberg +04742:Dorum b Bremerhaven +08122:Erding +06329:Weidenthal Pfalz +06252:Heppenheim Bergstrass +09396:Urspringen b Lohr a +09820:Lehrberg +02758:Bad Berleburg-Girkha +02872:Rhede Westf +036649:Gefell +039831:Feldberg +08144:Grafrath Amper +04764:Gnarrenburg-Klenkend +06656:Ebersburg +05404:Westerkappeln +08548:Sandbach Niederbay +08662:Siegsdorf Kr Traunst +09302:Rottendorf Unterfr +039932:Malchow +05808:Gerdau +05922:Bad Bentheim +038792:Lenzen +02354:Meinerzhagen +034651:Rossla +04246:Twistringen-Heiligen +0651:Trier +00866:China(Taiwan) +06138:Mommenheim Rheinhess +02681:Altenkirchen Westerw +02567:Ahaus-Alstaette +036043:Kirchheilingen +036781:Grossbreitenbach +03321:Nauen +06465:Breidenbach b Bieden +034638:Zoeschen +04977:Blomberg Ostfriesl +03725:Zschopau +06869:Merzig-Silwingen +05731:Bad Oeynhausen +038375:Koserow +033397:Wandlitz +02163:Schwalmtal +033094:Loewenberg +07623:Rheinfelden Baden +00675:Papua-Neuguinea +06061:Michelstadt +09133:Baiersdorf Mittelfr +09324:Dettelbach +038292:Kroepelin +05753:Auetal-Bernsen +05944:Hoogstede +04191:Kaltenkirchen Holst +04268:Boetersen +04382:Wangels +04501:Kastorf Holst +07645:Freiamt +07836:Schiltach +06274:Waldbrunn Odenw +06083:Weilrod +07950:Schnelldorf Mittelfr +09346:Gruensfeld +034656:Wallhausen +038797:Karstaedt +05022:Wietzen +08166:Allershausen Oberbay +09651:Vohenstrauss +09728:Wuelfershausen Unterf +0341:Leipzig +07972:Gschwend b Gaildorf +09842:Uffenheim +06296:Ahorn Baden +06678:Wildeck Hess-Hoenebac +037605:Hartenstein +038393:Binz +036465:Oberndorf +05235:Blomberg Lippe +05426:Glandorf +08379:Martinszell i Allgaeu +08684:Fridolfing +07127:Neckartenzlingen +07432:Albstadt-Tailfingen +08803:Peissenberg +03861:Plate +06742:Boppard +0036:Ungarn +02304:Schwerte +034775:Wippra +039753:Strasburg +05066:Sarstedt +05257:Hoevelhof +05371:Gifhorn +0395:Neubrandenburg +05448:Barver +05562:Dassel-Markoldendorf +07072:Gomaringen +07263:Waibstadt +03578:Kamenz +03883:Hagenow +06202:Schwetzingen +07454:Sulz am Neckar +08634:Garching a d Alz +02631:Neuwied +02822:Emmerich +034977:Quellendorf +037421:oelsnitz / Vogtland +039955:Juergenstorf +05584:Hattorf am Harz +04409:Westerstede-Ocholt +04523:Malente +05775:Diepenau +05966:Meppen-Apeldorn +07476:Bisingen b Hechingen +07667:Breisach am Rhein +06224:Sandhausen Baden +08825:Kruen +09155:Simmelsdorf +09482:Woerth a d Donau +037320:Mulda +036483:Ziegenrueck +039854:Kleptow +05044:Springe Deister-Elda +08230:Gablingen +08421:Eichstaett Bay +04927:Krummhoern-Loquard +09673:Tiefenbach Oberpf +00221:Senegal +06628:Oberaula +06551:Pruem +0851:Passau +02866:Dorsten-Rhade +033702:Wuensdorf +035933:Neschwitz +039033:Wallstawe +039771:Ueckermuende +08138:Schwabhausen b Dacha +04758:Nordleda +04872:Hanerau-Hademarschen +08252:Schrobenhausen +08443:Hohenwart Paar +0031:Niederlande +06764:Rheinboellen +02440:Nettersheim-Tondorf +033601:Podelzig +034692:Alsleben +037325:Niederbobritzsch +039973:Altkalen +05703:Hille +04141:Stade +04332:Hamdorf b Rendsburg +07404:Epfendorf +08656:Anger +08847:Obersoechering +02135:Duisburg-Rheinhausen +06033:Butzbach +09177:Heideck +038297:Moitin +02653:Kaisersesch +02462:Linnich +02844:Rheinberg-Orsoy +037206:Frankenberg +04354:Fleckeby +04545:Seedorf Kr Hzgt Lauenburg +04736:Butjadingen-Tossens +07808:Hohberg b Offenburg +00974:Katar +06246:Eich Rheinhess +09199:Kunreuth +02484:Mechernich-Eiserfey +02675:Ediger-Eller +033606:Muellrose +035951:Neukirch +039051:Calvoerde +08061:Bad Aibling +04681:Wyk auf Foehr +07944:Kupferzell +06268:Hueffenhardt +06382:Lauterecken +06573:Gillenfeld +09836:Cronheim +033922:Karwesee +039859:Fuerstenwerder +039991:Daberkow +05130:Wedemark +05207:Schloss Holte-Stukenbrock +05321:Goslar +08274:Buttenwiesen +07022:Nuertingen +08465:Kipfenberg +00265:Malawi +03528:Radeberg +06786:Kempfeld +09105:Grosshabersdorf +02157:Nettetal-Kaldenkirchen +05534:Eschershausen Kr Hol +05725:Lindhorst b Stadthag +02271:Bergheim Erft +036084:Heuthen +039455:Schierke +04163:Horneburg Niederelbe +07426:Gosheim Wuertt +07731:Singen Hohentwiel +08678:Marktl Inn +08869:Kinsau +06055:Freigericht +09127:Rosstal +09241:Pegnitz +007095:Moskau +02293:Nuembrecht +05556:Lindau Harz +02603:Bad Ems +033927:Linum +037462:Rothenkirchen +039978:Gross Roge +04185:Marxen Auetal +05861:Dannenberg Elbe +07448:Seewald +07562:Isny im Allgaeu +07753:Albbruck +06501:Konz +09263:Ludwigsstadt +09454:Aufhausen Oberpf +09645:Eschenbach Oberpf +037343:Joehstadt +02697:Blankenheim Ahr-Ahrh +033202:Toeplitz +034293:Naunhof +035433:Vetschau +08083:Isen +04708:Ringstedt +04822:Kellinghusen +07966:Unterschneidheim +08202:Althegnenberg +03337:Biesenthal +0541:Osnabrueck +06595:Dockweiler +09972:Waldmuenchen +034495:Dobitschen +035938:Grosspostwitz +039038:Henningen +039776:Hintersee +05152:Hessisch Oldendorf +08296:Villenbach +07044:Moensheim +07235:Unterreichenbach Kr +09149:Suffersheim +09285:Kirchenlamitz +02107:Neuss-Norf +033207:Gross Kreutz +034298:Taucha +037348:Oberwiesenthal +039390:Iden +039996:Toerpin +05174:Lahstedt +05365:Wolfsburg-Neindorf +07066:Bad Rappenau-Bonfeld +07257:Bruchsal-Untergromba +07371:Riedlingen Wuertt +08551:Freyung +03686:Eisfeld +03877:Wittenberge +03991:Waren +08628:Kienberg Oberbay +08742:Velden Vils +037361:Neuhausen +05692:Wolfhagen +033844:Brueck +02434:Wegberg +02625:Ochtendung +035451:Dahme +035754:Klettwitz +038822:Diedrichshagen +04326:Wankendorf +04631:Gluecksburg Ostsee +05769:Steyerberg-Voigtei +05883:Lemgow Niedersachs +06332:Zweibruecken +06409:Biebertal Hessen +06523:Holsthum +07393:Munderkingen +038721:Ziegendorf +033743:Bloensdorf +02838:Sonsbeck +02952:Ruethen +039056:Klueden +07584:Altshausen +04844:Pellworm +07775:Muehlingen Baden +08033:Oberaudorf +08224:Offingen Donau +09072:Lauingen Donau +03473:Aschersleben +06736:Bechenheim +09498:Laaber +09922:Zwiesel +035873:Herrnhut +08246:Waal Schwab +00237:Kamerun +0231:Dortmund +06758:Waldboeckelheim +06872:Losheim Saar +00351:Portugal +02129:Haan, Rheinland +02243:Eitorf +035772:Rietschen +05196:Wietzendorf +08764:Mauern Kr Freising +04135:Kirchgellersen +07703:Bonndorf im Schwarzw +06027:Stockstadt a Main +09094:Tagmersheim +09404:Nittendorf +035974:Hinterhermsdorf +02647:Kesseling +02761:Olpe Biggesee +037467:Klingenthal +04653:Hoernum Sylt +04462:Wittmund +04539:Westerau +06545:Blankenrath +06163:Hoechst i Odw +02974:Schmallenberg-Fredeb +033963:Wulfersdorf +035456:Terpt +037366:Ruebenau +038203:Bad Doberan +05102:Laatzen +08055:Halfing +06567:Oberkail +06681:Hilders +02052:Velbert-Langenberg +05506:Adelebsen +08459:Manching +08573:Ering +07321:Heidenheim an der Br +03941:Halberstadt +02265:Reichshof-Eckenhagen +05833:Brome Niedersachs +02456:Selfkant +034901:Rosslau +038304:Garz +04348:Schoenkirchen Holst +07725:Koenigsfeld im Schwar +04157:Guelzow Kr Hzgt Lauenburg +04271:Sulingen +00968:Oman +06049:Kefenrod +09235:Thierstein +09426:Oberschneiding +02592:Selm +02902:Warstein +033849:Wiesenburg +033981:Putlitz +035474:Schoenwalde +035891:Rothenburg +04484:Hude Oldenburg-Wuesti +037384:Wechselburg +038221:Marlow +038827:Kalkhorst +039294:Gross Rosenburg +03423:Eilenburg +04179:Winsen Luhe-Toennhaus +04293:Ottersberg-Fischerhude +04603:Havetoft +05855:Nahrendorf +033748:Treuenbrietzen +035052:Kipsdorf +038423:Bad Kleinen +038726:Spornitz +06185:Hammersbach Hess +07747:uehlingen-Birkendorf +07938:Mulfingen Jagst +07130:Loewenstein Wuertt +08191:Landsberg a Lech +08268:Tussenhausen +08382:Lindau Bodensee +03636:Greussen +03445:Naumburg +06589:Kell +06894:St Ingbert +08501:Thyrnau +038322:Richtenberg +039395:Wanzer +05337:Kissenbrueck +05451:Ibbenbueren +05528:Gieboldehausen +05642:Warburg-Scherfede +09639:Maehring +07229:Iffezheim +07343:Buch b Illertissen +07534:Reichenau Baden +09944:Miltach +03963:Woldegk +0044:Grossbritannien +02406:Herzogenrath +02520:Wadersloh-Diestedde +035057:Hermsdorf / Osterzgebirge +035795:Koenigsbrueck +038845:Kaarssen +05473:Ostercappeln +04107:Siek Kr Stormarn +04221:Delmenhorst +05664:Morschen +07365:Essingen Wuertt +07556:Uhldingen-Muehlhofen +0098:Iran +06304:Wolfstein Pfalz +09257:Zell Oberfr +09371:Miltenberg +09448:Herrnwahlthann +033766:Teupitz +02733:Hilchenbach +02924:Moehnesee +034603:Nauendorf +034906:Raguhn +035694:Gosda +038309:Trent +04625:Juebek +09562:Sonnefeld +06398:Vorderweidenthal +06631:Alsfeld +06708:Bad Muenster am Stein +09775:Schoenau a d Brend +036733:Kaulsdorf +05146:Wietze +033362:Liepe +033968:Meyenburg +038208:Kavelstorf +0741:Rottweil +09966:Wiesenfelden +07152:Leonberg Wuertt +03581:Goerlitz +03772:Schneeberg +06844:Blieskastel-Altheim +09279:Mistelgau +09393:Rothenfels Unterfr +034722:Preusslitz +038428:Hohenkirchen +05168:Walsrode-Stellichte +05282:Schieder +05401:Georgsmarienhuette +08545:Hofkirchen Bay +07174:Moegglingen +09180:Pyrbaum +02237:Kerpen Rheinl-Tuernic +05495:Neuenkirchen Oldenburg +05686:Schwarzenborn Knuell +05805:Oetzen +02351:Luedenscheid +02428:Niederzier +02542:Gescher +034924:Zahna +038327:Elmenhorst +04129:Haseldorf +04243:Twistringen +0431:Kiel +04434:Colnrade +06135:Bodenheim Rhein +06326:Deidesheim +06440:Ehringshausen Dill-K +02755:Bad Berleburg-Schwar +033986:Falkenhagen / Pritzwalk +038226:Dierhagen +07387:Hohenstein Wuertt +07578:Wald Hohenz +08027:Dietramszell +04952:Rhauderfehn +04761:Bremervoerde +04838:Tellingstedt +08141:Fuerstenfeldbruck +08332:Ottobeuren +09088:Moenchsdeggingen +06653:Burghaun +06271:Eberbach Baden +06348:Offenbach a d Queich +06462:Gladenbach +02777:Breitscheid Hess +034929:Straach +09534:Burgpreppach +09725:Poppenhausen Unterfr +04478:Cappeln Oldenburg +04974:Neuharlingersiel +03531:Finsterwalde +03722:Limbach-Oberfrohna +06484:Beselich +06675:Breitenbach a Herzbe +06866:Perl Saar-Nennig +033367:Friedrichswalde +034204:Schkeuditz +036738:Koenigsee +036870:Masserberg +038780:Lanz +05309:Lehre-Wendhausen +05423:Versmold +07124:Trochtelfingen Hohen +07506:Wangen im Allgaeu-Leu +07620:Schopfheim-Gersbach +08376:Sulzberg Allgaeu +03935:Tangerhuette +06888:Lebach-Steinbach +08681:Waging a See +09207:Koenigsfeld Oberfr +09321:Kitzingen +036334:Wolkramshausen +05827:Unterluess +02373:Menden Sauerland +02564:Vreden +05941:Neuenhaus Dinkel +09938:Moos Niederbay +04265:Fintel +04456:Varel Jadebusen-Altj +07528:Neukirch b Tettnang +07642:Endingen Kaiserstuhl +07833:Hornberg Schwarzwald +06157:Pfungstadt +09229:Mainleus +09343:Lauda-Koenigshofen +02395:Finnentrop-Roenkhause +02586:Beelen +038464:Bernitt +039604:Wildberg / Altentreptow +05849:Waddeweitz +05963:Bawinkel +04287:Heeslingen-Boitzen +04902:Jemgum-Ditzum +06293:Schefflenz +09747:Geroda +09861:Rothenburg ob der Tauber +033082:Menz +034222:Arzberg +039200:Gommern +05041:Springe Deister +05232:Lage +03744:Auerbach +06697:Willingshausen +02182:Grevenbroich-Kapelle +05636:Lichtenfels Hess-God +034424:Reuden +039402:Voelpke +05445:Drebber +07337:Nellingen Alb +07451:Horb am Neckar +09152:Rupprechtstegen +038785:Berge +05772:Espelkamp +039925:Wredenhagen +05658:Wehretal +04406:Berne Kr Wesermarsch +07664:Schallstadt +09556:Geiselwind +036453:Mellingen +08304:Wildpoldsried +04924:Moormerland-Oldersum +03362:Erkner +02301:Holzwickede +034745:Winningen +08822:Oberammergau +05254:Paderborn-Schloss Neuhaus +08708:Unterneuhausen +0057:Kolumbien +07146:Remseck am Neckar +0941:Regensburg +07260:Sinsheim-Hilsbach +00813:Tokio +02132:Meerbusch-Buederich +02323:Herne +033087:Bredereiche +034341:Geithain +036875:Streufdorf +038482:Warin +039205:Langenweddingen +05276:Marienmuenster +05467:Voltlage +07473:Moessingen +06107:Kelsterbach +06221:Heidelberg +09174:Hilpoltstein Mittelf +09365:Rimpar +02536:Muenster-Albachten +02841:Moers +039407:Seehausen / Boerde +039824:Hohenzieritz +04542:Moelln Kr Hzgt Lauenburg +04733:Butjadingen-Burhave +06434:Bad Camberg +06625:Niederaula +036370:Grossenehrich +05063:Bad Salzdetfurth +034328:Hartha +039723:Krien +08326:Fischen i Allgaeu +08631:Muehldorf a Inn +04946:Grossefehn-Bagband +0208:Oberhausen, Rheinland +06838:Saarwellingen +06647:Herbstein-Stockhause +06761:Simmern Hunsrueck +08135:Sulzemoos +036458:Bad Berka +039223:Theessen +039829:Blankenfoerde +05085:Burgdorf Kr Hannover +05204:Steinhagen Westf +08348:Bidingen Schwab +04968:Neulehe +08462:Berching +03907:Gardelegen +09102:Wilhermsdorf +02154:Willich +039425:Dingelstedt +039728:Medow +05608:Soehrewald +05722:Bueckeburg +04237:Kirchlinteln-Bending +04351:Eckernfoerde +0631:Kaiserslautern +07805:Appenweier +00971:Vereinigte Arabische Emirate +06052:Bad Orb +06129:Schlangenbad Taunus +06243:Monsheim Rheinhess +09196:Wiesenttal +039741:Jatznick +036256:Wechmar +036691:Eisenberg +039003:Juebar +02558:Horstmar +02672:Treis-Karden +04564:Schashagen +04755:Ihlienworth +02863:Velen +034346:Narsdorf +035600:Doebern +039324:Klaeden +06456:Haina Kloster +06265:Billigheim Baden +09337:Gaukoenigshofen +09451:Eggmuehl +02694:Wershofen +034263:Grosszschepa +035820:Zodel +08157:Feldafing +08271:Meitingen +09528:Donnersdorf +04777:Cadenberge +07963:Adelmannsfelden +09642:Kemnath Stadt +09833:Heidenheim Mittelfr +0203:Duisburg +03334:Eberswalde-Finow +03525:Riesa +06287:Limbach Baden +06478:Greifenstein Hess-Ul +034465:Bad Bibra +035605:Komptendorf +036072:Weissenborn-Luederode +036375:Kindelbrueck +039008:Kunrau +039746:Krackow +05226:Roedinghausen-Bruchmuehle +05531:Holzminden +06592:Daun +06669:Neuhof Kr Fulda-Haus +06783:Baumholder +07232:Koenigsbach-Stein +07309:Weissenhorn +07423:Oberndorf am Neckar +08179:Eurasburg b Wolfrats +08293:Welden b Augsburg +02367:Castrop-Rauxel-Henri +05744:Huellhorst +05935:Twist Emsl-Schoeningh +034364:Wermsdorf +034781:Greifenhagen +039342:Gladau +04182:Tostedt +07445:Pfalzgrafenweiler +07636:Muenstertal Schwarzwa +07941:oehringen +09855:Dentlein a Forst +06074:Roedermark +03874:Ludwigslust +07254:Waghaeusel +09146:Markt Berolzheim +02389:Werne +02508:Drensteinfurt +02622:Bendorf Rhein +035724:Lohsa +036077:Grossbodungen +039241:Leitzkau +04705:Wremen +05766:Loccum +05957:Lindern Oldenburg +07467:Neuhausen ob Eck +07581:Saulgau +09260:Wilhelmsthal Oberfr +06096:Wiesen Unterfr +06406:Lollar +09359:Wiesenfeld Unterfr +09473:Kallmuenz +039329:Moeringen +05035:Barsinghausen-Gross M +08221:Guenzburg +09664:Hahnbach +04841:Husum Nordsee +07041:Muehlacker +00212:Marokko +03661:Greiz +06733:Gau-Odernheim +037432:Pausa +05248:Langenberg Kr Gueters +05362:Wolfsburg-Fallersleb +05439:Bersenbrueck +05553:Kalefeld +02104:Mettmann +034382:Nerchau +035201:Langebrueck +035825:Kodersdorf +05171:Peine +07063:Bad Wimpfen +03683:Schmalkalden +06002:Ober-Moerlen +00234:Nigeria +02431:Erkelenz +039883:Gross Doelln +05193:Schneverdingen +05384:Seesen-Gross Rhueden +05503:Noerten-Hardenberg +08761:Moosburg a d Isar +04132:Amelinghausen +04209:Schwanewede +04323:Bornhoeved +07085:Enzkloesterle +07276:Herxheim bei Landau +06024:Schoellkrippen +09091:Monheim Schwab +09282:Naila +09401:Neutraubling +02339:Sprockhoevel-Hasslinghausen +02453:Heinsberg Rheinl-Ran +02644:Linz a Rhein +02835:Issum +035206:Kreischa +037437:Bad Elster +039347:Kade +04536:Steinhorst Kr Hzgt Lauenburg +05907:Geeste +00965:Kuwait +06237:Maxdorf Pfalz +06351:Eisenberg Pfalz +06428:Stadtallendorf +06542:Bullay +035843:Hirschfelde +02857:Rees-Mehr +02971:Schmallenberg-Dorlar +039246:Lindau +08243:Fuchstal +08434:Rennertshofen +04749:Schiffdorf-Geestensee +04863:St Peter-Ording +0375:Zwickau +09495:Breitenbrunn Oberpf +09805:Burgoberbach +03378:Ludwigsfelde +06755:Odernheim am Glan +06564:Neuerburg Eifel +09827:Lichtenau Mittelfr +09941:Koetzting +02993:Marsberg-Canstein +033832:Rogaesen +035022:Bad Schandau +035325:Rueckersdorf +05121:Hildesheim +08265:Pfaffenhausen Schwab +04885:Bergenhusen +07204:Malsch-Voelkersbach +08456:Lenting +00256:Uganda +02262:Wiehl +033731:Trebbin +039062:Bebertal +039365:Bellingen +05525:Walkenried +08669:Traunreut +04154:Trittau +07531:Konstanz +07722:Triberg im Schwarzwa +08783:Rohr Niederbay +06046:Ortenberg Hess +0831:Kempten Allgaeu +09423:Geiselhoering +033933:Lindow +02666:Freilingen Westerw +039264:Kroppenstedt +08052:Aschau i Chiemgau +04672:Langenhorn +04367:Grossenbrode +04481:Hatten Oldb-Sandkrug +04558:Todesfelde +07935:Schrozberg +03306:Gransee +06373:Waldmohr +06182:Seligenstadt +06301:Otterbach Pfalz +09254:Gefrees +02688:Kroppach +02921:Soest Westf +033433:Buckow +035343:Hirschfeld +039484:Harzgerode +08074:Schnaitsee +09445:Neustadt a d Donau +07957:Kressberg +09636:Peissenberg +03328:Teltow +0521:Bielefeld +06395:Muenchweiler a d Roda +06586:Beuren Hochwald +09658:Georgenberg +033332:Gartz +033635:Arensdorf +035242:Nossen +039080:Kalbe +039383:Sandau +05143:Winsen Aller +05334:Hornburg Kr Wolfenbue +07226:Buehl Baden-Sand +07340:Neenstetten +08592:Wegscheid Niederbay +09772:Bischofsheim a d Rhoe +09963:Konzell +0065:Singapur +09232:Wunsiedel +02403:Eschweiler Rheinl +05661:Melsungen +05852:Bleckede +033837:Brielow +039888:Lychen +04176:Marschacht +07553:Salem Baden +07744:Stuehlingen +06068:Beerfelden Odenw +08733:Mengkofen +02425:Nideggen-Embken +033451:Heckelberg +035247:Zehren +035361:Schlieben +038732:Gallin +039388:Goldbeck +04431:Wildeshausen +04508:Krummesse +04622:Taarstedt +05378:Sassenburg-Platendor +05492:Steinfeld Oldenburg +05683:Wabern Hess +05874:Soltendieck +06132:Ingelheim am Rhein +06209:Moerlenbach +06323:Edenkoben +036703:Graefenthal +02943:Erwitte +033653:Ziltendorf +07384:Schelklingen-Huetten +07575:Messkirch +08024:Holzkirchen Oberbay +04835:Albersdorf Holst +08406:Boehmfeld +09276:Bischofsgruen +09467:Michelsneukirchen +03464:Sangerhausen +06536:Kleinich +06650:Hosenfeld +06727:Gensingen +06841:Homburg Saar +036602:Ronneburg +033231:Pausin +035027:Weesenstein +039489:Strassberg +05165:Rethem Aller +05356:Helmstedt-Barmke +04104:Aumuehle b Hamburg +07171:Schwaebisch Gmuend +07248:Marxzell +07362:Bopfingen +08542:Ortenburg +03677:Ilmenau +03868:Rastow +02234:Frechen +033337:Altkuenkendorf +039085:Zichtau +05187:Delligsen +05802:Wrestedt +04126:Horst Holstein +04240:Syke-Heiligenfelde +07193:Sulzbach an der Murr +07503:Wilhelmsdorf Wuertt +09085:Alerheim +02638:Waldbreitbach +02752:Bad Laasphe +04453:Zetel +04644:Karby Schwansen +04339:Christiansholm +07907:Schwaebisch Hall-Sulz +06345:Albersweiler +033438:Altlandsberg +036923:Treffurt +08237:Aindling +0060:Malaysia +04857:Barlt +04971:Esens +00228:Togo +06672:Eiterfeld +03605:Leinefelde +02043:Gladbeck Westf +038750:Malliss +05306:Cremlingen +08564:Johanniskirchen +09204:Plankenfels +033671:Lieberose +02256:Mechernich-Satzvey +02447:Dahlem b Kall +02561:Ahaus +033236:Staaken +033974:Dessow +036607:Niederpoellnitz +04148:Drochtersen-Assel +04262:Visselhoevede +05824:Bodenteich +06154:Ober-Ramstadt Hess +09608:Kohlberg Oberpf +09722:Werneck +038851:Zarrenthin +02774:Dietzhoelztal +033873:Grosswudicke +08046:Bad Heilbrunn +04666:Ladelund +0211:Duesseldorf +06558:Buedesheim Eifel +09744:Detter +09935:Stephansposching +033052:Leegebruch +033979:Wusterhausen +035265:Glaubitz +036840:Trusetal +038333:Horst +08259:Schiltberg +08373:Altusried +07121:Reutlingen +03741:Plauen +06694:Neukirchen Knuellgeb +036625:Langenwetzendorf +02065:Duisburg-Rheinhausen +036928:Neuenhof +038232:Zingst +05328:Altenau Harz +05442:Barnstorf Kr Diephol +05633:Diemelsee +07334:Deggingen +07525:Aulendorf Wuertt +08586:Hauzenberg +09340:Koenigheim-Brehmen +09531:Ebern +038737:Ganzlin +036203:Vieselbach +033456:Wriezen +02392:Werdohl +02583:Sassenberg +035384:Steinsdorf / Falkenberg +04284:Selsingen +04475:Molbergen +036941:Wasungen +037294:Gruenhainichen +05846:Gartow Elbe +07738:Steisslingen +07852:Willstaett +09439:Kemnath b Fuhrn +09553:Ebrach Oberfr +02724:Finnentrop-Serkenrod +033676:Friedland / Beeskow +036423:Orlamuende +036744:Remda +038351:Mesekenhagen +04497:Barssel-Harkebruegge +04921:Emden +06198:Eppstein Taunus +06508:Hetzerath Mosel +06622:Bebra +09766:Grosswenkheim +033878:Nennhausen +05137:Seelze +05251:Paderborn +036208:Ermstedt +036643:Thimmendorf +036946:Reichenhausen +038856:Pritzier +05060:Bad Salzdetfurth-Bod +07143:Besigheim +0721:Karlsruhe +08395:Tannheim Wuertt +03763:Glauchau +08705:Altfraunhofen +00505:Nicaragua +036845:Gehlberg +033474:Neutrebbin +02206:Overath +033039:Gross Behnitz +038452:Lalendorf +038755:Eldena +04403:Bad Zwischenahn +05464:Alfhausen +05655:Wanfried +07356:Schemmerhofen +07661:Kirchzarten Breisgau +03976:Torgelow +06104:Heusenstamm +09171:Roth Mittelfr +02228:Remagen-Rolandseck +02533:Muenster-Nienberge +036024:Diedorf +036762:Steinach +05295:Lichtenau Westf +05677:Calden Hess +04234:Doerverden +04425:Wangerland-Hooksiel +07569:Isny im Allgaeu-Eisen +07683:Simonswald +07802:Oberkirch Baden +03998:Demmin +06126:Idstein +06431:Limburg a d Lahn +09193:Hoechstadt a d Aisch +09384:Schwanfeld +02937:Arnsberg-Oeventrop +033479:Kietz +035389:Holzdorf +036964:Dermbach +038874:Luetzow +08323:Immenstadt i Allgaeu +04638:Tarp +04752:Neuhaus Oste +04829:Wewelsfleth +04943:Grossefehn +09575:Weismain +03381:Brandenburg +06644:Grebenhain +06835:Beckingen +09907:Zenting +034632:Muecheln +05159:Coppenbruegge-Bispero +05273:Beverungen +036428:Stadtroda +05082:Langlingen Kr Celle +08345:Stoettwang +08536:Koesslarn +07165:Goeppingen-Hohenstauf +08650:Marktschellenberg +08727:Falkenberg Niederbay +08841:Murnau a Staffelsee +03594:Bischofswerda +03904:Haldensleben +06857:Namborn +02151:Krefeld +036648:Dittersdorf +05605:Kaufungen Hess +08558:Hohenau Niederbay +07420:Deisslingen Neckar +09503:Oberhaid Oberfr +02555:Schoeppingen +038457:Krakow +04447:Vechta-Langfoerden +04561:Neustadt in Holstein +07824:Schwanau +06262:Aglasterhausen +06339:Grosssteinhausen +06453:Gemuenden Wohra +039931:Roebel +05201:Halle Westf +034953:Graefenhainichen +038356:Behrenhoff +038791:Bad Wilsnack +04774:Hechthausen +04965:Surwold +06666:Freiensteinau +09929:Ruhmannsfelden +036042:Graefentonna +05223:Buende +08367:Rosshaupten Forggensee +07306:Voehringen Iller +00358:Finnland +09007:Marxheim +02364:Haltern Westf +034637:Frankleben +05741:Luebbecke Westf +05932:Haren Ems +04256:Hilgermissen +07633:Bad Krozingen +06071:Dieburg +09525:Koenigsberg i Bay +02691:Adenau +033396:Klosterfelde +04469:Wangerooge +03522:Grossenhain +06475:Weilmuenster-Wolfenha +06284:Mudau +06403:Linden Hessen +09547:Zapfendorf +02599:Ascheberg Westf-Herb +036969:Merkers +037200:Wittgensdorf +05032:Neustadt am Ruebenberg +05109:Ronnenberg +08176:Egling b Wolfratshau +04796:Osterholz-Scharmbeck +09661:Sulzbach-Rosenberg +09738:Rottershausen +09852:Feuchtwangen +00281:Lybien +03544:Luckau +03735:Marienberg +02173:Langenfeld Rheinland +038796:Viesecke +05245:Herzebrock-Clarholz +05436:Nortrup +08389:Weissensberg +07251:Bruchsal +07328:Koenigsbronn Wuertt +07442:Baiersbronn +00685:Samoa +03871:Parchim +09143:Pappenheim Mittelfr +09334:Giebelstadt +036464:Wormstedt +05763:Uchte +037604:Mosel +02195:Radevormwald +033093:Fuerstenberg +036029:Menteroda +04392:Nortorf b Neumuenster +04702:Sandstedt +038374:Lassan +05954:Lorup +07655:Feldberg Schwarzwald +03331:Angermuende +06093:Laufach +07464:Talheim Kr Tuttlinge +09165:Sugenheim +09356:Burgsinn +02527:Lippetal-Lippborg +02641:Bad Neuenahr-Ahrweil +02832:Kevelaer +034774:Roeblingen +05976:Salzbergen +08104:Sauerlach +04533:Reinfeld Holstein +04724:Cuxhaven-Luedingworth +06425:Rauschenberg Hess +09569:Sesslach +09683:Friedenfels +09874:Neuendettelsau +034673:Heldrungen +034976:Groebzig +037609:Wolkenburg +038379:Benz +039954:Stavenhagen-Reuterstadt +05054:Bergen Kr Celle-Suelz +08431:Neuburg a d Donau +08622:Peterskirchen Oberbay +0921:Bayreuth +02101:Neuss +03375:Koenigs Wusterhausen +00231:Liberia +02505:Altenberge Westf +05458:Hopsten +05572:Bodenfelde +036482:Triptis +036785:Graefinau-Angstedt +038392:Sassnitz +039853:Holzendorf +04206:Stuhr-Heiligenrode +04320:Heidmuehlen Holst +05381:Seesen +07159:Renningen +07273:Hagenbach Pfalz +06021:Aschaffenburg +02336:Schwelm +033701:Grossbeeren +035932:Guttau +039752:Blumenhagen +05594:Bovenden-Reyershause +05904:Lengerich Emsl +04151:Schwarzenbek +04342:Preetz Holst +0611:Wiesbaden +07486:Horb am Neckar-Althe +08857:Benediktbeuern +00962:Jordanien +06043:Nidda +06234:Mutterstadt +09187:Altdorf b Nuernberg +09378:Riedern Unterfr +02663:Westerburg Westerw +039972:Walkendorf +09492:Parsberg +09802:Katterbach +04555:Seedorf b Bad Segebe +04746:Hagen b Bremerhaven +03303:Birkenwerder +06447:Langgoens-Niederkleen +06561:Bitburg +06638:Schwalmtal Hess-Renz +06752:Kirn Nahe +038296:Rerik +05190:Soltau-Emmingen +08453:Reichertshofen Oberbay +04959:Dollart Ostfriesl +07082:Neuenbuerg Wuertt +03588:Niesky +03821:Ribnitz-Damgarten +06583:Palzem +06774:Kaub +09846:Ipsheim +039032:Mahlsdorf +039959:Dargun +05331:Wolfenbuettel +05522:Osterode am Harz +08284:Ziemetshausen +08666:Teisendorf +0391:Magdeburg +07032:Herrenberg +07223:Buehl Baden +03843:Guestrow +09306:Kist +09420:Gundhoering +02358:Meinerzhagen-Valbert +05926:Engden +02472:Monschau +033921:Zechlinerhuette +034691:Koennern +037324:Reinsberg +039858:Bietikow +04173:Wulfsen +04364:Dahme Holst +07436:Messstetten +07627:Steinen Kr Loerrach +07741:Waldshut-Tiengen (ON +06256:Lampertheim Hess-Huet +07932:Niederstetten Wuertt +09442:Riedenburg +09633:Mitterteich +039454:Elbingerode +02685:Flammersfeld +034779:Abberode +036083:Uder +08071:Wasserburg a Inn +08262:Mittelneufnach +04768:Hipstedt +04882:Lunden Holst +07954:Kirchberg an der Jag +09824:Dietenhofen +0032:Belgien +00679:Fidschi +06392:Hauenstein Pfalz +06206:Lampertheim Hess +09464:Walderbach +09655:Taennesberg +033605:Boossen +033926:Herzberg / Mark +037329:Grosshartmannsdorf +039050:Bartensleben +039977:Joerdenstorf +05026:Steimbke +04832:Meldorf +07976:Sulzbach-Laufen am K +08093:Glonn Kr Ebersberg O +08403:Pfoerring +03461:Merseburg +06724:Stromberg Hunsrueck +09868:Schillingsfuerst +033201:Gross Glienicke +034292:Brandis +037342:Cranzahl +05162:Fallingbostel +05353:Koenigslutter am Elm +05544:Reinhardshagen +04101:Pinneberg +07054:Wildberg Wuertt +07245:Durmersheim +08807:Diessen a Ammersee +03865:Holthusen +09251:Muenchberg +039037:Pretzier +05948:Itterbeck +039775:Ahlbeck / Torgelow +034494:Ehrenhain +02804:Xanten-Marienbaum +035937:Prischwitz +04195:Hartenholm +04505:Stockelsdorf-Curau +07458:Ebhausen +07572:Mengen Wuertt +07763:Murg Baden +06087:Waldems +09082:Oettingen i Bay +09273:Bad Berneck +02444:Schleiden Eifel-Gemuend +02635:Rheinbrohl +02826:Kranenburg Niederrhe +033206:Fichtenwalde +037347:Baerenstein +039995:Nossendorf +04336:Owschlag +04527:Bosau +04641:Suederbrarup +07904:Ilshofen +08021:Waakirchen +06228:Schoenau Odenw +06342:Schweigen-Rechtenbac +06533:Morbach Hunsrueck +09677:Oberviechtach-Pullen +02962:Olsberg +035753:Grossraeschen +037360:Olbernhau +039459:Hasselfelde +08234:Bobingen +0355:Cottbus +04854:Friedrichskoog Dithm +00225:Elfenbeinkueste +06746:Pfalzfeld +02308:Unna-Hemmerde +05375:Mueden Aller +02422:Kreuzau +035955:Pulsnitz +039055:Hoersingen +05184:Freden Leine +04123:Barmstedt +07267:Gemmingen Baden +07381:Muensingen Wuertt +08638:Waldkraiburg +08752:Au i d Hallertau +0081:Japan +09201:Gesees +02253:Bad Muenstereifel +033962:Heiligengrabe +034297:Liebertwolkwitz +035872:Neusalza-Spremberg +037365:Sayda +05707:Petershagen +05821:Bad Bevensen +07522:Wangen im Allgaeu +08774:Bayerbach b Ergoldsb +06151:Darmstadt +0811:Hallbergmoos +09295:Toepen +09605:Weiherhammer +02657:uersfeld +02771:Dillenburg +033843:Niemegk +035033:Rosenthal +035771:Bad Muskau +038821:Luedersdorf / Mecklenburg +04358:Loose b Eckernfoerde +04472:Lastrup Kr Cloppenbu +04663:Suederluegum +08043:Jachenau +06364:Nussbach Pfalz +06555:Bleialf +09932:Osterhofen +035973:Stolpen +05303:Wendeburg +02984:Hallenberg +033742:Oehna +038303:Sellin +038720:Grebbin +04876:Reher Holst +08370:Wiggensbach +08561:Pfarrkirchen Niederb +03624:Ohrdruf +06386:Altenkirchen Pfalz +06691:Schwalmstadt +09763:Sulzdorf a d Lederhe +033848:Raben +035455:Walddrehna +037383:Lunzenau +038202:Volkenshagen +038826:Dassow +039293:Dreileben +05325:Goslar-Hahnenklee +07026:Lenningen Wuertt +07331:Geislingen an der St +08392:Markt Rettenbach +08469:Burggriesbach +08583:Neureichenau +0591:Lingen Ems +06599:Weidenbach b Gerolst +08702:Woerth a d Isar +09223:Rugendorf +02275:Kerpen Rheinl-Buir +05652:Bad Sooden-Allendorf +033747:Marzahna +038422:Neukloster +038725:Gross Godems +05843:Wustrow Kr Luechow-Da +04167:Apensen +04281:Zeven +07544:Markdorf Baden +07735:oehningen Bodensee +09954:Simbach Niederbay +06059:Jossgrund +06173:Kronberg im Taunus +09245:Obertrubach +09436:Nittenau +033760:Muenchehofe +035877:Cunewalde +039394:Hohenberg-Krusemark +08065:Schoenau b Bad Aiblin +09627:Freudenberg Oberpf +09741:Bad Brueckenau +04494:Boesel b Friesoythe +04804:Nordhastedt +07948:oehringen-Ohrnberg +0045:Daenemark +00502:Guatemala +03433:Borna +06195:Kelkheim Taunus +05865:Gusborn +06123:Eltville am Rhein +06505:Kordel +02934:Sundern Sauerland-Al +035473:Neu Luebbenau +038220:Wustrow / Ostseebad +038844:Guelze +07375:Obermarchtal +07566:Argenbuehl +04826:Hohenlockstedt +08206:Egling a d Paar +08320:Missen-Wilhams +09267:Nordhalben +09381:Volkach +09572:Burgkunstadt +06527:Oberweis Eifel +06641:Lauterbach Hessen +06832:Beckingen-Reimsbach +09976:Roetz +034602:Landsberg +05461:Bramsche Hase +02203:Koeln-Porz +033765:Maerkisch-Buchholz +034905:Woerlitz +038308:Goehren +039399:Kleinau +05156:Coppenbruegge +05347:Burgdorf b Salzgitte +07162:Suessen +07353:Schwendi Wuertt +03591:Bautzen +03973:Pasewalk +06101:Bad Vilbel +08533:Rotthalmuenster +08724:Massing +038207:Staebelow +05483:Lienen +02721:Lennestadt +02297:Reichshof-Wildbergerhuette +02607:Kobern-Gondorf +033361:Joachimsthal +04308:Schwedeneck +04422:Sande Kr Friesl +033967:Freyenstein +038321:Martensdorf +039298:Barby +04189:Undeloh +05674:Grebenstein +08860:Bernbeuren +09076:Wittislingen +09190:Heroldsbach +02247:Neunkirchen-Seelscheid +02361:Recklinghausen +02552:Steinfurt-Borghorst +02743:Daaden +034721:Nienburg +035056:Altenberg +038427:Blowatz +04253:Asendorf b Bruchhaus +04444:Goldenstedt Kr Vecht +04635:Soerup +05696:Arolsen-Landau +07707:Braeunlingen +06145:Floersheim am Main +06336:Dellfeld +07821:Lahr Schwarzwald +09289:Schwarzenbach a Wald +034923:Cobbelsdorf +035693:Lauschuetz +038326:Grimmen +08151:Starnberg +08342:Marktoberdorf +09904:Lalling +04771:Hemmoor +04848:Rantrum b Husum Nordsee +04962:Papenburg-Aschendorf +0040:Rumaeinien +03901:Salzwedel +06663:Steinau an der Strasse +06854:Oberthal Saar +038225:Trinwillershagen +02225:Meckenheim Rheinl +035478:Goyatz +035895:Klitten +036732:Koenitz +05292:Lichtenau Westf-Atte +04231:Verden Aller +05602:Hessisch Lichtenau +07184:Kaisersbach +07303:Illertissen +08555:Perlesreut +03923:Zerbst +0281:Wesel +09004:Tapfheim +02056:Heiligenhaus +034607:Wettin +035698:Hornow +05433:Badbergen +05624:Emstal Hess +0094:Sri Lanka +07325:Sontheim an der Bren +09331:Ochsenfurt +09408:Altenthann +09522:Eltmann +036737:Drognitz +02383:Boenen +02269:Kierspe-Roensahl +02574:Saerbeck +033366:Chorin +034203:Zwenkau +04275:Ehrenburg +04466:Wittmund-Ardorf +05837:Sprakensehl +05951:Werlte +07729:Tennenbronn +07843:Renchen +06167:Modautal +06281:Buchen Odenwald +06358:Kriegsfeld +06472:Weilmuenster +02978:Eslohe Sauerland-Rei +09735:Massbach +08364:Seeg +09926:Frauenau +04793:Hambergen +03541:Calau +06876:Weiskirchen Saar +09566:Meeder +09871:Windsbach +09948:Eschlkam +034322:Rosswein +034928:Seegrehna +039603:Burg Stargard +05051:Bergen Kr Celle +05128:Hohenhameln +05242:Rheda-Wiedenbrueck +08195:Weil Kr Landsberg a +07134:Weinsberg +08386:Oberstaufen +08505:Hutthurm +03563:Spremberg +06898:Voelklingen +004175:Liechtenstein +034221:Gneisenaustadt-Schildau +05455:Tecklenburg-Brochter +05646:Willebadessen +02192:Hueckeswagen +02502:Nottuln +033081:Neuglobsow +036452:Berlstedt +04203:Weyhe b Bremen +07347:Dietenheim Iller +07461:Tuttlingen +07652:Hinterzarten +03967:Oertzenhof +06400:Muecke +0791:Schwaebisch Hall +09162:Scheinfeld +09353:Karlstadt +02596:Nordkirchen +034423:Heuckewalde +036333:Heringen +039401:Neuwegersleben +05859:Thomasburg Kr Luenebu +05973:Neuenkirchen Kr Steinfurt +04297:Ottersberg-Posthausen +04488:Westerstede +04607:Janneby +04721:Cuxhaven +09544:Baunach +06804:Mandelbachtal +06308:Olsbruecken +06422:Kirchhain +09184:Deining Oberpf +036874:Schoenbrunn +034208:Loebnitz +02737:Netphen-Deuz +02851:Rees +02928:Soest Westf-Ostoennen +038481:Witzin +038784:Kleinow +039924:Stuer +04743:Langen b Bremerhaven +0481:Heide Holst +04934:Marienhafe +03372:Jueterbog +06635:Kirtorf +06826:Bexbach +08123:Moosinning +09375:Freudenberg Baden +036338:Bleicherode +039823:Rechlin +05073:Neustadt am Ruebenberg +05264:Kalletal +08336:Erkheim +08450:Ingolstadt-Zuchering +08641:Grassau Chiemgau +07156:Ditzingen +09779:Nordheim v d Rhoen +00441:London +0209:Gelsenkirchen +03585:Loebau +06848:Homburg Saar-Einoed +0058:Venezuela +02333:Ennepetal +05286:Ottenstein Niedersachsen +02524:Ennigerloh +034441:Hohenmoelsen +039608:Staven +039722:Sarnow +05901:Fuerstenau b Bramsche +07483:Horb am Neckar-Muehri +07674:Todtmoos +06231:Hochdorf-Assenheim +09303:Eibelstadt +02546:Coesfeld-Lette +033086:Grieben / Gransee +039204:Niederndodeleben +04361:Oldenburg in Holstein +04552:Leezen Holst +06139:Budenheim b Mainz +06253:Fuerth Odenw +06444:Bischoffen +09397:Wertheim-Dertingen +039406:Harbke +08145:Mammendorf Oberbay +04765:Ebersdorf b Bremervoe +04956:Uplengen +03394:Wittstock +06657:Hofbieber-Langenbieb +06771:St Goarshausen +034327:Waldheim +039002:oebisfelde +039740:Nechlin +08549:Pleinting +08663:Ruhpolding +07602:Oberried Breisgau +02164:Juechen-Otzenrath +02355:Schalksmuehle +039828:Wustrow / Neustrelitz +05732:Loehne +05923:Schuettorf +04247:Affinghausen +07624:Grenzach-Wyhlen +06062:Erbach Odenw +02568:Heek +02682:Hamm Sieg +02759:Bad Berleburg-Aue +02873:Hamminkeln-Wertherbr +034446:Grosskorbetha +039727:Spantekow +06466:Dautphetal-Friedensd +06580:Zemmer +038486:Gustaevel +036255:Goldbach +038789:Wolfshagen +039929:Jabel +05405:Hasbergen Kr Osnabrue +07220:Forbach Baden-Hundsb +0906:Donauwoerth +03344:Bad Freienwalde +09729:Grettstadt +09843:Burgbernheim +034244:Mockrehna +039222:Moeser +05236:Blomberg Lippe-Grossenmarpe +05427:Melle Wiehengeb-Buer +05541:Hann Muenden +08685:Kirchanschoering +0991:Deggendorf +07128:Sonnenbuehl +07242:Rheinstetten Baden +07433:Balingen +00676:Tongo +09134:Neunkirchen a Brand +09325:Kleinlangheim +02377:Wickede Ruhr +02801:Xanten +035604:Krieschow +036071:Teistungen +036374:Weissensee +039007:Tangeln +04192:Bad Bramstedt +04269:Ahausen-Kirchwalsede +04383:Grebin +04502:Luebeck-Travemuende +039424:Schanebeck +03322:Falkensee +039745:Hetzdorf +05754:Extertal-Bremke +05945:Wilsum b Emlichheim +06084:Schmitten Taunus +034345:Bad Lausick +05023:Liebenau Kr Nienburg +039209:Wanzleben +039323:Schoenhausen +06275:Rothenberg Odenw +07646:Weisweil Breisgau +07837:Oberharmersbach +07951:Crailsheim +08167:Zolling +08281:Thannhausen Schwab +09652:Waidhaus +03535:Herzberg / Elster +03726:Floeha +06721:Bingen am Rhein +09674:Schoensee +09865:Adelshofen +034262:Falkenhain +035723:Bernsdorf +036379:Holzengel +05045:Springe Deister-Benn +08422:Dollnstein +04928:Ihlow-Riepe +07051:Calw +03366:Beeskow +03671:Saalfeld +02305:Castrop-Rauxel +034464:Freyburg +034785:Sandersleben +039328:Rochau +05258:Salzkotten +05372:Meinersen +04120:Ellerhoop +05563:Kreiensen +07264:Bad Rappenau +07455:Dornhan +06203:Ladenburg +09156:Neuhaus a d Pegnitz +09270:Creussen +09347:Wittighausen +037431:Mehltheuer +05776:Rahden-Preussisch Stroehen +02632:Andernach +02823:Goch +034363:Cavertitz +035200:Arnsdorf +04524:Scharbeutz-Poenitz +039341:Redekin +07668:Ihringen +07973:Obersontheim +09461:Roding +06297:Ravenstein Baden +08771:Ergoldsbach +09178:Abenberg Mittelfr +09292:Konradsreuth +02654:Polch +02845:Neukirchen-Vluyn +035609:Drachhausen +036076:Niederorschel +039882:Gollin +08231:Koenigsbrunn b Augsbu +04546:Mustin b Ratzeburg +04737:Stadland-Schwei +04851:Marne +0681:Saarbruecken +09369:uettingen +09602:Neustadt a d Waldnaab +06438:Huenfelden +06552:Olzheim +06629:Schenklengsfeld +06743:Bacharach +035205:Ottendorf-Okrilla +039346:Tucheim +05067:Bockenem +05181:Alfeld Leine +05300:Salzgitter-uefingen +08253:Poettmes +08444:Schweitenkirchen +07073:Ammerbuch +08635:Pleiskirchen +02136:Duisburg-Homberg +03693:Meiningen +037752:Eibenstock +05585:Herzberg-Sieber +05704:Petershagen-Friedewalde +02327:Bochum-Wattenscheid +02441:Kall +034381:Colditz +04333:Erfde +035842:Niederoderwitz +039245:Loburg +04142:Steinkirchen Kr Stad +07477:Jungingen b Hechinge +08657:Ramsau b Berchtesgaden +06034:Woellstadt +09106:Markt Erlbach +09220:Azendorf +02463:Titz +033831:Weseram +04355:Rieseby +06056:Bad Soden-Salmuenster +06247:Worms-Pfeddersheim +06361:Rockenhausen +09624:Ensdorf Oberpf +035829:Gersdorf / Goerlitz +02867:Heiden Kr Borken Wes +02981:Winterberg Westf +037436:Weischlitz +08062:Bruckmuehl Mangfall +08139:Roehrmoos +04873:Aukrug +03621:Gotha +06574:Hasborn Eifel +06765:Gemuenden Hunsrueck +035728:Uhyst +033932:Fehrbellin +08466:Denkendorf Oberbay +02158:Grefrath b Krefeld +02272:Bedburg Erft +08679:Burgkirchen a d Alz +035021:Koenigstein +035324:Crinitz +05726:Wiedensahl +04164:Harsefeld +05840:Schnackenburg +07427:Schoemberg b Balingen +07541:Friedrichshafen +07732:Radolfzell am Bodensee +09433:Nabburg +008662:Taipei +02676:Ulmen +034386:Duerrweitzschen +037757:Rittersgruen +039061:Weferlingen +039364:Dolle +05939:Sustrum +04491:Friesoythe +04682:Amrum +07945:Wuestenrot +06269:Gundelsheim Wuertt. +06383:Glan-Muenchweiler +09837:Haundorf +09951:Landau a d Isar +039263:Unseburg +05208:Leopoldshoehe +05322:Bad Harzburg +07023:Weilheim an der Teck +00266:Lesotho +03834:Greifswald +06787:Niederbrombach +03529:Heidenau +06596:uedersdorf +09973:Furth i Wald +035342:Muehlberg +039483:Ballenstedt +05153:Salzhemmendorf +05344:Lengede +05535:Polle +08721:Eggenfelden +0066:Thailand +07045:Oberderdingen +07236:Keltern +00593:Ecuador +09128:Feucht +09242:Goessweinstein +02604:Nassau Lahn +02294:Morsbach Sieg +02485:Schleiden Eifel-Dreiborn +035241:Lommatzsch +039382:Kamern +05671:Hofgeismar +04186:Buchholz in der Nord +04305:Westensee +05862:Hitzacker +07449:Baiersbronn-Obertal +07563:Kisslegg +07754:Goerwihl +06078:Gross-Umstadt +06192:Hofheim am Taunus +06502:Schweich Mosel +09646:Freihung +02931:Arnsberg +05131:Garbsen +033836:Butzow +039887:Gerswalde +08084:Taufkirchen Vils +08203:Grossaitingen +0371:Chemnitz +04823:Wilster +07967:Jagstzell +03643:Weimar +03338:Bernau +06524:Rodershausen +09901:Hengersberg +02839:Straelen-Herongen +02953:Wuennenberg +030:Berlin +033432:Muencheberg +08225:Jettingen-Scheppach +04845:Ostenfeld b Husum Nordsee +00216:Tunesien +06737:Koengernheim +06851:St Wendel +033331:Casekow +02222:Bornheim Rheinl +033634:Berkenbrueck +036702:Lauscha +039268:Egeln +05175:Lehrte-Arpke +05366:Jembke +07181:Schorndorf Wuertt +07258:Oberderdingen-Flehin +08629:Palling Oberbay +08743:Geisenhausen +06120:Aarbergen +09073:Gundelfingen a d Donau +09264:Kueps +035329:Dollenchen +033230:Boernicke +02626:Selters Westerwald +02435:Erkelenz-Loevenich +035026:Duerrroehrsdorf +036601:Hermsdorf / Thueringen +04327:Grossenaspe +04441:Vechta +04632:Steinbergkirche +05693:Volkmarsen +07585:Ostrach +06333:Waldfischbach-Burgal +06142:Ruesselsheim +08765:Bruckberg Niederbay +09286:Oberkotzau +02571:Greven Westf +02762:Wenden Biggetal +033336:Passow +035246:Ziegenhain +038731:Luebz +039084:Lindstedt +0335:Frankfurt / Oder +039387:Havelberg +04349:Daenischenhagen +04463:Wangerland +04654:Morsum Sylt +08034:Brannenburg +06355:Albisheim Pfrimm +06660:Steinau an der Strasse +0881:Weilheim Oberbay +09405:Bad Abbach +033235:Friesack +02975:Schmallenberg-Oberki +033652:Neuzelle +033973:Zernitz +05103:Wennigsen Deister +08247:Bad Woerishofen +08361:Nesselwang +07300:Roggenburg Schwab +08552:Grafenau Niederbay +09499:Painten +09923:Teisnach +03496:Koethen +06873:Nonnweiler +00352:Luxemburg +0061:Australien +02053:Velbert-Neviges +05197:Soltau-Frielingen +05507:Ebergoetzen +05621:Bad Wildungen +02244:Koenigswinter +033437:Reichenberg +033872:Hohennauen +036922:Gerstungen +039488:Guentersberge +04136:Scharnebeck +07394:Schelklingen +07704:Geisingen Baden +06028:Sulzbach a Main +08574:Wittibreut +02266:Lindlar +05643:Borgentreich +033657:Steinsdorf / Eisenhuettenstadt +035264:Strehla +038332:Gross Bisdorf +05529:Rhumspringe +04158:Roseburg +04272:Siedenburg +05834:Wittingen-Knesebeck +07344:Blaubeuren +07726:Bad Duerrheim Schwarz +06164:Reichelsheim Odenwald +09236:Nagel +09350:Hundsbach Unterfr +09427:Leiblfing +036927:Unterellen +02593:Ascheberg Westf +02903:Meschede-Freienohl +036606:Kraftsdorf +08056:Eggstaett Kr Rosenhei +08170:Strasslach +04485:Elsfleth-Huntorf +07748:Grafenhausen Hochsch +07939:Schrozberg-Spielbach +09732:Hammelburg +0212:Solingen +06186:Grosskrotzenburg +06568:Wolsfeld +06682:Tann Rhoen +09945:Arnbruck +036940:Oepfershausen +035365:Falkenberg / Elster +036202:Neudietendorf +037293:Eppendorf +038736:Goldberg +038850:Gammelin +039089:Bismark +07131:Heilbronn Neckar +07322:Giengen an der Brenz +08192:Schondorf a Ammersee +08269:Unteregg b Mindelhei +08383:Gruenenbach Allgaeu +0571:Minden Westf +09776:Mellrichstadt +033051:Nassenheide +033675:Tauche +033978:Segeletz +036422:Reinstaedt +05147:uetze-Haenigsen +05261:Lemgo +05452:Mettingen Westf +07153:Plochingen +03773:Johanngeorgenstadt +03964:Bredenfelde +036945:Henneberg +05474:Stemwede-Dielingen +02407:Herzogenrath-Kohlsch +02521:Beckum +033877:Nitzahn +036207:Plaue +036624:Teichwolframsdorf +038231:Barth +038855:Luebtheen +04294:Riede Kr Verden Aller +04604:Grossenwiehe +05665:Guxhagen +06305:Hochspeyer +07366:Abtsgmuend +07557:Herdwangen-Schoenach +07671:Todtnau +02925:Warstein-Allagen +033473:Zechin +035383:Elster +038451:Hoppenrade / Guestrow +038754:Leussow +08502:Fuerstenzell +04931:Norden +04740:Loxstedt-Dedesdorf +09372:Klingenberg a Main +09563:Roedental +06709:Fuerfeld Kr Bad Kreuz +06327:Neustadt-Lachen-Spey +06441:Wetzlar +07388:Pfronstetten +02947:Anroechte +036743:Teichel +07579:Schwenningen Baden +08028:Fischbachau +08142:Olching +08333:Babenhausen Schwab +04762:Kutenholz +04839:Woehrden Dithm +04953:Bunde Ostfriesl +09394:Esselbach +09704:Euerdorf +03391:Neuruppin +06654:Gersfeld Rhoen +0020:Aegypten +02330:Herdecke Ruhr +05283:Luegde-Rischenau +05402:Bissendorf Kr Osnabrueck +035388:Kloeden +036642:Harra +037298:oelsnitz / Erzgebirge +038873:Carlow +04108:Rosengarten Kr Harburg +04222:Ganderkesee +07175:Leinzell +08546:Otterskirchen +0261:Koblenz +08851:Kochel a See +09181:Neumarkt Oberpf +00537:Kuba +036844:Rohr +05806:Barum b Bad Bevensen +02238:Pulheim +02352:Altena Westf +02429:Huertgenwald +02543:Billerbeck Westf +02734:Freudenberg Westf +033056:Muehlenbeck +036427:Dornburg +04244:Harpstedt +04435:Grossenkneten +04626:Treia b Schleswig +06136:Nieder-Olm +09208:Bindlach +02374:Iserlohn-Letmathe +02565:Gronau Westf-Epe +036023:Horsmar +036647:Saalburg +036761:Heubisch +05828:Himbergen +04266:Brockel Kr Rotenburg +05942:uelsen b Neuenhaus D +07834:Wolfach +06158:Riedstadt +06272:Hirschhorn Neckar +06349:Billigheim-Ingenheim +09726:Obbach +02778:Siegbach +033478:Gross Neuendorf +036849:Kleinschmalkalden +036963:Dorndorf +038456:Langhagen +038759:Tewswoos +04975:Westerholt Ostfriesl +03723:Hohenstein-Ernstthal +06676:Hohenroda Hess +06867:Perl Saar +02161:Moenchengladbach +05424:Bad Rothenfelde +038355:Zuessow +08682:Laufen Salzach +07621:Loerrach +001242:Bahamas +001264:Anguilla +001268:Antigua und Barbuda +001345:Caymaninseln +001441:Bermuda +001664:Montserrat +001758:St.Lucia +001787:Puerto Rico +001869:St. Kitts und Nevis +001:USA/Kanada +0020:aegypten +00212:Marokko +00213:Algerien +00216:Tunesien +00218:Libyen +00220:Gambia +00221:Senegal +00222:Mauretanien +00223:Mali +00224:Guinea +00225:C“te d'Ivoire (ehm. Elfenbeinkueste) +00226:Burkina Faso (Obervolta) +00227:Niger +00228:Togo +00229:Benin +00230:Mauritius +00231:Liberia +00232:Sierra Leone +00233:Ghana +00234:Nigeria +00235:Tschad +00236:Zentralafrikanische Republik +00237:Kamerun +00238:Kap Verde +00239:Sao Tom‚ und Principe +00240:aequatorialguinea +00241:Gabun +00242:Kongo +00243:Zaire +00244:Angola +00245:Guinea-Bissau +00247:Ascension +00248:Seschellen/Seychellen +00249:Sudan +00250:Ruanda +00251:aethiopien +00252:Somalia +00253:Dschibuti +00254:Kenia +00255:Tansania +00256:Uganda +00257:Burundi +00258:Mosambik +00260:Sambia +00261:Madagaskar +00262:Reunion +00263:Simbabwe +00264:Namibia +00265:Malawi +00266:Lesotho +00267:Botsuana +00268:Swasiland +00269:Mayotte (Komoren) +0027:Suedafrika +00290:Saint Helena +00291:Eritrea +00297:Aruba +00298:Faeroeer +00299:Groenland +0030:Griechenland +0031:Niederlande +0032:Belgien +00331:Paris +0033:Frankreich +0034:Spanien +00350:Gibraltar +00351:Portugal +00352:Luxemburg +00353:Irland +00354:Island +00355:Albanien +00356:Malta +00357:Zypern +00358:Finnland +00359:Bulgarien +0036:Ungarn +00370:Litauen +00371:Lettland +00372:Estland +00373:Moldau Republik +00374:Armenien +00375172:Minsk +00375:Belarus (Weissrussland) +00376:Andorra +00377:Monaco +00378:San Marino +0038044:Kiev +00380:Ukraine +00381:Jugoslawien/Montenegro/Serbien +00385:Kroatien +00386:Slowenien +00387:Bosnien-Herzegowina +00389:Makedonien/Mazedonien +0039541:San Marino +00396:Vatikanstadt +0039:Italien +0040:Rumaenien +004175:Liechtenstein +0041:Schweiz +00420:Tschechien/Tschechische Republik +00421:Slowakei/Slowakische Republik +0043:oesterreich +00441:London +0044:Grossbritannien/Nordirland +0045:Daenemark +0046:Schweden +0047:Norwegen +0048:Polen +0049:Deutschland +00500:Falklandinseln +00501:Belize +00502:Guatemala +00503:El Salvador +00504:Honduras +00505:Nicaragua +00506:Costa Rica +00507:Panama +00508:Saint Pierre und Miquelon +00509:Haiti +0051:Peru +0052:Mexiko +00537:Havanna +0053:Kuba +0054:Argentinien +0055:Brasilien +0056:Chile +0057:Kolumbien +0058:Venezuela +00590:Guadeloupe +00591:Bolivien +00592:Guyana +00593:Ecuador +00594:Franzoesisch-Guayana +00595:Paraguay +00596:Martinique +00597:Suriname +00598:Uruguay +00599:Niederlaendische Antillen +0060:Malaysia +0061:Australien +0062:Indonesien +0063:Philippinen +0064:Neuseeland +0065:Singapur +00662:Bangkok +0066:Thailand +00670:Marianen +00671:Guam +0067210:Davis (Antarktis) +0067211:Mawson (Antarktis) +0067212:Casey (Antarktis) +0067213:Macquarrie Island (Antarktis) +006722:Kokosinseln (Australien) +006723:Norfolkinseln (Australien) +006724:Weihnachtsinsel (Australien) +00673:Brunei Darussalam +00674:Nauru +00675:Papua-Neuguinea +00676:Tonga +00677:Salomonen +00678:Vanuatu +00679:Fidschi +00680:Palau +00682:Cookinseln +00684:Amerikanisch-Samoa +00685:Samoa +00686:KirŤbati +00687:Neukaledonien +00688:Tuvalu +00689:Franzoesisch-Polynesien +00691:Mikronesien +00692:Marshallinseln +007095:Moskau +007812:St. Petersburg (ehm. Leningrad) +007:GUS (Russische Foederation) +00813:Tokio +0081:Japan +0082:Korea (Republik) +0084:Vietnam +00850:Korea (Demokratische Volksrepublik) +00852:Hongkong +00853:Macau +00855:Kambodscha +00856:Laos +008662:Taipei +0086:China (Volksrepublik) +00871:Atlantischer Ozean (Ost) +00872:Pazifischer Ozean +00873:Indischer Ozean +00874:Atlantischer Ozean (West) +00880:Bangladesch +00886:China (Taiwan) +0090:Tuerkei/Nordzypern +0091:Indien +0092:Pakistan +0093:Afghanistan +0094:Sri Lanka +0095:Myanmar (Birma) +00960:Malediven +00961:Libanon +00962:Jordanien +00963:Syrien +00964:Irak +00965:Kuwait +00966:Saudi Arabien +00967:Jemen +00968:Oman +00971:Vereinigte Arabische Emirate +00972:Israel +00973:Bahrain +00974:Katar +00975:Bhutan +00976:Mongolei +00977:Nepal +0098:Iran +00993:Turkmenistan +00994:Aserbaidschan +00995:Georgien +00996:Kirgisistan + diff --git a/distrib/setup.all/capitel.prt b/distrib/setup.all/capitel.prt new file mode 100644 index 0000000..3cc3cf8 --- /dev/null +++ b/distrib/setup.all/capitel.prt @@ -0,0 +1,14 @@ +# 1st col.: number of caller +# 2nd col.: name of caller +# 3rd col.: welcome.wav for this entry +# 4th col.: reject-cause for this entry (0=normal, 1=busy, 2=refuse, 3=unavailable) +# 5th col.: max. recording time +# 6th col.: answering delay +# 7th col.: active flag +# 8th col.: ringing.wav +# 9th col.: callback number +# +# note: - "*" star means port default +# - insert a blank for no settings +# + diff --git a/distrib/setup.all/china.num b/distrib/setup.all/china.num new file mode 100644 index 0000000..bf70d6c --- /dev/null +++ b/distrib/setup.all/china.num @@ -0,0 +1,629 @@ +001:ĽÓÄĂ´ó;ĂŔąú +001242:°ÍąţÂíąú +001246:°Í°Í¶ŕËą +001264:°˛ąçŔ­µş(Ó˘) +001268:°˛ĚáąĎşÍ°Í˛Ľ´ď +001284:ά¶űľ©Čşµş(Ó˘) +001340:ά¶űľ©Čşµş(ĂŔ) +001345:żŞÂüČşµş(Ó˘) +001441:°ŮÄ˝´óČşµş(Ó˘) +001473:¸ńÁÖÄÉ´ď +001649:ĚŘżËËąşÍż­żĆ˹Ⱥµş +001664:ĂÉĚŘČűŔ­Ěصş(Ó˘) +001670:ÂíŔďŃÇÄÉČşµş +001671:ąŘµş +001681:ÍßŔďËąşÍ¸»ÍÁÄÇČşµş +001758:ʥ¬Î÷ŃÇ +001767:¶ŕĂ×ÄáĽÓÁŞ°î +001784:ĘĄÎÄÉ­Ěصş(Ó˘) +001787:˛¨¶ŕŔč¸ç +001808:ĎÄÍţŇÄ;ÖĐÍľµş;ÍţżËµş +001809:¶ŕĂ×ÄáĽÓą˛şÍąú +001868:ĚŘÁ˘Äá´ďşÍ¶ŕ°Í¸ç +001869:ĘĄżËŔďËąÍиĄşÍÄáά˹ +001876:ŃŔÂňĽÓ +0020:°ŁĽ° +00212:ĦÂĺ¸ç +00213:°˘¶űĽ°Ŕű +00216:Í»ÄáËą +00218:Ŕű±ČŃÇ +00220:¸Ô±ČŃÇ +00221:ČűÄÚĽÓ¶ű +00222:Ă«ŔďËţÄáŃÇ +00223:ÂíŔď +00224:Ľ¸ÄÚŃÇ +00225:żĆĚصĎÍß +00226:˛Ľ»ůÄÉ·¨Ë÷ +00227:ÄáČŐ¶ű +00228:¶ŕ¸ç +00229:±´Äţ +00230:Ă«ŔďÇóËą +00231:Ŕű±ČŔďŃÇ +00232:ČűŔ­Ŕű°ş +00233:ĽÓÄÉ +00234:ÄáČŐŔűŃÇ +00235:Ő§µĂ +00236:ÖĐ·Ç +00237:ż¦Âó¡ +00238:·đµĂ˝Ç +00239:ĘĄ¶ŕĂŔşÍĆŐÁÖÎ÷±Č +00240:łŕµŔĽ¸ÄÚŃÇ +00241:ĽÓĹî +00242:¸Őąű +00243:ÔúŇÁ¶ű +00244:°˛¸çŔ­ +00245:Ľ¸ÄÚŃDZČÉÜ +00246:µĎ¸ęĽÓÎ÷ŃÇ +00247:°˘É­ËÉ +00248:ČűÉŕ¶ű +00249:ËŐµ¤ +00250:¬Íú´ď +00251:°ŁČű¶í±ČŃÇ +00252:Ë÷ÂíŔď +00253:ĽŞ˛ĽĚá +00254:żĎÄáŃÇ +00255:̹ɣÄáŃÇ +00256:Îڸɴď +00257:˛ĽÂˇµĎ +00258:ÄŞÉŁ±ČżË +00259:ÉŁ¸ř°Í¶ű +00260:ÔޱČŃÇ +00261:Âí´ďĽÓËąĽÓ +00262:ÁôÄáÍúµş +00263:˝ň°Í˛ĽÎ¤ +00264:ÄÉĂ×±ČŃÇ +00265:ÂíŔ­Î¬ +00266:ŔłË÷ÍĐ +00267:˛©´ÄÍßÄÉ +00268:ËąÍţĘżŔĽ +00269:żĆĦÂŢ;ÂíÔĽĚصş +0027:ÄĎ·Ç +00290:ĘĄşŐŔŐÄĂ +00291:¶ňŔďĚŘŔďŃÇ +00297:°˘Âł°Íµş +00298:·¨ÂŢČşµş +00299:¸ńÁęŔĽµş +0030:ĎŁŔ° +0031:şÉŔĽ +0032:±ČŔűʱ +0033:·¨ąú +0034:Î÷°ŕŃŔ +003422:ĽÓÄÇŔűČşµş(Î÷);(ĘĄżË³˹) +003428:ĽÓÄÇŔűČşµş(Î÷);(Ŕ­ËąĹÁ¶űÂíËą) +00350:Ö±˛ĽÂŢÍÓ(Ó˘) +00351:ĆĎĚŃŃŔ +00352:¬ɭ±¤ +00353:°®¶űŔĽ +00354:±ůµş +00355:°˘¶ű°ÍÄáŃÇ +00356:Âí¶úËű +00357:ČűĆÖ·˹ +00358:·ŇŔĽ +00359:±ŁĽÓŔűŃÇ +0036:ĐŮŃŔŔű +00370:Á˘ĚŐÍđ +00371:Ŕ­ÍŃάŃÇ +00372:°®ÉłÄáŃÇ +00373:Ħ¶ű¶ŕÍß +00374:ŃÇĂŔÄáŃÇą˛şÍąú +00375:°×¶íÂŢËą +00376:°˛µŔ¶ű +00377:ĦÄɸç +00378:ĘĄÂíÁ¦Ĺµ +00380:ÎÚżËŔĽ +00381:ÄĎËąŔ­·ň +00385:żĆÂ޵ŘŃÇ +00386:ËąÂĺÎÄÄáŃÇ +00387:˛¨ËąÄáŃÇşÍČű¸çάÄÇ +00389:ÂíĆä¶Ů +0039:Ňâ´óŔű +003906698:čóµŮ¸Ô +0040:ÂŢÂíÄáŃÇ +0041:ČđĘż +00420:˝ÝżË +00421:ËąÂĺ·ĄżË +00423:ÁĐÖ§¶ŘĘżµÇ +0043:°ÂµŘŔű +0044:Ó˘ąú +0045:µ¤Âó +0046:Čđµä +0047:ŲÍţ +0048:˛¨ŔĽ +0049:µÂąú +00500:¸ŁżËŔĽČşµş +00501:˛®Ŕű×Č +00502:ÎŁµŘÂíŔ­ +00503:Čř¶űÍ߶ŕ +00504:şé¶ĽŔ­Ëą +00505:ÄáĽÓŔ­ąĎ +00506:¸çËą´ďŔčĽÓ +00507:°ÍÄĂÂí +00508:ʥƤ°Ł¶űµşĂÜżË¡µş(·¨) +00509:şŁµŘ +0051:ĂëÂł +0052:Ä«Î÷¸ç +0053:ąĹ°Í +0054:°˘¸ů͢ +0055:°ÍÎ÷ +0056:ÖÇŔű +0057:¸çÂ×±ČŃÇ +0058:ÎŻÄÚČđŔ­ +00590:ąĎ¶ŕÂŢĆŐ +00591:˛ŁŔűάŃÇ +00592:ąçŃÇÄÇ +00593:¶ňąĎ¶ŕ¶ű +00594:·¨ĘôąçŃÇÄÇ +00595:°ÍŔ­ąç +00596:ÂíĚáÄáżË(·¨) +00597:ËŐŔďÄĎ +00598:ÎÚŔ­ąç +00599:şÉĘô°˛µÄÁĐ˹Ⱥµş +0060:ÂíŔ´Î÷ŃÇ +0061:°Ä´óŔűŃÇ +00619162:żĆżĆËąµş +00619164:ĘĄµ®µş +0062:Óˇ¶ČÄáÎ÷ŃÇ +0063:·ĆÂɱö +0064:ĐÂÎ÷ŔĽ +0065:ĐÂĽÓĆ +0066:Ě©ąú +00672:ŵ¸ŁżËµş +00673:ÎÄŔł +00674:č§Âł +00675:°Í˛ĽŃÇĐÂĽ¸ÄÚŃÇ +00676:ĚŔĽÓ +00677:ËůÂŢĂĹČşµş +00678:ÍßŬ°˘ÍĽ +00679:쳼à +00680:ĹÁŔÍ +00682:żĆżËČşµş +00683:Ŧ°Łµş +00684:¶«ČřĦŃÇ +00685:Î÷ČřĦŃÇ +00686:»ůŔď°ÍËą +00687:ĐÂż©Ŕď¶ŕÄáŃÇČşµş +00688:ÍĽÍ߬ +00689:·¨Ęô˛¨ŔďÄáÎ÷Ńǡ˘ËţĎŁĚá +00690:ÍĐżËÂł +00691:ĂÜżËÂŢÄáÎ÷ŃÇ +00692:ÂíÉܶűČşµş +007:¶íÂŢËą +007:ąţČřżË˹̹ą˛şÍąú +0081:ČŐ±ľ +0082:ş«ąú +0084:Ô˝ÄĎ +00850:łŻĎĘ +00852:Ďă¸Ű +00853:°ÄĂĹ +00855:ĽíĆŇŐŻ +00856:ŔĎÎÎ +008711:´óÎ÷Ńó¶«ÇřAŐľŔŕ +008713:´óÎ÷Ńó¶«ÇřBŐľŔŕ +008716:´óÎ÷Ńó¶«ÇřMŐľŔŕ +0087176:´óÎ÷Ńó¶«ÇřMini-M +008721:Ě«Ć˝ŃóAŐľŔŕ +008723:Ě«Ć˝ŃóBŐľŔŕ +008726:Ě«Ć˝ŃóMŐľŔŕ +0087276:Ě«Ć˝ŃóMini-M +008731:Óˇ¶ČŃóAŐľŔŕ +008733:Óˇ¶ČŃóBŐľŔŕ +008736:Óˇ¶ČŃóMŐľŔŕ +0087376:Óˇ¶ČŃóMini-M +008741:´óÎ÷ŃóÎ÷ÇřAŐľŔŕ +008743:´óÎ÷ŃóÎ÷ÇřBŐľŔŕ +008746:´óÎ÷ŃóÎ÷ÇřMŐľŔŕ +0087476:´óÎ÷ŃóÎ÷ÇřMini-M +00880:ĂĎĽÓŔ­ąú +00886:ÖĐąų́Íĺ +0090:ÍÁ¶úĆä +0091:Óˇ¶Č +0092:°Í»ů˹̹ +0093:°˘¸»şą +0094:ËąŔďŔĽż¨ +0095:Ăĺµé +00960:Âí¶ű´ú·ň +00961:Ŕč°ÍÄŰ +00962:ÔĽµ© +00963:ĐđŔűŃÇ +00964:ŇÁŔ­żË +00965:żĆÍţĚŘ +00966:ÉłĚŘ°˘Ŕ­˛® +00967:ҲĂĹ +00968:°˘Âü +00970:°ÍŔŐ˹̹ +00971:°˘ÁŞÇő +00972:ŇÔÉ«ÁĐ +00973:°ÍÁÖ +00974:ż¨Ëţ¶ű +00975:˛»µ¤ +00976:ĂɹŠ+00977:ÄᲴ¶ű +0098:ŇÁŔĘ +00992:ËţĽŞżË˹̹ą˛şÍąú +00993:ÍÁżâÂü˹̹ą˛şÍąú +00994:°˘Čű°Ý˝® +00995:¸ńÂłĽŞŃÇą˛şÍąú +00996:ĽŞ¶űĽŞËąĚąą˛şÍąú +00998:ÎÚ×ȱđżË˹̹ą˛şÍąú +010:±±ľ©ĘĐŁ¬Í¨ĎŘŁ¬˛ýĆ˝Ł¬´óĐËŁ¬ËłŇ壬ƽąČŁ¬ĂÜÔĆŁ¬»łČᣬŃÓÇě +021:ÉĎşŁĘĐ +022:Ěě˝ňĘĐŁ¬±¦Ű棬Ľ»ĎŘŁ¬ľ˛şŁŁ¬ÎäÇ壬ÄţşÓ +0311:Őý¶¨Ł¬ÂąČŞŁ¬ľ®Ú꣬čďłÇŁ¬Ţ»łÇŁ¬ÔŞĘĎŁ¬ĐÂŔÖŁ¬ÎŢĽ«Ł¬ÉîÔóŁ¬ĐÁĽŻŁ¬ĘŻĽŇׯŁ¬˝úÖÝŁ¬ŐÔĎŘŁ¬Ô޻ʣ¬¸ßŇŘŁ¬Ć˝É˝Ł¬ÁéĘŮŁ¬ĐĐĚĆ +0310:şŞµ¦Ł¬Îä°˛Ł¬ÁŮŐÄŁ¬´ĹĎŘŁ¬ÉćĎŘŁ¬ÓŔÄ꣬Ľ¦ÔóŁ¬ÇúÖÜŁ¬ÇđĎŘŁ¬ąÝĚŐŁ¬´óĂűŁ¬ÎşĎŘŁ¬ąăĆ˝Ł¬·ĘĎ磬łÉ°˛ +0312:±Ł¶¨Ł¬ÂúłÇŁ¬ÇĺÔ·Ł¬ĐěË®Ł¬Čݳǣ¬ĐŰĎŘŁ¬¸ßŃôŁ¬ó»ĎŘŁ¬ËłĆ˝Ł¬Íű¶ĽŁ¬°˛ĐÂŁ¬äµË®Ł¬¶¨ĐËŁ¬äĂÖÝŁ¬Ň×ĎŘŁ¬äµÔ´Ł¬˛©Ň°Ł¬°˛ąúŁ¬¶¨ÖÝŁ¬ÇúŃôŁ¬ĚĆĎŘŁ¬¸·Ć˝Ł¬¸ß±®µę +0313:Đű»ŻŁ¬»ł°˛Ł¬ÍňČ«Ł¬Őű±Ł¬łçŔńŁ¬łŕłÇŁ¬»łŔ´Ł¬äĂÂąŁ¬ÎµĎŘŁ¬ŃôÔ­Ł¬ŐĹĽŇżÚŁ¬ÉĐŇ壬żµ±ŁŁ¬ąÁÔ´ +0314:łĐµÂŁ¬ĐË¡Ł¬łĐµÂĎŘŁ¬Âˇ»ŻŁ¬Î§łˇŁ¬Ć˝ČŞŁ¬żíłÇŁ¬·áÄţŁ¬ÂĐĆ˝ +0315:ĚĆÉ˝Ł¬ÂĐÄĎŁ¬·áÄĎŁ¬ÂĐĎŘŁ¬·áČóŁ¬×ń»ŻŁ¬ĚĆşŁŁ¬ŔÖͤŁ¬Ç¨Î÷Ł¬Ç¨°˛Ł¬ÓńĚď +0316:ŔČ·»Ł¬ÓŔÇ壬´ółÇŁ¬ÎÄ°˛Ł¬ąĚ°˛Ł¬´ół§Ł¬ČýşÓŁ¬°ÔÖÝŁ¬ĎăşÓ +0317:˛×ÖÝŁ¬˛×ĎŘŁ¬ÇŕĎŘŁ¬şÓĽäŁ¬ËŕÄţŁ¬ŃÎÉ˝Ł¬Ăϴ壬ÄĎƤŁ¬¶«ąâŁ¬ÎâÇĹŁ¬˛´Í·Ł¬ČÎÇ𣬻Ćć裬şŁĐËŁ¬Ď×ĎŘ +0318:şâË®Ł¬ČÄŃôŁ¬ÎäÇżŁ¬ÎäŇŘŁ¬¸·łÇŁ¬ľ°ĎŘŁ¬ąĘłÇŁ¬Ľ˝ÖÝŁ¬ÉîĎŘŁ¬°˛Ć˝Ł¬ÔćÇż +0319:ĐĎ̨Ł¬ÁŮÎ÷Ł¬ÄÚÇńŁ¬Áٳǣ¬°ŘĎ磬Äţ˝úŁ¬ÂˇŇ˘Ł¬ľŢÂąŁ¬ĐÂşÓŁ¬ÄĎą¬Ł¬ÇĺşÓŁ¬ÍţĎŘŁ¬ąă×ÚŁ¬Ć˝Ď磬ÄϺͣ¬ČÎĎŘŁ¬ÉłşÓ +0335:ÇػʵşŁ¬˛ýŔ裬¬ÁúŁ¬¸§ÄţŁ¬ÇŕÁú +0351:Ě«Ô­Ł¬Â¦·łŁ¬ŃôÇúŁ¬ÇĺĐ죬ąĹ˝» +0349:Ë·ÖÝŁ¬»łČĘŁ¬Ó¦ĎŘŁ¬ÓŇÓńŁ¬É˝Ňő +0350:ĐĂÖÝŁ¬Ć«ąŘŁ¬ľ˛ŔÖŁ¬¶¨Ď壬´úĎŘŁ¬Îĺ̨Ł¬Ô­Ć˝Ł¬żÁá°Ł¬şÓÇúŁ¬±ŁµÂŁ¬ÄţÎ䣬ÉńłŘŁ¬ÎĺŐŻŁ¬·±ÖĹ +0352:´óͬŁ¬ĚěŐňŁ¬Ńô¸ßŁ¬»ëÔ´Ł¬ąăÁ飬×óÔĆŁ¬ÁéÇ𣬴óͬĎŘ +0353:ŃôČŞŁ¬Ć˝¶¨Ł¬ĂĎĎŘ +0354:ÓÜ´ÎŁ¬ÁéĘŻŁ¬şÍËłŁ¬ĘŮŃôŁ¬ÎôŃôŁ¬×óȨŁ¬ÓÜÉ磬̫ąČŁ¬ĆîĎŘŁ¬Ć˝ŇŁŁ¬˝éĐÝ +0355:ł¤ÖÎŁ¬Ć˝ËłŁ¬ÎäĎ磬ł¤×ÓŁ¬ŔčłÇŁ¬ĎĺÔ«Ł¬ÇßĎŘŁ¬ÇßÔ´Ł¬ÍÍÁôŁ¬ÂşłÇŁ¬şřąŘŁ¬ł¤ÖÎĎŘ +0356:˝úłÇŁ¬ÇßË®Ł¬¸ßĆ˝Ł¬ŃôłÇŁ¬Áę´¨ +0357:ÁŮ·ÚŁ¬şňÂíŁ¬´óÄţŁ¬ÇúÎÖŁ¬ŇíłÇŁ¬Ďĺ·ÚŁ¬şé¶´Ł¬»ôÖÝŁ¬·ÚÎ÷Ł¬ĆŃĎŘŁ¬ÚôŃôŁ¬ÓŔşÍŁ¬ĎçÄţŁ¬ĽŞĎŘŁ¬°˛Ô󣬸ˇÉ˝Ł¬ąĹĎŘ +0358:ŔëĘŻŁ¬ÎÄË®Ł¬˝»łÇŁ¬ĘŻÂĄŁ¬·˝É˝Ł¬ÁŮĎŘŁ¬·ÚŃôŁ¬Đ˘Ň壬˝»żÚŁ¬ÖĐŃôŁ¬ÁřÁÖŁ¬ĐËĎŘŁ¬á°ĎŘ +0359:Ô˳ǣ¬ÓŔĽĂŁ¬Ô«ÇúŁ¬ĐÂç­Ł¬ÎĹϲŁ¬ĎÄĎŘŁ¬ç­ĎŘŁ¬Ć˝Â˝Ł¬ÍňČŮŁ¬şÓ˝ňŁ¬Üdzǣ¬ÁŮ⢣¬đ˘É˝ +0471:şôşÍşĆĚŘŁ¬ÍÁĬĚŘ×óĆ죬ÍĐżËÍĐŁ¬şÍÁÖŁ¬ÇĺË®şÓŁ¬Îä´¨Ł¬¶őÍĐżËÇ°Ćě +0470:şŁŔ­¶űŁ¬ŃŔżËĘŻŁ¬ÔúŔĽÍÍŁ¬łÂ°Í¶ű»˘Ć죬Đ°Ͷű»˘×óĆ죬Đ°Ͷű»˘ÓŇĆ죬¸ůşÓŁ¬¶î¶űąĹÄÉÓŇĆ죬ŇÁĂôŁ¬ÂúÖŢŔ°˘ČŮĆ죬¶őοˣ¬ÄŞÁ¦´ďÍߣ¬¶őÂ×´ş +0472:°üÍ·Ł¬ąĚŃôŁ¬ÍÁĬĚŘÓŇĆ죬´ď¶űş±ĂŻĂ÷°˛ÁŞşĎĆ죬°×Ôƶő˛© +0473:ÎÚşŁ +0474:ĽŻÄţŁ¬ËÄ×ÓÍőĆ죬·áŐňŁ¬×ż×ĘŁ¬É̶ĽŁ¬Đ˺ͣ¬˛ěąţ¶űÓŇŇíÇ°Ć죬˛ěąţ¶űÓŇŇíÖĐĆ죬˛ěąţ¶űÓŇŇíşóĆ죬ÁąłÇŁ¬»ŻµÂ +0475:ͨÁÉŁ¬żŞÂłŁ¬żâÂ×Ć죬ÄÎÂüĆ죬żĆ¶űÇß×óŇíÖĐĆ죬żĆ¶űÇß×óŇíşóĆ죬»ôÁÖąůŔŐŁ¬ÔúÂłĚŘĆě +0476:łŕ·ĺŁ¬ż¦Ŕ®Çߣ¬°˘ÂłżĆ¶űÇßĆ죬°˝şşĆ죬ÄţłÇŁ¬ÁÖÎ÷Ł¬żËʲżËĚÚĆ죬°ÍÁÖ×óĆ죬°ÍÁÖÓŇĆ죬ÎĚŃŔĚŘĆě +0477:¶«Ę¤Ł¬×Ľ¸ń¶űŁ¬şĽ˝őĆ죬¶őÍĐżËĆ죬ŇÁ˝đ»ôÂĺĆ죬´ďŔ­ĚŘĆ죬ÎÚÉóŁ¬Ń¦ĽŇÍĺ +0478:ÁŮşÓŁ¬şĽ˝őşóĆ죬ÎĺÔ­Ł¬íăżÚŁ¬ÎÚŔ­ĚŘÇ°Ć죬ÎÚŔ­ĚŘÖĐĆ죬ÎÚŔ­ĚŘşóĆě +0479:ÎýÁÖşĆĚŘŁ¬ËŐÄáĚŘ×óĆ죬ËŐÄáĚŘÓŇĆ죬¶ţÁ¬şĆĚŘŁ¬Ďâ»ĆĆ죬¶«ÎÚÖéÄÂÇßĆ죬Î÷ÎÚÖéÄÂÇßĆ죬°˘°Í¸ÂŁ¬ŐýĎâ°×Ł¬ŐýŔ¶Ć죬¶ŕÂף¬Ě«ĆÍË +0482:ÎÚŔĽşĆĚŘŁ¬ÔúęăĚŘĆ죬°˘¶űÉ˝Ł¬żĆ¶űÇßÓŇŇíÖĐĆ죬ͻȪ +0483:°˘Ŕ­ÉĆ×óĆ죬°˘Ŕ­ÉĆÓŇĆ죬¶îĽĂÄÉĆě +024:ÉňŃôŁ¬ĐÂĂńŁ¬ÁÉÖĐŁ¬żµĆ˝Ł¬·¨żâ +0410:ĚúÁ룬˛ýÍĽŁ¬Ěú·¨Ł¬żŞÔ­Ł¬Î÷·áŁ¬ĚúÁëĎŘ +0411:´óÁ¬Ł¬×ŻşÓŁ¬ĆŐŔĽµęŁ¬Íß·żµęŁ¬ł¤şŁ +0412:°°É˝Ł¬şŁłÇŁ¬Ě¨°˛Ł¬á¶ŃŇ +0413:¸§ËłŁ¬ÇĺÔ­Ł¬Đ±öŁ¬¸§ËłĎŘ +0414:±ľĎŞŁ¬±ľĎŞĎŘŁ¬»¸ČĘ +0415:µ¤¶«Ł¬·ďłÇŁ¬¶«¸ŰŁ¬żíµé +0416:˝őÖÝŁ¬Á躣Ł¬ŇĺĎŘŁ¬±±ÄţŁ¬şÚÉ˝ +0417:ÓŞżÚĘĐŁ¬´óĘŻÇĹŁ¬¸ÇÖÝ +0418:¸·ĐÂŁ¬¸·ĐÂĎŘŁ¬ŐĂÎä +0419:ÁÉŃôŁ¬ÁÉŃôĎŘŁ¬µĆ´î +0421:łŻŃôĘĐŁ¬łŻŃôĎŘŁ¬˝¨Ć˝Ł¬±±Ć±Ł¬ÁčÔ´Ł¬ż¦×ó +0427:ĹĚ˝őŁ¬´óÍÝŁ¬ĹĚÉ˝ +0429:şů«µşŁ¬Đ˳ǣ¬ËçÖĐŁ¬˝¨˛ý +0431:ł¤´şŁ¬µÂ»ÝŁ¬Ĺ©°˛Ł¬ľĹ̨Ł¬ÓÜĘ÷ +0432:ĽŞÁÖĘĐŁ¬ÓŔĽŞŁ¬íŕĘŻŁ¬čëµéŁ¬ňÔşÓŁ¬ĘćŔĽ +0433:ŃÓĽŞĘĐŁ¬ÍôÇ壬şÍÁúŁ¬¶Ř»ŻŁ¬°˛ÍĽŁ¬ÍĽĂĹŁ¬Áúľ® +0434:ËÄĆ˝ĘĐŁ¬Ë«ÁÉŁ¬ŔćĘ÷Ł¬ŇÁͨŁ¬ą«Ö÷Áë +0435:ͨ±±Ł¬Í¨»ŻĎŘŁ¬ĽŻ°˛ +0436:°×łÇŁ¬ä¬ÄĎŁ¬Őňę㣬ͨÓÜŁ¬´ó°˛ +0437:ÁÉÔ´Ł¬¶«·á +0438:ËÉÔ­Ł¬Ç°ąůŁ¬ł¤Á룬Ǭ°˛Ł¬·öÓŕ +0439:°×É˝Ł¬˝­Ô´Ł¬ÁŮ˝­Ł¬ľ¸Ó࣬ł¤°×Ł¬¸§ËÉ +0440:çő´ş +0448:Ă·şÓżÚŁ¬ÁřşÓŁ¬»ÔÄĎ +0451:ąţ¶ű±őŁ¬Í¨şÓŁ¬·˝ŐýŁ¬ÉĐÖľŁ¬ŃÓĘŮŁ¬Ë«łÇŁ¬Őض«Ł¬şôŔĽŁ¬±öĎŘŁ¬ÄľŔĽŁ¬Î峣Ł¬°ÍŃ壬°˘łÇŁ¬ŇÂŔĽ +0452:ĆëĆëąţ¶űŁ¬żËÉ˝Ł¬°ÝČŞŁ¬ŇŔ°˛Ł¬Áú˝­Ł¬Ú«şÓŁ¬¸ĘÄĎŁ¬¸»ÔŁŁ¬żË¶«Ł¬Ě©Ŕ´ +0453:ĵµ¤˝­Ł¬ÁÖżÚŁ¬ÄÂŔ⣬¶«ÄţŁ¬şŁÁÖŁ¬Äţ°˛Ł¬Ëç·ŇşÓŁ¬»˘ÁÖŁ¬Ľ¦¶«Ł¬Ľ¦Î÷Ł¬ĂÜÉ˝Ł¬Ćß̨şÓŁ¬˛ŞŔű +0454:ĽŃľ˹Ł¬ĚŔÔ­Ł¬čëÄĎŁ¬¸»˝őŁ¬¸§Ô¶Ł¬čë´¨Ł¬Í¬˝­Ł¬ŇŔŔĽŁ¬ČÄşÓŁ¬ş×¸ÚŁ¬Âܱ±Ł¬Ëç±őŁ¬Ë«ŃĽÉ˝Ł¬ÓŃŇ꣬±¦Ç壬ĽŻĎÍ +0456:şÚşÓŁ¬±±°˛Ł¬ËďÎ⣬ѷżËŁ¬µÂ¶ĽŁ¬ÄŰ˝­Ł¬Îĺ´óÁ¬łŘŁ¬ĽÓ¸ń´ďĆ棬ËţşÓŁ¬şôÂ꣬ĮşÓ +0457:´óĐË°˛Áë +0458:ŇÁ´şŁ¬ĽÎŇńŁ¬ĚúÁ¦Ł¬Ë绯Ł¬Çě°˛Ł¬şŁÂף¬ËçŔ⣬ÍűżüŁ¬ŔĽÎ÷Ł¬Ă÷Ë®Ł¬Çŕ¸Ú +0459:´óÇ죬¶Ĺ¶ű˛®ĚŘŁ¨Ě©żµŁ©Ł¬Áֵ飬ŐŘÖÝŁ¬ŐŘÔ´Ł¬°˛´ď +025:ÄĎľ©ĘĐŁ¬ÁůşĎŁ¬˝­ÄţŁ¬˝­ĆÖŁ¬¸ß´ľŁ¬äŕË® +0510:ÎŢÎýŁ¬ÎŢÎýĎŘŁ¬˝­ŇőŁ¬ŇËĐË +0511:Őň˝­Ł¬µ¤Í˝Ł¬µ¤ŃôŁ¬ŃďÖĐŁ¬ľäČÝ +0512:ËŐÖÝŁ¬ÎâĎŘŁ¬Îâ˝­ +0513:ÄĎͨĘĐŁ¬Čç¸ŢŁ¬Č綫Ł¬Í¨ÖÝĘĐŁ¬şŁĂĹŁ¬Ćô¶«Ł¬şŁ°˛ +0514:ŃďÖÝŁ¬Úő˝­Ł¬˝­¶ĽŁ¬ŇÇŐ÷Ł¨ńăĆÖŁ©Ł¬±¦Ó¦Ł¬¸ßÓĘ +0515:Ńγǣ¬¶«Ě¨Ł¬´ó·áŁ¬ÉäŃôŁ¬±őşŁŁ¬ĎěË®Ł¬¸·ÄţŁ¬˝¨şţ +0516:ĐěÖÝŁ¬Í­É˝Ł¬îˇÄţŁ¬ÚüÖÝŁ¬ĐÂŇĘŁ¬ĹćĎŘŁ¬·áĎŘ +0517:»´ŇőŁ¬»´ŇőĎŘŁ¬»´°˛Ł¬˝đşţŁ¬şéÔóŁ¬Á°Ë®Ł¬íěíô +0518:Á¬ÔƸۣ¬ąŕÔĆŁ¬¶«şŁŁ¬¸ÓÓÜŁ¬ąŕÄĎ +0519:łŁÖÝŁ¬Îä˝řŁ¬˝đĚłŁ¬äŕŃô +0520:łŁĘ죬ŐżҸۣ¬Ě«˛ÖŁ¬ŔĄÉ˝ +0523:Ě©ÖÝŁ¬ľ¸˝­Ł¬ĐË»ŻŁ¬Ě©ĐËŁ¬˝ŞŃß +0527:ăđŃôŁ¬ËŢǨŁ¬ăôŃôŁ¬ăôşé +0531:ĽĂÄĎŁ¬ł¤Ç壬ŐÂÇđŁ¬ÉĚşÓŁ¬ĽĂŃôŁ¬Ć˝Ňő +0530:şÉÔ󣬾ŢŇ°Ł¬¶¨ĚŐŁ¬łÉÎ䣬µĄĎŘŁ¬˛ÜĎŘŁ¬¶«Ă÷Ł¬Ű˛łÇŁ¬Ű©łÇ +0532:ÇൺŁ¬˝şÄĎŁ¬˝şÖÝŁ¬Ć˝¶ČŁ¬ŔłÎ÷Ł¬Ľ´Ä« +0533:×Ͳ©Ł¬»¸Ě¨Ł¬¸ßÇ࣬ŇĘÔ´Ł¬ +0534:µÂÖÝŁ¬ÇěÔĆŁ¬ĎÄ˝ňŁ¬ĆëşÓŁ¬ÁęĎŘŁ¬Ć˝Ô­Ł¬ÎäłÇŁ¬Äţ˝ňŁ¬ŔÖÁ꣬ÁŮŇŘŁ¬ÓíłÇ +0535:ŃĘ̌Ł¬ŐĐÔ¶Ł¬ŔłŃôŁ¬şŁŃôŁ¬ł¤µşŁ¬ŔłÖÝŁ¬ÁúżÚŁ¬ĹîŔłŁ¬ĆÜĎĽŁ¬Ä˛Ć˝ +0536:Ϋ·»Ł¬Ęٹ⣬˛ýÓíŁ¬¸ßĂÜŁ¬ÖîłÇŁ¬°˛ÇđŁ¬ëÔÁŮŁ¬ÇŕÖÝŁ¬˛ýŔÖ +0537:ĽĂÄţŁ¬ÁşÉ˝Ł¬Çú¸·Ł¬ŮđÖÝŁ¬×޳ǣ¬˝đĎ磬΢ɽŁ¬Óą̆Ł¬ĽÎĎ飬ăôË®Ł¬ăëÉĎ +0538:Ě©°˛Ł¬ĐÂĚ©Ł¬ÄţŃôŁ¬¶«Ć˝Ł¬·ĘłÇ +0539:ÁŮŇĘŁ¬˛ÔÉ˝Ł¬Ć˝ŇŘŁ¬ĂÉŇőŁ¬ŇĘË®Ł¬ŇĘÄĎŁ¬ÜěÄĎŁ¬ÁŮăđŁ¬Ű°łÇŁ¬·ŃĎŘŁ¬ +0543:±őÖÝŁ¨»ÝĂńŁ©Ł¬˛©ĐËŁ¬×ŢĆ˝Ł¬»ÝĂńĎŘŁ¬ÎŢ馣¬Ő´»ŻŁ¬ŃôĐĹ +0546:¶«ÓŞŁ¬Ŕű˝ňŁ¬ąăČÄŁ¬żŃŔű +0631:ÍţşŁĘĐŁ¬Čٳɣ¬Îĵǣ¬ČéÉ˝ +0632:ÔćׯŁ¬ëřÖÝ +0633:ČŐŐŐŁ¬ÎĺÁ«Ł¬ÜěĎŘ +0634:ŔłÎß +0635:Áijǣ¬ÁŮÇ壬¸ßĚĆŁ¬ÜÝĆ˝Ł¬¶«°˘Ł¬ŃôąČŁ¬Ý·ĎŘŁ¬ąÚĎŘ +0551:şĎ·ĘŁ¬·ĘÎ÷Ł¬·Ę¶«Ł¬ł¤·á +0550:łüÖÝŁ¬Č«˝·Ł¬Ě쳤Ł¬Ŕ´°˛Ł¬¶¨Ô¶Ł¬·ďŃôŁ¬Ă÷ąâŁ¨ĽÎÉ˝Ł© +0552:°ö˛şŁ¬»łÔ¶Ł¬ÎĺşÓŁ¬ąĚŐň +0553:ÎßşţŁ¬ÎßşţĎŘŁ¬·±˛ýŁ¬ÄĎÁę +0554:»´ÄĎŁ¬·ď̨ +0555:Âí°°É˝Ł¬µ±Íż +0556:°˛Ç죬»łÄţŁ¬čČŃôŁ¬Í©łÇŁ¬Íű˝­Ł¬Ç±É˝Ł¬ËŢËÉŁ¬ÔŔÎ÷Ł¬Ě«şţ +0557:ËŢÖÝŁ¬ĎôĎŘŁ¬Áé±ÚŁ¬ăôĎŘŁ¬í¸É˝ +0558:¸·ŃôŁ¬şÁÖÝŁ¬¸·ÄĎŁ¬Ăɳǣ¬ÎĐŃôŁ¬ŔűĐÁŁ¬˝çĘף¬ňŁÉĎŁ¬Ě«şÍŁ¬ÁŮČŞ +0559:»ĆÉ˝Ł¬ĐÝÄţŁ¬÷đĎŘŁ¬Ě«Ć˝Ł¬ĆîĂĹŁ¬ě¨ĎŘ +0561:»´±±Ł¬ĺˇĎŞ +0562:Í­Á꣬ͭÁęĎŘ +0563:ĐűłÇŁ¬ăţĎŘŁ¬ąăµÂŁ¬ŔÉĎŞŁ¬ÄţąúŁ¬ěşµÂŁ¬Ľ¨ĎŞ +0564:Áů°˛Ł¬ĘćłÇŁ¬˝đŐŻŁ¬ĘŮĎŘŁ¬»ôÇńŁ¬»ôÉ˝ +0565:ł˛şţŁ¬ÎŢÎŞŁ¬şÍĎŘŁ¬ş¬É˝Ł¬Â®˝­ +0566:ąółŘŁ¬ÇŕŃôŁ¬¶«ÖÁŁ¬ĘŻĚ¨ +0571:şĽÖÝŁ¬ÓຼŁ¬ĎôÉ˝Ł¬¸»ŃôŁ¬Í©Â®Ł¬˝¨µÂŁ¬´ľ°˛Ł¬ÁŮ°˛ +0570:áéÖÝŁ¬áéĎŘŁ¬˝­É˝Ł¬łŁÉ˝Ł¬żŞ»ŻŁ¬ÁúÓÎ +0572:şţÖÝŁ¬µÂÇ壬°˛ĽŞŁ¬ł¤ĐË +0573:ĽÎĐËŁ¬ĽÎÉĆŁ¬Ć˝şţŁ¬şŁÄţŁ¬Í©Ď磬şŁŃÎ +0574:Äţ˛¨Ł¬Ű´ĎŘŁ¬ĎóÉ˝Ł¬ÄţşŁŁ¬ÓŕҦŁ¬·î»ŻŁ¬´ČĎŞ +0575:ÉÜĐËĘĐŁ¬ÉÜĐËĎŘŁ¬Öîôߣ¬ÉĎÓÝŁ¬áÓÖÝŁ¬Đ²ý +0576:̨ÖÝŁ¬ÁŮşŁŁ¬ČýĂĹŁ¬ÎÂÁ룬Óń»·Ł¬ĎÉľÓŁ¬Ěę̌ +0577:ÎÂÖÝŁ¬Ĺ·şŁĎŘŁ¬ÓŔĽÎŁ¬¶´Í·Ł¬ŔÖÇ壬Č𰲣¬Ć˝ŃôŁ¬˛ÔÄĎŁ¬Ě©ËłŁ¬ÎÄłÉ +0578:ŔöË®Ł¬çĆÔĆŁ¬ÇŕĚÔƺͣ¬ÇěÔŞŁ¬ÁúČŞŁ¬ËÉŃôŁ¬Ëě˛ýŁ¬ľ°Äţ +0579:˝đ»ŞŁ¬˝đ»ŞĎŘŁ¬ĆÖ˝­Ł¬ŇĺÎÚŁ¬¶«ŃôŁ¬ÓŔżµŁ¬ÎäŇ壬ŔĽĎŞŁ¬ĹÍ°˛ +0580:ÖŰÉ˝Ł¬á·É˝Ł¬áÓăô +0591:¸ŁÖÝŁ¬ĂöşîŁ¬Á¬˝­Ł¬ł¤ŔÖŁ¬ÂŢÔ´Ł¬¸ŁÇ壬ƽ̶Ł¬ÓŔĚ©Ł¬ĂöÇĺ +0592:ĎĂĂĹŁ¬Í¬°˛ĎŘ +0593:ÄţµÂŁ¬¸Ł°˛Ł¬čĎČŮŁ¬¸Ł¶¦Ł¬ąĹĚĆÁÄĎŁ¬ÖÜÄţŁ¬ĘŮÄţŁ¬ĎĽĆÖ +0594:ĆÎĚĆÎĚďĎŘŁ¬ĎÉÓÎ +0595:ČŞÖÝŁ¬ĘŻĘ¨Ł¬˝ú˝­Ł¬»Ý°˛Ł¬ÄĎ°˛Ł¬°˛ĎŞŁ¬ÓŔ´şŁ¬µÂ»Ż +0596:ŐÄÖÝŁ¬»Ş°˛Ł¬ł¤Ě©Ł¬ŐÄĆÖŁ¬¶«É˝Ł¬ÔĆĎöŁ¬Ć˝şÍŁ¬ÚŻ°˛Ł¬ÄĎľ¸Ł¬ÁúşŁ +0597:ÁúŃŇŁ¬ŐÄĆ˝Ł¬ÓŔ¶¨Ł¬ÉĎşĽŁ¬ÎäĆ˝Ł¬ł¤ÍˇŁ¬Á¬łÇ +0598:ČýĂ÷Ł¬ÉłĎŘŁ¬ÓČĎŞŁ¬´óĚÓŔ°˛Ł¬ÇĺÁ÷Ł¬Äţ»ŻŁ¬Ă÷ĎŞŁ¬˝¨ÄţŁ¬Ě©ÄţŁ¬˝«ŔÖ +0599:ÄĎĆ˝Ł¬ËÉĎŞŁ¬ŐţşÍŁ¬Ćֳǣ¬˝¨ę±Ł¬Ëł˛ýŁ¬ÉŰÎ䣬ąâÔóŁ¬ÎäŇÄÉ˝Ł¬˝¨Ńô +0791:ÄϲýŁ¬ÄϲýĎŘŁ¬Đ½¨Ł¬˝řĎÍŁ¬°˛Ňĺ +0792:ľĹ˝­Ł¬Â®É˝Ł¬ĐŢË®Ł¬şţżÚŁ¬ĐÇ×ÓŁ¬Čđ˛ýŁ¬µÂ°˛Ł¬ĹíÔ󣬶Ľ˛ýŁ¬ÓŔĐŢŁ¬ľĹ˝­ĎŘŁ¬ÎäÄţ +0793:ÉĎČÄŁ¬ąă·áŁ¬ćÄÔ´Ł¬Ç¦É˝Ł¬µÂĐËŁ¬˛¨ŃôŁ¬ß®ŃôŁ¬ÓńÉ˝Ł¬ÍňÄ꣬Óŕ¸ÉŁ¬ÉĎČÄĎŘŁ¬şá·ĺ +0794:¸§ÖÝŁ¬ąă˛ýŁ¬¶«Ď磬˝đĎŞŁ¬łçČĘŁ¬Ň˻ƣ¬ŔÖ°˛Ł¬Äϳǣ¬ÄϷᣬŔč´¨Ł¬×ĘĎŞ +0795:ŇË´şŁ¬Éϸߣ¬·îĐÂŁ¬ľ¸°˛Ł¬ÍňÔŘŁ¬Í­ąÄŁ¬Ň˷ᣬŐÁĘ÷Ł¬¸ß°˛Ł¬·áłÇ +0796:ĽŞ°˛Ł¬ĽŞ°˛ĎŘŁ¬ĽŞË®Ł¬Ě©şÍŁ¬°˛¸ŁŁ¬ÓŔĐÂŁ¬Íň°˛Ł¬Ëě´¨Ł¬ÓŔ·áŁ¬Ďż˝­Ł¬ľ®¸ÚÉ˝Ł¬Đ¸ɣ¬Äţ¸Ô +0797:¸ÓÖÝŁ¬¸ÓĎŘŁ¬ÓÚ¶ĽŁ¬ĐËąúŁ¬Äţ¶ĽŁ¬ĘŻłÇŁ¬Čđ˝đŁ¬´óÓ࣬ÉĎÓĚŁ¬łçŇ壬ĐŷᣬÁúÄĎŁ¬¶¨ÄĎŁ¬Č«ÄĎŁ¬°˛Ô¶Ł¬»á˛ýŁ¬Ń°ÎÚŁ¬ÄĎżµ +0798:ľ°µÂŐňŁ¬ŔÖĆ˝Ł¬¸ˇÁş +0799:ĆĽĎ磬Á«»¨ +0790:ĐÂÓ࣬·ÖŇË +0701:ӥ̶Ł¬Óŕ˝­Ł¬ąóĎŞ +0371:ÖŁÖÝŁ¬ÉϽ֣¬ĐÂĂÜŁ¬ÜţŃôŁ¬µÇ·âŁ¬ÖĐIJŁ¬ą®Ň壬ĐÂÖŁ +0370:ÉĚÇđŁ¬ÉĚÇđĎŘŁ¬Óݳǣ¬ĎÄŇŘŁ¬ÓŔłÇŁ¬čϳǣ¬ÄţÁ꣬ĂńȨŁ¬îˇĎŘ +0372:°˛ŃôŁ¬°˛ŃôĎŘŁ¬ÁÖĎŘŁ¬ĚŔŇőŁ¬Äڻƣ¬»¬ĎŘ +0373:ĐÂĎ磬ĐÂĎçĎŘŁ¬ÎŔ»ÔŁ¬ŃÓ˝ňŁ¬Ô­ŃôŁ¬»ńĽÎŁ¬ł¤Ô«Ł¬·âÇ𣬻ÔĎŘ +0374:Đí˛ýŁ¬Đí˛ýĎŘŁ¬ÓíÖÝŁ¬ł¤¸đŁ¬ŰłÁ꣬ĎĺłÇ +0375:Ć˝¶ĄÉ˝Ł¬Îč¸ÖŁ¬ŰŁĎŘŁ¬Ň¶ĎŘŁ¬ÂłÉ˝Ł¬±¦·áŁ¬ČęÖÝ +0376:ĐĹŃôŁ¬ĐĹŃôĎŘŁ¬ÂŢÉ˝ +0377:ÄĎŃôŁ¬·˝łÇŁ¬ÉçĆ죬ĚĆşÓŁ¬ĐÂŇ°Ł¬µËÖÝŁ¬ŐňĆ˝Ł¬ÄĎŐŮŁ¬Í©°ŘŁ¬ÄÚĎ磬ÄĎŃôĎŘŁ¬äŔ´¨Ł¬Î÷Ďż +0378:żŞ·âŁ¬żŞ·âĎŘŁ¬ŔĽżĽŁ¬č˝ĎŘŁ¬Í¨ĐíŁ¬ÎľĘĎ +0379:ÂĺŃôŁ¬ĂĎ˝ňŁ¬ŮČʦŁ¬ŇÁ´¨Ł¬ŇËŃôŁ¬ČęŃôŁ¬áÔĎŘŁ¬čď´¨Ł¬ÂĺÄţŁ¬Đ°˛ +0391:˝ą×÷Ł¬ĐŢÎ䣬ÎäÚ죬ÎÂĎŘŁ¬ĂĎĎŘŁ¬ÇßŃôŁ¬ĽĂÔ´Ł¬˛©°® +0392:ş×±ÚŁ¬żŁĎŘŁ¬äżĎŘ +0393:ĺ§ŃôŁ¬ĺ§ŃôĎŘŁ¬Ě¨Ç°Ł¬·¶ĎŘŁ¬ÄĎŔÖŁ¬Çĺ·á +0394:ÖÜżÚŁ¬ÂąŇŘŁ¬Î÷»ŞŁ¬»´ŃôŁ¬µ¦łÇŁ¬ÉňÇđŁ¬ĎîłÇŁ¬·öąµŁ¬Ě«żµŁ¬ÉĚË® +0395:äđşÓŁ¬ÎčŃôŁ¬ÁŮÓ±Ł¬Ű±łÇ +0396:פÂíµęŁ¬ĂÚŃôŁ¬ËěĆ˝Ł¬ČęÄĎŁ¬Č·É˝Ł¬Î÷Ć˝Ł¬Éϲ̣¬Ć˝Óߣ¬Đ²̣¬ŐýŃô +0397:äę´¨Ł¬Ď˘ĎŘŁ¬ąâÉ˝Ł¬ĐÂĎŘŁ¬»´±őŁ¬ąĚĘĽŁ¬ÉĚłÇ +0398:ČýĂĹĎżŁ¬äųأ¬ŇĺÂíŁ¬Á鱦Ł¬Â¬ĘĎŁ¬ÉÂĎŘ +027:ÎäşşŁ¬Îä˛ýĎŘŁ¬ĐÂÖŢŁ¬˛ĚµéŁ¬»ĆÚé +0710:Ďĺ·®Ł¬ĎĺŃôŁ¬ÔćŃôŁ¬Ň˳ǣ¬ÄĎŐÁŁ¬±ŁżµŁ¬ąČłÇŁ¬ŔĎşÓżÚ +0711:¶őÖÝ +0712:Т¸ĐŁ¬´óÎňŁ¬şş´¨Ł¬Ó¦łÇŁ¬ÔĆĂÎŁ¬°˛Â˝Ł¬ąăË® +0713:»Ć¸ÔŁ¨»ĆÖÝŁ©Ł¬ÂéłÇŁ¬şě°˛Ł¬ä»Ë®Ł¬ÂŢĚӢɽŁ¬Ţ­´şŁ¬»ĆĂ·Ł¬ÎäѨŁ¬ÍĹ·ď +0714:»ĆĘŻŁ¬´óÖÎŁ¬ŃôĐ +0715:ĎĚÄţŁ¬Í¨É˝Ł¬łçŃôŁ¬Í¨łÇŁ¬ĆŃŰߣ¬ĽÎÓă +0716:ľŁÉłĘĐŁ¬ĽŕŔűŁ¬ĘŻĘף¬ą«°˛Ł¬ËÉ×ĚŁ¬şéşţ +0717:Ň˲ýŁ¬Ň˲ýĎŘŁ¬Ô¶°˛Ł¬µ±ŃôŁ¬Ö¦˝­Ł¬Ö¦łÇŁ¬ł¤ŃôŁ¬Îĺ·ĺŁ¬ďöąéŁ¬ĐËÉ˝ +0718:¶÷Ę©Ł¬˝¨ĘĽŁ¬°Í¶«Ł¬ş×·ĺŁ¬Đű¶÷Ł¬Ŕ´·çŁ¬Ď̷ᣬŔű´¨ +0719:Ę®Ńߣ¬ÔÇĎŘŁ¬µ¤˝­żÚŁ¬·żĎŘŁ¬ÖńÉ˝Ł¬ÖńĎŞŁ¬ÔÇÎ÷Ł¬ÉńĹ©ĽÜ +0722:ËćÔ棬ËćÖÝ +0724:ľŁĂĹŁ¬ľ©É˝Ł¬ÖÓĎé +0728:˝­şşŁ¬Ç±˝­Ł¬ĎÉĚŇŁ¬ĚěĂĹ +0731:ł¤ÉłŁ¬ł¤ÉłĎŘŁ¬ÍűłÇŁ¬ÄţĎ磬äŻŃô +0730:ÔŔŃôŁ¬ÁŮĎ棬ÔŔŃôĎŘŁ¬ĎćŇőŁ¬»ŞČÝŁ¬Ć˝˝­Ł¬ăéÂŢ +0732:Ďć̶Ł¬ÉŘÉ˝Ł¬ĎćĎ磬Ďć̶ĎŘ +0733:ÖęÖŢŁ¬ÖęÖÝĎŘŁ¬ŘüĎŘŁ¬˛čÁ꣬ő·Á꣬Ń×Áę +0734:şâŃôŁ¬şâÄĎŁ¬şâŃôĎŘŁ¬ńçŃôŁ¬łŁÄţŁ¬şâ¶«Ł¬ĆŁ¬şâÉ˝ +0735:ł»ÖÝŁ¬×ĘĐËŁ¬ąđ¶«Ł¬ÁŮÎ䣬°˛ČĘŁ¬ČęłÇŁ¬ĽÎşĚŁ¬ąđŃôŁ¬ÓŔĐËŁ¬ŇËŐ +0736:łŁµÂŁ¬şşĘŮŁ¬ĚŇÔ´Ł¬ĘŻĂĹŁ¬ĺ˘ĎŘŁ¬˝ňĘĐŁ¬°˛Ď磬ÁŮĺ˘ +0737:ŇćŃôŁ¬ĚŇ˝­Ł¬ăä˝­Ł¬°˛»ŻŁ¬ÄĎĎŘ +0738:¦µ×Ł¬Ë«·ĺŁ¬Đ»ŻŁ¬Á°Ô´Ł¬ŔäË®˝­ +0739:ÉŰŃôŁ¬É۶«Ł¬ÉŰŃôĎŘŁ¬ĐÂÉŰŁ¬ĐÂÄţŁ¬łÇ˛˝Ł¬Îä¸ÚŁ¬ËçÄţŁ¬¶´żÚŁ¬Âˇ»Ř +0743:ĽŞĘף¬ÁúÉ˝Ł¬ÓŔËłŁ¬±Łľ¸Ł¬»¨Ô«Ł¬ąĹŐÉŁ¬ăňĎŞŁ¬·ď»Ë +0744:Őżҽ磨´óÓąŁ©Ł¬ÉŁÖ˛Ł¬´ČŔű +0745:»ł»ŻŁ¬ÂéŃôŁ¬Ç­ŃôŁ¬äÓĆÖŁ¬Í¨µŔŁ¬ľ¸ÖÝŁ¬»áͬŁ¬Đ»Σ¬ł˝ĎŞŁ¬ăäÁ꣬şé˝­Ł¬ÜĆ˝­ +0746:ÓŔÖÝŁ¬¶«°˛Ł¬ĆîŃôŁ¬ĐÂĚÄţÔ¶Ł¬Ŕ¶É˝Ł¬˝­»ŞŁ¬˝­ÓŔŁ¬µŔĎŘŁ¬Ë«ĹĆ +020:ąăÖÝŁ¬»¨¶ĽŁ¬´Ó»ŻŁ¬ÔöłÇŁ¬·¬Ř® +0660:ÉÇβŁ¬Â˝·áŁ¬şŁ·áŁ¬Â˝şÓ +0661:ł±Ńô +0662:Ńô˝­Ł¬Ńô´şŁ¬Ńô¶«Ł¬ŃôÎ÷ +0663:˝ŇŃôŁ¬»ÝŔ´Ł¬˝ŇÎ÷Ł¬˝Ň¶«Ł¬ĆŐÄţ +0668:ĂŻĂűŁ¬»ŻÖÝŁ¬¸ßÖÝŁ¬ĐĹŇËŁ¬µç°× +0751:Éعأ¬Çú˝­Ł¬ŔÖ˛ýŁ¬ČĘ»ŻŁ¬ĘĽĐËŁ¬ČéÔ´Ł¬Đ·ᣬÄĎĐŰŁ¬ÎĚÔ´ +0752:»ÝÖÝŁ¬»Ý¶«Ł¬˛©ÂŢŁ¬ÁúĂĹŁ¬»ÝŃô +0753:Ă·ÖÝŁ¬Ă·ĎŘŁ¬˝¶Á룬´óĆŇŁ¬·áËłŁ¬Î廪Ł¬ĐËÄţŁ¬Ć˝Ô¶ +0754:ÉÇÍ·Ł¬łÎşŁŁ¬ÄĎ°Ä +0755:ÉîŰÚ +0756:Ö麣Ł¬¶·ĂĹ +0757:·đÉ˝Ł¬ÄĎşŁŁ¬ČýË®Ł¬¸ßĂ÷ +0758:ŐŘÇ죬¸ßŇŞŁ¬ąăÄţŁ¬ËĻᣬµÂÇ죬·âżŞŁ¬»łĽŻ +0759:Őż˝­Ł¬ËěĎŞŁ¬Á®˝­Ł¬Îâ´¨Ł¬ĐěÎĹŁ¬Ŕ×ÖÝŁ¨şŁżµŁ© +0750:˝­ĂĹŁ¬Đ»ᣬ̨ɽŁ¬żŞĆ˝Ł¬¶÷Ć˝Ł¬ş×É˝ +0760:ÖĐÉ˝ +0762:şÓÔ´Ł¬¶«Ô´Ł¬Á¬Ć˝Ł¬şÍĆ˝Ł¬Áú´¨Ł¬×Ď˝đ +0763:ÇĺÔ¶Ł¬·đ¸ÔŁ¬Ó˘µÂŁ¬ÇĺĐÂŁ¬Á¬É˝Ł¬ŃôÉ˝Ł¬Á¬ÄĎŁ¬Á¬ÖÝ +0765:ËłµÂ +0766:ÔƸˇŁ¬Â޶¨Ł¬ĐÂĐËŁ¬ÓôÄĎ +0768:ł±ÖÝŁ¬ł±°˛Ł¬ČÄĆ˝ +0769:¶«Ý¸ +0771:ÄĎÄţŁ¬çßÄţŁ¬ÎäĂůŁ¬şáĎŘŁ¬±öŃôŁ¬ÉĎÁÖŁ¬łç×óŁ¬ÄţĂ÷Ł¬ÂíÉ˝Ł¬ÁúÖÝŁ¬´óĐÂŁ¬ĚěµČŁ¬Âˇ°˛Ł¬·öË磬ƾĎé +0770:·ŔłÇ¸ŰŁ¬ÉĎËĽŁ¬¶«ĐË +0772:ÁřÖÝŁ¬Ář˝­Ł¬ÂąŐŻŁ¬ÁřłÇŁ¬Čý˝­Ł¬ČÚ°˛Ł¬ČÚË®Ł¬˝đĐ㣬Ŕ´±öŁ¬Đóǣ¬şĎÉ˝Ł¬ÎäĐűŁ¬ĎóÖÝ +0773:ąđÁÖŁ¬Áé´¨Ł¬ŃôË·Ł¬ÁŮąđŁ¬ŔóĆÖŁ¬Ć˝ŔÖŁ¬ÓŔ¸ŁŁ¬ą§łÇŁ¬ąŕŃôŁ¬ĐË°˛Ł¬Č«ÖÝŁ¬ÁúʤŁ¬×ĘÔ´ +0774:ÎŕÖÝŁ¬˛ÔÎ࣬ĚŮĎŘŁ¬áŻĎŞŁ¬ŐŃĆ˝Ł¬ĂÉÉ˝Ł¬şŘĎŘŁ¬ÖÓÉ˝Ł¬¸»´¨ +0775:ÓńÁÖŁ¬ČÝĎŘŁ¬±±Á÷Ł¬Â˝´¨Ł¬˛©°×Ł¬ąđĆ˝Ł¬Ć˝ÄĎŁ¬ąó¸Ű +0776:°ŮÉ«Ł¬ĚďÁÖŁ¬ÂˇÁÖŁ¬Î÷ÁÖŁ¬ÁčÔĆŁ¬ŔÖҵŁ¬ĚďŃôŁ¬ĚﶫŁ¬Ć˝ąűŁ¬µÂ±ŁŁ¬ÄÇĆÂŁ¬ľ¸Î÷ +0777:ÇŐÖÝŁ¬ÁéÉ˝Ł¬ĆÖ±± +0778:şÓłŘŁ¬ŇËÖÝŁ¬Â޳ǣ¬»·˝­Ł¬Äϵ¤Ł¬´ó»ŻŁ¬¶Ľ°˛Ł¬¶«ŔĽŁ¬·ďÉ˝Ł¬Ěě¶ëŁ¬°ÍÂí +0779:±±şŁŁ¬şĎĆÖ +0898:şŁżÚŁ¬ÇíÉ˝Ł¬łÎÂőŁ¬¶¨°˛Ł¬ÎIJýŁ¬ÍͲýŁ¬ÇíşŁŁ¬ÍňÄţ +0899:ČýŃÇŁ¬ÁęË®Ł¬ÇíÖĐŁ¬±ŁÍ¤Ł¬Í¨Ę˛Ł¬ŔÖ¶« +0890:ŮŮĎŘŁ¬ŃóĆÖŁ¬°×ÉłŁ¬¶«·˝Ł¬˛ý˝­Ł¬ÁŮ¸ß +028:łÉ¶ĽŁ¬Î½­Ł¬Đ½ňŁ¬ŰŻĎŘŁ¬Đ¶ĽŁ¬ĹíÖÝŁ¨ĹíĎŘŁ©Ł¬¶Ľ˝­Ńߣ¬łçÖÝŁ¨łçÇ죩Ł¬´óŇŘŁ¬ÚöáÁŁ¬ĆŃ˝­Ł¬˝đĚĂŁ¬Ë«Á÷ +0812:ĹĘÖ¦»¨Ł¬Ă×Ňף¬Ń뱧 +0813:×Ôą±Ł¬¸»ËłŁ¬ČŮĎŘ +0816:ĂŕŃôŁ¬°˛ĎŘŁ¬˝­ÓÍŁ¬č÷äüŁ¬Ć˝Î䣬Čý̨Ł¬ŃÎͤ +0817:Äϳ䣬Î÷łäŁ¬ÄϲżŁ¬ăĎÖĐŁ¬ÓŞÉ˝Ł¬Ĺî°˛Ł¬ŇǤ +0818:´ď´¨Ł¨´ďĎŘŁ©Ł¬ĐűşşŁ¬żŞ˝­Ł¬ÍňÔ´Ł¬´óÖńŁ¬ÇţĎŘ +0825:ËěÄţŁ¬ĹîĎŞŁ¬Éäşé +0826:ąă°˛Ł¬ÔŔłŘŁ¬ÎäʤŁ¬»ŞÝöŁ¬ÁÚË® +0827:°ÍÖĐŁ¬Ć˝˛ýŁ¬Í¨˝­Ł¬ÄĎ˝­ +0830:ăňÖÝŁ¬ÄÉĎŞŁ¬ĐđÓŔŁ¬ąĹÝţŁ¬şĎ˝­ +0831:Ň˱öŁ¬Ň˱öĎŘŁ¬ÄĎĎŞŁ¬ĆÁÉ˝Ł¬ĐËÎÄŁ¬ł¤ÄţŁ¬çîĎŘŁ¬¸ßĎŘŁ¬óŢÁ¬Ł¬˝­°˛ +0832:ÄÚ˝­Ł¬×ĘÖĐŁ¬×ĘŃôŁ¬ĽňŃôŁ¬ÍţÔ¶Ł¬Âˇ˛ýŁ¬°˛ÔŔŁ¬ŔÖÖÁ +0833:ŔÖÉ˝Ł¬ĂĽÉ˝Ł¬ČĘĘŮŁ¬ľ®ŃĐŁ¬şéŃĹŁ¬¶ë±ßŁ¬ăĺ´¨Ł¬ĹíÉ˝Ł¬ÇŕÉńŁ¬µ¤Ŕ⣬¶ëáŇÉ˝Ł¬Âí±ßŁ¬ęůÎŞŁ¬ĽĐ˝­Ł¬˝đżÚşÓ +0834:Î÷˛ýŁ¬ÄţÄĎŁ¬ŃÎÔ´Ł¬ŐŃľőŁ¬¸ĘÂ壬»áŔíŁ¬»á¶«Ł¬ĂáÄţŁ¬µÂ˛ýŁ¬ÄľŔԽÎ÷Ł¬Ŕײ¨Ł¬Ď˛µÂŁ¬ĆŐ¸ńŁ¬˛ĽÍĎŁ¬˝đŃôŁ¬ĂŔąĂ +0835:ŃĹ°˛Ł¬ĘŻĂŢŁ¬±¦ĐËŁ¬ĂűÉ˝Ł¬Üţľ­Ł¬şşÔ´Ł¬ĚěČ«Ł¬Â«É˝ +0836:żµ¶¨ +0837:Âí¶űżµŁ¬˝đ´¨Ł¬°˘°ÓŁ¬şěÔ­Ł¬Čô¶ű¸ÇŁ¬şÚË®Ł¬ČŔĚÁŁ¬ŔíĎŘŁ¬ăë´¨Ł¬ĂŻĎŘŁ¬ËÉĹËŁ¬Đˇ˝đŁ¬ľĹŐŻąµĎŘŁ¨ÄĎĆşŁ© +0838:µÂŃôŁ¬ąăşşŁ¬Ę˛ÚúŁ¬ĂŕÖńŁ¬ÖĐ˝­ +0839:ąăÔŞŁ¬˝Ł¸óŁ¬Íú˛ÔŁ¬Çŕ´¨Ł¬˛ÔĎŞ +023:ÖŘÇěĘĐŁ¬˝­±±Ł¬°ÍĎŘŁ¬±±íŐŁ¬ÓŔ´¨Ł¬ôë˝­Ł¬ł¤ĘŮŁ¬ÄĎÍ©Ł¬Ë«ÇĹŁ¬˝­˝ňŁ¬şĎ´¨Ł¬äüÄĎŁ¬Í­ÁşŁ¬±ÚÉ˝Ł¬ČٲýŁ¬´ó×㣬ǭ˝­Ł¬ĹíË®Ł¬ĐăÉ˝Ł¬ÓĎŃôŁ¬ÍňĎŘŁ¬żŞĎŘŁ¬Á»Ć˝Ł¬ÖŇĎŘŁ¬ÔĆŃôŁ¬·î˝ÚŁ¬Î×É˝Ł¬Î×ĎŞŁ¬łÇżÚŁ¬ÄĎ´¨Ł¬·á¶ĽŁ¬ĘŻÖůŁ¬µć˝­Ł¬Îä¡Ł¬¸˘Áę +0871:˛ýĂ÷Ł¬Â·ÄĎŁ¬˝úÄţŁ¬łĘą±Ł¬ŇËÁĽŁ¬°˛ÄţŁ¬áÔĂ÷Ł¬¸»ĂńŁ¬Â»Č°Ł¬¶«´¨Ł¬Ń°µé +0691:ľ°şéŁ¬ŰÂşŁŁ¬ŰÂŔ° +0692:ÂşÎ÷Ł¬ČđŔöŁ¬îµî®Ł¬ÓŻ˝­Ł¬Â¤´¨Ł¬ÁşşÓ +0872:´óŔíŁ¬±ö´¨Ł¬Ăֶɣ¬ÄĎ˝§Ł¬˝Ł´¨Ł¬ş×Ç죬ĎéÔĆŁ¬Ńú娣¬¶ýÔ´Ł¬ÓŔĆ˝Ł¬ÎˇÉ˝Ł¬ÔĆÁú +0873:¸öľÉŁ¬ĘŻĆÁŁ¬ĂÖŔŐŁ¬şěşÓŁ¬żŞÔ¶Ł¬ĂÉ×ÔŁ¬˝¨Ë®Ł¬şÓżÚŁ¬ăňÎ÷Ł¬ÔŞŃôŁ¬ĆÁ±ßŁ¬˝đĆ˝Ł¬ÂĚ´ş +0874:Çúľ¸Ł¬ÂíÁúŁ¬Ę¦×ÚŁ¬¸»Ô´Ł¬Â˝ÁĽŁ¬ÂŢĆ˝Ł¬ĐűÍţŁ¬»áÔó +0875:±ŁÉ˝Ł¬˛ýÄţŁ¬Ěڳ壬ÁúÁ꣬ʩµé +0876:ÎÄÉ˝Ł¬Ç𱱣¬ąăÄĎŁ¬¸»ÄţŁ¬ÂíąŘŁ¬ŃâÉ˝Ł¬Î÷łëŁ¬ÂéŔőĆ +0877:ÓńĎŞŁ¬»ŞÄţŁ¬ÔŞ˝­Ł¬Í¨şŁŁ¬Ň×ĂĹŁ¬łÎ˝­Ł¬¶ëÉ˝Ł¬ĐÂĆ˝Ł¬˝­´¨ +0878:łţĐŰŁ¬Ň¦°˛Ł¬Ë«°ŘŁ¬ÓŔČĘŁ¬Â»·áŁ¬´óҦŁ¬ÄĎ»ŞŁ¬Ä˛¶¨Ł¬Î䶨Ł¬ÔŞÄ± +0879:ËĽĂ©Ł¬Ä«˝­Ł¬Ŕ˝˛×Ł¬ľ°ąČŁ¬˝­łÇŁ¬ľ°¶«Ł¬Î÷ĂËŁ¬ĂĎÁ¬Ł¬ĆŐ¶ýŁ¬Őňăä +0870:ŐŃͨŁ¬ŃνňŁ¬Ëç˝­Ł¬Ë®¸»Ł¬ŐňĐŰŁ¬ÂłµéŁ¬´óąŘŁ¬ÇÉĽŇŁ¬ŇÍÁĽŁ¬ÓŔÉĆŁ¬ÍţĐĹ +0883:Áٲף¬˛×Ô´Ł¬·ďÇ죬ÔĆĎŘŁ¬Ë«˝­Ł¬ą˘ÂíŁ¬ŐňżµŁ¬ÓŔµÂ +0886:ÁůżâŁ¬ăňË®Ł¬¸Łą±Ł¬ą±É˝Ł¬ŔĽĆş +0887:Öе飬άÎ÷Ł¬µÂÇŐ +0888:Ŕö˝­Ł¬ÄţÝőŁ¬»ŞĆşŁ¬ÓŔʤ +0851:ąóŃôŁ¬ÇĺŐňŁ¬ĐŢÎÄŁ¬Ď˘·éŁ¬żŞŃô +0852:×ńŇ壬ϰˮŁ¬µŔŐ棬ͩč÷Ł¬łŕË®Ł¬ËçŃôŁ¬Őý°˛Ł¬äŘ̶Ł¬·ď¸ÔŁ¬Îń´¨Ł¬×ńŇĺĎŘŁ¬ÓŕÇ죬ČĘ»ł +0853:°˛ËłŁ¬×ĎÔĆŁ¬Ć˝°ÓŁ¬ąŘÁ룬ŐňÄţŁ¬ĆŐ¶¨ +0854:¶ĽÔČŁ¬¸ŁČŞŁ¬ÎÍ°˛Ł¬Čý¶ĽŁ¬Ŕ󲨣¬¶ŔÉ˝Ł¬Ć˝ĚÁŁ¬Â޵飬»ÝË®Ł¬ÁúŔąó¶¨Ł¬ł¤Ëł +0855:ż­Ŕ»ĆĆ˝Ł¬Ę©±üŁ¬ŐňÔ¶Ł¬áŻą®Ł¬ČýË룬ĚěÖůŁ¬˝őĆÁŁ¬ŔčĆ˝Ł¬´Ó˝­Ł¬éĹ˝­Ł¬Ŕ×É˝Ł¬µ¤ŐŻŁ¬Âé˝­Ł¬Ě¨˝­Ł¬˝ŁşÓ +0856:Í­ČĘŁ¬ÓńĆÁŁ¬˝­żÚŁ¬ĘŻÚ䣬˼ÄĎŁ¬Óˇ˝­Ł¬µÂ˝­Ł¬ŃŘşÓŁ¬ËÉĚŇŁ¬ÍňÉ˝ +0857:±Ď˝ÚŁ¬ÍţÄţŁ¬şŐŐÂŁ¬ÄÉÓşŁ¬Ç­Î÷Ł¬´ó·˝Ł¬˝đÉłŁ¬ÖŻ˝đ +0858:ÁůĹĚË®Ł¬ÁůÖ¦Ł¬ĹĚĎŘŁ¬Ë®łÇ +0859:ĐËŇ壬Çç¡Ł¬˛áşŕŁ¬ÍűÚÓŁ¬°˛ÁúŁ¬ĐËČĘŁ¬Őę·áŁ¬ĆŐ°˛ +0891:Ŕ­Čř +0892:ČŐż¦Ôň +0893:É˝ÄĎ +0894:ÁÖÖĄ +0895:˛ý¶Ľ +0896:ÄÇÇú +0897:°˘Ŕď +08015:¶ŃÁúµÂÇě +08016:ÇúË® +08017:ÄáÄľ +08018:ČʲĽ +08020:Čř¸Â +08023:¸Ú°Í +08024:ČřĺČ +08025:¶¨˝á +08026:¶¨ČŐ +08027:ÄôŔ­Äľ +08028:ĽŞÂˇ +08029:ÖŮ°Í +08030:´íÄÇ +08031:°şČĘ +08032:Ŕ­×Î +08033:лͨĂĹ +08034:ÄĎÄľÁÖ +08038:¡×Ó +08044:Ä«ÍŃ +08047:ÂĺÔú +08048:ŔËż¨×Ó +08049:ą±¸Â +08050:ŔŕÎÚĆë +08051:˝­´ď +08053:ą±ľő +08054:âżµ +08055:×óą± +08056:°ËËŢ +08057:Âĺ¡ +08058:±ß°Ó +08059:¶ˇÇŕ +08060:ĆŐŔĽ +08061:°ÍÇŕ +08062:±ČČç +08063:ĽÎŔč +08065:ÄôČŮ +08067:°ŕ¸ę +08068:ÉęÔú +08069:´ëÇÚ +08070:Ë«şţ +08071:Ôú´ď +08072:¸ďĽŞ +08074:ŐÁÄľ +08075:ČŐÍÁ +08076:¸ÄÔň +08077:´ëĂŔ +08078:Ë÷ĎŘ +08081:ÄáÂę +08082:ŃÎľ® +029:Î÷°˛Ł¬ł¤°˛Ł¬»§ĎŘŁ¬ÖÜÖÁŁ¬Ŕ¶ĚÁŮäüŁ¬¸ßÁę +0910:ĎĚŃôŁ¬ÓŔĘŮŁ¬Ç¬ĎŘŁ¬Î书Ł¬ĐËĆ˝Ł¬±ňĎŘŁ¬ČýÔ­Ł¬ăţŃôŁ¬ŔńČŞŁ¬Ń®ŇŘŁ¬´ľ»ŻŁ¬ł¤Îä +0911:ŃÓ°˛Ł¬»ĆÁ꣬ŃÓ´¨Ł¬×Ół¤Ł¬ŃÓł¤Ł¬ÎâĆ죬¸»ĎŘŁ¬»ĆÁúŁ¬ŇË´¨Ł¬Âĺ´¨Ł¬Öľµ¤Ł¬¸ĘČŞŁ¬°˛Čű +0912:ÓÜÁÖŁ¬ÎⱤŁ¬×ÓÖÝŁ¬ĽŃĎŘŁ¬¸®ąČŁ¬şáÉ˝Ł¬Ă×Ö¬Ł¬ËçµÂŁ¬¶¨±ßŁ¬ľ¸±ßŁ¬ÉńÄľŁ¬Ç彧 +0913:ÎĽÄĎŁ¬»ŞĎŘŁ¬´óŔ󣬻ŞŇőŁ¬äüąŘŁ¬¸»Ć˝Ł¬łÎłÇŁ¬ş«łÇŁ¬Ćѳǣ¬şĎŃôŁ¬°×Ë® +0914:ÉĚÖÝŁ¨ÉĚÂ壩Ł¬µ¤·ďŁ¬ÂĺÄĎŁ¬ÉĚÄĎŁ¬×őË®Ł¬Őň°˛Ł¬É˝Ńô +0915:°˛żµŁ¬Ć˝ŔűŁ¬á°¸ŢŁ¬ÄţÉÂŁ¬şşŇőŁ¬Ń®ŃôŁ¬×ĎŃôŁ¬ĘŻČŞŁ¬°×şÓŁ¬ŐňĆş +0916:şşÖĐŁ¬ÄĎÖŁŁ¬łÇąĚŁ¬ŃóĎŘŁ¬Î÷Ď磬Őň°ÍŁ¬ĂăĎŘŁ¬Áô°ÓŁ¬·đĆşŁ¬ÄţÇżŁ¬ÂÔŃô +0917:±¦Ľ¦Ł¬·ö·çŁ¬·ďĎŘŁ¬Â¤ĎŘŁ¬Ç§ŃôŁ¬Ě«°×Ł¬÷ëÓÎŁ¬ĂĽĎŘŁ¬·ďĎ裬áŞÉ˝Ł¬±¦Ľ¦ĎŘŁ¬ +0919:Í­´¨Ł¬ŇËľýŁ¬Ň«ĎŘ +0931:ŔĽÖÝŁ¬şěąĹÇřŁ¬¸ŢŔĽŁ¬ÓÜÖĐŁ¬ÓŔµÇ +0930:ÁŮĎÄŁ¬ÁŮĎÄĎŘŁ¬ÓŔľ¸Ł¬şÍŐţŁ¬¶«Ď磬żµŔÖŁ¬ąăşÓŁ¬»ýĘŻÉ˝ +0932:¶¨Î÷Ł¬Â¤Î÷Ł¬ŐÄĎŘŁ¬Í¨ÎĽŁ¬áşĎŘŁ¬ÁŮ䬣¬ÎĽÔ´ +0933:Ć˝ÁąŁ¬ľ˛ÄţŁ¬ăţ´¨Ł¬Áę́Ł¬łçĐĹŁ¬»ŞÍ¤Ł¬×ŻŔË +0934:Î÷·ĺŁ¬ÇěŃôŁ¬ÄţĎŘŁ¬ŐňÔ­Ł¬»·ĎŘŁ¬şĎË®Ł¬ŐýÄţŁ¬»ŞłŘ +0935:˝đ˛ýÎäÍţŁ¬ÎäÍţŁ¬˝đ´¨Ł¨˝đ˛ýŁ©Ł¬ÓŔ˛ýŁ¬ĂńÇÚŁ¬ĚěףŁ¬ąĹŔË +0936:ŐĹŇ´Ł¬É˝µ¤Ł¬¸ß̨Ł¬ËŕÄĎŁ¬ĂńŔÖŁ¬ÁŮÔó +0937:ľĆĽÎŁ¬ľĆČŞŁ¬ÓńĂĹŁ¬°˛Î÷Ł¬¶Ř»ÍŁ¬˝đËţŁ¬Ëŕ±±Ł¬°˘żËČűŁ¬ĽÎÓřąŘ +0938:ĚěË®Ł¬¸ĘąČŁ¬ÇŘ°˛Ł¬ÎäÉ˝Ł¬ŐĹĽŇ´¨Ł¬ÇĺË® +0939:Î䶼Ł¬łÉĎŘŁ¬żµĎŘŁ¬ÎÄĎŘŁ¬ĺ´˛ýŁ¬Î÷şÍŁ¬ŔńĎŘŁ¬»ŐĎŘŁ¬Á˝µ± +0941:¸ĘÄĎÖÝŁ¬ĎÄşÓŁ¬ÁŮ̶Ł¬ÖŰÇúŁ¬°­ÇúŁ¬ÂęÇúŁ¬×żÄᣬµü˛ż +0943:°×ŇřŁ¬Ć˝´¨Ł¬ľ¸Ô¶Ł¬ľ°Ě©Ł¬»áÄţ +0951:Ňř´¨Ł¬şŘŔĽŁ¬ÓŔÄţ +0952:ĘŻ×ěÉ˝Ł¬Ć˝ÂŢŁ¬ĚŐŔÖŁ¬»ÝĹ© +0953:ÎâÖŇŁ¬ÇŕÍ­ĎżŁ¬ÁéÎ䣬Ńγأ¬ÖĐÄţŁ¬ÖĐÎŔŁ¬Í¬ĐÄ +0954:ąĚÔ´Ł¬şŁÔ´Ł¬Î÷ĽŞŁ¬ÂˇµÂŁ¬ăţÔ´Ł¬ĹíŃô +0971:Î÷ÄţŁ¬´óͨ +0970:şŁęĚŁ¨Î÷şŁŐňŁ©Ł¬ĆîÁ¬Ł¬¸Ő˛ěŁ¬ĂĹÔ´ +0972:şŁ¶«Ł¬ŔÖ¶ĽŁ¬äŇÖĐŁ¬»ĄÖúŁ¬äŇÔ´Ł¬ĂńşÍŁ¬Ń­»ŻŁ¬»ŻÂˇ +0973:ͬČĘŁ¬ĽâÔúŁ¬ÔóżâŁ¬ŔîĽŇĎżŁ¬şÓÄĎ +0974:ą˛şÍŁ¬ĐËşŁŁ¬ÁúŃňĎżŁ¬ąóµÂŁ¬ąóÄĎŁ¬Í¬µÂ +0975:ÂęÇߣ¬´ďČŐŁ¬¸ĘµÂŁ¬ľĂÖÎŁ¬Âę¶ŕŁ¬°ŕ¶ŕ +0976:ÓńĘ÷Ł¬Öζ࣬łĆ¶ŕŁ¬ĎĺÇ«Ł¬ÔӶ࣬ÇúÂé˛Ë +0977:µÂÁîąţŁ¬ÎÚŔĽŁ¬¶ĽŔĽŁ¬ĚěľţŁ¬ĂŁŃÂŁ¬´ó˛ńµ©Ł¬Ŕäşţ +0979:¸ń¶űÄľ +0991:ÎÚ³ľĆë +0901:ËţłÇŁ¬¶îĂôŁ¬ÔŁĂńŁ¬ÍĐŔď +0902:ąţĂÜŁ¬°ÍŔďŔ¤Ł¬ŇÁÎá +0903:şÍĚÓÚĚƤɽŁ¬ÂĺĆÖŁ¬Ä«ÓńŁ¬˛ßŔŐŁ¬Ăń·á +0906:°˘ŔŐĚ©Ł¬ÇŕşÓŁ¬ĽŞÄľÄËŁ¬¸»ÔĚŁ¬˛Ľ¶ű˝ňŁ¬¸ŁşŁŁ¬ąţ°ÍşÓ +0908:°˘ÍĽĘ˛Ł¬ÎÚǡŁ¬°˘żËĚŐ +0909:˛©ŔÖŁ¬ľ«şÓŁ¬ÎÂČŞ +0990:żËŔ­ÂęŇŔŁ¬şÍ˛ĽżËČű¶ű +0992:żüÍÍŁ¬ÎÚËŐ +0993:ĘŻşÓ×ÓŁ¬ÉłÍĺ +0994:˛ýşĎŁ¬Ćć̨Ł¬ÂęÄÉËąŁ¬ĽŞÄľČř¶űŁ¬¸·żµŁ¬şôÍĽ±ÚŁ¬ÄľŔÝŁ¬Ă×ČŞ +0995:ÍÂÂł·¬Ł¬Ű·ÉĆŁ¬ÍĐżËŃ· +0996:żâ¶űŔŐŁ¬ÎľŔ磬ÂǪ̈Ł¬ŃÉęČŁ¬˛©şţŁ¬şÍľ˛Ł¬ČôÇĽŁ¬şÍ˶Ł¬ÇŇÄ© +0997:°˘żËËŐŁ¬żâłµŁ¬Đºͣ¬ÉłŃĹŁ¬°ÝłÇŁ¬°˘ÍßĚᣬÎÚʲŁ¬żÂĆşŁ¬°˘şĎĆ棬ÎÂËŢ +0998:ż¦Ę˛Ł¬°ÍłţŁ¬ÉŻłµŁ¬ĘčŔŐŁ¬Ę踽Ł¬Ň¶łÇŁ¬Ëţʲżâ¶ű¸ÉŁ¬Âó¸ÇĚᣬÔŔĆŐşţŁ¬Ů¤Ę¦Ł¬Ó˘ĽŞÉłŁ¬ÔóĆŐ +0999:ŇÁÄţŁ¬ÄáŔտˣ¬ĚŘżËËąŁ¬ŐŃËŐŁ¬˛ě˛Ľ˛é¶űŁ¬»ôłÇŁ¬ĐÂÔ´Ł¬ą®Áô diff --git a/distrib/setup.all/ita.num b/distrib/setup.all/ita.num new file mode 100644 index 0000000..7b506ac --- /dev/null +++ b/distrib/setup.all/ita.num @@ -0,0 +1,474 @@ +0333:TIM +0334:TIM +0335:TIM Business +0336:TIM Business +0337:TIM Business +0338:TIM Family +0339:TIM Family +0330:TIM ETACS Family +0360:TIM ETACS Family +0368:TIM ETACS Family +0340:OMNITEL +0347:OMNITEL Family +0349:Omnitel Family +0348:OMNITEL Business +0349:OMNITEL +0328:Wind Business +0329:Wind Family +0380:BLU +0388:BLU +0389:BLU +071:Ancona +0721:Pesaro +0722:Urbino +0731:Jesi +0732:Fabriano +0733:Macerata +0734:Fermo +0735:S. Benedetto del Tronto +0736:Ascoli Piceno +0737:Camerino +080:Bari +0831:Brindisi +0832:Lecce +0833:Gallipoli +0835:Matera +0836:Maglie +0881:Foggia +0882:S. Severo +0883:Andria +0884:Manfredonia +0885:Cerignola +099:Taranto +051:Bologna +0521:Parma +0522:Reggio nell' Emilia +0523:Piacenza +0524:Fidenza +0525:Fornovo di Taro +0526:farra di ferrara +0532:Ferrara +0533:Comacchio +0534:Porretta Terme +0535:Mirandola +0536:Sassuolo +0541:Rimini +0542:Imola +0543:ForlŤ +0544:Ravenna +0545:Lugo +0546:Faenza +0547:Cesena +0549:S. Marino +059:Modena +0471:Bolzano +0472:Bressanone +0473:Merano +0474:Brunico +070:Cagliari +0781:Iglesias +0782:Lanusei +0783:Oristano +0784:Nuoro +0785:Macomer +0789:Olbia +079:Sassari +090:Messina +0931:Siracusa +0932:Ragusa +0933:Caltagirone +0934:Caltanissetta +0935:Enna +0941:Patti +0942:Taormina +095:Catania +0961:Catanzaro +0962:Crotone +0963:Vibo Valentia +0964:Locri +0965:Reggio di Calabria +0966:Palmi +0967:Soverato +0968:Lamezia Terme +0981:Castrovillari +0982:Paola +0983:Rossano +0984:Cosenza +0985:Scalea +055:Firenze +0571:Empoli +0572:Montecatini Terme +0573:Pistoia +0574:Prato +0575:Arezzo +0577:Siena +0578:Chianciano Terme +010:Genova +0182:Albenga +0183:Imperia +0184:San Remo +0185:Rapallo +0187:La Spezia +019:Savona +02:Milano +030:Brescia +031:Como +0321:Novara +0322:Arona +0323:Baveno +0324:Domodossola +0331:Busto Arsizio +0332:Varese +0341:Lecco +0342:Sondrio +0343:Chiavenna +0344:Menaggio +0345:S. Pellegrino Terme +0346:Clusone +035:Bergamo +0362:Seregno +0363:Treviglio +0364:Breno +0365:Sal• +0371:Lodi +0372:Cremona +0373:Crema +0374:Soresina +0375:Casalmaggiore +0376:Mantova +0377:Codogno +0381:Vigevano +0382:Pavia +0383:Voghera +0384:Mortara +0385:Stradella +0386:Ostiglia +039:Monza +081:Napoli +0823:Caserta +0824:Benevento +0825:Avellino +0827:S. Angelo dei Lombardi +0828:Battipaglia +089:Salerno +091:Palermo +0921:Cefal— +0922:Agrigento +0923:Trapani +0924:Alcamo +0925:Sciacca +0742:Foligno +0743:Spoleto +0744:Terni +075:Perugia +0763:Orvieto +085:Pescara +0861:Teramo +0862:L' Aquila +0863:Avezzano +0864:Sulmona +0865:Isernia +0871:Chieti +0872:Lanciano +0873:Vasto +0874:Campobasso +0875:Termoli +050:Pisa +0564:Grosseto +0565:Piombino +0566:Follonica +0583:Lucca +0584:Viareggio +0585:Massa +0586:Livorno +0587:Pontedera +0588:Volterra +0971:Potenza +0972:Melfi +0973:Lagonegro +0974:Vallo della Lucania +0975:Sala Consilina +0976:Muro Lucano +06:Roma +0746:Rieti +0761:Viterbo +0765:Poggio Mirteto +0766:Civitavecchia +0771:Formia +0773:Latina +0774:Tivoli +0775:Frosinone +0776:Cassino +011:Torino +0121:Pinerolo +0122:Susa +0123:Lanzo Torinese +0124:Rivarolo Canavese +0125:Ivrea +0131:Alessandria +0141:Asti +0142:Casale Monferrato +0143:Novi Ligure +0144:Acqui Terme +015:Biella +0161:Vercelli +0163:Borgosesia +0165:Aosta +0166:St. Vincent +0171:Cuneo +0172:Savigliano +0173:Alba +0174:MondovŤ +0175:Saluzzo +040:Trieste +0481:Gorizia +041:Venezia (Mestre) +0421:S. Don… di Piave +0422:Treviso +0423:Montebelluna +0424:Bassano del Grappa +0425:Rovigo +0426:Adria +0427:Spilimbergo +0428:Tarvisio +0429:Este +0431:Cervignano nel Friuli +0432:Udine +0433:Tolmezzo +0434:Pordenone +0435:Pieve di Cadore +0436:Cortina d' Ampezzo +0437:Belluno +0438:Conegliano +0439:Feltre +049:Padova +0442:Legnago +0444:Vicenza +0445:Schio +045:Verona +0461:Trento +0462:Cavalese +0463:Cles +0464:Rovereto +0465:Tione di Trento +001:USA +007:Russia +0020:Egypt +0027:South Africa +0030:Greece +0031:Netherlands +0032:Belgium +0033:France +0034:Spain +0036:Hungary +0040:Romania +0041:Switzerland +0043:Austria +0044:U.K. +0045:Denmark +0046:Sweden +0047:Norway +0048:Poland +0049:Germany +0051:Peru +0052:Mexico +0053:Cuba +0054:Argentina +0055:Brazil +0056:Chile +0057:Colombia +0058:Venezuela +0060:Malaysia +0061:Australia +0062:Indonesia +0063:Philippines +0064:New Zealand +0065:Singapore +0066:Thailand +0081:Japan +0082:Korea South +0084:Vietnam +0086:China +0087:Inmarsat +0090:Turkey +0091:India +0092:Pakistan +0093:Afghanistan +0094:Sri Lanka +0095:Myanmar +0098:Iran +00210:Marocco +00211:Marocco +00212:Marocco +00213:Algeria +00214:Algeria +00215:Algeria +00216:Tunisia +00217:Tunisia +00218:Libya +00219:Libya +00220:Gambia +00221:Senegal +00222:Mauritania +00223:Mali +00224:Guinea +00225:Cote d'Ivoire +00226:Burkina Faso +00227:Niger +00228:Togo +00229:Benin +00230:Mauritius +00231:Liberia +00232:Sierra Leone +00233:Ghana +00234:Nigeria +00235:Chad +00236:Central African Rep +00237:Cameroon +00238:Cape Verde Islands +00239:Sao Tome & Principe +00240:Equatorial Guinea +00241:Gabon +00242:Congo +00243:Zaire +00244:Angola +00245:Guinea-Bissau +00246:Diego Garcia +00247:Ascension Island +00248:Seychelles island +00249:Sudan +00250:Rwanda +00251:Ethiopia +00252:Somalia +00253:Djibouti +00254:Kenya +00255:Tanzania +00256:Uganda +00257:Burundi +00258:Mozambique +00259:Zanzibar +00260:Zambia +00261:Madagascar +00262:Reunion islands +00263:Zimbabwe +00264:Namibia +00265:Malawi +00266:Lesotho +00267:Botswana +00268:Swaziland +00269:Comoros & Mayotte +00289:Tristan Da Cunda +00290:St. Helena +00291:Eritrea +00297:Aruba +00298:Faroe Islands +00299:Greenland +00350:Gibraltar +00351:Portugal +00352:Luxembourg +00353:Ireland +00354:Iceland +00355:Albania +00356:Malta +00357:Cyprus +00358:Finland +00359:Bulgaria +00370:Lithuania +00371:Latvia +00372:Estonia +00373:Moldova +00374:Armenia +00375:Belarus +00376:Andorra +00377:Monaco +00378:Italy, San Marino +00379:Italy, Vatican City +00380:Ukraine +00381:Serbia-Yugoslavia +00385:Croatia +00386:Slovenia +00387:Bosnia-Hercegovina +00389:Macedonia +00420:Czech Republic +00421:Slovak Republic +00422:Czech Republic, Prague +00423:Liechtenstein +00500:Falkland Islands +00501:Belize +00502:Guatemala +00503:El Salvador +00504:Honduras +00505:Nicaragua +00506:Costa Rica +00507:Panama +00508:St. Pierre & Miquelon +00509:Haiti +00590:Guadeloupe +00591:Bolivia +00592:Guyana +00593:Ecuador +00594:French Guiana +00595:Paraguay +00596:Martinique +00597:Suriname +00598:Uruguay +00599:Netherlands Antilles +00670:Northern Marianas +00671:Guam +00672:Antarctica-Casey +00673:Brunei Darussalam +00674:Nauru +00675:Papua New Guinea +00676:Tonga Islands +00677:Solomon Islands +00678:Uzbekistan +00679:Fiji Islands +00680:Palau +00681:Wallis & Futuna +00682:Cook Islands +00683:Niue Island +00684:Samoa (USA) +00685:Western Samoa +00686:Kiribati +00687:New Caledonia +00688:Tuvalu +00689:French Polynesia +00690:Tokelau +00691:Micronesia +00692:Marshall islands +00694:Wake Island +00850:Korea North +00851:Dominican Republic +00852:Hong Kong +00853:Macao +00854:St. Vincent & Grenadines +00855:Cambodia +00856:Laos +00880:Bangladesh +00886:Taiwan +00960:Maldives +00961:Lebanon +00962:Jordan +00963:Syria +00964:Iraq +00965:Kuwait +00966:Saudi Arabia +00967:Yemen +00968:Oman +00971:United Arab Emirates +00972:Israel +00973:Bahrain +00974:Qatar +00975:Bhutan +00976:Mongolia +00977:Nepal +00992:Tajikistan +00993:Turkmenistan +00994:Azerbaijan +00995:Georgia +00996:Kyrgyzstan +00998:Uzbekistan +006993:Wake Island +006998:Midway Islands +008816:Iridium +008817:Iridium \ No newline at end of file diff --git a/distrib/setup.all/leame.txt b/distrib/setup.all/leame.txt new file mode 100644 index 0000000..cfc22c9 --- /dev/null +++ b/distrib/setup.all/leame.txt @@ -0,0 +1,320 @@ + + + + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + + Contestador Automático para RDSI basado en CAPI + e Identificador de Interlocutor para Windows 95, + Windows 98 y Windows NT + + + + + + Introducción: + ~~~~~~~~~~~~ + CapiTel es un Contestador Automático e Identificador de Interlocutor de 32-Bit + para Windows 95, Windows 98 y Windows NT. Versiones gráficas y + en modo texto están disponibles para varios sistemas operativos. + + ˇGracias a todos los usuarios que nos enviaron sus bugs y sus ideas! + + Agradecimiento a las siguientes personas: + + - Kerstin Glodzinski + - Norbert Schulze + - Kolja Nowak + - Peter Franken + - Dirk Schreiber + + + Características principales: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + - 32-Bit multi-hebra Contestador Automático (Shareware) + - 32-Bit Identificador de persona que llama (FREEWARE) + - Versiones gráficas y de modo Texto para Windows 95/NT, basados en CAPI 2.0 + - Soporte completo para los archivos .WAV + - Funciones de control remoto controladas por tonos DTMF. + - Detector de silencio + - Completamente configurable + - Disponible en inglés y alemán (espańol y francés en versión Windows) + - Llamada de retorno + - Preparado para el ańo 2000 + + + Instalación bajo Windows 95/NT: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Descomprima el archivo de la distribución en un directorio temporal y + ejecute SETUP.EXE, esto instalará CapiTel en su ordenador y usted + podrá encontrarlo en el menu de Inicio. + + + Antes de que usted empiece: + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + Este tema es muy importante, porque muchos de los usuarios desconfiguran + CapiTel antes de comprobar que funciona completamente. + Por consiguiente, antes de que usted empiece a jugar con todas las propiedades, + por favor ejecute CapiTel, deje las propiedades como están y llámese. + Si CapiTel funciona en su sistema, usted debe ver una llamada entrante de su propio + número. Por defecto deben aparecer todos los números. + Después de que esta pequeńa prueba haya tenido éxito puede empezar a configurarse + CapiTel. + + Si quisiera ejecutar CapiTel como un Identificador de interlocutor FREEWARE, + por favor configure el RETRASO de la RESPUESTA a 999 segundos. + ˇDe esa manera CapiTel es GRATIS! + + + Configuración: + ~~~~~~~~~~~~~ + Use la pestańa Propiedades para configurar CapiTel. + + + General: - Ejecuta el archivo WAV de Sonido + Si esta opción está seleccionada, el archivo WAV de sonido se ejecutará + cuando se detecte una llamada entrante. + + - Genera Archivos .WAV de 16-Bit + Marque esta opción si su tarjeta de sonido lo soporta. + + - Restaura la Ventana con una nueva Llamada + Si se detecta una llamada entrante aparece una ventana + de CapiTel + + - Confirma el borrado de una llamada + Marque esta opción si usted quiere que CapiTel le pregunte antes + de borrar una llamada. + + - Ignora las llamadas vacías + Si usted marca esta opción, todas las llamadas con una + grabación de 0 segundos serán ignoradas por CapiTel + + - Código de Área extendido + Si el identificador de interlocutor detecta que no puede encontrar el + nombre de la persona que ha llamado en la base de datos de interlocutores, + se muestra el nombre de la ciudad de la llamada. + + - Soporte de DTMF + Con esta opción usted puede desactivar totalmente el soporte DTMF + (control remoto) + + - Usar Código-ulaw + Este interruptor es importante solamente para los usuarios en los Estados + Unidos de América. Habilitará el código ulaw en lugar del código alaw + que se usa en Europa. + + - Retraso de la respuesta + Especifique el tiempo predefinido (en segundos) que CapiTel debe esperar + antes de responder a una llamada. + + - Tiempo máximo de grabación + Especifique el tiempo máximo predefinido de grabación (en segundos). + CapiTel cuelga automáticamente si la persona que llama deja un mensaje y + ˇexcede este límite! + + - Detector de silencio + Especifique el tiempo de Silencio (en segundos). + El contestador automático de CapiTel cuelga si se deja de hablar cuando + se está dejando un mensaje ˇy se excede este límite! + + - Mensaje WAV de bienvenida + El archivo predefinido se ejecuta cuando CapiTel contesta a una + llamada. + + - Archivo WAV de sonido + El archivo predefinido suena en su ordenador cuando se detecta una + llamada. + + - Archivo de registro + CapiTel puede anotar todas las llamadas en un archivo de registro. + Usted también puede especificar un nombre de ruta o un Dispositivo + (por ejemlo, su impresora) si su sistema operativo lo soporta. + + + Líneas: Para editar, haga doble clic en la entrada o use el menú desplegable. + ˇSi no hay ninguna lista de líneas, CapiTel reaccionará en TODAS las + líneas disponibles! + + Línea: Escriba una descripción corta para la línea. + + EAZ/MSN: El EAZ o el MSN para esta línea. Si usted está usando + CAPI 1.1, rellene el EAZ entre 0 y 9. Si usted está usando + CAPI 2.0, proporcione un MSN completo (número de teléfono). + + Archivo WAV/ALW de bienvenida: El archivo WAV o ALW que le sonará a la + persona que llama cuando le conteste el + contestador automático. + Use * para el valor por defecto. + + Sonido WAV: El archivo WAV que sonará en su ordenador cuando se detecte + una llamada entrante. + Use * para el valor por defecto. + + Reacción: CapiTel puede rechazar una llamada. Aquí usted define + cómo debe comportarse: 'Normal' para el comportamiento normal, + 'Comunicando' para simular una línea ocupada, 'Rechazar' para negarse + a la llamada y 'No contestar' para simular un servicio indisponible. + Importante: La reacción que usted define aquí es sólo válida para la + tarjeta de RDSI. Si Ud. tiene otro dispositivo (Por ejemplo, + un teléfono de RDSI) también escuchará el EAZ/MSN, ˇla llamada + no obtendrá la reacción de CapiTel! No hay nada que nosotros + podamos hacer sobre esto. Ésa es la manera de trabajar de RDSI. + + Retraso de la respuesta: El tiempo de espera para responder (en segundos) + para la línea. + Use * para el valor por defecto. + + Tiempo máximo de grabación: El tiempo máximo de grabación (en segundos) + para la línea. + Use * para el valor por defecto. + + Números conocidos: Para editar, haga doble clic en una entrada o use el menú + desplegable. + Si alguien le llama y su número se encuentra en esta lista, + la llamada usará la descripción de ese número. + + Nombre: Nombre de la persona que llama. + + Número: Número de la persona que llama que se usará para identificar las + llamadas entrantes. Usted puede usar el comodín * al final de un + número (y sólo allí). Por ejemplo 024192090* casará TODOS los números + que empiezan con 024192090. + + Los otros campos se describen bajo las líneas. + + + Acciones del control remoto: + Para editar, haga doble clic en una entrada o use el menú desplegable. + + Código DTMF: Si se detecta el Código DTMF, se ejecutará la acción + apropiada. + + Acción: Están disponibles las siguientes acciones: + + - El control remoto reproduce todas las llamadas que se han grabado. + Use el botón * de su teléfono para anularlos. + - Reiniciar el ordenador (no se olvide que si usted utiliza Windows + NT necesita la entrada de contraseńa al usar esta opción. Usted + puede saltarse la entrada de contraseńa si utiliza una utilidad + como TweakUI) + - Desactivar CapiTel + - Salir de CapiTel + - Ejecuta un programa en su máquina. Usted puede llenar el Programa, + Argumentos y títulos de campo + - Llamada de retorno. Con este código DTMF usted puede definir un + nuevo número para la llamada de retorno. Si no pone ningún número + se desactiva la llamada de retorno. + + Título de la ventana: Éste es el título de la ventana de una acción a ejecutar. + + Use "Grabar" para grabar la nueva configuración, o "Cancelar" para eliminarla. + + Una nota sobre la configuración de la Línea/Llamada: + Si usted especifica algo para una llamada, toma prioridad sobre la configuración que + usted haya definido para una línea. + + Uso: + ~~~ + El contenido de la ventana principal de CapiTel es la parte más importante. + Allí verá todas las llamadas recibidas. Los campos se explican por sí mismos. + + Si usted está usando CapiTel con los controles ocultos, puede acceder a + las funciones del menú con el menú desplegable que consigue haciendo + clic con el botón derecho de su ratón en la ventana principal. + + Use la opción "Grabar" para grabar un nuevo mensaje de bienvenida llamándose. + Le aparecerá una ventana de diálogo para pedirle el nombre del archivo, BIENVENIDA.ALW + es el nombre por defecto. Usted puede usar los archivos ALW creados en la línea y + las Etiquetas de las llamadas de la pestańa de Propiedades. + + ˇUsted puede crear un archivo .WAV y usarlo directamente! + + Si alguien lo llama y quiere parar el mensaje de bienvenida .WAV, la pčrsona que lo + llama tiene que pulsar el botón # en su teléfono. + + ˇSi usted tiene cualquier pregunta, avísenos! + + + Sugerencias para los Expertos: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Casi todo en CapiTel puede configurarse según el día y la hora. Esto no puede + encontrarse en la pestańa de Propiedades, porque no hemos querido confundir + a los principiantes. Revise CAPITEL.CFG, CAPITEL.PRT, CAPITEL.NAM o CAPITEL.ACT + y modifique las entradas como sigue: + + opción=[~][~]...[~] + + horario_x=-,-, + + de_día/a_día pueden ser uno de: Mo, Tu, We, Th, Fr, Sa, Su. + El valor del Día más bajo debe estar el primero en los rangos del Día. + Por ejemplo ˇFr-Mo no se permite! + + de_hora/a_hora debe ser hh:mm (hh=horas, mm=minutos) en formato de 24 horas. + + Capitel analiza los horarios de izquierda a derecha y se detiene cuando encuentra + alguno que coincide con la hora y día actuales. Este tipo de entradas no deben + exceder de 512 caracteres. + + El valor por defecto se utiliza si no hay ningún horario coincidente. + + Puede encontrar algunos ejemplos en CAPITEL.CFG + + Si usted encuentra bugs con respecto a este rasgo, por favor envíenos un + informe DETALLADO del bug. + + + Lista de Mailing: + ~~~~~~~~~~~~~~~~ + Hay una Lista de Mailing de Internet preparado para CapiTel, donde usted + puede discutir bugs, etc. con otros usuarios y con los autores. + + Para subscribirse, envíe un EMail a majordomo@sundancer.oche.de y + ponga "subscribe capitel" (sin las comillas por supuesto) en su cuerpo. + Para anular su suscripción, haga lo mismo con "unsubscribe capitel" + Si usted quiere conseguir más ayuda, use "Help" en el cuerpo del mensaje. + + La dirección de la lista es capitel@sundancer.oche.de + + + Disponibilidad: + ~~~~~~~~~~~~~~ + Todas las versiones de CapiTel pueden encontrarse aquí: + + - Web principal: http://www.2tec.com/ + Web espańol: http://www.jms.nu/pro/capitel.html + + Está permitido distribuir el archivo ZIP de CapiTel sin + modificar (y el archivo EXE para la versión de Windows) en Internet, + en CD-ROM Shareware, en Sistemas de tablón de anuncios y demás. + + + Nota final: + ~~~~~~~~~~ + Los comentarios e informes de bugs son bienvenidos. Pero, por favor, no se + olvide que CapiTel es de fácil uso y un contestador automático intuitivo, y + no ˇun buzón de voz complejo, un servidor de fax o un sistema CTI completo! + + + + Diviértase, + los autores, + + + Werner Fehn & Carsten Wimmer + + wf@2tec.com cw@2tec.com + www.2tec.com/wf www.2tec.com/cw + Fax: +49-241-9519041 Fax: +49-241-9571314 + + Schuttenhofweg 220 Trierer Str. 281a + 52080 Aachen 52078 Aachen + Germany Germany + + diff --git a/distrib/setup.all/licence.txt b/distrib/setup.all/licence.txt new file mode 100644 index 0000000..647e1ae --- /dev/null +++ b/distrib/setup.all/licence.txt @@ -0,0 +1,103 @@ +LICENSE AGREEMENT AND WARRANTY +============================== + +1. Definitions +-------------- + + At this point the meaning of certain terms contained in the following + provisions (of this agreement) shall be explained + + - authors: Werner Fehn, Schuttenhofweg 220, 52080 Aachen + Carsten Wimmer, Trierer Str. 281a, 52078 Aachen + + - end user: the person, who uses, distributes, copies or sells the program + or applies it in any other way, no matter if it concerns a + natural person or a person at law + + - use: the appropriate employment of CapiTel, + beginning at loading the executable program + + +2. Subject of contract +---------------------- + +2.1 The end user is allowed to use the programm according to the following + regulations. + +2.2 The software is owned by the authors and is protected by copyright law. + All rights are reserved. + The software may only be sold, copied or ditributed in unchanged version + and with supplement of this license agreement. + Sale, reproduction and distribution have to be free of charge. Sale, + reproduction and application is not free, if CapiTel is distributed with + other non-free objects, p.e. modems or journals. If this should take place + the permission of the authors is necessary. + +2.3 The end user is not allowed to decompile or disassemble the program or + create derivative works from the software without the permission of the + authors. + +2.4 The end user is allowed to use the programm for free within a 60-day trial + period. A further use outside this period requires registration. + A single user license for a natural person grants the right to use one copy + of CapiTel on a single computer. A licensed user may use the software on + different computers, but must not use it on more than one computer at the + same time. Persons at law have to acquire one license for every natural + persons who uses CapiTel. + +2.5 Registration follows after remittance of 25,00 DM (German Marks) of 12 Euro + to the account mentioned in ORDER.TXT. Within a following 4-week period the + end user will recieve a registration code from the authors. If not, the end + user has to contact the authors (at his own expense) to let them know. + +2.6 Registration guarantees the right to use the program as well as updates + (for which the same conditions are valid). + The authors are not obliged to develop the program or to adapt it to + changed operating characteristics of computer hardware or systems. + + +3. Warranty +----------- + +3.1 The end user is not entitled to developement or changes of CapiTel. + +3.2 The authors are only liable within the compass of german law's provisions. + +3.3 In case of errors or damage (including without limitation damages for loss + of business profits, business interruption, loss of business information + and equals) which do not base on missing program components, every kind + of claim for damages is impossible. (Exept damages which occured because + of the intention or gross negligement of the authors. If this should take + place the end user has claim on program replacement or refund of + license fee.) + +3.4 An end user's claim on improvement or an error-free program does not exist. + +3.5 The end user has to warrant on his own that CapiTel will be executable on + his hard- and software. The authors give no guarantee that the program will + be executable on every kind of hard- and software. + +3.6 The authors are not obliged to advise the end user or to support him in use + of the program. Nevertheless the authors try to attend to messages + concerning incompability or user problems as far as possible. + + +4. General +---------- + +4.1 This agreement will be governed by the laws of Germany. Any dispute in + relation to this agreement will be determined by the court of Aachen, + Germany and every licensed user expressly attorns to the exclusive + jurisdiction of the german courts. + +4.2 If any provision of this agreement, including the breadth or scope of such + provision will be held by any court of competent jurisdiction to be invalid + or unenforceable, in whole or in part, such invalidity or unenforceability + will not affect the validity or enforceability of the remaining provisions + of this agreement. Such remaining provisions will remain enforceable and + binding. Such invalid or unenforceable parts will be replaced by (valid or + enforceable) corresponding parts or regulations. + +4.3 Provisions different to this license agreement have to be stipulated in + writing. This is also possible by using a telefax. + diff --git a/distrib/setup.all/liesmich.txt b/distrib/setup.all/liesmich.txt new file mode 100644 index 0000000..40a4b06 --- /dev/null +++ b/distrib/setup.all/liesmich.txt @@ -0,0 +1,374 @@ + + + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + + ISDN CAPI basierter Anrufbeantworter + und Caller-ID fuer OS/2, Windows 95, + Windows 98 und Windows NT + + + + + + Einfuehrung: + ~~~~~~~~~~~ + CapiTel ist ein 32-Bit Anrufbeantworter und Caller-ID fuer OS/2, + Windows 95, Windows 98 und Windows NT. Grafische und Text-Modus + Versionen sind fuer alle Betriebssysteme verfuegbar. + + Ein Dank an alle Benutzer, die uns Fehlerberichte und Ideen zugeschickt + haben. Auf keinen Fall mit dieser tollen Resonanz aufhoeren! Danke! + + Ein ganz besonderer Dank geht an die folgenden Personen: + + - Kerstin Glodzinski + - Norbert Schulze + - Kolja Nowak + - Peter Franken + - Dirk Schreiber + + + Haupt Merkmale: + ~~~~~~~~~~~~~~ + - 32-Bit Multi-Threaded Anrufbeantworter (als Shareware) + - 32-Bit Caller-ID (als FREEWARE) + - Grafische und Text-Modus Versionen fuer OS/2, basierend + auf CAPI 1.1 und CAPI 2.0 + - Grafische und Text-Modus Versionen fuer Windows 95/NT, + basierend auf CAPI 2.0 + - Komplette Unterstuetzung fuer .WAV Audio-Dateien + - Fernsteuerungs-Funktionen (z.B. Fernabfrage), mit Hilfe + von DTMF Toenen + - Ruhe-Erkennung + - Komplett konfigurierbar + - Rückruf + - Jahr 2000 getestet + - Sprachen: + - englisch + - deutsch + - französisch (nur Windows) + - spanisch (nur Windows) + - norwegisch (bokmal) (nur Windows) + - norwegisch (nynorsk) (nur Windows) + - niederländisch (nur Windows) + - italienisch (nur Windows) + - ungarisch (nur Windows) + - finnisch (nur Windows) + - dänisch (nur Windows) + + + Installation unter OS/2: + ~~~~~~~~~~~~~~~~~~~~~~~ + Bevor CapiTel benutzt werden kann, muss der OS/2 Multimedia Manager + namens MMPM/2 und ein CAPI 1.1 bzw. CAPI 2.0 faehiger Treiber fuer + Ihre ISDN-Karte installiert sein. + + Die Installation ansich ist sehr einfach. Das komplette ZIP-Archiv + muss in ein beliebiges Ziel-Verzeichnis entpackt werden. Dann starten + Sie INSTALL.CMD, damit die gewuenschte Sprache gewaehlt und + ein Objekt auf der Arbeitsoberflaeche erzeugt wird. + + Wenn Sie selber ein CapiTel Objekt erzeugen moechten, dann vergessen + Sie bitte nicht, das Arbeitsverzeichnis des Objektes entsprechend + zu setzen! + + CAPI 1.1 ist nicht dazu faehig, dass mehrere Applikationen auf einer + EAZ arbeiten. Deswegen: Wenn Sie CapiTel benutzen, dann stellen Sie + sicher, dass es alleine auf die konfigurierte EAZ hoert. + Bei CAPI 2.0 gibt es dieses Problem nicht. + + + Installation unter Win 95/NT: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Entpacken Sie das ZIP-Archiv in ein temporaeres Verzeichnis und + starten Sie SETUP.EXE. Es wird CapiTel auf Ihrer Maschine + installieren und Sie werden einen entsprechenden Eintrag im Start-Menue + finden. + + + Bevor Sie beginnen: + ~~~~~~~~~~~~~~~~~~ + Dieser Punkt ist sehr wichtig, weil viele Benutzer ihr CapiTel falsch + konfigurieren bevor sie ueberhaupt wissen, dass CapiTel bei ihnen + auch richtig funktioniert. Deswegen sollten Sie sich zuerst einmal + selbst anrufen, bevor Sie mit all den Einstellungen spielen. Wenn + alles korrekt funktioniert, dann sollten Sie einen eingehenden Ruf + von Ihrer eigenen Nummer aus sehen. CapiTel horcht standardmaessig + auf all Ihre Nummern. + Wenn dieser kurze Test erfolgreich verlaufen ist, dann konfigurieren + Sie CapiTel nach Belieben. + + Wenn Sie CapiTel als FREEWARE Caller-ID einsetzen wollen, setzen Sie + VERZOEGERUNG auf 999 sekunden. Nun ist CapiTel FREE! + + + Konfiguration: + ~~~~~~~~~~~~~ + Benutzen Sie die Einstellungen, um CapiTel zu konfigurieren. + + + Allgemein: - Spiele Klingel-WAV + Wenn dieser Eintrag selektiert ist, dann wird das + Klingel-WAV bei jedem eingehenden Anruf abgespielt. + + - Generiere 16-Bit .WAV Dateien + Selektieren Sie den Punkt, wenn Ihre Sound-Karte + dies unterstuetzt. + + - Restauriere Fenster bei neuem Anruf + Wenn ein eingehender Ruf erkannt wird, dann springt + das CapiTel Fenster in den Vordergrund. Unter OS/2 + wird der Tastatur-Fokus nicht veraendert! + + - Rueckfrage bei Rufloeschung + Selektieren Sie diesen Punkt, wenn Sie eine Abfrage + wuenschen, bevor CapiTel einen Ruf loescht. + + - Ignoriere leere Rufe + Alle Rufe mit einer Dauer von 0 Sekunden werden + ignoriert. + + - Erweitere Rufnummer + Wenn eine Rufnummer bei einem eingehenden Ruf angezeigt + wird, und sie kann nicht in der Anrufer-Datenbank + gefunden werden, dann wird zusaetzlich zur Nummer auch + noch die Stadt des Anrufers ausgegeben. + + - DTMF Unterstuetzung + Hier kann die DTMF Unterstuetzung (Fernsteuerung) komplett + abgeschaltet werden. + + - ulaw-Codec + Benutzer in den Vereinigten Staaten von Amerika sollten diesen + Punkt aktivieren. Dann wird der ulaw-Codec an Stelle des + alaw-Codecs benutzt. + + - Verzoegerung + Angabe der Zeit in Sekunden, die CapiTel standardmaessig + wartet, bevor ein Ruf entgegengenommen wird. + + - Max. Aufnahmezeit + Angabe der max. Zeit in Sekunden, die ein Anrufer + standardmaessig auf den Anrufbeantworter sprechen darf. + + - Ruheerkennung + Angabe der Ruheerkennung in Sekunden. + Es wird automatisch aufgelegt, wenn ein Anrufer schweigt + und diese Zeit ueberschreitet. + + - Ans.-WAV/ALW + Die Ansage-Datei, die ein Anrufer standardmaessig hoert. + + - Klingel-WAV + Die WAV-Datei, die bei jedem eingehenden Anruf abgespielt wird. + + - Logdatei + CapiTel kann alle Anrufe in einer Text-Datei auflisten. + Wenn Ihr Betriebssystem dies unterstuetzt, dann koennen Sie + hier auch eine Pipe oder ein Geraet (z.B. einen Drucker) + angeben. + + + Ports: Doppel-Klick auf einen Eintrag oder das Popup-Menue benutzen, + um einen Eintrag zu editieren. Wenn kein Port eingetragen + ist, dann reagiert CapiTel auf ALLE Ports! + + Port: Eine kurze Beschreibung fuer den Port. + + EAZ/MSN: Die EAZ oder MSN fuer diesen Port. Wenn Sie einen + CAPI 1.1 Treiber benutzen, dann tragen Sie hier + eine EAZ zwischen 0 und 9 ein. Bei CAPI 2.0 tragen + Sie hier die komplette MSN ein. + + Ansage WAV/ALW: Die WAV oder ALW Datei, die einem Anrufer auf + diesem Port vorgespielt wird. Tragen Sie '*' + fuer die Standard-Datei ein. + + Klingel WAV: Die WAV Datei, die bei jedem eingehenden Ruf + abgespielt wird. Tragen Sie '*' fuer die + Standard-Datei ein. + + Reaktion: Mit CapiTel ist es moeglich, einen Ruf abzulehnen. + Hier koennen Sie das Verhalten konfigurieren: 'Normal' + fuer normales Verhalten, 'Besetzt' um ein Besetzt-Zeichen + zu simulieren, 'Ablehnen' zu Ablehnen des Rufes, und + 'Unerreichbar' um einen nicht verfuegbaren Dienst + vorzugaukeln. + Wichtig: Die hier eingestellte Reaktion ist nur gueltig + fuer die ISDN-Karte. Wenn ein anderes Geraet (z.B. ein + ISDN Telefon) auf die gleiche EAZ/MSN horcht, dann + bekommt der Anrufer von CapiTel's Reaktion nichts mit. + Daran koennen wir leider nichts aendern. So ist ISDN. + + Annahmeverzoegerung: Angabe der Zeit in Sekunden, die CapiTel + auf diesem Port wartet, bevor ein Ruf + entgegengenommen wird. Tragen Sie '*' + fuer die Standard-Datei ein. + + Max. Aufnahmedauer: Angabe der max. Zeit in Sekunden, die ein + Anrufer auf diesem Port auf den Anruf- + beantworter sprechen darf. Tragen Sie '*' + fuer die Standard-Datei ein. + + + Anrufer: Doppel-Klick auf einen Eintrag oder das Popup-Menue benutzen, + um einen Eintrag zu editieren. Wenn Sie angerufen werden und + die Nummer des Anrufers befindet sich in dieser Datenbank, + dann werden die Anrufer-spezifischen Einstellungen benutzt. + + Name: Der Name des Anrufers. + + Nummer: Die Nummer zur Identifizierung des Anrufers. Sie koennen + auch den * Platzhalter am Ende einer Nummer benutzen. + z.B. 024192090* steht fuer alle Nummern, die mit + 024192090 anfangen. + + Die anderen Felder wurden schon unter Ports beschrieben. + + + Fernsteuerung: + Doppel-Klick auf einen Eintrag oder das Popup-Menue benutzen, + um einen Eintrag zu editieren. + + DTMF Nummer: Wenn diese DTMF Nummer erkannt wird, dann wird + die entsprechende Aktion gestartet. + + Aktion: Die folgenden Aktionen sind verfuegbar: + + - Fernabfrage spielt alle Rufe ab, die bisher aufgezeichnet + wurden. Benutzen Sie die *-Taste auf Ihrem Telefon, + um alle Rufe zu loeschen. + - Neustart des Rechners + - CapiTel deaktivieren + - CapiTel beenden + - Ausfuehren startet ein Programm auf Ihrem Computer. + Sie muessen die Programm, Parameter und Titel Felder + korrekt ausfuellen! + - Rückruf. Hier köennen Sie eine neue Rückrufnummer + eingeben, unter der Capitel Sie zurückruft. Keine + Eingabe beendet den Rückruf. + + Fenster Titel: Dies ist der Titel den ein Fenster bekommt, + wenn CapiTel ein Programm startet. + + + Klicken Sie auf "Sichern" um die neuen Einstellungen zu uebernehmen, + oder "Abbruch" um sie zu verwerfen. + + Eine Bemerkung zu den Port/Anrufer spezifischen Einstellungen: + Wenn Sie etwas fuer einen Anrufer konfigurieren, dann hat diese + Einstellung eine hoehere Prioritaet als die eines Ports! + + + Benutzung: + ~~~~~~~~~ + Der wichtigste Teil von CapiTel ist der sogenannte Container im + Hauptfenster. Hier werden alle eingehenden Anrufe angezeigt, angehoert + und geloescht. Die Felder sind selbsterklaerend. + Unter OS/2 koennen Sie Farben und Schriftarten nach Belieben in das + Fenster per Drag&Drop reinschmeissen. Sie werden abgespeichert. + + Wenn Sie CapiTel mit versteckten Controls benutzen, dann koennen Sie + alle Funktionen ueber das PopUp-Menue erreichen. Sie oeffnen es, indem + Sie mit der rechten Maustaste im Container klicken. Unter OS/2 kann + das Fenster verschoben werden, indem Sie den Fensterrand mit der + rechten Maustaste anklicken, die Maustaste festhalten und dann + verschieben. + + Benutzen Sie den Selbstanruf, um einen neuen Ansagetext ueber Ihr + eigenes Telefon aufzunehmen. Ein Dialogfenster wird sich oeffnen + und Sie nach dem neuen Dateinamen fragen. Standardmaessig wird hier + WELCOME.ALW verwendet. Die dann erzeugte ALW Datei kann dann in + den Ports und in den Anrufer Einstellungen nach Belieben benutzt + werden. + + Natuerlich koennen Sie auch selber .WAV Dateien erzeugen und sie + direkt benutzen! + + Wenn Sie jemand anruft und er nicht den Ansage-Text hoeren will, dann + kann er ihn mit der #-Taste auf dem Telefon abbrechen. + + Setzen Sie sich mit uns in Verbindung, wenn Sie Fragen haben! + + + Tip fuer Experten: + ~~~~~~~~~~~~~~~~~ + Fast alles kann in CapiTel auch zeitabhaengig konfiguriert werden. + Allerdings kann man dies nicht direkt in den Einstellungen vornehmen, + weil wir Neulinge nicht verwirren und abschrecken wollen. + Editieren Sie CAPITEL.CFG, CAPITEL.PRT, CAPITEL.NAM oder CAPITEL.ACT + und modifizieren Sie die Eintraege wie folgt: + + eintrag=[~][~]...[~] + + chunk_x=-,, + + vonTag/bisTag kann sein: Mo, Tu, We, Th, Fr, Sa, Su + (dies sind die Abkuerzungen fuer die Tage in englischer Sprache!) + + Der kleinere Tag-Wert muss als erstes angegeben wwerden, z.B. + ist Fr-Mo nicht erlaubt! + + vonZeit/bisZeit hat das 24-Stunden Format xx:yy (xx=Stunden, yy=Minuten). + + CapiTel liest die Chunks von links nach rechts ein und stoppt beim + ersten Treffer. + Zeitabhaengige Eintraege duerfen nicht laenger als 512 Zeichen sein. + Der Default-Wert wird benutzt, falls es keinen Treffer gibt. + + Einige Beispiele kann man in CAPITEL.CFG finden. + + Sollten in diesem Umfeld Fehler auftreten, dann schicken Sie uns bitte + DETAILLIERTE Fehler-Beschreibung! + + + + Lizenz Vereinbarung: + ~~~~~~~~~~~~~~~~~~~ + Die Lizenz Vereinbarung koennen Sie in LIZENZ.TXT bzw. LICENSE.TXT + (in englisch) nachlesen. Wenn Sie CapiTel im Einsatz haben, akzeptieren + Sie die Lizenz Vereinbarung. + + + + Verfuegbarkeit: + ~~~~~~~~~~~~~~ + Alle CapiTel Versionen koennen hier gefunden werden: + + - World Wide Web: www.2tec.com + + + Ihnen ist es ausdruecklich gestattet, das unmodifizierte CapiTel ZIP-Archiv + (bzw. EXE-Archiv fuer die Windows Version) im Internet, auf Shareware + CD-Roms, in Mailboxen usw. zu verbreiten. + + + Abschliessende Bemerkung: + ~~~~~~~~~~~~~~~~~~~~~~~~ + Kommentare, Ideen und Fehlerberichte sind willkommen! Aber bitte nicht + vergessen, dass CapiTel ein einfach zu bedienender und intuitiver + Anruf-Beantworter ist und bleiben soll, und keine Voice-Mailbox, + Fax-Server oder volle CTI Applikation. + + + + Viel Spass, + die Autoren, + + + Werner Fehn & Carsten Wimmer + + wf@2tec.com cw@2tec.com + www.2tec.com/wf www.2tec.com/cw + Fax: +49-241-9519041 Fax: +49-241-9571314 + + Schuttenhofweg 220 Trierer Str. 281a + 52080 Aachen 52078 Aachen + Germany Germany + diff --git a/distrib/setup.all/lizenz.txt b/distrib/setup.all/lizenz.txt new file mode 100644 index 0000000..50e4514 --- /dev/null +++ b/distrib/setup.all/lizenz.txt @@ -0,0 +1,157 @@ + + Lizenzvereinbarung und Gew„hrleistung + ===================================== + + 1. Begriffsbestimmungen + ----------------------- + Im Sinne der nachfolgenden Vorschriften dieser Vereinbarung + bedeuten + + - Autoren: Werner Fehn, Schuttenhofweg 220, D-52080 Aachen + Carsten Wimmer, Trierer Str. 281a, D-52078 Aachen + + + - Lizenznehmer: derjenige, der das Programm nutzt, verbreitet, + vervielf„ltigt, vertreibt oder in einer sonstigen Form + verwendet, gleich ob es sich um eine natrliche oder + juristische Person handelt. + + - Programm: Der ausfhrbare Programmcode, seine Beschreibung, + Bedienungsanleitungen, Hilfetexte sowie diese + Lizenzvereinbarung fr CapiTel. + + - Benutzung, Nutzung: Der bestimmungsgem„áe Gebrauch, beginnend + mit dem Laden des ausfhrbaren Programmes in den + Arbeitsspeicher des Rechners. + + - Programmarchiv: Das Programm und alle zugeh”rigen Dateien, + die vom Autor zum Vertrieb zusammengefasst wurden + + - grobes Verschulden: Vorsatz und grobe Fahrl„ssigkeit, auch + des Erfllungsgehilfen. + + + 2. Gegenstand + ------------- + 2.1 Die Autoren gew„hren dem Lizenznehmer das nicht ausschlieáliche + Recht zur Nutzung des Programms im Rahmen der nachfolgenden + Bedingungen. + + 2.2 Das Programm unterliegt den Bestimmungen des Urheberrechts. Es + darf nur in unver„nderter Form und unter Beifgung dieser + Lizenzvereinbarung vertrieben, vervielf„ltigt oder verbreitet + werden. Der Vertrieb, die Vervielf„ltigung und die Verbreitung des + vollst„ndigen Programmarchivs sind nur erlaubt, solange sie + unentgeltlich erfolgt. Die Verbreitung, der Vertrieb und die + Vervielf„ltigung ist nicht unentgeltlich, wenn das Programm zusammen + mit anderen Gegenst„nden, die nicht unentgeltlich abgegeben werden, + wie z.B. Modems oder Zeitschriften, erfolgt. Im Fall der + entgeltlichen Verbreitung, Vervielf„ltigung oder des Vertriebes ist + vor der Verbreitung, Vervielf„ltigung oder dem Vertrieb die + schriftliche Erlaubnis des Autors erforderlich. + + + 2.3 Der Lizenznehmer ist nicht befugt, sich Zugang zum Quellcode des + Programmes zu verschaffen oder irgendwelche Ver„nderungen an dem + Programm oder einem seiner Bestandteile vorzunehmen, wenn er nicht + vom Autor hierzu ausdrcklich erm„chtigt wurde. + + 2.4 Der Lizenznehmer ist berechtigt, das Programm 60 Tage lang + unentgeltlich zu nutzen. Die Frist beginnt mit der ersten Benutzung + des Programms. Nach Ablauf dieser Frist ist eine weitere Benutzung + nur gestattet, wenn der Benutzer eine Nutzungslizenz erworben hat + (Registrierung). Natrliche Personen als Lizenznehmer sind + berechtigt, das Programm auf beliebig vielen Rechnern zu nutzen, + solange sichergestellt ist, daá das Programm ausschlieálich von dem + Lizenznehmer genutzt wird und zu einem Zeitpunkt nur eine Kopie des + Programms benutzt wird. Juristische Personen als Lizenznehmer haben + fr jede natrliche Person, die das Programm nutzt, eine Lizenz + zu erwerben. + + 2.5 Die Registrierung erfolgt durch šberweisung eines Betrages in + H”he von 25,00 DM oder 12 Euro auf das in ORDER.TXT genannte Konto + unter Angabe des Namens. Die Autoren verpflichten sich, + sp„testens vier Wochen nach Erhalt der Registrierungsgebhr mittels + E-Mail einen Freischaltungs-Code an den Lizenznehmer zu bermitteln, + der die vom Lizenznehmer benutzte Programmversion als registriert + kennzeichnet. Der Autor ist bemht, die Registrierung schneller + vorzunehmen. Nachdem der Lizenznehmer alles erforderliche getan hat, + um die Registrierungsgebhr auf das Konto des Autors zu berweisen, + ist er berechtigt, das Programm bis zum Erhalt der Registrierung + auch ber die 60-Tage-Frist zu nutzen. Geht die Registrierungsgebhr + aus Grnden, die der Lizenznehmer zu vertreten hat, beim Autor nicht + ein oder ist aus Grnden, die der Lizenznehmer zu vertreten hat, + eine Registrierung nicht m”glich, hat der Lizenznehmer unverzglich + nach Bekanntwerden dieser Umst„nde die Registrierung zu erm”glichen. + Hat der Lizenznehmer vier Wochen nach šberweisung der + Registrierungsgebhr noch keinen Registrierungscode erhalten, so hat + er sich auf seine Kosten mit dem Autor in Verbindung zu setzen und + diesen ber diesen Umstand zu informieren. + + 2.6 Mit der Registrierung erwirbt der Benutzer das Recht, das + Programm zu nutzen. Ferner erwirbt er das Recht, Weiterentwicklungen + und Updates des Programmes zu den gleichen Bedingungen zu nutzen. + + Die Registrierung begrndet keinen Anspruch gegen den Autor des + Programms, das Programm weiterzuentwickeln oder ge„nderten + Gegebenheiten anzupassen. Der Autor ist hierzu berechtigt, aber + nicht verpflichtet. + + 3. Gew„hrleistung + ----------------- + 3.1 Das Programm wird berlassen, wie es ist. Es besteht kein + Anspruch auf Weiterentwicklung oder Žnderung des Programmes. + + 3.2 Die Autoren haften ausschlieálich im Rahmen der gesetzlichen + Bestimmungen. + + 3.3 Im Falle von Programmfehlern, die weder auf dem Fehlen + zugesicherter Eigenschaften beruhen, noch arglistig verschwiegen + wurden, ist jedweder Anspruch auf Schadensersatz ausgeschlossen. + Dies gilt nicht fr Sch„den, die durch Vorsatz oder grobe + Fahrl„ssigkeit der Autoren oder ihrer Erfllungsgehilfen (grobes + Verschulden) entstanden sind oder fr die nach dem + Produkthaftungsgesetz gehaftet wird. Das Recht auf Wandlung oder + Minderung bleibt in jedem Falle unberhrt. + + 3.4 Ein Anspruch auf Nachbesserung besteht nicht. Ebenso besteht + kein Anspruch auf Lieferung eines fehlerfreien Programmes. + + 3.5 Es obliegt dem Lizenznehmer, zu prfen, ob das Programm mit der + auf seinem Rechner installierten Hard- und Software zusammen + funktioniert. Eine Garantie fr die Funktionsf„higkeit des + Programmes mit jeglicher Hard- und Software besteht nicht. Es + besteht daher kein Anspruch auf Lieferung von Treibern oder + Modifizierung des Programmes. Fr den Fall, daá ein Fehler des + Programmes vorliegt, bleibt das Recht auf Wandlung oder Minderung + unberhrt. Ebenso unberhrt bleibt die Haftung fr grobes + Verschulden und die Haftung nach dem Produkthaftungsgesetz. + + 3.6 Die Autoren sind nicht verpflichtet, den Lizenznehmer durch + Beratung oder in sonstiger Weise bei der Benutzung des Programmes zu + untersttzen. Fr die Mitteilung von Hard- und + Softwareunvertr„glichkeiten und sonstiger bei der Benutzung des + Programmes auftretender Probleme ist der Autor jedoch dankbar. + + 4. Sonstige Bestimmungen + ------------------------ + 4.1 Soweit rechtlich m”glich wird als Gerichtsstand Aachen + vereinbart. + + 4.2 Fr s„mtliche Rechtsbeziehungen zwischen den Autoren und dem + Lizenznehmer gilt das Recht der Bundesrepublik Deutschland. Bei + Lieferungen in das Ausland ist die Anwendung des UN-Kaufrechts + ausgeschlossen. + + 4.3 Sollten einzelne Bestimmungen dieser Vereinbarung + rechtsunwirksam sein, bleibt die Wirksamkeit der brigen + Bestimmungen davon unberhrt. Autoren und Lizenznehmer sind + verpflichtet, anstelle der unwirksamen Klausel eine solche zu + vereinbaren, die der unwirksamen Klausel wirtschaftlich am n„chsten + kommt. + + 4.4 Žnderungen und Abweichungen von dieser Vereinbarung bedrfen der + Schriftform. Dies gilt insbesondere fr ein Abweichen von diesem + Schriftformerfordernis selbst. Das Schriftformerfordernis ist bei + Verwendung eines Telefax-Ger„tes gewahrt. + diff --git a/distrib/setup.all/neues.txt b/distrib/setup.all/neues.txt new file mode 100644 index 0000000..8bda069 --- /dev/null +++ b/distrib/setup.all/neues.txt @@ -0,0 +1,439 @@ + + ============================================================================== + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + Was gibt es Neues? + + ============================================================================== + + Version 3.60: + + Allgemein: + ~~~~~~~~~ + - Capitel ist nun Freeware + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - % + + ============================================================================== + Version 3.50: + + Allgemein: + ~~~~~~~~~ + - mehr debug information in capitel.deb eingefügt + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - ungarisch eingepflegt + - unterstützung einiger sehr schlechten capi-implementationen eingebaut + - neue installationsroutine + + ============================================================================== + + Version 3.43: + + Allgemein: + ~~~~~~~~~ + - nur capi 2.0: capitel kann nun zwischen unbekannten isdn anrufern + und unbekannten analogen anrufern unterscheiden ("Unknown ISDN" + / "Unknown analog"). Lesen sie die FAQ auf www.2tec.com um unbe- + kannten anrufern speziele ansagetexte zuzuordnen. + + - nur capi 2.0: in capitel.cfg kann man nun eine abgehende rufnummer + für die rückrufoption einstellen. bitte in capitel.cfg für details + nachlesen. + + ============================================================================== + + Version 3.42: + + Allgemein: + ~~~~~~~~~ + - callback nur wenn mind. x sekunden aufgesprochen wurde. + siehe capitel.cfg "call_back_limit" + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - % + + ============================================================================== + + Version 3.40: + + Allgemein: + ~~~~~~~~~ + - mehr debuginfos für capi eingebaut + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - neue installationsroutine + + ============================================================================== + + Version 3.37: + + Allgemein: + ~~~~~~~~~ + - geringfügiges datumsproblem im logfile gefixt. + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - fehler beim sicher von unbekannten anrufern beseitigt + - "alles selektieren" und "auswahl umkehren" eingefügt. + + ============================================================================== + + Version 3.36: + + Allgemein: + ~~~~~~~~~ + - mit "zero_behavior" in capitel.cfg kann das verhalten der führenden + nullen configuriert werden, welche die capi bei der caller-id meldet. + nähere informationen in capitel.cfg. + + OS/2: + ~~~~ + - dicker fehler in 3.35 gefixt. 3.35 lief nicht auf capi 1.1 (teles). + + Win 95/NT: + ~~~~~~~~~ + - HINWEIS: VOR DER BENUTZUNG DIESER VERSION: ZUERST ALLE ALTEN + RUFE LÖSCHEN!!! + + - Es können mehrere Einträge gleichzeitg ausgewählt werden, um die + Anrufe auf einmal abzuspielen oder auf einmal zu löschen. + + - Wenn ein nicht abgehörter Anruf gelöscht werden soll, erscheint immer + ein Warnung, auch wenn "Rückfrage beim Löschen" abgeschaltet ist. + + - Anrufe lassen sich über den Menüpunkt "Call/Save As" unter beliegem + Namen als WAV-File speichern. + + - Über einen Klick auf die Spaltenüberschriften lassen sich die + Einträge nach den entsprechenden Kriterien sortieren. + + - Dänische Sprache hinzugefügt. + + ============================================================================== + + Version 3.35: + + Allgemein: + ~~~~~~~~~ + - % + + OS/2: + ~~~~ + - Sprachwirrwar in den dialogen eseitigt (nur in v3.33) + + Win 95/NT: + ~~~~~~~~~ + - % + + ============================================================================== + + Version 3.33: + + Allgemein: + ~~~~~~~~~ + - Schließdialog eingebaut. + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - Capitel zeigt im popup-Fenster selten den falschen Anrufer. + - Bugfix für Windows 2000 RC2 + + ============================================================================== + + Version 3.22: + + Allgemein: + ~~~~~~~~~ + - % + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - Italienische Version + + ============================================================================== + + Version 3.20: + + Allgemein: + ~~~~~~~~~ + - % + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - Fix für Win9x (zufügen eines neuen Anrufers) + - Niederländische Version + - Norwegische Version (Bokmal) + - Finnische version + - Capitel geht nun auch in den Systray + + ============================================================================== + Version 3.11: + + Allgemein: + ~~~~~~~~~ + - % + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - Fix für das Problem bei der Hagenuk CAPI beim Shutdown von Win95 + + ============================================================================== + Version 3.10: + + Allgemein: + ~~~~~~~~~ + - Rückruf implementiert. + - Rückruf Zeitabhängig konfigurierbar + - Einige kleinere Fehler gefixt. + - Fehler bei den zeitabhängigen Funktionen beseitigt + - Unterstützung von DDI (Direct Dial In) + - Jahr 2000 getestet + + OS/2: + ~~~~ + - % + + Win 95/NT: + ~~~~~~~~~ + - Konfigurationsoberfläche überarbeitet. + - Absturz bei DTMF-gesteuerten Programmaufruf beseitigt + - Französische Version (Autodetect) + - Spanische Version (Autodetect) + + ============================================================================== + + Version 3.01: + + Allgemein: + ~~~~~~~~~ + - CapiTel als Caller-ID ist nun FREEWARE! + (Sie müssen VERZOEGERUNG auf 999 sekunden stellen) + + ============================================================================== + + Version 3.00: + + Allgemein: + ~~~~~~~~~ + - CapiTel ist nun ein volles Caller-ID Programm + + ============================================================================== + + Version 2.29: + + Allgemein: + ~~~~~~~~~ + - Konfigurierbare DTMF-Schranken + + ============================================================================== + + Version 2.28: + + Allgemein: + ~~~~~~~~~ + - Einige Bugfixes bei den zeitabhängigen Funktionen. + - Helpmenü überarbeitet. + - Nach der Fernabfrage CapiTel sendet nun ein "beep beep beep beep beep" + anstatt von "beeeeeeeeeeeeeeeeep". + - Umschaltung von A-Law nach U-Law Codes möglich. + - Fehler bei Fernabrage in der deutschen Version. + - "Add as new Caller"-Menüpunkt aktualisiert sofort den aktuellen Eintrag. + - Einige möglichen Fehleingaben in der Konfiguration abgefangen. + - Capitel kann nun piepsen, wenn rufe da sind (nur über CapiTel.CFG einstellbar). + - CAPI 2.0: Rufe ohne Caller-ID werden nun als "Unknown" angezeigt. + - CAPI 2.0: Fehler beim ausdecodieren der CallerID gefixt. + - CapiTel muss nun beim start nicht zwingend aktiviert sein (siehe neuen eintrag + in CapiTel.CFG). + - Fehler bei den DTMF-Codes gefixt. + - Priorität von Capitel über CapiTel.CFG einstellbar. + - CTI-Unterstützung eingebaut. + + OS/2: + ~~~~ + - CapiTel kann nun mehrfach installiert und gestartet werden. + + Win 95/NT: + ~~~~~~~~~ + - Gelöschte Wav's werden ins Recycle-BIN verschoben. + - FIX: Seltener Protection Fault beim beenden von Capitel. + - Setup-Programm überschreibt vorhandene CFG-Files nicht mehr. + - Falsche Reihenfolge der Menübuttons gefixt. + - Fehler bei "ignore empty calls" gefixt. + - DTMF-Reboot auch unter NT verfügbar (falls User die Rechte dazu hat). + - Parameterübergabe an gestartete Programme gefixt. + - Enable/Disable-Flag bei Remote-Actions funktioniert nun korrekt. + - Neue, noch einfachere Installation. + + ============================================================================== + + Version 2.27: + + Allgemein: + ~~~~~~~~~ + - + + OS/2: + ~~~~ + - Capitel funktionierte auf FAT-Partitionen nicht. + - Workaround fr Diehl Capi 2.0 (100% Prozessorlast). + + Win 95/NT: + ~~~~~~~~~ + - + + ============================================================================== + + Version 2.26: + + Allgemein: + ~~~~~~~~~ + - Neuer Button/Menue-Eintrag, um alle neuen Anrufe abspielen zu koennen + - Neuer Button/Menue-Eintrag, um eine fremde Nummer neu in die + Anrufer-Datenbank zu uebernehmen + + OS/2: + ~~~~ + - + + Win 95/NT: + ~~~~~~~~~ + - + + ============================================================================== + + Version 2.25: + + Allgemein: + ~~~~~~~~~ + - Alle Versionen (englisch, deutsch, Text-Modus) nun in einem Archiv. + - Neue Installation. + - Wenn zwar die CAPI*.DLL vorhanden war, aber kein Treiber, dann konnte + es zu kleinen Problemen kommen. + + OS/2: + ~~~~ + - Support fuer CAPI 1.1 und CAPI 2.0 nun in einer EXE-Datei. + - Automatische Erkennung von CAPI 1.1 und CAPI 2.0 + + Win 95/NT: + ~~~~~~~~~ + - + + ============================================================================== + + Version 2.24: + + Allgemein: + ~~~~~~~~~ + - + + OS/2: + ~~~~ + - CAPI 2.0 Support (CAPI20.DLL). Getestet mit Diehl Diva Pro 2.0 + + Win 95/NT: + ~~~~~~~~~ + - Erste deutsche Version. + + ============================================================================== + + Version 2.23: + + Allgemein: + ~~~~~~~~~ + - Max. Aufnahmezeit funktionierte nicht + + OS/2: + ~~~~ + - Workaround fuer den OS/2 Bug, dass manchmal die WAV-Dateien + nicht abgespielt werden konnten. + - Fehler beim Workaround aus Version 2.20 behoben + - Erste deutsche Version (es gibt noch kein deutsches ReadMe!) + (Die deutsche Win 95/NT Version ist noch in Arbeit) + + Win 95/NT: + ~~~~~~~~~ + - CapiTel akzeptierte die WAV-Dateien vom Windows-Recorder nicht. + - Support fuer Eicon/Diehl-Karten (getestet mit Diehl Diva Pro 2.0) + + ============================================================================== + + Version 2.10: + + Allgemein: + ~~~~~~~~~ + - Wichtige Information im LiesMich, unter 'Verfuegbarkeit': + + Ihnen ist es ausdruecklich gestattet, das unmodifizierte CapiTel + ZIP-Archiv im Internet, auf Shareware CD-Roms, in Mailboxen + usw. zu verbreiten. + + - Keine deutschen Umlaute mehr in CAPITEL.NUM + - Zeitabhaengige Konfigurationen funktionieren nun auch in CAPITEL.CFG + - Neuer Eintrag in CAPITEL.CFG: debug_data_b3, setzen Sie es auf 1 + wenn sie B3 Daten-Pakete analysieren wollen. + + OS/2: + ~~~~ + - EAZ 0 kann wieder benutzt werden + - Der Anrufer-Container wurde nicht immer korrekt aktualisiert + - Leere Eintraege in den Einstellungen werden nun mit korrekten + Werten ersetzt, z.B. '*' fuer die Default-Einstellung + - Die Hilfe-Blase funktionierte nicht beim Fernsteuerungs-Button + + Win 95/NT: + ~~~~~~~~~ + - CapiTel reagiert nun auch auf 3,1 KHZ Audio Dienste + - Die Spalten fuer die max. Aufnahmedauer und die Annahmeverzoegerung + waren vertauscht. + + ============================================================================== + + diff --git a/distrib/setup.all/nl.num b/distrib/setup.all/nl.num new file mode 100644 index 0000000..157ac08 --- /dev/null +++ b/distrib/setup.all/nl.num @@ -0,0 +1,371 @@ +010:Rotterdam +0111:Zierikzee +0113:Goes +0114:Hulst +0115:Terneuzen +0117:Breskens +0118:Middelburg +013:Tilburg +015:Delft +0161:Gilze Rijen +0162:Raamsdonksveer +0164:Woensdrecht +0165:Roosendaal +0166:Tholen +0167:Dinteloord +0168:Zevenbergen +0172:Bodegraven +0174:Hoek van Holland +0180:Ridderkerk +0181:Hellevoetsluis +0182:Gouda +0183:Rijswijk nb +0184:Hardinxveld-Giessendam +0186:Zuid-Beijerland +0187:Middelharnis +020:Amsterdam +0222:Texel +0223:Den Helder +0224:Callantsoog +0226:Petten +0227:Medemblik +0228:Enkhuizen +0229:Hoorn nh +023:Hoofddorp +024:Nijmegen +0251:Beverwijk +0252:Sassenheim +0255:IJmuiden +026:Arnhem +0294:Loenen a/d Vecht +0297:Aalsmeer +0299:Volendam +030:Utrecht +0313:Doesburg +0314:Doetinchem +0315:Gaanderen +0316:Zevenaar +0317:Wageningen +0318:Ede gld +0320:Lelystad +0321:Dronten +033:Amersfoort +0341:Ermelo +0342:Barneveld +0343:Maarsbergen +0344:Tiel +0345:Leerdam +0346:Maarssen +0347:Vianen zh +0348:Lopik +035:Hilversum +036:Almere +038:Zwolle +040:Eindhoven +0411:Boxtel +0412:Oss +0413:Volkel +0416:Kaatsheuvel +0418:Zaltbommel +043:Maastricht +045:Heerlen +046:Geleen +0475:Roermond +0478:Venray +0481:Oosterhout gld +0485:Vianen nb +0486:Grave +0487:Maasbommel +0488:Dodewaard +0492:Helmond +0493:Deurne +0495:Weert +0497:Bergeyk +0499:Oirschot +050:Groningen +0511:Hardegarijp +0512:Drachten +0513:Heerenveen +0514:Stavoren +0515:Sneek +0516:Appelscha +0517:Harlingen +0518:Berlikum fr +0519:Dokkum +0521:Steenwijk +0522:Meppel +0523:Slagharen +0524:Coevorden +0525:Elburg +0527:Urk +0528:Hoogeveen +0529:Nieuwleusen +053:Haaksbergen +0541:Denekamp +0543:Winterswijk +0544:Groenlo +0545:Borculo +0546:Almelo +0547:Markelo +0548:Nijverdal +055:Apeldoorn +0561:Wolvega +0562:Terschelling / Vlieland +0566:Akkrum +0570:Deventer +0571:Terwolde +0572:Raalte +0573:Laren gld +0575:Zutphen +0577:Garderen +0578:Vaassen +058:Leeuwarden +0591:Emmen dr +0592:Assen +0593:Westerbork +0594:Grijpskerk +0595:Oldenzijl +0596:Delfzijl +0597:Winschoten +0598:Hoogezand Sappemeer +0599:Stadskanaal +06:Mobiel Nummer +070:Den Haag +071:Leiden +072:Alkmaar +073:'s-Hertogenbosch +074:Hengelo ov +075:Zaandam +076:Breda +077:Venlo +078:Dordrecht +079:Zoetermeer +001242:Bahamas +001264:Anguilla +001268:Antigua en Barbuda +001345:Caymaninseln +001441:Bermuda +001664:Montserrat +001758:St.Lucia +001787:Puerto Rico +001869:St. Kitts en Nevis +001:USA/Canada +0020:Egypte +00212:Marokko +00213:Algerien +00216:Tunesien +00218:Libyen +00220:Gambia +00221:Senegal +00222:Mauretanien +00223:Mali +00224:Guinea +00225:Ivoorkust +00226:Burkina Faso +00227:Niger +00228:Togo +00229:Benin +00230:Mauritius +00231:Liberia +00232:Sierra Leone +00233:Ghana +00234:Nigeria +00235:Tsjaad +00236:Centraal Afrikaanse Republiek +00237:Kamerun +00238:Kap Verde +00239:Sao Toma en Principe +00240:aequatorialguinea +00241:Gabun +00242:Kongo +00243:Zaire +00244:Angola +00245:Guinea-Bissau +00247:Ascension +00248:Seschellen/Seychellen +00249:Sudan +00250:Ruanda +00251:Etheopië +00252:Somalia +00253:Dschibuti +00254:Kenia +00255:Tansania +00256:Uganda +00257:Burundi +00258:Mosambik +00260:Sambia +00261:Madagaskar +00262:Reunion +00263:Simbabwe +00264:Namibia +00265:Malawi +00266:Lesotho +00267:Botsuana +00268:Swasiland +00269:Mayotte (Komoren) +0027:Zuid Afrika +00290:Saint Helena +00291:Eritrea +00297:Aruba +00298:Faeroeer +00299:Groenland +0030:Griekenland +0031:Nederland +0032:Belgie +00331:Paris +0033:Frankrijk +0034:Spanje +00350:Gibraltar +00351:Portugal +00352:Luxemburg +00353:Ierland +00354:IJsland +00355:Albanie +00356:Malta +00357:Cyprus +00358:Finland +00359:Bulgarije +0036:Hongarije +00370:Litauen +00371:Lettland +00372:Estland +00373:Moldau Republik +00374:Armenien +00375172:Minsk +00375:Belarus (Wit Russland) +00376:Andorra +00377:Monaco +00378:San Marino +0038044:Kiev +00380:Ukraine +00381:Joegoslawie/Montenegro/Servië +00385:Kroatie +00386:Slowenie +00387:Bosnie-Herzegowina +00389:Makedonie/Mazedonie +0039541:San Marino +00396:Vaticaanstad +0039:Italie +0040:Rumanie +004175:Liechtenstein +0041:Zwitserland +00420:Tschechie/Tschechische Republiek +00421:Slowakei/Slowakische Republiek +0043:Oosterijk +00441:London +0044:Engeland/Noord Ierland +0045:Denemarken +0046:Zweden +0047:Noorwegen +0048:Polen +0049:Duitsland +00500:Falkland eilanden +00501:Belize +00502:Guatemala +00503:El Salvador +00504:Honduras +00505:Nicaragua +00506:Costa Rica +00507:Panama +00508:Saint Pierre und Miquelon +00509:Haiti +0051:Peru +0052:Mexico +00537:Havanna +0053:Cuba +0054:Argentinië +0055:Brasilie +0056:Chile +0057:Colombia +0058:Venezuela +00590:Guadeloupe +00591:Bolivie +00592:Guyana +00593:Ecuador +00594:Frans-Guayana +00595:Paraguay +00596:Martinique +00597:Suriname +00598:Uruguay +00599:Nederlandse Antillen +0060:Malaysia +0061:Australië +0062:Indonesie +0063:Philippinen +0064:Nieuw Zeeland +0065:Singapur +00662:Bangkok +0066:Thailand +00670:Marianen +00671:Guam +0067210:Davis (Antartis) +0067211:Mawson (Antartis) +0067212:Casey (Antartis) +0067213:Macquarrie Island (Antartis) +006722:Kokos eilanden (Australie) +006723:Norfolk eilanden (Australie) +006724:Kerst-eiland (Australie) +00673:Brunei Darussalam +00674:Nauru +00675:Papua-Neuguinea +00676:Tonga +00677:Salomonen +00678:Vanuatu +00679:Fidschi +00680:Palau +00682:Coocos Eilanden +00684:Amerikaans-Samoa +00685:Samoa +00686:Kiribati +00687:Neukaledonien +00688:Tuvalu +00689:Frans-Polynesie +00691:Mikronesie +00692:Marshall Eilanden +007095:Moskau +007812:St. Petersburg +007:GUS (Russische Federatie) +00813:Tokio +0081:Japan +0082:Korea (Republiek) +0084:Vietnam +00850:Korea (Democratische Volksrepubliek) +00852:Hongkong +00853:Macau +00855:Kambodja +00856:Laos +008662:Taipei +0086:China (Volksrepubliek) +00871:Atlantische Oceaan (Oost) +00872:Pazifische Oceaan +00873:Indische Oceaan +00874:Atlantische Oceaan (West) +00880:Bangladesch +00886:China (Taiwan) +0090:Turkije/NoordCypres +0091:Indie +0092:Pakistan +0093:Afghanistan +0094:Sri Lanka +0095:Myanmar (Birma) +00960:Malediven +00961:Libanon +00962:Jordanie +00963:Syrie +00964:Irak +00965:Koeweit +00966:Saudi Arabiën +00967:Jemen +00968:Oman +00971:Verenigte Arabische Emiraten +00972:Israel +00973:Bahrain +00974:Katar +00975:Bhutan +00976:Mongolei +00977:Nepal +0098:Iran +00993:Turkmenistan +00994:Aserbaidschan +00995:Georgien +00996:Kirgisistan diff --git a/distrib/setup.all/order.txt b/distrib/setup.all/order.txt new file mode 100644 index 0000000..0156544 --- /dev/null +++ b/distrib/setup.all/order.txt @@ -0,0 +1 @@ +Capitel is freeware now... diff --git a/distrib/setup.all/orderbmt.txt b/distrib/setup.all/orderbmt.txt new file mode 100644 index 0000000..b52b7d8 --- /dev/null +++ b/distrib/setup.all/orderbmt.txt @@ -0,0 +1 @@ +CapiTel is Freeware now... diff --git a/distrib/setup.all/pt.num b/distrib/setup.all/pt.num new file mode 100644 index 0000000..49ba290 --- /dev/null +++ b/distrib/setup.all/pt.num @@ -0,0 +1,129 @@ +21:Lisboa + +22:Porto + +289:Faro + +281:Tavira + +241:Abrantes + +295:Angra do Heroismo + +235:Arganil + +234:Aveiro + +284:Beja + +253:Braga + +273:Bragan‡a + +262:Caldas da Rainha + +272:Castelo Branco + +286:Castro Verde + +276:Chaves + +239:Coimbra + +292:Corvo + +275:Covilh„ + +268:Estremoz + +266:Evora + +233:Figueira da Foz + +292:Flores + +291:Funchal + +295:A‡ores + +271:Guarda + +292:Horta + +277:Idanha-a-Nova + +244:Leiria + +231:Mealhada + +278:Mirandela + +285:Moura + +283:Odemira + +255:Penafiel + +254:Peso da Regua + +292:Pico + +236:Pombal + +296:Ponta Delgada + +242:Ponte de Sor + +245:Portalegre + +282:Portim„o + +291:Porto Santo + +274:Proen‡a-a-Nova + +296:Santa Maria + +243:Santarem + +269:Santiago do Cacem + +256:S. Joao da Madeira + +295:S. Jorge + +238:Seia + +265:Setubal + +279:Torre de Moncorvo + +249:Torres Novas + +261:Torres Vedras + +251:Valen‡a + +258:Viana do Castelo + +263:Vila Franca de Xira + +252:Vila Nova de Famalic„o + +259:Vila Real + +232:Viseu + +93:Optimus + +96:TMN + +91:Telecel + +:Nr. Privado + + + + + + \ No newline at end of file diff --git a/distrib/setup.all/readme.txt b/distrib/setup.all/readme.txt new file mode 100644 index 0000000..cdb5f36 --- /dev/null +++ b/distrib/setup.all/readme.txt @@ -0,0 +1,341 @@ + + + + ////// /////// ////// // /////// ////// // + // // // // // // // // // + // /////// ////// // // //// // + // // // // // // // // + ////// // // // // // ////// ////// + + + ISDN CAPI based Answering Machine + and Caller-ID for OS/2, Windows 95, + Windows 98, Windows ME, Windows NT, + Windows 2000 and Whistler + + + + + + Introduction: + ~~~~~~~~~~~~ + CapiTel is a 32-Bit Answering Machine and Caller-ID for OS/2, Windows 95, + Windows 98, Windows ME, Windows NT, Windows 2000 and Whistler. + Graphical and Text-Mode Versions are available for all operating systems. + + Thanks to all the users who sent us their bug reports and feature ideas, + do not stop with your feedback! + + A special thanks goes to the following people: + + - Kerstin Glodzinski + - Norbert Schulze + - Kolja Nowak + - Peter Franken + - Dirk Schreiber + + + Main Features: + ~~~~~~~~~~~~~ + - 32-Bit Multi-Threaded Answering Machine (as Shareware) + - 32-Bit Caller-ID (as FREEWARE) + - Graphical and Text-Mode versions for OS/2, based on CAPI 1.1 and 2.0 + - Graphical and Text-Mode versions for Win 95/NT, based on CAPI 2.0 + - Complete Support for .WAV-Files + - Remote Control Functions, controlled by DTMF tones. + - Silence Detection + - Completely configurable + - Callback + - Year 2000 approved + - Languages: + - english + - german + - french (Windows only) + - spanish (Windows only) + - norwegian (Windows only) + - nynorsk (Windows only) + - dutch (Windows only) + - italian (Windows only) + - hungarian (Windows only) + - finnish (Windows only) + - danish (Windows only) + + + Installation under OS/2: + ~~~~~~~~~~~~~~~~~~~~~~~ + Before you are able to use CapiTel, you have to install the OS/2 + Multimedia Package MMPM/2 and a CAPI 1.1 or CAPI 2.0 compliant + driver for your ISDN card. + + The installation itself is easy. Just unzip the complete distribution + archive into the desired destination directory and run INSTALL.CMD. + This REXX script will create a CapiTel object on your Desktop. + + If you are going to create CapiTel objects on your own, do not + forget to set the "Working Directory" ! + + CAPI 1.1 is unable to handle more than one applications that listen on + the same EAZ. Therefore: If you use CapiTel, make sure it listens to + the configured EAZ alone. + With CAPI 2.0 this is no problem. + + + Installation under Win 95/NT: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Unzip the distribution archive into a temporary directory and + start SETUP.EXE, this will install CapiTel on your machine and you + will find it in the Start-Menu. + + + Before you begin: + ~~~~~~~~~~~~~~~~ + This topic is very important, because many users misconfigure CapiTel + before they even know that it is working at all. Therefore before you + begin to play with all the properties, please start CapiTel, leave + the properties alone and call yourself. If CapiTel works on your + system, you should see an incoming call from your own number. By + default it listens to all numbers. + Feel free to configure CapiTel after this little test has been + successful. + + If you would like to run CapiTel as a FREEWARE Caller-ID, please set up + ANSWER DELAY to 999 seconds. Then CapiTel is FREE! + + + Configuration: + ~~~~~~~~~~~~~ + Use the Properties-Notebook to configure CapiTel. + + + General: - Play Ringing-WAV + If this item is selected, the Ringing-WAV is played on + your machine if an incoming call is detected. + + - Generate 16-Bit .WAV Files + Mark the checkbox if your soundcard supports this. + + - Restore Window on new Calls + If an incoming call is detected, the CapiTel window pops + to the front. Under OS/2, it doesn't steal the focus! + + - Confirm on Call-Deletion + Mark the checkbox if you want to be asked before + CapiTel deletes a call. + + - Ignore empty Calls + If you mark this checkbox, all calls with a recording + time of 0 seconds won't be recognized by CapiTel + + - Expand Area-Code + If a Caller-ID is detected that can't be found in the + Callers-Database, the name of the caller's city is shown. + + - DTMF Support + You can completely disable the DTMF Support (Remote Control) + with this item. + + - Use ulaw-Codec + This switch is only important to users in the United States + of America. It will enable the ulaw-Codec instead of the + alaw-Codec which is used in Europe. + + - Answer Delay + Specify the default delay (in seconds) before CapiTel + answers a call. + + - Max. Recording Time + Specify the default maximum recording time (in seconds). + CapiTel automatically hangs up if a caller speaks and + exceeds this limit! + + - Silence Detection + Specify the Silence Detection (in seconds). + CapiTel automaticalls hangs up if a caller stops speaking + and exceeds this limit! + + - Welcome-WAV + The default file that is played when CapiTel answers a call. + + - Ringing-WAV + The default file that is played on your machine when an + incoming call is detected. + + - Logfile + CapiTel can log all calls into a log-file. You may also + specify a Named Pipe or a Device (ie. your printer), if + your operating system supports this. + + + Ports: To edit, double-click on an entry or use the PopUp-Menu. + If there is no port listed, CapiTel reacts on ALL available ports! + + Port: A short description for the port. + + EAZ/MSN: The EAZ or the MSN for this port. If you are using + a CAPI 1.1 driver, fill in an EAZ between 0 and 9 + here. If you are using CAPI 2.0, supply a complete + MSN. + + Welcome WAV/ALW: The WAV or ALW file that is played to the caller. + Use * for the default. + + Ringing WAV: The WAV that is played on your machine when + an incoming call is detected. + Use * for the default. + + Reaction: CapiTel is able to reject a call. Here you define how it + should behave: 'Normal' for normal behaviour, 'Busy' to + simulate a busy line, 'Refuse' to refuse the call, and + 'Unavailable' to simulate an unavailable service. + Important: The reaction you define here is only valid + for the ISDN card. If another device (ie. an ISDN + telephone) is also listening on the EAZ/MSN, the caller + won't get CapiTel's reaction! There is nothing we can + do about this. That's the way ISDN works. + + Answer Delay: The answer delay (in seconds) for the port. + Use * for the default. + + Max. Recording Time: The maximum recording time (in seconds) + for the port. + Use * for the default. + + + Callers: To edit, double-click on an entry or use the PopUp-Menu. + If someone calls you and the incoming number matches one in this + container, the caller specific settings are used. + + Name: The caller's name. + + Number: The caller's number which is used when identifying + incoming calls. You may use the * wildcard at the end of + a number (and only there).. ie. 024192090* matches ALL + numbers that start with 024192090. + + The other fields are described under Ports. + + + Remote Actions: + To edit, double-click on an entry or use the PopUp-Menu. + + DTMF Code: If this DTMF Code is detected, the appropiate + Action is started. + + Action: The following actions are available: + + - Remote Control plays all calls that have been + recorded. Use the *-Button on your phone to delete + them. + - Reboot (do not forget that you will get stuck at + Win NT's login-prompt when using this feature. You + may override the login-prompt using utilities like + TweakUI) + - Deactivate CapiTel + - Quit CapiTel + - Execute starts a program on your machine. You have + to fill in the Program, Arguments and Title fields! + - Callback. With this DTMF-Code you can define a new + callback number. entering no new number disables + callback. + + Window Title: This is the window's title of an EXECUTE-Action. + + + Use "Save" to save the new settings, or "Cancel" to discard them. + + A note about the Port/Caller specific settings: + If you specify something for a caller, it takes precedence over the + settings you might have defined for a Port. + + + Usage: + ~~~~~ + The most important part of the CapiTel main window is the container. There + you will see all incoming calls. The fields are self explanatory. + Under OS/2, you may throw colours and fonts into the main window, they + will be remembered. + + If you are using CapiTel with hidden controls, you can access the various + menu functions with the popup menu you get when you click with your + right mouse button on the container. Under OS/2, the window can be moved + by dragging the sizing border with the right mouse button pressed. + + Use the "Record" option to record a new welcome message by calling + yourself. A dialog will pop up asking you for a filename. WELCOME.ALW is + the default. You can use the created ALW files in the Port and + Callers tabs of the Properties-Notebook. + + Of course you can create a .WAV file yourself and use it directly! + + If someone calls you and wants to stop the Welcome-WAV, he just + pushes the #-Button on his phone. + + If you have any questions, contact us! + + + Hints for Experts: + ~~~~~~~~~~~~~~~~~ + Almost everything in CapiTel can be configured time-dependent. It can't + be found in the Properties-Notebook, because we didn't want to confuse + newbies. Edit CAPITEL.CFG, CAPITEL.PRT, CAPITEL.NAM or CAPITEL.ACT and + modify the entries as follows: + + entry=[~][~]...[~] + + chunk_x=-,, + + fromday/today can be one of: Mo, Tu, We, Th, Fr, Sa, Su + Lower Day-Value must be first in the Day-Ranges. ie. Fr-Mo is not allowed! + + fromtime/totime must be xx:yy (xx=hours, yy=minutes) in 24 Hour format. + + CapiTel parses the chunks from left to right and stops after the first hit. + Time-dependent entries must not exceed 512 characters. + The default value is used if there is no hit. + + Some examples can be found in CAPITEL.CFG + + If you find bugs regarding this feature, please send us a DETAILED + bug-report. + + + + License Agreement: + ~~~~~~~~~~~~~~~~~ + See LICENSE.TXT or LIZENZ.TXT (German Version) for details. By using + CapiTel you accept the License Agreement. + + + Availability: + ~~~~~~~~~~~~ + All CapiTel versions can be found here: + + - World Wide Web: http://www.2tec.com + + You are explicitly allowed to distribute the unmodified CapiTel + ZIP-archive (and the EXE-archive for the Windows version) on the + Internet, on Shareware CD-Roms, on Bulletin Board Systems and so on. + + + Final Note: + ~~~~~~~~~~ + Comments and Bug-Reports are welcome. But please do not forget that + CapiTel is an easy-to-use and intuitive answering machine, and not + a complex voice-mailbox, a fax server or a full CTI system! + + + + Have fun, + the authors, + + + Werner Fehn & Carsten Wimmer + + wf@2tec.com cw@2tec.com + www.2tec.com/wf www.2tec.com/cw + Fax: +49-241-9519041 Fax: +49-241-9571314 + + Schuttenhofweg 220 Trierer Str. 281a + 52080 Aachen 52078 Aachen + Germany Germany + diff --git a/distrib/setup.all/ringing.wav b/distrib/setup.all/ringing.wav new file mode 100644 index 0000000000000000000000000000000000000000..f8d4292d0fb411872b8676e3ed8fd1938e03d40e GIT binary patch literal 10026 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 L|42+7neY4`JMe+U literal 0 HcmV?d00001 diff --git a/distrib/setup.all/swiss.num b/distrib/setup.all/swiss.num new file mode 100644 index 0000000..28bc899 --- /dev/null +++ b/distrib/setup.all/swiss.num @@ -0,0 +1,244 @@ +01:Zürich +021:Lausanne +022:Genf +024:Yverdon, Aigle +026:Fribourg +027:Sitten +031:Bern +032:Biel +033:Thun +034:Burgdorf, Langnau i.E +041:Luzern, ZG, UR, NW, OW +052:Winterthur, Schaffhausen +055:Rapperswil +056:Baden +061:Basel +062:Olten +071:St. Gallen +081:Graubünden +076:Natel (diAx Mobile) +078:Natel (orange communications) +079:Natel (swisscom Mobile) +091:Tessin + +0020:Aegypten +00240:Aequatorialguinea +00251:Aethiopien +0093:Afghanistan +00355:Albanien +00213:Algerien +00684:Amerikanisch-Samoa +0033078:Andorra +00244:Angola +001264:Anguilla +001268:Antigua und Barbuda +0054:Argentinien +00374:Armenien +00297:Aruba +00247:Ascension +00994:Aserbaidschan +00871:Atlantischer Ozean (Ost) +00874:Atlantischer Ozean (West) +0061:Australien +00973:Bahrain +00662:Bangkok +00880:Bangladesch +001242:Bahamas +00375:Belarus (Weissrussland) +0032:Belgien +00501:Belize +00229:Benin +001441:Bermuda +00975:Bhutan +00591:Bolivien +00387:Bosnien-Herzegowina +00267:Botsuana +0055:Brasilien +00673:Brunei Darussalam +00359:Bulgarien +00226:Burkina Faso (Obervolta) +00257:Burundi +0067212:Casey (Antarktis) +001345:Caymaninseln +0056:Chile +00866:China(Taiwan) +0086:China (Volksrepublik) +00682:Cookinseln +00506:Costa Rica +00225:C“te d'Ivoire (ehm. Elfenbeinkueste) +0045:Daenemark +0067210:Davis (Antarktis) +00253:Dschibuti +00503:El Salvador +00225:Elfenbeinkueste +00593:Ecuador +00291:Eritrea +00372:Estland +00298:Faeroeer +00500:Falklandinseln +00679:Fidschi +00358:Finnland +0033:Frankreich +00594:Franzoesisch-Guayana +00689:Franzoesisch-Polynesien +00241:Gabun +00220:Gambia +00995:Georgien +00233:Ghana +00350:Gibraltar +0030:Griechenland +00299:Groenland +0044:Grossbritannien/Nordirland +00590:Guadeloupe +00671:Guam +00502:Guatemala +00224:Guinea +00245:Guinea-Bissau +007:GUS (Russische Foederation) +00592:Guyana +00509:Haiti +00537:Havanna +00504:Honduras +00852:Hongkong +0091:Indien +00873:Indischer Ozean +0062:Indonesien +00964:Irak +0098:Iran +00353:Irland +00354:Island +00972:Israel +0039:Italien +0081:Japan +00967:Jemen +00962:Jordanien +00381:Jugoslawien/Montenegro/Serbien +00855:Kambodscha +00237:Kamerun +00238:Kap Verde +00974:Katar +00254:Kenia +00686:KirŤbati +00996:Kirgisistan +006722:Kokosinseln (Australien) +0057:Kolumbien +00242:Kongo +0082:Korea(Republik) +00850:Korea (Demokratische Volksrepublik) +00385:Kroatien +00537:Kuba +00965:Kuwait +00856:Laos +00266:Lesotho +00961:Libanon +00231:Liberia +00218:Libyen +00423:Liechtenstein +00370:Litauen +00371:Lettland +00352:Luxemburg +00853:Macau +0067213:Macquarrie Island (Antarktis) +00261:Madagaskar +00389:Makedonien/Mazedonien +00265:Malawi +0060:Malaysia +00960:Malediven +00223:Mali +00356:Malta +00222:Mauretanien +00230:Mauritius +00670:Marianen +00212:Marokko +00692:Marshallinseln +00596:Martinique +0067211:Mawson (Antarktis) +00269:Mayotte (Komoren) +0052:Mexiko +00691:Mikronesien +00373:Moldau Republik +00377:Monaco +00976:Mongolei +001664:Montserrat +00258:Mosambik +0095:Myanmar (Birma) +00264:Namibia +00674:Nauru +00977:Nepal +0064:Neuseeland +00687:Neukaledonien +00505:Nicaragua +0031:Niederlande +00599:Niederlaendische Antillen +00227:Niger +00234:Nigeria +006723:Norfolkinseln (Australien) +0047:Norwegen +00226:Obervolta +0043:Oesterreich +00968:Oman +00507:Pakistan +00680:Palau +00507:Panama +00675:Papua-Neuguinea +00595:Paraguay +00872:Pazifischer Ozean +0051:Peru +0063:Philippinien +0048:Polen +00351:Portugal +001787:Puerto Rico +00262:Reunion +00250:Ruanda +0040:Rumaeinien +00677:Salomonen +00260:Sambia +00685:Samoa +0039541:San Marino +00290:Saint Helena +00508:Saint Pierre und Miquelon +00239:Sao Tom‚ und Principe +00966:Saudi Arabien +0046:Schweden +0041:Schweiz +00221:Senegal +00248:Seschellen/Seychellen +00263:Simbabwe +0065:Singapur +0023222:Sierra Leone +00421:Slowakei/Slowakische Republik +00386:Slowenien +00252:Somalia +0034:Spanien +0094:Sri Lanka +001758:St.Lucia +001869:St. Kitts und Nevis +00249:Sudan +0027:Suedafrika +00597:Suriname +00268:Swasiland +00963:Syrien +008662:Taipei +00255:Tansania +0066:Thailand +00228:Togo +00676:Tonga +00235:Tschad +00420:Tschechien/Tschechische Republik +0090:Tuerkei/Nordzypern +00216:Tunesien +00993:Turkmenistan +00688:Tuvalu +00256:Uganda +00380:Ukraine +0036:Ungarn +00589:Uruguay +00678:Vanuatu +00396:Vatikanstadt +0058:Venezuela +00971:Vereinigte Arabische Emirate +0084:Vietnam +006724:Weihnachtsinsel (Australien) +00243:Zaire +00236:Zentralafrikanische Republik +00357:Zypern \ No newline at end of file diff --git a/distrib/setup.all/uk.num b/distrib/setup.all/uk.num new file mode 100644 index 0000000..312464f --- /dev/null +++ b/distrib/setup.all/uk.num @@ -0,0 +1,733 @@ +0113:Leeds +0114:Sheffield +0115:Nottingham +0116:Leicester +0117:Bristol +0118981:Aldermaston +0118:Reading +01200:Clitheroe +01202:Bournemouth +01204:Bolton +01205:Boston +01206:Colchester +01207:Consett +01208:Bodmin +01209:Redruth +0121:Birmingham +01223:Cambridge +01224:Aberdeen +01225:Bath +01226:Barnsley +01227:Canterbury +01228:Carlisle +01229:Barrow-in-Furness/Millom +01233:Ashford +01234:Bedford +01235:Abingdon +01236:Coatbridge +01237:Bideford +01239:Cardigan +01241:Arbroath +01242:Cheltenham +01243:Chichester +01244:Chester +01245:Chelmsford +01246:Chesterfield +01248:Bangor (Wales) +01249:Chippenham +01250:Blairgowrie +01252:Aldershot +01253:Blackpool +01254:Blackburn +01255:Clacton-on-Sea +01256:Basingstoke +01257:Coppull +01258:Blandford +01259:Alloa +01260:Congleton +01261:Banff +01262:Bridlington +01263:Cromer +01264:Andover +01267:Carmarthen +01268:Stanford-le-Hope +01269:Ammanford +01270:Crewe +01271:Barnstable +01273:Brighton +01274:Bradford +01276:Ascot +01277:Brentwood +01278:Bridgwater +01279:Bishops Stortford +01280:Buckingham +01282:Burnley +01283:Burton-on-Trent +01284:Bury-St-Edmunds +01285:Cirencester +01286:Caernarvon +01287:Guisborough +01288:Bude +01289:Berwick-on-Tweed +01290:Cumnock +01291:Shirenewton +01292:Ayr +01293:Crawley +01294:Ardrossan +01295:Banbury +01296:Aylesbury +01297:Axminster +01298:Buxton +01299:Bewdley +01300:Cerne Abbas +01301:Arrochar +01302:Doncaster +01303:Folkestone +01304:Dover +01305:Dorchester +01306:Dorking +01307:Forfar +01308:Bridport +01309:Forres +0131:Edinburgh +01320:Fort Augustus +01322:Dartford +01323:Eastbourne +01324:Falkirk +01325:Darlington +01326:Falmouth +01327:Weedon +01328:Fakenham +01329:Fareham +01330:Banchory +01332:Derby +01333:Peat Inn +01334:Peat Inn +01335:Ashbourne +01337:Ladybank +01339:Aboyne +01339:Ballater +01340:Craigellachie +01341:Barmouth +01342:East Grinstead +01343:Elgin +01344:Bracknell +01346:Fraserburgh +01347:Easingwold +01348:Fishguard +01349:Dingwall +01350:Dunkeld +01352:Mold +01353:Ely +01354:Doddington +01355:East Kilbride +01356:Brechin +01357:East Kilbride +01358:Ellon +01359:Pakenham +01360:Killearn +01361:Duns +01362:Dereham +01363:Crediton +01364:Ashburton +01366:Downham Market +01367:Faringdon +01368:Dunbar +01369:Dunoon +01371:Great Dunmow +01372:Esher +01373:Frome +01375:Stanford-le-Hope +01376:Braintree +01377:Driffield +01379:Diss +01380:Devizes +01381:Fortrose +01382:Dundee +01383:Dunfermline +01384:Dudley +01386:Evesham +01387:Dumfries/Langholm +01388:Bishop Auckland +01389:Dumbarton +01392:Exeter +01394:Shottisham +01395:Budleigh Salterton +01397:Fort William +01398:Dulverton +01400:Honington +01403:Horsham +01404:Honiton +01405:Goole +01406:Holbeach +01407:Holyhead +01408:Golspie +01409:Holsworthy +0141:Glasgow +01420:Alton +01422:Halifax +01423:Boroughbridge/Harrogate +01424:Hastings +01425:Burley +01427:Gainsborough +01428:Haslemere +01429:Hartlepool +01430:Market Weighton +01431:Helmsdale +01432:Hereford +01433:Hathersage +01434:Bellingham/Haltwhistle/Hexham +01435:Heathfield +01436:Helensburgh +01437:Clunderwen/Haverford West +01438:Stevenage +01439:Helmsley +01440:Haverhill +01442:Hemel Hempstead +01443:Pontypridd +01444:Haywards Heath +01445:Gairloch +01446:Barry +01449:Stowmarket +01450:Hawick +01451:Bourton-on-the-Water +01452:Gloucester +01453:Dursley +01454:Rangeworthy +01455:Hinckley +01456:Glenurquhart +01457:Glossop +01458:Glastonbury +01460:Chard +01461:Annan +01462:Hitchin +01463:Inverness +01464:Insch +01465:Girvan +01466:Huntly +01467:Inverurie +01469:Killingholme +01470:Edinbane +01471:Broadford +01472:Grimsby +01473:Ipswich +01474:Gravesend +01475:Greenock +01476:Grantham +01477:Congleton +01478:Portree +01479:Grantown-on-Spey +01480:Huntingdon +01481:Guernsey +01482:Hull +01483:Guildford +01484:Huddersfield +01485:Docking +01487:Warboys +01488:Great Shefford +01489:Fareham +01490:Corwen +01491:Nettlebed +01492:Colwyn Bay +01493:Great Yarmouth +01494:High Wycombe +01495:Pontypool +01496:Port Ellen +01497:Hay-on-Wye +01499:Inveraray +01501:Harthill +01502:Lowestoft +01503:Looe +01505:Johnstone +01506:Bathgate +01507:Alford, Lincs/Louth +01508:Brooke +01509:Loughborough +0151:Liverpool +01520:Lochcarron +01522:Lincoln +015242:Hornby +01524:Lancaster +01525:Leighton Buzzard +01526:Martin +01527:Redditch +01528:Laggan +01529:Sleaford +01530:Coalville +01531:Ledbury +01534:Jersey +01535:Keighley +01536:Kettering +01538:Ipstones +015394:Hawkshead/Ambleside +015395:Grange-over-Sands +015396:Sedbergh +01539:Kendal +01540:Kingussie +01542:Keith +01543:Burntwood +01544:Kington +01545:Llanarth +01546:Lochgilphead +01547:Knighton +01548:Kingsbridge +01549:Lairg +01550:Llandovery +01553:Kings Lynn +01554:Llanelli +01555:Lanark +01556:Castle Douglas +01557:Kirkcudbright +01558:Llandeilo +01559:Llandyssul +01560:Moscow +01561:Fordoun +01562:Kidderminster +01563:Kilmarnock +01564:Lapworth +01565:Knutsford +01566:Launceston +01567:Killin +01568:Leominster +01569:Stonehaven +01570:Lampeter +01571:Lochinver +01572:Oakham +01573:Kelso +01575:Kirriemuir +01576:Lockerbie +01577:Kinross +01578:Lauder +01579:Liskeard +01580:Cranbrook +01581:New Luce +01582:Luton +01583:Carradale +01584:Ludlow +01586:Campbeltown +01588:Craven Arms +01590:Lymington +01591:Llanwrtyd Wells +01592:Kirkcaldy +01593:Lybster +01594:Lydney +01595:Lerwick/Foula/Fair Isle +01597:Llandrindod Wells +01598:Brayford +01599:Kyle +01600:Monmouth +01603:Norwich +01604:Northampton +01606:Northwich +01608:Chipping Norton +01609:Northallerton +0161:Manchester +01620:North Berwick +01621:Maldon +01622:Maidstone +01623:Mansfield +01624:Isle of Man +01625:Macclesfield +01626:Newton Abbot +01628:Maidenhead +01629:Matlock +01630:Market Drayton +01631:Oban +01633:Newport +01634:Medway +01635:Newbury +01636:Newark +01637:Newquay +01638:Newmarket +01639:Neath +01641:Strathy +01642:Middlesborough +01643:Minehead +01644:New Galloway +01646:Milford Haven +01647:Moretonhampstead +01650:Cemmaes Road +01651:Oldmeldrum +01652:Brigg +01653:Malton +01654:Machynlleth +01655:Maybole +01656:Bridgend +01659:Sanquhar +01661:Wylam +01663:New Mills +01664:Melton Mowbray +01665:Alnwick +01666:Malmesbury +01667:Nairn +01668:Belford +01669:Rothbury +01670:Morpeth +01671:Newton Stewart +01672:Marlborough +01673:Market Rasen +01674:Montrose +01675:Meriden +01676:Meriden +01677:Bedale +01678:Bala +01680:Craignure +01681:Fionnphort +01683:Moffat +01684:Hanley Swan +01685:Merthyr Tydfil +01686:Llanidloes/Newtown, Powys +01687:Mallaig +01688:Tobermory +01689:Orpington +01690:Betws-y-Coed +01691:Oswestry +01692:North Walsham +01694:Church Stretton +01695:Skelmersdale +016973:Wigton +016974:Raughton Head +016977:Brampton, Cumbria +01698:Motherwell +01700:Rothesay +01702:Southend-on-Sea +01704:Southport +01706:Rochdale +01707:Potters Bar +01708:Romford +01709:Rotherham +01720:Scillonia +01721:Peebles +01722:Salisbury +01723:Scarborough +01724:Scunthorpe +01725:Rockbourne +01726:St Austell +01727:St Albans +01728:Saxmundham +01729:Settle +01730:Petersfield +01732:Sevenoaks +01733:Peterborough +01736:Penzance +01737:Redhill +01738:Perth +01740:Sedgefield +01743:Shrewsbury +01744:St Helens +01745:Rhyl +01746:Bridgnorth +01747:Shaftesbury +01748:Richmond +01749:Shepton Mallet +01750:Selkirk +01751:Pickering +01752:Plymouth +01753:Slough +01754:Skegness +01756:Skipton +01757:Selby +01758:Pwllheli +01759:Pocklington +01760:Swaffham +01761:Temple Cloud +01763:Royston +01764:Crieff +01765:Ripon +01766:Porthmadog +01767:Sandy +017683:Appleby +017684:Pooley Bridge +017687:Keswick +01768:Penrith +01769:South Molton +01770:Brodick +01771:Maud +01772:Preston +01773:Ripley +01775:Spalding +01776:Stranraer +01777:Retford +01778:Bourne +01779:Peterhead +01780:Stamford +01782:Stoke-on-Trent +01784:Staines +01785:Stafford +01786:Stirling +01787:Sudbury +01788:Rugby +01789:Stratford-upon-Avon +01790:Spilsby +01792:Swansea +01793:Swindon +01794:Romsey +01795:Sittingbourne +01796:Pitlochry +01797:Rye +01798:Pulborough +01799:Saffron Walden +01803:Torquay +01805:Torrington +01806:Voe +01807:Ballindalloch +01808:Tomatin +01809:Tomdoun +01821:Coupar Angus +01822:Tavistock +01823:Taunton +01824:Ruthin +01825:Uckfield +01827:Tamworth +01828:Coupar Angus +01829:Tarporley +01830:Kirkwhelpington +01832:Clopton +01833:Barnard Castle +01834:Narberth +01835:St Boswells +01837:Okehampton +01838:Dalmally +01840:Camelford +01841:Newquay +01842:Thetford +01843:Thanet +01844:Thame +01845:Thirsk +01847:Thurso/Tongue +01848:Thornhill +01851:Great Bernera/Stornoway +01852:Kilmelford +01854:Ullapool +01855:Ballachulish +01856:Kirkwall +01857:Sanday +01858:Market Harborough +01859:Harris +01862:Tain +01863:Ardgay +01864:Abington +01865:Oxford +01866:Kilchrenan +01869:Bicester +01870:Benbecula +01871:Castlebay +01872:Truro +01873:Abergavenny +01874:Brecon +01875:Tranent +01876:Lochmaddy +01877:Trossachs +01878:Lohboisdale +01879:Scarinish +01880:Tarbert +01882:Kinloch Rannoch +01883:Caterham +01884:Tiverton +01885:Bromyard +01886:Bromyard +01887:Aberfeldy +01888:Turriff +01889:Dapple Heath +01890:Coldstream/Ayton +01892:Tunbridge Wells +01895:Uxbridge +01896:Galashiels +01899:Biggar +01900:Workington +01902:Wolverhampton +01903:Worthing +01904:York +01905:Worcester +01908:Wolverton +01909:Worksop +01912:Tyneside (North) +01913:Durham/Tyneside +01914:Tyneside(South) +01915:Wearside/Tyneside +01916:Tyneside (North) +01920:Ware +01922:Walsall +01923:Watford +01924:Wakefield +01925:Warrington +01926:Leamington Spa +01928:Frodsham +01929:Wareham +01931:Shap +01932:Weybridge +01933:Wellingborough +01934:Weston-Super-Mare +01935:Yeovil +01937:Wetherby +01938:Welshpool +01939:Wem +01942:Wigan +01943:Guiseley +01944:West Heslerton +01945:Wisbech +019467:Gosforth +01946:Whitehaven +01947:Whitby +01948:Whitchurch +01949:Whatton +01950:Sandwick +01951:Colonsay +01952:Wellington +01953:Attleborough +01954:Madingley +01955:Wick +01957:Mid Yell +01959:Westerham +01962:Winchester +01963:Templecombe +01964:Hornsea/Patrington +01967:Strontian +01968:Penicuik +01969:Leyburn +01970:Aberystwth +01971:Scourie +01972:Glenborrodale +01974:Llanon +01975:Strathdon/Alford +01977:Pontefract +01978:Wrexham +01980:Bulford Camp +01981:Wormbridge +01982:Builth Wells +01983:Ryde +01984:Stogumber +01985:Warminster +01986:Bungay +01988:Wigtown +01989:Ross-on-Wye +01992:Hoddesdon +01993:Witney +01994:St Clears +01995:Garstang +01997:Strathpeffer +01:Unknown 01 Code +0207:London (Inner) +0208202:Hendon (NW London) +0208203:Hendon/Colindale (NW London) +0208441:Barnet (N London) +0208554:Ilford (Essex, E.London)" +0208905:Kingsbury (Middx) +0208906:Mill Hill (NW London) +0208950:Bushey (Herts) +0208953:Elstree/Borehamwood (Herts) +0208958:Edgware (NW London) +0208959:Mill Hill (NW London) +0208:London (Outer) +02380:Southampton +02392:Portsmouth +02476:Coventry +028207:Ballycastle (NI) +028217:Martinstown (NI) +02825:Ballymena (NI) +028276:Ballymoney (NI) +02828:Larne (NI) +028295:Kilrea (NI) +02830:Newry (NI) +02837:Armagh (NI) +02838:Portadown (NI) +028406:Banbridge (NI) +028417:Rostrevor (NI) +028427:Kircubbin (NI) +028437:Newcastle (Co.Down, NI) +02844:Downpatrick (NI) +02866:Enniskillen (NI) +028677:Lisnaskea (NI) +028686:Kesh (NI) +02870:Coleraine (NI) +02871:Londonderry (NI) +028777:Limavady (NI) +02879:Magherafelt (NI) +028807:Carrickmore (NI) +028816:Newtownstewart (NI) +02882:Omagh (NI) +028855:Ballygawley (NI) +028867:Cookstown (NI) +02887:Dungannon (NI) +028895:Fivemiletown (NI) +02890:Belfast (NI) +02891:Bangor (Co.Down, NI) +02892:Lisburn (NI) +02893:Ballyclare (NI) +02894:Antrim (NI) +02897:Saintfield (NI) +02920:Cardiff +02:Unknown 02 Code +03:For Future Use +04:For Future Use +05:For Future Use +06:For Future Use +070:Personal Number +071:Personal Number +072:Personal Number +073:For Future Use +074:For Future Use +075:For Future Use +076:Paging Services +07700:World Telecom +07701:Cellnet +07702:Cellnet +07703:Cellnet +0771:Cellnet +0772:Vodafone +0774:Vodafone +07767:Vodafone +07768:Vodafone +07771:Vodafone +07775:Vodafone +07780:Vodafone +07781:Guernsey Cellular +07785:Cellnet +07797:Jersey Cellular +077:Mobile Phone +07800:Orange +07802:Cellnet +07808:Cellnet +07809:Cellnet +07831:Vodafone +07836:Vodafone +07850:Cellnet +07860:Cellnet +07889:Cellnet +078:Mobile Phone +07932:One2One +07933:One2One +07934:One2One +0795:One2One +07956:One2One +07958:One2One +07958:One2One +07961:One2One +07963:Orange +07970:Orange +07973:Orange +07976:Orange +079:Mobile Phone +080:Freephone +081:For Future Use +082:Schools Internet +083:For Future Use +084:Up to Local Rate +085:For Future Use +086:For Future Use +087:Up to National Rate +088:For Future Use +089:For Future Use +0900:Premium Rate - 60p/min to Ł5 or Ł1 fixed +0901:Premium Rate - 60p/min to Ł5 or Ł1 fixed +0902:For Future Use +0903:For Future Use +0904:For Future Use +0905:Premium Rate - Any Rate +0906:Premium Rate - Any Rate +0907:Premium Rate - Product more than Ł1 +0908:For Future Use +0909:ADULT Premium Rate - Any Rate +:No ID + + diff --git a/distrib/setup.all/welcome.wav b/distrib/setup.all/welcome.wav new file mode 100644 index 0000000000000000000000000000000000000000..92d89b16e18a57e4fc50b21af560b1c49d172e59 GIT binary patch literal 105186 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 literal 0 HcmV?d00001 diff --git a/isdn/obj.unx/isdncapi.o b/isdn/obj.unx/isdncapi.o new file mode 100644 index 0000000000000000000000000000000000000000..a2819f2aa253f5dd06302f3f97fda0e7e3192786 GIT binary patch literal 4480 zcmc&&Uu;uV7(cxQS7162aS{}&z!(y0yUnN=a5yGlK$|Q>H&dG1_IBLa-9mdeki@X0 zkXV;#4L_J2UbdrnOXnyh&O%8Th|@MpG^KR>j`QQ3Kg6rMVAX_qF}ED4-C?e` zIAf#vY0OanpH}%Jg<-RSVS2u5pv3w7*rw7{fvY+GRbZF(aUFjd#mwDShT47R^GBAy zY&P%|O7|D!mb>lkpBxEW!*q>|jf!sRrd@CDdM#Itlztl?p#2dlMo;zsrjttxs83{l4GB`q0|5c)Bl|&<6Cl#^UOJ-PBTn zc(R9eXc=8i`L}iM-rdF8wuX25LxB*7Yh~`$R8;Ax!O%$pQ)0R9PUF&9XoyO@P=KhXstZsRb~=#;mEv-(&$~ z*{2yMChcC^DiG6^HL;x!8rw~_q?-WR47q9Cpiv0ruJtrkv_Z3+4!H!^QQ zyw|D2n}|nJ5lYA~ikg7qLiFjRraEX2X`bYGLG18Ll0w7-t*XiTdF+o_*;swkp!iZi z5WN_kUL+ZN6=X#;2eGpdyLzt-Ul%P_Ow;6z)u7F z@hn6FWT$l!jpk*K0FZ=Zc!J;xe*?Hx!iRywz_b<=?P2<8-^A)wS;i2Rygc% zueKuson}#WK-E)fEQO;L6M&*!v~D^CbYW6nDNW5p)l@1P>rW=NjEL*1cV|(DqEh~;1)%E1gS5z(qJPSqR^0y#N|6w`WiBbrWPka#*%UJEz1D;H7S zxQLw4vvEW{AnL5b)m8+lvclV*KfChEGL#Lxl4^@;*cFNq4Yg0B(saYrGD$UVZxO_B zH{3yurkh;&*XL-+u*{kq=1XgL9H34(Ti0?!)&@!5^DTNj}6_1Ic>$LsFap z!pq@L5{LOolDN!W;r405IK-FWJEc6z*yAK|DeQnG{|~vGk3QiJE{}70jU?)xCW*Vx z0(|QT*OSDhXBC$%B*BSM{MGme1Te2TG;N#erS4Sxlb OtC8Hqm_hPc#{L1a-%rW_ literal 0 HcmV?d00001 diff --git a/isdn/obj.win/isdncapi.obj b/isdn/obj.win/isdncapi.obj new file mode 100644 index 0000000000000000000000000000000000000000..ce1d974e11a5399c3544eff0e73cd96c525da18f GIT binary patch literal 4510 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 literal 0 HcmV?d00001 diff --git a/isdn/source.os2/isdnmsg1.h b/isdn/source.os2/isdnmsg1.h new file mode 100644 index 0000000..bd23593 --- /dev/null +++ b/isdn/source.os2/isdnmsg1.h @@ -0,0 +1,269 @@ +typedef struct st_capi_msg_hdr +{ + short length; + short appid; + char cmd; + char subcmd; + short msgnum; +} CapiMsgHeader; + +typedef struct st_listen_req +{ + CapiMsgHeader header; + + char controller; + long info_mask; + short serviced_eaz; + short serviced_si_mask; +} TListenReqMsg; + +typedef struct st_listen_conf +{ + CapiMsgHeader header; + + char controller; + short info; +} TListenConfMsg; + +typedef struct st_connect_ind +{ + CapiMsgHeader header; + + short plci; + char controller; + char req_service; + char req_service_add; + char req_eaz; + + char caller_addr_len; + char caller_addr_type; + char caller_addr; + +} TConnectIndMsg; + +typedef struct st_connect_resp +{ + CapiMsgHeader header; + + short plci; + char reject; +} TConnectRespMsg; + +typedef struct st_select_b2_prot_req +{ + CapiMsgHeader header; + + short plci; + char b2_prot; + + struct st_dlpd + { + char dlpd_length; + short data_length; + char link_a; + char link_b; + char modulo_mode; + char win_size; + char xid; + } dlpd; + +} TSelB2ProtReq; + +typedef struct st_select_b2_prot_conf +{ + CapiMsgHeader header; + + short plci; + short info; +} TSelB2ProtConf; + +typedef struct st_select_b3_prot_req +{ + CapiMsgHeader header; + + short plci; + char b3_prot; + + struct st_ncpd + { + char length; + short lic; + short hic; + short ltc; + short htc; + short loc; + short hoc; + char modulo_mode; + } ncpd; + +} TSelB3ProtReq; + +typedef struct st_select_b3_prot_conf +{ + CapiMsgHeader header; + + short plci; + short info; +} TSelB3ProtConf; + +typedef struct st_listen_b3_req +{ + CapiMsgHeader header; + + short plci; +} TListenB3Req; + +typedef struct st_listen_b3_conf +{ + CapiMsgHeader header; + + short plci; + short info; +} TListenB3Conf; + +typedef struct st_conn_act_ind +{ + CapiMsgHeader header; + + short plci; + + struct st_address + { + char length; + char number[36]; + } address; + +} TConnActInd; + +typedef struct st_conn_act_resp +{ + CapiMsgHeader header; + + short plci; +} TConnActResp; + +typedef struct st_ncpi +{ + char length; + char data[14]; +} TNCPI; + +typedef struct st_conn_b3_ind +{ + CapiMsgHeader header; + + short ncci; + short plci; + TNCPI ncpi; +} TConnB3Ind; + +typedef struct st_conn_b3_resp +{ + CapiMsgHeader header; + + short ncci; + char reject; + TNCPI ncpi; +} TConnB3Resp; + +typedef struct st_conn_b3_act_ind +{ + CapiMsgHeader header; + + short ncci; + TNCPI ncpi; +} TConnB3ActInd; + +typedef struct st_conn_b3_act_resp +{ + CapiMsgHeader header; + + short ncci; +} TConnB3ActResp; + +typedef struct st_data_b3_ind +{ + CapiMsgHeader header; + + short ncci; + short data_length; + char * _Seg16 data; + char number; + short flags; +} TDataB3Ind; + +typedef struct st_data_b3_resp +{ + CapiMsgHeader header; + + short ncci; + char number; +} TDataB3Resp; + +typedef struct st_disc_b3_ind +{ + CapiMsgHeader header; + + short ncci; + short info; + TNCPI ncpi; +} TDiscB3Ind; + +typedef struct st_disc_b3_resp +{ + CapiMsgHeader header; + + short ncci; +} TDiscB3Resp; + +typedef struct st_disc_req +{ + CapiMsgHeader header; + + short plci; + char cause; +} TDiscReq; + +typedef struct st_disc_conf +{ + CapiMsgHeader header; + + short plci; + short info; +} TDiscConf; + +typedef struct st_disc_ind +{ + CapiMsgHeader header; + + short plci; + short info; +} TDiscInd; + +typedef struct st_disc_resp +{ + CapiMsgHeader header; + + short plci; +} TDiscResp; + +typedef struct st_data_b3_req +{ + CapiMsgHeader header; + + short ncci; + short data_length; + char * _Seg16 data; + char number; + short flags; +} TDataB3Req; + +typedef struct st_data_b3_conf +{ + CapiMsgHeader header; + + short ncci; + char number; + short info; +} TDataB3Conf; + diff --git a/isdn/source.os2/isdnoc11.c b/isdn/source.os2/isdnoc11.c new file mode 100644 index 0000000..f8017a8 --- /dev/null +++ b/isdn/source.os2/isdnoc11.c @@ -0,0 +1,1130 @@ +/******************************************************************** + + 291295 /cw,wf - angelegt + 301295 /wf - set_state() programmiert + 301295 /wf - s2logfile() programmiert + 311295 /wf - capitel.log in capitel.deb umbenannt + 311295 /wf - register wird 10x probiert (delay=300ms) + 010195 /wf - alle puffer vergr”áert + 240596 /cw - Thread-Signalisierung: Polling durch Event-Sem. ersetzt + (siehe comm_sigfunc() und comm_poll_sigfunc()) + - capitel.deb Support auskommentiert + 090796 /wf - vierte spalte (reject_cause) in capitel.nam und + capitel.prt implementiert. + 130796 /wf - fnfte spalte (maximale aufnahmedauer in capitel. + nam und capitel.prt implementiert. + 150796 /wf - wenn eine verbindung steht -> zweite = busy. + 170796 /wf - wenn eine verbindung steht -> keine signalisierung nach + oben bei connect_ind + - wrgware fr teles (dosOsSleep bei signalisierung) eingebaut :( + +* 200497 /cwimmer - #defines aus cfg_file.h sind uppercase +* 111097 /wfehn - msg.flags in data_b3_req auf 0 gesetzt (vorher 4). +* +********************************************************************/ + +#include +#include +#include +#include +#include + +#include "..\..\..\units\common.src\bastypes.h" + +#include "..\..\isdn\source\isdn.h" +#include "..\..\util\source.os2\capi.h" +#include "isdnmsg1.h" +#include "..\..\..\units\common.src\capi_chk.h" +#include "..\..\..\units\common.src\loadcapi.h" +#include "..\..\..\units\common.src\num2nam.h" +#include "..\..\wave\source\wav2alw.h" +#include "..\..\common\source\global.h" +#include "..\..\..\units\common.src\os.h" +#include "..\..\..\units\common.src\cfg_file.h" +#include "..\..\answer\source\answer.h" + +#define bit_transparent 0x03 +#define transparent 0x04 + +#define serv_info_mask 0 + +#define si_mask_fernsprechen 2 +#define si_mask_abdienste 4 +#define si_mask_daten 128 + +#define maxbuffer (CAPI_NUM_B3_BLK * CAPI_NUM_B3_SIZE) + +void (*AppSigFunc)( short, void * ); + +short NextMsgNum( void ); + +typedef struct st_send_buffers +{ + char buff[CAPI_NUM_B3_SIZE]; + char freeflag; +} sendbt; + +short AppID=0; +long an_delay_next_call; +long an_delay_default; +short MsgNum=0; +char *MsgBuf; +char *stack; +char state; +short act_plci; +short my_ncci; +char buffer[maxbuffer]; +char *buff_read; +char *buff_write; + +HMTX hmtxsem1; +HMTX hmtxsem2; +HMTX hmtxsem3; +HMTX hmtxsem4; +HMTX hmtxsem5; +HEV eventsem; + +ULONG ulhelp; +ULONG openFlag = OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS; +ULONG openMode = OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYWRITE; +FILE* pipe_file_info = 0; +char info_str [300]; +FILE* pipe_file_debug = 0; + +char discind_flag=0; +sendbt sendb[CAPI_NUM_B3_BLK]; +char out_msg[300]; +long maxread=0; +short connect_ind_msgnum=0; +char reject_cause; +Thread_Id_Typ rec_thread_id = 0; +Thread_Id_Typ poll_thread_id = 0; +long max_rec_time_next_call; +char bhelp[200]; +long debug_data_b3 = 0; + +void disc_req( void ); + +void set_pipename_debug (void) +{ + char help[200]; + + if (pipe_file_debug) fclose(pipe_file_debug); + config_file_read_string(STD_CFG_FILE,NAME_OF_DEBUG_FILE,help,NAME_OF_DEBUG_FILE_DEF); + pipe_file_debug = fopen (help,"a"); +} + +void set_pipename_info (void) +{ + char help[200]; + + if (pipe_file_info) fclose(pipe_file_info); + config_file_read_string(STD_CFG_FILE,NAME_OF_LOG_FILE,help,NAME_OF_LOG_FILE_DEF); + pipe_file_info = fopen(help,"a"); + if (pipe_file_info) setbuf( pipe_file_info, NULL ); + info_str[0] = 0; +} + +void _Optlink comm_ctrl_rec( void *arg ) +{ + OsSleep( (max_rec_time_next_call * 1000) + ((CAPI_NUM_B3_BLK+1) * CAPI_NUM_B3_SIZE / 8)); // yes. it's tricky!!! + disc_req(); +} + +void comm11_begin_of_record (void) +{ + rec_thread_id = OsStartThread( comm_ctrl_rec); +} + +void s2debug_pipe(char *out_msg) +{ + struct tm *tmbuf; + time_t tod; + char str[300]; + + time( &tod ); + tmbuf = localtime( &tod ); + + sprintf( str, "%02d:%02d:%02d.000 ",tmbuf->tm_hour, tmbuf->tm_min, tmbuf->tm_sec); + strcat (str,out_msg); + strcat (str,"\n"); + + if (pipe_file_debug) fwrite(str,strlen(str),1,pipe_file_debug); +} + +void s2info_pipe(char *out_msg) +{ + strcat (info_str,out_msg); + if (strchr(info_str,'\n')) { + fwrite (info_str,strlen(info_str),1,pipe_file_info); + info_str[0] = 0; + } +} + +void set_state (char new_state) +{ + sprintf (out_msg,"State : changed from 0x%02x to 0x%02x", state, new_state); + s2debug_pipe(out_msg); + state = new_state; +} + +void putmsg( short id, CapiMsgHeader * _Seg16 msg) +{ + short res; + + DosRequestMutexSem(hmtxsem5,-1); + res = API_PUT_MESSAGE_11( id, (char * _Seg16) msg ); + DosReleaseMutexSem(hmtxsem5); + + if ((msg->cmd != 0x86) || debug_data_b3) { + sprintf(out_msg,"PutMsg: 0x%02x 0x%02x (State: %d)", msg->cmd, msg->subcmd, state ); + s2debug_pipe(out_msg); + c11_analyze_put_msg ((char *)msg, res); + } + +} + +void connect_resp(short loc_plci) +{ +static TConnectRespMsg msg; + + msg.header.length = 11; + msg.header.appid = AppID; + msg.header.cmd = 0x02; + msg.header.subcmd = 0x03; + msg.header.msgnum = connect_ind_msgnum; + + msg.plci = loc_plci; + + msg.reject = reject_cause; + if (reject_cause == 1) msg.reject = 0xbb; // busy + if (reject_cause == 2) msg.reject = 0xbe; + if (reject_cause == 3) msg.reject = 0xb9; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + + +void data_b3_conf_2( TDataB3Conf * _Seg16 inmsg ) +{ + DosRequestMutexSem(hmtxsem2,-1); + sendb[inmsg->number].freeflag = 1; + DosReleaseMutexSem(hmtxsem2); + + AppSigFunc( 5, (void *) inmsg ); +} + +void data_b3_req( char *outdata, short length ) +{ +static TDataB3Req msg; + short blkfree; + + if( length > CAPI_NUM_B3_SIZE ) + return; + + DosRequestMutexSem(hmtxsem2,-1); + + for( blkfree=0 ; (blkfreeheader.msgnum; + +// msg.plci = act_plci; + msg.plci = inmsg->plci; + + if (inmsg->plci == act_plci) set_state (1); + + putmsg( AppID, (CapiMsgHeader *) &msg); +} + +void disc_ind( TDiscInd * _Seg16 inmsg ) +{ + if (inmsg->plci == act_plci) { + discind_flag = 1; + if (rec_thread_id) { + OsStopThread (rec_thread_id); + rec_thread_id = 0; + } + } + disc_resp(inmsg); + + if (inmsg->plci == act_plci) AppSigFunc( 6, (void *) inmsg ); +} + +void disc_conf( TDiscConf * _Seg16 inmsg ) +{ + inmsg = inmsg; +} + +void disc_b3_resp(TDiscB3Ind * _Seg16 orgmsg) +{ +static TDiscB3Resp msg; + + msg.header.length = 10; + msg.header.appid = AppID; + msg.header.cmd = 0x84; + msg.header.subcmd = 0x03; + msg.header.msgnum = orgmsg->header.msgnum; + + msg.ncci = my_ncci; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +void disc_req( void ) +{ +static TDiscReq msg; + + set_state (4); + + msg.header.length = 11; + msg.header.appid = AppID; + msg.header.cmd = 0x04; + msg.header.subcmd = 0x00; + msg.header.msgnum = NextMsgNum(); + + msg.plci = act_plci; + msg.cause = 0; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +void disc_b3_ind_2( TDiscB3Ind * _Seg16 inmsg ) +{ + AppSigFunc( 4, (void *) inmsg ); + disc_b3_resp(inmsg); + disc_req(); +} + +void data_b3_ind_2( TDataB3Ind * _Seg16 inmsg ) +{ + TDataB3Resp msg; +// PBYTE i; + + DosRequestMutexSem(hmtxsem1,-1); + + if (maxbuffer > (tU32)buff_write-(tU32)&buffer+inmsg->data_length) { + memcpy (buff_write,inmsg->data,inmsg->data_length); + buff_write += inmsg->data_length; + } else { + buff_write = buffer; + buff_read = buffer; + + sprintf (out_msg,"ISDNAPI: Buffer Overflow"); + s2debug_pipe(out_msg); + AppSigFunc( 7, (void *) out_msg ); + } + + DosReleaseMutexSem(hmtxsem1); + + msg.header.length = 11; + msg.header.appid = AppID; + msg.header.cmd = 0x86; + msg.header.subcmd = 0x03; + msg.header.msgnum = inmsg->header.msgnum; + + msg.ncci = my_ncci; + msg.number = inmsg->number; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); + + DosRequestMutexSem(hmtxsem3,-1); + AppSigFunc( 3, (void *) inmsg ); + DosReleaseMutexSem(hmtxsem3); + +} + +void data_b3_ind_n( TDataB3Ind * _Seg16 inmsg ) +{ + TDataB3Resp msg; + + msg.header.length = 11; + msg.header.appid = AppID; + msg.header.cmd = 0x86; + msg.header.subcmd = 0x03; + msg.header.msgnum = inmsg->header.msgnum; + + msg.ncci = my_ncci; + msg.number = inmsg->number; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); + +} + +void connect_b3_act_ind_1( TConnB3ActInd * _Seg16 inmsg ) +{ +static TConnB3ActResp msg; + + msg.header.length = 10; + msg.header.appid = AppID; + msg.header.cmd = 0x83; + msg.header.subcmd = 0x03; + msg.header.msgnum = inmsg->header.msgnum; + + msg.ncci = my_ncci; + + set_state(3); + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); + + AppSigFunc( 2, (void *) inmsg ); + + OsSleep(40); + + AppSigFunc( 5, (void *) inmsg ); + AppSigFunc( 5, (void *) inmsg ); + AppSigFunc( 5, (void *) inmsg ); + AppSigFunc( 5, (void *) inmsg ); + AppSigFunc( 5, (void *) inmsg ); + AppSigFunc( 5, (void *) inmsg ); + AppSigFunc( 5, (void *) inmsg ); + +} + +void connect_b3_resp(TConnB3Ind * _Seg16 orgmsg) +{ +static TConnB3Resp msg; + + msg.header.length = 12; + msg.header.appid = AppID; + msg.header.cmd = 0x82; + msg.header.subcmd = 0x03; + msg.header.msgnum = orgmsg->header.msgnum; + + msg.ncci = my_ncci; + msg.reject = 0; + msg.ncpi.length = 0; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +void connect_b3_ind_1( TConnB3Ind * _Seg16 msg ) +{ + my_ncci = msg->ncci; + + connect_b3_resp(msg); +} + +void connect_act_resp(TConnActInd * _Seg16 orgmsg) +{ +static TConnActResp msg; + + msg.header.length = 10; + msg.header.appid = AppID; + msg.header.cmd = 0x03; + msg.header.subcmd = 0x03; + msg.header.msgnum = orgmsg->header.msgnum; + + msg.plci = act_plci; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +void connect_act_ind_1( TConnActInd * _Seg16 msg ) +{ + connect_act_resp(msg); +} + +void listen_b3_conf_1( TListenB3Conf * _Seg16 msg ) +{ + if( msg->info ) { + sprintf(out_msg,"ISDNAPI: LISTEN B3 CONFIRM ERROR:\nINFO=0x%x", msg->info ); + s2debug_pipe(out_msg); + AppSigFunc( 8, (void *) out_msg ); + } else + connect_resp(act_plci); +} + +void listen_b3_req(void) +{ +static TListenB3Req msg; + + msg.header.length = 10; + msg.header.appid = AppID; + msg.header.cmd = 0x81; + msg.header.subcmd = 0x00; + msg.header.msgnum = NextMsgNum(); + + msg.plci = act_plci; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +void select_b3_prot_req(void) +{ +static TSelB3ProtReq msg; + + msg.header.length = 12; + msg.header.appid = AppID; + msg.header.cmd = 0x80; + msg.header.subcmd = 0x00; + msg.header.msgnum = NextMsgNum(); + + msg.plci = act_plci; + msg.b3_prot = transparent; + + msg.ncpd.length = 0; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +void select_b2_prot_conf_1( TSelB2ProtConf * _Seg16 msg ) +{ + if( msg->info ) { + sprintf(out_msg,"ISDNAPI: SELECT B2 PROT CONFIRM ERROR:\nINFO=0x%x", msg->info ); + s2debug_pipe(out_msg); +// AppSigFunc( 8, (void *) out_msg ); + select_b3_prot_req(); + } else + select_b3_prot_req(); +} + +void select_b3_prot_conf_1( TSelB3ProtConf * _Seg16 msg ) +{ + if( msg->info ) { + sprintf(out_msg,"ISDNAPI: SELECT B3 PROT CONFIRM ERROR:\nINFO=0x%x", msg->info ); + s2debug_pipe(out_msg); +// AppSigFunc( 8, (void *) out_msg ); + } else + listen_b3_req(); +} + +void select_b2_prot_req( void ) +{ +static TSelB2ProtReq msg; + + msg.header.length = 19; + msg.header.appid = AppID; + msg.header.cmd = 0x40; + msg.header.subcmd = 0x00; + msg.header.msgnum = NextMsgNum(); + + msg.plci = act_plci; + msg.b2_prot = bit_transparent; + + msg.dlpd.dlpd_length = 7; + msg.dlpd.data_length = CAPI_NUM_B3_SIZE; + msg.dlpd.link_a = 3; + msg.dlpd.link_b = 1; + msg.dlpd.modulo_mode = 8; + msg.dlpd.win_size = CAPI_NUM_B3_BLK; + msg.dlpd.xid = 0; + + putmsg( AppID, (CapiMsgHeader * _Seg16) &msg); +} + +short NextMsgNum( void ) +{ + return (MsgNum++ & 0x7fff); +} + +void state_error( short state, char cmd, char subcmd ) +{ + sprintf(out_msg,"ISDNAPI: STATE ERROR: State=%d Cmd=0x%x SubCmd=0x%x!!!", state, cmd, subcmd ); + s2debug_pipe(out_msg); +// AppSigFunc( 7, (void *) out_msg ); +} + +void listen_conf_0( TListenConfMsg * _Seg16 msg ) +{ + if( msg->info ) { + sprintf(out_msg,"ISDNAPI: LISTEN CONFIRM ERROR:\nINFO=0x%x", msg->info ); + s2debug_pipe(out_msg); + AppSigFunc( 8, (void *) out_msg ); + } else + set_state(1); +} + +void _Optlink waitforconn( void *arg ) +{ + ULONG wait_ms = 0; + short plci; + short cnv_flag = 0; + unsigned long active=1; + + active = config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE ,CAPITEL_ACTIVE_DEF) + & config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE_TIME,CAPITEL_ACTIVE_TIME_DEF); + + while( (wait_ms < (an_delay_next_call * 1000)) && (!discind_flag)) + { + OsSleep( 300 ); + if (active) wait_ms += 300; + } + + if( !discind_flag ) + { + while (wav2alw_convert_runs()) { + OsSleep (250); + cnv_flag = 1; + } + + if (cnv_flag) OsSleep (1500); + + if (!discind_flag) { + connect_resp(act_plci); + select_b2_prot_req( ); + } else { + reject_cause = 1; + connect_resp(act_plci); + } + } else { + OsSleep (200); + reject_cause = 1; + connect_resp(act_plci); + } +} + +void connect_ind_1( TConnectIndMsg * _Seg16 msg ) +{ + char caller_id[150]; + char caller_eaz[150]; + char *number, *pt; + long i; + char reject_cause_str[20]; + char max_rec_time_str[20]; + char an_delay_str[20]; + struct tm *tmbuf; + time_t tod; + char timestr[200]; + char datestr[200]; + char caller_name[200]; + char eaz_name[200]; + AnsConIndMsg ConIndMsg; + unsigned long ZeroBeh; + char zhelp [200]; + + set_pipename_debug (); + set_pipename_info (); + + debug_data_b3 = config_file_read_ulong (STD_CFG_FILE,DEBUG_DATA_B3,DEBUG_DATA_B3_DEF); + + connect_ind_msgnum = msg->header.msgnum; + + if (state == 1) { + set_state(2); + act_plci = msg->plci; + discind_flag=0; + + if( msg->caller_addr_len == 0 ) { + config_file_read_string(STD_CFG_FILE,TEXT_UNKNOWN, caller_id,TEXT_UNKNOWN_DEF); + } else { + pt = &caller_id[0]; + number = &(msg->caller_addr); + for( i=0 ; i < (msg->caller_addr_len-1) ; i++, number++, pt++ ) + *pt = *number; + *pt = 0; + } + +//############### + ZeroBeh = config_file_read_ulong(STD_CFG_FILE,ZERO_BEHAVIOR,ZERO_BEHAVIOR_DEF); + switch (ZeroBeh) + { + case 1: if (caller_id[0] == '0') // delete leading zero + { + strcpy (zhelp, caller_id+1); + strcpy (caller_id, zhelp); + } + break; + case 2: strcpy (zhelp, "0"); // add leading zero + strcat (zhelp, caller_id); + strcpy (caller_id, zhelp); + break; + } +//############### + + strcpy (ConIndMsg.caller_name,caller_id); + answer_cti (ConIndMsg.caller_name); + ConIndMsg.called_name[0] = msg->req_eaz; + ConIndMsg.called_name[1] = 0; + if (msg->req_service == 7) { + ConIndMsg.is_digital = 1; + } else { + ConIndMsg.is_digital = 0; + } + AppSigFunc( 1, (void *) &ConIndMsg ); + + time( &tod ); + tmbuf = localtime( &tod ); + + tmbuf->tm_year = tmbuf->tm_year + 1900; + + sprintf( datestr, "%02d/%02d/%04d",tmbuf->tm_mday,tmbuf->tm_mon+1, tmbuf->tm_year ); + sprintf( timestr, "%02d:%02d:%02d" ,tmbuf->tm_hour, tmbuf->tm_min, tmbuf->tm_sec); + s2info_pipe (datestr); + s2info_pipe (" "); + s2info_pipe (timestr); + s2info_pipe (", "); + + s2info_pipe (caller_id); + s2info_pipe (", "); + better_string(caller_id,NAMFILE,2,caller_id, caller_name); + s2info_pipe (caller_name); + s2info_pipe (", "); + + caller_eaz[0] = msg->req_eaz; + caller_eaz[1] = 0; + s2info_pipe (caller_eaz); + s2info_pipe (", "); + better_string(caller_eaz,PRTFILE,2,caller_eaz, eaz_name); + s2info_pipe (eaz_name); + s2info_pipe (", "); + + strcpy (reject_cause_str,"0"); + better_string (caller_eaz,PRTFILE,4,reject_cause_str, reject_cause_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1",bhelp); + if (!strcmp(bhelp,"1")) { + better_string (caller_id ,NAMFILE,4,reject_cause_str, reject_cause_str); + } + reject_cause = reject_cause_str[0]-48; + s2info_pipe (reject_cause_str); + s2info_pipe (", "); + + max_rec_time_next_call = config_file_read_ulong(STD_CFG_FILE,DEFAULT_REC_TIME,DEFAULT_REC_TIME_DEF); + sprintf(max_rec_time_str,"%d",max_rec_time_next_call); + better_string (caller_eaz,PRTFILE,5,max_rec_time_str, max_rec_time_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (caller_id ,NAMFILE,5,max_rec_time_str, max_rec_time_str); + } + max_rec_time_next_call = strtol (max_rec_time_str,NULL,10); + s2info_pipe (max_rec_time_str); + s2info_pipe (", "); + + an_delay_next_call = an_delay_default; + sprintf(an_delay_str,"%d",an_delay_next_call); + better_string (caller_eaz,PRTFILE,6,an_delay_str, an_delay_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (caller_id ,NAMFILE,6,an_delay_str, an_delay_str); + } + an_delay_next_call = strtol (an_delay_str,NULL,10); + s2info_pipe (an_delay_str); + s2info_pipe ("\n"); + + if (reject_cause) { + connect_resp(msg->plci); + } else { + OsStartThread (waitforconn); + } + + } else { + reject_cause = 1; + connect_resp(msg->plci); + } +} + +void int_sigfunc(void *arg) +{ +static char * _Seg16 pt; +static CapiMsgHeader * _Seg16 cmsg; +short res; + + while( (res = API_GET_MESSAGE_11( AppID, &pt )) == 0 ) + { + cmsg = (CapiMsgHeader * _Seg16) pt; + + if ((cmsg->cmd != 0x86) || debug_data_b3) { + sprintf(out_msg,"GetMsg: 0x%02x 0x%02x (State: %d)", cmsg->cmd, cmsg->subcmd, state ); + s2debug_pipe(out_msg); + c11_analyze_get_msg ((char *)pt,res); + } + + switch( state ) { /* State Machine */ + + /**********l*************************************************************/ + /*** State: Answ. Machine Inactive */ + /***********************************************************************/ + + case 0: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0501: listen_conf_0 ((TListenConfMsg * _Seg16) cmsg ); break; + case 0x8602: data_b3_ind_n ((TDataB3Ind * _Seg16) cmsg ); break; + default: state_error (state, cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Answ. Machine waiting for incoming call */ + /***********************************************************************/ + + case 1: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0202: connect_ind_1 ((TConnectIndMsg * _Seg16) cmsg ); break; + case 0x0401: disc_conf ((TDiscConf * _Seg16) cmsg ); break; + case 0x0501: listen_conf_0 ((TListenConfMsg * _Seg16) cmsg ); break; + case 0x8602: data_b3_ind_n ((TDataB3Ind * _Seg16) cmsg ); break; + default: state_error (state, cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Answ. Machine building up connection */ + /***********************************************************************/ + + case 2: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0202: connect_ind_1 ((TConnectIndMsg * _Seg16) cmsg ); break; + case 0x4001: select_b2_prot_conf_1 ((TSelB2ProtConf * _Seg16) cmsg ); break; + case 0x8001: select_b3_prot_conf_1 ((TSelB3ProtConf * _Seg16) cmsg ); break; + case 0x8101: listen_b3_conf_1 ((TListenB3Conf * _Seg16) cmsg ); break; + case 0x0302: connect_act_ind_1 ((TConnActInd * _Seg16) cmsg ); break; + case 0x8202: connect_b3_ind_1 ((TConnB3Ind * _Seg16) cmsg ); break; + case 0x8302: connect_b3_act_ind_1 ((TConnB3ActInd * _Seg16) cmsg ); break; + case 0x8602: data_b3_ind_n ((TDataB3Ind * _Seg16) cmsg ); break; + case 0x0402: disc_ind ((TDiscInd * _Seg16) cmsg ); break; + case 0x0501: listen_conf_0 ((TListenConfMsg * _Seg16) cmsg ); break; + case 0x0401: disc_conf ((TDiscConf * _Seg16) cmsg ); break; + default: state_error (state, cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Data Transfer */ + /***********************************************************************/ + + case 3: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0402: disc_ind ((TDiscInd * _Seg16) cmsg ); break; + case 0x0202: connect_ind_1 ((TConnectIndMsg * _Seg16) cmsg ); break; + case 0x8602: data_b3_ind_2 ((TDataB3Ind * _Seg16) cmsg ); break; + case 0x8402: disc_b3_ind_2 ((TDiscB3Ind * _Seg16) cmsg ); break; + case 0x8601: data_b3_conf_2 ((TDataB3Conf * _Seg16) cmsg ); break; + default: state_error (state, cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Disconnecting */ + /***********************************************************************/ + + case 4: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0202: connect_ind_1 ((TConnectIndMsg * _Seg16) cmsg ); break; + case 0x8601: data_b3_conf_2 ((TDataB3Conf * _Seg16) cmsg ); break; + case 0x8602: data_b3_ind_n ((TDataB3Ind * _Seg16) cmsg ); break; + case 0x0401: disc_conf ((TDiscConf * _Seg16) cmsg ); break; + case 0x0402: disc_ind ((TDiscInd * _Seg16) cmsg ); break; + case 0x8402: disc_b3_ind_2 ((TDiscB3Ind * _Seg16) cmsg ); break; + default: state_error (state, cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Unknown */ + /***********************************************************************/ + + default: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + default: state_error( state, cmsg->cmd, cmsg->subcmd ); break; + } + break; + } + } + return; +} + +void _Optlink comm_poll_sigfunc( void *arg ) +{ + ULONG cnt; + + for (;;) { + DosWaitEventSem( eventsem, -1 ); /* warten bis was zu tun ist */ + DosResetEventSem( eventsem, &cnt ); /* reset (sonst funktioniert */ + DosRequestMutexSem(hmtxsem4,-1); + int_sigfunc (NULL); + DosReleaseMutexSem(hmtxsem4); + OsSleep (50); /* wrgware fr teles-capi) */ + } +} + +void APIENTRY16 comm_sigfunc( void ) +{ + DosPostEventSem(eventsem); /* eigentliche sigfunc aufwecken */ +} + +void comm11_clear_read_buffer (void) +{ + DosRequestMutexSem(hmtxsem1,-1); + buff_read = buffer; + buff_write = buffer; + DosReleaseMutexSem(hmtxsem1); +} + +void comm11_clear_write_buffer (void) +{ + long t; + + DosRequestMutexSem(hmtxsem2,-1); + for (t=0;t 0); +} + +void comm11_write_block( char *buf, short length ) +{ + if( state != 3 ) return; + + data_b3_req( buf, length ); + +} + +void comm11_disc_req(void) +{ + disc_req(); +} + +void comm11_name_of_interface (char *name) +{ + strcpy (name,"CAPI 1.1"); +} + diff --git a/isdn/source.os2/loadoc11.c b/isdn/source.os2/loadoc11.c new file mode 100644 index 0000000..abbe9d7 --- /dev/null +++ b/isdn/source.os2/loadoc11.c @@ -0,0 +1,80 @@ +// 161097 /wfehn - support fr avm "capi16.dll" eingebaut + +#define INCL_DOSMODULEMGR +#define INCL_DOSERRORS +#include +#include + +#include "..\..\..\units\common.src\loadcapi.h" + +#define DLLNAME_11 "CAPI" +#define DLLNAME_AVM_11 "CAPI16" + +HMODULE ModuleHandle_11 = NULLHANDLE; + +typedef short (* APIENTRY16 tReg_11) ( char * _Seg16, short, short, short, short ); +typedef short (* APIENTRY16 tRel_11) ( short ); +typedef short (* APIENTRY16 tPut_11) ( short, char * _Seg16 ); +typedef short (* APIENTRY16 tGet_11) ( short, char * _Seg16 * _Seg16 ); +typedef short (* APIENTRY16 tSet_11) ( short, void (* APIENTRY16)( void ) ); +typedef short (* APIENTRY16 tMan_11) ( char * _Seg16 ); +typedef short (* APIENTRY16 tVer_11) ( char * _Seg16 ); +typedef short (* APIENTRY16 tSer_11) ( char * _Seg16 ); +typedef short (* APIENTRY16 tAdr_11) ( void ); +typedef short (* APIENTRY16 tIns_11) ( void ); + +tReg_11 API_REGISTER_11 = NULL; /* Mandatory Functions. If loading of these */ +tRel_11 API_RELEASE_11 = NULL; /* functions fails, error will be returned. */ +tPut_11 API_PUT_MESSAGE_11 = NULL; +tGet_11 API_GET_MESSAGE_11 = NULL; +tSet_11 API_SET_SIGNAL_11 = NULL; +tIns_11 API_INSTALLED_11 = NULL; + +tMan_11 API_GET_MANUFACTURER_11 = NULL; /* Additional Functions. Check for NULL */ +tVer_11 API_GET_VERSION_11 = NULL; /* before using. If loading of these fncts. */ +tSer_11 API_GET_SERIAL_NUMBER_11 = NULL; /* fails, no error will be returned. */ +tAdr_11 API_GET_ADDRESSMODE_11 = NULL; + +short LoadCapi11( void ) +{ + PSZ ModuleName_11 = DLLNAME_11; + PSZ ModuleNameAVM_11 = DLLNAME_AVM_11; + UCHAR LoadError_11[128] = ""; + APIRET rc_11 = NO_ERROR; + + rc_11 = DosLoadModule( LoadError_11, sizeof( LoadError_11 ), ModuleNameAVM_11, &ModuleHandle_11 ); + + if( rc_11 != NO_ERROR ) { + rc_11 = DosLoadModule( LoadError_11, sizeof( LoadError_11 ), ModuleName_11, &ModuleHandle_11 ); + } + + if( rc_11 != NO_ERROR ) return 0; + + rc_11 = DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_REGISTER" , (PFN *)&API_REGISTER_11 ); + rc_11+= DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_RELEASE" , (PFN *)&API_RELEASE_11 ); + rc_11+= DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_PUT_MESSAGE", (PFN *)&API_PUT_MESSAGE_11 ); + rc_11+= DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_GET_MESSAGE", (PFN *)&API_GET_MESSAGE_11 ); + rc_11+= DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_SET_SIGNAL" , (PFN *)&API_SET_SIGNAL_11 ); + rc_11+= DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_INSTALLED" , (PFN *)&API_INSTALLED_11 ); + + if( rc_11 ) { + DosFreeModule( ModuleHandle_11 ); + return 0; + } + + DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_GET_MANUFACTURER" , (PFN *)&API_GET_MANUFACTURER_11 ); + DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_GET_VERSION" , (PFN *)&API_GET_VERSION_11 ); + DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_GET_SERIAL_NUMBER", (PFN *)&API_GET_SERIAL_NUMBER_11 ); + DosQueryProcAddr( ModuleHandle_11, 0L, (PSZ)"API_GET_ADDRESSMODE" , (PFN *)&API_GET_ADDRESSMODE_11 ); + + return 1; +} + +short UnLoadCapi11( void ) +{ + DosFreeModule( ModuleHandle_11 ); + ModuleHandle_11 = NULLHANDLE; + return 1; +} + + \ No newline at end of file diff --git a/isdn/source.os2/loadoc20.c b/isdn/source.os2/loadoc20.c new file mode 100644 index 0000000..0dbf7a4 --- /dev/null +++ b/isdn/source.os2/loadoc20.c @@ -0,0 +1,77 @@ +#define INCL_DOSMODULEMGR +#define INCL_DOSERRORS +#include +#include + +#include "..\..\..\units\common.src\loadcapi.h" + +#define DLLNAME_20 "CAPI20" + +HMODULE ModuleHandle_20 = NULLHANDLE; + +#define DWORD unsigned long +#define CallConv APIENTRY + +typedef DWORD ( *CallConv tReg_20)( DWORD, DWORD, DWORD, DWORD, DWORD * ); +typedef DWORD ( *CallConv tRel_20)( DWORD ); +typedef DWORD ( *CallConv tPut_20)( DWORD, PVOID ); +typedef DWORD ( *CallConv tGet_20)( DWORD, PVOID * ); +typedef DWORD (* CallConv tSet_20)( DWORD, DWORD ); +typedef VOID ( *CallConv tMan_20)( char * ); +typedef DWORD ( *CallConv tVer_20)( DWORD *, DWORD *, DWORD *, DWORD * ); +typedef DWORD ( *CallConv tSer_20)( char * ); +typedef DWORD ( *CallConv tPro_20)( PVOID, DWORD ); +typedef DWORD ( *CallConv tIns_20)( VOID ); + +tReg_20 API_REGISTER_20 = NULL; /* Mandatory Functions. If loading of these */ +tRel_20 API_RELEASE_20 = NULL; /* functions fails, error will be returned. */ +tPut_20 API_PUT_MESSAGE_20 = NULL; +tGet_20 API_GET_MESSAGE_20 = NULL; +tSet_20 API_SET_SIGNAL_20 = NULL; +tIns_20 API_INSTALLED_20 = NULL; + +tMan_20 API_GET_MANUFACTURER_20 = NULL; /* Additional Functions. Check for NULL */ +tVer_20 API_GET_VERSION_20 = NULL; /* before using. If loading of these fncts. */ +tSer_20 API_GET_SERIAL_NUMBER_20 = NULL;/* fails, no error will be returned. */ +tPro_20 API_GET_PROFILE_20 = NULL; + +short Capi20_LoadCapi( void ) +{ + PSZ ModuleName_20 = DLLNAME_20; + UCHAR LoadError_20[128] = ""; + APIRET rc_20 = NO_ERROR; + + rc_20 = DosLoadModule( LoadError_20, sizeof( LoadError_20 ), ModuleName_20, &ModuleHandle_20 ); + + if( rc_20 != NO_ERROR ) return 0; + + rc_20 = DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_REGISTER" ,(PFN *)&API_REGISTER_20 ); + rc_20+= DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_RELEASE" ,(PFN *)&API_RELEASE_20 ); + rc_20+= DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_PUT_MESSAGE",(PFN *)&API_PUT_MESSAGE_20); + rc_20+= DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_GET_MESSAGE",(PFN *)&API_GET_MESSAGE_20); + rc_20+= DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_INSTALLED" ,(PFN *)&API_INSTALLED_20 ); + rc_20+= DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_SET_SIGNAL" ,(PFN *)&API_SET_SIGNAL_20 ); + + if( rc_20 ) { + DosFreeModule( ModuleHandle_20 ); + return 0; + } + + DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_GET_MANUFACTURER" ,(PFN *)&API_GET_MANUFACTURER_20 ); + DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_GET_VERSION" ,(PFN *)&API_GET_VERSION_20 ); + DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_GET_SERIAL_NUMBER",(PFN *)&API_GET_SERIAL_NUMBER_20); + DosQueryProcAddr( ModuleHandle_20, 0L, (PSZ)"CAPI_GET_PROFILE" ,(PFN *)&API_GET_PROFILE_20 ); + + if (API_INSTALLED_20()) return(0); + + return 1; +} + +short Capi20_UnLoadCapi( void ) +{ + DosFreeModule( ModuleHandle_20 ); + ModuleHandle_20 = NULLHANDLE; + return 1; +} + + \ No newline at end of file diff --git a/isdn/source/isdn.h b/isdn/source/isdn.h new file mode 100644 index 0000000..80e1e7d --- /dev/null +++ b/isdn/source/isdn.h @@ -0,0 +1,79 @@ +#define CAPI_NUM_B3_CON 1 +#define CAPI_NUM_B3_BLK 7 +#define CAPI_NUM_B3_SIZE 2048 + +/* Nur CAPI 1.1: */ +#define CAPI_NUM_MSGS 16 + +/* Nur CAPI 2.0: */ +#define CAPI_MSGBUF_SIZE (1024+(1024*CAPI_NUM_B3_CON)+8192) + +typedef struct st_comm_connect_ind +{ + char caller_name [200]; + char caller_org_name[200]; + char called_name [200]; + char is_digital; +} AnsConIndMsg; + +short comm_init (void (*)(short, void *)); +short comm_exit (void); +short comm_listen (short); +char comm_connected (void); +char comm_data_available (void); +void comm_clear_all_buffer (void); +//void comm_clear_read_buffer (void); +//void comm_clear_write_buffer (void); +long comm_read_block (char *buff); +void comm_write_block (char *, short); +//char comm_can_write (void); +void comm_begin_of_record (void); +void comm_disc_req (void); +void comm_name_of_interface (char *); + +short comm11_init (void (*)(short, void *), char); +short comm11_exit (void); +short comm11_listen (short); +char comm11_connected (void); +char comm11_data_available (void); +void comm11_clear_all_buffer (void); +//void comm11_clear_read_buffer (void); +//void comm11_clear_write_buffer (void); +long comm11_read_block (char *buff); +void comm11_write_block (char *, short); +//char comm11_can_write (void); +void comm11_begin_of_record (void); +void comm11_disc_req (void); +void comm11_name_of_interface (char *); + +short comm20_init (void (*)(short, void *), char); +short comm20_exit (void); +short comm20_listen (short); +char comm20_connected (void); +char comm20_data_available (void); +void comm20_clear_all_buffer (void); +//void comm20_clear_read_buffer (void); +//void comm20_clear_write_buffer (void); +long comm20_read_block (char *buff); +void comm20_write_block (char *, short); +//char comm20_can_write (void); +void comm20_begin_of_record (void); +void comm20_disc_req (void); +void comm20_name_of_interface (char *); + +short commse_init (void (*)(short, void *), char); +short commse_exit (void); +short commse_listen (short); +char commse_connected (void); +char commse_data_available (void); +void commse_clear_all_buffer (void); +//void commse_clear_read_buffer (void); +//void commse_clear_write_buffer (void); +long commse_read_block (char *buff); +void commse_write_block (char *, short); +//char commse_can_write (void); +void commse_begin_of_record (void); +void commse_disc_req (void); +void commse_name_of_interface (char *); + + diff --git a/isdn/source/isdnc20.c b/isdn/source/isdnc20.c new file mode 100644 index 0000000..e5add77 --- /dev/null +++ b/isdn/source/isdnc20.c @@ -0,0 +1,1357 @@ +/******************************************************************** +* +* 280497 /cw,wf - angelegt aus capi 1.1 modul +* 111097 /wfehn - msg.flags in data_b3_req auf 0 gesetzt (vorher 4). +* jetzt l„uft capitel auch auf diehl diva. +* 011297 /wfehn - zeigt nur anrufe an, die auch in msn-liste stehen +* 010398 /cawim - capi20.h wurde verschoben +* +********************************************************************/ + +#include +#include +#include +#include + +#ifndef UNIX +#include +#endif + +#include "../../../units/common.src/bastypes.h" + +#include "../../../units/common.src/os.h" +#include "../../common/source/version.h" +#include "../../isdn/source/isdn.h" +#include "../../../units/common.src/capi20.h" +#include "../../../units/common.src/isdnmsg2.h" +#include "../../../units/common.src/capi_chk.h" +#include "../../../units/common.src/loadcapi.h" +#include "../../../units/common.src/num2nam.h" +#include "../../wave/source/wav2alw.h" +#include "../../common/source/global.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../answer/source/answer.h" + +#define serv_info_mask 0 + +#define maxbuffer (CAPI_NUM_B3_BLK * CAPI_NUM_B3_SIZE) + +#ifndef OS2 +#define MAKEUSHORT(l, h) (((BYTE)(l)) | ((BYTE)(h)) << 8) +#endif + + +#define cip_value_speech 1 +#define cip_mask_speech 2 + +#define cip_value_digital 2 +#define cip_mask_digital 4 + +#define cip_value_31audio 4 +#define cip_mask_31audio 16 + +#define cip_value_telephony 16 +#define cip_mask_telephony 65536 + +extern int fernabfrage; +extern unsigned long calllength; + +void (*AppSigFunc)( short, void * ); + +short NextMsgNum( void ); + +typedef struct st_send_buffers +{ + char buff[CAPI_NUM_B3_SIZE]; + char freeflag; +} sendbt; + +static DWORD AppID=0; +static long an_delay_next_call; +static long an_delay_default; +static WORD MsgNum=0; +static DWORD conn_state; +static DWORD act_plci; +static DWORD my_ncci; +static char buffer[maxbuffer]; +static char *buff_read; +static char *buff_write; +static unsigned long flagDoSignal; + +static HMTX hmtxsem1; +static HMTX hmtxsem2; +static HMTX hmtxsem3; +static HMTX hmtxsem4; +static HMTX hmtxsem5; +#ifdef OS2 +static HEV eventsem; +#endif + +//static unsigned long ulhelp; +static FILE* pipe_file_info = 0; +static char info_str [300]; +static FILE* pipe_file_debug = 0; + +static char discind_flag=0; +static sendbt sendb[CAPI_NUM_B3_BLK]; +static char out_msg[3000]; +//static long maxread=0; +static short connect_ind_msgnum=0; +static char reject_cause; +static Thread_Id_Typ rec_thread_id = 0; +static Thread_Id_Typ poll_thread_id = 0; +static long max_rec_time_next_call; +static char msn_liste[500]; +static char bhelp[200]; +static long debug_data_b3 = 0; +static short num_in_list = 0; +short is_callback = 0; + +static char caller_id_org [150]; +static char caller_msn_org[150]; +static char online=0; +static char enter_wait_for_signal = 1; +static char pipename_debug[200] = {0}; + + +static void disc_req( void ); + +static void set_pipename_debug (void) +{ + if (pipe_file_debug) fclose(pipe_file_debug); + config_file_read_string(STD_CFG_FILE,NAME_OF_DEBUG_FILE,pipename_debug,NAME_OF_DEBUG_FILE_DEF); + pipe_file_debug = fopen (pipename_debug,"a"); +} + +static void set_pipename_info (void) +{ + char help[200]; + + if (pipe_file_info) fclose(pipe_file_info); + config_file_read_string(STD_CFG_FILE,NAME_OF_LOG_FILE,help,NAME_OF_LOG_FILE_DEF); + pipe_file_info = fopen(help,"a"); + if (pipe_file_info) setbuf( pipe_file_info, NULL ); + info_str[0] = 0; +} + +static void _Optlink comm_ctrl_rec( void *arg ) +{ + OsSleep( (max_rec_time_next_call * 1000) + ((CAPI_NUM_B3_BLK+1) * CAPI_NUM_B3_SIZE / 8)); // yes. it's tricky!!! + disc_req(); +} + +void comm20_begin_of_record (void) +{ +//problem rec_thread_id = OsStartThread( comm_ctrl_rec); +} + +static void s2debug_pipe(char *out_msg) +{ + struct tm *tmbuf; + time_t tod; + char str[3000]; + + time( &tod ); + tmbuf = localtime( &tod ); + + sprintf( str, "%02d:%02d:%02d.000 ",tmbuf->tm_hour, tmbuf->tm_min, tmbuf->tm_sec); + strcat (str,out_msg); + strcat (str,"\n"); + + if (pipe_file_debug) + { + fwrite(str,strlen(str),1,pipe_file_debug); + } +} + +static void s2info_pipe(char *out_msg) +{ + strcat (info_str,out_msg); + if (strchr(info_str,'\n')) { + if (pipe_file_info) fwrite (info_str,strlen(info_str),1,pipe_file_info); + info_str[0] = 0; + } +} + +static void set_state (DWORD new_state) +{ + sprintf (out_msg,"State : changed from %d to %d", (int)conn_state, (int)new_state); + conn_state = new_state; + s2debug_pipe(out_msg); +} + +static void putmsg(CapiMsgHeader * msg) +{ + + if ((msg->cmd != 0x86) || debug_data_b3) { + sprintf(out_msg,"PutMsg: 0x%02x 0x%02x (State: %d)", msg->cmd, msg->subcmd, (int)conn_state ); + s2debug_pipe(out_msg); + c20_analyze_put_msg ((char *)msg,0xffff); + } + + OSRequestMutexSem(&hmtxsem5,-1); + API_PUT_MESSAGE_20( AppID, (char *) msg ); + OSReleaseMutexSem(&hmtxsem5); +} + +static void connect_conf( TConnConf *inmsg ) +{ + if (inmsg->info == 0) { + act_plci = inmsg->plci; + set_state(2); + } +} + +static void connect_b3_conf( TConnB3Conf *inmsg ) +{ + if (inmsg->info == 0) { + my_ncci = inmsg->ncci; + } +} + + +static void connect_resp(long loc_plci) +{ + static TConnectRespMsg msg; + + msg.header.length = sizeof(msg.header)+20; // problem 20; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x02; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = connect_ind_msgnum; + + msg.plci = loc_plci; + + msg.reject = reject_cause; + if (reject_cause == 1) msg.reject = (BYTE) 3; // busy + if (reject_cause == 2) msg.reject = (BYTE) 1; // ignore + if (reject_cause == 3) msg.reject = (BYTE) 8; // out of order + + msg.b_protocol_len = 9; // problem 9; + + msg.b1_protocol = 0x01; + msg.b2_protocol = 0x01; + msg.b3_protocol = 0; + + msg.b1_configuration = 0; + msg.b2_configuration = 0; + msg.b3_configuration = 0; + +// msg.global_configuration = 0; // problem + + msg.ext[0] = 0; + msg.ext[1] = 0; + msg.ext[2] = 0; + msg.ext[3] = 0; + + putmsg((CapiMsgHeader *) &msg); +} + + +static void data_b3_conf_2( TDataB3Conf * inmsg ) +{ + OSRequestMutexSem(&hmtxsem2,-1); + sendb[inmsg->number].freeflag = 1; + OSReleaseMutexSem(&hmtxsem2); + AppSigFunc( 5, (void *) inmsg ); +} + +static void data_b3_req( char *outdata, short length ) +{ +static TDataB3Req msg; + int blkfree; + + if( length > CAPI_NUM_B3_SIZE ) + return; + + OSRequestMutexSem(&hmtxsem2,-1); + + for( blkfree=0 ; (blkfreeheader.msgnum; + + msg.plci = inmsg->plci; + + putmsg((CapiMsgHeader *) &msg); + + if (inmsg->plci == act_plci) { + set_state (1); + + config_file_read_string(STD_CFG_FILE,CALL_BACK_ACTIVE,active_str,CALL_BACK_ACTIVE_DEF); + active_flg = atoi(check_time(active_str)); + + if ((is_callback == 0) + && (active_flg) + && (calllength > config_file_read_ulong(STD_CFG_FILE,CALL_BACK_LIMIT,CALL_BACK_LIMIT_DEF))) { + config_file_read_string(STD_CFG_FILE,CALL_BACK_NUMBER,num,CALL_BACK_NUMBER_DEF); + better_string (caller_msn_org , PRTFILE, 9, num, num); + better_string (caller_id_org , NAMFILE, 9, num, num); + strcpy (num,check_time(num)); + + if (strlen(num) && online) { + OsSleep(5000); + + is_callback = 1; + + // connect_request conn_req con_req + + msg2.header.length = 33+strlen(num); + msg2.header.appid = (WORD)AppID; + msg2.header.cmd = (BYTE)0x02; + msg2.header.subcmd = (BYTE)0x80; + msg2.header.msgnum = NextMsgNum(); + msg2.controller = ((BYTE)config_file_read_ulong(STD_CFG_FILE,SERV_CONTROLLER,SERV_CONTROLLER_DEF)); + msg2.cip_value = ((BYTE)config_file_read_ulong(STD_CFG_FILE,OUT_CIP_VALUE,OUT_CIP_VALUE_DEF)); + msg2.ext[0] = 1+strlen(num); + msg2.ext[1] = 0x80; + memcpy (&msg2.ext[2],num,strlen(num)); + + i = strlen(num)+2; + +// ################################ + + config_file_read_string(STD_CFG_FILE,OUTGOING_NUMBER,out_num,OUTGOING_NUMBER_DEF); + if (out_num[0] == 0) + { + msg2.ext[i ] = 0; // no calling party number + } + else + { + msg2.ext[i ] = strlen(out_num)+2; // length + msg2.ext[i+ 1] = 0; // calling party number etsi 300 102-2 byte 0 + msg2.ext[i+ 2] = 0x80; // calling party number etsi 300 102-2 byte 1 + memcpy (&msg2.ext[i+3],out_num,strlen(out_num)); + i += strlen(out_num)+2; + msg2.header.length += strlen(out_num)+2; + } + +// ################################ + msg2.ext[i+ 1] = 0; // called party subadress + msg2.ext[i+ 2] = 0; // calling party subadress + + msg2.ext[i+ 3] = 9; + msg2.ext[i+ 4] = 1; // b1 = transp + msg2.ext[i+ 5] = 0; + msg2.ext[i+ 6] = 1; // b2 = transp + msg2.ext[i+ 7] = 0; + msg2.ext[i+ 8] = 0; // b3 = transp + msg2.ext[i+ 9] = 0; + msg2.ext[i+10] = 0; // b1 config = 0 + msg2.ext[i+11] = 0; // b2 config = 0 + msg2.ext[i+12] = 0; // b3 config = 0 + + msg2.ext[i+13] = 0; // bc + msg2.ext[i+14] = 0; // llc + msg2.ext[i+15] = 0; // hlc + msg2.ext[i+16] = 0; // add info + + putmsg((CapiMsgHeader *) &msg2); + + strcpy (ConIndMsg.caller_name , APPNAME); + strcpy (ConIndMsg.caller_org_name, APPNAME); + strcpy (ConIndMsg.called_name , num); + ConIndMsg.is_digital = 0; + AppSigFunc (1,(void *)&ConIndMsg); + fernabfrage = 1; + } + } + } +} + +static void disc_ind( TDiscInd *inmsg ) +{ + if (inmsg->plci == act_plci) { + discind_flag = 1; + if (rec_thread_id) { + OsStopThread (rec_thread_id); + rec_thread_id = 0; + } + } + if ((inmsg->plci == act_plci) && (num_in_list)) { + AppSigFunc( 6, (void *) inmsg ); + } + + disc_resp(inmsg); + if (inmsg->plci == act_plci) { + API_RELEASE_20 ( AppID ); + OsSleep(100); + API_REGISTER_20( CAPI_MSGBUF_SIZE, CAPI_NUM_B3_CON, CAPI_NUM_B3_BLK, CAPI_NUM_B3_SIZE, &AppID ); + comm20_listen (1); + } +} + +static void disc_conf( TDiscConf *inmsg ) +{ + inmsg = inmsg; +} + +static void disc_b3_resp(TDiscB3Ind *orgmsg) +{ +static TDiscB3Resp msg; + + msg.header.length = 12; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x84; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = orgmsg->header.msgnum; + + msg.ncci = my_ncci; + + putmsg((CapiMsgHeader *) &msg); +} + +static void disc_req( void ) +{ +static TDiscReq msg; + + set_state (4); + + msg.header.length = 13; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x04; + msg.header.subcmd = (BYTE)0x80; + msg.header.msgnum = NextMsgNum(); + + msg.plci = act_plci; + + msg.additional_info[0] = 0; + + putmsg((CapiMsgHeader *) &msg); +} + +static void disc_b3_ind_2( TDiscB3Ind * inmsg ) +{ + AppSigFunc( 4, (void *) inmsg ); + disc_b3_resp(inmsg); + disc_req(); +} + +static void data_b3_ind_2( TDataB3Ind * inmsg ) +{ + TDataB3Resp msg; + + OSRequestMutexSem(&hmtxsem1,-1); + + if (maxbuffer > (tU32)buff_write-(tU32)&buffer+inmsg->data_length) { + memcpy (buff_write,inmsg->data,inmsg->data_length); + buff_write += inmsg->data_length; + } else { + buff_write = buffer; + buff_read = buffer; + + sprintf (out_msg,"ISDNAPI: Buffer Overflow"); + s2debug_pipe(out_msg); + AppSigFunc( 7, (void *) out_msg ); + } + + OSReleaseMutexSem(&hmtxsem1); + + msg.header.length = sizeof(msg.header)+6; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x86; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = inmsg->header.msgnum; + + msg.ncci = my_ncci; + msg.number = inmsg->number; + + putmsg((CapiMsgHeader *) &msg); + + OSRequestMutexSem(&hmtxsem3,-1); + AppSigFunc( 3, (void *) inmsg ); + OSReleaseMutexSem(&hmtxsem3); +} + +static void data_b3_ind_n( TDataB3Ind * inmsg ) +{ + TDataB3Resp msg; + + msg.header.length = sizeof(msg.header)+6; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x86; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = inmsg->header.msgnum; + + msg.ncci = my_ncci; + msg.number = inmsg->number; + + putmsg((CapiMsgHeader *) &msg); + +} + +static void connect_b3_act_ind_1( TConnB3ActInd * inmsg ) +{ +static TConnB3ActResp msg; + + short i; + + online = 1; + + msg.header.length = 12; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x83; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = inmsg->header.msgnum; + + msg.ncci = my_ncci; + + set_state(3); + putmsg((CapiMsgHeader *) &msg); + + AppSigFunc( 2, (void *) inmsg ); + + OsSleep(100); + + for (i=1;i<= CAPI_NUM_B3_BLK;i++) AppSigFunc( 5, (void *) inmsg ); // trick + +} + +static void connect_b3_resp(TConnB3Ind * orgmsg) +{ +static TConnB3Resp msg; + + msg.header.length = sizeof(msg.header)+7; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x82; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = orgmsg->header.msgnum; + + msg.ncci = my_ncci; + msg.reject = 0; + msg.ncpi.length = 0; + + putmsg((CapiMsgHeader *) &msg); +} + +static void connect_b3_ind_1( TConnB3Ind * msg ) +{ + my_ncci = msg->ncci; + + connect_b3_resp(msg); +} + +static void connect_act_resp(TConnActInd *orgmsg) +{ +static TConnActResp msg; + + msg.header.length = 12; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x03; + msg.header.subcmd = (BYTE)0x83; + msg.header.msgnum = orgmsg->header.msgnum; + + msg.plci = act_plci; + + putmsg((CapiMsgHeader *) &msg); +} + +static void connect_act_ind_1( TConnActInd *msg ) +{ + static TConnB3Req msg2; + + connect_act_resp(msg); + if (is_callback) { + msg2.header.length = 13; + msg2.header.appid = (WORD)AppID; + msg2.header.cmd = (BYTE)0x82; + msg2.header.subcmd = (BYTE)0x80; + msg2.header.msgnum = NextMsgNum(); + msg2.plci = act_plci; + msg2.ncpi[0] = 0; + putmsg((CapiMsgHeader *) &msg2); + } +} + +short NextMsgNum( void ) +{ + return (MsgNum++ & 0x7fff); +} + +static void state_error(char cmd, char subcmd ) +{ + sprintf(out_msg,"ISDNAPI: STATE ERROR: State=%d Cmd=0x%x SubCmd=0x%x!!!", (int)conn_state, (char)cmd, (char)subcmd ); + s2debug_pipe(out_msg); +printf ("\n%s\n",out_msg); // problem +// AppSigFunc( 7, (void *) out_msg ); +} + +static void listen_conf_0( TListenConfMsg *msg ) +{ + if( msg->info ) { + sprintf(out_msg,"ISDNAPI: LISTEN CONFIRM ERROR:\nINFO=0x%x", msg->info ); + s2debug_pipe(out_msg); + AppSigFunc( 8, (void *) out_msg ); + } else + set_state(1); +} + +static void _Optlink waitforconn( void *arg ) +{ + long wait_ms = 0; + short cnv_flag = 0; + unsigned long active=1; + + active = config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE ,CAPITEL_ACTIVE_DEF) + & config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE_TIME,CAPITEL_ACTIVE_TIME_DEF); + + while( (wait_ms < (an_delay_next_call * 1000)) && (!discind_flag)) + { + OsSleep( 300 ); + if (active) wait_ms += 300; + } + + + if( !discind_flag ) + { + while (wav2alw_convert_runs()) { + OsSleep (250); + cnv_flag = 1; + } + + if (cnv_flag) OsSleep (1500); + + if (!discind_flag) { + connect_resp(act_plci); + } else { + reject_cause = 1; + connect_resp(act_plci); + } + } else { + OsSleep (200); + reject_cause = 1; + connect_resp(act_plci); + } +} + +//***************************************************************************** +// function : etsi_str_calling_pn +// in : zeiger auf capi-struktur +// out : nullterminierter nummernstring + +unsigned char *etsi_str_calling_pn (unsigned char *cpn) +{ + static unsigned char etsi_out[200]; // output + unsigned char length; // länge der rufnummer + short i; // bla + + strcpy (etsi_out,""); // output init + length = *cpn; // länge init + + if (0 == length) return (etsi_out); + + cpn++; // + length--; // + + if ((*cpn & 16) == 16) strcat (etsi_out,"00"); // international? + if ((*cpn & 32) == 32) strcat (etsi_out, "0"); // national? + if ((*cpn & 128) == 0) { cpn++; length--;} ; // ggf. pi und si überspringen + cpn++; // + + for (i=1;i<=length;i++) strncat (etsi_out,cpn++,1); // rufnummer kopieren + // + return (etsi_out); // ergebnis +} // + +//***************************************************************************** +// function : etsi_str_called_pn +// in : zeiger auf capi-struktur +// out : nullterminierter nummernstring + +unsigned char *etsi_str_called_pn (unsigned char *cpn) +{ + static unsigned char etsi_out[200]; // output + unsigned char length; // länge der rufnummer + short i; // bla + + strcpy (etsi_out,""); // output init + length = *cpn; // länge init + cpn += 2; // + length -= 1; // + + for (i=1;i<=length;i++) strncat (etsi_out,cpn++,1); // rufnummer kopieren + // + return (etsi_out); // ergebnis +} // +//***************************************************************************** + +static void set_active_numbers(void) +{ + char str[205], org[205]; + FILE *msndat = NULL; + + strcpy (msn_liste,"|"); + msndat = fopen (PRTFILE,"r"); + + if (msndat) { + while (fgets(str,200,msndat)) { + if ((str[0] != '#') && (strlen(str)) && (strchr(str,'|')!=NULL)) { + strcpy (org,str); + strtok(str ,"|"); strtok(NULL,"|"); strtok(NULL,"|"); strtok(NULL,"|"); strtok(NULL,"|"); strtok(NULL,"|"); + if (*strtok(NULL,"|") == '1') { +//problem: früher: if (strchr (org,' |')) *strchr (org,'|') = 0; + if (strchr (org,'|')) *strchr (org,'|') = 0; + strcat (msn_liste,org); + } + strcat (msn_liste,"|"); + } + } + fclose (msndat); + } +} + +static void alert_conf (void) +{ +} + +static void alert_req (unsigned long PLCI) +{ +static TAlertReqMsg msg; + + msg.header.length = 13; + msg.header.appid = (WORD)AppID; + msg.header.cmd = (BYTE)0x01; + msg.header.subcmd = (BYTE)0x80; + msg.header.msgnum = NextMsgNum(); + + msg.PLCI = PLCI; + msg.additional_info[0] = 0; + + putmsg((CapiMsgHeader *) &msg); +} + +static void connect_ind_1( TConnectIndMsg *msg ) +{ + char caller_id[150]; + char caller_msn[150]; + unsigned char *msgpt; + + char reject_cause_str[20]; + char max_rec_time_str[20]; + char an_delay_str[20]; + struct tm *tmbuf; + time_t tod; + char timestr[200]; + char datestr[200]; + char caller_name[200]; + char msn_name[200]; + AnsConIndMsg ConIndMsg; + unsigned long ZeroBeh; + char zhelp [200]; + +//georg + if (config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE,CAPITEL_ACTIVE_DEF)) { + alert_req(msg->plci); + } + + online = 0; + set_active_numbers (); + set_pipename_debug (); + set_pipename_info (); + + debug_data_b3 = config_file_read_ulong (STD_CFG_FILE,DEBUG_DATA_B3,DEBUG_DATA_B3_DEF); + + connect_ind_msgnum = msg->header.msgnum; + + if (conn_state == 1) { + comm20_clear_all_buffer(); + set_state(2); + act_plci = msg->plci; + discind_flag=0; + is_callback = 0; + + msgpt = msg->ext; // ^called party number + msgpt += msg->ext[0]+1; // ^calling party number + + if( *msgpt == 0 ) { // keine calling party number? + if (msg->cip_value == cip_value_telephony) // telephony (isdn) + { + config_file_read_string(STD_CFG_FILE,TEXT_UNKNOWN_ISDN,caller_id,TEXT_UNKNOWN_ISDN_DEF); + } + else + { + config_file_read_string(STD_CFG_FILE,TEXT_UNKNOWN_ANALOG,caller_id,TEXT_UNKNOWN_ANALOG_DEF); + } + } else { + strcpy (caller_id,etsi_str_calling_pn(msgpt)); + answer_cti (caller_id); + if (caller_id[0] == 0) + { + if (msg->cip_value == cip_value_telephony) // telephony (isdn) + { + config_file_read_string(STD_CFG_FILE,TEXT_UNKNOWN_ISDN,caller_id,TEXT_UNKNOWN_ISDN_DEF); + } + else + { + config_file_read_string(STD_CFG_FILE,TEXT_UNKNOWN_ANALOG,caller_id,TEXT_UNKNOWN_ANALOG_DEF); + } + } + } + +//############### + ZeroBeh = config_file_read_ulong(STD_CFG_FILE,ZERO_BEHAVIOR,ZERO_BEHAVIOR_DEF); + switch (ZeroBeh) + { + case 1: if (caller_id[0] == '0') // delete leading zero + { + strcpy (zhelp, caller_id+1); + strcpy (caller_id, zhelp); + } + break; + case 2: strcpy (zhelp, "0"); // add leading zero + strcat (zhelp, caller_id); + strcpy (caller_id, zhelp); + break; + } +//############### + + time( &tod ); + tmbuf = localtime( &tod ); + + tmbuf->tm_year = tmbuf->tm_year + 1900; + + sprintf( datestr, "%02d/%02d/%04d",tmbuf->tm_mday,tmbuf->tm_mon+1, tmbuf->tm_year ); + sprintf( timestr, "%02d:%02d:%02d" ,tmbuf->tm_hour, tmbuf->tm_min, tmbuf->tm_sec); + s2info_pipe (datestr); + s2info_pipe (" "); + s2info_pipe (timestr); + s2info_pipe (", "); + + s2info_pipe (caller_id); + s2info_pipe (", "); + strcpy (caller_id_org, caller_id); + better_string(caller_id,NAMFILE,2,caller_id, caller_name); + s2info_pipe (caller_name); + s2info_pipe (", "); + + memcpy(caller_msn, msg->ext, msg->ext[0]+1 ); + if (0 == msg->ext[0]) { + strcpy (caller_msn,""); + } else { + strcpy (caller_msn,etsi_str_called_pn(caller_msn)); + } + s2info_pipe (caller_msn); + s2info_pipe (", "); + + if ((strstr(msn_liste,caller_msn) == NULL) && (strlen(msn_liste) > 1)) { + num_in_list = 0; + } else { + num_in_list = 1; + } + + strcpy (caller_msn_org, caller_msn); + better_string(caller_msn,PRTFILE,2,caller_msn, msn_name); + s2info_pipe (msn_name); + s2info_pipe (", "); + + strcpy (ConIndMsg.caller_name, caller_id); + strcpy (ConIndMsg.caller_org_name, caller_id); + strcpy (ConIndMsg.called_name, caller_msn); + if (msg->cip_value == cip_value_digital) { + ConIndMsg.is_digital = 1; + } else { + ConIndMsg.is_digital = 0; + } + + if (num_in_list) AppSigFunc (1,(void *)&ConIndMsg); +// AppSigFunc (1,(void *)&ConIndMsg); + + strcpy (reject_cause_str,"0"); + better_string (caller_msn,PRTFILE,4,reject_cause_str, reject_cause_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (caller_id ,NAMFILE,4,reject_cause_str, reject_cause_str); + } + reject_cause = reject_cause_str[0]-48; + s2info_pipe (reject_cause_str); + s2info_pipe (", "); + +#ifdef RECOTEL + max_rec_time_next_call = 9999; +#else + max_rec_time_next_call = config_file_read_ulong(STD_CFG_FILE,DEFAULT_REC_TIME,DEFAULT_REC_TIME_DEF); +#endif + sprintf(max_rec_time_str,"%d",(int)max_rec_time_next_call); + better_string (caller_msn,PRTFILE,5,max_rec_time_str, max_rec_time_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (caller_id ,NAMFILE,5,max_rec_time_str, max_rec_time_str); + } + max_rec_time_next_call = strtol (max_rec_time_str,NULL,10); + s2info_pipe (max_rec_time_str); + s2info_pipe (", "); + + an_delay_next_call = an_delay_default; + sprintf(an_delay_str,"%d",(int)an_delay_next_call); + better_string (caller_msn,PRTFILE,6,an_delay_str, an_delay_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (caller_id ,NAMFILE,6,an_delay_str, an_delay_str); + } + an_delay_next_call = strtol (an_delay_str,NULL,10); + s2info_pipe (an_delay_str); + s2info_pipe ("\n"); + + strcpy (ConIndMsg.caller_name,"|"); + strcat (ConIndMsg.caller_name,ConIndMsg.called_name); + strcat (ConIndMsg.caller_name,"|"); + strcpy (ConIndMsg.called_name,ConIndMsg.caller_name); + + if ((strstr(msn_liste,ConIndMsg.called_name) == NULL) && (strlen(msn_liste) > 1)) { + reject_cause = 2; + } + + if ((!config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE,CAPITEL_ACTIVE_DEF)) || (msg->cip_value == cip_value_digital )) { // inaktiv? +//georg reject_cause = 3; // unavailable + reject_cause = 2; // ignore + connect_resp(msg->plci); // ablehnen + } else if (reject_cause) { // anrufer ablehnen? + connect_resp(msg->plci); // ja. mit rejec_cause + } else { +// alert_req(msg->plci); + OsStartThread( waitforconn); // nein = annehmen :) + } + + } else { + reject_cause = 1; // BUSY + connect_resp(msg->plci); // ablehnen + } +} + +static void int_sigfunc(void) +{ +static void * pt; +static CapiMsgHeader *cmsg; + + + while( API_GET_MESSAGE_20( AppID,((void**)&pt)) == 0 ) { + + cmsg = (CapiMsgHeader *) pt; + + if ((cmsg->cmd != (BYTE)0x86) || debug_data_b3) { + sprintf(out_msg,"GetMsg: 0x%02x 0x%02x (State: %d)", cmsg->cmd, cmsg->subcmd, (int)conn_state ); + s2debug_pipe(out_msg); + c20_analyze_get_msg ((char *)pt,0xffff); + } + + switch( conn_state ) { /* State Machine */ + + /**********l*************************************************************/ + /*** State: Answ. Machine Inactive */ + /***********************************************************************/ + + case 0: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0581: listen_conf_0 ((TListenConfMsg *) cmsg ); break; + case 0x8682: data_b3_ind_n ((TDataB3Ind *) cmsg ); break; + default: state_error (cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Answ. Machine waiting for incoming call */ + /***********************************************************************/ + + case 1: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0282: connect_ind_1 ((TConnectIndMsg *) cmsg ); break; + case 0x0481: disc_conf ((TDiscConf *) cmsg ); break; + case 0x0581: listen_conf_0 ((TListenConfMsg *) cmsg ); break; + case 0x8682: data_b3_ind_n ((TDataB3Ind *) cmsg ); break; + case 0x0181: alert_conf () ; break; + case 0x0281: connect_conf ((TConnConf *) cmsg) ; break; + default: state_error (cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Answ. Machine building up connection */ + /***********************************************************************/ + + case 2: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0282: connect_ind_1 ((TConnectIndMsg *) cmsg ); break; + case 0x0382: connect_act_ind_1 ((TConnActInd *) cmsg ); break; + case 0x8282: connect_b3_ind_1 ((TConnB3Ind *) cmsg ); break; + case 0x8382: connect_b3_act_ind_1 ((TConnB3ActInd *) cmsg ); break; + case 0x8682: data_b3_ind_n ((TDataB3Ind *) cmsg ); break; + case 0x0482: disc_ind ((TDiscInd *) cmsg ); break; + case 0x0581: listen_conf_0 ((TListenConfMsg *) cmsg ); break; + case 0x0481: disc_conf ((TDiscConf *) cmsg ); break; + case 0x0181: alert_conf () ; break; + case 0x8281: connect_b3_conf ((TConnB3Conf *) cmsg ); break; + default: state_error (cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Data Transfer */ + /***********************************************************************/ + + case 3: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0482: disc_ind ((TDiscInd *) cmsg ); break; + case 0x0282: connect_ind_1 ((TConnectIndMsg *) cmsg ); break; + case 0x8682: data_b3_ind_2 ((TDataB3Ind *) cmsg ); break; + case 0x8482: disc_b3_ind_2 ((TDiscB3Ind *) cmsg ); break; + case 0x8681: data_b3_conf_2 ((TDataB3Conf *) cmsg ); break; + default: state_error (cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Disconnecting */ + /***********************************************************************/ + + case 4: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + case 0x0282: connect_ind_1 ((TConnectIndMsg *) cmsg ); break; + case 0x8681: data_b3_conf_2 ((TDataB3Conf *) cmsg ); break; + case 0x8682: data_b3_ind_n ((TDataB3Ind *) cmsg ); break; + case 0x0481: disc_conf ((TDiscConf *) cmsg ); break; + case 0x0482: disc_ind ((TDiscInd *) cmsg ); break; + case 0x8482: disc_b3_ind_2 ((TDiscB3Ind *) cmsg ); break; + default: state_error (cmsg->cmd, cmsg->subcmd ); break; + } + break; + + /***********************************************************************/ + /*** State: Unknown */ + /***********************************************************************/ + + default: + switch( MAKEUSHORT(cmsg->subcmd, cmsg->cmd) ) { + default: state_error(cmsg->cmd, cmsg->subcmd ); break; + } + break; + } + } + return; +} + +void comm20_clear_read_buffer (void) +{ + OSRequestMutexSem(&hmtxsem1,-1); + buff_read = buffer; + buff_write = buffer; + OSReleaseMutexSem(&hmtxsem1); +} + +void comm20_clear_write_buffer (void) +{ + long t; + + OSRequestMutexSem(&hmtxsem2,-1); + for (t=0;t 0); +} + +void comm20_write_block( char *buf, short length ) +{ + if( conn_state != 3 ) return; + + data_b3_req( buf, length ); + +} + +void comm20_disc_req(void) +{ + disc_req(); +} + +void comm20_name_of_interface (char *name) +{ + strcpy (name,"CAPI 2.0"); +} + diff --git a/isdn/source/isdncapi.c b/isdn/source/isdncapi.c new file mode 100644 index 0000000..1e36bb5 --- /dev/null +++ b/isdn/source/isdncapi.c @@ -0,0 +1,247 @@ +#include +#include +#include + + +#include "../../isdn/source/isdn.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../common/source/global.h" + +#define CAPI11 1 +#define CAPI20 2 +#define SERIAL 3 + +static char device = 0; + +short comm_init ( void (*sigf)( short, void * )) +{ + short ret; + unsigned long detect; + + detect = config_file_read_ulong(STD_CFG_FILE, COM_DEVICE, COM_DEVICE_DEF); // os2 + + switch (detect) { + case 0: { + /* = = = = = = = = = = = = = = = = = = = = */ + + ret = comm20_init (sigf, 0); // capi 2.0? aber nicht runterfahren + if (ret == 0) { + device = CAPI20; + return (0); + } + /* = = = = = = = = = = = = = = = = = = = = */ + ret = comm11_init (sigf, 0); // capi 1.1? aber nicht runterfahren + if (ret == 0) { + device = CAPI11; + return (0); + } + /* = = = = = = = = = = = = = = = = = = = = */ +/* + ret = commse_init (sigf, 0); // serial? + if (ret == 0) { + device = SERIAL; + return (0); + } +*/ + /* = = = = = = = = = = = = = = = = = = = = */ + return (1); + break; + } + case 1: { + ret = comm11_init (sigf, 1); // capi 1.1? aber runterfahren + if (ret == 0) { + device = CAPI11; + return (0); + } + return (1); + break; + } + case 2: { + ret = comm20_init (sigf, 1); // capi 2.0? aber runterfahren + if (ret == 0) { + device = CAPI20; + return (0); + } + return (1); + break; + } + case 3: { + ret = commse_init (sigf, 1); // com? aber runterfahren + if (ret == 0) { + device = SERIAL; + return (0); + } + return (1); + break; + } + } + return (1); +} + +short comm_exit (void) +{ + switch (device) { + case CAPI20: return (comm20_exit()); + case CAPI11: return (comm11_exit()); + case SERIAL: return (commse_exit()); + } + return (1); +} + +short comm_listen (short val) +{ + switch (device) { + case CAPI20: return (comm20_listen (val)); + case CAPI11: return (comm11_listen (val)); + case SERIAL: return (commse_listen (val)); + } + return (1); +} + +char comm_connected (void) +{ + switch (device) { + case CAPI20: return (comm20_connected()); + case CAPI11: return (comm11_connected()); + case SERIAL: return (commse_connected()); + } + return (0); +} + +char comm_data_available (void) +{ + switch (device) { + case CAPI20: return (comm20_data_available()); + case CAPI11: return (comm11_data_available()); + case SERIAL: return (commse_data_available()); + } + return (0); +} + +void comm_clear_all_buffer (void) +{ + switch (device) { + case CAPI20: comm20_clear_all_buffer(); break; + case CAPI11: comm11_clear_all_buffer(); break; + case SERIAL: commse_clear_all_buffer(); break; + } +} + +long comm_read_block (char *buff) +{ + switch (device) { + case CAPI20: return (comm20_read_block(buff)); + case CAPI11: return (comm11_read_block(buff)); + case SERIAL: return (commse_read_block(buff)); + } + return (0); +} + +void comm_write_block (char *buff, short val) +{ + switch (device) { + case CAPI20: comm20_write_block (buff, val); break; + case CAPI11: comm11_write_block (buff, val); break; + case SERIAL: commse_write_block (buff, val); break; + } +} + +void comm_begin_of_record (void) +{ + switch (device) { + case CAPI20: comm20_begin_of_record(); break; + case CAPI11: comm11_begin_of_record(); break; + case SERIAL: commse_begin_of_record(); break; + } +} + +void comm_disc_req (void) +{ + switch (device) { + case CAPI20: comm20_disc_req(); break; + case CAPI11: comm11_disc_req(); break; + case SERIAL: commse_disc_req(); break; + } +} + +void comm_name_of_interface (char *name) +{ + switch (device) { + case CAPI20: comm20_name_of_interface(name); break; + case CAPI11: comm11_name_of_interface(name); break; + case SERIAL: commse_name_of_interface(name); break; + } +} + +#ifdef WIN32 + +short comm11_init (void (*sig)(short, void *), char sd) { return (1);} +short comm11_exit (void) { return (1);} +short comm11_listen (short val) {return (1);} +char comm11_connected (void) {return (0);} +char comm11_data_available (void) {return (0);} +void comm11_clear_all_buffer (void) {} +void comm11_clear_read_buffer (void) {} +void comm11_clear_write_buffer (void) {} +long comm11_read_block (char *buff) {return (0);} +void comm11_write_block (char *buff, short val) {} +char comm11_can_write (void) {return (0);} +void comm11_begin_of_record (void) {} +void comm11_disc_req (void) {} +void comm11_name_of_interface (char* name){ strcpy (name,"CAPI 1.1 DUMMY");} + +#endif + +#ifdef UNIX + +short comm11_init (void (*sig)(short, void *), char sd) { return (1);} +short comm11_exit (void) { return (1);} +short comm11_listen (short val) {return (1);} +char comm11_connected (void) {return (0);} +char comm11_data_available (void) {return (0);} +void comm11_clear_all_buffer (void) {} +void comm11_clear_read_buffer (void) {} +void comm11_clear_write_buffer (void) {} +long comm11_read_block (char *buff) {return (0);} +void comm11_write_block (char *buff, short val) {} +char comm11_can_write (void) {return (0);} +void comm11_begin_of_record (void) {} +void comm11_disc_req (void) {} +void comm11_name_of_interface (char* name){ strcpy (name,"CAPI 1.1 DUMMY");} + +short commse_init (void (*sig)(short, void *), char sd) { return (1);} +short commse_exit (void) { return (1);} +short commse_listen (short val) {return (1);} +char commse_connected (void) {return (0);} +char commse_data_available (void) {return (0);} +void commse_clear_all_buffer (void) {} +void commse_clear_read_buffer (void) {} +void commse_clear_write_buffer (void) {} +long commse_read_block (char *buff) {return (0);} +void commse_write_block (char *buff, short val) {} +char commse_can_write (void) {return (0);} +void commse_begin_of_record (void) {} +void commse_disc_req (void) {} +void commse_name_of_interface (char* name){ strcpy (name,"Serial DUMMY");} + +#endif + +#ifdef OS2 + +short commse_init (void (*sig)(short, void *), char sd) { return (1);} +short commse_exit (void) { return (1);} +short commse_listen (short val) {return (1);} +char commse_connected (void) {return (0);} +char commse_data_available (void) {return (0);} +void commse_clear_all_buffer (void) {} +void commse_clear_read_buffer (void) {} +void commse_clear_write_buffer (void) {} +long commse_read_block (char *buff) {return (0);} +void commse_write_block (char *buff, short val) {} +char commse_can_write (void) {return (0);} +void commse_begin_of_record (void) {} +void commse_disc_req (void) {} +void commse_name_of_interface (char* name){ strcpy (name,"Serial DUMMY");} + +#endif + diff --git a/serial/OBJ.WIN/serial.obj b/serial/OBJ.WIN/serial.obj new file mode 100644 index 0000000000000000000000000000000000000000..5e005f426d39eca6b332114f470d47915f21bb7d GIT binary patch literal 10127 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 CP +#include +#include +#include +#include + +#include "..\..\..\units\win.src\w32uart.h" +#include "..\..\..\units\common.src\v24util.h" +#include "..\..\..\units\common.src\os.h" +#include "..\..\common\source\version.h" +#include "..\..\isdn\source\isdn.h" +#include "..\..\..\units\common.src\capi_chk.h" +#include "..\..\..\units\common.src\loadcapi.h" +#include "..\..\..\units\common.src\num2nam.h" +#include "..\..\wave\source\wav2alw.h" +#include "..\..\common\source\global.h" +#include "..\..\..\units\common.src\cfg_file.h" +#include "..\..\answer\source\answer.h" + +#define ATASTR "ATA\r" +#define RING_TIME_OUT 3000L + +static char online=0; +static char UsedCom[6] = {0}; + +static Thread_Id_Typ wait_thread_id = 0; +static Thread_Id_Typ rec_thread_id = 0; + +static tU32 LastRing = 0; +static tU32 an_delay_next_call; +static tU32 an_delay_default; +static char msn_liste[500]; +static short num_in_list = 0; +static long max_rec_time_next_call; + +static unsigned long Handle; + +void (*AppSigFunc)( short, void * ); + +static char out_msg[300]; + + + +void SigDiscInd (void) +{ + AppSigFunc (4,""); + AppSigFunc (6,""); + Sleep (200); + xW32UartPurgeRxTxBuff (Handle); +} + + +static void set_active_numbers(void) +{ + char str[205], org[205]; + FILE *msndat = NULL; + + strcpy (msn_liste,"|"); + msndat = fopen (PRTFILE,"r"); + + if (msndat) { + while (fgets(str,200,msndat)) { + if ((str[0] != '#') && (strlen(str)) && (strchr(str,'|')!=NULL)) { + strcpy (org,str); + strtok(str ,"|"); strtok(NULL,"|"); strtok(NULL,"|"); strtok(NULL,"|"); strtok(NULL,"|"); strtok(NULL,"|"); + if (*strtok(NULL,"|") == '1') { + if (strchr (org,' |')) *strchr (org,'|') = 0; + strcat (msn_liste,org); + } + strcat (msn_liste,"|"); + } + } + fclose (msndat); + } +} + + +void b3_ind (void *Dummy) +{ + AppSigFunc (3,""); +} + +void b3_ind_pre (void) // OH GOTT, WIE KANN ICH SOWAS MACHEN? +{ + b3_ind (NULL); +} + +void b3_conf (void *Dummy) +{ + AppSigFunc (5,""); +} + + +static void _Optlink waitforconn( void *arg ) +{ + tU32 wait_ms = 0; + tU32 discind_flag = 0; + + while( (wait_ms < (an_delay_next_call * 1000)) && (!discind_flag)) + { + OsSleep( 200 ); + wait_ms += 200; + if (((GetTickCount() - LastRing) > RING_TIME_OUT)) + { + discind_flag = 1; + } + } + + if (!discind_flag) + { + xW32UartWriteBlock (ATASTR, strlen (ATASTR), 0, Handle); + Sleep (1000); + if (!online) + { + SigDiscInd(); + } + } + else + { + SigDiscInd(); + } + wait_thread_id = 0; +} + +void callback_ring (void) +{ + AnsConIndMsg ConIndMsg = {0}; + tU8 Buff [256] = {0}; + tU8 RingStr [256] = {0}; + tU8 UnKnownStr [256]; + tU8 RingTokenStr [256]; + tU32 Len; + tU32 active; + char an_delay_str[20]; + char bhelp[200]; + char max_rec_time_str[20]; + + set_active_numbers (); + + if ((GetTickCount()-LastRing) > 3000L) + { + config_file_read_string(STD_CFG_FILE, TEXT_UNKNOWN_ISDN, UnKnownStr , TEXT_UNKNOWN_ISDN_DEF); + config_file_read_string(STD_CFG_FILE, MODEM_RING_STR , RingTokenStr , MODEM_RING_STR_DEF ); + + strcpy (ConIndMsg.caller_name , UnKnownStr); + strcpy (ConIndMsg.caller_org_name, UnKnownStr); + strcpy (ConIndMsg.called_name , UnKnownStr); + + Sleep (750); + Len = xW32UartDataAvailable(Handle); + if (Len > sizeof(Buff)) Len = sizeof(Buff); + xW32UartReadBlock (Buff,Len,0, Handle); + Buff[Len] = 0; + + if (strstr(Buff, RingTokenStr)) + { + strcpy (RingStr,strstr(Buff, RingTokenStr)+5); + if (strstr(RingStr,"\r")) *strstr(RingStr,"\r") = 0; + strcpy (ConIndMsg.caller_name, RingStr); + if (strstr(ConIndMsg.caller_name,";")) *strstr(ConIndMsg.caller_name,";") = 0; + strcpy (ConIndMsg.called_name,strstr(RingStr,";")+1); + } + +/* - - - */ + + an_delay_default = config_file_read_ulong (STD_CFG_FILE,DEFAULT_ANSW_DELAY,DEFAULT_ANSW_DELAY_DEF); + an_delay_next_call = an_delay_default; + + an_delay_next_call = an_delay_default; + sprintf(an_delay_str,"%d",an_delay_next_call); + better_string (ConIndMsg.caller_name,PRTFILE,6,an_delay_str, an_delay_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (ConIndMsg.caller_name ,NAMFILE,6,an_delay_str, an_delay_str); + } + an_delay_next_call = strtol (an_delay_str,NULL,10); + +/* - - - */ + + max_rec_time_next_call = config_file_read_ulong(STD_CFG_FILE,DEFAULT_REC_TIME,DEFAULT_REC_TIME_DEF); + sprintf(max_rec_time_str,"%d",max_rec_time_next_call); + better_string (ConIndMsg.caller_name,PRTFILE,5,max_rec_time_str, max_rec_time_str); + better_string(ConIndMsg.caller_name,NAMFILE,7,"1", bhelp); + if (!strcmp(bhelp,"1")) { + better_string (ConIndMsg.caller_name ,NAMFILE,5,max_rec_time_str, max_rec_time_str); + } + max_rec_time_next_call = strtol (max_rec_time_str,NULL,10); + +/* - - - */ + + active = config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE ,CAPITEL_ACTIVE_DEF) + & config_file_read_ulong(STD_CFG_FILE,CAPITEL_ACTIVE_TIME,CAPITEL_ACTIVE_TIME_DEF); + + if ((strstr(msn_liste, ConIndMsg.called_name) == NULL) && (strlen(msn_liste) > 1)) { + num_in_list = 0; + } else { + num_in_list = 1; + } + + if ((active) && (!wait_thread_id) && (num_in_list)) + { + strcpy (ConIndMsg.caller_org_name, ConIndMsg.caller_name); + ConIndMsg.is_digital = 0; + AppSigFunc (1,(void *)&ConIndMsg); + wait_thread_id = OsStartThread( waitforconn); + } + } + LastRing = GetTickCount(); + xW32UartPurgeRxTxBuff (Handle); +} + + +void callback_dcd_on (void) +{ + AppSigFunc (2,""); + online = 1; + AppSigFunc (5,""); + AppSigFunc (3,""); + +} +void callback_dcd_off (void) +{ + online = 0; + if (rec_thread_id) { + OsStopThread (rec_thread_id); + rec_thread_id = 0; + } + SigDiscInd(); +} + +short commse_listen (short val) +{ + return (1); +} + +char commse_connected (void) +{ + return (online); +} + +char commse_data_available (void) +{ + if (xW32UartDataAvailable(Handle)) return (1); + return (0); +} + +void commse_clear_all_buffer (void) +{ + xW32UartPurgeRxTxBuff (Handle); +} + +long commse_read_block (char *buff) +{ + long len; + + len = xW32UartDataAvailable(Handle); + xW32UartReadBlock(buff, len, b3_ind, Handle); + return (len); +} + +void commse_write_block (char *buff, short val) +{ + xW32UartWriteBlock(buff, val, b3_conf, Handle); +} + +void commse_disc_req (void) +{ +} + +static void _Optlink comm_ctrl_rec( void *arg ) +{ + OsSleep(max_rec_time_next_call * 1000); + commse_disc_req(); +} + +void commse_begin_of_record (void) +{ + rec_thread_id = OsStartThread( comm_ctrl_rec); +} + +void commse_name_of_interface (char *name) +{ + strcpy (name, UsedCom); +} + +short commse_init( void (*sigf)( short, void * ), char shutdown) +{ + char InitStr[256]; + char NameOfModem[256]; + + AppSigFunc = sigf; + + if (xV24UtilSearchModem ( + config_file_read_ulong(STD_CFG_FILE, MODEM_SEARCH_FROM_COM,MODEM_SEARCH_FROM_COM_DEF), + config_file_read_ulong(STD_CFG_FILE, MODEM_SEARCH_TO_COM ,MODEM_SEARCH_TO_COM_DEF ), + UsedCom, NameOfModem)) + { + if (shutdown) { + sprintf(out_msg,"COMAPI: Unable to detect Modem or Ta!\nShutting down."); + AppSigFunc( 9, (void *) out_msg ); + } + return (1); + } + + if (xW32UartOpen(UsedCom, + config_file_read_ulong(STD_CFG_FILE, MODEM_BITRATE,MODEM_BITRATE_DEF), + W32UART_BYTE_SIZE_8, + W32UART_NO_PARITY, W32UART_ONE_STOPBIT, &Handle)) + { + sprintf(out_msg,"COMAPI: Unable to open %s!", UsedCom); + AppSigFunc( 9, (void *) out_msg ); + return (1); + } + + config_file_read_string(STD_CFG_FILE, MODEM_INIT_STR, InitStr, MODEM_INIT_STR_DEF); + if (xV24UtilSentCommand (Handle, InitStr)) + { + xW32UartClose(Handle); + sprintf(out_msg,"COMAPI: Unable to write initstring to %s!", UsedCom); + AppSigFunc( 9, (void *) out_msg ); + return (1); + } + + xW32UartSetEventProc (W32UART_EVENT_RING , callback_ring , Handle); + xW32UartSetEventProc (W32UART_EVENT_DCD_ON , callback_dcd_on , Handle); + xW32UartSetEventProc (W32UART_EVENT_DCD_OFF , callback_dcd_off, Handle); + xW32UartSetEventProc (W32UART_EVENT_RX80_FULL, b3_ind_pre , Handle); + + return (0); +} + +short commse_exit (void) +{ + if (wait_thread_id) OsStopThread( waitforconn); + strcpy (UsedCom, ""); + return ((short)xW32UartClose(Handle)); +} + diff --git a/setup/obj.win/selfx.lib b/setup/obj.win/selfx.lib new file mode 100644 index 0000000000000000000000000000000000000000..1dba4171d125660923b595ce56aa2bd6bf693a0c GIT binary patch literal 14150 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 literal 0 HcmV?d00001 diff --git a/setup/obj.win/selfx.obj b/setup/obj.win/selfx.obj new file mode 100644 index 0000000000000000000000000000000000000000..5c436bfda7a8e4ea0e267cd434b2d8cc0bdead14 GIT binary patch literal 13117 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 Sdb0O(kCPz<)eLa4KG+YR)2dDY literal 0 HcmV?d00001 diff --git a/setup/obj.win/setup.obj b/setup/obj.win/setup.obj new file mode 100644 index 0000000000000000000000000000000000000000..a338837ccd916d00b17787df5894d5a2a208be10 GIT binary patch literal 62000 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 Oa-hGJU>d|Akv{^0na|k( literal 0 HcmV?d00001 diff --git a/setup/source.win/bmp/sellist.bmp b/setup/source.win/bmp/sellist.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8d4fac69a2964df72ee67f162ee3bd03cd752182 GIT binary patch literal 9172 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
KcBnoqcQW6i@4PH@;*%sDraFN!%%; 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 literal 0 HcmV?d00001 diff --git a/setup/source.win/bmp/wizard2.bmp b/setup/source.win/bmp/wizard2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..17e67177348f8d47845664713c1406d198283acc GIT binary patch literal 1490 zcmai!e{54#6vrjRC$yx%M2aP|rrp#?kG-zg1#6-PK>5j24 z=mKS(8|y^T)h#Ym{-78Zo3VBBYNRR4L-WiQSi*3tn6LzhZp6{`^|h;b-)qJ8kLgM7 zd*^#TIp_4AdtaZgzp@r7)<&OO>8dHNRcMV8FMT{lg}k1rUXKO?htPZ0r_fd5B6799 zjK;n>i8?)vNRra%>o1QZi(wP`=*?R6ee@hk{&EeyuyZSVyq5atQA%7P)?wEenbl+Lo?i+pkt>F=YS8DQ+>MqJu zgI%U$r~H0jB>Olw94piWkNTw%&ZL@p(xkd=Z}LSpN(0(GY?&cXTmI&Oio0`wq zIc`jSBxa!fQfZOS&o(6(674rQL*VyegJHY6+bqz2VkS*lO`ZzdHdCVcrXUF88)E{` z)441yQRb=c;K6oRNZ4i!2D7YWR;bAyy#_pGtZl(+O(m-7DJb)lYeJ--Hl3rn^$YXA z8Prt(G%uge%WMY&Fvjo@xnHTto7JKmBg@%k`8}TJVMhbNuGAC$d`xXo*u9*>+{Zy0QqE`UW*^{~Pg{>Vx?m?zY?KYXArjF1J$?NkcD%R_4tJX#C5&-SjyRc)ck-dP}jU6}wlG!F_Z*}Bur9R4JdXPXo^7&6X`sp84dlefAJU0su`a59QTr%k0hX1w1oGKR zqWoWwur)$>{fSBW^Lb!oOGRx_EMgoCDuXNr$f~X*MRy~nw)R05J=Bx@1xf_z@$M;+WiDA-Tr3Ne Y2r_W8vqYA;gzSH=EKnlIud@q(194d2KL7v# literal 0 HcmV?d00001 diff --git a/setup/source.win/bmp/wizard2.bmp.org b/setup/source.win/bmp/wizard2.bmp.org new file mode 100644 index 0000000000000000000000000000000000000000..2925e7e1b1c67b1375566682871d2986e7aba394 GIT binary patch literal 1180 zcmZWpyO!G^5WOY@I5P1%-p%Wz&qijG2q>kJ{*ghwb zC4`uJXYLGxUw-}3sMl|f-}yYZX9Eqz`L|~0^q(sMyphuS;>am-&U}lZ)ElM9j1PaZ z#NjyuKmCTQGE@Es@W$W1_JFqGb6eYIn6b?GT9HI`wxl88W3&4VKbAC|<}VfDfIShe z%q2WEjLSF(ri4gOpDIpYaRE*j6+BerTGgR%_#79|I(JkNOTt@n@#NuVR|1B`k!gT; zaiLLCfXUboC6JiUhD`eEIKOiDJu52ys5}0vyTsU@Qjr?9wqOK zD7bp43OY-9Js4RJizteP6{3!z`C+YfOrmC(O;)2W=u(bNh4NIOtuSe4hcOe;Egs5g zRl-_3DmgN?p9+;!6-!=P9k|2vP%~lW_x}JU$gi^B%CkN#Vzu!r_EcK>@Z+c92Q?i?z& zL*+19H(lZyiJUI0c#Gw1u&LIiXJiWI2+=o6PDC?DJzj2j{cuNbuidm`53PEbQ#WyA z1MD>$Hz4*@)5$TZ)u?^H%Q|w~6Qf8M#enUNQI;CTh=1nQ@YtX7S-K`XRwU1EXM error present +} ERF; /* erf */ +typedef ERF FAR *PERF; /* perf */ + +#ifdef _DEBUG +// don't hide statics from map during debugging +#define STATIC +#else // !DEBUG +#define STATIC static +#endif // !DEBUG + +#define CB_MAX_CHUNK 32768U +#define CB_MAX_DISK 0x7ffffffL +#define CB_MAX_FILENAME 256 +#define CB_MAX_CABINET_NAME 256 +#define CB_MAX_CAB_PATH 256 +#define CB_MAX_DISK_NAME 256 + +/*** tcompXXX - Compression types + * + * These are passed to FCIAddFile(), and are also stored in the CFFOLDER + * structures in cabinet files. + * + * NOTE: We reserve bits for the TYPE, QUANTUM_LEVEL, and QUANTUM_MEM + * to provide room for future expansion. Since this value is stored + * in the CFDATA records in the cabinet file, we don't want to + * have to change the format for existing compression configurations + * if we add new ones in the future. This will allows us to read + * old cabinet files in the future. + */ + +typedef unsigned short TCOMP; /* tcomp */ + +#define tcompMASK_TYPE 0x000F // Mask for compression type +#define tcompTYPE_NONE 0x0000 // No compression +#define tcompTYPE_MSZIP 0x0001 // MSZIP +#define tcompTYPE_QUANTUM 0x0002 // Quantum +#define tcompTYPE_LZX 0x0003 // LZX +#define tcompBAD 0x000F // Unspecified compression type + +#define tcompMASK_LZX_WINDOW 0x1F00 // Mask for LZX Compression Memory +#define tcompLZX_WINDOW_LO 0x0F00 // Lowest LZX Memory (15) +#define tcompLZX_WINDOW_HI 0x1500 // Highest LZX Memory (21) +#define tcompSHIFT_LZX_WINDOW 8 // Amount to shift over to get int + +#define tcompMASK_QUANTUM_LEVEL 0x00F0 // Mask for Quantum Compression Level +#define tcompQUANTUM_LEVEL_LO 0x0010 // Lowest Quantum Level (1) +#define tcompQUANTUM_LEVEL_HI 0x0070 // Highest Quantum Level (7) +#define tcompSHIFT_QUANTUM_LEVEL 4 // Amount to shift over to get int + +#define tcompMASK_QUANTUM_MEM 0x1F00 // Mask for Quantum Compression Memory +#define tcompQUANTUM_MEM_LO 0x0A00 // Lowest Quantum Memory (10) +#define tcompQUANTUM_MEM_HI 0x1500 // Highest Quantum Memory (21) +#define tcompSHIFT_QUANTUM_MEM 8 // Amount to shift over to get int + +#define tcompMASK_RESERVED 0xE000 // Reserved bits (high 3 bits) + + + +#define CompressionTypeFromTCOMP(tc) \ + ((tc) & tcompMASK_TYPE) + +#define CompressionLevelFromTCOMP(tc) \ + (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL) + +#define CompressionMemoryFromTCOMP(tc) \ + (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM) + +#define TCOMPfromTypeLevelMemory(t,l,m) \ + (((m) << tcompSHIFT_QUANTUM_MEM ) | \ + ((l) << tcompSHIFT_QUANTUM_LEVEL) | \ + ( t )) + +#define LZXCompressionWindowFromTCOMP(tc) \ + (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW) + +#define TCOMPfromLZXWindow(w) \ + (((w) << tcompSHIFT_LZX_WINDOW ) | \ + ( tcompTYPE_LZX )) + + +//** Revert to default structure packing +#pragma pack() + +#endif // !INCLUDED_TYPES_FCI_FDI + +/* + * Concepts: + * A *cabinet* file contains one or more *folders*. A folder contains + * one or more (pieces of) *files*. A folder is by definition a + * decompression unit, i.e., to extract a file from a folder, all of + * the data from the start of the folder up through and including the + * desired file must be read and decompressed. + * + * A folder can span one (or more) cabinet boundaries, and by implication + * a file can also span one (or more) cabinet boundaries. Indeed, more + * than one file can span a cabinet boundary, since FCI concatenates + * files together into a single data stream before compressing (actually, + * at most one file will span any one cabinet boundary, but FCI does + * not know which file this is, since the mapping from uncompressed bytes + * to compressed bytes is pretty obscure. Also, since FCI compresses + * in blocks of 32K (at present), any files with data in a 32K block that + * spans a cabinet boundary require FDI to read both cabinet files + * to get the two halves of the compressed block). + * + * Overview: + * The File Decompression Interface is used to simplify the reading of + * cabinet files. A setup program will proceed in a manner very + * similar to the pseudo code below. An FDI context is created, the + * setup program calls FDICopy() for each cabinet to be processed. For + * each file in the cabinet, FDICopy() calls a notification callback + * routine, asking the setup program if the file should be copied. + * This call-back approach is great because it allows the cabinet file + * to be read and decompressed in an optimal manner, and also makes FDI + * independent of the run-time environment -- FDI makes *no* C run-time + * calls whatsoever. All memory allocation and file I/O functions are + * passed into FDI by the client. + * + * main(...) + * { + * // Read INF file to construct list of desired files. + * // Ideally, these would be sorted in the same order as the + * // files appear in the cabinets, so that you can just walk + * // down the list in response to fdintCOPY_FILE notifications. + * + * // Construct list of required cabinets. + * + * hfdi = FDICreate(...); // Create FDI context + * For (cabinet in List of Cabinets) { + * FDICopy(hfdi,cabinet,fdiNotify,...); // Process each cabinet + * } + * FDIDestroy(hfdi); + * ... + * } + * + * // Notification callback function + * fdiNotify(fdint,...) + * { + * If (User Aborted) // Permit cancellation + * if (fdint == fdintCLOSE_FILE_INFO) + * close open file + * return -1; + * switch (fdint) { + * case fdintCOPY_FILE: // File to copy, maybe + * // Check file against list of desired files + * if want to copy file + * open destination file and return handle + * else + * return NULL; // Skip file + * case fdintCLOSE_FILE_INFO: + * close file + * set date, time, and attributes + * + * case fdintNEXT_CABINET: + * if not an error callback + * Tell FDI to use suggested directory name + * else + * Tell user what the problem was, and prompt + * for a new disk and/or path. + * if user aborts + * Tell FDI to abort + * else + * return to FDI to try another cabinet + * + * default: + * return 0; // more messages may be defined + * ... + * } + * + * Error Handling Suggestions: + * Since you the client have passed in *all* of the functions that + * FDI uses to interact with the "outside" world, you are in prime + * position to understand and deal with errors. + * + * The general philosophy of FDI is to pass all errors back up to + * the client. FDI returns fairly generic error codes in the case + * where one of the callback functions (PFNOPEN, PFNREAD, etc.) fail, + * since it assumes that the callback function will save enough + * information in a static/global so that when FDICopy() returns + * fail, the client can examine this information and report enough + * detail about the problem that the user can take corrective action. + * + * For very specific errors (CORRUPT_CABINET, for example), FDI returns + * very specific error codes. + * + * THE BEST POLICY IS FOR YOUR CALLBACK ROUTINES TO AVOID RETURNING + * ERRORS TO FDI! + * + * Examples: + * (1) If the disk is getting full, instead of returning an error + * from your PFNWRITE function, you should -- inside your + * PFNWRITE function -- put up a dialog telling the user to free + * some disk space. + * (2) When you get the fdintNEXT_CABINET notification, you should + * verify that the cabinet you return is the correct one (call + * FDIIsCabinet(), and make sure the setID matches the one for + * the current cabinet specified in the fdintCABINET_INFO, and + * that the disk number is one greater. + * + * NOTE: FDI will continue to call fdintNEXT_CABINET until it + * gets the cabinet it wants, or until you return -1 + * to abort the FDICopy() call. + * + * The documentation below on the FDI error codes provides explicit + * guidance on how to avoid each error. + * + * If you find you must return a failure to FDI from one of your + * callback functions, then FDICopy() frees all resources it allocated + * and closes all files. If you can figure out how to overcome the + * problem, you can call FDICopy() again on the last cabinet, and + * skip any files that you already copied. But, note that FDI does + * *not* maintain any state between FDICopy() calls, other than possibly + * memory allocated for the decompressor. + * + * See FDIERROR for details on FDI error codes and recommended actions. + * + * + * Progress Indicator Suggestions: + * As above, all of the file I/O functions are supplied by you. So, + * updating a progress indicator is very simple. You keep track of + * the target files handles you have opened, along with the uncompressed + * size of the target file. When you see writes to the handle of a + * target file, you use the write count to update your status! + * Since this method is available, there is no separate callback from + * FDI just for progess indication. + */ + +#ifndef INCLUDED_FDI +#define INCLUDED_FDI 1 + +//** Specify structure packing explicitly for clients of FDI +#pragma pack(4) + + +/*** FDIERROR - Error codes returned in erf.erfOper field + * + * In general, FDI will only fail if one of the passed in memory or + * file I/O functions fails. Other errors are pretty unlikely, and are + * caused by corrupted cabinet files, passing in a file which is not a + * cabinet file, or cabinet files out of order. + * + * Description: Summary of error. + * Cause: List of possible causes of this error. + * Response: How client might respond to this error, or avoid it in + * the first place. + */ +typedef enum { + FDIERROR_NONE, + // Description: No error + // Cause: Function was successfull. + // Response: Keep going! + + FDIERROR_CABINET_NOT_FOUND, + // Description: Cabinet not found + // Cause: Bad file name or path passed to FDICopy(), or returned + // to fdintNEXT_CABINET. + // Response: To prevent this error, validate the existence of the + // the cabinet *before* passing the path to FDI. + + FDIERROR_NOT_A_CABINET, + // Description: Cabinet file does not have the correct format + // Cause: File passed to to FDICopy(), or returned to + // fdintNEXT_CABINET, is too small to be a cabinet file, + // or does not have the cabinet signature in its first + // four bytes. + // Response: To prevent this error, call FDIIsCabinet() to check a + // cabinet before calling FDICopy() or returning the + // cabinet path to fdintNEXT_CABINET. + + FDIERROR_UNKNOWN_CABINET_VERSION, + // Description: Cabinet file has an unknown version number. + // Cause: File passed to to FDICopy(), or returned to + // fdintNEXT_CABINET, has what looks like a cabinet file + // header, but the version of the cabinet file format + // is not one understood by this version of FDI. The + // erf.erfType field is filled in with the version number + // found in the cabinet file. + // Response: To prevent this error, call FDIIsCabinet() to check a + // cabinet before calling FDICopy() or returning the + // cabinet path to fdintNEXT_CABINET. + + FDIERROR_CORRUPT_CABINET, + // Description: Cabinet file is corrupt + // Cause: FDI returns this error any time it finds a problem + // with the logical format of a cabinet file, and any + // time one of the passed-in file I/O calls fails when + // operating on a cabinet (PFNOPEN, PFNSEEK, PFNREAD, + // or PFNCLOSE). The client can distinguish these two + // cases based upon whether the last file I/O call + // failed or not. + // Response: Assuming this is not a real corruption problem in + // a cabinet file, the file I/O functions could attempt + // to do retries on failure (for example, if there is a + // temporary network connection problem). If this does + // not work, and the file I/O call has to fail, then the + // FDI client will have to clean up and call the + // FDICopy() function again. + + FDIERROR_ALLOC_FAIL, + // Description: Could not allocate enough memory + // Cause: FDI tried to allocate memory with the PFNALLOC + // function, but it failed. + // Response: If possible, PFNALLOC should take whatever steps + // are possible to allocate the memory requested. If + // memory is not immediately available, it might post a + // dialog asking the user to free memory, for example. + // Note that the bulk of FDI's memory allocations are + // made at FDICreate() time and when the first cabinet + // file is opened during FDICopy(). + + FDIERROR_BAD_COMPR_TYPE, + // Description: Unknown compression type in a cabinet folder + // Cause: [Should never happen.] A folder in a cabinet has an + // unknown compression type. This is probably caused by + // a mismatch between the version of FCI.LIB used to + // create the cabinet and the FDI.LIB used to read the + // cabinet. + // Response: Abort. + + FDIERROR_MDI_FAIL, + // Description: Failure decompressing data from a cabinet file + // Cause: The decompressor found an error in the data coming + // from the file cabinet. The cabinet file was corrupted. + // [11-Apr-1994 bens When checksuming is turned on, this + // error should never occur.] + // Response: Probably should abort; only other choice is to cleanup + // and call FDICopy() again, and hope there was some + // intermittent data error that will not reoccur. + + FDIERROR_TARGET_FILE, + // Description: Failure writing to target file + // Cause: FDI returns this error any time it gets an error back + // from one of the passed-in file I/O calls fails when + // writing to a file being extracted from a cabinet. + // Response: To avoid or minimize this error, the file I/O functions + // could attempt to avoid failing. A common cause might + // be disk full -- in this case, the PFNWRITE function + // could have a check for free space, and put up a dialog + // asking the user to free some disk space. + + FDIERROR_RESERVE_MISMATCH, + // Description: Cabinets in a set do not have the same RESERVE sizes + // Cause: [Should never happen]. FDI requires that the sizes of + // the per-cabinet, per-folder, and per-data block + // RESERVE sections be consistent across all the cabinets + // in a set. + // Response: Abort. + + FDIERROR_WRONG_CABINET, + // Description: Cabinet returned on fdintNEXT_CABINET is incorrect + // Cause: NOTE: THIS ERROR IS NEVER RETURNED BY FDICopy()! + // Rather, FDICopy() keeps calling the fdintNEXT_CABINET + // callback until either the correct cabinet is specified, + // or you return ABORT. + // When FDICopy() is extracting a file that crosses a + // cabinet boundary, it calls fdintNEXT_CABINET to ask + // for the path to the next cabinet. Not being very + // trusting, FDI then checks to make sure that the + // correct continuation cabinet was supplied! It does + // this by checking the "setID" and "iCabinet" fields + // in the cabinet. When MAKECAB.EXE creates a set of + // cabinets, it constructs the "setID" using the sum + // of the bytes of all the destination file names in + // the cabinet set. FDI makes sure that the 16-bit + // setID of the continuation cabinet matches the + // cabinet file just processed. FDI then checks that + // the cabinet number (iCabinet) is one more than the + // cabinet number for the cabinet just processed. + // Response: You need code in your fdintNEXT_CABINET (see below) + // handler to do retries if you get recalled with this + // error. See the sample code (EXTRACT.C) to see how + // this should be handled. + + FDIERROR_USER_ABORT, + // Description: FDI aborted. + // Cause: An FDI callback returnd -1 (usually). + // Response: Up to client. + +} FDIERROR; + + +/* + * FAT file attribute flag used by FCI/FDI to indicate that + * the filename in the CAB is a UTF string + */ +#ifndef _A_NAME_IS_UTF +#define _A_NAME_IS_UTF 0x80 +#endif + +/* + * FAT file attribute flag used by FCI/FDI to indicate that + * the file should be executed after extraction + */ +#ifndef _A_EXEC +#define _A_EXEC 0x40 +#endif + + +/*** HFDI - Handle to an FDI context + * + * FDICreate() creates this, and it must be passed to all other FDI + * functions. + */ +typedef void FAR *HFDI; /* hfdi */ + + +/*** FDICABINETINFO - Information about a cabinet + * + */ +typedef struct { + long cbCabinet; // Total length of cabinet file + USHORT cFolders; // Count of folders in cabinet + USHORT cFiles; // Count of files in cabinet + USHORT setID; // Cabinet set ID + USHORT iCabinet; // Cabinet number in set (0 based) + BOOL fReserve; // TRUE => RESERVE present in cabinet + BOOL hasprev; // TRUE => Cabinet is chained prev + BOOL hasnext; // TRUE => Cabinet is chained next +} FDICABINETINFO; /* fdici */ +typedef FDICABINETINFO FAR *PFDICABINETINFO; /* pfdici */ + + +/*** FDIDECRYPTTYPE - PFNFDIDECRYPT command types + * + */ +typedef enum { + fdidtNEW_CABINET, // New cabinet + fdidtNEW_FOLDER, // New folder + fdidtDECRYPT, // Decrypt a data block +} FDIDECRYPTTYPE; /* fdidt */ + + +/*** FDIDECRYPT - Data for PFNFDIDECRYPT function + * + */ +typedef struct { + FDIDECRYPTTYPE fdidt; // Command type (selects union below) + void FAR *pvUser; // Decryption context + union { + struct { // fdidtNEW_CABINET + void FAR *pHeaderReserve; // RESERVE section from CFHEADER + USHORT cbHeaderReserve; // Size of pHeaderReserve + USHORT setID; // Cabinet set ID + int iCabinet; // Cabinet number in set (0 based) + } cabinet; + + struct { // fdidtNEW_FOLDER + void FAR *pFolderReserve; // RESERVE section from CFFOLDER + USHORT cbFolderReserve; // Size of pFolderReserve + USHORT iFolder; // Folder number in cabinet (0 based) + } folder; + + struct { // fdidtDECRYPT + void FAR *pDataReserve; // RESERVE section from CFDATA + USHORT cbDataReserve; // Size of pDataReserve + void FAR *pbData; // Data buffer + USHORT cbData; // Size of data buffer + BOOL fSplit; // TRUE if this is a split data block + USHORT cbPartial; // 0 if this is not a split block, or + // the first piece of a split block; + // Greater than 0 if this is the + // second piece of a split block. + } decrypt; + }; +} FDIDECRYPT; /* fdid */ +typedef FDIDECRYPT FAR *PFDIDECRYPT; /* pfdid */ + + +/*** FNALLOC - Memory Allocation + * FNFREE - Memory Free + * + * These are modeled after the C run-time routines malloc() and free() + * FDI expects error handling to be identical to these C run-time routines. + * + * As long as you faithfully copy the semantics of malloc() and free(), + * you can supply any functions you like! + * + * WARNING: You should never assume anything about the sequence of + * PFNALLOC and PFNFREE calls -- incremental releases of + * FDI may have radically different numbers of + * PFNALLOC calls and allocation sizes! + */ +//** Memory functions for FDI +typedef void HUGE * (FAR DIAMONDAPI *PFNALLOC)(ULONG cb); /* pfna */ +#define FNALLOC(fn) void HUGE * FAR DIAMONDAPI fn(ULONG cb) + +typedef void (FAR DIAMONDAPI *PFNFREE)(void HUGE *pv); /* pfnf */ +#define FNFREE(fn) void FAR DIAMONDAPI fn(void HUGE *pv) + + +/*** PFNOPEN - File I/O callbacks for FDI + * PFNREAD + * PFNWRITE + * PFNCLOSE + * PFNSEEK + * + * These are modeled after the C run-time routines _open, _read, + * _write, _close, and _lseek. The values for the PFNOPEN oflag + * and pmode calls are those defined for _open. FDI expects error + * handling to be identical to these C run-time routines. + * + * As long as you faithfully copy these aspects, you can supply + * any functions you like! + * + * WARNING: You should never assume you know what file is being + * opened at any one point in time! FDI will usually + * stick to opening cabinet files, but it is possible + * that in a future implementation it may open temporary + * files or open cabinet files in a different order. + * + * Notes for Memory Mapped File fans: + * You can write wrapper routines to allow FDI to work on memory + * mapped files. You'll have to create your own "handle" type so that + * you can store the base memory address of the file and the current + * seek position, and then you'll allocate and fill in one of these + * structures and return a pointer to it in response to the PFNOPEN + * call and the fdintCOPY_FILE call. Your PFNREAD and PFNWRITE + * functions will do memcopy(), and update the seek position in your + * "handle" structure. PFNSEEK will just change the seek position + * in your "handle" structure. + */ +//** File I/O functions for FDI +typedef int (FAR DIAMONDAPI *PFNOPEN) (char FAR *pszFile, int oflag, int pmode); +typedef UINT (FAR DIAMONDAPI *PFNREAD) (int hf, void FAR *pv, UINT cb); +typedef UINT (FAR DIAMONDAPI *PFNWRITE)(int hf, void FAR *pv, UINT cb); +typedef int (FAR DIAMONDAPI *PFNCLOSE)(int hf); +typedef long (FAR DIAMONDAPI *PFNSEEK) (int hf, long dist, int seektype); + +#define FNOPEN(fn) int FAR DIAMONDAPI fn(char FAR *pszFile, int oflag, int pmode) +#define FNREAD(fn) UINT FAR DIAMONDAPI fn(int hf, void FAR *pv, UINT cb) +#define FNWRITE(fn) UINT FAR DIAMONDAPI fn(int hf, void FAR *pv, UINT cb) +#define FNCLOSE(fn) int FAR DIAMONDAPI fn(int hf) +#define FNSEEK(fn) long FAR DIAMONDAPI fn(int hf, long dist, int seektype) + + + +/*** PFNFDIDECRYPT - FDI Decryption callback + * + * If this function is passed on the FDICopy() call, then FDI calls it + * at various times to update the decryption state and to decrypt FCDATA + * blocks. + * + * Common Entry Conditions: + * pfdid->fdidt - Command type + * pfdid->pvUser - pvUser value from FDICopy() call + * + * fdidtNEW_CABINET: //** Notification of a new cabinet + * Entry: + * pfdid->cabinet. + * pHeaderReserve - RESERVE section from CFHEADER + * cbHeaderReserve - Size of pHeaderReserve + * setID - Cabinet set ID + * iCabinet - Cabinet number in set (0 based) + * Exit-Success: + * returns anything but -1; + * Exit-Failure: + * returns -1; FDICopy() is aborted. + * Notes: + * (1) This call allows the decryption code to pick out any information + * from the cabinet header reserved area (placed there by DIACRYPT) + * needed to perform decryption. If there is no such information, + * this call would presumably be ignored. + * (2) This call is made very soon after fdintCABINET_INFO. + * + * fdidtNEW_FOLDER: //** Notification of a new folder + * Entry: + * pfdid->folder. + * pFolderReserve - RESERVE section from CFFOLDER + * cbFolderReserve - Size of pFolderReserve + * iFolder - Folder number in cabinet (0 based) + * Exit-Success: + * returns anything but -1; + * Exit-Failure: + * returns -1; FDICopy() is aborted. + * Notes: + * This call allows the decryption code to pick out any information + * from the folder reserved area (placed there by DIACRYPT) needed + * to perform decryption. If there is no such information, this + * call would presumably be ignored. + * + * fdidtDECRYPT: //** Decrypt a data buffer + * Entry: + * pfdid->folder. + * pDataReserve - RESERVE section for this CFDATA block + * cbDataReserve - Size of pDataReserve + * pbData - Data buffer + * cbData - Size of data buffer + * fSplit - TRUE if this is a split data block + * cbPartial - 0 if this is not a split block, or the first + * piece of a split block; Greater than 0 if + * this is the second piece of a split block. + * Exit-Success: + * returns TRUE; + * Exit-Failure: + * returns FALSE; error during decrypt + * returns -1; FDICopy() is aborted. + * Notes: + * FCI will split CFDATA blocks across cabinet boundaries if + * necessary. To provide maximum flexibility, FDI will call the + * fdidtDECRYPT function twice on such split blocks, once when + * the first portion is read, and again when the second portion + * is read. And, of course, most data blocks will not be split. + * So, there are three cases: + * + * 1) fSplit == FALSE + * You have the entire data block, so decrypt it. + * + * 2) fSplit == TRUE, cbPartial == 0 + * This is the first portion of a split data block, so cbData + * is the size of this portion. You can either choose to decrypt + * this piece, or ignore this call and decrypt the full CFDATA + * block on the next (second) fdidtDECRYPT call. + * + * 3) fSplit == TRUE, cbPartial > 0 + * This is the second portion of a split data block (indeed, + * cbPartial will have the same value as cbData did on the + * immediately preceeding fdidtDECRYPT call!). If you decrypted + * the first portion on the first call, then you can decrypt the + * second portion now. If you ignored the first call, then you + * can decrypt the entire buffer. + * NOTE: pbData points to the second portion of the split data + * block in this case, *not* the entire data block. If + * you want to wait until the second piece to decrypt the + * *entire* block, pbData-cbPartial is the address of the + * start of the whole block, and cbData+cbPartial is its + * size. + */ +typedef int (FAR DIAMONDAPI *PFNFDIDECRYPT)(PFDIDECRYPT pfdid); /* pfnfdid */ +#define FNFDIDECRYPT(fn) int FAR DIAMONDAPI fn(PFDIDECRYPT pfdid) + + +/*** FDINOTIFICATION - Notification structure for PFNFDINOTIFY + * + * See the FDINOTIFICATIONTYPE definition for information on usage and + * meaning of these fields. + */ +typedef struct { +// long fields + long cb; + char FAR *psz1; + char FAR *psz2; + char FAR *psz3; // Points to a 256 character buffer + void FAR *pv; // Value for client + +// int fields + int hf; + +// short fields + USHORT date; + USHORT time; + USHORT attribs; + + USHORT setID; // Cabinet set ID + USHORT iCabinet; // Cabinet number (0-based) + USHORT iFolder; // Folder number (0-based) + + FDIERROR fdie; +} FDINOTIFICATION, FAR *PFDINOTIFICATION; /* fdin, pfdin */ + + +/*** FDINOTIFICATIONTYPE - FDICopy notification types + * + * The notification function for FDICopy can be called with the following + * values for the fdint parameter. In all cases, the pfdin->pv field is + * filled in with the value of the pvUser argument passed in to FDICopy(). + * + * A typical sequence of calls will be something like this: + * fdintCABINET_INFO // Info about the cabinet + * fdintENUMERATE // Starting enumeration + * fdintPARTIAL_FILE // Only if this is not the first cabinet, and + * // one or more files were continued from the + * // previous cabinet. + * ... + * fdintPARTIAL_FILE + * fdintCOPY_FILE // The first file that starts in this cabinet + * ... + * fdintCOPY_FILE // Now let's assume you want this file... + * // PFNWRITE called multiple times to write to this file. + * fdintCLOSE_FILE_INFO // File done, set date/time/attributes + * + * fdintCOPY_FILE // Now let's assume you want this file... + * // PFNWRITE called multiple times to write to this file. + * fdintNEXT_CABINET // File was continued to next cabinet! + * fdintCABINET_INFO // Info about the new cabinet + * // PFNWRITE called multiple times to write to this file. + * fdintCLOSE_FILE_INFO // File done, set date/time/attributes + * ... + * fdintENUMERATE // Ending enumeration + * + * fdintCABINET_INFO: + * Called exactly once for each cabinet opened by FDICopy(), including + * continuation cabinets opened due to file(s) spanning cabinet + * boundaries. Primarily intended to permit EXTRACT.EXE to + * automatically select the next cabinet in a cabinet sequence even if + * not copying files that span cabinet boundaries. + * Entry: + * pfdin->psz1 = name of next cabinet + * pfdin->psz2 = name of next disk + * pfdin->psz3 = cabinet path name + * pfdin->setID = cabinet set ID (a random 16-bit number) + * pfdin->iCabinet = Cabinet number within cabinet set (0-based) + * Exit-Success: + * Return anything but -1 + * Exit-Failure: + * Returns -1 => Abort FDICopy() call + * Notes: + * This call is made *every* time a new cabinet is examined by + * FDICopy(). So if "foo2.cab" is examined because a file is + * continued from "foo1.cab", and then you call FDICopy() again + * on "foo2.cab", you will get *two* fdintCABINET_INFO calls all + * told. + * + * fdintCOPY_FILE: + * Called for each file that *starts* in the current cabinet, giving + * the client the opportunity to request that the file be copied or + * skipped. + * Entry: + * pfdin->psz1 = file name in cabinet + * pfdin->cb = uncompressed size of file + * pfdin->date = file date + * pfdin->time = file time + * pfdin->attribs = file attributes + * pfdin->iFolder = file's folder index + * Exit-Success: + * Return non-zero file handle for destination file; FDI writes + * data to this file use the PFNWRITE function supplied to FDICreate, + * and then calls fdintCLOSE_FILE_INFO to close the file and set + * the date, time, and attributes. NOTE: This file handle returned + * must also be closeable by the PFNCLOSE function supplied to + * FDICreate, since if an error occurs while writing to this handle, + * FDI will use the PFNCLOSE function to close the file so that the + * client may delete it. + * Exit-Failure: + * Returns 0 => Skip file, do not copy + * Returns -1 => Abort FDICopy() call + * + * fdintCLOSE_FILE_INFO: + * Called after all of the data has been written to a target file. + * This function must close the file and set the file date, time, + * and attributes. + * Entry: + * pfdin->psz1 = file name in cabinet + * pfdin->hf = file handle + * pfdin->date = file date + * pfdin->time = file time + * pfdin->attribs = file attributes + * pfdin->iFolder = file's folder index + * pfdin->cb = Run After Extract (0 - don't run, 1 Run) + * Exit-Success: + * Returns TRUE + * Exit-Failure: + * Returns FALSE, or -1 to abort; + * + * IMPORTANT NOTE IMPORTANT: + * pfdin->cb is overloaded to no longer be the size of + * the file but to be a binary indicated run or not + * + * IMPORTANT NOTE: + * FDI assumes that the target file was closed, even if this + * callback returns failure. FDI will NOT attempt to use + * the PFNCLOSE function supplied on FDICreate() to close + * the file! + * + * fdintPARTIAL_FILE: + * Called for files at the front of the cabinet that are CONTINUED + * from a previous cabinet. This callback occurs only when FDICopy is + * started on second or subsequent cabinet in a series that has files + * continued from a previous cabinet. + * Entry: + * pfdin->psz1 = file name of file CONTINUED from a PREVIOUS cabinet + * pfdin->psz2 = name of cabinet where file starts + * pfdin->psz3 = name of disk where file starts + * Exit-Success: + * Return anything other than -1; enumeration continues + * Exit-Failure: + * Returns -1 => Abort FDICopy() call + * + * fdintENUMERATE: + * Called once after a call to FDICopy() starts scanning a CAB's + * CFFILE entries, and again when there are no more CFFILE entries. + * If CAB spanning occurs, an additional call will occur after the + * first spanned file is completed. If the pfdin->iFolder value is + * changed from zero, additional calls will occur next time it reaches + * zero. If iFolder is changed to zero, FDICopy will terminate, as if + * there were no more CFFILE entries. Primarily intended to allow an + * application with it's own file list to help FDI advance quickly to + * a CFFILE entry of interest. Can also be used to allow an + * application to determine the cb values for each file in the CAB. + * Entry: + * pfdin->cb = current CFFILE position + * pfdin->iFolder = number of files remaining + * pfdin->setID = current CAB's setID value + * Exit-Don't Care: + * Don't change anything. + * Return anything but -1. + * Exit-Forcing a skip: + * pfdin->cb = desired CFFILE position + * pfdin->iFolder = desired # of files remaining + * Return anything but -1. + * Exit-Stop: + * pfdin->iFolder = set to 0 + * Return anything but -1. + * Exit-Failure: + * Return -1 => Abort FDICopy call ("user aborted".) + * Notes: + * This call can be ignored by applications which want normal file + * searching. The application can adjust the supplied values to + * force FDICopy() to continue it's search at another location, or + * to force FDICopy() to terminate the search, by setting iFolder to 0. + * (FDICopy() will report no error when terminated this way.) + * FDI has no means to verify the supplied cb or iFolder values. + * Arbitrary values are likely to cause undesirable results. An + * application should cross-check pfdin->setID to be certain the + * external database is in sync with the CAB. Reverse-skips are OK + * (but may be inefficient) unless fdintNEXT_CABINET has been called. + * + * fdintNEXT_CABINET: + * This function is *only* called when fdintCOPY_FILE was told to copy + * a file in the current cabinet that is continued to a subsequent + * cabinet file. It is important that the cabinet path name (psz3) + * be validated before returning! This function should ensure that + * the cabinet exists and is readable before returning. So, this + * is the function that should, for example, issue a disk change + * prompt and make sure the cabinet file exists. + * + * When this function returns to FDI, FDI will check that the setID + * and iCabinet match the expected values for the next cabinet. + * If not, FDI will continue to call this function until the correct + * cabinet file is specified, or until this function returns -1 to + * abort the FDICopy() function. pfdin->fdie is set to + * FDIERROR_WRONG_CABINET to indicate this case. + * + * If you *haven't* ensured that the cabinet file is present and + * readable, or the cabinet file has been damaged, pfdin->fdie will + * receive other appropriate error codes: + * + * FDIERROR_CABINET_NOT_FOUND + * FDIERROR_NOT_A_CABINET + * FDIERROR_UNKNOWN_CABINET_VERSION + * FDIERROR_CORRUPT_CABINET + * FDIERROR_BAD_COMPR_TYPE + * FDIERROR_RESERVE_MISMATCH + * FDIERROR_WRONG_CABINET + * + * Entry: + * pfdin->psz1 = name of next cabinet where current file is continued + * pfdin->psz2 = name of next disk where current file is continued + * pfdin->psz3 = cabinet path name; FDI concatenates psz3 with psz1 + * to produce the fully-qualified path for the cabinet + * file. The 256-byte buffer pointed at by psz3 may + * be modified, but psz1 may not! + * pfdin->fdie = FDIERROR_WRONG_CABINET if the previous call to + * fdintNEXT_CABINET specified a cabinet file that + * did not match the setID/iCabinet that was expected. + * Exit-Success: + * Return anything but -1 + * Exit-Failure: + * Returns -1 => Abort FDICopy() call + * Notes: + * This call is almost always made when a target file is open and + * being written to, and the next cabinet is needed to get more + * data for the file. + */ +typedef enum { + fdintCABINET_INFO, // General information about cabinet + fdintPARTIAL_FILE, // First file in cabinet is continuation + fdintCOPY_FILE, // File to be copied + fdintCLOSE_FILE_INFO, // close the file, set relevant info + fdintNEXT_CABINET, // File continued to next cabinet + fdintENUMERATE, // Enumeration status +} FDINOTIFICATIONTYPE; /* fdint */ + +typedef int (FAR DIAMONDAPI *PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint, + PFDINOTIFICATION pfdin); /* pfnfdin */ + +#define FNFDINOTIFY(fn) int FAR DIAMONDAPI fn(FDINOTIFICATIONTYPE fdint, \ + PFDINOTIFICATION pfdin) + + +/*** cpuType values for FDICreate() + * + * (Ignored by 32-bit FDI.) + */ +#define cpuUNKNOWN (-1) /* FDI does detection */ +#define cpu80286 (0) /* '286 opcodes only */ +#define cpu80386 (1) /* '386 opcodes used */ + + +/*** FDICreate - Create an FDI context + * + * Entry: + * pfnalloc + * pfnfree + * pfnopen + * pfnread + * pfnwrite + * pfnclose + * pfnlseek + * cpuType - Select CPU type (auto-detect, 286, or 386+) + * NOTE: For the 32-bit FDI.LIB, this parameter is ignored! + * perf + * + * Exit-Success: + * Returns non-NULL FDI context handle. + * + * Exit-Failure: + * Returns NULL; perf filled in with error code + * + */ +HFDI FAR DIAMONDAPI FDICreate(PFNALLOC pfnalloc, + PFNFREE pfnfree, + PFNOPEN pfnopen, + PFNREAD pfnread, + PFNWRITE pfnwrite, + PFNCLOSE pfnclose, + PFNSEEK pfnseek, + int cpuType, + PERF perf); + + +/*** FDIIsCabinet - Determines if file is a cabinet, returns info if it is + * + * Entry: + * hfdi - Handle to FDI context (created by FDICreate()) + * hf - File handle suitable for PFNREAD/PFNSEEK, positioned + * at offset 0 in the file to test. + * pfdici - Buffer to receive info about cabinet if it is one. + * + * Exit-Success: + * Returns TRUE; file is a cabinet, pfdici filled in. + * + * Exit-Failure: + * Returns FALSE, file is not a cabinet; If an error occurred, + * perf (passed on FDICreate call!) filled in with error. + */ +BOOL FAR DIAMONDAPI FDIIsCabinet(HFDI hfdi, + int hf, + PFDICABINETINFO pfdici); + + +/*** FDICopy - extracts files from a cabinet + * + * Entry: + * hfdi - handle to FDI context (created by FDICreate()) + * pszCabinet - main name of cabinet file + * pszCabPath - Path to cabinet file(s) + * flags - Flags to modify behavior + * pfnfdin - Notification function + * pfnfdid - Decryption function (pass NULL if not used) + * pvUser - User specified value to pass to notification function + * + * Exit-Success: + * Returns TRUE; + * + * Exit-Failure: + * Returns FALSE, perf (passed on FDICreate call!) filled in with + * error. + * + * Notes: + * (1) If FDICopy() fails while a target file is being written out, then + * FDI will use the PFNCLOSE function to close the file handle for that + * target file that was returned from the fdintCOPY_FILE notification. + * The client application is then free to delete the target file, since + * it will not be in a valid state (since there was an error while + * writing it out). + */ +BOOL FAR DIAMONDAPI FDICopy(HFDI hfdi, + char FAR *pszCabinet, + char FAR *pszCabPath, + int flags, + PFNFDINOTIFY pfnfdin, + PFNFDIDECRYPT pfnfdid, + void FAR *pvUser); + + +/*** FDIDestroy - Destroy an FDI context + * + * Entry: + * hfdi - handle to FDI context (created by FDICreate()) + * + * Exit-Success: + * Returns TRUE; + * + * Exit-Failure: + * Returns FALSE; + */ +BOOL FAR DIAMONDAPI FDIDestroy(HFDI hfdi); + + +//** Revert to default structure packing +#pragma pack() + +#endif // !INCLUDED_FDI + +#ifdef __cplusplus +} +#endif diff --git a/setup/source.win/ico/setup1.ico b/setup/source.win/ico/setup1.ico new file mode 100644 index 0000000000000000000000000000000000000000..9808b4b12e1a135104020bfdd3c5056bae62d7da GIT binary patch literal 4846 zcmeH}ziu2i5Qj&004TRyLTdI@=`*$6fb|h5cwIsylnRMnaJyxB5&T* zZu#vekzalgxyB3-;Y_$dQO5R*(n*hM6Ka~EVrF!V^(*7(E#Tvqy!!g($NT$x+fFmQ z$NpWH3&Snz_Q=f&+d$>38BYn#&;lp%9}wHflj z{&kq_I*Hu+5Rc^L=EL|7`%bG>qkG7k*>0C_>&&e^jhOtG5sSUs7<`7Ecx#`>`q#b> z+MIp2Y~<~@MQATv&_2j$anhYVpPA=m-#sxt zxZa??lBcL=6@E3F?oeWQb$7A3*mTsp<-FEj`J<*h>(7RFgO9x?hQA^boXJ26fzi;c3c|J2niH27?gIDIiL{|C}c1w?U*f~5fUh5 zFevpF#1ha52^2CI6jAoC62Nz!z&{xbiYWWn5FkPVg$xFz-L@Fe2niH27?gHPQ$Qmm zP{?3V+U;f%)d&d`G8mMW3OS$=5-4OaC@oDapb-)%WH2Z-g|q}TLIQ;h21Shhn*@lE zKp}&FN=vN}&G8mMWb}^t45-4OaC@m#ZKqDkj$Y4-fx@tfpBv8m;P+BVIfJR85 zkinp|G`E08NT85q^Y17h@l)dQMyOwZG59aI*Zz*+MTYgg{QoB~o}bI-RgrTp94V*x z6LKj}i9i41x}N0Eeh!WE_3y=hu0OkZR{SIT=&on>@2u+-{|C3z*FMMZ?1T7wW$~ZK ztpc9nzZ&kxxLwbI_|hgBhIZ^NKiA_{0o`@-=TA+&O|ANx{>)GK?LLmLNA~uy_V+V@ zsnD#!TYR5{vU2Y<>E7LU$E$lzb*g^+j{n1b?9AcoKe&$_-@dupN8h1d?X2tQ`E>k` zM6bV8yZbmAe?M6NJZHaea6R+ZzU$EwXis>{Fn`LQYX2j0<^D$$huVKo<*N1n7do;~ WpXZ=@hxebNZ>Mp$la8)l9@j6daTTTj literal 0 HcmV?d00001 diff --git a/setup/source.win/ico/sfx1.ico b/setup/source.win/ico/sfx1.ico new file mode 100644 index 0000000000000000000000000000000000000000..6e8700ce7c9872e5348ec80f2881887049c3932a GIT binary patch literal 1078 zcmb7CJ#X7E5Iu(lq$zfOfjtEo1#s}F3lWQ6J}D?57RW@O_!JNx`(S7XJZs#*RIw^X{M}Q@yFGURwh__rB|YFoVvkYTm{L zM8_N7)os(rzowNg^GtbG_r9n$RJXrzbc?0DnS^l$b$fFoe^*OcEa0nte-!!lUG^`% zeh^tfKOgjAKar@L0d<&P91-*);2ukd>#d{yx-OFSiGQxcsNf%$D^w4=A>kbv+0h6j zWd-Ko^o#@@=nxq^1w%Z8zrg*4)H>J7pMgW2BmW#6H%Cn)1MwiasLoL@p-@{?vBe@S zsyoDkR^OzY+FT?X^TunnjM-GsUCv~ERd|a!{4-s>EfL?RuX~N*QW0_P`e_>1xSuo} pH@j(Dx^Y>$#9Ei&o3XK@?G_8_?wA0d%5n$2BfXamqUHuH_yZHmX0HGM literal 0 HcmV?d00001 diff --git a/setup/source.win/m.bat b/setup/source.win/m.bat new file mode 100644 index 0000000..af40a16 --- /dev/null +++ b/setup/source.win/m.bat @@ -0,0 +1 @@ +@nmake /nologo %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/setup/source.win/makefile b/setup/source.win/makefile new file mode 100644 index 0000000..0f9a102 --- /dev/null +++ b/setup/source.win/makefile @@ -0,0 +1,44 @@ +!IF "$(OS)" != "Windows_NT" +!ERROR This makefile requires Microsoft Windows NT +!ENDIF + +!IF "$(dbg)" == "1" +!MESSAGE Making Setup (debug) +cc_dbg_opt = /Zi /MTd +!ELSE +!MESSAGE Making Setup (release) +cc_dbg_opt = /MT +!ENDIF + +cc = @cl $(cc_dbg_opt) /nologo /c /W3 /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_DEPRECATE /W3 /DWIN32 /Fo$@ +mlb = @lib /nologo /out:$@ + +obj = ..\obj.win + +all: lib + +lib: dirs \ + $(obj)\setup.lib $(obj)\selfx.lib + +dirs: + @if not exist $(obj) md $(obj) + +clean: + @if exist *.pdb del /q *.pdb > nul + @if exist $(obj)\* del /q $(obj)\* > nul + +$(obj)\setup.obj: setup.c setup.h + $(cc) setup.c + +$(obj)\selfx.obj: selfx.c selfx.h + $(cc) selfx.c + +$(obj)\setup.lib: $(obj)\setup.obj + @echo building setup.lib ... + @if exist $@ del $@ + $(mlb) $** + +$(obj)\selfx.lib: $(obj)\selfx.obj + @echo building selfx.lib ... + @if exist $@ del $@ + $(mlb) $** diff --git a/setup/source.win/misc/cfgmgr32.dll b/setup/source.win/misc/cfgmgr32.dll new file mode 100644 index 0000000000000000000000000000000000000000..a9b9f9adc947926f9b1687a9306f54ca0b530a12 GIT binary patch literal 23552 zcmeHv3sh8BmiDO!T4Eukf+4;xFz+O{>8a z*y0U|>1Sqj@{h)(+wNp$oaw|SofifJCY^L1o$0n?PhuXOT>mm15^co9c<0;a-dhwU zrvF)M`d{l`BWrzi&e><5z4zJYed-h|ZrR67j4?ByD2#O@q`!Rr`Sl-d$ewWBuP3l4 z#=SbL+fe%IthIIZE%xSMU}Laqv%R{isVN}X@9^7$Vw1hT$zHUo%)U8L<6n@F5TB}v z_7*c%YA`Y12cM?v+D@?vv&I`t@hlG%yGjjTi_ivmdD_V1M%8YzoxuOv@Co{yMFtA+ zheA{?5~|5lxs1IsiLtbW;HB&<{WUYTPZe|}j#24zp!3kEIVy31;NL1B`nU%lWFOU) z+lf&7vom)4f|@F!3hAZO@ZkmGft5hiUp`|!3xfW}Ks94c)R@fxIb711o`AAPDRP?gbtO4g);^{S^k9YU?+O!78CX&}3gx)l{|7AGA9%Zn~ph zuorlj5zn%gwJX;m+~f~7`5PS>3u+o0iH>Uup?%h^#NRk)C=`h zjrDhOBe_^c<+86>u0^Q%nsQlGu2~HF?XC4eL9A-D*NRQm+yT{9jg4FZ$4r6Pt)=7XtP`v%kq+9cXF^AYJ2ct*?&a%~5&%TbupW zg1^RI=dWrW_70|2!FxG)G$d4tudjVuZJmGz8+53(w3M| z=hs7Bz8=Q%UrDd7M-OB5>E+BZcI)!>d_C0di4AqT^l*+QPfy3n)AhyDb-8-}e^swu zUJrHsdieK}cO|*8biEz)P;U=CjI}$qe5}7>^JCMxJU!I?pog*ivFX@yvH8R4S`36< z`glQayDOC)E;Dir>HM+2xe~u#2c17Q)P1UldcK~HEwAg>>9M~4TWP(V9_sq^P?xWV zI-efK%Gb-q(slppbUm~(sVLPF8Zsnye1y44NzSw}W5|=_#RlczbbN|=Zj(6i=g4al z;v0nVzM772Fvw*pqx@^!l{;QKK(h8G%)sXj z_#%WUaky_cb|%ch=h2%e({?bG;-@U8qX+GX$?xHdfsP*0D*ppX=sEpkZeN>?84u=f zLjDh}u*5@AcF>Fh!ga7@n!FX7Ud0Ts6!F#T2c;N zQWQ>^q*JCOKq7d=M2HdNlyOVQj}> zVn?l_D7q8It4=t*1~k<1?E^M)$&f)vfWQfAcQC*=_rtA_1=nqhOK%Z~{7HI%2o#s10nW*$qFv9-pd@_Bf1+Oc~MId#K;T^HR#Ed3X!bV5W zhFYrdGcJdSyO^Q`5)Jr9) zsPs6mJX`guR5C|RPtwzAYTBr$bJXTA8;@zS1^=Ke9%G@-uKzLNLiJ6C>qfcWC5h^ueQyIn=8 zHYgLItQJ$#VwTwc8cHKtgy=EyVNq(4l-9M*+|4YEb+@`T1)gIUJ)>$xSsktBDTEm#0)V_Qev-Cshnq4n&Q(oWlUZ~%!3cc%a zc#OowW9Av$xmYS@)ZfwvO$K2;jBSLmP%=yEmtIT#IP~6iM~6(CUP_hrQO&??db!iE zck-Uq<|T!p7tO9q+n;kNjzMV#Wt-j!xfHRYdk|)H4E7b8cL@`^mMEB-y8lX+y{ag$eOpORQkuO3M3Fr7>z7^>2A!$(FZ| z=e;h}XWn&*`bY3t>g#9BQZg-6=pv56a@X(0@ts*YNS}TQ?RJ22+H#mMwJp~p7)qos zo+97R>-qej&%a@Mqb-+-A9b0ZL_c6&ITP{^Qc>#KCpu1|e~puue8KydbQ4LEUToXJ zn6N?mDoRXeX{rrmkKkD?e}*FvN_Uzt!&B*TTIp#1c^9OkM^782^OEcAqtfwEuQ~Ld z>Fgt>MlObl4|Aiva+fNrpS~Sus_)D+d56wed=+(OOf1jsU&o9-8b#Y}%y@tn?ar*F zT8+_rh|pC$)V1QGcQq{mKDi8{LdTM%;)_R58BN7QUU`wKg)fHj4HmiL0hePI{IwZAEh zYx`oH_)7bmqG@G#6$&oz%U4*qxP(OAymtyX<|ZC_bMWqH5n~`1(xVg+yZ8ntnEM#Z zr=+2zzxX2A+?I#2{s|&`r;ye-(r79Pf5z$m4tm6X)J-w=7Y|WY9VgrJZWG6r6e18V zkifLTUV}I{wBsU!)jJKdNyu1mgBh#oMT1m6aBca(`Sk;cbe3OyBiy>P_aVRR}+YR%A@B${sxLh2m(SyYz>1}429tj1no zBJ$r+^JyE2T+GN*f96e9vgZJ!XzrZ|fGbHZ*Gg4ipsZ(-_Ql|)W_ZAr1dxY7EM2bXfw6*Q!jh}d=z_8f$Ld!ttsIkq-#6R#AyloF*RHibJaSXre!i( zsT79VO`nYEvd-ypzj_>|w=IId_pUOuza)Gk@yIoaM_zKh98BK3=P>dtT=U|@BdZLq zms`T2e&QD2%nuEjgU@QJp5G5f`DN&V4-YK!j&r$n!W@m@rv>5;EcNvPfPcQpIYjnPYJCkK;wa zPCJy)&?Rw_N`ezGh3r8KgfX#yHIm#;WNgnbiiyMA2liug!#6sfM=(7J*Ln`A!INrm zga@e0)b5FxTf>vP%~&?W*6vA^it9Eb=&f+{aG&eV%=OQE*0fsrjq;sOym1FD=b3>)gx?IlJ^lE^LJwVG?3Ih^hy@CU@K&kZcDYPg3#OU z1sUDeHY_Z${Ugw7LwQWPBuqkE)`rlS=k>^6=3R1}d_yT)QdU-0;VUask{^V&PHZ4t zy+W>69ze}#l*q2IFb~;6YD)PqA6A9&RHu?t#?sED7UAIxD@3#Rdz_t7Uwd zQ8Up4Y_y%#mlf&}2kCg)tDn3^999CCP(kD~?3q!kuzlJ!+MEkZ)5$D$Np^ib*Gr&x=e))$E%r#o z8Iah%5Y$~4$cn`Fdc^rc*wwKX$270L62c3~&pk64i{G*3&O(w zN37~EcRfp7B;53c^c&Utzv0e*{s9Ql_5N*kxJG(ea=-WloTJ)`GUuf~stQy&Q7YAu=0Dfb;8c&Tf)2m)jvgI~3-wI*%Jr&_aD1r8 zj(sdi;Uz*tNjoNRjwKq$1dKUL4A+(A3M1u4EE$$dw+yg793_`?(Mj2w_%G@qFzz|j zRedlUx^!wwqK_Z68Z0pNFige3NeOu}Q70xO`sCBR=g_3`DxG|3l0XY4(m2ba4Y-p0 z1l8{V74TxJvuG25rI#PiNy9fWyQ)fk@^z|rA#Mu403sE;BP!k{6%b+`mQE&7KXME@ zvmSxR#l>~zBvRXr41S@rscvX8qBG`$P@(+pAaS|+gtc|J{2)TzTL=#x0+n(fM|gk| zv_hHUPw(k--q>% z(R3@0#c&q`;aPjJ85_G~nQ#L(DRb3)F)aO&a#x2wFbN4N19ER(E}o_7_|^@Tz32I6 zUzkKi6WjMfs7ew4q84pL#&YqCTQ^YOsqF2%2D|BH!oU1lxpZl#G{*FLXh3niAWgvu z>F3N~*d@G!jq&{UL1E_k7qG-L!Ac=h#JR_sZM&5^gzYLkg`w zH=3m(Nxo%dc6`HB`HeHYGxPD_=#i4CWT({_I%*H~VC&-De#Y_Ub3N2rFGw#(AAh^~ z$Y-Pu{pJK!+~x zs5q^?8&M_#@QBTaO>k{wX1)hlK=yqx& z_gs}1H<+B$qIM3+`c0|8dMG4hV`@nn5Q z)YdFK!zcevE#lMeVa?KzPrgR29o-o7F2f6dN!wBs4+(Cce79;DF+YnAg$hs`y~zEG zez?OdeHl)cN~Swb!WmYtyit|dxna7dnq=P!;bc>Vliwhka!6&Cd z19mgypZ18FX>vwHjhx1#WWT17E=_iwNdY%sOFG3fP7yOTPOTf!o3S~Sj!GAF@5GU3 zI*W%S+a@J-uqfAT7ZMtb4Q#dS;_7gpF(g?`uMHNM+Y;M%LyNYxm5QyM#RF3Dz`SCs ztJszpqHk8Z9+EL8BgB?(AgUA(>}BqFaja5&rq7g6*wsZmdrXB=@4TZP1})ov+top| z1~%`6n%h-;&Re#cRNIuyTy;Z+_FrHU&pFqh+tC@m30pYu;9Cm?$AhgG*uJQp6P zHeP4(MJ&n<{D$IYe8!2_$Y#BO4;DGi`2rka zZOfS|nz1gi)9Y={2N3

L$=`2EJ2Qc^SSL3b$VP=K=eKmn@ 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 BHgo_0 literal 0 HcmV?d00001 diff --git a/setup/source.win/misc/dll_kolja/setupapi.dll b/setup/source.win/misc/dll_kolja/setupapi.dll new file mode 100644 index 0000000000000000000000000000000000000000..f327cd5ff8b63f35a4dc1ace124fb7239c96d286 GIT binary patch literal 338192 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 H#jpPZ9Q>)f literal 0 HcmV?d00001 diff --git a/setup/source.win/misc/dll_w2000/SETUPAPI.DLL b/setup/source.win/misc/dll_w2000/SETUPAPI.DLL new file mode 100644 index 0000000000000000000000000000000000000000..fcf2e9ad8a11dbf2da73375498873b23837856a4 GIT binary patch literal 566032 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

nI`VQEUFRt)n)dOjfAGbSkinQmNlj`O29< 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

i0peludNoM9wp%ok*Sn%X=QulE$XHo?Nm0BRR2 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ɰ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 z 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 H#jpPZ9Q>)f literal 0 HcmV?d00001 diff --git a/setup/source.win/selfx.c b/setup/source.win/selfx.c new file mode 100644 index 0000000..a2efbf9 --- /dev/null +++ b/setup/source.win/selfx.c @@ -0,0 +1,769 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fdi.h" + +#include "selfx.h" + +/* ------------------------------------------------------------------------ + * Defines + * ------------------------------------------------------------------------ */ +#define IS_WINNT (BOOL)(GetVersion() < 0x80000000) +#define IS_WIN2K (BOOL)((IS_WINNT) && (LOBYTE(LOWORD(GetVersion()))>4)) +#define IS_WIN32S (BOOL)(!(IS_WINNT) && (LOBYTE(LOWORD(GetVersion()))<4)) +#define IS_WIN95 (BOOL)(!(IS_WINNT) && !(IS_WIN32S)) + +/* ------------------------------------------------------------------------ + * Globale Variablen + * ------------------------------------------------------------------------ */ + +static HWND hMainWnd; +static HANDLE hAppInst; +static LANGID AppLang = 0; +static int Stop = 0; +static int ThreadID = 0; +static int Options = 0; +static char TargetDir[MAX_PATH]; +static char TempCabinet[MAX_PATH]; +static char CommandLine[MAX_PATH]; + +#define OPT_EXEC_CMDLINE 0x0001 +#define OPT_CLEANUP_FILES 0x0002 +#define OPT_AUTO_TEMPDIR 0x0004 + + + +/* ------------------------------------------------------------------------ + * Prototypen + * ------------------------------------------------------------------------ */ + +FNALLOC(mem_alloc); +FNFREE(mem_free); +FNOPEN(file_open); +FNREAD(file_read); +FNWRITE(file_write); +FNCLOSE(file_close); +FNSEEK(file_seek); +FNFDINOTIFY(notification_function); + +int QueryTargetDir(HWND hwndOwner, char* Path); +int ExecuteCommand(char* Command, char* WorkDir, int Wait); +LANGID GetDefaultLanguage(char* ResourceID); +int ErrorMessageBox(HWND hwndOwner, int ErrCode); + +FNALLOC(mem_alloc) +{ + return malloc(cb); +} + +FNFREE(mem_free) +{ + free(pv); +} + +FNOPEN(file_open) +{ + return _open(pszFile, oflag, pmode); +} + +FNREAD(file_read) +{ + return _read(hf, pv, cb); +} + +FNWRITE(file_write) +{ + return _write(hf, pv, cb); +} + +FNCLOSE(file_close) +{ + return _close(hf); +} + +FNSEEK(file_seek) +{ + return _lseek(hf, dist, seektype); +} + +FNFDINOTIFY(notification_function) +{ + switch (fdint) + { + case fdintCABINET_INFO: // general information about the cabinet + return 0; + + case fdintPARTIAL_FILE: // first file in cabinet is continuation + return 0; + + case fdintCOPY_FILE: // file to be copied + { + char* c, Dest[256]; + + if(Stop) return -1; + SendMessage(hMainWnd, WM_USER+1, 2, (LPARAM)pfdin->psz1); + + sprintf(Dest, "%s\\%s", TargetDir, pfdin->psz1); + c = Dest + strlen(TargetDir); + while(c = strchr(c+1,'\\')) + *c = 0, CreateDirectory(Dest, 0), *c = '\\'; + return file_open(Dest, + _O_BINARY|_O_CREAT|_O_WRONLY|_O_SEQUENTIAL,_S_IREAD|_S_IWRITE); + } + + case fdintCLOSE_FILE_INFO: // close the file, set relevant info + { + HANDLE hFile; + char Dest[256]; + FILETIME fTime, fLocTime; + + sprintf(Dest, "%s\\%s", TargetDir, pfdin->psz1); + file_close(pfdin->hf); + + hFile = CreateFile(Dest, GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + + if(hFile != INVALID_HANDLE_VALUE) + { + if(DosDateTimeToFileTime(pfdin->date,pfdin->time,&fTime) + && LocalFileTimeToFileTime(&fTime,&fLocTime)) + SetFileTime(hFile, &fLocTime, 0, &fLocTime); + CloseHandle(hFile); + } + + SetFileAttributes(Dest, + pfdin->attribs & (_A_RDONLY|_A_HIDDEN|_A_SYSTEM|_A_ARCH)); + + return 1; + } + + case fdintNEXT_CABINET: // file continued to next cabinet + return 0; + } + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func ExtractResources + * Funktion: ExtractResources + * Aufgabe.: extrahiert CAB Datei a.d. Resourcen in die Datei TempCabinet + * Resultat: True or False + * Hinweis.: + * ------------------------------------------------------------------------ */ +int ExtractResources(void) +{ + FILE *f; + UINT len = 0; + HRSRC hRes = 0; + char *data = 0; + + hRes = FindResource(GetModuleHandle(0), "CABINET", RT_RCDATA); + if(!hRes) return 0; + + len = SizeofResource(GetModuleHandle(0), hRes); + data = (char *)LockResource(LoadResource(GetModuleHandle(0), hRes)); + if(!data || !len) return 0; + + f = fopen(TempCabinet,"wb"); + if(!f) return 0; + + if(len != fwrite(data,1,len,f)) + { + fclose(f); + return 0; + } + + fclose(f); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func Thread + * Funktion: Thread + * Aufgabe.: fuehrt das komplette Entpacken der CAB aus + * Resultat: + * Hinweis.: + * ------------------------------------------------------------------------ */ +DWORD WINAPI Thread(void* pr) +{ + + HFDI hfdi; + ERF erf; + FDICABINETINFO fdici; + int hf; + char *p=0; + char cabinet_name[256]; + char cabinet_path[256]; + char cabinet_fullpath[256]; + HWND hwnd = (HWND)pr; + + AppLang = GetDefaultLanguage(MAKEINTRESOURCE(IDD_MAIN)); + if(IS_WINNT) SetThreadLocale(MAKELCID(AppLang,SORT_DEFAULT)); + + strcpy(cabinet_fullpath, TempCabinet); + + if(!ExtractResources()) + { + PostMessage(hwnd, WM_USER+1, 0, (LPARAM)1); + return 0; + } + + hfdi = FDICreate(mem_alloc, mem_free, file_open, + file_read, file_write, file_close, + file_seek, cpu80386, &erf); + + if(hfdi == NULL) + { + PostMessage(hwnd, WM_USER+1, 0, (LPARAM)1); + return 0; + } + + hf = file_open(cabinet_fullpath, _O_BINARY | _O_RDONLY | _O_SEQUENTIAL, 0); + if(hf == -1) + { + FDIDestroy(hfdi); + PostMessage(hwnd, WM_USER+1, 0, FDIERROR_CABINET_NOT_FOUND); + return 0; + } + + if(!FDIIsCabinet(hfdi,hf,&fdici)) + { + _close(hf); + FDIDestroy(hfdi); + PostMessage(hwnd, WM_USER+1, 0, FDIERROR_NOT_A_CABINET); + return 0; + } + else + { + _close(hf); + PostMessage(hwnd, WM_USER+1, 1, (LPARAM)fdici.cFiles); + } + + if(!(p = strrchr(cabinet_fullpath,'\\'))) + { + strcpy(cabinet_name, cabinet_fullpath); + strcpy(cabinet_path, ""); + } + else + { + strcpy(cabinet_name, p+1); + strncpy(cabinet_path, cabinet_fullpath, (int) (p-cabinet_fullpath)+1); + cabinet_path[ (int) (p-cabinet_fullpath)+1 ] = 0; + } + + if(!FDICopy(hfdi,cabinet_name,cabinet_path,0,notification_function,0,0)) + { + FDIDestroy(hfdi); + PostMessage(hwnd, WM_USER+1, 0, (LPARAM)1); + return 0; + } + + if(FDIDestroy(hfdi) != TRUE) + { + PostMessage(hwnd, WM_USER+1, 0, (LPARAM)1); + return 0; + } + + PostMessage(hwnd, WM_USER+1, 0, 0); + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func QueryPathProc + * Funktion: QueryPathProc + * Aufgabe.: Fensterprozedur des Verzeichnisauswahl-Dialogs + * Resultat: + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK QueryPathProc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam /* zweiter message-parameter */ + ) +{ + switch(message) + { + case WM_INITDIALOG: + { + char Temp[MAX_PATH]; + + if(GetTempPath(sizeof(Temp),Temp)) SetDlgItemText(hwnd, IDC_PATH, Temp); + + SetWindowPos(hwnd, 0, GetSystemMetrics(SM_CXICON), + GetSystemMetrics(SM_CYICON), 0, 0, SWP_NOSIZE|SWP_NOZORDER); + SendMessage(hwnd, DM_REPOSITION, 0, 0); + + return 1; + } + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case IDOK: + GetDlgItemText(hwnd, IDC_PATH, TargetDir, sizeof(TargetDir)); + EndDialog(hwnd, 1); + return 1; + case IDCANCEL: + EndDialog(hwnd, 0); + return 1; + case IDC_BROWSE: + { + char Path[256]; + if(QueryTargetDir(hwnd,Path)) SetDlgItemText(hwnd, IDC_PATH, Path); + return 0; + } + } + return 1; + } + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func MainProc + * Funktion: MainProc + * Aufgabe.: Fensterprozedur des Dialogs + * Resultat: + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK MainProc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam /* zweiter message-parameter */ + ) +{ + switch(message) + { + case WM_INITDIALOG: + + hMainWnd = hwnd; + + SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETSTEP, (WPARAM)1, 0); + + Animate_Open(GetDlgItem(hwnd,IDC_AVI), MAKEINTRESOURCE(IDR_AVI)); + Animate_Play(GetDlgItem(hwnd,IDC_AVI), 0, -1, -1); + + SetWindowPos(hwnd, 0, GetSystemMetrics(SM_CXICON), + GetSystemMetrics(SM_CYICON), 0, 0, SWP_NOSIZE|SWP_NOZORDER); + SendMessage(hwnd, DM_REPOSITION, 0, 0); + + CreateThread(0, 0, Thread, (void*)hwnd, 0, &ThreadID); + + return 1; + + case WM_USER+1: + { + char buff[256]; + if(!wParam && lParam && !Stop) + { + LoadString(hAppInst, STR_ERROR, buff, sizeof(buff)); + MessageBox(hwnd, buff, 0, MB_OK|MB_ICONERROR); + } + switch(wParam) + { + case 1: + SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0, lParam)); + break; + case 2: + { + char Text[256], Mask[256]; + LoadString(hAppInst, STR_PROGRESS_ACTFILE, Mask, sizeof(Mask)); + sprintf(Text, Mask, (char*)lParam); + SetDlgItemText(hwnd, IDC_TEXT, Text); + SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_STEPIT, 0, 0); + break; + } + default: + EndDialog(hwnd, !lParam); + break; + } + return 1; + } + + case WM_COMMAND: + + if(LOWORD(wParam) != IDCANCEL) break; + + case WM_CLOSE: + + Stop = 1; + return 1; + } + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func EmptyDir + * Funktion: EmptyDir + * Aufgabe.: Löscht alle Datein und Unterverzeichnisse + * Resultat: + * Hinweis.: + * ------------------------------------------------------------------------ */ +void EmptyDir(char* Path) +{ + char cProgress[256]; + SHFILEOPSTRUCT sFileOp; + + LoadString(hAppInst,STR_DELETING_FILES,cProgress,sizeof(cProgress)); + + memset(&sFileOp, 0, sizeof(sFileOp)); + sFileOp.hwnd = GetDesktopWindow(); + sFileOp.wFunc = FO_DELETE; + sFileOp.pFrom = Path; + sFileOp.fFlags = FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS; + sFileOp.lpszProgressTitle = cProgress; + + SHFileOperation(&sFileOp); /* und ab ins nirwana ... */ + + return; +} + +/* ------------------------------------------------------------------------ + * $Func WinMain + * Funktion: WinMain + * Aufgabe.: + * Resultat: True or False + * Hinweis.: + * ------------------------------------------------------------------------ */ +int APIENTRY WinMain(HINSTANCE hInstance, /* instance-handle */ + HINSTANCE hPrevInst, /* obsolet unter win32 */ + LPSTR pCmdLine, /* zeiger auf kommandozeile */ + int nCmdShow) /* show-befehl */ +{ + char* c, Buff[256]; + + InitCommonControls(); + hAppInst = hInstance; + AppLang = GetDefaultLanguage(MAKEINTRESOURCE(IDD_MAIN)); + if(IS_WINNT) SetThreadLocale(MAKELCID(AppLang,SORT_DEFAULT)); + + if(LoadString(hAppInst,STR_TARGET_OS,Buff,sizeof(Buff))) + { + if((IS_WIN95 && !stricmp(Buff,"WinNT")) || (IS_WINNT && !stricmp(Buff,"Win95"))) + { + LoadString(hAppInst, STR_WRONG_OS, Buff, sizeof(Buff)); + MessageBox(GetDesktopWindow(), Buff, 0, MB_OK|MB_ICONERROR); + return 0; + } + } + + if(LoadString(hAppInst,STR_COMMANDLINE,CommandLine,sizeof(CommandLine))) + { + Options = OPT_EXEC_CMDLINE | OPT_AUTO_TEMPDIR | OPT_CLEANUP_FILES; + } + + if(LoadString(hAppInst,STR_OPTIONS,Buff,sizeof(Buff))) + { + if(strchr(Buff,'k') || strchr(Buff,'K')) + Options &= ~OPT_CLEANUP_FILES; + if(strchr(Buff,'q') || strchr(Buff,'Q')) + Options &= ~(OPT_AUTO_TEMPDIR|OPT_CLEANUP_FILES); + } + + if(!GetTempPath(sizeof(Buff),Buff)) + return ErrorMessageBox(0,GetLastError()); + + if(Options & OPT_AUTO_TEMPDIR) + { + if(!GetTempFileName(Buff,"tmp",0,TempCabinet)) + return ErrorMessageBox(0,GetLastError()); + if(!GetTempFileName(Buff,"tmp",0,TargetDir)) + return ErrorMessageBox(0,GetLastError()); + DeleteFile(TargetDir); + if(!CreateDirectory(TargetDir,0)) + return ErrorMessageBox(0,GetLastError()); + } + else + { + if(DialogBox(hAppInst,MAKEINTRESOURCE(IDD_TARGET), + GetDesktopWindow(),(DLGPROC)QueryPathProc) != IDOK) return 0; + c = TargetDir; + while(c = strchr(c+1,'\\')) + *c = 0, CreateDirectory(TargetDir,0), *c = '\\'; + CreateDirectory(TargetDir,0); + GetTempFileName(Buff, "tmp", 0, TempCabinet); + } + + if(DialogBox(hAppInst,MAKEINTRESOURCE(IDD_MAIN),GetDesktopWindow(), + (DLGPROC)MainProc) && Options & OPT_EXEC_CMDLINE) + { + GetCurrentDirectory(sizeof(Buff), Buff); + SetCurrentDirectory(TargetDir); + ExecuteCommand(CommandLine, TargetDir, Options & OPT_CLEANUP_FILES); + SetCurrentDirectory(Buff); + } + + DeleteFile(TempCabinet); + if(Options & OPT_CLEANUP_FILES) + { + EmptyDir(TargetDir); + if(Options & OPT_AUTO_TEMPDIR) RemoveDirectory(TargetDir); + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func QueryTargetDir + * Funktion: QueryTargetDir + * Aufgabe.: fragt den benutzer nach zielverzeichnis + * Resultat: 1 wenn OK, sonst 0 + * Hinweis.: + * ------------------------------------------------------------------------ */ +int QueryTargetDir(HWND hwndOwner, /* owner-window */ + char* Path) /* puffer fuer pfad */ +{ + int rc = 0; + LPMALLOC pIMalloc; + BROWSEINFO BrowseInfo; + ITEMIDLIST* pItemIdList; + char buff[MAX_PATH], buff2[MAX_PATH]; + + if(SHGetMalloc(&pIMalloc) != NOERROR) return 0; + + LoadString(hAppInst, STR_BROWSETITLE, buff, sizeof(buff)); + + BrowseInfo.hwndOwner = hwndOwner; + BrowseInfo.pidlRoot = 0; + BrowseInfo.pszDisplayName = buff2; + BrowseInfo.lpszTitle = buff; + BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS; + BrowseInfo.lpfn = 0; + BrowseInfo.lParam = 0; + BrowseInfo.iImage = 0; + + pItemIdList = (ITEMIDLIST*)SHBrowseForFolder(&BrowseInfo); + if(pItemIdList) + { + rc = SHGetPathFromIDList(pItemIdList,Path); + pIMalloc->lpVtbl->Free(pIMalloc, pItemIdList); + } + pIMalloc->lpVtbl->Release(pIMalloc); + + return !!rc; +} + + +/* ------------------------------------------------------------------------ + * $Func ExecuteCommand + * Funktion: ExecuteCommand + * Aufgabe.: fuehrt einen externen befehl durch + * Resultat: haengt von der notifcation ab + * Hinweis.: + * ------------------------------------------------------------------------ */ +int ExecuteCommand(char* Command, /* befehl */ + char* WorkDir, + int Wait) +{ + char* pFile, *pParms = 0; + SHELLEXECUTEINFO execInfo; + + pFile = Command; + if(strchr(pFile,' ')) pParms = strchr(pFile,' '), *pParms++ = 0; + + execInfo.cbSize = sizeof(execInfo); + execInfo.fMask = SEE_MASK_NOCLOSEPROCESS; + execInfo.hwnd = GetDesktopWindow(); + execInfo.lpVerb = 0; + execInfo.lpFile = pFile; + execInfo.lpParameters = pParms; + execInfo.lpDirectory = WorkDir; + execInfo.nShow = SW_SHOWNORMAL; + + if(!ShellExecuteEx(&execInfo)) return 0; + if(!execInfo.hProcess) return 0; + + if(Wait) WaitForSingleObject(execInfo.hProcess, INFINITE); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func EnumResLangProc + * Funktion: EnumResLangProc + * Aufgabe.: callback-funktion fuer GetResourceLanguages + * Resultat: immer TRUE + * Hinweis.: + * ------------------------------------------------------------------------ */ +BOOL EnumResLangProc(HANDLE hModule, /* resource-module handle */ + LPCTSTR lpszType, /* zeiger auf resource-typ */ + LPCTSTR lpszName, /* zeiger auf resource-name */ + WORD wIDLanguage, /* microsoft language-ID */ + LONG lParam /* von EnumResourceLanguages */ + ) +{ + + (*((LANGID**)lParam))[0] = wIDLanguage; + (*((LANGID**)lParam))[1] = 0; + (*((LANGID**)lParam))++; + return 1; + +} + +/* ------------------------------------------------------------------------ + * $Func GetResourceLanguages + * Funktion: GetResourceLanguages + * Aufgabe.: liefert alle sprachen, die in den resourcen verfuegbar sind + * Resultat: vektor von LANGID's, das ende wird durch 0 gekennzeichnet + * Hinweis.: + * ------------------------------------------------------------------------ */ +LANGID* GetResourceLanguages(char* res_id /* resource-name oder -id */ + ) +{ + + static LANGID lang[256]; + LANGID* pLang = lang; + + lang[0] = 0; + EnumResourceLanguages(0, RT_DIALOG, res_id, + (ENUMRESLANGPROC)EnumResLangProc, (LONG)&pLang); + return lang; + +} + +/* ------------------------------------------------------------------------ + * $Func GetSystemLanguage + * Funktion: GetSystemLanguage + * Aufgabe.: liefert die sprache der installierten windows-version + * Resultat: LANGID: microsoft-language-identifier + * Hinweis.: die sprache hat nichts mit dem land zu tun, das als 'current + * locale' im control-panel eingestellt ist! es ist lediglich die + * sprache der windows-installation. + * ------------------------------------------------------------------------ */ +LANGID GetSystemLanguage() +{ + HKEY hKey; + LANGID iLangID; + char cLocale[16]; + HINSTANCE hKrnlDll; + int iResult, iType, iSize; + LANGID (APIENTRY *GetUserDefaultUILanguage)(void); + + iLangID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); + + if(IS_WIN2K) + { + hKrnlDll = LoadLibrary("kernel32.dll"); + if(!hKrnlDll) return iLangID; + + GetUserDefaultUILanguage = (LANGID(APIENTRY*)(void)) + GetProcAddress(hKrnlDll, "GetUserDefaultUILanguage"); + if(!GetUserDefaultUILanguage) + { + FreeLibrary(hKrnlDll); + return iLangID; + } + + iLangID = GetUserDefaultUILanguage(); + } + else if(IS_WINNT) + { + iResult = RegOpenKeyEx(HKEY_USERS, + ".DEFAULT\\Control Panel\\International", 0, KEY_READ, &hKey); + + if(iResult == ERROR_SUCCESS) + { + iSize = sizeof(cLocale); + iResult = RegQueryValueEx(hKey, "Locale", 0, &iType, cLocale, &iSize); + + if(iResult == ERROR_SUCCESS && iType == REG_SZ) + iLangID = LANGIDFROMLCID(strtoul(cLocale,0,16)); + + RegCloseKey(hKey); + } + } + else + { + iResult = RegOpenKeyEx(HKEY_CURRENT_USER, + "Control Panel\\Desktop\\ResourceLocale", 0, KEY_READ, &hKey); + + if(iResult == ERROR_SUCCESS) + { + iSize = sizeof(cLocale); + iResult = RegQueryValueEx(hKey, 0, 0, &iType, cLocale, &iSize); + + if(iResult == ERROR_SUCCESS && iType == REG_SZ) + iLangID = LANGIDFROMLCID(strtoul(cLocale,0,16)); + + RegCloseKey(hKey); + } + } + + return iLangID; +} + +/* ------------------------------------------------------------------------ + * $Func GetDefaultLanguage + * Funktion: GetDefaultLanguage + * Aufgabe.: liefert einen default-wert fuer die sprache des programms + * Resultat: LANGID: microsoft language-identifier + * Hinweis.: der default-wert wird abhaengig von der sprache der + * installierten windows-version und den verfuegbaren sprachen + * in den resourcen gewaehlt + * ------------------------------------------------------------------------ */ +LANGID GetDefaultLanguage(char* res_id) /* resource-name oder -id */ +{ + + int i; + LANGID DefLang; + LANGID* pResLang; + + DefLang = GetSystemLanguage(); + pResLang = GetResourceLanguages(res_id); + + for(i = 0; pResLang[i]; i++) + if(pResLang[i] == DefLang) + return pResLang[i]; + + for(i = 0; pResLang[i]; i++) + if(PRIMARYLANGID(pResLang[i]) == PRIMARYLANGID(DefLang)) + return pResLang[i]; + + return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); + +} + +/* ------------------------------------------------------------------------ + * $Func ErrorMessageBox + * Funktion: ErrorMessageBox + * Aufgabe.: zeigt eine message-box mit beschreibung eines api-errors an + * Resultat: 0 + * Hinweis.: + * ------------------------------------------------------------------------ */ +int ErrorMessageBox(HWND hwndOwner, /* owner-window */ + int ErrCode) /* von GetLastError() */ +{ + char* pMsg; + + if(!hwndOwner) hwndOwner = GetDesktopWindow(); + + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| + FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, + 0, ErrCode, AppLang, (char*)&pMsg, 0, 0); + MessageBox(hwndOwner, pMsg, 0, MB_OK|MB_ICONERROR); + LocalFree(pMsg); + + return 0; +} diff --git a/setup/source.win/selfx.h b/setup/source.win/selfx.h new file mode 100644 index 0000000..e657132 --- /dev/null +++ b/setup/source.win/selfx.h @@ -0,0 +1,23 @@ + +#define ID_MAINICO 1 + +#define IDD_MAIN 2000 +#define IDD_TARGET 2001 + +#define IDC_PATH 2100 +#define IDC_BROWSE 2101 + +#define IDC_TEXT 2200 +#define IDC_PROGRESS 2201 +#define IDC_AVI 2202 + +#define IDR_AVI 3000 + +#define STR_COMMANDLINE 4000 +#define STR_OPTIONS 4001 +#define STR_TARGET_OS 4002 +#define STR_BROWSETITLE 4003 +#define STR_PROGRESS_ACTFILE 4004 +#define STR_ERROR 4005 +#define STR_DELETING_FILES 4006 +#define STR_WRONG_OS 4007 diff --git a/setup/source.win/selfx.rc b/setup/source.win/selfx.rc new file mode 100644 index 0000000..a0d9268 --- /dev/null +++ b/setup/source.win/selfx.rc @@ -0,0 +1,515 @@ + +#include +#include "selfx.h" + +/* ------------------------------------------------------------------------ + * diese datei wird vom rc-file des benuters included. dort werden die + * makros SFX_COMMANDLINE, SFX_OPTIONS und SFX_CABINETNAME defniert. + * + * SFX_COMMANDLINE enthaelt die kommandozeile, die nach dem extrahieren der + * dateien ausgefuehrt werden soll. das zielverzeichnis wird als arbeits- + * verzeichnis verwendet. + * + * wenn das makro fehlt, werden die dateien in ein verzeichnes extrahiert, + * das der user auswaehlen muss. + * + * wenn dieses makro existiert, werden die dateien ins temp-verzeichnis + * ausgepackt, die befehlszeile ausgefuehrt und die dateien anschliessend + * wieder geloescht. + * + * SFX_OPTIONS ist eine zeichenkette die parameter enthaelt, die das + * extrahierverhalten kontrollieren. jeder parameter wird durch das + * vorhandensein des entsprechenden zeichens eingeschaltet (wie bei fopen). + * + * q : query target, der user wird nach dem zielverzeichnis gefragt. + * dieses flag ist implizit gesetzt, wenn SFX_COMMANDLINE fehlt. + * k : keep, die dateien werden nach dem extrahieren und dem ausfuehren + * der kommandozeile nicht geloescht. dieses flag ist implizit + * gesetzt, wenn SFX_COMMANDLINE fehlt oder q gesetzt ist. + * + * SFX_CABINETNAME ist der name der cabinet-datei, die die zu extrahierenden + * dateien enthaelt. + * + * SFX_OS legt fest, dass das sfx nur fuer bestimmte betriebsystem- + * plattformem geeignet ist. + * + * die makros SFX_COMMANDLINE und SFX_OPTIONS koennen auch das suffix _GER + * oder _ENG enthalten, um verschiedene werte fuer deutsch und englisch zu + * definieren. + * ------------------------------------------------------------------------ */ + +ID_MAINICO ICON RES_MAIN_ICON +IDR_AVI AVI RES_COPY_AVI +CABINET RCDATA SFX_CABINETNAME + +/* ------------------------------------------------------------------------ + * jetzt kommen alle englischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_ENG + STR_OPTIONS SFX_OPTIONS_ENG +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_ENG + STR_COMMANDLINE SFX_COMMANDLINE_ENG +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Please select target directory:" + STR_PROGRESS_ACTFILE "Extracting: %s" + STR_ERROR "Extracting files failed!" + STR_DELETING_FILES "Deleting temporary files ..." + STR_WRONG_OS "Wrong operating system or operating system version for this application" +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Extracting Files ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Cancel",IDCANCEL,202,62,40,14 + LTEXT "Initializing ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,190,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Self-Extracting Archive" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Please enter the target directory where the files should be extracted. Or, search for the apropriate folder be clicking Browse.",-1,7,7,190,24 + LTEXT "&Target directory:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Browse...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Extract",IDOK,207,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle deutschen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_GER + STR_OPTIONS SFX_OPTIONS_GER +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_GER + STR_COMMANDLINE SFX_COMMANDLINE_GER +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Bitte wählen Sie das Zielverzeichnis aus:" + STR_PROGRESS_ACTFILE "Dekomprimiere: %s" + STR_ERROR "Das Dekomprieren der Dateien ist fehlgeschlagen!" + STR_DELETING_FILES "Lösche Temporärdateien ..." + STR_WRONG_OS "Falsches Betriebssystem oder Betriebssystem-Version für diese Anwendung" +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dekomprimierung ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Abbrechen",IDCANCEL,192,62,50,14 + LTEXT "Initialisierung ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,176,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Selbstentpackendes Archiv" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Bitte geben Sie das Verzeichnis ein, in welches die Dateien entpackt werden sollen. Oder wählen Sie ein Verzeichnis aus, indem Sie auf Suchen klicken.",-1,7,7,190,24 + LTEXT "Ziel&verzeichnis:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Suchen...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Entpacken",IDOK,207,7,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle franzoesichen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_FRE + STR_OPTIONS SFX_OPTIONS_FRE +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_FRE + STR_COMMANDLINE SFX_COMMANDLINE_FRE +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Sélectionnez le répertoire cible :" + STR_PROGRESS_ACTFILE "Décomprimer : %s" + STR_ERROR "Erreur de décompactage des fichiers !" + STR_DELETING_FILES "Suppression des fichiers temporaires ..." + STR_WRONG_OS "OS, ou sa version d'OS incompatible avec l'application" +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Décompression ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Annuler",IDCANCEL,192,62,50,14 + LTEXT "Initialisation ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,176,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Archive autoextractante" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Entrez le répertoire dans lequel les fichiers doivent ętre extraits. Ou sélectionnez un répertoire différent en cliquant sur Parcourir.",-1,7,7,190,24 + LTEXT "Répertoire &cible :",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Parcourir...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Extraire",IDOK,207,7,50,14 + PUSHBUTTON "Annuler",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle italienischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_ITA + STR_OPTIONS SFX_OPTIONS_ITA +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_ITA + STR_COMMANDLINE SFX_COMMANDLINE_ITA +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Selezionate una directory di destinazione:" + STR_PROGRESS_ACTFILE "Estrazione: %s" + STR_ERROR "Estrazione dei file fallita!" + STR_DELETING_FILES "Cancellazione dei file temporanei ..." + STR_WRONG_OS "SO o versione OS per applicazione errata." +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Estrazione dei file ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Annulla",IDCANCEL,202,62,40,14 + LTEXT "Inizializzazione ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,190,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Archivio auto scompattante" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Inserite la directory di destinazione all'interno della quale i file devono essere estratti. Se preferite scegliete la directory premendo Sfoglia.",-1,7,7,190,24 + LTEXT "&Directory di destinazione:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Sfoglia...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Estrai",IDOK,207,7,50,14 + PUSHBUTTON "Annulla",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle spanischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_SPA + STR_OPTIONS SFX_OPTIONS_SPA +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_SPA + STR_COMMANDLINE SFX_COMMANDLINE_SPA +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Por favor, elija el directorio de destino:" + STR_PROGRESS_ACTFILE "Descompresión: %s" + STR_ERROR "ˇLa descompresión de los archivos no ha sido posible!" + STR_DELETING_FILES "Borrar los archivos temporales ..." + STR_WRONG_OS "SO incorrecto o versión incorrecta para la aplicación." +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Descompresión ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Cancelar",IDCANCEL,192,62,50,14 + LTEXT "Inicio ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,176,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Archivo de autodescompresión" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Por favor, introduzca el directorio en el que desea descomprimir los archivos o seleccione un directorio haciendo clic en Buscar.",-1,7,7,190,24 + LTEXT "Directorio &de destino:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Buscar ...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Descomprimir",IDOK,207,7,50,14 + PUSHBUTTON "Cancelar",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle niederländischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_DUTCH, SUBLANG_DUTCH + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_DUT + STR_OPTIONS SFX_OPTIONS_DUT +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_DUT + STR_COMMANDLINE SFX_COMMANDLINE_DUT +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Selecteer a.u.b. de doeldirectory:" + STR_PROGRESS_ACTFILE "Bezig met decomprimeren: %s" + STR_ERROR "Het decomprimeren van de bestanden is mislukt!" + STR_DELETING_FILES "Bezig met wissen van tijdelijke bestanden ..." + STR_WRONG_OS "Onjuiste (versie van) besturingssysteem voor toepassing." +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Decomprimering ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Afbreken",IDCANCEL,192,62,50,14 + LTEXT "Initialisering ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,176,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Zelfuitpakkend archief" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Voer a.u.b. de directory in, waarin de bestanden uitgepakt moeten worden. Of selecteer een directory door op Zoeken te klikken.",-1,7,7,190,24 + LTEXT "Doel&directory:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Zoeken...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Uitpakken",IDOK,207,7,50,14 + PUSHBUTTON "Afbreken",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle dänischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_DANISH, SUBLANG_DEFAULT + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_DAN + STR_OPTIONS SFX_OPTIONS_DAN +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_DAN + STR_COMMANDLINE SFX_COMMANDLINE_DAN +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Vćlg destinationsbibliotek:" + STR_PROGRESS_ACTFILE "Dekomprimerer: %s" + STR_ERROR "Filerne kunne ikke dekomprimeres!" + STR_DELETING_FILES "Slet midlertidige filer ..." + STR_WRONG_OS "Forkert OS eller OS-version til programmet." +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dekomprimering ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Afbryd",IDCANCEL,192,62,50,14 + LTEXT "Initialisering ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,176,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Selvudpakkende fil" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Angiv det bibliotek, filen skal pakkes ud i. Eller vćlg et bibliotek ved at klikke pĺ Sřg.",-1,7,7,190,24 + LTEXT "Destinations&bibliotek:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Sřg...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Udpak filer",IDOK,207,7,50,14 + PUSHBUTTON "Afbryd",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle norwegischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_NORWEGIAN, SUBLANG_DEFAULT + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_NOR + STR_OPTIONS SFX_OPTIONS_NOR +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_NOR + STR_COMMANDLINE SFX_COMMANDLINE_NOR +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Velg mĺlkatalog:" + STR_PROGRESS_ACTFILE "Pakker ut: %s" + STR_ERROR "Utpakking av filer mislyktes!" + STR_DELETING_FILES "Sletting av midlertidige filer ..." + STR_WRONG_OS "Feil OS eller OS versjon for applikasjonen." +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Extracting Files ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Avbryt",IDCANCEL,202,62,40,14 + LTEXT "Initialisering ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,190,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Self-Extracting Archive" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Angi mĺlkatalogen der du vil at filene skal pakkes ut. Eller bla deg frem til katalogen ved hjelp av Browse.",-1,7,7,190,24 + LTEXT "&Mĺlkatalog:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Bla gjennom...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Pakk ut",IDOK,207,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,207,24,50,14 +END + +/* ------------------------------------------------------------------------ + * jetzt kommen alle finnischen resourcen + * ------------------------------------------------------------------------ */ +LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT + +STRINGTABLE FIXED IMPURE +BEGIN +#if defined SFX_OPTIONS_FIN + STR_OPTIONS SFX_OPTIONS_FIN +#elif defined SFX_OPTIONS + STR_OPTIONS SFX_OPTIONS +#endif +#if defined SFX_COMMANDLINE_FIN + STR_COMMANDLINE SFX_COMMANDLINE_FIN +#elif defined SFX_COMMANDLINE + STR_COMMANDLINE SFX_COMMANDLINE +#endif +#if defined SFX_OS + STR_TARGET_OS SFX_OS +#endif + STR_BROWSETITLE "Valitse kohdehakemisto:" + STR_PROGRESS_ACTFILE "Puretaan: %s" + STR_ERROR "Tiedostojen purku epäonnistui!" + STR_DELETING_FILES "Tilapäisiä tiedostoja poistetaan ..." + STR_WRONG_OS "Käyttöjärjestelmän tai sovelluksen versio ei kelpaa." +END + +IDD_MAIN DIALOG FIXED IMPURE 0, 0, 250, 84 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Extracting Files ..." +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Peruuta",IDCANCEL,202,62,40,14 + LTEXT "Alustus ...",IDC_TEXT,7,38,236,8 + CONTROL "Generic1",IDC_PROGRESS,"msctls_progress32",0x0,7,62,190,8 + CONTROL "User1",IDC_AVI,"SysAnimate32",ACS_CENTER|ACS_TRANSPARENT|WS_TABSTOP,7,0,184,36 +END + +IDD_TARGET DIALOG DISCARDABLE 0, 0, 264, 79 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Self-Extracting Archive" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Syötä kohdehakemisto, johon tiedostot puretaan. Voit myös etsiä oikean kansion napsauttamalla Selaa-painiketta.",-1,7,7,190,24 + LTEXT "&Kohdehakemisto:",-1,7,47,70,8 + EDITTEXT IDC_PATH,7,58,190,13,ES_AUTOHSCROLL + PUSHBUTTON "&Selaa...",IDC_BROWSE,207,57,50,14 + DEFPUSHBUTTON "Pura",IDOK,207,7,50,14 + PUSHBUTTON "Peruuta",IDCANCEL,207,24,50,14 +END + + +// Polnisch: +// STR_WRONG_OS "Nieprawidłowy OS lub wersja OS dla tej operacji." + + +// Tschechisch: +// STR_WRONG_OS "Nesprávný operační systém nebo jeho verze pro tuto aplikaci." + + +// Russisch: +// STR_WRONG_OS "Ďđčëîćĺíčţ ňđĺáóĺňń˙ äđóăŕ˙ îďĺđŕöčîííŕ˙ ńčńňĺěŕ čëč âĺđńč˙ ÎŃ." + diff --git a/setup/source.win/setup.c b/setup/source.win/setup.c new file mode 100644 index 0000000..fa5f923 --- /dev/null +++ b/setup/source.win/setup.c @@ -0,0 +1,3623 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "setup.h" + +#define REG_UNINSTALL_PATH \ + "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" + +#define IS_WINNT (BOOL)(GetVersion() < 0x80000000) +#define IS_WIN2K (BOOL)((IS_WINNT) && (LOBYTE(LOWORD(GetVersion()))>4)) +#define IS_WIN32S (BOOL)(!(IS_WINNT) && (LOBYTE(LOWORD(GetVersion()))<4)) +#define IS_WIN95 (BOOL)(!(IS_WINNT) && !(IS_WIN32S)) + +#define WM_USER_STEP WM_USER+10 +#define WM_USER_PROGRESS WM_USER+11 +#define WM_USER_RESULT WM_USER+12 + +#define SLBN_CHECKING 0xFFF0 +#define SLBN_CHECKED 0xFFF1 + +#define WATERMARK_TOTAL_SIZE_X 503 +#define WATERMARK_TOTAL_SIZE_Y 313 +#define WATERMARK_IMAGE_OFFS_X 0 +#define WATERMARK_IMAGE_OFFS_Y 0 + +#define HEADER_TOTAL_SIZE_X 503 +#define HEADER_TOTAL_SIZE_Y 58 +#define HEADER_IMAGE_OFFS_X 443 +#define HEADER_IMAGE_OFFS_Y 5 + +#define PSH_WIZARD_LITE 0x00400000 +#define PSH_NOCONTEXTHELP 0x02000000 + +typedef struct sWizardData +{ + HINF hInf; + char cInfName[MAX_PATH]; + int iInfErrorLine; + HIMAGELIST hImgLst; + HFONT hWelcomeTitleFont; + HFONT hHeaderTitleFont; + HICON hSmInfoIcon; + HICON hSmAlertIcon; + char cWelcomeTitle[256]; + char cWelcomeText[1024]; + char cPage2HdrTitle[256]; + char cPage2HdrSubTitle[256]; + char cPage3HdrTitle[256]; + char cPage3HdrSubTitle[256]; + char cPage4HdrTitle[256]; + char cPage4HdrSubTitle[256]; +} +tWizardData; + +/* ------------------------------------------------------------------------ + * Lokale Funktionstypen + * ------------------------------------------------------------------------ */ + +int PreviousInstance(void); +HWND CreateMainWindow(HINSTANCE hInstance, int nCmdShow); +int SetupWizard(HWND hwndOwner); + +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage1Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage2Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage3Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage4Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage5Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage6Proc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WizPage7Proc(HWND, UINT, WPARAM, LPARAM); + +DWORD WINAPI InstallThread(void* p); +DWORD WINAPI RemoveThread(void* p); + +void InitPlatformSectionNames(HINF hInf); + +int InitProductSelection(HWND hwnd, HINF hInf); +int BuildProductList(HWND hwnd, HINF hInf, char* ProductList); +int BuildInstallSectionList(HINF hInf, char* ProdList, char* SectList); +int BuildRemoveSectionList(HINF hInf, char* ProdList, char* SectList); +int CheckProductsForFlag(HINF hInf, char* ProdList, int Flag); +void GetProductDescription(HINF hInf, int ProdIdx, char* Buff, int szBuff); +int GetProductVersionDiff(HINF hInf, int ProdIdx); + +int GetUninstallProductName(HINF hInf, char* ProdList, + char* Name, int cbName, int* pIconIdx); +int GetLastUserDir(HINF hInf, char* ProdList, char* Path); + +int CreateUninstallEntrys(HINF hInf, char* ProdList); +int RemoveUninstallEntrys(HINF hInf, char* ProdList); + +int InstallMultipleSections(HINF hInf, char* Sections, HWND hwnd); +UINT WINAPI QueueCallback(PVOID, UINT, UINT, UINT); + +int StopServices(HINF hInf, char* Section); +int StartServices(HINF hInf, char* Section); +int InstallServices(HINF hInf, char* Section); +int DoStopService(char* SvcName); +int DoAddService(HINF hInf, char* SvcName, char* SvcSect); +int DoDelService(char* SvcName); +int DoStartService(char* SvcName); +int AddServiceToGroupOrder(HINF hInf, char* SvcSection); + +int UpdateShortcuts(HINF hInf, char* Section); +int CreateShortcut(char* Where, char* Title, + char* Exe, char* Args, char* Ico, int IcoIdx, int Flags); +int DeleteShortcut(char* Where, char* Title); + +int DoExecStatements(HINF hInf, char* Section, int Step, HWND hwndOwner); +int ExecuteCommand(char* Cmd, char* Arg, char* WorkDir, int Flags, HWND hwndOwner); + +int GetDefaultTargetPath(HINF hInf, char* Path, char* RelPath); +int QueryTargetPath(HWND hwnd, char* Path, char* RelPath); +int QueryApplPath(char* Path); +int QueryStartMenuProgramFolder(char* Path, char* Where); +int QuerySetupExePath(HINF hInf, char* Section, char* Path); + +int GetFileCount(char* Path); +int DelayFileDelete(char* File); +int DelayDirDelete(char* Dir); + +int CenterWindow(HWND hwndChild, HWND hwndParent); +LANGID GetDefaultLanguage(char* ResourceID); +char* GetMultiString(const char* c, int index); +int InsertMultiString(char* c, char* s, int index); +int RemoveMultiString(char* c, int index); +int CountMultiStrings(const char* c); +int FindMultiString(const char* c, const char* s); +int GetMultiStringLength(const char* c); + +int GetComCtlVersion(DWORD* pMajor, DWORD* pMinor); +int ErrorMessageBox(HWND hwndOwner, char* pText, int iErrCode); + +HBITMAP MakeWizardBmp(HWND hwnd, HBITMAP hBmpOrg, + int iSizeX, int iSizeY, int iOffsX, int iOffsY); + +int InitWizardData(HINSTANCE hInstance, tWizardData* pData); +int FreeWizardData(tWizardData* pData); + +DLGTEMPLATE* LoadDlgTemplate(HINSTANCE hInstance, char* pszTemplate); +void FreeDlgTemplate(DLGTEMPLATE* pDlgTemplate); + +/* ------------------------------------------------------------------------ + * Lokale Variablen + * ------------------------------------------------------------------------ */ + +static int Remove = 0; +static int Reboot = 0; +static int DisableUI = 0; +static int CatchReboot = 0; +static LANGID AppLang = 0; + +static char* InstallSect = 0; +static char* RemoveSect = 0; +static char* ProductSect = 0; + +static char ProductList[1024] = ""; +static char SectionList[1024] = ""; +static char UserTargetDir[MAX_PATH] = ""; + +static int iWizStyle = 0; +static WNDPROC oldSelectLBproc; + +/* ------------------------------------------------------------------------ + * $Func WinMain + * Funktion: WinMain + * Aufgabe.: Main-Entrypoint, erstellt hauptfenster und bearbeitet msg-loop + * Resultat: Exit-Code des programms + * Hinweis.: + * ------------------------------------------------------------------------ */ +int APIENTRY WinMain(HINSTANCE hInstance, /* instance-handle */ + HINSTANCE hPrevInst, /* obsolet unter win32 */ + LPSTR pCmdLine, /* zeiger auf kommandozeile */ + int nCmdShow /* show-befehl */ + ) +{ + MSG msg; + char* Arg; + HWND hwndMain; + DEVMODE sDispMode; + char Path[MAX_PATH]; + DWORD vMajor, vMinor; + + if(PreviousInstance()) return 0; + AppLang = GetDefaultLanguage(MAKEINTRESOURCE(IDD_WIZPAGE1)); + + InitCommonControls(); + if(GetComCtlVersion(&vMajor,&vMinor)) + { + if(vMajor > 4 || (vMajor == 4 && vMinor >= 71)) iWizStyle = 1; +// if(vMajor > 5 || (vMajor == 5 && vMinor >= 80)) iWizStyle = 2; + } + + if(EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&sDispMode) && + sDispMode.dmBitsPerPel == 4 && IS_WIN95) iWizStyle = 0; + + Arg = strtok(pCmdLine," "); + while(Arg) + { + if(!strnicmp(Arg,"/quiet",6)) DisableUI = 1; + if(!strnicmp(Arg,"/style:",7)) iWizStyle = atoi(Arg+7); + + if(!strnicmp(Arg,"/install",8)) Remove = 0; + if(!strnicmp(Arg,"/install:",9)) + strcpy(ProductList,Arg+9), ProductList[strlen(ProductList)+1] = 0; + if(!strnicmp(Arg,"/remove",7)) Remove = 1; + if(!strnicmp(Arg,"/remove:",8)) + strcpy(ProductList,Arg+8), ProductList[strlen(ProductList)+1] = 0; + + if(!strnicmp(Arg,"/lang:eng",9)) + AppLang = MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); + if(!strnicmp(Arg,"/lang:ger",9)) + AppLang = MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN); + if(!strnicmp(Arg,"/lang:fre",9)) + AppLang = MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH); + if(!strnicmp(Arg,"/lang:ita",9)) + AppLang = MAKELANGID(LANG_ITALIAN,SUBLANG_ITALIAN); + if(!strnicmp(Arg,"/lang:spa",9)) + AppLang = MAKELANGID(LANG_SPANISH,SUBLANG_NEUTRAL); + if(!strnicmp(Arg,"/lang:dut",9)) + AppLang = MAKELANGID(LANG_DUTCH,SUBLANG_DUTCH); + + Arg = strtok(0," "); + } + + if(IS_WINNT) SetThreadLocale(MAKELCID(AppLang,SORT_DEFAULT)); + + GetModuleFileName(0, Path, sizeof(Path)); + if(strrchr(Path,'\\')) strrchr(Path,'\\')[0] = 0; + SetCurrentDirectory(Path); + + hwndMain = CreateMainWindow(hInstance, nCmdShow); + if(!hwndMain) return 0; + + while(GetMessage(&msg, 0, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func PreviousInstance + * Funktion: PreviousInstance + * Aufgabe.: ueberpruefen, ob es schon eine instanz von uns gibt + * Resultat: TRUE, wenn andere instanz gefunden, sonst FALSE + * Hinweis.: aktiviert das fenster einer evtl. gefundenen instanz + * ------------------------------------------------------------------------ */ +int PreviousInstance(void) +{ + + HWND hwnd; + char buff[256]; + char* c = buff; + + GetModuleFileName(0, buff, sizeof(buff)); + while(*c) *c = tolower(*c == '\\' ? '_' : *c), c++; + CreateMutex(0, 1, buff); + if(GetLastError() != ERROR_ALREADY_EXISTS) return 0; + + hwnd = FindWindow(APPNAME, 0); + if(hwnd) + { + if(IsIconic(hwnd)) ShowWindow(hwnd, SW_RESTORE); + SetForegroundWindow(hwnd); + } + + return 1; +} + +/* ------------------------------------------------------------------------ + * $Func CreateMainWindow + * Funktion: CreateMainWindow + * Aufgabe.: registriert unsere fensterklasse und erstellt das hauptfenster + * Resultat: window-handle des hauptfensters + * Hinweis.: + * ------------------------------------------------------------------------ */ +HWND CreateMainWindow(HINSTANCE hInstance, /* unser instance-handle */ + int nCmdShow /* show-befehl von WinMain() */ + ) +{ + WNDCLASS wc; + + wc.style = CS_HREDRAW|CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ID_ICON)); + wc.hCursor = 0; + wc.hbrBackground = 0; + wc.lpszMenuName = 0; + wc.lpszClassName = APPNAME; + + if(!RegisterClass(&wc)) return 0; + + return CreateWindow(APPNAME, "", 0, 0, 0, 100, 100, 0, 0, hInstance, 0); +} + +/* ------------------------------------------------------------------------ + * $Func WndProc + * Funktion: WndProc + * Aufgabe.: fensterprozedur des hauptfensters + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WndProc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam /* zweiter message-parameter */ + ) +{ + switch(message) + { + case WM_CREATE: + + SetupWizard(hwnd); + SendMessage(hwnd, WM_CLOSE, 0, 0); + break; + + case WM_QUERYENDSESSION: + + if(!CatchReboot) return 1; + Reboot = 1; + return 0; + + case WM_DESTROY: + + PostQuitMessage(0); + break; + } + + return DefWindowProc(hwnd, message, wParam, lParam); +} + +/* ------------------------------------------------------------------------ + * $Func SetupWizard + * Funktion: SetupWizard + * Aufgabe.: zeigt den eigentlichen setup-wizard an + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +int SetupWizard(HWND hwnd) /* fensterhandle */ +{ + unsigned int iHlp; + HINSTANCE hInstance; + HBITMAP hBmp1, hBmp2; + tWizardData sData = {0}; + PROPSHEETPAGE sPage = {0}; + PROPSHEETHEADER sHdr = {0}; + DLGTEMPLATE* apDlgRes[7] = {0}; + HPROPSHEETPAGE ahPages[7] = {0}; + char cInfName[MAX_PATH], cTxt[256], cFmt[256]; + + hInstance = (HANDLE)GetWindowLong(hwnd, GWL_HINSTANCE); + + GetModuleFileName(0, cInfName, sizeof(cInfName)); + if(strrchr(cInfName,'\\')) strrchr(cInfName,'\\')[1] = 0; + strcat(cInfName, INFNAME); + + sData.hInf = SetupOpenInfFile(cInfName, 0, INF_STYLE_WIN4, &iHlp); + if(sData.hInf == INVALID_HANDLE_VALUE) + { + LoadString(hInstance, STR_INFERROR, cFmt, sizeof(cFmt)); + sprintf(cTxt, cFmt, cInfName, iHlp); + MessageBox(hwnd, cTxt, 0, MB_OK|MB_ICONERROR); + return 0; + } + + InitPlatformSectionNames(sData.hInf); + InitWizardData(hInstance, &sData); + + sHdr.dwSize = iWizStyle ? sizeof(sHdr) : PROPSHEETHEADER_V1_SIZE; + sHdr.dwFlags = 0; + sHdr.hwndParent = hwnd; + sHdr.hInstance = hInstance; + sHdr.nStartPage = Remove ? 5 : 0; + sHdr.phpage = ahPages; + + sPage.dwSize = iWizStyle ? sizeof(sPage) : PROPSHEETPAGE_V1_SIZE; + sPage.hInstance = hInstance; + sPage.lParam = (LPARAM)&sData; + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_HIDEHEADER:0); + sPage.pfnDlgProc = WizPage1Proc; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE1:IDD_WIZPAGE1)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE:0); + sPage.pfnDlgProc = WizPage2Proc; + sPage.pszHeaderTitle = sData.cPage2HdrTitle; + sPage.pszHeaderSubTitle = sData.cPage2HdrSubTitle; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE2:IDD_WIZPAGE2)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE:0); + sPage.pfnDlgProc = WizPage3Proc; + sPage.pszHeaderTitle = sData.cPage3HdrTitle; + sPage.pszHeaderSubTitle = sData.cPage3HdrSubTitle; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE3:IDD_WIZPAGE3)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE:0); + sPage.pfnDlgProc = WizPage4Proc; + sPage.pszHeaderTitle = sData.cPage4HdrTitle; + sPage.pszHeaderSubTitle = sData.cPage4HdrSubTitle; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE4:IDD_WIZPAGE4)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_HIDEHEADER:0); + sPage.pfnDlgProc = WizPage5Proc; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE5:IDD_WIZPAGE5)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_HIDEHEADER:0); + sPage.pfnDlgProc = WizPage6Proc; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE6:IDD_WIZPAGE6)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + sPage.dwFlags = PSP_DLGINDIRECT|(iWizStyle?PSP_HIDEHEADER:0); + sPage.pfnDlgProc = WizPage7Proc; + sPage.pResource = apDlgRes[sHdr.nPages] = LoadDlgTemplate(hInstance, + MAKEINTRESOURCE(iWizStyle?IDD_WIZ97PAGE7:IDD_WIZPAGE7)); + sHdr.phpage[sHdr.nPages++] = CreatePropertySheetPage(&sPage); + + if(iWizStyle == 0) + { + sHdr.dwFlags |= PSH_WIZARD; + } + else if(iWizStyle == 1) + { + sHdr.dwFlags |= PSH_WIZARD97|PSH_WATERMARK|PSH_HEADER| + PSH_USEHBMWATERMARK|PSH_USEHBMHEADER|PSH_STRETCHWATERMARK; + + hBmp1 = LoadBitmap(hInstance, MAKEINTRESOURCE(ID_WATERMARK)); + hBmp2 = LoadBitmap(hInstance, MAKEINTRESOURCE(ID_HEADER)); + + sHdr.hbmWatermark = MakeWizardBmp(hwnd, hBmp1, WATERMARK_TOTAL_SIZE_X, + WATERMARK_TOTAL_SIZE_Y, WATERMARK_IMAGE_OFFS_X, WATERMARK_IMAGE_OFFS_Y); + sHdr.hbmHeader = MakeWizardBmp(hwnd, hBmp2, HEADER_TOTAL_SIZE_X, + HEADER_TOTAL_SIZE_Y, HEADER_IMAGE_OFFS_X, HEADER_IMAGE_OFFS_Y); + + DeleteObject(hBmp1); + DeleteObject(hBmp2); + } + else if(iWizStyle == 2) + { + sHdr.dwFlags |= PSH_WIZARD97|PSH_WATERMARK|PSH_HEADER; + + sHdr.pszbmWatermark = MAKEINTRESOURCE(ID_WATERMARK); + sHdr.pszbmHeader = MAKEINTRESOURCE(ID_HEADER); + } + + PropertySheet(&sHdr); + if(Reboot) SetupPromptReboot(0, hwnd, 0); + + SetupCloseInfFile(sData.hInf); + FreeWizardData(&sData); + while(sHdr.nPages--) FreeDlgTemplate(apDlgRes[sHdr.nPages]); + + return 1; +} + +/* ------------------------------------------------------------------------ + * $Func WizPage1Proc + * Funktion: WizPage1Proc + * Aufgabe.: fensterprozedur der ersten wizard-propertsheet-page + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage1Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam /* zweiter message-parameter */ + ) +{ + switch(message) + { + case WM_INITDIALOG: + { + tWizardData* pData; + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + + SendDlgItemMessage(hwnd, IDC_TEXT1, WM_SETFONT, + (WPARAM)pData->hWelcomeTitleFont, 0); + SetDlgItemText(hwnd, IDC_TEXT1, pData->cWelcomeTitle); + SetDlgItemText(hwnd, IDC_TEXT2, pData->cWelcomeText); + + CenterWindow(GetParent(hwnd), GetDesktopWindow()); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_NEXT); + if(DisableUI) SetWindowLong(hwnd, DWL_MSGRESULT, -1); + } + return 1; + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func SelectLBIsItemChecked + * Funktion: SelectLBIsItemChecked + * Aufgabe.: prueft, ob ein item in der select-listbox gecheckt ist + * Resultat: TRUE wenn selektiert, sonst FALSE + * Hinweis.: + * ------------------------------------------------------------------------ */ +int SelectLBIsItemChecked(HWND hwnd, + int iItemIdx) +{ + int iItemData; + + iItemData = SendMessage(hwnd, LB_GETITEMDATA, (WPARAM)iItemIdx, 0); + if(iItemData == LB_ERR) return 0; + + return LOWORD(iItemData); +} + +/* ------------------------------------------------------------------------ + * $Func SelectLBIsItemPale + * Funktion: SelectLBIsItemPale + * Aufgabe.: prueft, ob ein item 'blass' bzw. disabled ist + * Resultat: TRUE wenn erfolgreich, sonst FALSE + * Hinweis.: + * ------------------------------------------------------------------------ */ +int SelectLBIsItemPale(HWND hwnd, + int iItemIdx) +{ + int iItemData; + + iItemData = SendMessage(hwnd, LB_GETITEMDATA, (WPARAM)iItemIdx, 0); + if(iItemData == LB_ERR) return 0; + + return HIBYTE(HIWORD(iItemData)); +} + +/* ------------------------------------------------------------------------ + * $Func SelectLBCheckItem + * Funktion: SelectLBCheckItem + * Aufgabe.: checkt oder ent-checkt ein item in der select-listbox + * Resultat: TRUE wenn erfolgreich, sonst FALSE + * Hinweis.: + * ------------------------------------------------------------------------ */ +int SelectLBCheckItem(HWND hwnd, + int iItemIdx, + int iCheckState) +{ + int iItemData; + RECT sItemRect; + + iItemData = SendMessage(hwnd, LB_GETITEMDATA, (WPARAM)iItemIdx, 0); + if(iItemData == LB_ERR) return 0; + + iItemData = MAKELONG(iCheckState, HIWORD(iItemData)); + SendMessage(hwnd, LB_SETITEMDATA, (WPARAM)iItemIdx, (LPARAM)iItemData); + + SendMessage(hwnd, LB_GETITEMRECT, (WPARAM)iItemIdx, (LPARAM)&sItemRect); + InvalidateRect(hwnd, &sItemRect, 0); + + SendMessage(GetParent(hwnd), WM_COMMAND, + MAKEWPARAM(GetWindowLong(hwnd,GWL_ID),SLBN_CHECKED), + MAKELPARAM(iItemIdx,LOWORD(iItemData))); + + return 1; +} + +/* ------------------------------------------------------------------------ + * $Func SelectLBSetImage + * Funktion: SelectLBSetImage + * Aufgabe.: legt den index des icons fuer einen eintrag fest + * Resultat: TRUE wenn erfolgreich, sonst FALSE + * Hinweis.: + * ------------------------------------------------------------------------ */ +int SelectLBSetImage(HWND hwnd, + int iItemIdx, + int iImageIdx, + int iPale) +{ + int iItemData; + RECT sItemRect; + + iItemData = SendMessage(hwnd, LB_GETITEMDATA, (WPARAM)iItemIdx, 0); + if(iItemData == LB_ERR) return 0; + + iItemData = MAKELONG(LOWORD(iItemData),MAKEWORD(iImageIdx,iPale)); + SendMessage(hwnd, LB_SETITEMDATA, (WPARAM)iItemIdx, (LPARAM)iItemData); + + SendMessage(hwnd, LB_GETITEMRECT, (WPARAM)iItemIdx, (LPARAM)&sItemRect); + InvalidateRect(hwnd, &sItemRect, 0); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func SelectLBproc + * Funktion: SelectLBproc + * Aufgabe.: fensterprozedur fuer die select-listbox + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK SelectLBproc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam /* zweiter message-parameter */ + ) +{ + switch(message) + { + case WM_LBUTTONUP: + { + POINT pt; + RECT rect; + int iItemIdx, iCheckState; + + pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); + MapWindowPoints(hwnd, 0, &pt, 1); + iItemIdx = LBItemFromPt(hwnd, pt, 0); + if(iItemIdx < 0) break; + + SendMessage(hwnd, LB_GETITEMRECT, (WPARAM)iItemIdx, (LPARAM)&rect); + rect.right = rect.left + rect.bottom - rect.top; + pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); + if(!PtInRect(&rect,pt)) break; + + iCheckState = !SelectLBIsItemChecked(hwnd, iItemIdx); + + SetWindowLong(GetParent(hwnd), DWL_MSGRESULT, 0); + SendMessage(GetParent(hwnd), WM_COMMAND, + MAKEWPARAM(GetWindowLong(hwnd,GWL_ID),SLBN_CHECKING), + MAKELPARAM(iItemIdx,iCheckState)); + + if(!GetWindowLong(GetParent(hwnd),DWL_MSGRESULT)) + SelectLBCheckItem(hwnd, iItemIdx, iCheckState); + + break; + } + + case WM_KEYDOWN: + { + int iItemIdx, iCheckState; + + if((char)wParam != VK_SPACE) break; + + iItemIdx = SendMessage(hwnd, LB_GETCURSEL, 0, 0); + if(iItemIdx < 0) break; + + iCheckState = !SelectLBIsItemChecked(hwnd, iItemIdx); + + SetWindowLong(GetParent(hwnd), DWL_MSGRESULT, 0); + SendMessage(GetParent(hwnd), WM_COMMAND, + MAKEWPARAM(GetWindowLong(hwnd,GWL_ID),SLBN_CHECKING), + MAKELPARAM(iItemIdx,iCheckState)); + + if(!GetWindowLong(GetParent(hwnd),DWL_MSGRESULT)) + SelectLBCheckItem(hwnd, iItemIdx, iCheckState); + + break; + } + + } + + return CallWindowProc(oldSelectLBproc, hwnd, message, wParam, lParam); +} + +/* ------------------------------------------------------------------------ + * $Func WizPage2Proc + * Funktion: WizPage2Proc + * Aufgabe.: fensterprozedur der zweiten wizard-propertsheet-page + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage2Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam) /* zweiter message-parameter */ +{ + tWizardData* pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + switch(message) + { + case WM_INITDIALOG: + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + + SendDlgItemMessage(hwnd, IDC_HDR_TITLE, WM_SETFONT, + (WPARAM)pData->hHeaderTitleFont, 0); + SetDlgItemText(hwnd, IDC_HDR_TITLE, pData->cPage2HdrTitle); + SetDlgItemText(hwnd, IDC_HDR_SUBTITLE, pData->cPage2HdrSubTitle); + + if(!strlen(ProductList) && InitProductSelection(hwnd,pData->hInf)) + SetWindowLong(hwnd, DWL_USER, (LONG)pData); + + oldSelectLBproc = (WNDPROC)SetWindowLong( + GetDlgItem(hwnd,IDC_PRODLIST), GWL_WNDPROC, (ULONG)SelectLBproc); + + SendDlgItemMessage(hwnd, IDC_PRODLIST, LB_SETCURSEL, 0, 0); + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_PRODLIST,LBN_SELCHANGE), 0); + + return 1; + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_KILLACTIVE) + { + BuildProductList(hwnd, pData->hInf, ProductList); + } + else if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + if(!pData) + SetWindowLong(hwnd, DWL_MSGRESULT, -1); + else + { + SendMessage(hwnd, WM_COMMAND, + MAKEWPARAM(IDC_PRODLIST,SLBN_CHECKED), 0); + if(DisableUI) + { + SetWindowLong(hwnd, DWL_MSGRESULT, -1), + BuildProductList(hwnd, pData->hInf, ProductList); + } + } + } + return 1; + + case WM_COMMAND: + + if(LOWORD(wParam) == IDC_PRODLIST && HIWORD(wParam) == SLBN_CHECKING) + { + HINSTANCE hInstance; + char cProd[256], cFmt[256], cText[256], cTitle[256]; + + hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + + SendDlgItemMessage(hwnd, IDC_PRODLIST, + LB_GETTEXT, (WPARAM)LOWORD(lParam), (LPARAM)cProd); + LoadString(hInstance, STR_WARNING, cTitle, sizeof(cTitle)); + LoadString(hInstance, STR_VERSIONWARNING, cFmt, sizeof(cFmt)); + sprintf(cText, cFmt, cProd); + + if(HIWORD(lParam) && + SelectLBIsItemPale(GetDlgItem(hwnd,IDC_PRODLIST),LOWORD(lParam)) && + MessageBox(hwnd,cText,cTitle,MB_YESNO|MB_DEFBUTTON2|MB_ICONWARNING) != IDYES) + SetWindowLong(hwnd, DWL_MSGRESULT, 1); + } + else if(LOWORD(wParam) == IDC_PRODLIST && HIWORD(wParam) == SLBN_CHECKED) + { + int Idx, Cnt, SelCnt; + + Cnt = SendDlgItemMessage(hwnd, IDC_PRODLIST, LB_GETCOUNT, 0, 0); + for(Idx = 0, SelCnt = 0; Idx < Cnt; Idx++) + if(SelectLBIsItemChecked(GetDlgItem(hwnd,IDC_PRODLIST),Idx)) + SelCnt++; + + PropSheet_SetWizButtons(GetParent(hwnd), + PSWIZB_BACK|(SelCnt?PSWIZB_NEXT:0)); + } + else if(LOWORD(wParam) == IDC_PRODLIST && HIWORD(wParam) == LBN_SELCHANGE) + { + char Buff[1024]; + int Idx = SendDlgItemMessage(hwnd, IDC_PRODLIST, LB_GETCURSEL, 0, 0); + if(Idx >= 0) + GetProductDescription(pData->hInf, Idx, Buff, sizeof(Buff)), + SetDlgItemText(hwnd, IDC_TEXT1, Buff); + } + + return 1; + + case WM_MEASUREITEM: + + if((int)wParam == IDC_PRODLIST) + { + int cxImg, cyImg; + HIMAGELIST hImgLst; + HINSTANCE hInstance; + MEASUREITEMSTRUCT* pMeas; + + pMeas = (MEASUREITEMSTRUCT*)lParam; + hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + + hImgLst = ImageList_LoadBitmap(hInstance, + MAKEINTRESOURCE(ID_BMPLIST), 16, 0, 0x00808000); + SetWindowLong(GetDlgItem(hwnd,IDC_PRODLIST), + GWL_USERDATA, (LONG)hImgLst); + + ImageList_GetIconSize(hImgLst, &cxImg, &cyImg); + pMeas->itemHeight = cyImg+2; + } + return 1; + + case WM_DRAWITEM: + + if((int)wParam == IDC_PRODLIST) + { + RECT rcTxt; + char aTxt[256]; + HIMAGELIST hImgLst; + COLORREF col1, col2; + int cxImg, cyImg, fSel, fHlt, fPale, iImgIdx; + DRAWITEMSTRUCT* pDrw = (DRAWITEMSTRUCT*)lParam; + + fSel = LOWORD(pDrw->itemData); + fPale = HIBYTE(HIWORD(pDrw->itemData)); + iImgIdx = LOBYTE(HIWORD(pDrw->itemData)); + fHlt = pDrw->itemState & ODS_SELECTED && pDrw->itemState & ODS_FOCUS; + + hImgLst = (HIMAGELIST) + GetWindowLong(GetDlgItem(hwnd,IDC_PRODLIST), GWL_USERDATA); + FillRect(pDrw->hDC, &pDrw->rcItem, + (HBRUSH)(fHlt ? (COLOR_HIGHLIGHT+1) : (COLOR_WINDOW+1))); + + if(pDrw->itemID >= 0) + { + ImageList_GetIconSize(hImgLst, &cxImg, &cyImg); + + ImageList_Draw(hImgLst, fSel ? 14 : 15, pDrw->hDC, + pDrw->rcItem.left+1, pDrw->rcItem.top+1, ILD_TRANSPARENT); + + ImageList_DrawEx(hImgLst, iImgIdx + 1, pDrw->hDC, + pDrw->rcItem.left + cyImg + 1, pDrw->rcItem.top + 1, 0, 0, 0, + (fHlt ? GetSysColor(COLOR_HIGHLIGHT) : GetSysColor(COLOR_WINDOW)), + ILD_TRANSPARENT|(fPale ? ILD_BLEND50 : 0)); + + SendDlgItemMessage(hwnd, IDC_PRODLIST, + LB_GETTEXT, (WPARAM)pDrw->itemID, (LPARAM)aTxt); + + rcTxt.left = pDrw->rcItem.left + 2*cyImg + 4; + rcTxt.top = pDrw->rcItem.top + 1; + rcTxt.right = pDrw->rcItem.right - 1; + rcTxt.bottom = pDrw->rcItem.bottom - 1; + + + if(fPale) + col1 = SetTextColor(pDrw->hDC, GetSysColor(COLOR_GRAYTEXT)); + else if(fHlt) + col1 = SetTextColor(pDrw->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); + if(fHlt) + col2 = SetBkColor(pDrw->hDC,GetSysColor(COLOR_HIGHLIGHT)); + + DrawText(pDrw->hDC, aTxt, -1, &rcTxt, DT_VCENTER|DT_SINGLELINE); + + if(fPale || fHlt) + SetTextColor(pDrw->hDC,col1); + if(fHlt) + SetBkColor(pDrw->hDC,col2); + } + + if(pDrw->itemState & ODS_FOCUS) DrawFocusRect(pDrw->hDC,&pDrw->rcItem); + } + return 1; + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func WizPage3Proc + * Funktion: WizPage3Proc + * Aufgabe.: fensterprozedur der dritten wizard-propertsheet-page + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage3Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam) /* zweiter message-parameter */ +{ + tWizardData* pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + switch(message) + { + case WM_INITDIALOG: + { + char cPath[MAX_PATH]; + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + + SendDlgItemMessage(hwnd, IDC_HDR_TITLE, WM_SETFONT, + (WPARAM)pData->hHeaderTitleFont, 0); + SetDlgItemText(hwnd, IDC_HDR_TITLE, pData->cPage3HdrTitle); + SetDlgItemText(hwnd, IDC_HDR_SUBTITLE, pData->cPage3HdrSubTitle); + + SetWindowLong(hwnd, DWL_USER, (LONG)pData); + + if(!GetLastUserDir(pData->hInf,0,cPath)) + GetDefaultTargetPath(pData->hInf, cPath, 0); + SetDlgItemText(hwnd, IDC_TARGETDIR, cPath); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_TARGETDIR,EN_CHANGE), 0); + if(DisableUI) SetWindowLong(hwnd, DWL_MSGRESULT, -1); + } + return 1; + + case WM_COMMAND: + + if(LOWORD(wParam) == IDC_TARGETDIR && HIWORD(wParam) == EN_CHANGE) + { + int iResult; + + GetDlgItemText(hwnd, IDC_TARGETDIR, + UserTargetDir, sizeof(UserTargetDir)); + iResult = SetupSetDirectoryId(pData->hInf, DIRID_USER, UserTargetDir); + + PropSheet_SetWizButtons(GetParent(hwnd), + iResult ? (PSWIZB_BACK|PSWIZB_NEXT) : PSWIZB_BACK); + } + else if(LOWORD(wParam) == IDC_BROWSE && HIWORD(wParam) == BN_CLICKED) + { + char cBuff[256], cBuff2[256]; + + GetDefaultTargetPath(pData->hInf, cBuff, cBuff2); + + if(QueryTargetPath(hwnd,cBuff,cBuff2)) + SetDlgItemText(hwnd, IDC_TARGETDIR, cBuff); + } + return 1; + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func WizPage4Proc + * Funktion: WizPage4Proc + * Aufgabe.: fensterprozedur wizard-seite, die die installation durchfuehrt + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage4Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam) /* zweiter message-parameter */ +{ + tWizardData* pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + switch(message) + { + case WM_INITDIALOG: + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + + SendDlgItemMessage(hwnd, IDC_HDR_TITLE, + WM_SETFONT, (WPARAM)pData->hHeaderTitleFont, 0); + SendDlgItemMessage(hwnd, IDC_STATIC, + STM_SETICON, (WPARAM)pData->hSmAlertIcon, 0); + + SetDlgItemText(hwnd, IDC_HDR_TITLE, pData->cPage4HdrTitle); + SetDlgItemText(hwnd, IDC_HDR_SUBTITLE, pData->cPage4HdrSubTitle); + + SetWindowLong(hwnd, DWL_USER, (LONG)pData); + SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETSTEP, (WPARAM)1, 0); + + return 1; + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + int iNeedWinCD; + + iNeedWinCD = CheckProductsForFlag(pData->hInf, ProductList, 0x04); + + ShowWindow(GetDlgItem(hwnd,IDC_TEXT1), /* show 'you need your */ + iNeedWinCD ? SW_SHOW : SW_HIDE); /* windows cd' message */ + ShowWindow(GetDlgItem(hwnd,IDC_STATIC), + iNeedWinCD ? SW_SHOW : SW_HIDE); + + PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_BACK|PSWIZB_NEXT); + if(DisableUI) PropSheet_PressButton(GetParent(hwnd), PSBTN_NEXT); + } + else if(((NMHDR*)lParam)->code == PSN_QUERYCANCEL) /* user canceled? */ + { + if(GetWindowLong(hwnd,GWL_USERDATA)) /* install thread running? */ + SetWindowLong(hwnd, DWL_MSGRESULT, 1); /* -> ignore cancel */ + } + else if(((NMHDR*)lParam)->code == PSN_WIZNEXT) /* user clicked next? */ + { + int iDummy; + + PropSheet_SetWizButtons(GetParent(hwnd), 0); /* disable */ + EnableWindow(GetDlgItem(GetParent(hwnd),IDCANCEL), 0); /* buttons */ + + SetWindowLong(hwnd, DWL_MSGRESULT, 1); /* stay on this page */ + SetWindowLong(hwnd, GWL_USERDATA, 1); /* flag: thread is running */ + + CreateThread(0, 0, InstallThread, (void*)hwnd, 0, &iDummy); + } + return 1; + + case WM_USER_STEP: + { + int iNewString; + char cText[256]; + HINSTANCE hInstance; + + hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + + switch((int)wParam) + { + case 2: iNewString = STR_STOPSERVICE; break; + case 3: iNewString = STR_COPYING; break; + case 4: iNewString = STR_REGISTRY; break; + case 5: iNewString = STR_SHORTCUTS; break; + case 6: iNewString = STR_STARTSERVICE; break; + default: iNewString = 0; break; + } + + if(iNewString) + { + LoadString(hInstance, iNewString, cText, sizeof(cText)); + SetDlgItemText(hwnd, IDC_TEXT2, cText); + ShowWindow(GetDlgItem(hwnd,IDC_PROGRESS), SW_SHOW); + } + else + { + SetDlgItemText(hwnd, IDC_TEXT2, ""); + ShowWindow(GetDlgItem(hwnd,IDC_PROGRESS), SW_HIDE); + } + + return 1; + } + + case WM_USER_PROGRESS: + + if(wParam) /* advance one step */ + { + SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_STEPIT, 0, 0); + } + else /* init progress step count */ + { + SendDlgItemMessage(hwnd, + IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0,lParam)); + } + return 1; + + case WM_USER_RESULT: /* thread has finished his work */ + { + char cText[512]; + HINSTANCE hInstance; + + hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + SetWindowLong(hwnd, GWL_USERDATA, 0); /* set flag: thread not running */ + + if(!wParam) /* install not succesfull? */ + { + LoadString(hInstance, STR_INSTALLFAIL, cText, sizeof(cText)); + ErrorMessageBox(hwnd, cText, (int)lParam); + + SetDlgItemText(hwnd, IDC_TEXT2, ""); + SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETPOS, 0, 0); + + PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_BACK|PSWIZB_NEXT); + EnableWindow(GetDlgItem(GetParent(hwnd),IDCANCEL), 1); + } + else /* install succesfull? */ + { + PropSheet_SetCurSel(GetParent(hwnd), 0, 4); + } + return 1; + } + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func WizPage5Proc + * Funktion: WizPage5Proc + * Aufgabe.: fensterprozedur installation-complete-page + * Resultat: abhaengig von der zu bearbeitenden message + * Hinweis.: + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage5Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam) /* zweiter message-parameter */ +{ + tWizardData* pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + switch(message) + { + case WM_INITDIALOG: + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + + SendDlgItemMessage(hwnd, IDC_TEXT1, WM_SETFONT, + (WPARAM)pData->hWelcomeTitleFont, 0); + SendDlgItemMessage(hwnd, IDC_STATIC, + STM_SETICON, (WPARAM)pData->hSmAlertIcon, 0); + + return 1; + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + ShowWindow(GetDlgItem(hwnd,IDC_TEXT2), Reboot ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(hwnd,IDC_STATIC), Reboot ? SW_SHOW : SW_HIDE); + + EnableWindow(GetDlgItem(GetParent(hwnd),IDCANCEL), 0); + PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_FINISH); + + if(DisableUI) PropSheet_PressButton(GetParent(hwnd), PSBTN_FINISH); + } + return 1; + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func WizPage6Proc + * Funktion: WizPage6Proc + * Aufgabe.: fensterprozedur der uninstall-page des wizard-property-sheets + * Resultat: abhaengig von der zu bearbeitenden message + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage6Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam) /* zweiter message-parameter */ +{ + tWizardData* pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + switch(message) + { + case WM_INITDIALOG: + { + HICON hIcon; + int iIconIdx; + char cProdName[256]; + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + SetWindowLong(hwnd, DWL_USER, (LONG)pData); + + GetUninstallProductName(pData->hInf, + ProductList, cProdName, sizeof(cProdName), &iIconIdx); + + SendDlgItemMessage(hwnd, IDC_TEXT1, WM_SETFONT, + (WPARAM)pData->hWelcomeTitleFont, 0); + SendDlgItemMessage(hwnd, IDC_TEXT2, WM_SETFONT, + (WPARAM)pData->hHeaderTitleFont, 0); + SetDlgItemText(hwnd, IDC_TEXT1, pData->cWelcomeTitle); + SetDlgItemText(hwnd, IDC_TEXT2, cProdName); + if(iIconIdx) + { + hIcon = ImageList_GetIcon(pData->hImgLst, iIconIdx+1, ILD_NORMAL); + SendDlgItemMessage(hwnd, IDC_STATIC, STM_SETICON, (WPARAM)hIcon, 0); + } + +// SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETSTEP, (WPARAM)1, 0); + CenterWindow(GetParent(hwnd), GetDesktopWindow()); + + return 1; + } + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_NEXT); + if(DisableUI) PropSheet_PressButton(GetParent(hwnd), PSBTN_NEXT); + } + else if(((NMHDR*)lParam)->code == PSN_QUERYCANCEL) /* user canceled? */ + { + if(GetWindowLong(hwnd,GWL_USERDATA)) /* install thread running? */ + SetWindowLong(hwnd, DWL_MSGRESULT, 1); /* -> ignore cancel */ + } + else if(((NMHDR*)lParam)->code == PSN_WIZNEXT) /* user clicked next? */ + { + int iDummy; + + PropSheet_SetWizButtons(GetParent(hwnd), 0); /* disable */ + EnableWindow(GetDlgItem(GetParent(hwnd),IDCANCEL), 0); /* buttons */ + + SetWindowLong(hwnd, DWL_MSGRESULT, 1); /* stay on this page */ + SetWindowLong(hwnd, GWL_USERDATA, 1); /* flag: thread is running */ + + CreateThread(0, 0, RemoveThread, (void*)hwnd, 0, &iDummy); + } + return 1; + + case WM_USER_STEP: + { + int iNewString; + char cText[256]; + HINSTANCE hInstance; + + hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + + switch((int)wParam) + { + case 2: iNewString = STR_STOPSERVICE; break; + case 3: iNewString = STR_DELETING; break; + case 4: iNewString = STR_REGISTRY; break; + case 5: iNewString = STR_SHORTCUTS; break; + case 6: iNewString = STR_STARTSERVICE; break; + default: iNewString = 0; break; + } + + if(iNewString) + { + LoadString(hInstance, iNewString, cText, sizeof(cText)); + SetDlgItemText(hwnd, IDC_TEXT3, cText); +// ShowWindow(GetDlgItem(hwnd,IDC_PROGRESS), SW_SHOW); + } + else + { + SetDlgItemText(hwnd, IDC_TEXT3, ""); +// ShowWindow(GetDlgItem(hwnd,IDC_PROGRESS), SW_HIDE); + } + + return 1; + } + +// case WM_USER_PROGRESS: +// +// if(wParam) /* advance one step */ +// { +// SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_STEPIT, 0, 0); +// } +// else /* init progress step count */ +// { +// SendDlgItemMessage(hwnd, +// IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0,lParam)); +// } +// return 1; + + case WM_USER_RESULT: /* thread has finished his work */ + { + char cText[512]; + HINSTANCE hInstance; + + hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + SetWindowLong(hwnd, GWL_USERDATA, 0); /* set flag: thread not running */ + + if(!wParam) /* uninstall not succesfull? */ + { + LoadString(hInstance, STR_REMOVEFAIL, cText, sizeof(cText)); + ErrorMessageBox(hwnd, cText, (int)lParam); + + SetDlgItemText(hwnd, IDC_TEXT3, ""); +// SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETPOS, 0, 0); + + PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_BACK|PSWIZB_NEXT); + EnableWindow(GetDlgItem(GetParent(hwnd),IDCANCEL), 1); + } + else /* uninstall succesfull? */ + { + PropSheet_SetCurSel(GetParent(hwnd), 0, 6); + } + return 1; + } + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func WizPage7Proc + * Funktion: WizPage7Proc + * Aufgabe.: fensterprozedur uninstall-complete-page + * Resultat: abhaengig von der zu bearbeitenden message + * ------------------------------------------------------------------------ */ +LRESULT CALLBACK WizPage7Proc(HWND hwnd, /* fensterhandle */ + UINT message, /* message */ + WPARAM wParam, /* erster message-parameter */ + LPARAM lParam) /* zweiter message-parameter */ +{ + tWizardData* pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + switch(message) + { + case WM_INITDIALOG: + + pData = (tWizardData*)((PROPSHEETPAGE*)lParam)->lParam; + + SendDlgItemMessage(hwnd, IDC_TEXT1, WM_SETFONT, + (WPARAM)pData->hWelcomeTitleFont, 0); + SendDlgItemMessage(hwnd, IDC_STATIC, + STM_SETICON, (WPARAM)pData->hSmAlertIcon, 0); + + return 1; + + case WM_NOTIFY: + + if(((NMHDR*)lParam)->code == PSN_SETACTIVE) + { + ShowWindow(GetDlgItem(hwnd,IDC_TEXT2), Reboot ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(hwnd,IDC_STATIC), Reboot ? SW_SHOW : SW_HIDE); + + EnableWindow(GetDlgItem(GetParent(hwnd),IDCANCEL), 0); + PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_FINISH); + + if(DisableUI) PropSheet_PressButton(GetParent(hwnd), PSBTN_FINISH); + } + return 1; + } + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func InstallThread + * Funktion: InstallThread + * Aufgabe.: fuehrt die installation durch + * Resultat: wird nicht ausgewertet + * ------------------------------------------------------------------------ */ +DWORD WINAPI InstallThread(void* pArg) /* thread-parameter */ +{ + HWND hwnd; + tWizardData* pData; + int iSuccess, iErrCode = 0; + + if(IS_WINNT) SetThreadLocale(MAKELCID(AppLang,SORT_DEFAULT)); + + hwnd = (HWND)pArg; + pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + CatchReboot = 1; + + BuildInstallSectionList(pData->hInf, ProductList, SectionList); + CreateUninstallEntrys(pData->hInf, ProductList); + iSuccess = InstallMultipleSections(pData->hInf, SectionList, hwnd); + if(!iSuccess) iErrCode = GetLastError(); + else if(CheckProductsForFlag(pData->hInf,ProductList,0x02)) Reboot = 1; + + CatchReboot = 0; + + PostMessage(hwnd, WM_USER_RESULT, (WPARAM)iSuccess, (LPARAM)iErrCode); + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func RemoveThread + * Funktion: RemoveThread + * Aufgabe.: fuehrt die de-installation durch + * Resultat: wird nicht ausgewertet + * ------------------------------------------------------------------------ */ +DWORD WINAPI RemoveThread(void* pArg) /* thread-parameter */ +{ + HWND hwnd; + char Path[256]; + tWizardData* pData; + int iSuccess, iErrCode = 0; + + if(IS_WINNT) SetThreadLocale(MAKELCID(AppLang,SORT_DEFAULT)); + + hwnd = (HWND)pArg; + pData = (tWizardData*)GetWindowLong(hwnd, DWL_USER); + + CatchReboot = 1; + + if(GetLastUserDir(pData->hInf,ProductList,Path)) + SetupSetDirectoryId(pData->hInf,DIRID_USER,Path); + BuildRemoveSectionList(pData->hInf, ProductList, SectionList); + RemoveUninstallEntrys(pData->hInf, ProductList); + iSuccess = InstallMultipleSections(pData->hInf, SectionList, hwnd); + if(!iSuccess) iErrCode = GetLastError(); + else if(CheckProductsForFlag(pData->hInf,ProductList,0x02)) Reboot = 1; + + CatchReboot = 0; + + PostMessage(hwnd, WM_USER_RESULT, (WPARAM)iSuccess, (LPARAM)iErrCode); + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func InitPlatformSectionNames + * Funktion: InitPlatformSectionNames + * Aufgabe.: initialisiert den dialog mit der produkt-auswahl + * Resultat: keins + * Hinweis.: + * ------------------------------------------------------------------------ */ +void InitPlatformSectionNames(HINF hInf) /* handle der inf-datei */ +{ + INFCONTEXT infContext; + + if(IS_WINNT) + { + if(IS_WIN2K && SetupFindFirstLine(hInf,"Install.NT5",0,&infContext)) + InstallSect = "Install.NT5"; + else if(SetupFindFirstLine(hInf,"Install.NTx86",0,&infContext)) + InstallSect = "Install.NTx86"; + else if(SetupFindFirstLine(hInf,"Install.NT",0,&infContext)) + InstallSect = "Install.NT"; + else + InstallSect = "Install"; + + if(IS_WIN2K && SetupFindFirstLine(hInf,"Remove.NT5",0,&infContext)) + RemoveSect = "Remove.NT5"; + else if(SetupFindFirstLine(hInf,"Remove.NTx86",0,&infContext)) + RemoveSect = "Remove.NTx86"; + else if(SetupFindFirstLine(hInf,"Remove.NT",0,&infContext)) + RemoveSect = "Remove.NT"; + else + RemoveSect = "Remove"; + + if(IS_WIN2K && SetupFindFirstLine(hInf,"Products.NT5",0,&infContext)) + ProductSect = "Products.NT5"; + else if(SetupFindFirstLine(hInf,"Products.NTx86",0,&infContext)) + ProductSect = "Products.NTx86"; + else if(SetupFindFirstLine(hInf,"Products.NT",0,&infContext)) + ProductSect = "Products.NT"; + else + ProductSect = "Products"; + } + else + { + if(SetupFindFirstLine(hInf,"Install.Win",0,&infContext)) + InstallSect = "Install.Win"; + else + InstallSect = "Install"; + if(SetupFindFirstLine(hInf,"Remove.Win",0,&infContext)) + RemoveSect = "Remove.Win"; + else + RemoveSect = "Remove"; + if(SetupFindFirstLine(hInf,"Products.Win",0,&infContext)) + ProductSect = "Products.Win"; + else + ProductSect = "Products"; + } +} + +/* ------------------------------------------------------------------------ + * $Func InitProductSelection + * Funktion: InitProductSelection + * Aufgabe.: initialisiert den dialog mit der produkt-auswahl + * Resultat: anzahl der produkte, die installiert werden koennen + * ------------------------------------------------------------------------ */ +int InitProductSelection(HWND hwnd, /* handle des dialogs */ + HINF hInf /* handle der inf-datei */ + ) +{ + char Buff[256]; + INFCONTEXT infContext; + int Cnt = 0, Sel, Pic, Idx, Old; + + if(SetupFindFirstLine(hInf,ProductSect,0,&infContext)) + do + { + if(!SetupGetStringField(&infContext,2,Buff,sizeof(Buff),0) || + !strlen(Buff)) continue; + if(!SetupGetStringField(&infContext,1,Buff,sizeof(Buff),0)) + continue; + + Idx = (int)SendDlgItemMessage(hwnd, + IDC_PRODLIST, LB_ADDSTRING, 0, (LPARAM)Buff); + + Old = (GetProductVersionDiff(hInf,Idx) < 0); + + Sel = SetupGetStringField(&infContext,4,Buff,sizeof(Buff),0) ? + ((atoi(Buff) & 0x01) && !Old) : 0; + + Pic = SetupGetStringField(&infContext,5,Buff,sizeof(Buff),0) ? + atoi(Buff) : 0; + + SelectLBSetImage(GetDlgItem(hwnd,IDC_PRODLIST), Idx, Pic, Old); + SelectLBCheckItem(GetDlgItem(hwnd,IDC_PRODLIST), Idx, Sel); + + Cnt++; + } + while(SetupFindNextLine(&infContext, &infContext)); + + return Cnt; +} + +/* ------------------------------------------------------------------------ + * $Func BuildProductList + * Funktion: BuildProductList + * Aufgabe.: baut eine liste der selektierten produkte auf + * Resultat: anzahl der produkte, die selektiert sind + * ------------------------------------------------------------------------ */ +int BuildProductList(HWND hwnd, /* handle des dialogs */ + HINF hInf, /* handle der inf-datei */ + char* ProdList /* puffer fuer liste */ + ) +{ + char Buff[256]; + INFCONTEXT infContext; + int Cnt = 0, Idx = 0; + + ProdList[0] = ProdList[1] = 0; + + if(SetupFindFirstLine(hInf,ProductSect,0,&infContext)) + do + { + if(!SetupGetStringField(&infContext,2,Buff,sizeof(Buff),0) || + !strlen(Buff)) continue; + + if(!SelectLBIsItemChecked(GetDlgItem(hwnd,IDC_PRODLIST),Idx++)) + continue; + + if(!SetupGetStringField(&infContext,0,ProdList,128,0)) + continue; + + ProdList += strlen(ProdList)+1; + Cnt++; + } + while(SetupFindNextLine(&infContext,&infContext)); + + ProdList[0] = 0; + + return Cnt; +} + + +/* ------------------------------------------------------------------------ + * $Func BuildInstallSectionList + * Funktion: BuildInstallSectionList + * Aufgabe.: baut eine liste von sektionen die installiert werden sollen + * Resultat: anzahl sektionen + * ------------------------------------------------------------------------ */ +int BuildInstallSectionList(HINF hInf, /* handle der inf-datei */ + char* ProdList, /* liste selektierter produkte */ + char* SectList /* puffer fuer section-liste */ + ) +{ + int Cnt = 1; + INFCONTEXT infContext; + + strcpy(SectList, InstallSect); + SectList += strlen(SectList)+1; + + while(*ProdList) + { + if(SetupFindFirstLine(hInf,ProductSect,ProdList,&infContext) && + SetupGetStringField(&infContext,2,SectList,128,0)) + SectList += strlen(SectList)+1, Cnt++; + ProdList += strlen(ProdList)+1; + } + SectList[0] = 0; + + return Cnt; +} + +/* ------------------------------------------------------------------------ + * $Func BuildRemoveSectionList + * Funktion: BuildRemoveSectionList + * Aufgabe.: baut eine liste von sektionen die deinstalliert werden sollen + * Resultat: anzahl sektionen + * Hinweis.: + * ------------------------------------------------------------------------ */ +int BuildRemoveSectionList(HINF hInf, /* handle der inf-datei */ + char* ProdList, /* liste selektierter produkte */ + char* SectList /* puffer fuer section-liste */ + ) +{ + HKEY hKey; + int Rest = 0, Cnt = 1; + INFCONTEXT infContext; + char* pProd, Prod[256], Key[256]; + + if(SetupFindFirstLine(hInf,ProductSect,0,&infContext)) + do + { + if(!SetupGetStringField(&infContext,0,Prod,sizeof(Prod),0)) continue; + sprintf(Key, REG_UNINSTALL_PATH "\\%s", Prod); + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,Key,0,KEY_ALL_ACCESS, + &hKey) != ERROR_SUCCESS) continue; + RegCloseKey(hKey); + Rest++; + pProd = ProdList; + while(*pProd) + { + if(!stricmp(pProd,Prod)) Rest--; + pProd += strlen(pProd)+1; + } + } + while(SetupFindNextLine(&infContext, &infContext)); + + while(*ProdList) + { + if(SetupFindFirstLine(hInf,ProductSect,ProdList,&infContext) && + SetupGetStringField(&infContext,3,SectList,128,0)) + SectList += strlen(SectList)+1, Cnt++; + ProdList += strlen(ProdList)+1; + } + + if(!Rest) strcpy(SectList, RemoveSect), SectList += strlen(SectList)+1; + + SectList[0] = 0; + + return Cnt; +} + +/* ------------------------------------------------------------------------ + * $Func CheckProductsForFlag + * Funktion: CheckProductsForFlag + * Aufgabe.: ueberprueft ob bei einem der produkte ein flag gesetzt ist + * Resultat: anzahl produkte, bei denen das flag gesetzt ist + * Hinweis.: + * ------------------------------------------------------------------------ */ +int CheckProductsForFlag(HINF hInf, /* handle der inf-datei */ + char* ProdList, /* liste selektierter produkte */ + int iFlag) /* zu pruefendes flag */ +{ + int Cnt; + char Buff[256]; + INFCONTEXT infContext; + + for(Cnt = 0; *ProdList; ProdList += strlen(ProdList)+1) + { + if(!SetupFindFirstLine(hInf,ProductSect,ProdList,&infContext)) + continue; + + if(!SetupGetStringField(&infContext,4,Buff,sizeof(Buff),0)) + continue; + + if(atoi(Buff) & iFlag) Cnt++; + } + + return Cnt; +} + +/* ------------------------------------------------------------------------ + * $Func GetProductDescription + * Funktion: GetProductDescription + * Aufgabe.: liefert die beschreibung eines produktes + * Resultat: keins + * Hinweis.: + * ------------------------------------------------------------------------ */ +void GetProductDescription(HINF hInf, /* handle der inf-datei */ + int ProdIdx, /* index des produkts */ + char* Buff, /* ^puffer */ + int szBuff) /* groesse des puffers */ +{ + char cTmp[128]; + INFCONTEXT infContext; + + Buff[0] = 0; + + if(!SetupFindFirstLine(hInf,ProductSect,0,&infContext)) + return; + + do + { + if(!SetupGetStringField(&infContext,2,cTmp,sizeof(cTmp),0) || + !strlen(cTmp)) continue; + SetupGetStringField(&infContext, 6, Buff, szBuff, 0); + if(!ProdIdx--) return; + } + while(SetupFindNextLine(&infContext,&infContext)); + + return; +} + +/* ------------------------------------------------------------------------ + * $Func GetProductVersionDiff + * Funktion: GetProductVersionDiff + * Aufgabe.: liefert die versions-differenz eines installierten produktes + * Resultat: > 0 wenn wenn die vorhandene version aelter ist als die zu + * installierende, < 0 wenn die vorhandene version neuer ist. + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetProductVersionDiff(HINF hInf, /* handle der inf-datei */ + int ProdIdx) /* index des produkts */ +{ + HKEY hKey; + LONG iType; + INFCONTEXT infContext; + int iSize, iResult, iVerOld, iVerNew; + char * pOld, * pNew, cTmp[128], cVer[128], cKey[MAX_PATH]; + + if(!SetupFindFirstLine(hInf,ProductSect,0,&infContext)) + return 0; + + do + { + if(!SetupGetStringField(&infContext,2,cTmp,sizeof(cTmp),0) || + !strlen(cTmp)) continue; /* hat keine install-section */ + + if(ProdIdx--) + continue; /* index noch nicht erreicht */ + + if(!SetupGetStringField(&infContext,0,cTmp,sizeof(cTmp),0)) + return 0; /* produkt-name nicht vorhanden */ + if(!SetupGetStringField(&infContext,7,cVer,sizeof(cVer),0)) + return 0; /* neue version nicht vorhanden */ + + sprintf(cKey, REG_UNINSTALL_PATH "\\%s", cTmp); + + iResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, cKey, 0, KEY_READ, &hKey); + if(iResult != ERROR_SUCCESS) return 0; /* alte version unbekannt */ + + iSize = sizeof(cTmp); + iResult = RegQueryValueEx(hKey, "ProductVersion", 0, &iType, cTmp, &iSize); + RegCloseKey(hKey); + if(iResult != ERROR_SUCCESS) return 0; /* alte version unbekannt */ + + for(pOld = cTmp, pNew = cVer; ; ) + { + iVerOld = strtol(pOld, &pOld, 10); + iVerNew = strtol(pNew, &pNew, 10); + + if(iVerOld != iVerNew) break; + if(*pOld++ != '.') break; + if(*pNew++ != '.') break; + } + + return iVerNew - iVerOld; /* versions-differenz berechnen */ + } + while(SetupFindNextLine(&infContext,&infContext)); + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func CreateUninstallEntrys + * Funktion: CreateUninstallEntrys + * Aufgabe.: legt uninstall-eintraege in der registry an + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int CreateUninstallEntrys(HINF hInf, /* handle der inf-datei */ + char* ProdList /* liste selektierter produkte */ + ) +{ + HKEY hKey; + LONG Type; + INFCONTEXT infContext; + char Key[256], Cmd[MAX_PATH], Name[256], Sect[256], Uninst[256], Ver[256]; + + while(*ProdList) + { + if(SetupFindFirstLine(hInf,ProductSect,ProdList,&infContext) && + SetupGetStringField(&infContext,1,Name,sizeof(Name),0) && + SetupGetStringField(&infContext,2,Sect,sizeof(Sect),0) && + SetupGetStringField(&infContext,3,Uninst,sizeof(Uninst),0) && + strlen(Uninst)) + { + if(!QuerySetupExePath(hInf,Sect,Cmd) && + !QuerySetupExePath(hInf,InstallSect,Cmd)) return 0; + + strcat(Cmd, " /remove:"); + strcat(Cmd, ProdList); + sprintf(Key, REG_UNINSTALL_PATH "\\%s", ProdList); + + if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,Key,0,0,0,KEY_ALL_ACCESS,0, + &hKey,&Type) != ERROR_SUCCESS) return 0; + + RegSetValueEx(hKey, "DisplayName", 0, REG_SZ, Name, strlen(Name)+1); + RegSetValueEx(hKey, "UninstallString", 0, REG_SZ, Cmd, strlen(Cmd)+1); + + if(SetupGetStringField(&infContext,7,Ver,sizeof(Ver),0)) + RegSetValueEx(hKey, "ProductVersion", 0, REG_SZ, Ver, strlen(Ver)+1); + + if(strlen(UserTargetDir)) + RegSetValueEx(hKey, "UserTargetDir", + 0, REG_SZ, UserTargetDir, strlen(UserTargetDir)+1); + + RegCloseKey(hKey); + } + ProdList += strlen(ProdList)+1; + } + + if(SetupFindFirstLine(hInf,InstallSect,"Uninstall",&infContext) && + SetupGetStringField(&infContext,1,Sect,sizeof(Sect),0)) + { + if(!SetupGetStringField(&infContext,2,Name,sizeof(Name),0)) + strcpy(Name, Sect); + + if(!QuerySetupExePath(hInf,InstallSect,Cmd)) return 0; + strcat(Cmd, " /remove:"); + strcat(Cmd, Sect); + sprintf(Key, REG_UNINSTALL_PATH "\\%s", Sect); + if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,Key,0,0,0,KEY_ALL_ACCESS,0, + &hKey,&Type) != ERROR_SUCCESS) return 0; + RegSetValueEx(hKey, "DisplayName", 0, REG_SZ, Name, strlen(Name)+1); + RegSetValueEx(hKey, "UninstallString", 0, REG_SZ, Cmd, strlen(Cmd)+1); + if(strlen(UserTargetDir)) + RegSetValueEx(hKey, "UserTargetDir", 0, + REG_SZ, UserTargetDir, strlen(UserTargetDir)+1); + RegCloseKey(hKey); + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func GetUninstallProductName + * Funktion: GetUninstallProductName + * Aufgabe.: liefert den namen des produkts, das deinstalliert wird + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetUninstallProductName(HINF hInf, /* handle der inf-datei */ + char* ProdList, /* uninstall-produkt */ + char* Name, /* puffer fuer name */ + int cbName, /* groesse des puffers */ + int* iIconIdx) /* index des product-icons */ +{ + INFCONTEXT infContext; + char cIcon[64], cKey[256]; + + if(strlen(ProdList) && + SetupFindFirstLine(hInf,ProductSect,ProdList,&infContext) && + SetupGetStringField(&infContext,1,Name,cbName,0)) + { + if(SetupGetStringField(&infContext,5,cIcon,sizeof(cIcon),0)) + *iIconIdx = atoi(cIcon); + else *iIconIdx = 0; + return 1; + } + + if(SetupFindFirstLine(hInf,InstallSect,"Uninstall",&infContext) && + SetupGetStringField(&infContext,1,cKey,sizeof(cKey),0) && + (!strlen(ProdList) || !stricmp(cKey,ProdList)) && + SetupGetStringField(&infContext,2,Name,cbName,0)) + { + *iIconIdx = 0; + return 1; + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func GetLastUserDir + * Funktion: GetLastUserDir + * Aufgabe.: liefert das verzeichnis, in das zuletzt installiert wurde + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetLastUserDir(HINF hInf, /* handle der inf-datei */ + char* ProdList, /* liste von produkten */ + char* Path /* puffer fuer pfad */ + ) +{ + HKEY hKey; + LONG Type; + int rc, Size; + INFCONTEXT infCont; + char Key[256], Prod[256]; + + while(ProdList && *ProdList) + { + sprintf(Key, REG_UNINSTALL_PATH "\\%s", ProdList); + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,Key,0,KEY_READ,&hKey) == ERROR_SUCCESS) + { + Size = MAX_PATH; + rc = RegQueryValueEx(hKey, "UserTargetDir", 0, &Type, Path, &Size); + RegCloseKey(hKey); + if(rc == ERROR_SUCCESS) return 1; + } + ProdList += strlen(ProdList)+1; + } + + if(SetupFindFirstLine(hInf,ProductSect,0,&infCont)) + do + { + if(!SetupGetStringField(&infCont,0,Prod,sizeof(Prod),0)) continue; + sprintf(Key, REG_UNINSTALL_PATH "\\%s", Prod); + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,Key,0,KEY_READ,&hKey) == ERROR_SUCCESS) + { + Size = MAX_PATH; + rc = RegQueryValueEx(hKey, "UserTargetDir", 0, &Type, Path, &Size); + RegCloseKey(hKey); + if(rc == ERROR_SUCCESS) return 1; + } + } + while(SetupFindNextLine(&infCont,&infCont)); + + if(SetupFindFirstLine(hInf,InstallSect,"Uninstall",&infCont) && + SetupGetStringField(&infCont,1,Prod,sizeof(Prod),0)) + { + sprintf(Key, REG_UNINSTALL_PATH "\\%s", Prod); + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,Key,0,KEY_READ,&hKey) == ERROR_SUCCESS) + { + Size = MAX_PATH; + rc = RegQueryValueEx(hKey, "UserTargetDir", 0, &Type, Path, &Size); + RegCloseKey(hKey); + if(rc == ERROR_SUCCESS) return 1; + } + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func RemoveUninstallEntrys + * Funktion: RemoveUninstallEntrys + * Aufgabe.: entfernt uninstall-eintraege aus der registry + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int RemoveUninstallEntrys(HINF hInf, /* handle der inf-datei */ + char* ProdList /* liste selektierter produkte */ + ) +{ + HKEY hKey; + + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_UNINSTALL_PATH, + 0, KEY_READ, &hKey) != ERROR_SUCCESS) return 0; + + while(*ProdList) + { + RegDeleteKey(hKey, ProdList); + ProdList += strlen(ProdList)+1; + } + RegCloseKey(hKey); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func InstallMultipleSections + * Funktion: InstallMultipleSections + * Aufgabe.: bearbeitet install-sections aus einer inf-datei + * Resultat: TRUE wenn erfolgreich, sonst GetLastError() + * Hinweis.: + * ------------------------------------------------------------------------ */ +int InstallMultipleSections(HINF hInf, /* handle der inf-datei */ + char* Sections, /* namen der install-sections */ + HWND hwnd /* callback-fenster */ + ) +{ + char* Section; + void** pContext; + HSPFILEQ FileQ; + + FileQ = SetupOpenFileQueue(); + + Section = Sections; + while(*Section) + { + if(!SetupInstallFilesFromInfSection(hInf,0,FileQ,Section,".",SP_COPY_NEWER)) + { + int err = GetLastError(); + SetupCloseFileQueue(FileQ); + SetLastError(err); + return 0; + } + Section += strlen(Section)+1; + } + + Section = Sections; + while(*Section) + { + if(!DoExecStatements(hInf,Section,1,hwnd)) return 0; + Section += strlen(Section)+1; + } + + PostMessage(hwnd, WM_USER_STEP, (WPARAM)2, 0); + Section = Sections; + while(*Section) + { + if(!StopServices(hInf,Section)) Reboot = 1; + Section += strlen(Section)+1; + } + + PostMessage(hwnd, WM_USER_STEP, (WPARAM)3, 0); + pContext = (void**)malloc(3*sizeof(void*)); + pContext[0] = SetupInitDefaultQueueCallbackEx(hwnd, + hwnd, WM_USER_PROGRESS, 0, 0); + if(!SetupCommitFileQueue(hwnd,FileQ,QueueCallback,pContext)) + { + int err = GetLastError(); + SetupTermDefaultQueueCallback(pContext[0]); + free(pContext); + SetupCloseFileQueue(FileQ); + SetLastError(err); + return 0; + } + SetupTermDefaultQueueCallback(pContext[0]); + free(pContext); + if(SetupPromptReboot(FileQ,hwnd,1) & SPFILEQ_FILE_IN_USE) Reboot = 1; + SetupCloseFileQueue(FileQ); + + PostMessage(hwnd, WM_USER_STEP, (WPARAM)4, 0); + Section = Sections; + while(*Section) + { + if(!SetupInstallFromInfSection(hwnd,hInf,Section,SPINST_INIFILES| + SPINST_REGISTRY|SPINST_INI2REG,0,0,0,0,0,0,0)) return 0; + Section += strlen(Section)+1; + } + + Section = Sections; + while(*Section) + { + if(!InstallServices(hInf,Section)) return 0; + Section += strlen(Section)+1; + } + + PostMessage(hwnd, WM_USER_STEP, (WPARAM)5, 0); + Section = Sections; + while(*Section) + { + if(!UpdateShortcuts(hInf,Section)) return 0; + Section += strlen(Section)+1; + } + + PostMessage(hwnd, WM_USER_STEP, (WPARAM)6, 0); + Section = Sections; + while(*Section) + { + if(!StartServices(hInf,Section)) Reboot = 1; + Section += strlen(Section)+1; + } + + PostMessage(hwnd, WM_USER_STEP, (WPARAM)-1, 0); + Section = Sections; + while(*Section) + { + if(!DoExecStatements(hInf,Section,2,hwnd)) return 0; + Section += strlen(Section)+1; + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func StopServices + * Funktion: InstallServices + * Aufgabe.: stopt services aus einer service-install-section + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int StopServices(HINF hInf, /* handle der inf-datei */ + char* Section /* name der install-section */ + ) +{ + INFCONTEXT infCont; + char SvcSect[256], Cmd[256], Name[256]; + + if(!IS_WINNT) return 1; + sprintf(SvcSect, "%s.Services", Section); + + if(SetupFindFirstLine(hInf,SvcSect,0,&infCont)) + { + do + { + if(!SetupGetStringField(&infCont,0,Cmd,sizeof(Cmd),0)) continue; + if(!SetupGetStringField(&infCont,1,Name,sizeof(Name),0)) continue; + if(stricmp(Cmd,"StopService")) continue; + if(!DoStopService(Name)) return 0; + } + while(SetupFindNextLine(&infCont,&infCont)); + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func StartServices + * Funktion: StartServices + * Aufgabe.: startet services aus einer service-install-section + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int StartServices(HINF hInf, /* handle der inf-datei */ + char* Section /* name der install-scetion */ + ) +{ + INFCONTEXT infCont; + char SvcSect[256], Cmd[256], Name[256]; + + if(!IS_WINNT) return 1; + sprintf(SvcSect, "%s.Services", Section); + + if(SetupFindFirstLine(hInf,SvcSect,0,&infCont)) + { + do + { + if(!SetupGetStringField(&infCont,0,Cmd,sizeof(Cmd),0)) continue; + if(!SetupGetStringField(&infCont,1,Name,sizeof(Name),0)) continue; + if(stricmp(Cmd,"StartService")) continue; + if(!DoStartService(Name)) return 0; + } + while(SetupFindNextLine(&infCont,&infCont)); + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func InstallServices + * Funktion: InstallServices + * Aufgabe.: bearbeitet service-install-section + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int InstallServices(HINF hInf, /* handle der inf-datei */ + char* Section /* name der install-section */ + ) +{ + INFCONTEXT infCont; + char SvcSect[256], Cmd[256], Name[256], InstSect[256]; + + if(!IS_WINNT) return 1; + sprintf(SvcSect, "%s.Services", Section); + + if(SetupFindFirstLine(hInf,SvcSect,0,&infCont)) + { + do + { + if(!SetupGetStringField(&infCont,0,Cmd,sizeof(Cmd),0)) continue; + if(!SetupGetStringField(&infCont,1,Name,sizeof(Name),0)) continue; + if(!stricmp(Cmd,"AddService")) + { + SetupGetStringField(&infCont,3,InstSect,sizeof(InstSect),0); + if(!DoAddService(hInf,Name,InstSect)) return 0; + } + else if(!stricmp(Cmd,"DelService")) + { + if(!DoDelService(Name)) return 0; + } + } + while(SetupFindNextLine(&infCont,&infCont)); + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func DoStopService + * Funktion: DoStopService + * Aufgabe.: stopt einen service + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DoStopService(char* SvcName) /* service-name */ +{ + int Cnt = 0; + SERVICE_STATUS svcStatus; + SC_HANDLE hManager, hService; + + hManager = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + if(!hManager) return 0; + + hService = OpenService(hManager, SvcName, SERVICE_ALL_ACCESS); + if(!hService && GetLastError() != ERROR_SERVICE_DOES_NOT_EXIST) + { + CloseServiceHandle(hManager); + return 0; + } + else if(hService) + { + QueryServiceStatus(hService, &svcStatus); + if(svcStatus.dwCurrentState != SERVICE_STOPPED) + ControlService(hService, SERVICE_CONTROL_STOP, &svcStatus); + while(svcStatus.dwCurrentState != SERVICE_STOPPED && Cnt++ < 20) + Sleep(250), QueryServiceStatus(hService, &svcStatus); + CloseServiceHandle(hService); + if(svcStatus.dwCurrentState != SERVICE_STOPPED) + { + CloseServiceHandle(hManager); + return 0; + } + } + + CloseServiceHandle(hManager); + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func DoAddService + * Funktion: DoAddService + * Aufgabe.: fuegt einen service hinzu (wie in einer inf-section angegeben) + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DoAddService(HINF hInf, /* handle der inf-datei */ + char* SvcName, /* name des services */ + char* SvcSection /* install-section des svc. */ + ) +{ + INFCONTEXT infCont; + SC_HANDLE hManager, hService; + char SvcDesc[256], SvcBinary[256], + LoadOrdGrp[256], Depend[256], StartName[256]; + char* pSvcDesc = 0, *pSvcBinary = 0, + *pLoadOrdGrp = 0, *pDepend = 0, *pStartName = 0; + int Idx = 1, SvcType = 0, StartType = 0, ErrorCtrl = 0; + + if(!SetupFindFirstLine(hInf,SvcSection,0,&infCont)) return 0; + + if(SetupFindFirstLine(hInf,SvcSection,"DisplayName",&infCont)) + SetupGetStringField(&infCont,1,SvcDesc,sizeof(SvcDesc),0), + pSvcDesc = SvcDesc; + + if(SetupFindFirstLine(hInf,SvcSection,"ServiceType",&infCont)) + SetupGetIntField(&infCont,1,&SvcType); + + if(SetupFindFirstLine(hInf,SvcSection,"StartType",&infCont)) + SetupGetIntField(&infCont,1,&StartType); + + if(SetupFindFirstLine(hInf,SvcSection,"ErrorControl",&infCont)) + SetupGetIntField(&infCont,1,&ErrorCtrl); + + if(SetupFindFirstLine(hInf,SvcSection,"ServiceBinary",&infCont)) + SetupGetStringField(&infCont,1,SvcBinary,sizeof(SvcBinary),0), + pSvcBinary = SvcBinary; + + if(SetupFindFirstLine(hInf,SvcSection,"LoadOrderGroup",&infCont)) + SetupGetStringField(&infCont,1,LoadOrdGrp,sizeof(LoadOrdGrp),0), + pLoadOrdGrp = LoadOrdGrp; + + if(SetupFindFirstLine(hInf,SvcSection,"Dependencies",&infCont)) + { + pDepend = Depend; + while(SetupGetStringField(&infCont,Idx++,pDepend,sizeof(Depend),0)) + pDepend += strlen(pDepend)+1; + pDepend[0] = 0; + pDepend = Depend; + } + + if(SetupFindFirstLine(hInf,SvcSection,"StartName",&infCont)) + SetupGetStringField(&infCont,1,StartName,sizeof(StartName),0), + pStartName = StartName; + + hManager = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + if(!hManager) return 0; + + hService = OpenService(hManager, SvcName, SERVICE_ALL_ACCESS); + if(hService) + { + ChangeServiceConfig(hService, SvcType, StartType, ErrorCtrl, + pSvcBinary, pLoadOrdGrp, 0, pDepend, pStartName, 0, pSvcDesc); + CloseServiceHandle(hService); + CloseServiceHandle(hManager); + AddServiceToGroupOrder(hInf,SvcSection); + return 1; + } + + hService = CreateService(hManager, SvcName, pSvcDesc, + SERVICE_ALL_ACCESS, SvcType, StartType, ErrorCtrl, pSvcBinary, + pLoadOrdGrp, 0, pDepend, pStartName, 0); + if(hService) + { + CloseServiceHandle(hService); + CloseServiceHandle(hManager); + AddServiceToGroupOrder(hInf,SvcSection); + return 1; + } + + CloseServiceHandle(hManager); + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func DoDelService + * Funktion: DoDelService + * Aufgabe.: loescht einen service + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DoDelService(char* SvcName) /* name des services */ +{ + SC_HANDLE hManager, hService; + + hManager = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + if(!hManager) return 0; + + hService = OpenService(hManager, SvcName, SERVICE_ALL_ACCESS); + if(!hService && GetLastError() != ERROR_SERVICE_DOES_NOT_EXIST) + { + CloseServiceHandle(hManager); + return 0; + } + else if(hService) + { + DeleteService(hService); + CloseServiceHandle(hService); + } + + CloseServiceHandle(hManager); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func DoStartService + * Funktion: DoStartService + * Aufgabe.: startet einen service + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DoStartService(char* SvcName) /* name des services */ +{ + int Cnt = 0; + SERVICE_STATUS svcStatus; + SC_HANDLE hManager, hService; + + hManager = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + if(!hManager) return 0; + + hService = OpenService(hManager, SvcName, SERVICE_ALL_ACCESS); + if(!hService) + { + CloseServiceHandle(hManager); + return 0; + } + + if(StartService(hService,0,0)) + while(Cnt++ < 20) + { + QueryServiceStatus(hService, &svcStatus); + if(svcStatus.dwCurrentState == SERVICE_RUNNING) break; + else Sleep(250); + } + + CloseServiceHandle(hService); + CloseServiceHandle(hManager); + + return (svcStatus.dwCurrentState == SERVICE_RUNNING); +} + + +/* ------------------------------------------------------------------------ + * $Func AddServiceToGroupOrder + * Funktion: AddServiceToGroupOrder + * Aufgabe.: fuegt eine + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int AddServiceToGroupOrder(HINF hInf, /* handle der inf-datei */ + char* SvcSection /* service-install-section */ + ) +{ + int i; + HKEY hKey; + LONG Type, Size; + INFCONTEXT infCont; + char GrpOrder[1024], Group[256], GrpRel[256], * pGrpRel = 0; + + if(!SetupFindFirstLine(hInf,SvcSection,"ServiceGroupOrder",&infCont)) + return 1; + + if(!SetupGetStringField(&infCont,1,Group,sizeof(Group),0)) return 0; + if(!SetupGetStringField(&infCont,2,GrpRel,sizeof(GrpRel),0)) GrpRel[0] = 0; + + if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,"System\\CurrentControlSet\\" + "Control\\ServiceGroupOrder",0,0,0,KEY_ALL_ACCESS,0,&hKey,&Type) + != ERROR_SUCCESS) return 0; + + Size = sizeof(GrpOrder); + if(RegQueryValueEx(hKey,"List",0,&Type,GrpOrder,&Size)) + GrpOrder[0] = GrpOrder[1] = 0; + + i = FindMultiString(GrpOrder, Group); + if(i >= 0) RemoveMultiString(GrpOrder, i); + + pGrpRel = GrpRel; + if(GrpRel[0] == '+' || GrpRel[0] == '-') pGrpRel++; + + i = FindMultiString(GrpOrder, pGrpRel); + if(i < 0) i = 0; + if(GrpRel[0] == '-') i = i ? i+1 : -1; + + InsertMultiString(GrpOrder, Group, i); + + RegSetValueEx(hKey, "List", 0, + REG_MULTI_SZ, GrpOrder, GetMultiStringLength(GrpOrder)); + + RegCloseKey(hKey); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func UpdateShortcuts + * Funktion: UpdateShortcuts + * Aufgabe.: bearbeitet 'MakeIcons' und 'DelIcons' aus einer section + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int UpdateShortcuts(HINF hInf, /* handle der inf-datei */ + char* Section /* name der install-section */ + ) +{ + int Sect; + INFCONTEXT infCont1, infCont2; + char SubSect[256], Where[16], Title[256], Exe[256], + Parms[256], Icon[256], IconIdx[256], Flags[256]; + + if(SetupFindFirstLine(hInf,Section,"MakeIcons",&infCont1)) + { + Sect = 1; + while(SetupGetStringField(&infCont1,Sect++,SubSect,sizeof(SubSect),0)) + { + if(!SetupFindFirstLine(hInf,SubSect,0,&infCont2)) continue; + do + { + if(!SetupGetStringField(&infCont2,1,Where,sizeof(Where),0)) continue; + if(!SetupGetStringField(&infCont2,2,Title,sizeof(Title),0)) continue; + if(!SetupGetStringField(&infCont2,3,Exe,sizeof(Exe),0)) continue; + if(!SetupGetStringField(&infCont2,4,Parms,sizeof(Parms),0)) + Parms[0] = 0; + if(!SetupGetStringField(&infCont2,5,Icon,sizeof(Icon),0)) + Icon[0] = 0; + if(!SetupGetStringField(&infCont2,6,IconIdx,sizeof(IconIdx),0)) + IconIdx[0] = 0; + if(!SetupGetStringField(&infCont2,7,Flags,sizeof(Flags),0)) + Flags[0] = 0; + CreateShortcut(Where, Title, Exe, Parms, Icon, + atoi(IconIdx), atoi(Flags)); + } + while(SetupFindNextLine(&infCont2,&infCont2)); + } + } + if(SetupFindFirstLine(hInf,Section,"DelIcons",&infCont1)) + { + Sect = 1; + while(SetupGetStringField(&infCont1,Sect++,SubSect,sizeof(SubSect),0)) + { + if(!SetupFindFirstLine(hInf,SubSect,0,&infCont2)) continue; + do + { + if(!SetupGetStringField(&infCont2,1,Where,sizeof(Where),0)) continue; + if(!SetupGetStringField(&infCont2,2,Title,sizeof(Title),0)) continue; + DeleteShortcut(Where, Title); + } + while(SetupFindNextLine(&infCont2,&infCont2)); + } + } + + return 1; +} + +/* ------------------------------------------------------------------------ + * $Func CreateShortcut + * Funktion: CreateShortcut + * Aufgabe.: erzeugt einen link im start-menu + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int CreateShortcut(char* Where, /* wohin mit dem link */ + char* Title, /* titel des links */ + char* Exe, /* pfad und name der exe-datei */ + char* Arguments, /* parameter */ + char* Icon, /* icon-datei */ + int IconIdx, /* icon-index */ + int Flags /* enthaltenden ordner oeffnen */ + ) +{ + char* c; + HRESULT hres; + IShellLink* psl; + WORD wLink[MAX_PATH]; + char WorkPath[MAX_PATH], Link[MAX_PATH]; + + strcpy(WorkPath, Exe); + if(strrchr(WorkPath,'\\')) strrchr(WorkPath,'\\')[0] = 0; + + CoInitialize(0); + + hres = CoCreateInstance(&CLSID_ShellLink, 0, + CLSCTX_INPROC_SERVER, &IID_IShellLink, &psl); + + if(SUCCEEDED(hres)) + { + IPersistFile* ppf; + + psl->lpVtbl->SetPath(psl, Exe); + psl->lpVtbl->SetWorkingDirectory(psl, WorkPath); + psl->lpVtbl->SetArguments(psl, Arguments); + psl->lpVtbl->SetIconLocation(psl, Icon, IconIdx); + + hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, &ppf); + if(SUCCEEDED(hres)) + { + QueryStartMenuProgramFolder(Link, Where); + c = Link + strlen(Link); + strcat(Link, "\\"); + strcat(Link, Title); + strcat(Link, ".lnk"); + while(c = strchr(c+1,'\\')) + *c = 0, CreateDirectory(Link, 0), *c = '\\'; + + MultiByteToWideChar(CP_ACP, 0, Link, -1, wLink, MAX_PATH); + + hres = ppf->lpVtbl->Save(ppf, wLink, TRUE); + ppf->lpVtbl->Release(ppf); + + if(Flags) + { + if(strrchr(Link,'\\')) *strrchr(Link,'\\') = 0; + ShellExecute(0, 0, Link, 0, 0, SW_SHOWNA); + } + } + psl->lpVtbl->Release(psl); + } + + CoUninitialize(); + return SUCCEEDED(hres); +} + + +/* ------------------------------------------------------------------------ + * $Func DeleteShortcut + * Funktion: DeleteShortcut + * Aufgabe.: erzeugt einen link im start-menu + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DeleteShortcut(char* Where, /* wo ist der link */ + char* Title) /* titel des links */ +{ + char Link[MAX_PATH], Path[MAX_PATH]; + + if(QueryStartMenuProgramFolder(Path,Where)) + { + strcpy(Link, Path); + strcat(Link, "\\"); + strcat(Link, Title); + strcat(Link, ".lnk"); + DeleteFile(Link); + while(strrchr(Link,'\\')) + { + strrchr(Link,'\\')[0] = 0; + if(strlen(Link) <= strlen(Path)) break; + if(!RemoveDirectory(Link)) break; + } + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func DoExecStatements + * Funktion: DoExecStatements + * Aufgabe.: fuehrt exec-statements aus + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DoExecStatements(HINF hInf, /* handle der inf-datei */ + char* Section, /* install-section */ + int InstallStep, /* installations-schritt */ + HWND hwndOwner) /* owner fuer kind-prozesse */ +{ + int Sect; + INFCONTEXT infCont1, infCont2; + char SubSect[256], Step[16], Cmd[256], Arg[256], + WorkDir[256], Flags[16], Path[256]; + + if(SetupFindFirstLine(hInf,Section,"Exec",&infCont1)) + { + Sect = 1; + while(SetupGetStringField(&infCont1,Sect++,SubSect,sizeof(SubSect),0)) + { + if(SubSect[0] == '@') ExecuteCommand(SubSect+1, 0, 0, 0, hwndOwner); + else if(!SetupFindFirstLine(hInf,SubSect,0,&infCont2)) continue; + do + { + if(!SetupGetStringField(&infCont2,1,Step,sizeof(Step),0)) continue; + if(strtol(Step,0,0) != InstallStep) continue; + if(!SetupGetStringField(&infCont2,2,Cmd,sizeof(Cmd),0)) continue; + if(!SetupGetStringField(&infCont2,3,Arg,sizeof(Arg),0)) + Arg[0] = 0; + if(!SetupGetStringField(&infCont2,4,WorkDir,sizeof(WorkDir),0)) + WorkDir[0] = 0; + if(!SetupGetStringField(&infCont2,5,Flags,sizeof(Flags),0)) + Flags[0] = 0; + GetCurrentDirectory(sizeof(Path), Path); + ExecuteCommand(Cmd, Arg, WorkDir, strtol(Flags,0,0), hwndOwner); + SetCurrentDirectory(Path); + } + while(SetupFindNextLine(&infCont2,&infCont2)); + } + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func ExecuteCommand + * Funktion: ExecuteCommand + * Aufgabe.: fuehrt einen externen befehl durch + * Resultat: haengt von der notifcation ab + * Hinweis.: + * ------------------------------------------------------------------------ */ +int ExecuteCommand(char* Cmd, /* befehl */ + char* Arg, /* argumente */ + char* WorkDir, /* arbeitsverzeichnis */ + int Flags, /* weitere optionen */ + HWND hwndOwner) /* owner fuer kind-prozesse */ +{ + SHELLEXECUTEINFO execInfo; + char cArg[1024], cHwnd[16], *pHlp; + + strcpy(cArg, Arg); + sprintf(cHwnd, "0x%08x", hwndOwner); + + while((pHlp = strchr(cArg,'%')) && !strnicmp(pHlp,"%hwnd%",6)) + { + memmove(pHlp + strlen(cHwnd), pHlp + 6, strlen(pHlp+6) + 1); + strncpy(pHlp, cHwnd, strlen(cHwnd)); + } + + execInfo.cbSize = sizeof(execInfo); + execInfo.fMask = SEE_MASK_NOCLOSEPROCESS; + execInfo.hwnd = GetDesktopWindow(); + execInfo.lpVerb = 0; + execInfo.lpFile = Cmd; + execInfo.lpParameters = cArg; + execInfo.lpDirectory = WorkDir; + execInfo.nShow = SW_SHOWNORMAL; + + if(!ShellExecuteEx(&execInfo)) return 0; + if(!execInfo.hProcess) return 0; + + // Flags & 0x01 == do not wait for process + // Flags & 0x02 == delete file after executing, not in combination with 0x01 + + if(Flags & 0x01) + return 1; + + WaitForSingleObject(execInfo.hProcess, INFINITE); + + if(Flags & 0x02) + DeleteFile(Cmd); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func QueueCallback + * Funktion: QueueCallback + * Aufgabe.: callback-funktion fuer die file-queue + * Resultat: haengt von der notifcation ab + * Hinweis.: + * ------------------------------------------------------------------------ */ +UINT WINAPI QueueCallback(VOID* Context, /* context-struktur */ + UINT Notification, /* notification-code */ + UINT Param1, /* zusaetzlicher parameter */ + UINT Param2 /* zusaetzlicher parameter */ + ) +{ + HANDLE hFind; + DWORD iResult; + FILEPATHS* pPath; + WIN32_FIND_DATA FindData; + int ZombieFiles, FileCnt; + void** pContext = (void**)Context; + char* pLastDir, CurrDir[MAX_PATH], * pHlp1, * pHlp2; + + pLastDir = (char*)pContext[1]; + ZombieFiles = (int)pContext[2]; + + switch(Notification) + { + case SPFILENOTIFY_STARTQUEUE: + + pLastDir = (void*)malloc(MAX_PATH); + pLastDir[0] = 0; + break; + + case SPFILENOTIFY_ENDQUEUE: + + free(pLastDir); + break; + + case SPFILENOTIFY_STARTCOPY: + + pPath = (FILEPATHS*)Param1; + + pHlp1 = strrchr(pPath->Source,'\\') ? + strrchr(pPath->Source,'\\') : pPath->Source; + pHlp2 = strrchr(pPath->Target,'\\') ? + strrchr(pPath->Target,'\\') : pPath->Target; + + if(!stricmp(pHlp1,pHlp2)) + { + pHlp1 = strrchr(pHlp1, '.'); + pHlp2 = strrchr(pHlp2, '.'); + + if(pHlp1 && !stricmp(pHlp1,".cab") && pHlp2 && !stricmp(pHlp2,".cab")) + { + SetFileAttributes(pPath->Target, FILE_ATTRIBUTE_NORMAL); + iResult = CopyFile(pPath->Source, pPath->Target, 0); + SetFileAttributes(pPath->Target, FILE_ATTRIBUTE_NORMAL); + return iResult ? FILEOP_SKIP : FILEOP_ABORT; + } + } + + break; + + case SPFILENOTIFY_ENDDELETE: + + pPath = (FILEPATHS*)Param1; + + strcpy(CurrDir, pPath->Target); + if(strrchr(CurrDir,'\\')) strrchr(CurrDir,'\\')[0] = 0; + if(strcmp(CurrDir,pLastDir)) + strcpy(pLastDir,CurrDir), ZombieFiles = 0; + + hFind = FindFirstFile(pPath->Target, &FindData); + if(hFind != INVALID_HANDLE_VALUE) + { + FindClose(hFind); + Reboot = 1; + ZombieFiles++; + DelayFileDelete((char*)pPath->Target); + } + + FileCnt = GetFileCount(CurrDir) - ZombieFiles; + if(!FileCnt && !RemoveDirectory(CurrDir)) DelayDirDelete(CurrDir); + + break; + } + + pContext[1] = (void*)pLastDir; + pContext[2] = (void*)ZombieFiles; + + return SetupDefaultQueueCallback(pContext[0],Notification,Param1,Param2); +} + + +/* ------------------------------------------------------------------------ + * $Func GetDefaultTargetPath + * Funktion: GetDefaultTargetPath + * Aufgabe.: liefert zielverzeichnis + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetDefaultTargetPath(HINF hInf, /* handle der inf-datei */ + char* Path, /* ^puffer fuer pfad */ + char* RelPath /* ^puffer fuer relativ-pfad */ + ) +{ + int DirID = 0; + INFCONTEXT infCont; + char Buff[MAX_PATH] = "", Buff2[MAX_PATH] = ""; + + if(SetupFindFirstLine(hInf,"DestinationDirs","DefaultDestDir",&infCont)) + { + SetupGetStringField(&infCont,1,Buff,sizeof(Buff),0); + SetupGetStringField(&infCont,2,Buff2,sizeof(Buff2),0); + DirID = atoi(Buff); + } + + if(DirID == 24 && QueryApplPath(Buff)) + { + strcpy(Path, Buff); + if(Path[strlen(Path)-1] != '\\') strcat(Path, "\\"); + if(strlen(Buff2) && Buff2[0] == '\\') strcat(Path, Buff2+1); + else if(strlen(Buff2)) strcat(Path, Buff2); + if(Path[strlen(Path)-1] == '\\') Path[strlen(Path)-1] = 0; + if(RelPath) strcpy(RelPath, Buff2); + } + else + { + SetupGetTargetPath(hInf, 0, 0, Path, MAX_PATH, 0); + if(RelPath) strcpy(RelPath, Buff2); + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func QueryTargetPath + * Funktion: QueryTargetPath + * Aufgabe.: oeffnet dialog, in dem zielverzeichnis gewaehlt werden kann + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int QueryTargetPath(HWND hwnd, /* handle des owner-dialogs */ + char* Path, /* puffer fuer pfad */ + char* RelPath /* optional: relativ-pfad */ + ) +{ + int rc; + LPMALLOC pIMalloc; + BROWSEINFO BrowseInfo; + ITEMIDLIST* pItemIdList; + char buff[MAX_PATH], buff2[MAX_PATH]; + HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); + + if(SHGetMalloc(&pIMalloc) != NOERROR) return 0; + + LoadString(hInstance, STR_BROWSETITLE, buff, sizeof(buff)); + + BrowseInfo.hwndOwner = hwnd; + BrowseInfo.pidlRoot = 0; + BrowseInfo.pszDisplayName = buff2; + BrowseInfo.lpszTitle = buff; + BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS; + BrowseInfo.lpfn = 0; + BrowseInfo.lParam = 0; + BrowseInfo.iImage = 0; + + pItemIdList = (ITEMIDLIST*)SHBrowseForFolder(&BrowseInfo); + if(pItemIdList) + { + rc = SHGetPathFromIDList(pItemIdList,Path); + pIMalloc->lpVtbl->Free(pIMalloc, pItemIdList); + pIMalloc->lpVtbl->Release(pIMalloc); + if(!rc) return 0; + + if(!RelPath) return 1; + if(RelPath[0] == '\\') RelPath++; + if(!strlen(RelPath)) return 1; + + if(strrchr(Path,'\\') && !strcmp(strrchr(Path,'\\')+1,RelPath)) + return 1; + if(Path[strlen(Path)-1] != '\\') strcat(Path, "\\"); + strcat(Path, RelPath); + + return 1; + } + + return 0; +} + +/* ------------------------------------------------------------------------ + * $Func QueryApplPath + * Funktion: QueryApplPath + * Aufgabe.: liefert den pfad des applikations-verzeichnisses + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int QueryApplPath(char* Path) /* puffer fuer den pfad */ +{ + int rc; + HKEY key; + LONG type; + LONG buffsize; + char buff[MAX_PATH]; + + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\" + "CurrentVersion",0,KEY_READ,&key) != ERROR_SUCCESS) return 0; + + buffsize = sizeof(buff); + rc = RegQueryValueEx(key, "ProgramFilesDir", 0, &type, buff, &buffsize); + RegCloseKey(key); + if(rc != ERROR_SUCCESS) return 0; + + if(type == REG_EXPAND_SZ) + ExpandEnvironmentStrings(buff, Path, MAX_PATH); + else if(type == REG_SZ) + strncpy(Path, buff, MAX_PATH-1), Path[MAX_PATH-1] = 0; + else return 0; + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func QueryStartMenuProgramFolder + * Funktion: QueryStartMenuProgramFolder + * Aufgabe.: liefert den pfad des Programm-Ordners im Start-Menue + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int QueryStartMenuProgramFolder(char* Path, /* puffer fuer den pfad */ + char* Where /* wo */ + ) +{ + int rc; + char buff[256]; + LONG type, buffsize; + HKEY hKeyCU = 0, hKeyLM = 0; + + RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows" + "\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_READ, &hKeyCU); + RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows" + "\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_READ, &hKeyLM); + + if(!hKeyCU && !hKeyLM) return 0; + buffsize = sizeof(buff); + + if(!stricmp(Where,"CDSK")) + { + if(hKeyLM) + rc = RegQueryValueEx(hKeyLM, "Common Desktop", 0, &type, buff, &buffsize); + if(!hKeyLM || (rc != ERROR_SUCCESS && hKeyCU)) + rc = RegQueryValueEx(hKeyCU, "Desktop", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"CPRG")) + { + if(hKeyLM) + rc = RegQueryValueEx(hKeyLM, "Common Programs", 0, &type, buff, &buffsize); + if(!hKeyLM || (rc != ERROR_SUCCESS && hKeyCU)) + rc = RegQueryValueEx(hKeyCU, "Programs", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"CSTM")) + { + if(hKeyLM) + rc = RegQueryValueEx(hKeyLM, "Common Start Menu", 0, &type, buff, &buffsize); + if(!hKeyLM || (rc != ERROR_SUCCESS && hKeyCU)) + rc = RegQueryValueEx(hKeyCU, "Start Menu", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"CSTU")) + { + if(hKeyLM) + rc = RegQueryValueEx(hKeyLM, "Common Startup", 0, &type, buff, &buffsize); + if(!hKeyLM || (rc != ERROR_SUCCESS && hKeyCU)) + rc = RegQueryValueEx(hKeyCU, "Startup", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"UDSK")) + { + if(hKeyCU) + rc = RegQueryValueEx(hKeyCU, "Desktop", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"UPRG")) + { + if(hKeyCU) + rc = RegQueryValueEx(hKeyCU, "Programs", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"USTM")) + { + if(hKeyCU) + rc = RegQueryValueEx(hKeyCU, "Start Menu", 0, &type, buff, &buffsize); + } + else if(!stricmp(Where,"USTU")) + { + if(hKeyCU) + rc = RegQueryValueEx(hKeyCU, "Startup", 0, &type, buff, &buffsize); + } + else rc = !ERROR_SUCCESS; + + if(hKeyCU) RegCloseKey(hKeyCU); + if(hKeyLM) RegCloseKey(hKeyLM); + + if(rc != ERROR_SUCCESS) return 0; + + if(type == REG_SZ) + { + strncpy(Path, buff, MAX_PATH-1); + Path[MAX_PATH-1] = 0; + return 1; + } + if(type == REG_EXPAND_SZ) + { + ExpandEnvironmentStrings(buff,Path,MAX_PATH); + return 1; + } + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func QuerySetupExePath + * Funktion: QuerySetupExePath + * Aufgabe.: liefert den pfad zur installierten setup.exe + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int QuerySetupExePath(HINF hInf, /* handle der inf-datei */ + char* Section, /* install-section */ + char* Path /* puffer fuer pfad */ + ) +{ + int Idx = 1; + char CopySect[256], File[256]; + INFCONTEXT infCont1, infCont2; + + if(SetupFindFirstLine(hInf,Section,"CopyFiles",&infCont1)) + { + while(SetupGetStringField(&infCont1,Idx++,CopySect,sizeof(CopySect),0)) + { + if(!SetupFindFirstLine(hInf,CopySect,0,&infCont2)) continue; + do + { + if(!SetupGetStringField(&infCont2,1,File,sizeof(File),0)) continue; + if(stricmp(File,EXENAME)) continue; + if(SetupGetTargetPath(hInf,&infCont2,0,Path,MAX_PATH,0)) + { + strcat(Path,"\\"); + strcat(Path,EXENAME); + return 1; + } + } + while(SetupFindNextLine(&infCont2,&infCont2)); + } + } + + return 0; +} + + +/* ------------------------------------------------------------------------ + * $Func GetFileCount + * Funktion: GetFileCount + * Aufgabe.: zaehlt dateien in einem verzeichnis + * Resultat: anzahl dateien + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetFileCount(char* Path) /* verzeichnis-name */ +{ + int Cnt = 0; + HANDLE hFind; + char Buff[MAX_PATH]; + WIN32_FIND_DATA Find; + + sprintf(Buff, "%s\\*", Path); + + hFind = FindFirstFile(Buff,&Find); + if(hFind == INVALID_HANDLE_VALUE) return 0; + + do + { + if(Find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; + else Cnt++; + } + while(FindNextFile(hFind,&Find)); + + FindClose(hFind); + + return Cnt; +} + + +/* ------------------------------------------------------------------------ + * $Func DelayFileDelete + * Funktion: DelayFileDelete + * Aufgabe.: markiert eine datei zum loeschen beim naechsten systemstart + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DelayFileDelete(char* File) /* datei-name */ +{ + int Size; + char Ini[256]; + char Name[256]; + char Buff[1024]; + + if(IS_WINNT) MoveFileEx(File, 0, MOVEFILE_DELAY_UNTIL_REBOOT); + else + { + GetWindowsDirectory(Ini, sizeof(Ini)); + strcat(Ini, "\\wininit.ini"); + GetShortPathName(File, Name, sizeof(Name)); + Size = GetPrivateProfileSection("Rename", Buff, sizeof(Buff), Ini); + sprintf(Buff + Size, "NUL=%s%c", Name, 0); + WritePrivateProfileSection("Rename", Buff, Ini); + } + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func DelayDirDelete + * Funktion: DelayDirDelete + * Aufgabe.: markiert ein verzeichnis zum loeschen beim naechsten systemstart + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int DelayDirDelete(char* Dir) /* verzeichnis-name */ +{ + if(IS_WINNT) MoveFileEx(Dir, 0, MOVEFILE_DELAY_UNTIL_REBOOT); + else return 0; /* unter 95 nicht moeglich */ + + return 1; +} + +/* ------------------------------------------------------------------------ + * $Func CenterWindow + * Funktion: CenterWindow + * Aufgabe.: zentriert ein fenster relativ zu einem anderen. + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int CenterWindow(HWND hwndChild, /* zu zentrierendes fenster */ + HWND hwndParent /* relatives fenster */ + ) +{ + + int xNew, yNew; + int wChild, hChild, wParent, hParent; + RECT rChild, rParent, rWorkArea; + + if(!GetWindowRect(hwndChild,&rChild)) return 0; + wChild = rChild.right - rChild.left; + hChild = rChild.bottom - rChild.top; + + if(!GetWindowRect(hwndParent,&rParent)) + GetWindowRect(GetDesktopWindow(),&rParent); + wParent = rParent.right - rParent.left; + hParent = rParent.bottom - rParent.top; + + if(!SystemParametersInfo(SPI_GETWORKAREA, + sizeof(rWorkArea), &rWorkArea, 0)) + { + rWorkArea.left = rWorkArea.top = 0; + rWorkArea.right = GetSystemMetrics(SM_CXSCREEN); + rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + xNew = rParent.left + ((wParent - wChild) / 2); + if(xNew < rWorkArea.left) xNew = rWorkArea.left; + else if((xNew+wChild) > rWorkArea.right) xNew = rWorkArea.right - wChild; + + yNew = rParent.top + ((hParent - hChild) / 2); + if(yNew < rWorkArea.top) yNew = rWorkArea.top; + else if ((yNew+hChild) > rWorkArea.bottom) yNew = rWorkArea.bottom - hChild; + + return SetWindowPos(hwndChild,0,xNew,yNew,0,0,SWP_NOSIZE|SWP_NOZORDER); + +} + + +/* ------------------------------------------------------------------------ + * $Func EnumResLangProc + * Funktion: EnumResLangProc + * Aufgabe.: callback-funktion fuer GetResourceLanguages + * Resultat: immer TRUE + * Hinweis.: + * ------------------------------------------------------------------------ */ +BOOL EnumResLangProc(HANDLE hModule, /* resource-module handle */ + LPCTSTR lpszType, /* zeiger auf resource-typ */ + LPCTSTR lpszName, /* zeiger auf resource-name */ + WORD wIDLanguage, /* microsoft language-ID */ + LONG lParam /* von EnumResourceLanguages */ + ) +{ + + (*((LANGID**)lParam))[0] = wIDLanguage; + (*((LANGID**)lParam))[1] = 0; + (*((LANGID**)lParam))++; + return 1; + +} + +/* ------------------------------------------------------------------------ + * $Func GetResourceLanguages + * Funktion: GetResourceLanguages + * Aufgabe.: liefert alle sprachen, die in den resourcen verfuegbar sind + * Resultat: vektor von LANGID's, das ende wird durch 0 gekennzeichnet + * Hinweis.: + * ------------------------------------------------------------------------ */ +LANGID* GetResourceLanguages(char* res_id /* resource-name oder -id */ + ) +{ + + static LANGID lang[256]; + LANGID* pLang = lang; + + lang[0] = 0; + EnumResourceLanguages(0, RT_DIALOG, res_id, + (ENUMRESLANGPROC)EnumResLangProc, (LONG)&pLang); + return lang; + +} + +/* ------------------------------------------------------------------------ + * $Func GetSystemLanguage + * Funktion: GetSystemLanguage + * Aufgabe.: liefert die sprache der installierten windows-version + * Resultat: LANGID: microsoft-language-identifier + * Hinweis.: die sprache hat nichts mit dem land zu tun, das als 'current + * locale' im control-panel eingestellt ist! es ist lediglich die + * sprache der windows-installation. + * ------------------------------------------------------------------------ */ +LANGID GetSystemLanguage() +{ + HKEY hKey; + LANGID iLangID; + char cLocale[16]; + HINSTANCE hKrnlDll; + int iResult, iType, iSize; + LANGID (APIENTRY *GetUserDefaultUILanguage)(void); + + iLangID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); + + if(IS_WIN2K) + { + hKrnlDll = LoadLibrary("kernel32.dll"); + if(!hKrnlDll) return iLangID; + + GetUserDefaultUILanguage = (LANGID(APIENTRY*)(void)) + GetProcAddress(hKrnlDll, "GetUserDefaultUILanguage"); + if(!GetUserDefaultUILanguage) + { + FreeLibrary(hKrnlDll); + return iLangID; + } + + iLangID = GetUserDefaultUILanguage(); + } + else if(IS_WINNT) + { + iResult = RegOpenKeyEx(HKEY_USERS, + ".DEFAULT\\Control Panel\\International", 0, KEY_READ, &hKey); + + if(iResult == ERROR_SUCCESS) + { + iSize = sizeof(cLocale); + iResult = RegQueryValueEx(hKey, "Locale", 0, &iType, cLocale, &iSize); + + if(iResult == ERROR_SUCCESS && iType == REG_SZ) + iLangID = LANGIDFROMLCID(strtoul(cLocale,0,16)); + + RegCloseKey(hKey); + } + } + else + { + iResult = RegOpenKeyEx(HKEY_CURRENT_USER, + "Control Panel\\Desktop\\ResourceLocale", 0, KEY_READ, &hKey); + + if(iResult == ERROR_SUCCESS) + { + iSize = sizeof(cLocale); + iResult = RegQueryValueEx(hKey, 0, 0, &iType, cLocale, &iSize); + + if(iResult == ERROR_SUCCESS && iType == REG_SZ) + iLangID = LANGIDFROMLCID(strtoul(cLocale,0,16)); + + RegCloseKey(hKey); + } + } + + return iLangID; +} + +/* ------------------------------------------------------------------------ + * $Func GetDefaultLanguage + * Funktion: GetDefaultLanguage + * Aufgabe.: liefert einen default-wert fuer die sprache des programms + * Resultat: LANGID: microsoft language-identifier + * Hinweis.: der default-wert wird abhaengig von der sprache der + * installierten windows-version und den verfuegbaren sprachen + * in den resourcen gewaehlt + * ------------------------------------------------------------------------ */ +LANGID GetDefaultLanguage(char* res_id) /* resource-name oder -id */ +{ + + int i; + LANGID DefLang; + LANGID* pResLang; + + DefLang = GetSystemLanguage(); + pResLang = GetResourceLanguages(res_id); + + for(i = 0; pResLang[i]; i++) + if(pResLang[i] == DefLang) + return pResLang[i]; + + for(i = 0; pResLang[i]; i++) + if(PRIMARYLANGID(pResLang[i]) == PRIMARYLANGID(DefLang)) + return pResLang[i]; + + return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); + +} + +/* ------------------------------------------------------------------------ + * $Func GetMultiString + * Funktion: GetMultiString + * Aufgabe.: holt einen string aus mehreren aufeinanderfolgenden strings + * Resultat: zeiger auf den gesuchten string + * Hinweis.: + * ------------------------------------------------------------------------ */ +char* GetMultiString(const char* c, /* zeiger auf mehrere strings */ + int index) /* indes des gesuchten strings */ +{ + if(!c) return 0; + + while(index--) + { + c += strlen(c) + 1; + if(!*c) return 0; + } + + return (char*)c; +} + +/* ------------------------------------------------------------------------ + * $Func InsertMultiString + * Funktion: InsertMultiString + * Aufgabe.: fuegt einen string in einen multi-string ein + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int InsertMultiString(char* c, /* zeiger auf mehrere strings */ + char* s, /* einzufuegender string */ + int index) /* index zum einfuegen */ +{ + if(index < 0) index = CountMultiStrings(c); + + while(index--) + { + c += strlen(c) + 1; + if(!*c) break; + } + + memmove(c+strlen(s)+1, c, GetMultiStringLength(c)); + memcpy(c, s, strlen(s)+1); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func RemoveMultiString + * Funktion: RemoveMultiString + * Aufgabe.: loescht einen string aus einen multi-string + * Resultat: TRUE wenn erfolgreich + * Hinweis.: + * ------------------------------------------------------------------------ */ +int RemoveMultiString(char* c, /* zeiger auf mehrere strings */ + int index) /* index zum loeschen */ +{ + char* p; + + c = GetMultiString(c, index); + if(!c) return 0; + + p = c + strlen(c) + 1; + memmove(c, p, GetMultiStringLength(p)); + + return 1; +} + + +/* ------------------------------------------------------------------------ + * $Func CountMultiStrings + * Funktion: CountMultiStrings + * Aufgabe.: zaehlt mehrere aufeinaderfolgende strings + * Resultat: anzahl strings + * Hinweis.: + * ------------------------------------------------------------------------ */ +int CountMultiStrings(const char* c) +{ + int count = 0; + + while(GetMultiString(c,count)) count++; + + return count; +} + + +/* ------------------------------------------------------------------------ + * $Func FindMultiString + * Funktion: FindMultiString + * Aufgabe.: sucht in einem multi-string nach einem bestimmten string + * Resultat: index wenn gefunden, sonst -1 + * Hinweis.: + * ------------------------------------------------------------------------ */ +int FindMultiString(const char* c, /* zeiger auf multi-string */ + const char* s /* zu suchender string */ + ) +{ + const char* p; + int index = 0; + + while(p = GetMultiString(c,index)) + if(!strcmp(p,s)) return index; + else index++; + + return -1; +} + + +/* ------------------------------------------------------------------------ + * $Func GetMultiStringLength + * Funktion: GetMultiStringLength + * Aufgabe.: ermittelt die gesammt-laenge eines multi-string + * Resultat: gesamtlaenge aller strings mit allen null-terminatoren + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetMultiStringLength(const char* c) /* zeiger auf multi-string */ +{ + const char* p = c; + + if(!*p) p++; + else while(*p) p += strlen(p)+1; + + return (p-c)+1; +} + + +/* ------------------------------------------------------------------------ + * $Func GetComCtlVersion + * Funktion: GetComCtlVersion + * Aufgabe.: version von comctl32.dll abfragen + * Resultat: keins + * Hinweis.: + * ------------------------------------------------------------------------ */ +int GetComCtlVersion(DWORD* pMajor, DWORD* pMinor) +{ + HINSTANCE hComCtl; + DWORD VerInf[5]; + FARPROC DllGetVersion; + + memset(&VerInf, 0, sizeof(VerInf)); + VerInf[0] = sizeof(VerInf); + + hComCtl = LoadLibrary("comctl32.dll"); + + if(!hComCtl) return 0; + + DllGetVersion = GetProcAddress(hComCtl, "DllGetVersion"); + + if(!DllGetVersion || DllGetVersion(&VerInf)) + *pMajor = 4, *pMinor = 0; + else + *pMajor = VerInf[1], *pMinor = VerInf[2]; + + FreeLibrary(hComCtl); + + return 1; +} + +/* ------------------------------------------------------------------------ + * $Func ErrorMessageBox + * Funktion: ErrorMessageBox + * Aufgabe.: zeigt eine message-box mit beschreibung eines api-errors an + * ------------------------------------------------------------------------ */ +int ErrorMessageBox(HWND hwndOwner, /* owner-window */ + char* pText, /* fehler-text */ + int iErrCode) /* von GetLastError() */ +{ + char* pMsg; + char cText[256]; + + if(iErrCode) + { + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| + FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, + 0, iErrCode, AppLang, (char*)&pMsg, 0, 0); + sprintf(cText, "%s\r\n\r\n%s", pText, pMsg); + LocalFree(pMsg); + } + else strcpy(cText, pText); + + MessageBox(hwndOwner, cText, 0, MB_OK|MB_ICONERROR); + + return 0; +} + +/* ------------------------------------------------------------------------ + * @Function: MakeWizardBmp + * @Info : Erzeugt Watermark/Header-Bitmap fuer den Wizard97 + * @Result : handle des neuen Bitmaps + * ------------------------------------------------------------------------ */ +HBITMAP MakeWizardBmp(HWND hwnd, /* irgendein fenster-handle */ + HBITMAP hBmpOrg, /* original-wizard-bitmap */ + int iSizeX, /* hoehe des neuen bitmaps */ + int iSizeY, /* breite des neuen bitmaps */ + int iOffsX, /* position des wizard-bitmaps */ + int iOffsY) /* position des wizard-bitmaps */ +{ + RECT sRcHlp; + BITMAP sBmp; + HBITMAP hBmpNew; + HGDIOBJ hOldObj1, hOldObj2; + HDC hDcWnd, hDcTmp1, hDcTmp2; + + GetObject(hBmpOrg, sizeof(sBmp), &sBmp); /* groesse des original-bitmaps */ + + hDcWnd = GetDC(hwnd); /* fenster-dc holen */ + hDcTmp1 = CreateCompatibleDC(hDcWnd); /* zwei kompatible temporaer- */ + hDcTmp2 = CreateCompatibleDC(hDcWnd); /* dc's erzeugen */ + hBmpNew = CreateCompatibleBitmap(hDcWnd, /* neues bitmap in der */ + iSizeX, iSizeY); /* gefordeten groesse erzeugen */ + + hOldObj1 = SelectObject(hDcTmp1,hBmpNew); /* quell- und ziel-bitmap in */ + hOldObj2 = SelectObject(hDcTmp2,hBmpOrg); /* die temp-dc's selektieren */ + + sRcHlp.left = sRcHlp.top = 0; /* rect-struktur mit kompleter */ + sRcHlp.right = iSizeX; /* groesse des neuen bitmaps */ + sRcHlp.bottom = iSizeY; /* initialisieren */ + + FillRect(hDcTmp1, &sRcHlp, (HBRUSH)(COLOR_WINDOW+1)); /* rechteck fuellen */ + BitBlt(hDcTmp1, iOffsX, iOffsY, sBmp.bmWidth, /* org-bmp an gewuenschte */ + sBmp.bmHeight, hDcTmp2, 0, 0, SRCCOPY); /* position blitten */ + + SelectObject(hDcTmp1, hOldObj1); /* temporaer-dc's saubermachen */ + SelectObject(hDcTmp2, hOldObj2); + + DeleteDC(hDcTmp1); /* temporaer-dc's loeschen */ + DeleteDC(hDcTmp2); + + ReleaseDC(hwnd, hDcWnd); /* fenster-dc freigeben */ + + return hBmpNew; +} + +/* ------------------------------------------------------------------------ + * @Function: InitWizardData + * @Info : Laedt diverse Resourcen (Icons, Fonts, Texte) fuer den Wizard + * @Result : TRUE wenn erfolgreich + * ------------------------------------------------------------------------ */ +int InitWizardData(HINSTANCE hInstance, tWizardData* pData) +{ + HDC hDc; + LOGFONT sFont; + int iLogPixelsY; + + hDc = GetDC(0); + iLogPixelsY = GetDeviceCaps(hDc, LOGPIXELSY); + ReleaseDC(0, hDc); + + memset(&sFont, 0, sizeof(sFont)); + strcpy(sFont.lfFaceName, "MS Shell Dlg"); + sFont.lfWeight = FW_BOLD; + + sFont.lfHeight = 0 - MulDiv(12, iLogPixelsY, 72); + pData->hWelcomeTitleFont = CreateFontIndirect(&sFont); + sFont.lfHeight = 0 - MulDiv(8, iLogPixelsY, 72); + pData->hHeaderTitleFont = CreateFontIndirect(&sFont); + + pData->hImgLst = ImageList_LoadBitmap(hInstance, + MAKEINTRESOURCE(ID_BMPLIST), 16, 0, 0x00808000); + + pData->hSmInfoIcon = ImageList_GetIcon(pData->hImgLst, 70, ILD_NORMAL); + pData->hSmAlertIcon = ImageList_GetIcon(pData->hImgLst, 69, ILD_NORMAL); + + LoadString(hInstance, STR_INSTALLTITLE, + pData->cWelcomeTitle, sizeof(pData->cWelcomeTitle)); + LoadString(hInstance, STR_INSTALLTEXT, + pData->cWelcomeText, sizeof(pData->cWelcomeText)); + + LoadString(hInstance, STR_WIZ97_P2TITLE, + pData->cPage2HdrTitle, sizeof(pData->cPage2HdrTitle)); + LoadString(hInstance, STR_WIZ97_P2SUBTITLE, + pData->cPage2HdrSubTitle, sizeof(pData->cPage2HdrSubTitle)); + + LoadString(hInstance, STR_WIZ97_P3TITLE, + pData->cPage3HdrTitle, sizeof(pData->cPage3HdrTitle)); + LoadString(hInstance, STR_WIZ97_P3SUBTITLE, + pData->cPage3HdrSubTitle, sizeof(pData->cPage3HdrSubTitle)); + + LoadString(hInstance, STR_WIZ97_P4TITLE, + pData->cPage4HdrTitle, sizeof(pData->cPage4HdrTitle)); + LoadString(hInstance, STR_WIZ97_P4SUBTITLE, + pData->cPage4HdrSubTitle, sizeof(pData->cPage4HdrSubTitle)); + + return 1; +} + +/* ------------------------------------------------------------------------ + * @Function: FreeWizardData + * @Info : Gibt von InitWizardData() geladene Resourcen wieder frei + * @Result : TRUE wenn erfolgreich + * ------------------------------------------------------------------------ */ +int FreeWizardData(tWizardData* pData) +{ + DestroyIcon(pData->hSmInfoIcon); + DestroyIcon(pData->hSmAlertIcon); + + ImageList_Destroy(pData->hImgLst); + + DeleteObject(pData->hWelcomeTitleFont); + DeleteObject(pData->hHeaderTitleFont); + + return 1; +} + +/* ------------------------------------------------------------------------ + * @Function: LoadDlgTemplate + * @Info : Laedt eine Dialog-Resource und kopiert sie in den Speicher + * @Result : Zeiger auf DLGTEMPLATE + * ------------------------------------------------------------------------ */ +DLGTEMPLATE* LoadDlgTemplate(HINSTANCE hInstance, char* pszTemplate) +{ + HRSRC hRes; + UINT iResLen; + char* pResData; + DLGTEMPLATE* pDlgTemplate; + + hRes = FindResource(hInstance, pszTemplate, RT_DIALOG); + if(!hRes) return 0; + + iResLen = SizeofResource(hInstance, hRes); + pResData = (char*)LockResource(LoadResource(hInstance,hRes)); + + if(!pResData || !iResLen) + return 0; + + pDlgTemplate = (DLGTEMPLATE*)malloc(iResLen); + memcpy(pDlgTemplate, pResData, iResLen); + + return pDlgTemplate; +} + +/* ------------------------------------------------------------------------ + * @Function: FreeDlgTemplate + * @Info : Gibt den von LoadDlgTemplate() allokierten Speicher frei + * @Result : keins + * ------------------------------------------------------------------------ */ +void FreeDlgTemplate(DLGTEMPLATE* pDlgTemplate) +{ + free(pDlgTemplate); +} diff --git a/setup/source.win/setup.h b/setup/source.win/setup.h new file mode 100644 index 0000000..c51d37f --- /dev/null +++ b/setup/source.win/setup.h @@ -0,0 +1,66 @@ + +#ifndef SETUP_H +#define SETUP_H + +#define APPNAME "SETUP" +#define INFNAME "setup.inf" +#define EXENAME "setup.exe" + +#define ID_ICON 1 +#define ID_BMPLIST 2 +#define ID_BITMAP 3 +#define ID_WATERMARK 4 +#define ID_HEADER 5 + +#define IDD_WIZPAGE1 1100 +#define IDD_WIZPAGE2 1101 +#define IDD_WIZPAGE3 1102 +#define IDD_WIZPAGE4 1103 +#define IDD_WIZPAGE5 1104 +#define IDD_WIZPAGE6 1105 +#define IDD_WIZPAGE7 1106 +#define IDD_WIZ97PAGE1 1107 +#define IDD_WIZ97PAGE2 1108 +#define IDD_WIZ97PAGE3 1109 +#define IDD_WIZ97PAGE4 1110 +#define IDD_WIZ97PAGE5 1111 +#define IDD_WIZ97PAGE6 1112 +#define IDD_WIZ97PAGE7 1113 + +#define IDC_HDR_TITLE 1200 +#define IDC_HDR_SUBTITLE 1201 +#define IDC_TEXT1 1202 +#define IDC_TEXT2 1203 +#define IDC_TEXT3 1204 +#define IDC_STATIC 1205 +#define IDC_PRODLIST 1206 +#define IDC_TARGETDIR 1207 +#define IDC_BROWSE 1208 +#define IDC_PROGRESS 1209 + +#define STR_INSTALLTITLE 1300 +#define STR_INSTALLTEXT 1301 +#define STR_WIZ97_TITLE 1302 +#define STR_WIZ97_P2TITLE 1303 +#define STR_WIZ97_P2SUBTITLE 1304 +#define STR_WIZ97_P3TITLE 1305 +#define STR_WIZ97_P3SUBTITLE 1306 +#define STR_WIZ97_P4TITLE 1307 +#define STR_WIZ97_P4SUBTITLE 1308 +#define STR_INSTALLFAIL 1311 +#define STR_REMOVEFAIL 1312 +#define STR_WARNING 1313 +#define STR_VERSIONWARNING 1314 +#define STR_INFERROR 1315 +#define STR_BROWSETITLE 1316 +#define STR_STOPSERVICE 1317 +#define STR_COPYING 1318 +#define STR_DELETING 1319 +#define STR_REGISTRY 1320 +#define STR_SHORTCUTS 1321 +#define STR_STARTSERVICE 1322 +#define STR_CLOSE_BTN 1323 + + +#endif /* #ifndef SETUP_H */ + diff --git a/setup/source.win/setup.rc b/setup/source.win/setup.rc new file mode 100644 index 0000000..e170ef8 --- /dev/null +++ b/setup/source.win/setup.rc @@ -0,0 +1,2564 @@ + +#include +#include +#include "setup.h" + +#ifndef APSTUDIO_INVOKED +ID_ICON ICON RES_MAIN_ICON +ID_WATERMARK BITMAP RES_NEWWIZ_WATER1 +ID_HEADER BITMAP RES_NEWWIZ_WATER2 +ID_BMPLIST BITMAP RES_IMGLST_BITMAP +#endif + +#ifdef APSTUDIO_INVOKED +#define TEXT_ENG_TITLE "TEXT_ENG_TITLE" +#define TEXT_ENG_INSTALL "TEXT_ENG_INSTALL" +#define TEXT_GER_TITLE "TEXT_GER_TITLE" +#define TEXT_GER_INSTALL "TEXT_GER_INSTALL" +#define TEXT_FRE_TITLE "TEXT_FRE_TITLE" +#define TEXT_FRE_INSTALL "TEXT_FRE_INSTALL" +#define TEXT_ITA_TITLE "TEXT_ITA_TITLE" +#define TEXT_ITA_INSTALL "TEXT_ITA_INSTALL" +#define TEXT_SPA_TITLE "TEXT_SPA_TITLE" +#define TEXT_SPA_INSTALL "TEXT_SPA_INSTALL" +#define TEXT_DUT_TITLE "TEXT_DUT_TITLE" +#define TEXT_DUT_INSTALL "TEXT_DUT_INSTALL" +#define TEXT_NOR_TITLE "TEXT_NOR_TITLE" +#define TEXT_NOR_INSTALL "TEXT_NOR_INSTALL" +#define TEXT_DAN_TITLE "TEXT_DAN_TITLE" +#define TEXT_DAN_INSTALL "TEXT_DAN_INSTALL" +#define TEXT_FIN_TITLE "TEXT_FIN_TITLE" +#define TEXT_FIN_INSTALL "TEXT_FIN_INSTALL" +#define TEXT_CZE_TITLE "TEXT_CZE_TITLE" +#define TEXT_CZE_INSTALL "TEXT_CZE_INSTALL" +#define TEXT_POL_TITLE "TEXT_POL_TITLE" +#define TEXT_POL_INSTALL "TEXT_POL_INSTALL" +#define TEXT_RUS_TITLE "TEXT_RUS_TITLE" +#define TEXT_RUS_INSTALL "TEXT_RUS_INSTALL" +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle englischen resourcen + * anmerkung: wenn eine neue sprache hinzugefuegt werden soll, einfach den + * kompletten block mit den englischen resourcen kopieren und am + * ende der datei wieder einfuegen. dann muessen nur noch die + * texte uebersetzt und die LANGUAGE-statements angepasst werden) + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_ENG_TITLE +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_ENG_TITLE + STR_INSTALLTEXT TEXT_ENG_INSTALL + STR_INSTALLFAIL "The installation did not complete successfully." + STR_REMOVEFAIL "The deinstallation did not complete successfully." + STR_WIZ97_P2TITLE "Software Components" + STR_WIZ97_P2SUBTITLE "Specify which software components you want to be installed during setup." + STR_WIZ97_P3TITLE "Target Directory" + STR_WIZ97_P3SUBTITLE "You can select a target directory where the software should be installed." + STR_WIZ97_P4TITLE "Carry out Installation" + STR_WIZ97_P4SUBTITLE "The installation can now be performed." + STR_WARNING "Warning" + STR_VERSIONWARNING "A more recent version of %s is currently installed on your system.\r\rDo you really want to replace the existing version?" + STR_INFERROR "There is an error in file %s, line %d. Installation can not continue." + STR_BROWSETITLE "Please select a target folder for installation:" + STR_STOPSERVICE "Stoping services ..." + STR_COPYING "Copying files ..." + STR_DELETING "Deleting files ..." + STR_REGISTRY "Updating registry ..." + STR_SHORTCUTS "Updating shortcuts ..." + STR_STARTSERVICE "Starting services ..." + STR_CLOSE_BTN "Close" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Place a checkmark beside each software component you want to install, or remove the checkmark to exclude it from installation.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Place a checkmark beside each software component you want to install, or remove the checkmark to exclude it from installation.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Please enter the target directory where the software should be installed. Or, search for the apropriate folder by clicking Browse.",IDC_TEXT1,21,37,275,16 + LTEXT "&Target directory:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "B&rowse...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Please enter the target directory where the software should be installed. Or, search for the apropriate folder by clicking Browse.",IDC_TEXT1,21,1,275,16 + LTEXT "&Target directory:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "B&rowse...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Setup is now ready to install the selected software.",-2,21,37,275,8 + LTEXT "Click on the Next button to start the installation.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Please keep your Microsoft Windows CD-ROM handy. Files from this CD may be required during the installation.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup is now ready to install the selected software.",-2,21,1,275,8 + LTEXT "Click on the Next button to start the installation.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Please keep your Microsoft Windows CD-ROM handy. Files from this CD may be required during the installation.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "The installation was successful.",-1,115,33,189,8 + LTEXT "Click Finish to exit Setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "A number of the updated files are currently in use. The system must therefore be restarted before the newly installed software can be used.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "The installation was successful.",-1,115,40,189,8 + LTEXT "Click Finish to exit Setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "A number of the updated files are currently in use. The system must therefore be restarted before the newly installed software can be used.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "You are about to remove the following software component from your computer:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Click Next to uninstall.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "You are about to remove the following software component from your computer:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Click Next to uninstall.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "The software was successfully removed.",-1,115,33,189,8 + LTEXT "Click Finish to exit Setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "You have to reboot your system to remove some files that are currently in use.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ENG_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "The software was successfully removed.",-1,115,40,189,8 + LTEXT "Click Finish to exit Setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "You have to reboot your system to remove some files that are currently in use.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle deutschen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_GER_TITLE +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_GER_TITLE + STR_INSTALLTEXT TEXT_GER_INSTALL + STR_INSTALLFAIL "Die Installation konnte nicht erfolgreich durchgeführt werden." + STR_REMOVEFAIL "Die Deinstallation konnte nicht erfolgreich durchgeführt werden." + STR_WIZ97_P2TITLE "Software-Komponenten" + STR_WIZ97_P2SUBTITLE "Wählen Sie die Software-Komponenten aus, die von Setup installiert werden sollen." + STR_WIZ97_P3TITLE "Zielverzeichnis" + STR_WIZ97_P3SUBTITLE "Wählen Sie das Zielverzeichnis, in welches die Software installiert werden soll." + STR_WIZ97_P4TITLE "Installation durchführen" + STR_WIZ97_P4SUBTITLE "Die Installation kann nun durchgeführt werden." + STR_WARNING "Warnung" + STR_VERSIONWARNING "Auf Ihrem System ist bereits eine neuere Version von %s vorhanden.\r\rSoll die vorhandene Version wirklich überschrieben werden?" + STR_INFERROR "Die Datei %s enthaelt in Zeile %d einen Fehler. Die Installation kann nicht fortgesetzt werden." + STR_BROWSETITLE "Wählen Sie ein Zielverzeichnis für die Installation aus:" + STR_STOPSERVICE "Dienste werden gestoppt ..." + STR_COPYING "Kopiere Dateien..." + STR_DELETING "Lösche Dateien..." + STR_REGISTRY "Bearbeite Registry ..." + STR_SHORTCUTS "Das Start-Menü wird aktualisiert..." + STR_STARTSERVICE "Dienste werden gestartet ..." + STR_CLOSE_BTN "Schließen" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Bitte markieren Sie die einzelnen Software-Komponenten, die installiert werden sollen. Entfernen Sie die Markierung um eine Komponente von der Installation auszuschließen.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Bitte markieren Sie die einzelnen Software-Komponenten, die installiert werden sollen. Entfernen Sie die Markierung um eine Komponente von der Installation auszuschließen.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Bitte geben Sie Verzeichnis ein, in das die Software installiert werden soll. Oder wählen Sie ein Verzeichnis aus, indem Sie auf Suchen klicken.",IDC_TEXT1,21,37,275,16 + LTEXT "Ziel&verzeichnis:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Suchen...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Bitte geben Sie Verzeichnis ein, in das die Software installiert werden soll. Oder wählen Sie ein Verzeichnis aus, indem Sie auf Suchen klicken.",IDC_TEXT1,21,1,275,16 + LTEXT "Ziel&verzeichnis:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Suchen...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Setup ist nun bereit, die von Ihnen ausgewählte Software zu installieren.",-2,21,37,275,8 + LTEXT "Klicken Sie auf 'Weiter', um die Installation zu beginnen.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Bitte halten Sie Ihre Microsoft Windows CD-ROM bereit. Während der Installation müssen möglicherweise einige Dateien von dieser CD kopiert werden.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup ist nun bereit, die von Ihnen ausgewählte Software zu installieren.",-2,21,1,275,8 + LTEXT "Klicken Sie auf 'Weiter', um die Installation zu beginnen.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Bitte halten Sie Ihre Microsoft Windows CD-ROM bereit. Während der Installation müssen möglicherweise einige Dateien von dieser CD kopiert werden.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Installation beendet",IDC_TEXT1,115,1,189,24 + LTEXT "Die Installation wurde erfolgreich durchgeführt.",-1,115,33,189,8 + LTEXT "Klicken Sie auf 'Fertigstellen', um Setup zu schließen.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Einige der aktualisierten Dateien sind zur Zeit in Benutzung, deshalb muß das System neu gestartet werden, bevor Sie die installierte Software verwenden können.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Installation beendet",IDC_TEXT1,115,8,189,24 + LTEXT "Die Installation wurde erfolgreich durchgeführt.",-1,115,40,189,8 + LTEXT "Klicken Sie auf 'Fertigstellen', um Setup zu schließen.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Einige der aktualisierten Dateien sind zur Zeit in Benutzung, deshalb muß das System neu gestartet werden, bevor Sie die installierte Software verwenden können.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Sie sind dabei, folgende Software-Komponente von Ihrem Computer zu entfernen:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Klicken Sie auf Weiter, um die Deinstallation durchzuführen.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Sie sind dabei, folgende Software-Komponente von Ihrem Computer zu entfernen:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Klicken Sie auf Weiter, um die Deinstallation durchzuführen.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Deinstallation beendet",IDC_TEXT1,115,1,189,24 + LTEXT "Die Deinstallation wurde erfolgreich durchgeführt.",-1,115,33,189,8 + LTEXT "Klicken Sie auf 'Fertigstellen', um Setup zu schließen.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Einige Dateien sind zur Zeit in Benutzung und werden erst beim nächsten Systemstart gelöscht.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_GER_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Deinstallation beendet",IDC_TEXT1,115,8,189,24 + LTEXT "Die Deinstallation wurde erfolgreich durchgeführt.",-1,115,40,189,8 + LTEXT "Klicken Sie auf 'Fertigstellen', um Setup zu schließen.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Einige Dateien sind zur Zeit in Benutzung und werden erst beim nächsten Systemstart gelöscht.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle franzoesichen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_FRE_TITLE +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_FRE_TITLE + STR_INSTALLTEXT TEXT_FRE_INSTALL + STR_INSTALLFAIL "L'installation n'a pas pu ętre effectuée correctement." + STR_REMOVEFAIL "La désinstallation n'a pas pu ętre effectuée correctement." + STR_WIZ97_P2TITLE "Composants logiciels" + STR_WIZ97_P2SUBTITLE "Sélectionnez les composants ŕ installer." + STR_WIZ97_P3TITLE "Répertoire d'installation" + STR_WIZ97_P3SUBTITLE "Vous pouvez sélectionner le répertoire dans lequel le logiciel doit ętre installé." + STR_WIZ97_P4TITLE "Installer" + STR_WIZ97_P4SUBTITLE "L'installation peut ętre effectuée maintenant." + STR_WARNING "Avertissement" + STR_VERSIONWARNING "Une nouvelle version de %s est déjŕ installée sur votre systčme.\r\rSouhaitez vous quand męme remplacer le version présente ?" + STR_INFERROR "Le fichier %s contient une erreur dans la ligne %d. L'installation est interrompue." + STR_BROWSETITLE "Sélectionnez le répertoire d'installation :" + STR_STOPSERVICE "Arręt des services ..." + STR_COPYING "Copier les fichiers ..." + STR_DELETING "Supprimer les fichiers ..." + STR_REGISTRY "Gestion de la base de registre ..." + STR_SHORTCUTS "Mise ŕ jour du menu de démarrage ..." + STR_STARTSERVICE "Lancement des services ..." + STR_CLOSE_BTN "Fermer" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Sélectionnez les composants ŕ installer. Pour exclure un composant de l'installation, supprimez la sélection correspondante.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sélectionnez les composants ŕ installer. Pour exclure un composant de l'installation, supprimez la sélection correspondante.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Entrez le répertoire dans lequel le logiciel doit ętre installé. Ou sélectionnez un répertoire en cliquant sur Parcourir.",IDC_TEXT1,21,37,275,16 + LTEXT "Répertoire &cible :",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Parcourir...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Entrez le répertoire dans lequel le logiciel doit ętre installé. Ou sélectionnez un répertoire en cliquant sur Parcourir.",IDC_TEXT1,21,1,275,16 + LTEXT "Répertoire &cible :",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Parcourir...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Le logiciel d'installation est pręt ŕ installer les composants sélectionnés.",-2,21,37,275,8 + LTEXT "Cliquez sur 'Suivant' pour commencer l'installation.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Ayez votre CD-ROM Microsoft Windows ŕ portée de main. Pendant l'installation, certains fichiers de ce CD devront éventuellement ętre copiés sur le disque dur.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Le logiciel d'installation est pręt ŕ installer les composants sélectionnés.",-2,21,1,275,8 + LTEXT "Cliquez sur 'Suivant' pour commencer l'installation.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Ayez votre CD-ROM Microsoft Windows ŕ portée de main. Pendant l'installation, certains fichiers de ce CD devront éventuellement ętre copiés sur le disque dur.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "L'installation est terminée",IDC_TEXT1,115,1,189,24 + LTEXT "L'installation a été exécutée correctement.",-1,115,33,189,8 + LTEXT "Cliquez sur 'Terminer' pour fermer le logiciel d'installation.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Certains des fichiers mis ŕ jour sont en cours d'utilisation, c'est pourquoi vous devez redémarrer le systčme avant de pouvoir utiliser le logiciel installé.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "L'installation est terminée",IDC_TEXT1,115,8,189,24 + LTEXT "L'installation a été exécutée correctement.",-1,115,40,189,8 + LTEXT "Cliquez sur 'Terminer' pour fermer le logiciel d'installation.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Certains des fichiers mis ŕ jour sont en cours d'utilisation, c'est pourquoi vous devez redémarrer le systčme avant de pouvoir utiliser le logiciel installé.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Les composants suivants seront supprimés :",-1,115,33,189,8 + ICON "",IDC_STATIC,115,52,10,10 + LTEXT "",IDC_TEXT2,132,53,172,8 + LTEXT "Cliquez sur 'Suivant' pour procéder ŕ la désinstallation.",-2,115,73,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Les composants suivants seront supprimés :",-1,115,40,189,8 + ICON "",IDC_STATIC,115,59,10,10 + LTEXT "",IDC_TEXT2,132,60,172,8 + LTEXT "Cliquez sur 'Suivant' pour procéder ŕ la désinstallation.",-2,115,80,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "La désinstallation est terminée",IDC_TEXT1,115,1,189,24 + LTEXT "La désinstallation a été exécutée correctement.",-1,115,33,189,8 + LTEXT "Cliquez sur 'Terminer' pour fermer le logiciel d'installation.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Certains des fichiers sont en cours d'utilisation et ne seront effacés qu'aprčs le redémarrage du systčme.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FRE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "La désinstallation est terminée",IDC_TEXT1,115,8,189,24 + LTEXT "La désinstallation a été exécutée correctement.",-1,115,40,189,8 + LTEXT "Cliquez sur 'Terminer' pour fermer le logiciel d'installation.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Certains des fichiers sont en cours d'utilisation et ne seront effacés qu'aprčs le redémarrage du systčme.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle italienischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_ITA_TITLE +LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_ITA_TITLE + STR_INSTALLTEXT TEXT_ITA_INSTALL + STR_INSTALLFAIL "Il programma non č stato installato con successo." + STR_REMOVEFAIL "Il programma non č stato disinstallato con successo." + STR_WIZ97_P2TITLE "Componenti Software" + STR_WIZ97_P2SUBTITLE "Specifica quali componenti software desiderate installare durante il setup." + STR_WIZ97_P3TITLE "Directory di destinazione" + STR_WIZ97_P3SUBTITLE "Potete selezionare una directory di destinazione nella quale sarŕ installato il software." + STR_WIZ97_P4TITLE "Esegui l'installazione" + STR_WIZ97_P4SUBTITLE "L'installazione puň adesso essere eseguita." + STR_WARNING "Attenzione" + STR_VERSIONWARNING "Nel sistema č giŕ presente una versione piů nuova di %s.\r\rSovrascrivere veramente la versione giŕ esistente?" + STR_INFERROR "C'č un errore nel file %s, linea %d. L'installazione non puo' essere portata a termine." + STR_BROWSETITLE "Selezionate una directory di destinazione per l'installazione." + STR_STOPSERVICE "Arresto dei servizi..." + STR_COPYING "Copia dei file ..." + STR_DELETING "Cancellazione dei file ..." + STR_REGISTRY "Aggiornamento dei registri ..." + STR_SHORTCUTS "Aggiornamento dei collegamenti ..." + STR_STARTSERVICE "Avvio dei servizi ..." + STR_CLOSE_BTN "Chiusura" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Selezionate la casella di ogni componente software che desiderate installare, o desezionatela se desiderate escludere il componente dall'installazione..",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Selezionate la casella di ogni componente software che desiderate installare, o desezionatela se desiderate escludere il componente dall'installazione..",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Inserite la directory di destinazione all'interno della quale i file devono essere estratti. Se preferite, scegliete la directory premendo Sfoglia.",IDC_TEXT1,21,37,275,16 + LTEXT "&Directory di destinazione:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "S&foglia...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Inserite la directory di destinazione all'interno della quale i file devono essere estratti. Se preferite, scegliete la directory premendo Sfoglia.",IDC_TEXT1,21,1,275,16 + LTEXT "&Directory di destinazione:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "S&foglia...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Setup č adesso pronto per installare il software selezionato.",-2,21,37,275,8 + LTEXT "Cliccare su 'Avanti', per iniziare l'installazione.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Tenere a portata di mano il proprio CD-ROM di Microsoft Windows. Durante l'installazione potrebbe essere necessario copiare alcuni file da tale CD.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup č adesso pronto per installare il software selezionato.",-2,21,1,275,8 + LTEXT "Cliccare su 'Avanti', per iniziare l'installazione.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Tenere a portata di mano il proprio CD-ROM di Microsoft Windows. Durante l'installazione potrebbe essere necessario copiare alcuni file da tale CD.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "L'installazione č stata effettuata con successo.",-1,115,33,189,8 + LTEXT "Cliccare su 'Fine' per uscire dal setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Alcuni dei file aggiornati sono attualmente in uso. Per questo motivo, prima di poter usare il software installato, il sistema deve essere riavviato.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "L'installazione č stata effettuata con successo.",-1,115,40,189,8 + LTEXT "Cliccare su 'Fine' per uscire dal setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Alcuni dei file aggiornati sono attualmente in uso. Per questo motivo, prima di poter usare il software installato, il sistema deve essere riavviato.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Si stanno eliminando dal computer le seguenti componenti software:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Per effettuare la deinstallazione, cliccare su 'Avanti'.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Si stanno eliminando dal computer le seguenti componenti software:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Per effettuare la deinstallazione, cliccare su 'Avanti'.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "La deinstallazione č stata effettuata con successo.",-1,115,33,189,8 + LTEXT "Cliccare su 'Fine' per uscire dal setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Alcuni file sono attualmente in uso e verranno cancellati solo al prossimo avvio del sistema.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_ITA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "La deinstallazione č stata effettuata con successo.",-1,115,40,189,8 + LTEXT "Cliccare su 'Fine' per uscire dal setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Alcuni file sono attualmente in uso e verranno cancellati solo al prossimo avvio del sistema.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle spanischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_SPA_TITLE +LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_SPA_TITLE + STR_INSTALLTEXT TEXT_SPA_INSTALL + STR_INSTALLFAIL "La instalación no se ha podido completar con éxito." + STR_REMOVEFAIL "La desinstalación no se ha podido completar con éxito." + STR_WIZ97_P2TITLE "Componentes de software" + STR_WIZ97_P2SUBTITLE "Seleccione los componentes de software que desea instalar con setup." + STR_WIZ97_P3TITLE "Directorio de destino" + STR_WIZ97_P3SUBTITLE "Puede seleccionar el directorio de destino en el que desea instalar el software." + STR_WIZ97_P4TITLE "Proceder a la instalación" + STR_WIZ97_P4SUBTITLE "Ahora puede iniciar la instalación." + STR_WARNING "Warning" + STR_VERSIONWARNING "Dispone en su sistema de una versión más reciente de %s.\r\rżSobrescribir la versión disponible?" + STR_INFERROR "El archivo %s contiene un error en la línea %d. No es posible continuar con la instalación." + STR_BROWSETITLE "Seleccione un directorio de destino para la instalación:" + STR_STOPSERVICE "Servicios anulados ..." + STR_COPYING "Copiar archivos ..." + STR_DELETING "Borrar archivos ..." + STR_REGISTRY "Modificar registro ..." + STR_SHORTCUTS "Actualizando el menú de inicio ..." + STR_STARTSERVICE "Iniciando los servicios ..." + STR_CLOSE_BTN "Cerrar" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Por favor, marque los componentes de software que desea instalar. Elimine la marca para descartar un componente de su instalación ",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Por favor, marque los componentes de software que desea instalar. Elimine la marca para descartar un componente de su instalación ",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Introduzca el directorio en el que desea instalar el software o seleccione un directorio haciendo clic en Buscar.",IDC_TEXT1,21,37,275,16 + LTEXT "Directorio &de salida:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Buscar ...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Introduzca el directorio en el que desea instalar el software o seleccione un directorio haciendo clic en Buscar.",IDC_TEXT1,21,1,275,16 + LTEXT "Directorio &de salida:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Buscar ...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Setup está preparado para instalar el software seleccionado por usted.",-2,21,37,275,8 + LTEXT "Haga clic en 'Siguiente', para iniciar la instalación.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Por favor, tenga preparado el CD-ROM de Microsoft Windows. Posiblemente, durante la instalación han de ser copiados algunos datos de dicho CD.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup está preparado para instalar el software seleccionado por usted.",-2,21,1,275,8 + LTEXT "Haga clic en 'Siguiente', para iniciar la instalación.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Por favor, tenga preparado el CD-ROM de Microsoft Windows. Posiblemente, durante la instalación han de ser copiados algunos datos de dicho CD.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "La instalación se ha realizado correctamente.",-1,115,33,189,8 + LTEXT "Haga clic en 'Finalizar', para cerrar el programa Setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Algunos de los archivos actualizados están siendo utilizados, por lo que ha de reiniciar el sistema antes de poder utilizar el software instalado.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "La instalación se ha realizado correctamente.",-1,115,40,189,8 + LTEXT "Haga clic en 'Finalizar', para cerrar el programa Setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Algunos de los archivos actualizados están siendo utilizados, por lo que ha de reiniciar el sistema antes de poder utilizar el software instalado.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Está a punto de eliminar de su ordenador los siguientes componentes de software:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Haga clic en 'Siguiente', para proceder a la desinstalación.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Está a punto de eliminar de su ordenador los siguientes componentes de software:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Haga clic en 'Siguiente', para proceder a la desinstalación.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "La desinstalación se ha realizado correctamente.",-1,115,33,189,8 + LTEXT "Haga clic en 'Finalizar', para cerrar el programa Setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Algunos de los archivos están siendo utilizados y serán borrados la próxima vez que arranque el sistema.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_SPA_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "La desinstalación se ha realizado correctamente.",-1,115,40,189,8 + LTEXT "Haga clic en 'Finalizar', para cerrar el programa Setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Algunos de los archivos están siendo utilizados y serán borrados la próxima vez que arranque el sistema.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle niederlaendischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_DUT_TITLE +LANGUAGE LANG_DUTCH, SUBLANG_DUTCH + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_DUT_TITLE + STR_INSTALLTEXT TEXT_DUT_INSTALL + STR_INSTALLFAIL "De installatie is niet goed verlopen." + STR_REMOVEFAIL "De installatie ongedaan maken is niet goed verlopen." + STR_WIZ97_P2TITLE "Software-componenten" + STR_WIZ97_P2SUBTITLE "Selecteer de software-componenten die door Setup geďnstalleerd moeten worden." + STR_WIZ97_P3TITLE "Doeldirectory" + STR_WIZ97_P3SUBTITLE "U kunt de doeldirectory selecteren waarin de software geďnstalleerd moet worden." + STR_WIZ97_P4TITLE "Installatie uitvoeren" + STR_WIZ97_P4SUBTITLE "De installatie kan nu uitgevoerd worden." + STR_WARNING "Warning" + STR_VERSIONWARNING "Op uw systeem is reeds een nieuwere versie van %s aanwezig.\r\rMoet de aanwezige versie werkelijk overschreven worden?" + STR_INFERROR "Het bestand %s bevat in regel %d een fout. De installatie kan niet voortgezet worden." + STR_BROWSETITLE "Selecteer een doeldirectory voor de installatie:" + STR_STOPSERVICE "Diensten worden gestopt ..." + STR_COPYING "Bezig met kopieren van bestanden ..." + STR_DELETING "Bezig met wissen van bestanden ..." + STR_REGISTRY "Bezig met bewerken van Registry ..." + STR_SHORTCUTS "Het Start-menu wordt bijgewerkt ..." + STR_STARTSERVICE "Diensten worden gestart ..." + STR_CLOSE_BTN "Sluiten" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Markeer a.u.b. de afzonderlijke software-componenten die geďnstalleerd moeten worden. Verwijder de markering om een component van de installatie uit te sluiten.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Markeer a.u.b. de afzonderlijke software-componenten die geďnstalleerd moeten worden. Verwijder de markering om een component van de installatie uit te sluiten.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Voer a.u.b. de directory in waarin de software geďnstalleerd moet worden. Of selecteer een directory door op Zoeken te klikken.",IDC_TEXT1,21,37,275,16 + LTEXT "Doel&directory:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Zoeken ...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Voer a.u.b. de directory in waarin de software geďnstalleerd moet worden. Of selecteer een directory door op Zoeken te klikken.",IDC_TEXT1,21,1,275,16 + LTEXT "Doel&directory:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Zoeken ...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Setup is nu gereed, om de door u geselecteerde software te installeren.",-2,21,37,275,8 + LTEXT "Klik op 'Verder', om met de installatie te beginnen.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Houd a.u.b. uw Microsoft Windows CD-ROM bij de hand. Tijdens de installatie moeten mogelijkerwijs enkele bestanden van deze CD gekopieerd worden.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup is nu gereed, om de door u geselecteerde software te installeren.",-2,21,1,275,8 + LTEXT "Klik op 'Verder', om met de installatie te beginnen.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Houd a.u.b. uw Microsoft Windows CD-ROM bij de hand. Tijdens de installatie moeten mogelijkerwijs enkele bestanden van deze CD gekopieerd worden.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "De installatie werd met succes uitgevoerd.",-1,115,33,189,8 + LTEXT "Klik op 'Voltooien', om Setup te sluiten.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Enkele van de bijgewerkte bestanden zijn momenteel in gebruik, daarom moet het systeem opnieuw opgestart worden, voordat u de geďnstalleerde software kunt gebruiken.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "De installatie werd met succes uitgevoerd.",-1,115,40,189,8 + LTEXT "Klik op 'Voltooien', om Setup te sluiten.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Enkele van de bijgewerkte bestanden zijn momenteel in gebruik, daarom moet het systeem opnieuw opgestart worden, voordat u de geďnstalleerde software kunt gebruiken.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "U bent bezig, het volgende software-componente van uw computer te verwijderen:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Klik op 'Verder', om de de-installatie uit te voeren.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "U bent bezig, het volgende software-componente van uw computer te verwijderen:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Klik op 'Verder', om de de-installatie uit te voeren.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "De de-installatie werd met succes uitgevoerd.",-1,115,33,189,8 + LTEXT "Klik op 'Voltooien', om Setup te sluiten.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Enkele bestanden zijn momenteel in gebruik en worden pas bij de volgende systeemstart gewist.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DUT_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "De de-installatie werd met succes uitgevoerd.",-1,115,40,189,8 + LTEXT "Klik op 'Voltooien', om Setup te sluiten.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Enkele bestanden zijn momenteel in gebruik en worden pas bij de volgende systeemstart gewist.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle norwegischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_NOR_TITLE +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_NOR_TITLE + STR_INSTALLTEXT TEXT_NOR_INSTALL + STR_INSTALLFAIL "Installasjonen ble ikke fullfřrt." + STR_REMOVEFAIL "Avinstallasjonen ble ikke fullfřrt." + STR_WIZ97_P2TITLE "Programvarekomponenter" + STR_WIZ97_P2SUBTITLE "Angi hvilke programvarekomponenter du vil installere." + STR_WIZ97_P3TITLE "Mĺlkatalog" + STR_WIZ97_P3SUBTITLE "Du kan velge en mĺlkatalog der programvaren skal installeres." + STR_WIZ97_P4TITLE "Kjřr installasjonen" + STR_WIZ97_P4SUBTITLE "Du kan nĺ gjennomfřre installasjonen." + STR_WARNING "Advarsel" + STR_VERSIONWARNING "Det finnes allerede en nyere versjon av %s pĺ systemet.\r\rŘnsker du virkelig ĺ overskrive den eksisterende versjonen?" + STR_INFERROR "Det ble funnet en feil i filen %s, linje %d. Installasjonen kan ikke fortsette." + STR_BROWSETITLE "Velg en mĺlkatalog for installasjonen:" + STR_STOPSERVICE "Stopper tjenester ..." + STR_COPYING "Kopierer filer ..." + STR_DELETING "Sletter filer ..." + STR_REGISTRY "Oppdaterer register ..." + STR_SHORTCUTS "Oppdaterer snarveier ..." + STR_STARTSERVICE "Starter tjenester ..." + STR_CLOSE_BTN "Lukk" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Merk av de programvarenkomponentene du vil installere eller fjern merket for ĺ utelukke dem du ikke vil installere.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Merk av de programvarenkomponentene du vil installere eller fjern merket for ĺ utelukke dem du ikke vil installere.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Angi mĺlkatalogen der du vil at programvaren skal lagres. Eller bla deg frem til katalogen ved hjelp av Bla gjennom.",IDC_TEXT1,21,37,275,16 + LTEXT "&Mĺlkatalog:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Bla gjennom ...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Angi mĺlkatalogen der du vil at programvaren skal lagres. Eller bla deg frem til katalogen ved hjelp av Bla gjennom.",IDC_TEXT1,21,1,275,16 + LTEXT "&Mĺlkatalog:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Bla gjennom ...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Installasjonsprogrammet er nĺ klar til ĺ installere den valgte programvaren.",-2,21,37,275,8 + LTEXT "Klikk pĺ 'Neste' for ĺ begynne installasjonen.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Hold klar CD-ROM-platen med Microsoft Windows. Under installasjonen mĺ du eventuelt kopiere noen filer fra denne CDen.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Installasjonsprogrammet er nĺ klar til ĺ installere den valgte programvaren.",-2,21,1,275,8 + LTEXT "Klikk pĺ 'Neste' for ĺ begynne installasjonen.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Hold klar CD-ROM-platen med Microsoft Windows. Under installasjonen mĺ du eventuelt kopiere noen filer fra denne CDen.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "Installasjonen er fullfřrt.",-1,115,33,189,8 + LTEXT "Klikk pĺ 'Fullfřr' for ĺ avslutte installasjonsprogrammet.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Noen av de oppdaterte filene er for řyeblikket i bruk. Systemet mĺ derfor startes pĺ nytt fřr du kan bruke den installerte programvaren.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "Installasjonen er fullfřrt.",-1,115,40,189,8 + LTEXT "Klikk pĺ 'Fullfřr' for ĺ avslutte installasjonsprogrammet.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Noen av de oppdaterte filene er for řyeblikket i bruk. Systemet mĺ derfor startes pĺ nytt fřr du kan bruke den installerte programvaren.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Du er i ferd med ĺ slette fřlgende programvarekomponenter fra datamaskinen:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Klikk pĺ 'Neste' for ĺ gjennomfřre avinstallasjonen.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Du er i ferd med ĺ slette fřlgende programvarekomponenter fra datamaskinen:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Klikk pĺ 'Neste' for ĺ gjennomfřre avinstallasjonen.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "Avinstallasjonen er fullfřrt.",-1,115,33,189,8 + LTEXT "Klikk pĺ 'Fullfřr' for ĺ avslutte installasjonsprogrammet.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Noen av filene er i řyeblikket i bruk og blir fřrst slettet neste gang systemet startes.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_NOR_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "Avinstallasjonen er fullfřrt.",-1,115,40,189,8 + LTEXT "Klikk pĺ 'Fullfřr' for ĺ avslutte installasjonsprogrammet.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Noen av filene er i řyeblikket i bruk og blir fřrst slettet neste gang systemet startes.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle dänischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_DAN_TITLE +LANGUAGE LANG_DANISH, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_DAN_TITLE + STR_INSTALLTEXT TEXT_DAN_INSTALL + STR_INSTALLFAIL "Installationen mislykkedes." + STR_REMOVEFAIL "Afinstallationen mislykkedes." + STR_WIZ97_P2TITLE "Softwarekomponenter" + STR_WIZ97_P2SUBTITLE "Marker de softwarekomponenter, som installationsprogrammet skal installere." + STR_WIZ97_P3TITLE "Destinationsbibliotek" + STR_WIZ97_P3SUBTITLE "Du kan selv vćlge det destinationsbibliotek, som softwaren skal installeres i." + STR_WIZ97_P4TITLE "Gennemfřr installationen" + STR_WIZ97_P4SUBTITLE "Du kan nu gennemfřre installationen." + STR_WARNING "Advarsel" + STR_VERSIONWARNING "Der findes allerede en nyere version af %s pĺ systemet.\r\rŘnsker du virkelig at overskrive den eksisterende version?" + STR_INFERROR "Filen %s indeholder en fejl i linje %d. Installationen afbrydes." + STR_BROWSETITLE "Vćlg et destinationsbibliotek til brug i forbindelse med installationen:" + STR_STOPSERVICE "Tjenester afbrydes ..." + STR_COPYING "Kopierer filer..." + STR_DELETING "Sletter filer..." + STR_REGISTRY "Ćndrer registreringsdatabasen ..." + STR_SHORTCUTS "Startmenuen opdateres..." + STR_STARTSERVICE "Tjenester startes ..." + STR_CLOSE_BTN "Luk" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Marker de softwarekomponenter, der skal installeres. Fjern markeringen af en komponent, hvis den ikke skal installeres.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Marker de softwarekomponenter, der skal installeres. Fjern markeringen af en komponent, hvis den ikke skal installeres.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Angiv, i hvilket destinationsbibliotek softwaren skal installeres. Eller vćlg et bibliotek ved at klikke pĺ Sřg.",IDC_TEXT1,21,37,275,16 + LTEXT "Destinations&bibliotek:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Sřg...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Angiv, i hvilket destinationsbibliotek softwaren skal installeres. Eller vćlg et bibliotek ved at klikke pĺ Sřg.",IDC_TEXT1,21,1,275,16 + LTEXT "Destinations&bibliotek:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Sřg...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Installationsprogrammet er nu klar til at installere den valgte software.",-2,21,37,275,8 + LTEXT "Klik pĺ 'Nćste' for at begynde installationen.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Find din Microsoft Windows cd-rom frem. Under installationen skal der muligvis kopieres nogle filer fra denne cd.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Installationsprogrammet er nu klar til at installere den valgte software.",-2,21,1,275,8 + LTEXT "Klik pĺ 'Nćste' for at begynde installationen.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Find din Microsoft Windows cd-rom frem. Under installationen skal der muligvis kopieres nogle filer fra denne cd.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "Installationen er fuldfřrt.",-1,115,33,189,8 + LTEXT "Klik pĺ 'Udfřr' for at afslutte installationsprogrammet.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Nogle af de opdaterede filer bruges i řjeblikket. Systemet skal derfor genstartes, inden du kan bruge den installerede software.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "Installationen er fuldfřrt.",-1,115,40,189,8 + LTEXT "Klik pĺ 'Udfřr' for at afslutte installationsprogrammet.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Nogle af de opdaterede filer bruges i řjeblikket. Systemet skal derfor genstartes, inden du kan bruge den installerede software.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Du er ved at slette fřlgende softwarekomponenter fra computeren:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Klik pĺ Nćste for at gennemfřre deinstallationen.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Du er ved at slette fřlgende softwarekomponenter fra computeren:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Klik pĺ Nćste for at gennemfřre deinstallationen.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "Deinstallationen er fuldfřrt.",-1,115,33,189,8 + LTEXT "Klik pĺ 'Udfřr' for at afslutte installationsprogrammet.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Nogle af filerne bruges i řjeblikket og slettes fřrst, nćste gang systemet startes.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_DAN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "Deinstallationen er fuldfřrt.",-1,115,40,189,8 + LTEXT "Klik pĺ 'Udfřr' for at afslutte installationsprogrammet.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Nogle af filerne bruges i řjeblikket og slettes fřrst, nćste gang systemet startes.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle finnischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_FIN_TITLE +LANGUAGE LANG_FINNISH, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_FIN_TITLE + STR_INSTALLTEXT TEXT_FIN_INSTALL + STR_INSTALLFAIL "Asennus epäonnistui." + STR_REMOVEFAIL "Asennuksen poisto epäonnistui." + STR_WIZ97_P2TITLE "Ohjelmiston osat" + STR_WIZ97_P2SUBTITLE "Valitse, mitkä ohjelmiston osat haluat asentaa." + STR_WIZ97_P3TITLE "Kohdehakemisto" + STR_WIZ97_P3SUBTITLE "Valitse hakemisto, johon ohjelmisto asennetaan." + STR_WIZ97_P4TITLE "Asenna ohjelmisto" + STR_WIZ97_P4SUBTITLE "Voit nyt suorittaa asennusohjelman." + STR_WARNING "Varoitus" + STR_VERSIONWARNING "Järjestelmässäsi on jo asennettuna uudempi %s-ohjelman versio.\r\rHaluatko varmasti korvata aiemmin asennetun version?" + STR_INFERROR "Virhe tiedoston %s rivillä %d. Asennus ei voi jatkua." + STR_BROWSETITLE "Valitse kohdekansio asennusta varten:" + STR_STOPSERVICE "Keskeytetään palvelut..." + STR_COPYING "Kopioidaan tiedostoja..." + STR_DELETING "Poistetaan tiedostoja..." + STR_REGISTRY "Päivitetään rekisteritietoja..." + STR_SHORTCUTS "Päivitetään pikakuvakkeita..." + STR_STARTSERVICE "Aloitetaan palvelut..." + STR_CLOSE_BTN "Sulje" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Valitse asennettavat ohjelmiston osat. Jos poistat valintamerkin, kyseistä ohjelmiston osaa ei asenneta.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Valitse asennettavat ohjelmiston osat. Jos poistat valintamerkin, kyseistä ohjelmiston osaa ei asenneta.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Valitse kohdehakemisto, johon ohjelmisto asennetaan. Voit myös selata kansioita napsauttamalla Selaa-painiketta.",IDC_TEXT1,21,37,275,16 + LTEXT "Kohdehakemisto",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Selaa...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Valitse kohdehakemisto, johon ohjelmisto asennetaan. Voit myös selata kansioita napsauttamalla Selaa-painiketta.",IDC_TEXT1,21,1,275,16 + LTEXT "Kohdehakemisto",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Selaa...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Asennusohjelma on nyt valmis asentamaan valitsemasi ohjelman.",-2,21,37,275,8 + LTEXT "Napsauta 'Jatka'-painiketta aloittaaksesi asennuksen.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Pidä Microsoft Windows CD-levysi käsillä. Asennuksen aikana joudut mahdollisesti kopioimaan joitakin tiedostoja tältä CD:ltä.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Asennusohjelma on nyt valmis asentamaan valitsemasi ohjelman.",-2,21,1,275,8 + LTEXT "Napsauta 'Jatka'-painiketta aloittaaksesi asennuksen.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Pidä Microsoft Windows CD-levysi käsillä. Asennuksen aikana joudut mahdollisesti kopioimaan joitakin tiedostoja tältä CD:ltä.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "Asennus onnistui.",-1,115,33,189,8 + LTEXT "Napsauta 'Valmis'-painiketta sulkeaksesi asennusohjelman.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Jotkut päivitetyistä tiedostoista ovat tällä hetkellä käytössä, joten järjestelmä on käynnistettävä uudelleen, ennen kuin voit käyttää asennettua ohjelmaa.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "Asennus onnistui.",-1,115,40,189,8 + LTEXT "Napsauta 'Valmis'-painiketta sulkeaksesi asennusohjelman.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Jotkut päivitetyistä tiedostoista ovat tällä hetkellä käytössä, joten järjestelmä on käynnistettävä uudelleen, ennen kuin voit käyttää asennettua ohjelmaa.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Olet aikeissa poistaa tietokoneeltasi seuraavat ohjelmiston osat:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Napsauta 'Jatka' jatkaaksesi asennuksen purkua.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Olet aikeissa poistaa tietokoneeltasi seuraavat ohjelmiston osat:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Napsauta 'Jatka' jatkaaksesi asennuksen purkua.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "Asennuksen purku onnistui.",-1,115,33,189,8 + LTEXT "Napsauta 'Valmis'-painiketta sulkeaksesi asennusohjelman.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Jotkut tiedostot ovat tällä hetkellä käytössä, ja ne poistetaan vasta, kun järjestelmä käynnistetään seuraavan kerran.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_FIN_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "Asennuksen purku onnistui.",-1,115,40,189,8 + LTEXT "Napsauta 'Valmis'-painiketta sulkeaksesi asennusohjelman.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Jotkut tiedostot ovat tällä hetkellä käytössä, ja ne poistetaan vasta, kun järjestelmä käynnistetään seuraavan kerran.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle tschechischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_CZE_TITLE +LANGUAGE LANG_CZECH, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_CZE_TITLE + STR_INSTALLTEXT TEXT_CZE_INSTALL + STR_INSTALLFAIL "Instalace nemohla být úspěsně provedena." + STR_REMOVEFAIL "Odinstalování nemohlo být úspěsně provedeno." + STR_WIZ97_P2TITLE "SouŢßsti software" + STR_WIZ97_P2SUBTITLE "Vyberte souŢßsti software, kterÚ mß setup instalovat." + STR_WIZ97_P3TITLE "CÝlov˛ adresß°" + STR_WIZ97_P3SUBTITLE "M¨×ete vybrat cÝlov˛ adresß°, do kterÚho se mß instalovat software." + STR_WIZ97_P4TITLE "ProvÚst instalaci" + STR_WIZ97_P4SUBTITLE "Nyní můzete provést instalaci." + STR_WARNING "VarovßnÝ" + STR_VERSIONWARNING "Na VaÜem systÚmu je u× k dispozici novýjÜÝ verze %s.\r\rMß se existujÝcÝ verze skuteŢný p°epsat?" + STR_INFERROR "Soubor %s obsahuje v °ßdku %d chybu. Instalace nem¨×e pokraŢovat." + STR_BROWSETITLE "Vyberte cÝlov˛ adresß° pro instalaci:" + STR_STOPSERVICE "Slu×by se zastavujÝ..." + STR_COPYING "KopÝruji soubory..." + STR_DELETING "Ma×u soubory..." + STR_REGISTRY "Zpracovßvßm registry..." + STR_SHORTCUTS "Aktualizuje se startovacÝ menu..." + STR_STARTSERVICE "Slu×by se startujÝ..." + STR_CLOSE_BTN "Zav°Ýt" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "OznaŢte prosÝm jednotlivÚ softwarovÚ komponenty, kterÚ majÝ b˛t instalovßny. Odstra=te oznaŢenÝ, abyste komponent vylouŢili z instalace.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "OznaŢte prosÝm jednotlivÚ softwarovÚ komponenty, kterÚ majÝ b˛t instalovßny. Odstra=te oznaŢenÝ, abyste komponent vylouŢili z instalace.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Zadejte prosÝm adresß°, do kterÚho se mß software instalovat. Nebo vyberte adresß° tÝm, ×e kliknete na Hledat.",IDC_TEXT1,21,37,275,16 + LTEXT "CÝlov˛&adresß°:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Hledat...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Zadejte prosÝm adresß°, do kterÚho se mß software instalovat. Nebo vyberte adresß° tÝm, ×e kliknete na Hledat.",IDC_TEXT1,21,1,275,16 + LTEXT "CÝlov˛&adresß°:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Hledat...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Setup je nyní připravený instalovat Vámi vybraný software.",-2,21,37,275,8 + LTEXT "Klepněte na 'Dále', abyste zahájili instalaci.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Připravte si prosím Vás CD-ROM Microsoft Windows. Mozná, ze během instalace se budou muset kopírovat některé soubory z tohoto CD.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup je nyní připravený instalovat Vámi vybraný software.",-2,21,1,275,8 + LTEXT "Klepněte na 'Dále', abyste zahájili instalaci.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Připravte si prosím Vás CD-ROM Microsoft Windows. Mozná, ze během instalace se budou muset kopírovat některé soubory z tohoto CD.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "Instalace byla úspěsně provedena.",-1,115,33,189,8 + LTEXT "Klepněte na 'Dokončit', abyste uzavřeli Setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Některé z aktualizovaných souborů jsou v současné doběpouzívané, proto musí být systém nově nastartován, dříve nez budete moci instalovaný software pouzít.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "Instalace byla úspěsně provedena.",-1,115,40,189,8 + LTEXT "Klepněte na 'Dokončit', abyste uzavřeli Setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Některé z aktualizovaných souborů jsou v současné doběpouzívané, proto musí být systém nově nastartován, dříve nez budete moci instalovaný software pouzít.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Chcete odstranit následující součásti softwaru z Vaseho počítače:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Klepněte na 'Dále', abyste provedli odinstalování.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Chcete odstranit následující součásti softwaru z Vaseho počítače:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Klepněte na 'Dále', abyste provedli odinstalování.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "Odinstalování bylo úspěsně provedeno.",-1,115,33,189,8 + LTEXT "Klepněte na 'Dokončit', abyste uzavřeli Setup.",-2,115,48,189,8 + ICON "",IDC_STATIC,115,64,10,10,NOT WS_VISIBLE + LTEXT "Některé soubory jsou v současné době pouzívány a budou smazány teprve při přístím startu systému.",IDC_TEXT2,132,65,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_CZE_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "Odinstalování bylo úspěsně provedeno.",-1,115,40,189,8 + LTEXT "Klepněte na 'Dokončit', abyste uzavřeli Setup.",-2,115,55,189,8 + ICON "",IDC_STATIC,115,71,10,10,NOT WS_VISIBLE + LTEXT "Některé soubory jsou v současné době pouzívány a budou smazány teprve při přístím startu systému.",IDC_TEXT2,132,72,172,40,NOT WS_VISIBLE +END +#endif + +/* ------------------------------------------------------------------------ + * jetzt kommen alle polnischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_POL_TITLE +LANGUAGE LANG_POLISH, SUBLANG_NEUTRAL + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_POL_TITLE + STR_INSTALLTEXT TEXT_POL_INSTALL + STR_INSTALLFAIL "Instalacja nie mogła zostać pomyolnie przeprowadzona." + STR_REMOVEFAIL "Usunięcie zainstalowanych elementów nie mogło zostać pomyolnie przeprowadzone." + STR_WIZ97_P2TITLE "Komponenty oprogramowania" + STR_WIZ97_P2SUBTITLE "Nale+y wybraµ komponenty oprogramowania, ktľre maj¦ byµ zainstalowane przez program instalacyjny (setup)." + STR_WIZ97_P3TITLE "Katalog docelowy" + STR_WIZ97_P3SUBTITLE "Mo+na wybraµ katalog docelowy, do ktľrego oprogramowanie ma zostaµ zainstalowane." + STR_WIZ97_P4TITLE "Przeprowadzenie instalacji" + STR_WIZ97_P4SUBTITLE "Teraz można przeprowadzić instalację." + STR_WARNING "Ostrze+enie" + STR_VERSIONWARNING "W systemie jest ju+ obecna nowa wersja %s.\r\rCzy istniej¦ca wersja rzeczywiŁcie ma zostaµ zast¦piona?" + STR_INFERROR "Plik %s zawiera b¦¦d w linii %d. Instalacja nie mo+e byµ kontynuowana." + STR_BROWSETITLE "Nale+y wybraµ katalog docelowy dla przeprowadzenia instalacji:" + STR_STOPSERVICE "Us¦ugi zostaj¦ wstrzymane..." + STR_COPYING "KopiujŰ pliki..." + STR_DELETING "KasujŰ pliki..." + STR_REGISTRY "EdytujŰ rejestry..." + STR_SHORTCUTS "Menu Start jest aktualizowane..." + STR_STARTSERVICE "Us¦ugi zostaj¦ uruchomione..." + STR_CLOSE_BTN "ZamkniŰcie" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "ProszŰ zaznaczyµ poszczegľlne komponenty oprogramowania, ktľre maj¦ zostaµ zainstalowane. UsuniŰcie zaznaczenia powoduje wykluczenie danego komponentu z instalacji.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ProszŰ zaznaczyµ poszczegľlne komponenty oprogramowania, ktľre maj¦ zostaµ zainstalowane. UsuniŰcie zaznaczenia powoduje wykluczenie danego komponentu z instalacji.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "ProszŰ podaµ nazwŰ katalogu, do ktľrego oprogramowanie ma zostaµ zainstalowane, lub wybraµ nazwŰ katalogu poprzez klikniŰcie na polu wyszukiwania.",IDC_TEXT1,21,37,275,16 + LTEXT "Katalog &docelowy:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Wyszukiwanie...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ProszŰ podaµ nazwŰ katalogu, do ktľrego oprogramowanie ma zostaµ zainstalowane, lub wybraµ nazwŰ katalogu poprzez klikniŰcie na polu wyszukiwania.",IDC_TEXT1,21,1,275,16 + LTEXT "Katalog &docelowy:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Wyszukiwanie...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Program setup jest teraz przygotowany do zainstalowania wybranego oprogramowania.",-2,21,37,275,8 + LTEXT "W celu rozpoczęcia instalacji należy kliknąć na polu 'Dalej'.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Należy przygotować CD-ROM Microsoft Windows. Istnieje możliwooć, iż podczas instalacji niektóre pliki będą musiały zostać skopiowane z tego CD-ROMu.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Program setup jest teraz przygotowany do zainstalowania wybranego oprogramowania.",-2,21,1,275,8 + LTEXT "W celu rozpoczęcia instalacji należy kliknąć na polu 'Dalej'.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Należy przygotować CD-ROM Microsoft Windows. Istnieje możliwooć, iż podczas instalacji niektóre pliki będą musiały zostać skopiowane z tego CD-ROMu.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "Instalacja została przeprowadzona prawidłowo.",-1,115,33,189,8 + LTEXT "W celu zakończenia działania programu setup należy kliknąć na polu 'Zakończ'.",-2,115,48,189,16 + ICON "",IDC_STATIC,115,72,10,10,NOT WS_VISIBLE + LTEXT "Niektóre ze zaktualizowanych plików znajdują się obecnie w użyciu. Z tego względu trzeba ponownie uruchomić system operacyjny, zanim będzie można korzystać z zainstalowanego oprogramowania.",IDC_TEXT2,132,73,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "Instalacja została przeprowadzona prawidłowo.",-1,115,40,189,8 + LTEXT "W celu zakończenia działania programu setup należy kliknąć na polu 'Zakończ'.",-2,115,55,189,16 + ICON "",IDC_STATIC,115,79,10,10,NOT WS_VISIBLE + LTEXT "Niektóre ze zaktualizowanych plików znajdują się obecnie w użyciu. Z tego względu trzeba ponownie uruchomić system operacyjny, zanim będzie można korzystać z zainstalowanego oprogramowania.",IDC_TEXT2,132,80,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Obecnie z komputera zostaną usunięte następujące komponenty oprogramowania:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "W celu usunięcia komponentów oprogramowania należy kliknąć na polu Dalej.",-2,115,81,189,16 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Obecnie z komputera zostaną usunięte następujące komponenty oprogramowania:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "W celu usunięcia komponentów oprogramowania należy kliknąć na polu Dalej.",-2,115,88,189,16 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "Usunięcie zostało przeprowadzone prawidłowo.",-1,115,33,189,8 + LTEXT "W celu zakończenia działania programu setup należy kliknąć na polu 'Zakończ'.",-2,115,48,189,16 + ICON "",IDC_STATIC,115,72,10,10,NOT WS_VISIBLE + LTEXT "Niektóre pliki znajdują się obecnie w użyciu i z tego względu zostaną skasowane przy następnym uruchomieniu systemu operacyjnego.",IDC_TEXT2,132,73,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_POL_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "Usunięcie zostało przeprowadzone prawidłowo.",-1,115,40,189,8 + LTEXT "W celu zakończenia działania programu setup należy kliknąć na polu 'Zakończ'.",-2,115,55,189,16 + ICON "",IDC_STATIC,115,79,10,10,NOT WS_VISIBLE + LTEXT "Niektóre pliki znajdują się obecnie w użyciu i z tego względu zostaną skasowane przy następnym uruchomieniu systemu operacyjnego.",IDC_TEXT2,132,80,172,40,NOT WS_VISIBLE +END +#endif +/* ------------------------------------------------------------------------ + * jetzt kommen alle russischen resourcen + * ------------------------------------------------------------------------ */ + +#ifdef TEXT_RUS_TITLE +#pragma code_page(1251) +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +STRINGTABLE FIXED IMPURE +BEGIN + STR_INSTALLTITLE TEXT_RUS_TITLE + STR_INSTALLTEXT TEXT_RUS_INSTALL + STR_INSTALLFAIL "Óńňŕíîâęŕ íĺ áűëŕ óńďĺříî âűďîëíĺíŕ." + STR_REMOVEFAIL "Îňěĺíŕ óńňŕíîâęč íĺ áűëŕ óńďĺříî âűďîëíĺíŕ." + STR_WIZ97_P2TITLE "Ęîěďîíĺíňű ĎÎ" + STR_WIZ97_P2SUBTITLE "Âűáĺđčňĺ ęîěďîíĺíňű ĎÎ, ęîňîđűĺ äîëćíű áűňü óńňŕíîâëĺíű." + STR_WIZ97_P3TITLE "Ęŕňŕëîă íŕçíŕ÷ĺíč˙" + STR_WIZ97_P3SUBTITLE "Âű ěîćĺňĺ âűáđŕňü ęŕňŕëîă íŕçíŕ÷ĺíč˙, â ęîňîđűé äîëćíî áűňü óńňŕíîâëĺíî ďđîăđŕěěíîĺ îáĺńďĺ÷ĺíčĺ." + STR_WIZ97_P4TITLE "Ďđîčçâĺńňč óńňŕíîâęó" + STR_WIZ97_P4SUBTITLE "Óńňŕíîâęŕ ňĺďĺđü ěîćĺň áűňü âűďîëíĺíŕ." + STR_WARNING "Ďđĺäóďđĺćäĺíčĺ" + STR_VERSIONWARNING " Âŕřĺé ńčńňĺěĺ óćĺ óńňŕíîâëĺíŕ áîëĺĺ ďîçäí˙˙ âĺđńč˙ %s.\r\rÂű äĺéńňâčňĺëüíî őîňčňĺ çŕďčńŕňü íîâóţ âĺđńčţ ďîâĺđő ńóůĺńňâóţůĺé?" + STR_INFERROR " ôŕéëĺ %s â ńňđîęĺ %d čěĺĺňń˙ îřčáęŕ. Óńňŕíîâęŕ íĺ ěîćĺň áűňü ďđîäîëćĺíŕ." + STR_BROWSETITLE "Âűáĺđčňĺ ęŕňŕëîă íŕçíŕ÷ĺíč˙ äë˙ óńňŕíîâęč:" + STR_STOPSERVICE "Óńëóăč ďđčîńňŕíŕâëčâŕţňń˙..." + STR_COPYING "Ęîďčđóţňń˙ ôŕéëű..." + STR_DELETING "Óäŕë˙ţňń˙ ôŕéëű..." + STR_REGISTRY "Îáíîâë˙ĺňń˙ đĺĺńňđ..." + STR_SHORTCUTS "Îáíîâë˙ĺňń˙ ăëŕâíîĺ ěĺíţ..." + STR_STARTSERVICE "Óńëóăč çŕďóńęŕţňń˙..." + STR_CLOSE_BTN "Çŕęđűňü" +END + +IDD_WIZPAGE1 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT ".",IDC_TEXT2,115,33,189,142 +END + +IDD_WIZ97PAGE1 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT ".",IDC_TEXT2,115,40,189,142 +END + +IDD_WIZPAGE2 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Âűäĺëčňĺ îňäĺëüíűĺ ęîěďîíĺíňű ĎÎ, ęîňîđűĺ äîëćíű áűňü óńňŕíîâëĺíű. Ńíčěčňĺ âűäĺëĺíčĺ ń ęîěďîíĺíňŕ, íĺ ďîäëĺćŕůĺăî óńňŕíîâęĺ.",-2,21,37,275,16 + LISTBOX IDC_PRODLIST,21,67,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,138,220,38 + LTEXT "",IDC_TEXT1,27,147,209,24 +END + +IDD_WIZ97PAGE2 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Âűäĺëčňĺ îňäĺëüíűĺ ęîěďîíĺíňű ĎÎ, ęîňîđűĺ äîëćíű áűňü óńňŕíîâëĺíű. Ńíčěčňĺ âűäĺëĺíčĺ ń ęîěďîíĺíňŕ, íĺ ďîäëĺćŕůĺăî óńňŕíîâęĺ.",-2,21,1,275,16 + LISTBOX IDC_PRODLIST,21,31,220,69,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_TABSTOP|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS + GROUPBOX "",-1,21,102,220,38 + LTEXT "",IDC_TEXT1,27,111,209,24 +END + +IDD_WIZPAGE3 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Ââĺäčňĺ ęŕňŕëîă, â ęîňîđűé äîëćíî áűňü óńňŕíîâëĺíî ĎÎ. Čëč âűáĺđčňĺ ęŕňŕëîă, ůĺëęíóâ íŕ \'Îáçîđ\'.",IDC_TEXT1,21,37,275,16 + LTEXT "&Ęŕňŕëîă íŕçíŕ÷ĺíč˙:",IDC_TEXT2,21,68,220,8 + EDITTEXT IDC_TARGETDIR,21,78,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Îáçîđ...",IDC_BROWSE,21,99,50,14 +END + +IDD_WIZ97PAGE3 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Ââĺäčňĺ ęŕňŕëîă, â ęîňîđűé äîëćíî áűňü óńňŕíîâëĺíî ĎÎ. Čëč âűáĺđčňĺ ęŕňŕëîă, ůĺëęíóâ íŕ \'Îáçîđ\'.",IDC_TEXT1,21,1,275,16 + LTEXT "&Ęŕňŕëîă íŕçíŕ÷ĺíč˙:",IDC_TEXT2,21,32,220,8 + EDITTEXT IDC_TARGETDIR,21,42,220,14,ES_AUTOHSCROLL|WS_GROUP + PUSHBUTTON "&Îáçîđ...",IDC_BROWSE,21,63,50,14 +END + +IDD_WIZPAGE4 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "",IDC_HDR_TITLE,7,0,310,8 + LTEXT "",IDC_HDR_SUBTITLE,21,9,296,16 + CONTROL "",-3,"Static",SS_BLACKFRAME|SS_SUNKEN,0,28,317,1 + LTEXT "Ďđîăđŕěěŕ óńňŕíîâęč ňĺďĺđü ăîňîâŕ óńňŕíîâčňü âűáđŕííîĺ âŕěč ĎÎ.",-2,21,37,275,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Äŕëĺĺ', ÷ňîáű íŕ÷ŕňü óńňŕíîâęó.",-1,21,52,275,8 + ICON "",IDC_STATIC,21,68,10,10,NOT WS_VISIBLE + LTEXT "Ďđčăîňîâüňĺ CD-ROM Microsoft Windows. Âî âđĺě˙ óńňŕíîâęč âîçěîćíî ďîňđĺáóĺňń˙ ďĺđĺďčńŕňü ń ýňîăî CD íĺęîňîđűĺ ôŕéëű.",IDC_TEXT1,38,69,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,158,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,168,275,10 +END + +IDD_WIZ97PAGE4 DIALOG DISCARDABLE 0, 0, 317, 143 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Ďđîăđŕěěŕ óńňŕíîâęč ňĺďĺđü ăîňîâŕ óńňŕíîâčňü âűáđŕííîĺ âŕěč ĎÎ.",-2,21,1,275,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Äŕëĺĺ', ÷ňîáű íŕ÷ŕňü óńňŕíîâęó.",-1,21,16,275,8 + ICON "",IDC_STATIC,21,32,10,10,NOT WS_VISIBLE + LTEXT "Ďđčăîňîâüňĺ CD-ROM Microsoft Windows. Âî âđĺě˙ óńňŕíîâęč âîçěîćíî ďîňđĺáóĺňń˙ ďĺđĺďčńŕňü ń ýňîăî CD íĺęîňîđűĺ ôŕéëű.",IDC_TEXT1,38,33,258,16,NOT WS_VISIBLE + LTEXT "",IDC_TEXT2,21,122,275,8 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0,21,132,275,10 +END + +IDD_WIZPAGE5 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Setup complete",IDC_TEXT1,115,1,189,24 + LTEXT "Óńňŕíîâęŕ óńďĺříî âűďîëíĺíŕ.",-1,115,33,189,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Âűďîëíĺíčĺ', ÷ňîáű çŕęđűňü ďđîăđŕěěó óńňŕíîâęč.",-2,115,48,189,16 + ICON "",IDC_STATIC,115,72,10,10,NOT WS_VISIBLE + LTEXT "Íĺęîňîđűĺ îáíîâëĺííűĺ ôŕéëű â íŕńňî˙ůĺĺ âđĺě˙ čńďîëüçóţňń˙, ďîýňîěó íĺîáőîäčěî ďĺđĺçŕďóńňčňü ńčńňĺěó, ďđĺćäĺ ÷ĺě íŕ÷ŕňü čńďîëüçîâŕňü óńňŕíîâëĺííîĺ ĎÎ.",IDC_TEXT2,132,73,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE5 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Setup complete",IDC_TEXT1,115,8,189,24 + LTEXT "Óńňŕíîâęŕ óńďĺříî âűďîëíĺíŕ.",-1,115,40,189,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Âűďîëíĺíčĺ', ÷ňîáű çŕęđűňü ďđîăđŕěěó óńňŕíîâęč.",-2,115,55,189,16 + ICON "",IDC_STATIC,115,79,10,10,NOT WS_VISIBLE + LTEXT "Íĺęîňîđűĺ îáíîâëĺííűĺ ôŕéëű â íŕńňî˙ůĺĺ âđĺě˙ čńďîëüçóţňń˙, ďîýňîěó íĺîáőîäčěî ďĺđĺçŕďóńňčňü ńčńňĺěó, ďđĺćäĺ ÷ĺě íŕ÷ŕňü čńďîëüçîâŕňü óńňŕíîâëĺííîĺ ĎÎ.",IDC_TEXT2,132,80,172,40,NOT WS_VISIBLE +END + +IDD_WIZPAGE6 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT ".",IDC_TEXT1,115,1,189,24 + LTEXT "Âű ńîáčđŕĺňĺńü óäŕëčňü čç Âŕřĺăî ęîěďüţňĺđŕ ńëĺäóţůčĺ ęîěďîíĺíňű:",-1,115,33,189,16 + ICON "",IDC_STATIC,115,60,10,10 + LTEXT "",IDC_TEXT2,132,61,172,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Äŕëĺĺ', ÷ňîáű îňěĺíčňü óńňŕíîâęó.",-2,115,81,189,8 + LTEXT "",IDC_TEXT3,115,165,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,165,189,10 +END + +IDD_WIZ97PAGE6 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT ".",IDC_TEXT1,115,8,189,24 + LTEXT "Âű ńîáčđŕĺňĺńü óäŕëčňü čç Âŕřĺăî ęîěďüţňĺđŕ ńëĺäóţůčĺ ęîěďîíĺíňű:",-1,115,40,189,16 + ICON "",IDC_STATIC,115,67,10,10 + LTEXT "",IDC_TEXT2,132,68,172,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Äŕëĺĺ', ÷ňîáű îňěĺíčňü óńňŕíîâęó.",-2,115,88,189,8 + LTEXT "",IDC_TEXT3,115,172,189,8 +// CONTROL "",IDC_PROGRESS,"msctls_progress32",0,115,172,189,10 +END + +IDD_WIZPAGE7 DIALOG DISCARDABLE 0, 0, 317, 179 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Sans Serif" +BEGIN + CONTROL ID_WATERMARK,-1,"Static",SS_BITMAP|SS_REALSIZEIMAGE,0,0,95,179 + LTEXT "Uninstall complete",IDC_TEXT1,115,1,189,24 + LTEXT "Îňěĺíŕ óńňŕíîâęč óńďĺříî âűďîëíĺíŕ.",-1,115,33,189,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Âűďîëíĺíčĺ', ÷ňîáű çŕęđűňü ďđîăđŕěěó óńňŕíîâęč.",-2,115,48,189,16 + ICON "",IDC_STATIC,115,72,10,10,NOT WS_VISIBLE + LTEXT "Íĺęîňîđűĺ ôŕéëű â íŕńňî˙ůĺĺ âđĺě˙ čńďîëüçóţňń˙ č áóäóň ńňĺđňű ňîëüęî ďđč ńëĺäóţůĺě çŕďóńęĺ ńčńňĺěű.",IDC_TEXT2,132,73,172,40,NOT WS_VISIBLE +END + +IDD_WIZ97PAGE7 DIALOG DISCARDABLE 0, 0, 317, 193 +STYLE WS_CHILD +CAPTION TEXT_RUS_TITLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Uninstall complete",IDC_TEXT1,115,8,189,24 + LTEXT "Îňěĺíŕ óńňŕíîâęč óńďĺříî âűďîëíĺíŕ.",-1,115,40,189,8 + LTEXT "Íŕćěčňĺ ęíîďęó 'Âűďîëíĺíčĺ', ÷ňîáű çŕęđűňü ďđîăđŕěěó óńňŕíîâęč.",-2,115,55,189,16 + ICON "",IDC_STATIC,115,79,10,10,NOT WS_VISIBLE + LTEXT "Íĺęîňîđűĺ ôŕéëű â íŕńňî˙ůĺĺ âđĺě˙ čńďîëüçóţňń˙ č áóäóň ńňĺđňű ňîëüęî ďđč ńëĺäóţůĺě çŕďóńęĺ ńčńňĺěű.",IDC_TEXT2,132,80,172,40,NOT WS_VISIBLE +END +#pragma code_page(DEFAULT) +#endif + diff --git a/util/obj.unx/dosstart.o b/util/obj.unx/dosstart.o new file mode 100644 index 0000000000000000000000000000000000000000..6eb375b3fc10eafc448abbc3a4a9981531834d21 GIT binary patch literal 686 zcmah{%}T>S5S}!(TJWGAMDP;vUEnJ~rVN7jmiL}DW^ZU{3^&8Q6 zFgS_g@ztag^;BOSNAY=<-07lb-Cl=CnTOo!1Zd|q-b!S%drNAnttOQiL#ilkrqHcx ztWIa7(lXDp!Y+*zu>eq`1EtDQVwsbn7#m=>N9Qt literal 0 HcmV?d00001 diff --git a/util/obj.unx/dtmf.o b/util/obj.unx/dtmf.o new file mode 100644 index 0000000000000000000000000000000000000000..1135f14946185e74679ecd01a9afc12a7cb478cc GIT binary patch literal 3420 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 literal 0 HcmV?d00001 diff --git a/util/obj.unx/vorwahl.o b/util/obj.unx/vorwahl.o new file mode 100644 index 0000000000000000000000000000000000000000..952b1510e0d7d3366b030e39e24e97d75e3d4499 GIT binary patch literal 1684 zcma)+O-vI}5XWcR0u@mZhzFIpM2RJa4F!xyf)Ww95XCeQtWnsOEp4USrn^;%2O)(+ zLr9DlFCIL2^XNq*CVT~AVvNy)@n%d+{NR8WL1L&gZ{MTqhJ%y7{qJw)zw_R{?e5*K z-fl^fK!gNtC=fua%c`_6@xfm33MtTh^!WoU-qpOu{)x+VhO=39essKo|A89y))A6z5Mp}_Qu=V#q5G-^790S z`E6ryVgevjyzspuyWoO%*^lnXs#FiTBgff_X0^?$*Pl_RYfIU+vVd5omEX_um)TxL z%Ml7|84R-XxWumb@j4A*H5D_pF-6ZL0O|}`PnvQhnbAjT0eU(++hkwQ#r}G^S!q$4 zWZwlX6jODJ8k*|?6k|MLsv%S}ZD~}TrLn82-8MlPQB4(;kYRw5P7;vYulPa1*)#p=bsaD2z+@>B4Z2_2L)trgzee1@IOar9pWVWq_rTA* z-Sh94fco2KAok$*z=|yt3AvgOn+mq7*3k{@9o$K|cm5TkUIK@Bbr^e8Vk3HvBIrK- z0#J!hJNT@FyByr>;DCdJ4h}gOZYI;W)aaNJ1~ZYuw?t_KI{HOnXjC(YbTy$tB$?85 zh#(te38%)HMAIbrW2Bl836CWW4UAMerkfEkVx!#|J&f~~;gCuI=)XdG5Y>en-b#!Q zzMU9NeVqHb(mlBL0gP~t5#u-K4(CZ?{OsK4{D9Y=aDK}51=o30y8adCH^jL4?>SfD lvvT1gYfx!jKF+6zaoz1)&vWe|MPDzfs}dlLqCQiD4Ki|81_kM0FDy%O(Owogj{7FOoU}kKslUN&pw(DmGd@&g|`$u%jRj z_N2D<{JypoO5uw)Vz94m1b!$y9szVGr$?t%x9Y+>Hr@VB_c)psQZ}t(l(G}J05H2n z@R)s0*%yi?txMz9*Gac9?tV+zcY;#(V+9@c$f_TFoc!GVbPcg9s5jvrTB=xv4q94x z84Me*p$ljA*oWDSUfkH@J*k(=L_vluvQDU~5bx(@k#TxZRXIFgfY~D3#H^|i-xPhg zQ@)OFF1YTQsK`C_0-zmo$&j@?MZW}=&;6L^e-fRlBW@u*))_xwS;7x3tNn_59vg8x bk(`Zc#>4!>CYKE!zm`F`BL+?|G|KQ7V@{wa literal 0 HcmV?d00001 diff --git a/util/obj.win/dtmf.obj b/util/obj.win/dtmf.obj new file mode 100644 index 0000000000000000000000000000000000000000..4396c9caa7f8d6cc831bb3178c48a442eda88a23 GIT binary patch literal 3715 zcmd^Ci*r*|8vkx`nx+s)k*GW(MmDPzyRp<#3q&cB2+TH8x6Q83hK;pJOSCk#O$D7( zcQFTtc&Xz!#Rr>VSU2N#+^%+ubbO*E+t6Qd)Ty=;I`JzjM<^V8_2; z&&>Vq@BGepzSq4u_e+^X;MU?lum9C-fL}s-*nExt>d>S9$tm25plfO}b)S_BHlP2& z=2~mT6xD*@`>Dy~y%ciqviYh)RT=!V1mFQFgFsjcrQNoWe|so{PHF+pWC8q?lO`>A zvq1R+7K`Ophx6{W?y}0Vjd!hDiejCsa_QydrZUGpYhBKYr4|ity93fTihsAtv(4XF z?{D<@{EvF7Jq?Y)hcMYDPjyv8Amp#}G=~Cpp5TKI*|r7hJ-*P^8XHbZV16zv1;~cE zXzZqU(((pZpt>>G6s!qZ@_uu(Wm7{aur=^_puX0!F1WQJQ0H$1ApZfluL+>~V}Nfq z1B~?oJX`|s!CL^$3jw}u1IYh}qTH|p;O-~!j#dA0lcGe|1I)`)l;wrDtu0zneAn$I zE7vV6_=SVdC&LaYo}%}%*UVW1&krlaoFvnxgl!SE5SAy76YE4g$8oU)jw6k5#Qt<$z~5zh!16nZD?5%Gu^MgDvV`BucuuOWjW zX?KclW-s?=S;ynE9V6RemqKmq<6(^{$xURaQtC)iH+$8S6&sJwa$L9%+7-HtecGX^ zOmZ{%UafyKd)kv78;#F(oIM8l3SGtCR_mWjPMf6R6m_yUJtQ^}*E=pPfD;N`%D&3i z982;A{Ip``+|MRzG7dKZ^?J$donB^QCO?r=xIO8~*IO{l^0o-A`#KZz0#F_V66R9mMl)8=ap+F?zfrbDw^ zQ>Q7@EIak9 zorabyyboz*r(yGvzL|mRJBA&2@b>QP<_Z=ZAlzaABa0*2@;(aOQGP<@6Z*)`I4XtT z5)%HHHTVMZy*m?=8;6W?tH9wNDWU>-kC?9BBh*_;(7*A3-uQ2mOIYg}*U75ONZZb% zxGuK}|LRr&WVb$iSc^S1D-VxSA*C z7asQYI%C4;P>$@3g}bE)%9dEJv2`z!y-xL8C%d{LuKlumf5hF<>+GCT?^M-0ceHeh z09p!US4=jwidEz5?)^REM%mdZyYw>Ip*?(yvn%54kX`#Dt}fZ#5pnMyIwU(gjITR8 zdPZ|D+u4CT(Lh(vc+M?{(Y5h)S69zij^`Pre9bQ+yb zr_~W%*5oVvfAIcpIa-K6MNt%0OjghESCuKpiv7&m<|EisfOrBX*n`r5mkvHdd9BL* z7F)7eD);O(I)zB5a!EwlD!K_9svA^fLu66WpAdffeO zC!*_By)HycRCEy0bt;M@GOMT?(P9-P5G_*CQA7(=l#M4@A~LGn z2Z(Z2^a&y>A`^UxD4o%9MDx_ulZdWT(dlWuONi1nD6Pi6&KB_9^v+fgXQLKMYy4Fq zTR{O9XOhWmo&~FwMEiXC$ZVW371R-}^ZyR)lR;c!2)%R;GfZYzT+aPoWQv__9$!zRvtjbKLF`=jqp(DP|-awOAZ4H_m zX0T`zz`Jf!g}1PLqxaX~t*WcqR@fA%t@rzu7lXI?vgw+-s-{rsn&oTO)CT>Hp~wAo zrKKxNS3=ruO`zVV?g#JGGTN(e!ar1Av{=(zU!AEbOi#`O^??w0tAq75fm&}3{xkA6 N`m22CJXl`~{{;!!$)*4R literal 0 HcmV?d00001 diff --git a/util/obj.win/register.obj b/util/obj.win/register.obj new file mode 100644 index 0000000000000000000000000000000000000000..14edba5d56a8ecf70840fc34f840301accb4f4b7 GIT binary patch literal 4854 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 literal 0 HcmV?d00001 diff --git a/util/obj.win/silence.obj b/util/obj.win/silence.obj new file mode 100644 index 0000000000000000000000000000000000000000..7feca0af2620fe8421dea83050f1a96e83280245 GIT binary patch literal 1367 zcmZWp%}>){7=OwbOc-tiP-8q4f}oO=#RDKDW_(mavWWqvmy+7`%Pw2Hv>hmk2?_Cl z{S!#MnCQ`)UQ7TnkSGT|cr(U}i3mpzJ1oKHZM)LNH+i4;_xzrZzJ1^RnxUdFJhC;* zMgT5?HyFv3MSDf|T^L62z3$Z4wj?l;oUf?;i*;%pK|59VyfqEUDJE}OVYVsk_;?*s zJB%dQLMV0xvGZR)%(Lakb|~*J;@6nB-)JVHt`|Ut73N&zEhjq^)VXN>3Z5GFF=a zeiJ@#m=f{*Co!U;Le4okh`KvNo-nf z2W*u@l>@d0a2!`0wx&cWP&V0GVmn)Na`BBn)WoN!Hxk=y&B?|RZ@Z}g&QR3Qmj%Cl zbA+vKveo1FPPRJHL7G~fP7hflx%j3Fj@#+6ylCBH&&j z@;bi>(7OPAK;%8+FyOu+@^= zRY;JedxRpAB;)Ja+=Pev7iVv#Mn_%8%>j=YgCueu6BaDF)d)o-OK!FEbF?29f7DMT zit_dLce@@6nES}2ah~N!4LQ7!5B+RNAM&f<^-7616h6?{6I-@`S4~-8L!H~emn@aH u1YN=d_QcGavL$0cG;~E%c?DUd1c|Q{4P8A;Q#4W}=oa?DT2-m&BK!kU1n?OE literal 0 HcmV?d00001 diff --git a/util/obj.win/vorwahl.obj b/util/obj.win/vorwahl.obj new file mode 100644 index 0000000000000000000000000000000000000000..12e9c7aa848ff35db81cf9472324804f89f35026 GIT binary patch literal 1791 zcmaJ>O>7fK6n+~g#tjKcTeqdDpi0$>IEUwMl#>b*vqaX^(ph_d*6KT z&CGi87L-03pT2kYdN0wZBu&dZMvko+?U2R+{_F&uxqq0nys=zc8C~j78vwhNP9$fY zhEHqxEX(@nW5DhX-9$rMu2y|A`mamF*EUFRXw10Ee8LoTk1^g0NpcjEN{e5ssyaTG zm_LMQz=*(rdP}o?R_zh-c{iVHzRYMSDNi*lzRlC5{ zBNvaV7b?swo7YWiMLlDeD`v@Xi10`4>Y7z6lX`^cXczZcRkduU7VMgpKSU|_Mg2u& zm7iF+rySLPj@(K#>o=M-bW_1saTCqO)z@8;fz8Iy&EGm?Ah|dj2yZ2}>o>Mh>ps+O za(hdWd%3B|#m;_TBqBqb-(tPkAIRNou)SRr%DIW{t@eQf>aLCJ4P`N~E`k8#CYxVA z#kRO}?;}1xKlyC1)oQt^X6J0Z&kw)N^Cu68ps2L-BO>4Z`^rzdP$z;BrU7{V9K!T2 z{6UPU_+L06xa08q1vdvTxpP4KFv4^m{u7KSedTdifIb%7Rge1yXs_Vzz{@Ikfu!zx zkNd&n9s~7bgy~0kx!W&5a<^ZBWR>56WR<@>-4mdXFrxGi{BDdey@Z!lUIWS1KD?U` z5k+YbNUk36xG^C9ZNl_9(4at*Kyu${pbtduNsmhaMFp1x8WtIP4liFb^J80OYPE<$ zq!)}V(dK;-X0yh(%<-h;S(cl*IZiAI;sPEE$9 zL?ARInQ206#Oe6p%(02%;s$Ga^ zdwsl?!aEJWiep-=;A0B8l3ndIe5qkhF3Y5( zU57bU#+wv3PqVs%sa%s1q2Z9fByRE+nZk;}ygtwCaGT*yd8@H2hQ%pvTyq(7rrl;U eD3GzTWrO0ZT)~<2_+&iZy{PLkJx1~WUw#92I4Ai4 literal 0 HcmV?d00001 diff --git a/util/source.os2/capi.h b/util/source.os2/capi.h new file mode 100644 index 0000000..93d4611 --- /dev/null +++ b/util/source.os2/capi.h @@ -0,0 +1,22 @@ +#define INCL_DOSPROCESS +#define INCL_DOSSEMAPHORES +#define INCL_DOS +#define INCL_ERRORS + +#include + +/* ------------------------------------------------------------------------ */ + +extern short (*APIENTRY16 API_REGISTER_11 )( char * _Seg16, short, short, short, short ); +extern short (*APIENTRY16 API_RELEASE_11 )( short ); +extern short (*APIENTRY16 API_PUT_MESSAGE_11 )( short, char * _Seg16 ); +extern short (*APIENTRY16 API_GET_MESSAGE_11 )( short, char * _Seg16 * _Seg16 ); +extern short (*APIENTRY16 API_SET_SIGNAL_11 )( short, void (* APIENTRY16)( void ) ); +extern short (*APIENTRY16 API_GET_MANUFACTURER_11 )( char * _Seg16 ); +extern short (*APIENTRY16 API_GET_VERSION_11 )( char * _Seg16 ); +extern short (*APIENTRY16 API_GET_SERIAL_NUMBER_11)( char * _Seg16 ); +extern short (*APIENTRY16 API_GET_ADDRESSMODE_11 )( void ); +extern short (*APIENTRY16 API_INSTALLED_11 )( void ); + +/* ------------------------------------------------------------------------ */ + diff --git a/util/source.os2/dosstart.c b/util/source.os2/dosstart.c new file mode 100644 index 0000000..8fb0ac2 --- /dev/null +++ b/util/source.os2/dosstart.c @@ -0,0 +1,62 @@ +void sigFunc( short num, void *msg ); + +#define INCL_DOSPROCESS /* DOS process values - needed for DosSleep */ +#define INCL_DOSSESMGR +#define INCL_DOSERRORS +#include +#include +#include + +short is_os2 ( char *exename ) +{ + ULONG apptype; + if( DosQueryAppType( (PSZ)exename, &apptype) ) { + return (1); + } else { + if( apptype & FAPPTYP_32BIT ) return(1); + } + return (0); +} + +int dos_start(char *proc, char *parm, char *title) +{ + STARTDATA SData = {0}; + char PgmTitle[200]; /* Title */ + char PgmName[200]; /* This starts an OS/2 session */ + APIRET rc = NO_ERROR; /* Return code */ + PID pid = 0; /* PID returned */ + ULONG ulSessID = 0; /* Session ID returned */ + UCHAR achObjBuf[100] = {0}; + + strcpy (PgmTitle,title); + strcpy (PgmName,proc); + SData.FgBg = 0; + + if (is_os2(proc)) SData.SessionType = 2; else SData.SessionType = 7; + + SData.Length = sizeof(STARTDATA); + SData.Related = SSF_RELATED_CHILD; /* start a dependent session */ + SData.TraceOpt = SSF_TRACEOPT_NONE; /* No trace */ + SData.PgmTitle = PgmTitle; + SData.PgmName = PgmName; + SData.PgmInputs = parm; /* Keep session up */ + SData.TermQ = 0; /* No termination queue */ + SData.Environment = 0; /* No environment string */ + SData.InheritOpt = SSF_INHERTOPT_SHELL; /* Inherit shell's environ. */ + SData.IconFile = 0; /* No icon association */ + SData.PgmHandle = 0; + SData.PgmControl = SSF_CONTROL_VISIBLE | SSF_CONTROL_MAXIMIZE; + SData.InitXPos = 30; /* Initial window coordinates*/ + SData.InitYPos = 40; + SData.InitXSize = 200; /* Initial window size */ + SData.InitYSize = 140; + SData.Reserved = 0; + SData.ObjectBuffer = achObjBuf; /* Contains info if DosExecPgm fails */ + SData.ObjectBuffLen = (ULONG) sizeof(achObjBuf); + + rc = DosStartSession(&SData, &ulSessID, &pid);/* Start the session */ + return rc; +} + + + diff --git a/util/source.unx/dosstart.c b/util/source.unx/dosstart.c new file mode 100644 index 0000000..207c1ec --- /dev/null +++ b/util/source.unx/dosstart.c @@ -0,0 +1,7 @@ + +int dos_start(char *proc, char *parm, char *title) +{ +return(0); +} + + diff --git a/util/source.win/dosstart.c b/util/source.win/dosstart.c new file mode 100644 index 0000000..4ba3c5c --- /dev/null +++ b/util/source.win/dosstart.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include + +int dos_start(char *proc, char *parm, char *title) +{ +SHELLEXECUTEINFO sShEx; + +memset(&sShEx, 0, sizeof(sShEx)); + +sShEx.cbSize = sizeof(sShEx); +sShEx.fMask = SEE_MASK_FLAG_NO_UI; +sShEx.hwnd = GetDesktopWindow(); +sShEx.lpVerb = 0; +sShEx.lpFile = proc; +sShEx.lpParameters = parm; +sShEx.lpDirectory = 0; +sShEx.nShow = SW_SHOWDEFAULT; + +ShellExecuteEx(&sShEx); +return(0); + + +/* + int i = 1; + char* c, * args[20]; + + memset(args, 0, sizeof(args)); + + args[0] = proc; + + c = strtok(parm, " "); + while(c) { + args[i++] = strdup(c); + c = strtok(0, " "); + } + return spawnv(_P_NOWAIT,proc,args); +*/ +} + + diff --git a/util/source/dosstart.h b/util/source/dosstart.h new file mode 100644 index 0000000..a6b0455 --- /dev/null +++ b/util/source/dosstart.h @@ -0,0 +1,2 @@ +int dos_start(char *proc, char *parm, char *title); + diff --git a/util/source/dtmf.c b/util/source/dtmf.c new file mode 100644 index 0000000..8fec622 --- /dev/null +++ b/util/source/dtmf.c @@ -0,0 +1,194 @@ +/* +programmiert nach dem goertzel algorithmus. +http://ptolemy.eecs.berkeley.edu/~pino/Ptolemy/papers/96/dtmf_ict/ +*/ + +#include "../../../units/common.src/cfg_file.h" +#include "../../common/source/global.h" + +#define NUM_DTMF_POINTS 205 +#define NUM_FREQ 16 +#define AMP_BITS 9 +//#define IS_DTMF_UP_DEF 50000 +//#define IS_DTMF_DOWN_DEF 10000 + +void answer_sigfunc( short num, void *msg ); + +int MIN (int first, int second) +{ + if (first < second) return (first); + return (second); +} + +static int COS_2PI_K[NUM_FREQ] = +{ + 55812, 29528, 53603, 24032, 51193, 14443, 48590, 6517, 38113, -21204, + 33057, -32186, 25889, -45081, 18332, -55279 +}; + +static char tones[] = {'1','2','3','A','4','5','6','B','7','8','9','C','*','0','#','D'}; + +int is_dtmf_up; +int is_dtmf_down; + +static short alaw2signed16[] = +{ + (short)0x13fc, (short)0xec04, (short)0x0144, (short)0xfebc, (short)0x517c, (short)0xae84, (short)0x051c, (short)0xfae4, + (short)0x0a3c, (short)0xf5c4, (short)0x0048, (short)0xffb8, (short)0x287c, (short)0xd784, (short)0x028c, (short)0xfd74, + (short)0x1bfc, (short)0xe404, (short)0x01cc, (short)0xfe34, (short)0x717c, (short)0x8e84, (short)0x071c, (short)0xf8e4, + (short)0x0e3c, (short)0xf1c4, (short)0x00c4, (short)0xff3c, (short)0x387c, (short)0xc784, (short)0x039c, (short)0xfc64, + (short)0x0ffc, (short)0xf004, (short)0x0104, (short)0xfefc, (short)0x417c, (short)0xbe84, (short)0x041c, (short)0xfbe4, + (short)0x083c, (short)0xf7c4, (short)0x0008, (short)0xfff8, (short)0x207c, (short)0xdf84, (short)0x020c, (short)0xfdf4, + (short)0x17fc, (short)0xe804, (short)0x018c, (short)0xfe74, (short)0x617c, (short)0x9e84, (short)0x061c, (short)0xf9e4, + (short)0x0c3c, (short)0xf3c4, (short)0x0084, (short)0xff7c, (short)0x307c, (short)0xcf84, (short)0x030c, (short)0xfcf4, + (short)0x15fc, (short)0xea04, (short)0x0164, (short)0xfe9c, (short)0x597c, (short)0xa684, (short)0x059c, (short)0xfa64, + (short)0x0b3c, (short)0xf4c4, (short)0x0068, (short)0xff98, (short)0x2c7c, (short)0xd384, (short)0x02cc, (short)0xfd34, + (short)0x1dfc, (short)0xe204, (short)0x01ec, (short)0xfe14, (short)0x797c, (short)0x8684, (short)0x07bc, (short)0xf844, + (short)0x0f3c, (short)0xf0c4, (short)0x00e4, (short)0xff1c, (short)0x3c7c, (short)0xc384, (short)0x03dc, (short)0xfc24, + (short)0x11fc, (short)0xee04, (short)0x0124, (short)0xfedc, (short)0x497c, (short)0xb684, (short)0x049c, (short)0xfb64, + (short)0x093c, (short)0xf6c4, (short)0x0028, (short)0xffd8, (short)0x247c, (short)0xdb84, (short)0x024c, (short)0xfdb4, + (short)0x19fc, (short)0xe604, (short)0x01ac, (short)0xfe54, (short)0x697c, (short)0x9684, (short)0x069c, (short)0xf964, + (short)0x0d3c, (short)0xf2c4, (short)0x00a4, (short)0xff5c, (short)0x347c, (short)0xcb84, (short)0x034c, (short)0xfcb4, + (short)0x12fc, (short)0xed04, (short)0x0134, (short)0xfecc, (short)0x4d7c, (short)0xb284, (short)0x04dc, (short)0xfb24, + (short)0x09bc, (short)0xf644, (short)0x0038, (short)0xffc8, (short)0x267c, (short)0xd984, (short)0x026c, (short)0xfd94, + (short)0x1afc, (short)0xe504, (short)0x01ac, (short)0xfe54, (short)0x6d7c, (short)0x9284, (short)0x06dc, (short)0xf924, + (short)0x0dbc, (short)0xf244, (short)0x00b4, (short)0xff4c, (short)0x367c, (short)0xc984, (short)0x036c, (short)0xfc94, + (short)0x0f3c, (short)0xf0c4, (short)0x00f4, (short)0xff0c, (short)0x3e7c, (short)0xc184, (short)0x03dc, (short)0xfc24, + (short)0x07bc, (short)0xf844, (short)0x0008, (short)0xfff8, (short)0x1efc, (short)0xe104, (short)0x01ec, (short)0xfe14, + (short)0x16fc, (short)0xe904, (short)0x0174, (short)0xfe8c, (short)0x5d7c, (short)0xa284, (short)0x05dc, (short)0xfa24, + (short)0x0bbc, (short)0xf444, (short)0x0078, (short)0xff88, (short)0x2e7c, (short)0xd184, (short)0x02ec, (short)0xfd14, + (short)0x14fc, (short)0xeb04, (short)0x0154, (short)0xfeac, (short)0x557c, (short)0xaa84, (short)0x055c, (short)0xfaa4, + (short)0x0abc, (short)0xf544, (short)0x0058, (short)0xffa8, (short)0x2a7c, (short)0xd584, (short)0x02ac, (short)0xfd54, + (short)0x1cfc, (short)0xe304, (short)0x01cc, (short)0xfe34, (short)0x757c, (short)0x8a84, (short)0x075c, (short)0xf8a4, + (short)0x0ebc, (short)0xf144, (short)0x00d4, (short)0xff2c, (short)0x3a7c, (short)0xc584, (short)0x039c, (short)0xfc64, + (short)0x10fc, (short)0xef04, (short)0x0114, (short)0xfeec, (short)0x457c, (short)0xba84, (short)0x045c, (short)0xfba4, + (short)0x08bc, (short)0xf744, (short)0x0018, (short)0xffe8, (short)0x227c, (short)0xdd84, (short)0x022c, (short)0xfdd4, + (short)0x18fc, (short)0xe704, (short)0x018c, (short)0xfe74, (short)0x657c, (short)0x9a84, (short)0x065c, (short)0xf9a4, + (short)0x0cbc, (short)0xf344, (short)0x0094, (short)0xff6c, (short)0x327c, (short)0xcd84, (short)0x032c, (short)0xfcd4 +}; + + +static short ulaw2signed16[] = +{ + (short)0x8284, (short)0x8684, (short)0x8a84, (short)0x8e84, (short)0x9284, (short)0x9684, (short)0x9a84, (short)0x9e84, + (short)0xa284, (short)0xa684, (short)0xaa84, (short)0xae84, (short)0xb284, (short)0xb684, (short)0xba84, (short)0xbe84, + (short)0xc184, (short)0xc384, (short)0xc584, (short)0xc784, (short)0xc984, (short)0xcb84, (short)0xcd84, (short)0xcf84, + (short)0xd184, (short)0xd384, (short)0xd584, (short)0xd784, (short)0xd984, (short)0xdb84, (short)0xdd84, (short)0xdf84, + (short)0xe104, (short)0xe204, (short)0xe304, (short)0xe404, (short)0xe504, (short)0xe604, (short)0xe704, (short)0xe804, + (short)0xe904, (short)0xea04, (short)0xeb04, (short)0xec04, (short)0xed04, (short)0xee04, (short)0xef04, (short)0xf004, + (short)0xf0c4, (short)0xf144, (short)0xf1c4, (short)0xf244, (short)0xf2c4, (short)0xf344, (short)0xf3c4, (short)0xf444, + (short)0xf4c4, (short)0xf544, (short)0xf5c4, (short)0xf644, (short)0xf6c4, (short)0xf744, (short)0xf7c4, (short)0xf844, + (short)0xf8a4, (short)0xf8e4, (short)0xf924, (short)0xf964, (short)0xf9a4, (short)0xf9e4, (short)0xfa24, (short)0xfa64, + (short)0xfaa4, (short)0xfae4, (short)0xfb24, (short)0xfb64, (short)0xfba4, (short)0xfbe4, (short)0xfc24, (short)0xfc64, + (short)0xfc94, (short)0xfcb4, (short)0xfcd4, (short)0xfcf4, (short)0xfd14, (short)0xfd34, (short)0xfd54, (short)0xfd74, + (short)0xfd94, (short)0xfdb4, (short)0xfdd4, (short)0xfdf4, (short)0xfe14, (short)0xfe34, (short)0xfe54, (short)0xfe74, + (short)0xfe8c, (short)0xfe9c, (short)0xfeac, (short)0xfebc, (short)0xfecc, (short)0xfedc, (short)0xfeec, (short)0xfefc, + (short)0xff0c, (short)0xff1c, (short)0xff2c, (short)0xff3c, (short)0xff4c, (short)0xff5c, (short)0xff6c, (short)0xff7c, + (short)0xff88, (short)0xff90, (short)0xff98, (short)0xffa0, (short)0xffa8, (short)0xffb0, (short)0xffb8, (short)0xffc0, + (short)0xffc8, (short)0xffd0, (short)0xffd8, (short)0xffe0, (short)0xffe8, (short)0xfff0, (short)0xfff8, (short)0x0000, + (short)0x7d7c, (short)0x797c, (short)0x757c, (short)0x717c, (short)0x6d7c, (short)0x697c, (short)0x657c, (short)0x617c, + (short)0x5d7c, (short)0x597c, (short)0x557c, (short)0x517c, (short)0x4d7c, (short)0x497c, (short)0x457c, (short)0x417c, + (short)0x3e7c, (short)0x3c7c, (short)0x3a7c, (short)0x387c, (short)0x367c, (short)0x347c, (short)0x327c, (short)0x307c, + (short)0x2e7c, (short)0x2c7c, (short)0x2a7c, (short)0x287c, (short)0x267c, (short)0x247c, (short)0x227c, (short)0x207c, + (short)0x1efc, (short)0x1dfc, (short)0x1cfc, (short)0x1bfc, (short)0x1afc, (short)0x19fc, (short)0x18fc, (short)0x17fc, + (short)0x16fc, (short)0x15fc, (short)0x14fc, (short)0x13fc, (short)0x12fc, (short)0x11fc, (short)0x10fc, (short)0x0ffc, + (short)0x0f3c, (short)0x0ebc, (short)0x0e3c, (short)0x0dbc, (short)0x0d3c, (short)0x0cbc, (short)0x0c3c, (short)0x0bbc, + (short)0x0b3c, (short)0x0abc, (short)0x0a3c, (short)0x09bc, (short)0x093c, (short)0x08bc, (short)0x083c, (short)0x07bc, + (short)0x075c, (short)0x071c, (short)0x06dc, (short)0x069c, (short)0x065c, (short)0x061c, (short)0x05dc, (short)0x059c, + (short)0x055c, (short)0x051c, (short)0x04dc, (short)0x049c, (short)0x045c, (short)0x041c, (short)0x03dc, (short)0x039c, + (short)0x036c, (short)0x034c, (short)0x032c, (short)0x030c, (short)0x02ec, (short)0x02cc, (short)0x02ac, (short)0x028c, + (short)0x026c, (short)0x024c, (short)0x022c, (short)0x020c, (short)0x01ec, (short)0x01cc, (short)0x01ac, (short)0x018c, + (short)0x0174, (short)0x0164, (short)0x0154, (short)0x0144, (short)0x0134, (short)0x0124, (short)0x0114, (short)0x0104, + (short)0x00f4, (short)0x00e4, (short)0x00d4, (short)0x00c4, (short)0x00b4, (short)0x00a4, (short)0x0094, (short)0x0084, + (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0060, (short)0x0058, (short)0x0050, (short)0x0048, (short)0x0040, + (short)0x0038, (short)0x0030, (short)0x0028, (short)0x0020, (short)0x0018, (short)0x0010, (short)0x0008, (short)0x0000 +}; + + +static void goertzel(int *samples) +{ + int sk0, sk1, sk2; + int k, n; + int results[NUM_FREQ]; + int hits, idx; + static char last = '.'; + + for (k = 0; k < NUM_FREQ; k++) { + sk0 = sk1 = sk2 = 0; + for (n = 0; n < NUM_DTMF_POINTS; n++) { + sk0 = samples[n] + ((COS_2PI_K[k] * sk1) >> 15) - sk2; + sk2 = sk1; + sk1 = sk0; + } + results[k] = ((sk0 * sk0) >> AMP_BITS) - ((((COS_2PI_K[k] * sk0) >> 15) * sk2) >> AMP_BITS) + ((sk2 * sk2) >> AMP_BITS); + } + hits = idx = 0; + for (k=0;k is_dtmf_up) && (results[k+1] < is_dtmf_down)) { + hits++; + switch (k) { + case 2 : idx += 4 ; break; + case 4 : idx += 8 ; break; + case 6 : idx += 12; break; + case 10 : idx += 1 ; break; + case 12 : idx += 2 ; break; + case 14 : idx += 3 ; break; + } + } + } + if (hits == 2) { + if (last == '.') { + answer_sigfunc( 11, &tones[idx]); +// answer_sigfunc( 7, &tones[idx]); + } + last = 'T'; + } else { + last = '.'; + } +} + +void dtmf_find_alaw(unsigned char *buf, int len) +{ + int i; + int c; + int buf2[NUM_DTMF_POINTS]; + int idx = 0; + + while (len) { + c = MIN(len, (NUM_DTMF_POINTS)); + if (c <= 0) break; + for (i = 0; i < c; i++) buf2[idx++] = alaw2signed16[*buf++] >> (15 - AMP_BITS); + if (idx == NUM_DTMF_POINTS) { + goertzel(buf2); + idx = 0; + } + len -= c; + } +} + +void dtmf_find_ulaw(unsigned char *buf, int len) +{ + int i; + int c; + int buf2[NUM_DTMF_POINTS]; + int idx = 0; + + while (len) { + c = MIN(len, (NUM_DTMF_POINTS)); + if (c <= 0) break; + for (i = 0; i < c; i++) buf2[idx++] = ulaw2signed16[*buf++] >> (15 - AMP_BITS); + if (idx == NUM_DTMF_POINTS) { + goertzel(buf2); + idx = 0; + } + len -= c; + } +} + + +void dtmf_init(void) +{ + is_dtmf_down = config_file_read_ulong(STD_CFG_FILE, DTMF_DOWN_BORDER, DTMF_DOWN_BORDER_DEF); + is_dtmf_up = config_file_read_ulong(STD_CFG_FILE, DTMF_UP_BORDER , DTMF_UP_BORDER_DEF ); +} + diff --git a/util/source/dtmf.h b/util/source/dtmf.h new file mode 100644 index 0000000..dedd0b2 --- /dev/null +++ b/util/source/dtmf.h @@ -0,0 +1,4 @@ +void dtmf_find_alaw(unsigned char *buf, int len); +void dtmf_find_ulaw(unsigned char *buf, int len); +void dtmf_init(void); + diff --git a/util/source/register.c b/util/source/register.c new file mode 100644 index 0000000..6a3f690 --- /dev/null +++ b/util/source/register.c @@ -0,0 +1,183 @@ +#include +#include + +#include "../../common/source/global.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../../units/common.src/util.h" + +static char regName[100] = ""; +static char regCode[100] = ""; + +short checkRegCode( char *name, char *code ) +{ + char str[100], dest[21], help[100]; + short i; + + if( (strlen( name ) > 0) && (strlen( code ) == 20) ) + { + /* check registration code. If valid, return TRUE */ + +/*************************************************************************/ + +// register_name=eyeQ[DW1998] +// register_code=53B3BD2B38BB330AB23F +// crack: + if (!strcmp (code,"53B3BD2B38BB330AB23F")) return (0); + +/*************************************************************************/ + +// Name : Lauro S M de Andrade +// Code : 2F037D2BE730BEBF02FF +// war im internet: + if (!strcmp (code,"2F037D2BE730BEBF02FF")) return (0); + +/*************************************************************************/ + +// Name : Fedor Baart +// Code : 7373BD023308B3B7203F +// war im internet: + if (!strcmp (code,"7373BD023308B3B7203F")) return (0); + +/*************************************************************************/ + +// Name : SAVAGE +// Code : BAB32D78F77B3FB057AF +// war im internet: + if (!strcmp (code,"BAB32D78F77B3FB057AF")) return (0); + +/*************************************************************************/ + +// Name : ????? +// Code : 57A3BDB005BB3007BB7F +// war im internet: + if (!strcmp (code,"57A3BDB005BB3007BB7F")) return (0); + +/*************************************************************************/ + + strcpy ( name, strupr( name ) ); + strcpy ( help, ""); + for (i=0;i<(short)strlen(name);i++) { +// if (isdigit(name[i])) return (0); + if (name[i] == 'E') strcat (help,"E"); + if (name[i] == 'Y') strcat (help,"Y"); + if (name[i] == 'Q') strcat (help,"Q"); + } + if (strstr(help,"EYEQ")) return (0); + +/*************************************************************************/ + + strcpy( str, name ); + strcat( str, "o83zhb,q1#0o`1-hqpx*2" ); + str[21] = 0; + strcpy( str, strupr( str ) ); + + for( i=0 ; i < 21 ; i++ ) + { + switch( str[i] ) + { + case 'U':str[i] = 'F';break; + case 'A':str[i] = '7';break; + case 'X':str[i] = 'A';break; + case 'O':str[i] = '0';break; + case 'P':str[i] = '2';break; + case 'D':str[i] = '3';break; + case 'T':str[i] = 'F';break; + case 'H':str[i] = '5';break; + case 'I':str[i] = '5';break; + case 'J':str[i] = 'E';break; + case 'L':str[i] = 'E';break; + case 'N':str[i] = '0';break; + case 'B':str[i] = '7';break; + case 'Q':str[i] = '2';break; + case 'Z':str[i] = '8';break; + case 'F':str[i] = '3';break; + case 'G':str[i] = '5';break; + case 'R':str[i] = '2';break; + case 'K':str[i] = 'E';break; + case 'S':str[i] = 'F';break; + case 'M':str[i] = '0';break; + case 'V':str[i] = 'A';break; + case 'C':str[i] = '7';break; + case 'W':str[i] = 'A';break; + case 'Y':str[i] = '8';break; + case 'E':str[i] = '3';break; +/* + case '0':str[i] = '1';break; + case '1':str[i] = '9';break; + case '2':str[i] = '5';break; + case '3':str[i] = 'C';break; + case '4':str[i] = 'E';break; + case '5':str[i] = '3';break; + case '6':str[i] = 'F';break; + case '7':str[i] = '2';break; + case '8':str[i] = '6';break; + case '9':str[i] = '4';break; +*/ + default :str[i] = 'B';break; + } + } + dest[18] = str[2]; + dest[1] = str[2]; + dest[12] = str[5]; + dest[3] = '3'; + dest[6] = str[3]; + dest[7] = str[9]; + dest[16] = str[4]; + dest[17] = str[3]; + dest[9] = str[1]; + dest[10] = str[11]; + dest[0] = str[16]; + dest[11] = str[14]; + dest[8] = str[0]; + dest[13] = str[0]; + dest[19] = 'F'; + dest[14] = str[12]; + dest[5] = 'D'; + dest[2] = str[8]; + dest[15] = str[6]; + dest[4] = str[13]; + dest[20] = 0; + + return !strcmp( dest, code ); + } + return 0; +} + +short initRegistration( void ) +{ + config_file_read_string( STD_CFG_FILE, REGISTER_NAME, regName ,REGISTER_NAME_DEF); + config_file_read_string( STD_CFG_FILE, REGISTER_CODE, regCode ,REGISTER_CODE_DEF); + + return checkRegCode( regName, regCode ); +} + +char *QueryRegName( void ) +{ + return regName; +} + +short setRegistration( char *name, char *code ) +{ + if( !checkRegCode( name, code ) ) + return 0; + + strcpy( regName, name ); + strcpy( regCode, code ); + + config_file_write_string( STD_CFG_FILE, REGISTER_NAME, regName ); + config_file_write_string( STD_CFG_FILE, REGISTER_CODE, regCode ); + + return 1; +} + +short queryRegistration( char *name, char *code ) +{ + if( checkRegCode( regName, regCode ) ) + { + strcpy( name, regName ); + strcpy( code, regCode ); + return 1; + } + + return 0; +} diff --git a/util/source/register.h b/util/source/register.h new file mode 100644 index 0000000..abc0c7a --- /dev/null +++ b/util/source/register.h @@ -0,0 +1,10 @@ +short initRegistration( void ); + +short checkRegCode( char *name, char *code ); + +short setRegistration( char *name, char *code ); + +short queryRegistration( char *name, char *code ); + +char *QueryRegName( void ); + diff --git a/util/source/silence.c b/util/source/silence.c new file mode 100644 index 0000000..02693da --- /dev/null +++ b/util/source/silence.c @@ -0,0 +1,45 @@ +#include + +#include "../../isdn/source/isdn.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../common/source/global.h" + +void answer_sigfunc( short num, void *msg ); + +unsigned long num_of_silence_bytes; +unsigned long secs; +short msg_sand=0; +unsigned long grenzwert; + +void silence_reset (unsigned long seconds) +{ + num_of_silence_bytes = 0 ; + secs = seconds; + msg_sand = 0 ; + grenzwert = config_file_read_ulong(STD_CFG_FILE,SILENCE_BORDER,SILENCE_BORDER_DEF) * CAPI_NUM_B3_SIZE; +} +void silence_find(unsigned char *buf, int len) +{ + unsigned long diff = 0; + short i; + + for (i=0;i secs) { + msg_sand = 1; + answer_sigfunc (12, NULL); + } + } +} + + + + diff --git a/util/source/silence.h b/util/source/silence.h new file mode 100644 index 0000000..9037f69 --- /dev/null +++ b/util/source/silence.h @@ -0,0 +1,3 @@ +void silence_reset (unsigned long seconds); +void silence_find(unsigned char *buf, int len); + diff --git a/util/source/vorwahl.c b/util/source/vorwahl.c new file mode 100644 index 0000000..6366c1c --- /dev/null +++ b/util/source/vorwahl.c @@ -0,0 +1,49 @@ +void sigFunc( short num, void *msg ); + +#include + +#ifndef UNIX +#include +#endif + +#include +#include +#include +#include + +#include "../../common/source/global.h" +#include "../../common/source/texte.h" + +char *vorwahl_get_name (char *nummer) +{ + FILE *namedat; + static char tmpstr[STD_STRING_LEN],str[STD_STRING_LEN]; + char *pt; + + namedat = fopen (NUMFILE,"r"); + + if (namedat) { + while (fgets(str,STD_STRING_LEN-1,namedat)) { + strcpy (tmpstr,str); + pt = strchr (tmpstr,':'); + if (pt) { + *pt = 0; + if (strstr(nummer,tmpstr) == nummer) { + if (strchr(str,'\n')) { pt = strchr(str,'\n'); *pt = 0;} + strcpy (tmpstr," ("); + strcat (tmpstr,strchr(str,':')+1); + strcat (tmpstr,")"); + fclose (namedat); + return (tmpstr); + } + } + } + fclose (namedat); + } else { + sprintf (str,STR_NOT_FOUND,NUMFILE); + sigFunc (1,str); + } + return (""); +} + + diff --git a/util/source/vorwahl.h b/util/source/vorwahl.h new file mode 100644 index 0000000..ded3ab0 --- /dev/null +++ b/util/source/vorwahl.h @@ -0,0 +1,2 @@ +char *vorwahl_get_name (char *nummer); + diff --git a/wave/obj.unx/alw2wav.o b/wave/obj.unx/alw2wav.o new file mode 100644 index 0000000000000000000000000000000000000000..7f2b29ada0b0bbfad83b076028c736435456f39d GIT binary patch literal 3468 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 G(EA7PGUSs0 literal 0 HcmV?d00001 diff --git a/wave/obj.win/alw2wav.obj b/wave/obj.win/alw2wav.obj new file mode 100644 index 0000000000000000000000000000000000000000..b691741f3ba7a0f892921395b2d4ac207d649ec9 GIT binary patch literal 3509 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 Tk~-c|m04ZpOeLI$Tg3kYmL%eN literal 0 HcmV?d00001 diff --git a/wave/source.os2/WAV2ALW.C b/wave/source.os2/WAV2ALW.C new file mode 100644 index 0000000..f194517 --- /dev/null +++ b/wave/source.os2/WAV2ALW.C @@ -0,0 +1,830 @@ +void sigFunc( short num, void *msg ); + +/* + * IMPLEMENTATION NOTES + * + * Converting is achieved by interpolating the input samples in + * order to evaluate the represented continuous input slope at + * sample instances of the new rate (resampling). It is implemented + * as a polyphase FIR-filtering process (see reference). The rate + * conversion factor is determined by a rational factor. Its + * nominator and denominator are integers of almost arbitrary + * value, limited only by coefficient memory size. + * + * General rate conversion formula: + * + * out(n*Tout) = SUM in(m*Tin) * g((n*d/u-m)*Tin) * Tin + * over all m + * + * FIR-based rate conversion formula for polyphase processing: + * + * L-1 + * out(n*Tout) = SUM in(A(i,n)*Tin) * g(B(i,n)*Tin) * Tin + * i=0 + * + * A(i,n) = i - (L-1)/2 + [n*d/u] + * = i - (L-1)/2 + [(n%u)*d/u] + [n/u]*d + * B(i,n) = n*d/u - [n*d/u] + (L-1)/2 - i + * = ((n%u)*d/u)%1 + (L-1)/2 - i + * Tout = Tin * d/u + * + * where: + * n,i running integers + * out(t) output signal sampled at t=n*Tout + * in(t) input signal sampled in intervalls Tin + * u,d up- and downsampling factor, integers + * g(t) interpolating function + * L FIR-length of realized g(t), integer + * / float-division-operator + * % float-modulo-operator + * [] integer-operator + * + * note: + * (L-1)/2 in A(i,n) can be omitted as pure time shift yielding + * a causal design with a delay of ((L-1)/2)*Tin. + * n%u is a cyclic modulo-u counter clocked by out-rate + * [n/u]*d is a d-increment counter, advanced when n%u resets + * B(i,n)*Tin can take on L*u differnt values, at which g(t) + * has to be sampled as a coefficient array + * + * Interpolation function design: + * + * The interpolation function design is based on a sinc-function + * windowed by a gaussian function. The former determines the + * cutoff frequency, the latter limits the necessary FIR-length by + * pushing the outer skirts of the resulting impulse response below + * a certain threshold fast enough. The drawback is a smoothed + * cutoff inducing some aliasing. Due to the symmetry of g(t) the + * group delay of the filtering process is contant (linear phase). + * + * g(t) = 2*fgK*sinc(pi*2*fgK*t) * exp(-pi*(2*fgG*t)**2) + * + * where: + * fgK cutoff frequency of sinc function in f-domain + * fgG key frequency of gaussian window in f-domain + * reflecting the 6.82dB-down point + * + * note: + * Taking fsin=1/Tin as the input sampling frequncy, it turns out + * that in conjunction with L, u and d only the ratios fgK/(fsin/2) + * and fgG/(fsin/2) specify the whole proces. Requiring fsin, fgK + * and fgG as input purposely keeps the notion of absolute + * frequencies. + * + * Numerical design: + * + * Samples are expected to be 16bit-signed integers, alternating + * left and right channel in case of stereo mode- The byte order + * per sample is selectable. FIR-filtering is implemented using + * 32bit-signed integer arithmetic. Coefficients are scaled to + * find the output sample in the high word of accumulated FIR-sum. + * + * Interpolation can lead to sample magnitudes exceeding the + * input maximum. Worst case is a full scale step function on the + * input. In this case the sinc-function exhibits an overshoot of + * 2*9=18percent (Gibb's phaenomenon). In any case sample overflow + * can be avoided by a gain of 0.8. + * + * If u=d=1 and if the input stream contains only a single sample, + * the whole length of the FIR-filter will be written to the output. + * In general the resulting output signal will be (L-1)*fsout/fsin + * samples longer than the input signal. The effect is that a + * finite input sequence is viewed as padded with zeros before the + * `beginning' and after the `end'. + * + * The output lags ((L-1)/2)*Tin behind to implement g(t) as a + * causal system corresponding to a causal relationship of the + * discrete-time sequences in(m/fsin) and out(n/fsout) with + * resepect to a sequence time origin at t=n*Tin=m*Tout=0. + * + * + * REFERENCES + * + * Crochiere, R. E., Rabiner, L. R.: "Multirate Digital Signal + * Processing", Prentice-Hall, Englewood Cliffs, New Jersey, 1983 + * + * Zwicker, E., Fastl, H.: "Psychoacoustics - Facts and Models", + * Springer-Verlag, Berlin, Heidelberg, New-York, Tokyo, 1990 + */ + +#define INCL_DOSPROCESS +#define INCL_DOS + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mmioos2.h" +#include "..\..\..\units\common.src\bastypes.h" +#include "..\..\..\units\common.src\util.h" +#include "..\..\..\units\common.src\cfg_file.h" +#include "..\..\..\units\common.src\num2nam.h" +#include "..\..\common\source\global.h" +#include "..\..\common\source\texte.h" +#include "..\..\..\units\common.src\os.h" + +/* + * adaptable defines and globals + */ + +#define M_PI 3.14159265358979323846 + +#ifndef MAXUP +#define MAXUP 0x400 /* MAXUP*MAXLENGTH worst case malloc */ +#endif + +#ifndef MAXLENGTH +#define MAXLENGTH 0x400 /* max FIR length */ +#endif + +#define OUTBUFFSIZE MAXLENGTH /* fit >=MAXLENGHT samples */ +#define INBUFFSIZE (2*MAXLENGTH) /* fit >=2*MAXLENGTH samples */ +#define sqr(a) ((a)*(a)) + +/* + * other globals + */ +double g_ampli = 0.8; /* default gain, don't change */ +int + g_outfilehandle = 0, /* */ + g_firlen = 0, /* FIR-length */ + g_up = 0, /* upsampling factor */ + g_down = 0 /* downsampling factor */ +; + +LONG + g_sin[INBUFFSIZE], /* input buffer */ + g_sout[OUTBUFFSIZE], /* output buffer */ + *g_coep /* coefficient array pointer */ +; +double + g_fsi =0.0, /* input sampling frequency */ + g_fgk =0.0, /* sinc-filter cutoff frequency */ + g_fgg =0.0 /* gaussian window key frequency */ +; /* (6.8dB down freq. in f-domain) */ + +MMAUDIOHEADER mmAudHdr; + +UCHAR reverse_byte[256]={ +0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, +0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, +0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, +0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, +0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, +0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, +0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, +0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, +0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, +0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, +0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, +0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, +0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, +0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, +0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, +0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + +/* + * linear2alaw() - Convert a 16-bit linear alw value to 8-bit A-law + * + * linear2alaw() accepts an 16-bit integer and encodes it as A-law data. + * + * Linear Input Code Compressed Code + * ------------------------ --------------- + * 0000000wxyza 000wxyz + * 0000001wxyza 001wxyz + * 000001wxyzab 010wxyz + * 00001wxyzabc 011wxyz + * 0001wxyzabcd 100wxyz + * 001wxyzabcde 101wxyz + * 01wxyzabcdef 110wxyz + * 1wxyzabcdefg 111wxyz + * + */ +UCHAR linear2alaw(long alw_val) /* 2's complement (16-bit range) */ +{ + long mask = 0; + long seg = 0; + unsigned char aval = 0; + static short seg_end[8] = {0xFF, 0x1FF, 0x3FF, 0x7FF, + 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF}; + + if (alw_val >= 0) { + mask = 0xD5; /* sign (7th) bit = 1 */ + } else { + mask = 0x55; /* sign bit = 0 */ + alw_val = -alw_val; + } + + if(alw_val<0x7ff8) + alw_val+=8; + + if(alw_val<0x10) + mask = 0xD5; + + /* Convert the scaled magnitude to segment number. */ + + for (seg = 0; seg < 8; seg++) { + if (alw_val <= seg_end[seg]) + break; + } + + /* Combine the sign, segment, and quantization bits. */ + + if (seg >= 8) /* out of range, return maximum value. */ + return (0x7F ^ mask); + else { + aval = seg << 4; + if (seg < 2) + aval |= (alw_val >> 4) & 0xf; + else + aval |= (alw_val >> (seg + 3)) & 0xf; + return (aval ^ mask); + } +} + +/* + * evaluate sinc(x) = sin(x)/x safely + */ +double sinc(double x) { + return(fabs(x) < 1E-50 ? 1. : sin(fmod(x,2*M_PI))/x); +} + +/* + * evaluate interpolation function g(t) at t + * integral of g(t) over all times is expected to be one + */ +double interpol_func(double t, double fgk, double fgg) { + return (2*fgk*sinc(M_PI*2*fgk*t)*exp(-M_PI*sqr(2*fgg*t))); +} + +/* + * evaluate coefficient from i, q=n%u by sampling interpolation function + * and scale it for integer multiplication used by FIR-filtering + */ +LONG coefficient(long i, long q, long firlen, double fgk, double fgg, double fsi, + long up, long down, double amp) { + return( + (int)(0x10000 * amp * + interpol_func( + (fmod(q*down/(double)up,1.) + (firlen-1)/2 - i) / fsi, + fgk, + fgg + ) / fsi + ) + ); +} + +/* + * transfer n LONGs from s to d + */ +void transfer_int(LONG *s, LONG *d, long n) { + LONG *e; + + if (n < 1) + return; + e = d + n; + while (d != e) + *d++ = *s++; +} + +/* + * zerofill n LONGs from s + */ +void zerofill(LONG *s, long n) { + LONG *e; + + if (n < 1) + return; + e = s + n; + while (s != e) + *s++ = 0; +} + +/* + * convert buffer of n samples to LONGs + */ +void bsample_to_int(void *buff, long n) { + UCHAR *s; + LONG *d; + + if (n < 1) + return; + s = (UCHAR*)buff + n; + d = (LONG*)buff + n; + while (s != buff) { + *--d = ((LONG)(*--s)-128L)<<8; + } +} + +/* + * convert buffer of n samples to LONGs + */ +void bsample2_to_int(void *buff, long n) { + UCHAR *s; + LONG *d; + + if (n < 1) + return; + s = (UCHAR*)buff + n*2; + d = (LONG*)buff + n; + while (s != buff) { + *--d = (((LONG)(*--s)-128L)<<7)+(((LONG)(*--s)-128L)<<7); + } +} + +/* + * convert buffer of n samples to LONGs + */ +void sample_to_int(void *buff, long n) { + short *s; + LONG *d; + + if (n < 1) + return; + s = (short*)buff + n; + d = (LONG*)buff + n; + while (s != buff) { + *--d = (LONG)(*--s); + } +} + +/* + * convert buffer of n samples to LONGs + */ +void sample2_to_int(void *buff, long n) { + short *s; + LONG *d; + + if (n < 1) + return; + s = (short*)buff + n*2; + d = (LONG*)buff + n; + while (s != buff) { + *--d = ((LONG)(*--s)+(LONG)(*--s))>>1; + } +} + +/* + * convert buffer of n LONGs to samples + */ +void int_to_sample(short *buff, long n) { + short *s, *e; + UCHAR *d; + + if (n < 1) + return; + s = buff; + d = (UCHAR*)buff; + e = buff + n*2; + while (s != e) { + s++; + *d++ = reverse_byte[linear2alaw(*s++)]; + } +} + +/* + * convert buffer of n LONGs to samples + */ +void intlo_to_sample(short *buff, long n) { + short *s, *e; + UCHAR *d; + + if (n < 1) + return; + s = buff; + d = (UCHAR*)buff; + e = buff + n*2; + while (s != e) { + *d++ = reverse_byte[linear2alaw(*s++)]; + s++; + } +} + +/* + * FIR-routines, + * this is where we need all the MIPS + */ +void fir(register LONG *inp, register LONG *coep, long firlen, LONG *outp) { + register LONG akku = 0, *endp; + long n1 = (firlen / 8) * 8, n0 = firlen % 8; + + endp = coep + n1; + while (coep != endp) { + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + } + + endp = coep + n0; + while (coep != endp) { + akku += *inp++ * *coep++; + } + *outp = akku; +} + +/* + * filtering from input buffer to output buffer; + * returns number of processed samples in output buffer: + * if it is not equal to output buffer size, + * the input buffer is expected to be refilled upon entry, so that + * the last firlen numbers of the old input buffer are + * the first firlen numbers of the new input buffer; + * if it is equal to output buffer size, the output buffer + * is full and is expected to be stowed away; + * + */ +long filtering_on_buffers(LONG *inp, long insize, LONG *outp, long outsize, + LONG *coep, long firlen, long up, long down) { + static long inbaseidx = 0, inoffset = 0, cycctr = 0, outidx = 0; + + for (;;) { + inoffset = (cycctr * down)/up; + if ((inbaseidx + inoffset + firlen) > insize) { + inbaseidx -= insize - firlen + 1; + return(outidx); + } + fir(inp + inoffset + inbaseidx, + coep + cycctr * firlen, + firlen, outp + outidx++); + cycctr++; + if (!(cycctr %= up)) + inbaseidx += down; + if (!(outidx %= outsize)) + return(outsize); + } +} + +/* + * read and convert input sample format to integer + */ +long intread(HMMIO hmmioSrc, void *buff, long n, long Bits, long Channels) { + long rd = 0; + + if(Channels==2) { + if(Bits==8) { + if ((rd = mmioRead (hmmioSrc, buff, n*2)) <= 0) + return(rd); + bsample2_to_int(buff,n); + return(rd/2); + } else { + if ((rd = mmioRead (hmmioSrc, buff, n*sizeof(short)*2)) <= 0) + return(rd); + sample2_to_int(buff,n); + return(rd/sizeof(short)/2); + } + } else { + if(Bits==8) { + if ((rd = mmioRead (hmmioSrc, buff, n)) <= 0) + return(rd); + bsample_to_int(buff,n); + return(rd); + } else { + if ((rd = mmioRead (hmmioSrc, buff, n*sizeof(short))) <= 0) + return(rd); + sample_to_int(buff,n); + return(rd/sizeof(short)); + } + } +} + +/* + * do some conversion jobs and write + */ +long intwrite(long hd, LONG *buff, long n) { + long written = 0; + + int_to_sample((short*)buff, n); + if ((written = write(g_outfilehandle, buff, n)) <= 0) + return(written); + return(written); +} + +/* + * do some conversion jobs and write + */ +long intlowrite(long hd, LONG *buff, long n) { + long written = 0; + + intlo_to_sample((short*)buff, n); + if ((written = write(g_outfilehandle, buff, n)) <= 0) + return(written); + return(written); +} + +/* + * set up coefficient array + */ +void make_coe(void) { + long i = 0, q =0; + + for (i = 0; i < g_firlen; i++) { + for (q = 0; q < g_up; q++) { + g_coep[q * g_firlen + i] = coefficient(i, q, g_firlen, + g_fgk, g_fgg, g_fsi, g_up, g_down, g_ampli); + } + } +} + + +void comp_para(void) { + long u = 0,d=0; + double fin1=0.0,fdiff=0.0; + + fdiff=HUGE_VAL; + + for(u=1;u<=1024;u++) { + d=(g_fsi*u)/8000.; + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + d++; + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + if(fdiff==0.) + break; + } + + if (g_up >= g_down) { /* upsampling */ + g_fgg = g_fsi * 0.0116; + g_fgk = g_fsi * 0.461; + g_firlen = 162; + } else { /* downsampling */ + g_fgg = (g_up * g_fsi * 0.0116)/g_down; + g_fgk = (g_up * g_fsi * 0.461)/g_down; + g_firlen = (162 * g_down)/g_up; + } +} + +/* + * main + */ + +short wav2alw(char *InName) +{ + long insize = 0, outsize = 0, skirtlen=0; + MMIOINFO mmioinfoSource; + unsigned long ulAudioHeaderLength=0; + HMMIO hmmioSource; + unsigned long ulBytesRead=0; + LONG rc=0; + char OutName[300]; + char *help; + char helpstr[300]; + + memset (g_sin ,0,sizeof(LONG)*INBUFFSIZE); + memset (g_sout,0,sizeof(LONG)*OUTBUFFSIZE); + + if (InName[0] == '*') return (-200); + if (!util_file_exist(InName)) { + sprintf (helpstr,STR_NOT_FOUND,InName); + sigFunc (1,helpstr); + return (-100); + } + + if (!strstr(InName,".wav")) return (-101); + + strcpy (OutName,InName); + + help = strstr(OutName,".wav"); + *(++help) = 'a'; + *(++help) = 'l'; + *(++help) = 'w'; + + strcpy (OutName,util_strip_path(OutName)); + + if (util_file_exist(OutName)) { + if (util_file_age(InName) <= util_file_age(OutName)) return (-102); + } + + /*******************************/ + /* Set up/open the SOURCE file */ + /*******************************/ + + memset (&mmioinfoSource, 0L, sizeof (MMIOINFO)); + + mmioinfoSource.ulTranslate = MMIO_TRANSLATEHEADER | MMIO_TRANSLATEDATA; + + hmmioSource = mmioOpen (InName, &mmioinfoSource, + MMIO_READ | MMIO_DENYWRITE); + if (!hmmioSource) { +// perror(InName); + return (2); + } + + /****************************/ + /* Obtain the SOURCE HEADER */ + /****************************/ + mmioQueryHeaderLength (hmmioSource, (PLONG)&ulAudioHeaderLength, 0L, 0L); + if (ulAudioHeaderLength != sizeof (MMAUDIOHEADER)) { + /* We have a problem.....possibly incompatible versions */ + mmioClose (hmmioSource, 0L); +// perror(InName); + return (4); + } + + rc = (LONG)mmioGetHeader (hmmioSource, &mmAudHdr, + (LONG)sizeof (MMAUDIOHEADER), (PLONG)&ulBytesRead, + 0L, 0L); + + if (rc != MMIO_SUCCESS) { + /* Header unavailable */ + mmioClose (hmmioSource, 0L); +// perror(InName); + return (4); + } + +// printf("\nType of wave format: %d",mmAudHdr.mmXWAVHeader.WAVEHeader.usFormatTag); +// printf("\nNumber of channels: %d",mmAudHdr.mmXWAVHeader.WAVEHeader.usChannels); +// printf("\nSampling rate: %ld",mmAudHdr.mmXWAVHeader.WAVEHeader.ulSamplesPerSec); +// printf("\nAvg bytes per sec: %ld",mmAudHdr.mmXWAVHeader.WAVEHeader.ulAvgBytesPerSec); +// printf("\nBlock Alignment in bytes: %d",mmAudHdr.mmXWAVHeader.WAVEHeader.usBlockAlign); +// printf("\nBits per sample: %d",mmAudHdr.mmXWAVHeader.WAVEHeader.usBitsPerSample); + + g_outfilehandle=open(OutName,O_CREAT|O_BINARY|O_TRUNC|O_RDWR,S_IWRITE|S_IREAD); + if (g_outfilehandle==-1) { +// perror(OutName); + mmioClose (hmmioSource, 0L); + return(-1); + } + + if(mmAudHdr.mmXWAVHeader.WAVEHeader.ulSamplesPerSec < 7984 || + mmAudHdr.mmXWAVHeader.WAVEHeader.ulSamplesPerSec > 8016) { + + g_fsi=mmAudHdr.mmXWAVHeader.WAVEHeader.ulSamplesPerSec; + + comp_para(); + + if ((g_coep = (LONG*)malloc(g_firlen * g_up * sizeof(int))) == NULL) { +// fprintf(stderr, "cannot allocate coefficient memory\n"); + return (-2); + } + make_coe(); + skirtlen = g_firlen - 1; + zerofill(g_sin, skirtlen); + do { + insize = intread(hmmioSource, g_sin + skirtlen, + INBUFFSIZE - skirtlen, + mmAudHdr.mmXWAVHeader.WAVEHeader.usBitsPerSample, + mmAudHdr.mmXWAVHeader.WAVEHeader.usChannels); + if (insize < 0 || insize > INBUFFSIZE - skirtlen) { +// perror(InName); + close(g_outfilehandle); + free(g_coep); + return (-3); + } + for (;;) { + outsize = filtering_on_buffers(g_sin, skirtlen + insize, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (outsize != OUTBUFFSIZE) { + transfer_int(g_sin + insize, g_sin, skirtlen); + break; + } + if (intwrite(g_outfilehandle, g_sout, outsize) != outsize) { +// perror(OutName); + free(g_coep); + return (-4); + } + }; + } while (insize > 0); + zerofill(g_sin + skirtlen, skirtlen); + do { + outsize = filtering_on_buffers(g_sin, skirtlen + skirtlen, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (intwrite(g_outfilehandle, g_sout, outsize) != outsize) { +// perror(OutName); + free(g_coep); + return (-5); + } + } while (outsize == OUTBUFFSIZE); + + free(g_coep); + + } else { /* Input is 8000Sample/s no rate conversion */ + do { + insize = intread(hmmioSource, g_sin, + INBUFFSIZE, + mmAudHdr.mmXWAVHeader.WAVEHeader.usBitsPerSample, + mmAudHdr.mmXWAVHeader.WAVEHeader.usChannels); + if (insize < 0 || insize > INBUFFSIZE) { +// perror(InName); + close(g_outfilehandle); + return (-6); + } + if (intlowrite(g_outfilehandle, g_sin, insize) != insize) { +// perror(OutName); + return (-7); + } + } while (insize > 0); + } + + if (close(g_outfilehandle)) { +// perror(OutName); + return (-8); + } + + mmioClose (hmmioSource, 0L); + + return 0; +} + +/*******************************************************************/ + +short runflag = 0; + + +void convert_all_lookup (char *filename) +{ + FILE *namedat; + char str [300]; + char help[300]; + char *strptr; + + namedat = fopen (filename,"r"); + if (namedat) { + while (fgets(str,200,namedat)) { + if((str[0] != '#') && (strchr(str,'|'))) { + strptr = &str[0]; + strptr = strchr(strptr,'|'); + strptr++; + strptr = strchr(strptr,'|'); + strptr++; + *strchr(strptr,'|') = 0; + + strcpy (help,check_time(strptr)); + wav2alw (help); + } + } + fclose (namedat); + } +} + +void wav2alw_all (void) +{ + char help[200]; + + convert_all_lookup (NAMFILE); + convert_all_lookup (PRTFILE); + + config_file_read_string(STD_CFG_FILE,WELCOME_WAVE ,help,WELCOME_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); + + config_file_read_string(STD_CFG_FILE,RINGRING_WAVE,help,RINGRING_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); +} + +void _Optlink convert_all (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw_all(); + runflag--; sigFunc( 7, &runflag); +}; + +void _Optlink convert (void *filename) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw (filename); + runflag--; sigFunc( 7, &runflag); +}; + +void wav2alw_convert_all (void) +{ + _beginthread (convert_all, NULL, os2_stack_of_thread, NULL); +//convert_all(NULL); +}; + +void wav2alw_convert (char * filename) +{ + _beginthread (convert, NULL, os2_stack_of_thread, (void *)filename); +//convert(filename); +}; + +short wav2alw_convert_runs (void) +{ + return (runflag); +}; + + + \ No newline at end of file diff --git a/wave/source/alw2wav.c b/wave/source/alw2wav.c new file mode 100644 index 0000000..ef32362 --- /dev/null +++ b/wave/source/alw2wav.c @@ -0,0 +1,256 @@ +/* alwcnvrt.c */ + +#include +#include + +#include "../../../units/common.src/bastypes.h" +#include "../../../units/common.src/os.h" + +#define USHORT unsigned short +#define ULONG unsigned long +#define UCHAR unsigned char + +#pragma pack(1) + +typedef union { + long llaenge; + UCHAR claenge[4]; +}lwandel; + +typedef struct { + char ckid[4]; + ULONG cksize; + char fccType[4]; + char chu3[4]; + ULONG csize2; + USHORT usFormatTag; /* Type of wave format */ + USHORT usChannels; /* Number of channels */ + ULONG ulSamplesPerSec; /* Sampling rate */ + ULONG ulAvgBytesPerSec; /* Avg bytes per sec */ + USHORT usBlockAlign; /* Block Alignment in bytes */ + USHORT usBitsPerSample; /* Bits per sample */ + char chu4[4]; + ULONG csize3; + }chutyp; + +typedef _Packed struct { + char ckid[4]; + ULONG cksize; + char fccType[4]; + char chu3[4]; + ULONG csize2; + USHORT usFormatTag; /* Type of wave format */ + USHORT usChannels; /* Number of channels */ + ULONG ulSamplesPerSec; /* Sampling rate */ + ULONG ulAvgBytesPerSec; /* Avg bytes per sec */ + USHORT usBlockAlign; /* Block Alignment in bytes */ + USHORT usBitsPerSample; /* Bits per sample */ + USHORT notknown; + char chu4[4]; + ULONG csize3; + ULONG csize4; + char chu5[4]; + ULONG csize5; + }chutyp2; + +chutyp2 HeaderA={ +{'R','I','F','F'}, /* Chunk id (FOURCC) */ +0x00000000L, /* Chunk Size (bytes) */ +{'W','A','V','E'}, +{'f','m','t',' '}, /* Chunk id (FOURCC) */ +18L, /* Chunk Size (bytes) */ +0x0006, /* Type of wave format */ +1, /* Number of channels */ +8000L, /* Sampling rate */ +8000L, /* Avg bytes per sec */ +1, /* Block Alignment in bytes */ +8, /* Bits per sample */ +0, +{'f','a','c','t'}, /* Chunk id (FOURCC) */ +4L, /* Chunk Size (bytes) */ +0x00000000L, /* Chunk Size (bytes) */ +{'d','a','t','a'}, /* Chunk id (FOURCC) */ +0x00000000L /* Chunk Size (bytes) */ +}; + +chutyp Header8={ +{'R','I','F','F'}, /* Chunk id (FOURCC) */ +0x00000024L, /* Chunk Size (bytes) */ +{'W','A','V','E'}, +{'f','m','t',' '}, /* Chunk id (FOURCC) */ +16L, /* Chunk Size (bytes) */ +0x0001, /* Type of wave format */ +1, /* Number of channels */ +8000L, /* Sampling rate */ +8000L, /* Avg bytes per sec */ +1, /* Block Alignment in bytes */ +8, /* Bits per sample */ +{'d','a','t','a'}, /* Chunk id (FOURCC) */ +0x00000000L /* Chunk Size (bytes) */ +}; + + +chutyp Header16={ +{'R','I','F','F'}, /* Chunk id (FOURCC) */ +0x00000024L, /* Chunk Size (bytes) */ +{'W','A','V','E'}, +{'f','m','t',' '}, /* Chunk id (FOURCC) */ +16L, /* Chunk Size (bytes) */ +0x0001, /* Type of wave format */ +1, /* Number of channels */ +8000L, /* Sampling rate */ +16000L, /* Avg bytes per sec */ +2, /* Block Alignment in bytes */ +16, /* Bits per sample */ +{'d','a','t','a'}, /* Chunk id (FOURCC) */ +0x00000000L /* Chunk Size (bytes) */ +}; + +UCHAR auheader[]={ +'.' ,'s' ,'n' ,'d' ,0x00,0x00,0x00,0x1C,0x12,0x34,0x56,0x78,0x00,0x00,0x00,0x01, +0x00,0x00,0x1F,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00 +}; + +UCHAR reverse_byte1[256]={ +0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, +0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, +0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, +0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, +0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, +0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, +0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, +0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, +0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, +0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, +0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, +0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, +0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, +0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, +0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, +0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + +UCHAR al2ul[256]={ +0x2A,0x2B,0x28,0x29,0x2E,0x2F,0x2C,0x2D,0x22,0x23,0x20,0x21,0x26,0x27,0x24,0x25, +0x39,0x3A,0x37,0x38,0x3D,0x3E,0x3B,0x3C,0x31,0x32,0x30,0x30,0x35,0x36,0x33,0x34, +0x0A,0x0B,0x08,0x09,0x0E,0x0F,0x0C,0x0D,0x02,0x03,0x00,0x01,0x06,0x07,0x04,0x05, +0x1A,0x1B,0x18,0x19,0x1E,0x1F,0x1C,0x1D,0x12,0x13,0x10,0x11,0x16,0x17,0x14,0x15, +0x62,0x63,0x60,0x61,0x66,0x67,0x64,0x65,0x5D,0x5D,0x5C,0x5C,0x5F,0x5F,0x5E,0x5E, +0x74,0x76,0x70,0x72,0x7C,0x7E,0x78,0x7A,0x6A,0x6B,0x68,0x69,0x6E,0x6F,0x6C,0x6D, +0x48,0x49,0x46,0x47,0x4C,0x4D,0x4A,0x4B,0x40,0x41,0x3F,0x3F,0x44,0x45,0x42,0x43, +0x56,0x57,0x54,0x55,0x5A,0x5B,0x58,0x59,0x4F,0x4F,0x4E,0x4E,0x52,0x53,0x50,0x51, +0xAA,0xAB,0xA8,0xA9,0xAE,0xAF,0xAC,0xAD,0xA2,0xA3,0xA0,0xA1,0xA6,0xA7,0xA4,0xA5, +0xB9,0xBA,0xB7,0xB8,0xBD,0xBE,0xBB,0xBC,0xB1,0xB2,0xB0,0xB0,0xB5,0xB6,0xB3,0xB4, +0x8A,0x8B,0x88,0x89,0x8E,0x8F,0x8C,0x8D,0x82,0x83,0x80,0x81,0x86,0x87,0x84,0x85, +0x9A,0x9B,0x98,0x99,0x9E,0x9F,0x9C,0x9D,0x92,0x93,0x90,0x91,0x96,0x97,0x94,0x95, +0xE2,0xE3,0xE0,0xE1,0xE6,0xE7,0xE4,0xE5,0xDD,0xDD,0xDC,0xDC,0xDF,0xDF,0xDE,0xDE, +0xF4,0xF6,0xF0,0xF2,0xFC,0xFE,0xF8,0xFA,0xEA,0xEB,0xE8,0xE9,0xEE,0xEF,0xEC,0xED, +0xC8,0xC9,0xC6,0xC7,0xCC,0xCD,0xCA,0xCB,0xC0,0xC1,0xBF,0xBF,0xC4,0xC5,0xC2,0xC3, +0xD6,0xD7,0xD4,0xD5,0xDA,0xDB,0xD8,0xD9,0xCF,0xCF,0xCE,0xCE,0xD2,0xD3,0xD0,0xD1 +}; + +short ral2wav[256]={ +(short)0xEA80,(short)0x1580,(short)0xFEA8,(short)0x0158,(short)0xAA00,(short)0x5600,(short)0xFAA0,(short)0x0560, +(short)0xF540,(short)0x0AC0,(short)0xFFA8,(short)0x0058,(short)0xD500,(short)0x2B00,(short)0xFD50,(short)0x02B0, +(short)0xE280,(short)0x1D80,(short)0xFE28,(short)0x01D8,(short)0x8A00,(short)0x7600,(short)0xF8A0,(short)0x0760, +(short)0xF140,(short)0x0EC0,(short)0xFF28,(short)0x00D8,(short)0xC500,(short)0x3B00,(short)0xFC50,(short)0x03B0, +(short)0xEE80,(short)0x1180,(short)0xFEE8,(short)0x0118,(short)0xBA00,(short)0x4600,(short)0xFBA0,(short)0x0460, +(short)0xF740,(short)0x08C0,(short)0xFFE8,(short)0x0018,(short)0xDD00,(short)0x2300,(short)0xFDD0,(short)0x0230, +(short)0xE680,(short)0x1980,(short)0xFE68,(short)0x0198,(short)0x9A00,(short)0x6600,(short)0xF9A0,(short)0x0660, +(short)0xF340,(short)0x0CC0,(short)0xFF68,(short)0x0098,(short)0xCD00,(short)0x3300,(short)0xFCD0,(short)0x0330, +(short)0xE880,(short)0x1780,(short)0xFE88,(short)0x0178,(short)0xA200,(short)0x5E00,(short)0xFA20,(short)0x05E0, +(short)0xF440,(short)0x0BC0,(short)0xFF88,(short)0x0078,(short)0xD100,(short)0x2F00,(short)0xFD10,(short)0x02F0, +(short)0xE080,(short)0x1F80,(short)0xFE08,(short)0x01F8,(short)0x8200,(short)0x7E00,(short)0xF820,(short)0x07E0, +(short)0xF040,(short)0x0FC0,(short)0xFF08,(short)0x00F8,(short)0xC100,(short)0x3F00,(short)0xFC10,(short)0x03F0, +(short)0xEC80,(short)0x1380,(short)0xFEC8,(short)0x0138,(short)0xB200,(short)0x4E00,(short)0xFB20,(short)0x04E0, +(short)0xF640,(short)0x09C0,(short)0xFFC8,(short)0x0038,(short)0xD900,(short)0x2700,(short)0xFD90,(short)0x0270, +(short)0xE480,(short)0x1B80,(short)0xFE48,(short)0x01B8,(short)0x9200,(short)0x6E00,(short)0xF920,(short)0x06E0, +(short)0xF240,(short)0x0DC0,(short)0xFF48,(short)0x00B8,(short)0xC900,(short)0x3700,(short)0xFC90,(short)0x0370, +(short)0xEB80,(short)0x1480,(short)0xFEB8,(short)0x0148,(short)0xAE00,(short)0x5200,(short)0xFAE0,(short)0x0520, +(short)0xF5C0,(short)0x0A40,(short)0xFFB8,(short)0x0048,(short)0xD700,(short)0x2900,(short)0xFD70,(short)0x0290, +(short)0xE380,(short)0x1C80,(short)0xFE38,(short)0x01C8,(short)0x8E00,(short)0x7200,(short)0xF8E0,(short)0x0720, +(short)0xF1C0,(short)0x0E40,(short)0xFF38,(short)0x00C8,(short)0xC700,(short)0x3900,(short)0xFC70,(short)0x0390, +(short)0xEF80,(short)0x1080,(short)0xFEF8,(short)0x0108,(short)0xBE00,(short)0x4200,(short)0xFBE0,(short)0x0420, +(short)0xF7C0,(short)0x0840,(short)0xFFF8,(short)0x0008,(short)0xDF00,(short)0x2100,(short)0xFDF0,(short)0x0210, +(short)0xE780,(short)0x1880,(short)0xFE78,(short)0x0188,(short)0x9E00,(short)0x6200,(short)0xF9E0,(short)0x0620, +(short)0xF3C0,(short)0x0C40,(short)0xFF78,(short)0x0088,(short)0xCF00,(short)0x3100,(short)0xFCF0,(short)0x0310, +(short)0xE980,(short)0x1680,(short)0xFE98,(short)0x0168,(short)0xA600,(short)0x5A00,(short)0xFA60,(short)0x05A0, +(short)0xF4C0,(short)0x0B40,(short)0xFF98,(short)0x0068,(short)0xD300,(short)0x2D00,(short)0xFD30,(short)0x02D0, +(short)0xE180,(short)0x1E80,(short)0xFE18,(short)0x01E8,(short)0x8600,(short)0x7A00,(short)0xF860,(short)0x07A0, +(short)0xF0C0,(short)0x0F40,(short)0xFF18,(short)0x00E8,(short)0xC300,(short)0x3D00,(short)0xFC30,(short)0x03D0, +(short)0xED80,(short)0x1280,(short)0xFED8,(short)0x0128,(short)0xB600,(short)0x4A00,(short)0xFB60,(short)0x04A0, +(short)0xF6C0,(short)0x0940,(short)0xFFD8,(short)0x0028,(short)0xDB00,(short)0x2500,(short)0xFDB0,(short)0x0250, +(short)0xE580,(short)0x1A80,(short)0xFE58,(short)0x01A8,(short)0x9600,(short)0x6A00,(short)0xF960,(short)0x06A0, +(short)0xF2C0,(short)0x0D40,(short)0xFF58,(short)0x00A8,(short)0xCB00,(short)0x3500,(short)0xFCB0,(short)0x0350}; + +void alw2wav (char *inname, char *outname, short mode) + + { + FILE *instr,*outstr; + unsigned char acha; + lwandel laenge; + long uu; + + instr = fopen(inname , "rb"); + outstr = fopen(outname, "wb"); + + fseek(instr,0L,SEEK_END); + laenge.llaenge=ftell(instr); + fseek(instr,0L,SEEK_SET); + + switch(mode) + { + case 0: + Header16.cksize=laenge.llaenge*2+sizeof(Header16)-8; + Header16.csize3=laenge.llaenge*2; + fwrite(&Header16, sizeof(Header16), 1, outstr); + fread(&acha,sizeof(acha),1,instr); + while(!feof(instr)) + { + fwrite(ral2wav+acha, 2, 1, outstr); + fread(&acha,sizeof(acha),1,instr); + } + break; + case 1: + Header8.cksize=laenge.llaenge+sizeof(Header8)-8; + Header8.csize3=laenge.llaenge; + fwrite(&Header8, sizeof(Header8), 1, outstr); + fread(&acha,sizeof(acha),1,instr); + while(!feof(instr)) + { + uu=128+*((char*)(ral2wav+acha)+1); + fwrite(((char*)&uu), 1, 1, outstr); + fread(&acha,sizeof(acha),1,instr); + } + break; + case 2: + HeaderA.cksize=laenge.llaenge+sizeof(HeaderA)-8; + HeaderA.csize4=HeaderA.csize5=laenge.llaenge; + fwrite(&HeaderA, sizeof(HeaderA), 1, outstr); + fread(&acha,sizeof(acha),1,instr); + while(!feof(instr)) + { + fwrite(reverse_byte1+acha, 1, 1, outstr); + fread(&acha,sizeof(acha),1,instr); + } + break; + case 3: + auheader[8]=laenge.claenge[0]; + auheader[9]=laenge.claenge[1]; + auheader[10]=laenge.claenge[2]; + auheader[11]=laenge.claenge[3]; + fwrite(&auheader, sizeof(auheader), 1, outstr); + fread(&acha,sizeof(acha),1,instr); + while(!feof(instr)) + { + fwrite(al2ul+reverse_byte1[acha], 1, 1, outstr); + fread(&acha,sizeof(acha),1,instr); + } + break; + } + + fclose (instr); + fclose (outstr); + + return; + } diff --git a/wave/source/alw2wav.h b/wave/source/alw2wav.h new file mode 100644 index 0000000..dc4d76f --- /dev/null +++ b/wave/source/alw2wav.h @@ -0,0 +1 @@ +void alw2wav (char *inname, char *outname, short mode); diff --git a/wave/source/backups/wav2alw.c~0 b/wave/source/backups/wav2alw.c~0 new file mode 100644 index 0000000..5495c5a --- /dev/null +++ b/wave/source/backups/wav2alw.c~0 @@ -0,0 +1,882 @@ +void sigFunc( short num, void *msg ); +/* + * IMPLEMENTATION NOTES + * + * Converting is achieved by interpolating the input samples in + * order to evaluate the represented continuous input slope at + * sample instances of the new rate (resampling). It is implemented + * as a polyphase FIR-filtering process (see reference). The rate + * conversion factor is determined by a rational factor. Its + * nominator and denominator are integers of almost arbitrary + * value, limited only by coefficient memory size. + * + * General rate conversion formula: + * + * out(n*Tout) = SUM in(m*Tin) * g((n*d/u-m)*Tin) * Tin + * over all m + * + * FIR-based rate conversion formula for polyphase processing: + * + * L-1 + * out(n*Tout) = SUM in(A(i,n)*Tin) * g(B(i,n)*Tin) * Tin + * i=0 + * + * A(i,n) = i - (L-1)/2 + [n*d/u] + * = i - (L-1)/2 + [(n%u)*d/u] + [n/u]*d + * B(i,n) = n*d/u - [n*d/u] + (L-1)/2 - i + * = ((n%u)*d/u)%1 + (L-1)/2 - i + * Tout = Tin * d/u + * + * where: + * n,i running integers + * out(t) output signal sampled at t=n*Tout + * in(t) input signal sampled in intervalls Tin + * u,d up- and downsampling factor, integers + * g(t) interpolating function + * L FIR-length of realized g(t), integer + * / float-division-operator + * % float-modulo-operator + * [] integer-operator + * + * note: + * (L-1)/2 in A(i,n) can be omitted as pure time shift yielding + * a causal design with a delay of ((L-1)/2)*Tin. + * n%u is a cyclic modulo-u counter clocked by out-rate + * [n/u]*d is a d-increment counter, advanced when n%u resets + * B(i,n)*Tin can take on L*u differnt values, at which g(t) + * has to be sampled as a coefficient array + * + * Interpolation function design: + * + * The interpolation function design is based on a sinc-function + * windowed by a gaussian function. The former determines the + * cutoff frequency, the latter limits the necessary FIR-length by + * pushing the outer skirts of the resulting impulse response below + * a certain threshold fast enough. The drawback is a smoothed + * cutoff inducing some aliasing. Due to the symmetry of g(t) the + * group delay of the filtering process is contant (linear phase). + * + * g(t) = 2*fgK*sinc(pi*2*fgK*t) * exp(-pi*(2*fgG*t)**2) + * + * where: + * fgK cutoff frequency of sinc function in f-domain + * fgG key frequency of gaussian window in f-domain + * reflecting the 6.82dB-down point + * + * note: + * Taking fsin=1/Tin as the input sampling frequncy, it turns out + * that in conjunction with L, u and d only the ratios fgK/(fsin/2) + * and fgG/(fsin/2) specify the whole proces. Requiring fsin, fgK + * and fgG as input purposely keeps the notion of absolute + * frequencies. + * + * Numerical design: + * + * Samples are expected to be 16bit-signed integers, alternating + * left and right channel in case of stereo mode- The byte order + * per sample is selectable. FIR-filtering is implemented using + * 32bit-signed integer arithmetic. Coefficients are scaled to + * find the output sample in the high word of accumulated FIR-sum. + * + * Interpolation can lead to sample magnitudes exceeding the + * input maximum. Worst case is a full scale step function on the + * input. In this case the sinc-function exhibits an overshoot of + * 2*9=18percent (Gibb's phaenomenon). In any case sample overflow + * can be avoided by a gain of 0.8. + * + * If u=d=1 and if the input stream contains only a single sample, + * the whole length of the FIR-filter will be written to the output. + * In general the resulting output signal will be (L-1)*fsout/fsin + * samples longer than the input signal. The effect is that a + * finite input sequence is viewed as padded with zeros before the + * `beginning' and after the `end'. + * + * The output lags ((L-1)/2)*Tin behind to implement g(t) as a + * causal system corresponding to a causal relationship of the + * discrete-time sequences in(m/fsin) and out(n/fsout) with + * resepect to a sequence time origin at t=n*Tin=m*Tout=0. + * + * + * REFERENCES + * + * Crochiere, R. E., Rabiner, L. R.: "Multirate Digital Signal + * Processing", Prentice-Hall, Englewood Cliffs, New Jersey, 1983 + * + * Zwicker, E., Fastl, H.: "Psychoacoustics - Facts and Models", + * Springer-Verlag, Berlin, Heidelberg, New-York, Tokyo, 1990 + */ + +#ifdef WIN32 +#include +#endif + +#include +#include +#include +#include +#include + +#ifndef UNIX +#include +#include +#endif + +#include "../../../units/common.src/bastypes.h" + +#include "../../../units/common.src/util.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../../units/common.src/num2nam.h" +#include "../../common/source/global.h" +#include "../../common/source/texte.h" +#include "../../../units/common.src/os.h" + +/* + * adaptable defines and globals + */ + +#define M_PI 3.14159265358979323846 + +#ifndef MAXUP +#define MAXUP 0x400 /* MAXUP*MAXLENGTH worst case malloc */ +#endif + +#ifndef MAXLENGTH +#define MAXLENGTH 0x400 /* max FIR length */ +#endif + +#define OUTBUFFSIZE MAXLENGTH /* fit >=MAXLENGHT samples */ +#define INBUFFSIZE (2*MAXLENGTH) /* fit >=2*MAXLENGTH samples */ +#define sqr(a) ((a)*(a)) + +/* + * other globals + */ + +FILE *g_outfilehandle = NULL; /* */ + +double g_ampli = 0.8; /* default gain, don't change */ +int + g_firlen = 0, /* FIR-length */ + g_up = 0, /* upsampling factor */ + g_down = 0 /* downsampling factor */ +; + +//LONG +long + g_sin[INBUFFSIZE], /* input buffer */ + g_sout[OUTBUFFSIZE], /* output buffer */ + *g_coep /* coefficient array pointer */ +; +double + g_fsi =0.0, /* input sampling frequency */ + g_fgk =0.0, /* sinc-filter cutoff frequency */ + g_fgg =0.0 /* gaussian window key frequency */ +; /* (6.8dB down freq. in f-domain) */ + +unsigned char /*UCHAR*/ reverse_byte[256]={ +0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, +0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, +0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, +0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, +0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, +0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, +0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, +0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, +0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, +0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, +0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, +0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, +0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, +0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, +0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, +0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + + +char str[100]; +unsigned char bytevar; +unsigned short wordvar; +unsigned long dwordvar; + +unsigned short Channels; +unsigned long SamplesPerSecond; +unsigned short BitsPerSample; + +unsigned long BytePerSecond; +unsigned short BytePerSample; + +/* + * linear2alaw() - Convert a 16-bit linear alw value to 8-bit A-law + * + * linear2alaw() accepts an 16-bit integer and encodes it as A-law data. + * + * Linear Input Code Compressed Code + * ------------------------ --------------- + * 0000000wxyza 000wxyz + * 0000001wxyza 001wxyz + * 000001wxyzab 010wxyz + * 00001wxyzabc 011wxyz + * 0001wxyzabcd 100wxyz + * 001wxyzabcde 101wxyz + * 01wxyzabcdef 110wxyz + * 1wxyzabcdefg 111wxyz + * + */ +unsigned char linear2alaw(long alw_val) /* 2's complement (16-bit range) */ +{ + long mask = 0; + long seg = 0; + unsigned char aval = 0; + static short seg_end[8] = {0xFF, 0x1FF, 0x3FF, 0x7FF, + 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF}; + + if (alw_val >= 0) { + mask = 0xD5; /* sign (7th) bit = 1 */ + } else { + mask = 0x55; /* sign bit = 0 */ + alw_val = -alw_val; + } + + if(alw_val<0x7ff8) + alw_val+=8; + + if(alw_val<0x10) + mask = 0xD5; + + /* Convert the scaled magnitude to segment number. */ + + for (seg = 0; seg < 8; seg++) { + if (alw_val <= seg_end[seg]) + break; + } + + /* Combine the sign, segment, and quantization bits. */ + + if (seg >= 8) /* out of range, return maximum value. */ + return ((unsigned char)(0x7F ^ mask)); + else { + aval = (unsigned char)(seg << 4); + if (seg < 2) + aval |= (alw_val >> 4) & 0xf; + else + aval |= (alw_val >> (seg + 3)) & 0xf; + return ((unsigned char)(aval ^ mask)); + } +} + +/* + * evaluate sinc(x) = sin(x)/x safely + */ +double sinc(double x) { + return(fabs(x) < 1E-50 ? 1. : sin(fmod(x,2*M_PI))/x); +} + +/* + * evaluate interpolation function g(t) at t + * integral of g(t) over all times is expected to be one + */ +double interpol_func(double t, double fgk, double fgg) { + return (2*fgk*sinc(M_PI*2*fgk*t)*exp(-M_PI*sqr(2*fgg*t))); +} + +/* + * evaluate coefficient from i, q=n%u by sampling interpolation function + * and scale it for integer multiplication used by FIR-filtering + */ +long coefficient(long i, long q, long firlen, double fgk, double fgg, double fsi, + long up, long down, double amp) { + return( + (int)(0x10000 * amp * + interpol_func( + (fmod(q*down/(double)up,1.) + (firlen-1)/2 - i) / fsi, + fgk, + fgg + ) / fsi + ) + ); +} + +/* + * transfer n LONGs from s to d + */ +void transfer_int(long *s, long *d, long n) { + long *e; + + if (n < 1) + return; + e = d + n; + while (d != e) + *d++ = *s++; +} + +/* + * zerofill n longs from s + */ +void zerofill(long *s, long n) { + long *e; + + if (n < 1) + return; + e = s + n; + while (s != e) + *s++ = 0; +} + +/* + * convert buffer of n samples to longs + */ +void bsample_to_int(void *buff, long n) { + unsigned char *s; + long *d; + + if (n < 1) + return; + s = (unsigned char*)buff + n; + d = (long*)buff + n; + while (s != buff) { + *--d = ((long)(*--s)-128L)<<8; + } +} + +/* + * convert buffer of n samples to longs + */ +void bsample2_to_int(void *buff, long n) { + unsigned char *s; +//unsigned char *ms; +//unsigned char *mms; + + long *d; + + if (n < 1) return; + + s = (unsigned char*)buff + n*2; + d = (long*)buff + n; + while (s != buff) { +//problem +//ms = s-1; +//mms=s-2; + *--d = (((long)(*--s)-128L)<<7)+(((long)(*--s)-128L)<<7); +// *--d = (((long)(*ms)-128L)<<7)+(((long)(*mms)-128L)<<7); +//s -=2; + } +} + +/* + * convert buffer of n samples to longs + */ +void sample_to_int(void *buff, long n) { + short *s; + long *d; + + if (n < 1) + return; + s = (short*)buff + n; + d = (long*)buff + n; + while (s != buff) { + *--d = (long)(*--s); + } +} + +/* + * convert buffer of n samples to longs + */ +void sample2_to_int(void *buff, long n) { + short *s; + short *ms; + short *mms; + long *d; + + if (n < 1) + return; + s = (short*)buff + n*2; + d = (long*)buff + n; + while (s != buff) { +//problem +//ms = s-1; +//mms = s-2; + *--d = ((long)(*--s)+(long)(*--s))>>1; +// *--d = ((long)(*ms)+(long)(*mms))>>1; +//s -=2; + } +} + +/* + * convert buffer of n longs to samples + */ +void int_to_sample(short *buff, long n) { + short *s, *e; + unsigned char *d; + + if (n < 1) + return; + s = buff; + d = (unsigned char*)buff; + e = buff + n*2; + while (s != e) { + s++; + *d++ = reverse_byte[linear2alaw(*s++)]; + } +} + +/* + * convert buffer of n longs to samples + */ +void intlo_to_sample(short *buff, long n) { + short *s, *e; + unsigned char *d; + + if (n < 1) + return; + s = buff; + d = (unsigned char*)buff; + e = buff + n*2; + while (s != e) { + *d++ = reverse_byte[linear2alaw(*s++)]; + s++; + } +} + +/* + * FIR-routines, + * this is where we need all the MIPS + */ +void fir(register long *inp, register long *coep, long firlen, long *outp) { + register long akku = 0, *endp; + long n1 = (firlen / 8) * 8, n0 = firlen % 8; + + endp = coep + n1; + while (coep != endp) { + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + } + + endp = coep + n0; + while (coep != endp) { + akku += *inp++ * *coep++; + } + *outp = akku; +} + +/* + * filtering from input buffer to output buffer; + * returns number of processed samples in output buffer: + * if it is not equal to output buffer size, + * the input buffer is expected to be refilled upon entry, so that + * the last firlen numbers of the old input buffer are + * the first firlen numbers of the new input buffer; + * if it is equal to output buffer size, the output buffer + * is full and is expected to be stowed away; + * + */ +long filtering_on_buffers(long *inp, long insize, long *outp, long outsize, + long *coep, long firlen, long up, long down) { + static long inbaseidx = 0, inoffset = 0, cycctr = 0, outidx = 0; + + for (;;) { + inoffset = (cycctr * down)/up; + if ((inbaseidx + inoffset + firlen) > insize) { + inbaseidx -= insize - firlen + 1; + return(outidx); + } + fir(inp + inoffset + inbaseidx, + coep + cycctr * firlen, + firlen, outp + outidx++); + cycctr++; + if (!(cycctr %= up)) + inbaseidx += down; + if (!(outidx %= outsize)) + return(outsize); + } +} + +/* + * read and convert input sample format to integer + */ +long intread(FILE* hmmioSrc, void *buff, long n, long Bits, long Channels) { + long rd = 0; + + if(Channels==2) { + if(Bits==8) { + if ((rd = fread (buff, 1, n*2, hmmioSrc)) <= 0) + return(rd); + bsample2_to_int(buff,n); + return(rd/2); + } else { + if ((rd = fread (buff, 1, n*sizeof(short)*2, hmmioSrc)) <= 0) + return(rd); + sample2_to_int(buff,n); + return(rd/sizeof(short)/2); + } + } else { + if(Bits==8) { + if ((rd = fread(buff, 1, n, hmmioSrc)) <= 0) + return(rd); + bsample_to_int(buff,n); + return(rd); + } else { + if ((rd = fread (buff, 1, n*sizeof(short), hmmioSrc )) <= 0) + return(rd); + sample_to_int(buff,n); + return(rd/sizeof(short)); + } + } +} + +/* + * do some conversion jobs and write + */ +long intwrite(long *buff, long n) { + long written = 0; + + int_to_sample((short*)buff, n); + if ((written = fwrite(buff, 1, n, g_outfilehandle)) <= 0) + return(written); + return(written); +} + +/* + * do some conversion jobs and write + */ +long intlowrite(long *buff, long n) { + long written = 0; + + intlo_to_sample((short*)buff, n); + if ((written = fwrite(buff, 1, n, g_outfilehandle)) <= 0) + return(written); + return(written); +} + +/* + * set up coefficient array + */ +void make_coe(void) { + long i = 0, q =0; + + for (i = 0; i < g_firlen; i++) { + for (q = 0; q < g_up; q++) { + g_coep[q * g_firlen + i] = coefficient(i, q, g_firlen, + g_fgk, g_fgg, g_fsi, g_up, g_down, g_ampli); + } + } +} + + +void comp_para(void) { + long u = 0,d=0; + double fin1=0.0,fdiff=0.0; + + fdiff=HUGE_VAL; + + for(u=1;u<=1024;u++) { + d=(long)((g_fsi*u)/8000.); + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + d++; + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + if(fdiff==0.) + break; + } + + if (g_up >= g_down) { /* upsampling */ + g_fgg = g_fsi * 0.0116; + g_fgk = g_fsi * 0.461; + g_firlen = 162; + } else { /* downsampling */ + g_fgg = (g_up * g_fsi * 0.0116)/g_down; + g_fgk = (g_up * g_fsi * 0.461)/g_down; + g_firlen = (162 * g_down)/g_up; + } +} + +/* + * main + */ + +short wav2alw(char *InName) +{ + long insize = 0, outsize = 0, skirtlen=0; +// unsigned long ulAudioHeaderLength=0; + FILE* hmmioSource; +// unsigned long ulBytesRead=0; +// long rc=0; + char OutName[300]; + char *help; + char helpstr[300]; + + memset (g_sin ,0,sizeof(long)*INBUFFSIZE); + memset (g_sout,0,sizeof(long)*OUTBUFFSIZE); + + if (InName[0] == '*') return (-200); + if (!util_file_exist(InName)) { + sprintf (helpstr,STR_NOT_FOUND,InName); + sigFunc (1,helpstr); + return (-100); + } + + if (!strstr(InName,WAV_EXT)) return (-101); + + strcpy (OutName,InName); + + help = strstr(OutName,WAV_EXT); + *(++help) = 'a'; + *(++help) = 'l'; + *(++help) = 'w'; + + strcpy (OutName,util_strip_path(OutName)); + + if (util_file_exist(OutName)) { + if (util_file_age(InName) <= util_file_age(OutName)) return (-102); + } + + /*******************************/ + /* Set up/open the SOURCE file */ + /*******************************/ + + hmmioSource = fopen(InName, "rb"); + if (hmmioSource == NULL) { + return (2); + } + + /****************************/ + /* Obtain the SOURCE HEADER */ + /****************************/ + + g_outfilehandle=fopen(OutName,"wb"); + if (g_outfilehandle==NULL) { + fclose (hmmioSource); + return(-1); + }; + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("RIFF",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("\n\n#%s#\n",str); + + fread (&dwordvar,1,4,hmmioSource); + if (!dwordvar) { + sprintf (str,"WAVE-file is empty: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("dateil„nge=%d\n",dwordvar); + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("WAVE",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("#%s#\n",str); + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("fmt ",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("#%s#\n",str); + + fread (&dwordvar ,1,4,hmmioSource); +// printf ("l„nge subchunk=%d\n",dwordvar); +// if (dwordvar != 16) { +// sprintf (str,"Unsupported format: %s!",InName); +// sigFunc (2,str); +// return (-1); +//} + + fread (&wordvar ,1,2,hmmioSource); +// printf ("format tag=%d\n",wordvar); + + fread (&Channels ,1,2,hmmioSource); +// printf ("channels=%d\n",Channels); + if (!((Channels == 1) || (Channels == 2))) { + sprintf (str,"Error num channels: %s!",InName); + sigFunc (2,str); + return (-1); + } + + fread (&SamplesPerSecond ,1,4,hmmioSource); +// printf ("Samples per second=%d\n",SamplesPerSecond); + + fread (str ,1,6,hmmioSource); + + fread (&BitsPerSample ,1,2,hmmioSource); +// printf ("bit per sample=%d\n",BitsPerSample); + + + if(SamplesPerSecond < 7984 || SamplesPerSecond > 8016) { + + g_fsi=SamplesPerSecond; + + comp_para(); + + if ((g_coep = (long*)malloc(g_firlen * g_up * sizeof(int))) == NULL) { + return (-2); + } + make_coe(); + skirtlen = g_firlen - 1; + zerofill(g_sin, skirtlen); + do { + insize = intread(hmmioSource, g_sin + skirtlen, + INBUFFSIZE - skirtlen, + BitsPerSample, + Channels); + if (insize < 0 || insize > INBUFFSIZE - skirtlen) { + fclose(g_outfilehandle); + free(g_coep); + return (-3); + } + for (;;) { + outsize = filtering_on_buffers(g_sin, skirtlen + insize, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (outsize != OUTBUFFSIZE) { + transfer_int(g_sin + insize, g_sin, skirtlen); + break; + } + if (intwrite(g_sout, outsize) != outsize) { + free(g_coep); + return (-4); + } + }; + } while (insize > 0); + zerofill(g_sin + skirtlen, skirtlen); + do { + outsize = filtering_on_buffers(g_sin, skirtlen + skirtlen, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (intwrite(g_sout, outsize) != outsize) { + free(g_coep); + return (-5); + } + } while (outsize == OUTBUFFSIZE); + + free(g_coep); + + } else { /* Input is 8000Sample/s no rate conversion */ + do { + insize = intread(hmmioSource, g_sin, + INBUFFSIZE, + BitsPerSample, + Channels); + if (insize < 0 || insize > INBUFFSIZE) { + fclose(g_outfilehandle); + return (-6); + } + if (intlowrite(g_sin, insize) != insize) { + return (-7); + } + } while (insize > 0); + } + + if (fclose(g_outfilehandle)) { + return (-8); + } + + fclose (hmmioSource); + + return 0; +} + +/*******************************************************************/ + +short runflag = 0; + + +void convert_all_lookup (char *filename) +{ + FILE *namedat; + char str [300]; + char help[300]; + char *strptr; + + namedat = fopen (filename,"r"); + if (namedat) { + while (fgets(str,200,namedat)) { + if((str[0] != '#') && (strchr(str,'|'))) { + strptr = &str[0]; + strptr = strchr(strptr,'|'); + strptr++; + strptr = strchr(strptr,'|'); + strptr++; + *strchr(strptr,'|') = 0; + + strcpy (help,check_time(strptr)); + wav2alw (help); + } + } + fclose (namedat); + } +} + +void wav2alw_all (void) +{ + char help[200]; + + convert_all_lookup (NAMFILE); + convert_all_lookup (PRTFILE); + + config_file_read_string(STD_CFG_FILE,WELCOME_WAVE ,help,WELCOME_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); + + config_file_read_string(STD_CFG_FILE,RINGRING_WAVE,help,RINGRING_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); +} + +void _Optlink convert_all (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw_all(); + runflag--; sigFunc( 7, &runflag); +}; + +char fname[200]; + +void _Optlink convert (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw (&fname[0]); + runflag--; sigFunc( 7, &runflag); +}; + +void wav2alw_convert_all (void) +{ + OsStartThread(convert_all); +}; + +void wav2alw_convert (char * filename) +{ + strcpy (fname,filename); + OsStartThread (convert); +}; + +short wav2alw_convert_runs (void) +{ + return (runflag); +}; + + diff --git a/wave/source/backups/wav2alw.c~1 b/wave/source/backups/wav2alw.c~1 new file mode 100644 index 0000000..8b78b21 --- /dev/null +++ b/wave/source/backups/wav2alw.c~1 @@ -0,0 +1,882 @@ +void sigFunc( short num, void *msg ); +/* + * IMPLEMENTATION NOTES + * + * Converting is achieved by interpolating the input samples in + * order to evaluate the represented continuous input slope at + * sample instances of the new rate (resampling). It is implemented + * as a polyphase FIR-filtering process (see reference). The rate + * conversion factor is determined by a rational factor. Its + * nominator and denominator are integers of almost arbitrary + * value, limited only by coefficient memory size. + * + * General rate conversion formula: + * + * out(n*Tout) = SUM in(m*Tin) * g((n*d/u-m)*Tin) * Tin + * over all m + * + * FIR-based rate conversion formula for polyphase processing: + * + * L-1 + * out(n*Tout) = SUM in(A(i,n)*Tin) * g(B(i,n)*Tin) * Tin + * i=0 + * + * A(i,n) = i - (L-1)/2 + [n*d/u] + * = i - (L-1)/2 + [(n%u)*d/u] + [n/u]*d + * B(i,n) = n*d/u - [n*d/u] + (L-1)/2 - i + * = ((n%u)*d/u)%1 + (L-1)/2 - i + * Tout = Tin * d/u + * + * where: + * n,i running integers + * out(t) output signal sampled at t=n*Tout + * in(t) input signal sampled in intervalls Tin + * u,d up- and downsampling factor, integers + * g(t) interpolating function + * L FIR-length of realized g(t), integer + * / float-division-operator + * % float-modulo-operator + * [] integer-operator + * + * note: + * (L-1)/2 in A(i,n) can be omitted as pure time shift yielding + * a causal design with a delay of ((L-1)/2)*Tin. + * n%u is a cyclic modulo-u counter clocked by out-rate + * [n/u]*d is a d-increment counter, advanced when n%u resets + * B(i,n)*Tin can take on L*u differnt values, at which g(t) + * has to be sampled as a coefficient array + * + * Interpolation function design: + * + * The interpolation function design is based on a sinc-function + * windowed by a gaussian function. The former determines the + * cutoff frequency, the latter limits the necessary FIR-length by + * pushing the outer skirts of the resulting impulse response below + * a certain threshold fast enough. The drawback is a smoothed + * cutoff inducing some aliasing. Due to the symmetry of g(t) the + * group delay of the filtering process is contant (linear phase). + * + * g(t) = 2*fgK*sinc(pi*2*fgK*t) * exp(-pi*(2*fgG*t)**2) + * + * where: + * fgK cutoff frequency of sinc function in f-domain + * fgG key frequency of gaussian window in f-domain + * reflecting the 6.82dB-down point + * + * note: + * Taking fsin=1/Tin as the input sampling frequncy, it turns out + * that in conjunction with L, u and d only the ratios fgK/(fsin/2) + * and fgG/(fsin/2) specify the whole proces. Requiring fsin, fgK + * and fgG as input purposely keeps the notion of absolute + * frequencies. + * + * Numerical design: + * + * Samples are expected to be 16bit-signed integers, alternating + * left and right channel in case of stereo mode- The byte order + * per sample is selectable. FIR-filtering is implemented using + * 32bit-signed integer arithmetic. Coefficients are scaled to + * find the output sample in the high word of accumulated FIR-sum. + * + * Interpolation can lead to sample magnitudes exceeding the + * input maximum. Worst case is a full scale step function on the + * input. In this case the sinc-function exhibits an overshoot of + * 2*9=18percent (Gibb's phaenomenon). In any case sample overflow + * can be avoided by a gain of 0.8. + * + * If u=d=1 and if the input stream contains only a single sample, + * the whole length of the FIR-filter will be written to the output. + * In general the resulting output signal will be (L-1)*fsout/fsin + * samples longer than the input signal. The effect is that a + * finite input sequence is viewed as padded with zeros before the + * `beginning' and after the `end'. + * + * The output lags ((L-1)/2)*Tin behind to implement g(t) as a + * causal system corresponding to a causal relationship of the + * discrete-time sequences in(m/fsin) and out(n/fsout) with + * resepect to a sequence time origin at t=n*Tin=m*Tout=0. + * + * + * REFERENCES + * + * Crochiere, R. E., Rabiner, L. R.: "Multirate Digital Signal + * Processing", Prentice-Hall, Englewood Cliffs, New Jersey, 1983 + * + * Zwicker, E., Fastl, H.: "Psychoacoustics - Facts and Models", + * Springer-Verlag, Berlin, Heidelberg, New-York, Tokyo, 1990 + */ + +#ifdef WIN32 +#include +#endif + +#include +#include +#include +#include +#include + +#ifndef UNIX +#include +#include +#endif + +#include "../../../units/common.src/bastypes.h" + +#include "../../../units/common.src/util.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../../units/common.src/num2nam.h" +#include "../../common/source/global.h" +#include "../../common/source/texte.h" +#include "../../../units/common.src/os.h" + +/* + * adaptable defines and globals + */ + +#define M_PI 3.14159265358979323846 + +#ifndef MAXUP +#define MAXUP 0x400 /* MAXUP*MAXLENGTH worst case malloc */ +#endif + +#ifndef MAXLENGTH +#define MAXLENGTH 0x400 /* max FIR length */ +#endif + +#define OUTBUFFSIZE MAXLENGTH /* fit >=MAXLENGHT samples */ +#define INBUFFSIZE (2*MAXLENGTH) /* fit >=2*MAXLENGTH samples */ +#define sqr(a) ((a)*(a)) + +/* + * other globals + */ + +FILE *g_outfilehandle = NULL; /* */ + +double g_ampli = 0.8; /* default gain, don't change */ +int + g_firlen = 0, /* FIR-length */ + g_up = 0, /* upsampling factor */ + g_down = 0 /* downsampling factor */ +; + +//LONG +long + g_sin[INBUFFSIZE], /* input buffer */ + g_sout[OUTBUFFSIZE], /* output buffer */ + *g_coep /* coefficient array pointer */ +; +double + g_fsi =0.0, /* input sampling frequency */ + g_fgk =0.0, /* sinc-filter cutoff frequency */ + g_fgg =0.0 /* gaussian window key frequency */ +; /* (6.8dB down freq. in f-domain) */ + +unsigned char /*UCHAR*/ reverse_byte[256]={ +0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, +0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, +0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, +0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, +0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, +0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, +0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, +0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, +0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, +0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, +0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, +0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, +0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, +0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, +0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, +0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + + +char str[100]; +unsigned char bytevar; +unsigned short wordvar; +unsigned long dwordvar; + +unsigned short Channels; +unsigned long SamplesPerSecond; +unsigned short BitsPerSample; + +unsigned long BytePerSecond; +unsigned short BytePerSample; + +/* + * linear2alaw() - Convert a 16-bit linear alw value to 8-bit A-law + * + * linear2alaw() accepts an 16-bit integer and encodes it as A-law data. + * + * Linear Input Code Compressed Code + * ------------------------ --------------- + * 0000000wxyza 000wxyz + * 0000001wxyza 001wxyz + * 000001wxyzab 010wxyz + * 00001wxyzabc 011wxyz + * 0001wxyzabcd 100wxyz + * 001wxyzabcde 101wxyz + * 01wxyzabcdef 110wxyz + * 1wxyzabcdefg 111wxyz + * + */ +unsigned char linear2alaw(long alw_val) /* 2's complement (16-bit range) */ +{ + long mask = 0; + long seg = 0; + unsigned char aval = 0; + static short seg_end[8] = {0xFF, 0x1FF, 0x3FF, 0x7FF, + 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF}; + + if (alw_val >= 0) { + mask = 0xD5; /* sign (7th) bit = 1 */ + } else { + mask = 0x55; /* sign bit = 0 */ + alw_val = -alw_val; + } + + if(alw_val<0x7ff8) + alw_val+=8; + + if(alw_val<0x10) + mask = 0xD5; + + /* Convert the scaled magnitude to segment number. */ + + for (seg = 0; seg < 8; seg++) { + if (alw_val <= seg_end[seg]) + break; + } + + /* Combine the sign, segment, and quantization bits. */ + + if (seg >= 8) /* out of range, return maximum value. */ + return ((unsigned char)(0x7F ^ mask)); + else { + aval = (unsigned char)(seg << 4); + if (seg < 2) + aval |= (alw_val >> 4) & 0xf; + else + aval |= (alw_val >> (seg + 3)) & 0xf; + return ((unsigned char)(aval ^ mask)); + } +} + +/* + * evaluate sinc(x) = sin(x)/x safely + */ +double sinc(double x) { + return(fabs(x) < 1E-50 ? 1. : sin(fmod(x,2*M_PI))/x); +} + +/* + * evaluate interpolation function g(t) at t + * integral of g(t) over all times is expected to be one + */ +double interpol_func(double t, double fgk, double fgg) { + return (2*fgk*sinc(M_PI*2*fgk*t)*exp(-M_PI*sqr(2*fgg*t))); +} + +/* + * evaluate coefficient from i, q=n%u by sampling interpolation function + * and scale it for integer multiplication used by FIR-filtering + */ +long coefficient(long i, long q, long firlen, double fgk, double fgg, double fsi, + long up, long down, double amp) { + return( + (int)(0x10000 * amp * + interpol_func( + (fmod(q*down/(double)up,1.) + (firlen-1)/2 - i) / fsi, + fgk, + fgg + ) / fsi + ) + ); +} + +/* + * transfer n LONGs from s to d + */ +void transfer_int(long *s, long *d, long n) { + long *e; + + if (n < 1) + return; + e = d + n; + while (d != e) + *d++ = *s++; +} + +/* + * zerofill n longs from s + */ +void zerofill(long *s, long n) { + long *e; + + if (n < 1) + return; + e = s + n; + while (s != e) + *s++ = 0; +} + +/* + * convert buffer of n samples to longs + */ +void bsample_to_int(void *buff, long n) { + unsigned char *s; + long *d; + + if (n < 1) + return; + s = (unsigned char*)buff + n; + d = (long*)buff + n; + while (s != buff) { + *--d = ((long)(*--s)-128L)<<8; + } +} + +/* + * convert buffer of n samples to longs + */ +void bsample2_to_int(void *buff, long n) { + unsigned char *s; +unsigned char *ms; +unsigned char *mms; + + long *d; + + if (n < 1) return; + + s = (unsigned char*)buff + n*2; + d = (long*)buff + n; + while (s != buff) { +//problem +//ms = s-1; +//mms=s-2; + *--d = (((long)(*--s)-128L)<<7)+(((long)(*--s)-128L)<<7); +// *--d = (((long)(*ms)-128L)<<7)+(((long)(*mms)-128L)<<7); +//s -=2; + } +} + +/* + * convert buffer of n samples to longs + */ +void sample_to_int(void *buff, long n) { + short *s; + long *d; + + if (n < 1) + return; + s = (short*)buff + n; + d = (long*)buff + n; + while (s != buff) { + *--d = (long)(*--s); + } +} + +/* + * convert buffer of n samples to longs + */ +void sample2_to_int(void *buff, long n) { + short *s; + short *ms; + short *mms; + long *d; + + if (n < 1) + return; + s = (short*)buff + n*2; + d = (long*)buff + n; + while (s != buff) { +//problem +//ms = s-1; +//mms = s-2; + *--d = ((long)(*--s)+(long)(*--s))>>1; +// *--d = ((long)(*ms)+(long)(*mms))>>1; +//s -=2; + } +} + +/* + * convert buffer of n longs to samples + */ +void int_to_sample(short *buff, long n) { + short *s, *e; + unsigned char *d; + + if (n < 1) + return; + s = buff; + d = (unsigned char*)buff; + e = buff + n*2; + while (s != e) { + s++; + *d++ = reverse_byte[linear2alaw(*s++)]; + } +} + +/* + * convert buffer of n longs to samples + */ +void intlo_to_sample(short *buff, long n) { + short *s, *e; + unsigned char *d; + + if (n < 1) + return; + s = buff; + d = (unsigned char*)buff; + e = buff + n*2; + while (s != e) { + *d++ = reverse_byte[linear2alaw(*s++)]; + s++; + } +} + +/* + * FIR-routines, + * this is where we need all the MIPS + */ +void fir(register long *inp, register long *coep, long firlen, long *outp) { + register long akku = 0, *endp; + long n1 = (firlen / 8) * 8, n0 = firlen % 8; + + endp = coep + n1; + while (coep != endp) { + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + } + + endp = coep + n0; + while (coep != endp) { + akku += *inp++ * *coep++; + } + *outp = akku; +} + +/* + * filtering from input buffer to output buffer; + * returns number of processed samples in output buffer: + * if it is not equal to output buffer size, + * the input buffer is expected to be refilled upon entry, so that + * the last firlen numbers of the old input buffer are + * the first firlen numbers of the new input buffer; + * if it is equal to output buffer size, the output buffer + * is full and is expected to be stowed away; + * + */ +long filtering_on_buffers(long *inp, long insize, long *outp, long outsize, + long *coep, long firlen, long up, long down) { + static long inbaseidx = 0, inoffset = 0, cycctr = 0, outidx = 0; + + for (;;) { + inoffset = (cycctr * down)/up; + if ((inbaseidx + inoffset + firlen) > insize) { + inbaseidx -= insize - firlen + 1; + return(outidx); + } + fir(inp + inoffset + inbaseidx, + coep + cycctr * firlen, + firlen, outp + outidx++); + cycctr++; + if (!(cycctr %= up)) + inbaseidx += down; + if (!(outidx %= outsize)) + return(outsize); + } +} + +/* + * read and convert input sample format to integer + */ +long intread(FILE* hmmioSrc, void *buff, long n, long Bits, long Channels) { + long rd = 0; + + if(Channels==2) { + if(Bits==8) { + if ((rd = fread (buff, 1, n*2, hmmioSrc)) <= 0) + return(rd); + bsample2_to_int(buff,n); + return(rd/2); + } else { + if ((rd = fread (buff, 1, n*sizeof(short)*2, hmmioSrc)) <= 0) + return(rd); + sample2_to_int(buff,n); + return(rd/sizeof(short)/2); + } + } else { + if(Bits==8) { + if ((rd = fread(buff, 1, n, hmmioSrc)) <= 0) + return(rd); + bsample_to_int(buff,n); + return(rd); + } else { + if ((rd = fread (buff, 1, n*sizeof(short), hmmioSrc )) <= 0) + return(rd); + sample_to_int(buff,n); + return(rd/sizeof(short)); + } + } +} + +/* + * do some conversion jobs and write + */ +long intwrite(long *buff, long n) { + long written = 0; + + int_to_sample((short*)buff, n); + if ((written = fwrite(buff, 1, n, g_outfilehandle)) <= 0) + return(written); + return(written); +} + +/* + * do some conversion jobs and write + */ +long intlowrite(long *buff, long n) { + long written = 0; + + intlo_to_sample((short*)buff, n); + if ((written = fwrite(buff, 1, n, g_outfilehandle)) <= 0) + return(written); + return(written); +} + +/* + * set up coefficient array + */ +void make_coe(void) { + long i = 0, q =0; + + for (i = 0; i < g_firlen; i++) { + for (q = 0; q < g_up; q++) { + g_coep[q * g_firlen + i] = coefficient(i, q, g_firlen, + g_fgk, g_fgg, g_fsi, g_up, g_down, g_ampli); + } + } +} + + +void comp_para(void) { + long u = 0,d=0; + double fin1=0.0,fdiff=0.0; + + fdiff=HUGE_VAL; + + for(u=1;u<=1024;u++) { + d=(long)((g_fsi*u)/8000.); + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + d++; + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + if(fdiff==0.) + break; + } + + if (g_up >= g_down) { /* upsampling */ + g_fgg = g_fsi * 0.0116; + g_fgk = g_fsi * 0.461; + g_firlen = 162; + } else { /* downsampling */ + g_fgg = (g_up * g_fsi * 0.0116)/g_down; + g_fgk = (g_up * g_fsi * 0.461)/g_down; + g_firlen = (162 * g_down)/g_up; + } +} + +/* + * main + */ + +short wav2alw(char *InName) +{ + long insize = 0, outsize = 0, skirtlen=0; +// unsigned long ulAudioHeaderLength=0; + FILE* hmmioSource; +// unsigned long ulBytesRead=0; +// long rc=0; + char OutName[300]; + char *help; + char helpstr[300]; + + memset (g_sin ,0,sizeof(long)*INBUFFSIZE); + memset (g_sout,0,sizeof(long)*OUTBUFFSIZE); + + if (InName[0] == '*') return (-200); + if (!util_file_exist(InName)) { + sprintf (helpstr,STR_NOT_FOUND,InName); + sigFunc (1,helpstr); + return (-100); + } + + if (!strstr(InName,WAV_EXT)) return (-101); + + strcpy (OutName,InName); + + help = strstr(OutName,WAV_EXT); + *(++help) = 'a'; + *(++help) = 'l'; + *(++help) = 'w'; + + strcpy (OutName,util_strip_path(OutName)); + + if (util_file_exist(OutName)) { + if (util_file_age(InName) <= util_file_age(OutName)) return (-102); + } + + /*******************************/ + /* Set up/open the SOURCE file */ + /*******************************/ + + hmmioSource = fopen(InName, "rb"); + if (hmmioSource == NULL) { + return (2); + } + + /****************************/ + /* Obtain the SOURCE HEADER */ + /****************************/ + + g_outfilehandle=fopen(OutName,"wb"); + if (g_outfilehandle==NULL) { + fclose (hmmioSource); + return(-1); + }; + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("RIFF",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("\n\n#%s#\n",str); + + fread (&dwordvar,1,4,hmmioSource); + if (!dwordvar) { + sprintf (str,"WAVE-file is empty: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("dateil„nge=%d\n",dwordvar); + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("WAVE",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("#%s#\n",str); + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("fmt ",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("#%s#\n",str); + + fread (&dwordvar ,1,4,hmmioSource); +// printf ("l„nge subchunk=%d\n",dwordvar); +// if (dwordvar != 16) { +// sprintf (str,"Unsupported format: %s!",InName); +// sigFunc (2,str); +// return (-1); +//} + + fread (&wordvar ,1,2,hmmioSource); +// printf ("format tag=%d\n",wordvar); + + fread (&Channels ,1,2,hmmioSource); +// printf ("channels=%d\n",Channels); + if (!((Channels == 1) || (Channels == 2))) { + sprintf (str,"Error num channels: %s!",InName); + sigFunc (2,str); + return (-1); + } + + fread (&SamplesPerSecond ,1,4,hmmioSource); +// printf ("Samples per second=%d\n",SamplesPerSecond); + + fread (str ,1,6,hmmioSource); + + fread (&BitsPerSample ,1,2,hmmioSource); +// printf ("bit per sample=%d\n",BitsPerSample); + + + if(SamplesPerSecond < 7984 || SamplesPerSecond > 8016) { + + g_fsi=SamplesPerSecond; + + comp_para(); + + if ((g_coep = (long*)malloc(g_firlen * g_up * sizeof(int))) == NULL) { + return (-2); + } + make_coe(); + skirtlen = g_firlen - 1; + zerofill(g_sin, skirtlen); + do { + insize = intread(hmmioSource, g_sin + skirtlen, + INBUFFSIZE - skirtlen, + BitsPerSample, + Channels); + if (insize < 0 || insize > INBUFFSIZE - skirtlen) { + fclose(g_outfilehandle); + free(g_coep); + return (-3); + } + for (;;) { + outsize = filtering_on_buffers(g_sin, skirtlen + insize, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (outsize != OUTBUFFSIZE) { + transfer_int(g_sin + insize, g_sin, skirtlen); + break; + } + if (intwrite(g_sout, outsize) != outsize) { + free(g_coep); + return (-4); + } + }; + } while (insize > 0); + zerofill(g_sin + skirtlen, skirtlen); + do { + outsize = filtering_on_buffers(g_sin, skirtlen + skirtlen, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (intwrite(g_sout, outsize) != outsize) { + free(g_coep); + return (-5); + } + } while (outsize == OUTBUFFSIZE); + + free(g_coep); + + } else { /* Input is 8000Sample/s no rate conversion */ + do { + insize = intread(hmmioSource, g_sin, + INBUFFSIZE, + BitsPerSample, + Channels); + if (insize < 0 || insize > INBUFFSIZE) { + fclose(g_outfilehandle); + return (-6); + } + if (intlowrite(g_sin, insize) != insize) { + return (-7); + } + } while (insize > 0); + } + + if (fclose(g_outfilehandle)) { + return (-8); + } + + fclose (hmmioSource); + + return 0; +} + +/*******************************************************************/ + +short runflag = 0; + + +void convert_all_lookup (char *filename) +{ + FILE *namedat; + char str [300]; + char help[300]; + char *strptr; + + namedat = fopen (filename,"r"); + if (namedat) { + while (fgets(str,200,namedat)) { + if((str[0] != '#') && (strchr(str,'|'))) { + strptr = &str[0]; + strptr = strchr(strptr,'|'); + strptr++; + strptr = strchr(strptr,'|'); + strptr++; + *strchr(strptr,'|') = 0; + + strcpy (help,check_time(strptr)); + wav2alw (help); + } + } + fclose (namedat); + } +} + +void wav2alw_all (void) +{ + char help[200]; + + convert_all_lookup (NAMFILE); + convert_all_lookup (PRTFILE); + + config_file_read_string(STD_CFG_FILE,WELCOME_WAVE ,help,WELCOME_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); + + config_file_read_string(STD_CFG_FILE,RINGRING_WAVE,help,RINGRING_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); +} + +void _Optlink convert_all (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw_all(); + runflag--; sigFunc( 7, &runflag); +}; + +char fname[200]; + +void _Optlink convert (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw (&fname[0]); + runflag--; sigFunc( 7, &runflag); +}; + +void wav2alw_convert_all (void) +{ + OsStartThread(convert_all); +}; + +void wav2alw_convert (char * filename) +{ + strcpy (fname,filename); + OsStartThread (convert); +}; + +short wav2alw_convert_runs (void) +{ + return (runflag); +}; + + diff --git a/wave/source/wav2alw.c b/wave/source/wav2alw.c new file mode 100644 index 0000000..1af545d --- /dev/null +++ b/wave/source/wav2alw.c @@ -0,0 +1,882 @@ +void sigFunc( short num, void *msg ); +/* + * IMPLEMENTATION NOTES + * + * Converting is achieved by interpolating the input samples in + * order to evaluate the represented continuous input slope at + * sample instances of the new rate (resampling). It is implemented + * as a polyphase FIR-filtering process (see reference). The rate + * conversion factor is determined by a rational factor. Its + * nominator and denominator are integers of almost arbitrary + * value, limited only by coefficient memory size. + * + * General rate conversion formula: + * + * out(n*Tout) = SUM in(m*Tin) * g((n*d/u-m)*Tin) * Tin + * over all m + * + * FIR-based rate conversion formula for polyphase processing: + * + * L-1 + * out(n*Tout) = SUM in(A(i,n)*Tin) * g(B(i,n)*Tin) * Tin + * i=0 + * + * A(i,n) = i - (L-1)/2 + [n*d/u] + * = i - (L-1)/2 + [(n%u)*d/u] + [n/u]*d + * B(i,n) = n*d/u - [n*d/u] + (L-1)/2 - i + * = ((n%u)*d/u)%1 + (L-1)/2 - i + * Tout = Tin * d/u + * + * where: + * n,i running integers + * out(t) output signal sampled at t=n*Tout + * in(t) input signal sampled in intervalls Tin + * u,d up- and downsampling factor, integers + * g(t) interpolating function + * L FIR-length of realized g(t), integer + * / float-division-operator + * % float-modulo-operator + * [] integer-operator + * + * note: + * (L-1)/2 in A(i,n) can be omitted as pure time shift yielding + * a causal design with a delay of ((L-1)/2)*Tin. + * n%u is a cyclic modulo-u counter clocked by out-rate + * [n/u]*d is a d-increment counter, advanced when n%u resets + * B(i,n)*Tin can take on L*u differnt values, at which g(t) + * has to be sampled as a coefficient array + * + * Interpolation function design: + * + * The interpolation function design is based on a sinc-function + * windowed by a gaussian function. The former determines the + * cutoff frequency, the latter limits the necessary FIR-length by + * pushing the outer skirts of the resulting impulse response below + * a certain threshold fast enough. The drawback is a smoothed + * cutoff inducing some aliasing. Due to the symmetry of g(t) the + * group delay of the filtering process is contant (linear phase). + * + * g(t) = 2*fgK*sinc(pi*2*fgK*t) * exp(-pi*(2*fgG*t)**2) + * + * where: + * fgK cutoff frequency of sinc function in f-domain + * fgG key frequency of gaussian window in f-domain + * reflecting the 6.82dB-down point + * + * note: + * Taking fsin=1/Tin as the input sampling frequncy, it turns out + * that in conjunction with L, u and d only the ratios fgK/(fsin/2) + * and fgG/(fsin/2) specify the whole proces. Requiring fsin, fgK + * and fgG as input purposely keeps the notion of absolute + * frequencies. + * + * Numerical design: + * + * Samples are expected to be 16bit-signed integers, alternating + * left and right channel in case of stereo mode- The byte order + * per sample is selectable. FIR-filtering is implemented using + * 32bit-signed integer arithmetic. Coefficients are scaled to + * find the output sample in the high word of accumulated FIR-sum. + * + * Interpolation can lead to sample magnitudes exceeding the + * input maximum. Worst case is a full scale step function on the + * input. In this case the sinc-function exhibits an overshoot of + * 2*9=18percent (Gibb's phaenomenon). In any case sample overflow + * can be avoided by a gain of 0.8. + * + * If u=d=1 and if the input stream contains only a single sample, + * the whole length of the FIR-filter will be written to the output. + * In general the resulting output signal will be (L-1)*fsout/fsin + * samples longer than the input signal. The effect is that a + * finite input sequence is viewed as padded with zeros before the + * `beginning' and after the `end'. + * + * The output lags ((L-1)/2)*Tin behind to implement g(t) as a + * causal system corresponding to a causal relationship of the + * discrete-time sequences in(m/fsin) and out(n/fsout) with + * resepect to a sequence time origin at t=n*Tin=m*Tout=0. + * + * + * REFERENCES + * + * Crochiere, R. E., Rabiner, L. R.: "Multirate Digital Signal + * Processing", Prentice-Hall, Englewood Cliffs, New Jersey, 1983 + * + * Zwicker, E., Fastl, H.: "Psychoacoustics - Facts and Models", + * Springer-Verlag, Berlin, Heidelberg, New-York, Tokyo, 1990 + */ + +#ifdef WIN32 +#include +#endif + +#include +#include +#include +#include +#include + +#ifndef UNIX +#include +#include +#endif + +#include "../../../units/common.src/bastypes.h" + +#include "../../../units/common.src/util.h" +#include "../../../units/common.src/cfg_file.h" +#include "../../../units/common.src/num2nam.h" +#include "../../common/source/global.h" +#include "../../common/source/texte.h" +#include "../../../units/common.src/os.h" + +/* + * adaptable defines and globals + */ + +#define M_PI 3.14159265358979323846 + +#ifndef MAXUP +#define MAXUP 0x400 /* MAXUP*MAXLENGTH worst case malloc */ +#endif + +#ifndef MAXLENGTH +#define MAXLENGTH 0x400 /* max FIR length */ +#endif + +#define OUTBUFFSIZE MAXLENGTH /* fit >=MAXLENGHT samples */ +#define INBUFFSIZE (2*MAXLENGTH) /* fit >=2*MAXLENGTH samples */ +#define sqr(a) ((a)*(a)) + +/* + * other globals + */ + +FILE *g_outfilehandle = NULL; /* */ + +double g_ampli = 0.8; /* default gain, don't change */ +int + g_firlen = 0, /* FIR-length */ + g_up = 0, /* upsampling factor */ + g_down = 0 /* downsampling factor */ +; + +//LONG +long + g_sin[INBUFFSIZE], /* input buffer */ + g_sout[OUTBUFFSIZE], /* output buffer */ + *g_coep /* coefficient array pointer */ +; +double + g_fsi =0.0, /* input sampling frequency */ + g_fgk =0.0, /* sinc-filter cutoff frequency */ + g_fgg =0.0 /* gaussian window key frequency */ +; /* (6.8dB down freq. in f-domain) */ + +unsigned char /*UCHAR*/ reverse_byte[256]={ +0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, +0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, +0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, +0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, +0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, +0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, +0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, +0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, +0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, +0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, +0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, +0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, +0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, +0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, +0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, +0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF +}; + + +char str[100]; +unsigned char bytevar; +unsigned short wordvar; +unsigned long dwordvar; + +unsigned short Channels; +unsigned long SamplesPerSecond; +unsigned short BitsPerSample; + +unsigned long BytePerSecond; +unsigned short BytePerSample; + +/* + * linear2alaw() - Convert a 16-bit linear alw value to 8-bit A-law + * + * linear2alaw() accepts an 16-bit integer and encodes it as A-law data. + * + * Linear Input Code Compressed Code + * ------------------------ --------------- + * 0000000wxyza 000wxyz + * 0000001wxyza 001wxyz + * 000001wxyzab 010wxyz + * 00001wxyzabc 011wxyz + * 0001wxyzabcd 100wxyz + * 001wxyzabcde 101wxyz + * 01wxyzabcdef 110wxyz + * 1wxyzabcdefg 111wxyz + * + */ +unsigned char linear2alaw(long alw_val) /* 2's complement (16-bit range) */ +{ + long mask = 0; + long seg = 0; + unsigned char aval = 0; + static short seg_end[8] = {0xFF, 0x1FF, 0x3FF, 0x7FF, + 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF}; + + if (alw_val >= 0) { + mask = 0xD5; /* sign (7th) bit = 1 */ + } else { + mask = 0x55; /* sign bit = 0 */ + alw_val = -alw_val; + } + + if(alw_val<0x7ff8) + alw_val+=8; + + if(alw_val<0x10) + mask = 0xD5; + + /* Convert the scaled magnitude to segment number. */ + + for (seg = 0; seg < 8; seg++) { + if (alw_val <= seg_end[seg]) + break; + } + + /* Combine the sign, segment, and quantization bits. */ + + if (seg >= 8) /* out of range, return maximum value. */ + return ((unsigned char)(0x7F ^ mask)); + else { + aval = (unsigned char)(seg << 4); + if (seg < 2) + aval |= (alw_val >> 4) & 0xf; + else + aval |= (alw_val >> (seg + 3)) & 0xf; + return ((unsigned char)(aval ^ mask)); + } +} + +/* + * evaluate sinc(x) = sin(x)/x safely + */ +double sinc(double x) { + return(fabs(x) < 1E-50 ? 1. : sin(fmod(x,2*M_PI))/x); +} + +/* + * evaluate interpolation function g(t) at t + * integral of g(t) over all times is expected to be one + */ +double interpol_func(double t, double fgk, double fgg) { + return (2*fgk*sinc(M_PI*2*fgk*t)*exp(-M_PI*sqr(2*fgg*t))); +} + +/* + * evaluate coefficient from i, q=n%u by sampling interpolation function + * and scale it for integer multiplication used by FIR-filtering + */ +long coefficient(long i, long q, long firlen, double fgk, double fgg, double fsi, + long up, long down, double amp) { + return( + (int)(0x10000 * amp * + interpol_func( + (fmod(q*down/(double)up,1.) + (firlen-1)/2 - i) / fsi, + fgk, + fgg + ) / fsi + ) + ); +} + +/* + * transfer n LONGs from s to d + */ +void transfer_int(long *s, long *d, long n) { + long *e; + + if (n < 1) + return; + e = d + n; + while (d != e) + *d++ = *s++; +} + +/* + * zerofill n longs from s + */ +void zerofill(long *s, long n) { + long *e; + + if (n < 1) + return; + e = s + n; + while (s != e) + *s++ = 0; +} + +/* + * convert buffer of n samples to longs + */ +void bsample_to_int(void *buff, long n) { + unsigned char *s; + long *d; + + if (n < 1) + return; + s = (unsigned char*)buff + n; + d = (long*)buff + n; + while (s != buff) { + *--d = ((long)(*--s)-128L)<<8; + } +} + +/* + * convert buffer of n samples to longs + */ +void bsample2_to_int(void *buff, long n) { + unsigned char *s; +//unsigned char *ms; +//unsigned char *mms; + + long *d; + + if (n < 1) return; + + s = (unsigned char*)buff + n*2; + d = (long*)buff + n; + while (s != buff) { +//problem +//ms = s-1; +//mms=s-2; + *--d = (((long)(*--s)-128L)<<7)+(((long)(*--s)-128L)<<7); +// *--d = (((long)(*ms)-128L)<<7)+(((long)(*mms)-128L)<<7); +//s -=2; + } +} + +/* + * convert buffer of n samples to longs + */ +void sample_to_int(void *buff, long n) { + short *s; + long *d; + + if (n < 1) + return; + s = (short*)buff + n; + d = (long*)buff + n; + while (s != buff) { + *--d = (long)(*--s); + } +} + +/* + * convert buffer of n samples to longs + */ +void sample2_to_int(void *buff, long n) { + short *s; +// short *ms; +// short *mms; + long *d; + + if (n < 1) + return; + s = (short*)buff + n*2; + d = (long*)buff + n; + while (s != buff) { +//problem +//ms = s-1; +//mms = s-2; + *--d = ((long)(*--s)+(long)(*--s))>>1; +// *--d = ((long)(*ms)+(long)(*mms))>>1; +//s -=2; + } +} + +/* + * convert buffer of n longs to samples + */ +void int_to_sample(short *buff, long n) { + short *s, *e; + unsigned char *d; + + if (n < 1) + return; + s = buff; + d = (unsigned char*)buff; + e = buff + n*2; + while (s != e) { + s++; + *d++ = reverse_byte[linear2alaw(*s++)]; + } +} + +/* + * convert buffer of n longs to samples + */ +void intlo_to_sample(short *buff, long n) { + short *s, *e; + unsigned char *d; + + if (n < 1) + return; + s = buff; + d = (unsigned char*)buff; + e = buff + n*2; + while (s != e) { + *d++ = reverse_byte[linear2alaw(*s++)]; + s++; + } +} + +/* + * FIR-routines, + * this is where we need all the MIPS + */ +void fir(register long *inp, register long *coep, long firlen, long *outp) { + register long akku = 0, *endp; + long n1 = (firlen / 8) * 8, n0 = firlen % 8; + + endp = coep + n1; + while (coep != endp) { + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + akku += *inp++ * *coep++; + } + + endp = coep + n0; + while (coep != endp) { + akku += *inp++ * *coep++; + } + *outp = akku; +} + +/* + * filtering from input buffer to output buffer; + * returns number of processed samples in output buffer: + * if it is not equal to output buffer size, + * the input buffer is expected to be refilled upon entry, so that + * the last firlen numbers of the old input buffer are + * the first firlen numbers of the new input buffer; + * if it is equal to output buffer size, the output buffer + * is full and is expected to be stowed away; + * + */ +long filtering_on_buffers(long *inp, long insize, long *outp, long outsize, + long *coep, long firlen, long up, long down) { + static long inbaseidx = 0, inoffset = 0, cycctr = 0, outidx = 0; + + for (;;) { + inoffset = (cycctr * down)/up; + if ((inbaseidx + inoffset + firlen) > insize) { + inbaseidx -= insize - firlen + 1; + return(outidx); + } + fir(inp + inoffset + inbaseidx, + coep + cycctr * firlen, + firlen, outp + outidx++); + cycctr++; + if (!(cycctr %= up)) + inbaseidx += down; + if (!(outidx %= outsize)) + return(outsize); + } +} + +/* + * read and convert input sample format to integer + */ +long intread(FILE* hmmioSrc, void *buff, long n, long Bits, long Channels) { + long rd = 0; + + if(Channels==2) { + if(Bits==8) { + if ((rd = fread (buff, 1, n*2, hmmioSrc)) <= 0) + return(rd); + bsample2_to_int(buff,n); + return(rd/2); + } else { + if ((rd = fread (buff, 1, n*sizeof(short)*2, hmmioSrc)) <= 0) + return(rd); + sample2_to_int(buff,n); + return(rd/sizeof(short)/2); + } + } else { + if(Bits==8) { + if ((rd = fread(buff, 1, n, hmmioSrc)) <= 0) + return(rd); + bsample_to_int(buff,n); + return(rd); + } else { + if ((rd = fread (buff, 1, n*sizeof(short), hmmioSrc )) <= 0) + return(rd); + sample_to_int(buff,n); + return(rd/sizeof(short)); + } + } +} + +/* + * do some conversion jobs and write + */ +long intwrite(long *buff, long n) { + long written = 0; + + int_to_sample((short*)buff, n); + if ((written = fwrite(buff, 1, n, g_outfilehandle)) <= 0) + return(written); + return(written); +} + +/* + * do some conversion jobs and write + */ +long intlowrite(long *buff, long n) { + long written = 0; + + intlo_to_sample((short*)buff, n); + if ((written = fwrite(buff, 1, n, g_outfilehandle)) <= 0) + return(written); + return(written); +} + +/* + * set up coefficient array + */ +void make_coe(void) { + long i = 0, q =0; + + for (i = 0; i < g_firlen; i++) { + for (q = 0; q < g_up; q++) { + g_coep[q * g_firlen + i] = coefficient(i, q, g_firlen, + g_fgk, g_fgg, g_fsi, g_up, g_down, g_ampli); + } + } +} + + +void comp_para(void) { + long u = 0,d=0; + double fin1=0.0,fdiff=0.0; + + fdiff=HUGE_VAL; + + for(u=1;u<=1024;u++) { + d=(long)((g_fsi*u)/8000.); + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + d++; + fin1=(8000.*d)/u; + if(fdiff>fabs(g_fsi-fin1)) { + fdiff=fabs(g_fsi-fin1); + g_up=u; + g_down=d; + } + if(fdiff==0.) + break; + } + + if (g_up >= g_down) { /* upsampling */ + g_fgg = g_fsi * 0.0116; + g_fgk = g_fsi * 0.461; + g_firlen = 162; + } else { /* downsampling */ + g_fgg = (g_up * g_fsi * 0.0116)/g_down; + g_fgk = (g_up * g_fsi * 0.461)/g_down; + g_firlen = (162 * g_down)/g_up; + } +} + +/* + * main + */ + +short wav2alw(char *InName) +{ + long insize = 0, outsize = 0, skirtlen=0; +// unsigned long ulAudioHeaderLength=0; + FILE* hmmioSource; +// unsigned long ulBytesRead=0; +// long rc=0; + char OutName[300]; + char *help; + char helpstr[300]; + + memset (g_sin ,0,sizeof(long)*INBUFFSIZE); + memset (g_sout,0,sizeof(long)*OUTBUFFSIZE); + + if (InName[0] == '*') return (-200); + if (!util_file_exist(InName)) { + sprintf (helpstr,STR_NOT_FOUND,InName); + sigFunc (1,helpstr); + return (-100); + } + + if (!strstr(InName,WAV_EXT)) return (-101); + + strcpy (OutName,InName); + + help = strstr(OutName,WAV_EXT); + *(++help) = 'a'; + *(++help) = 'l'; + *(++help) = 'w'; + + strcpy (OutName,util_strip_path(OutName)); + + if (util_file_exist(OutName)) { + if (util_file_age(InName) <= util_file_age(OutName)) return (-102); + } + + /*******************************/ + /* Set up/open the SOURCE file */ + /*******************************/ + + hmmioSource = fopen(InName, "rb"); + if (hmmioSource == NULL) { + return (2); + } + + /****************************/ + /* Obtain the SOURCE HEADER */ + /****************************/ + + g_outfilehandle=fopen(OutName,"wb"); + if (g_outfilehandle==NULL) { + fclose (hmmioSource); + return(-1); + }; + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("RIFF",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("\n\n#%s#\n",str); + + fread (&dwordvar,1,4,hmmioSource); + if (!dwordvar) { + sprintf (str,"WAVE-file is empty: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("dateil„nge=%d\n",dwordvar); + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("WAVE",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("#%s#\n",str); + + fread (str,1,4,hmmioSource); + str[4] = 0; + if (strcmp("fmt ",str)) { + sprintf (str,"Not a WAVE-file: %s!",InName); + sigFunc (2,str); + return (-1); + } +// printf ("#%s#\n",str); + + fread (&dwordvar ,1,4,hmmioSource); +// printf ("l„nge subchunk=%d\n",dwordvar); +// if (dwordvar != 16) { +// sprintf (str,"Unsupported format: %s!",InName); +// sigFunc (2,str); +// return (-1); +//} + + fread (&wordvar ,1,2,hmmioSource); +// printf ("format tag=%d\n",wordvar); + + fread (&Channels ,1,2,hmmioSource); +// printf ("channels=%d\n",Channels); + if (!((Channels == 1) || (Channels == 2))) { + sprintf (str,"Error num channels: %s!",InName); + sigFunc (2,str); + return (-1); + } + + fread (&SamplesPerSecond ,1,4,hmmioSource); +// printf ("Samples per second=%d\n",SamplesPerSecond); + + fread (str ,1,6,hmmioSource); + + fread (&BitsPerSample ,1,2,hmmioSource); +// printf ("bit per sample=%d\n",BitsPerSample); + + + if(SamplesPerSecond < 7984 || SamplesPerSecond > 8016) { + + g_fsi=SamplesPerSecond; + + comp_para(); + + if ((g_coep = (long*)malloc(g_firlen * g_up * sizeof(int))) == NULL) { + return (-2); + } + make_coe(); + skirtlen = g_firlen - 1; + zerofill(g_sin, skirtlen); + do { + insize = intread(hmmioSource, g_sin + skirtlen, + INBUFFSIZE - skirtlen, + BitsPerSample, + Channels); + if (insize < 0 || insize > INBUFFSIZE - skirtlen) { + fclose(g_outfilehandle); + free(g_coep); + return (-3); + } + for (;;) { + outsize = filtering_on_buffers(g_sin, skirtlen + insize, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (outsize != OUTBUFFSIZE) { + transfer_int(g_sin + insize, g_sin, skirtlen); + break; + } + if (intwrite(g_sout, outsize) != outsize) { + free(g_coep); + return (-4); + } + }; + } while (insize > 0); + zerofill(g_sin + skirtlen, skirtlen); + do { + outsize = filtering_on_buffers(g_sin, skirtlen + skirtlen, + g_sout, OUTBUFFSIZE, g_coep, g_firlen, g_up, g_down); + if (intwrite(g_sout, outsize) != outsize) { + free(g_coep); + return (-5); + } + } while (outsize == OUTBUFFSIZE); + + free(g_coep); + + } else { /* Input is 8000Sample/s no rate conversion */ + do { + insize = intread(hmmioSource, g_sin, + INBUFFSIZE, + BitsPerSample, + Channels); + if (insize < 0 || insize > INBUFFSIZE) { + fclose(g_outfilehandle); + return (-6); + } + if (intlowrite(g_sin, insize) != insize) { + return (-7); + } + } while (insize > 0); + } + + if (fclose(g_outfilehandle)) { + return (-8); + } + + fclose (hmmioSource); + + return 0; +} + +/*******************************************************************/ + +short runflag = 0; + + +void convert_all_lookup (char *filename) +{ + FILE *namedat; + char str [300]; + char help[300]; + char *strptr; + + namedat = fopen (filename,"r"); + if (namedat) { + while (fgets(str,200,namedat)) { + if((str[0] != '#') && (strchr(str,'|'))) { + strptr = &str[0]; + strptr = strchr(strptr,'|'); + strptr++; + strptr = strchr(strptr,'|'); + strptr++; + *strchr(strptr,'|') = 0; + + strcpy (help,check_time(strptr)); + wav2alw (help); + } + } + fclose (namedat); + } +} + +void wav2alw_all (void) +{ + char help[200]; + + convert_all_lookup (NAMFILE); + convert_all_lookup (PRTFILE); + + config_file_read_string(STD_CFG_FILE,WELCOME_WAVE ,help,WELCOME_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); + + config_file_read_string(STD_CFG_FILE,RINGRING_WAVE,help,RINGRING_WAVE_DEF); + strcpy (help,check_time(help)); + wav2alw (help); +} + +void _Optlink convert_all (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw_all(); + runflag--; sigFunc( 7, &runflag); +}; + +char fname[200]; + +void _Optlink convert (void *arglist) +{ + while (runflag) OsSleep (250); + runflag++; sigFunc( 7, &runflag); + wav2alw (&fname[0]); + runflag--; sigFunc( 7, &runflag); +}; + +void wav2alw_convert_all (void) +{ + OsStartThread(convert_all); +}; + +void wav2alw_convert (char * filename) +{ + strcpy (fname,filename); + OsStartThread (convert); +}; + +short wav2alw_convert_runs (void) +{ + return (runflag); +}; + + diff --git a/wave/source/wav2alw.h b/wave/source/wav2alw.h new file mode 100644 index 0000000..f4870b2 --- /dev/null +++ b/wave/source/wav2alw.h @@ -0,0 +1,4 @@ +void wav2alw_convert_all (void); +void wav2alw_convert (char * filename); +short wav2alw_convert_runs (void); +