From 8060b5f1e9727b0052d74108081c6db7b26babad Mon Sep 17 00:00:00 2001 From: Stephen Hicks Date: Fri, 5 Jul 2013 15:15:14 -0500 Subject: [PATCH] Added LGPL files received from AA6YQ --- ARRL.DX | 423 + BitMask.cpp | 968 ++ BitMask.dfm | Bin 0 -> 3093 bytes BitMask.h | 165 + CItems/CUSTOM.TXT | 383 + CItems/ECUSTOM.TXT | 371 + CItems/PERIMG/About.cpp | 33 + CItems/PERIMG/About.dfm | Bin 0 -> 484 bytes CItems/PERIMG/About.h | 34 + CItems/PERIMG/Comlib.cpp | 1155 +++ CItems/PERIMG/Comlib.h | 129 + CItems/PERIMG/Item.ico | Bin 0 -> 766 bytes CItems/PERIMG/PerDlg.cpp | 597 ++ CItems/PERIMG/PerDlg.dfm | Bin 0 -> 18902 bytes CItems/PERIMG/PerDlg.h | 171 + CItems/PERIMG/PerImg.bpr | 181 + CItems/PERIMG/PerImg.cpp | 169 + CItems/PERIMG/PerSpect.cpp | 287 + CItems/PERIMG/PerSpect.dfm | Bin 0 -> 4138 bytes CItems/PERIMG/PerSpect.h | 87 + CItems/PERIMG/perimg.rc | 2 + CItems/PERIMG/perimg.res | Bin 0 -> 860 bytes CItems/PERIMG/res/SB.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBA.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBB.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBC.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBD.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBE.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBF.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBG.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBH.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBI.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBJ.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBK.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBL.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBM.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBN.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBO.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBP.bmp | Bin 0 -> 246 bytes CItems/PERIMG/res/SBQ.bmp | Bin 0 -> 246 bytes CItems/QSLBox/About.cpp | 29 + CItems/QSLBox/About.dfm | Bin 0 -> 484 bytes CItems/QSLBox/About.h | 29 + CItems/QSLBox/Comlib.cpp | 2165 +++++ CItems/QSLBox/Comlib.h | 372 + CItems/QSLBox/Item.ico | Bin 0 -> 766 bytes CItems/QSLBox/TextDlg.cpp | 671 ++ CItems/QSLBox/TextDlg.dfm | Bin 0 -> 9064 bytes CItems/QSLBox/TextDlg.h | 127 + CItems/QSLBox/qslbox.bpr | 182 + CItems/QSLBox/qslbox.cpp | 184 + CItems/QSLBox/qslbox.rc | 2 + CItems/QSLBox/qslbox.res | Bin 0 -> 860 bytes CItems/QSLBox/qslbox.tds | Bin 0 -> 327680 bytes CItems/QSLBox/res/SB3DD.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SB3DI.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBA1.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBA2.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBA3.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBC.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBG1.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBG2.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBG3.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBG4.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBS1.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBS2.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBS3.bmp | Bin 0 -> 246 bytes CItems/QSLBox/res/SBS4.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/About.cpp | 35 + CItems/TEXTBOX/About.dfm | Bin 0 -> 484 bytes CItems/TEXTBOX/About.h | 35 + CItems/TEXTBOX/CodeVw.cpp | 479 + CItems/TEXTBOX/CodeVw.dfm | Bin 0 -> 2906 bytes CItems/TEXTBOX/CodeVw.h | 81 + CItems/TEXTBOX/Comlib.cpp | 2000 +++++ CItems/TEXTBOX/Comlib.h | 234 + CItems/TEXTBOX/Item.ico | Bin 0 -> 766 bytes CItems/TEXTBOX/TextBox.bpr | 184 + CItems/TEXTBOX/TextBox.cpp | 237 + CItems/TEXTBOX/TextBox.rc | 2 + CItems/TEXTBOX/TextBox.res | Bin 0 -> 860 bytes CItems/TEXTBOX/TextDlg.cpp | 1217 +++ CItems/TEXTBOX/TextDlg.dfm | Bin 0 -> 11799 bytes CItems/TEXTBOX/TextDlg.h | 192 + CItems/TEXTBOX/res/SB3DD.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SB3DI.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBA1.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBA2.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBA3.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBA4.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBC.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBG1.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBG2.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBG3.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBG4.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBS1.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBS2.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBS3.bmp | Bin 0 -> 246 bytes CItems/TEXTBOX/res/SBS4.bmp | Bin 0 -> 246 bytes CItems/TextArt/About.cpp | 35 + CItems/TextArt/About.dfm | Bin 0 -> 484 bytes CItems/TextArt/About.h | 35 + CItems/TextArt/CodeVw.cpp | 479 + CItems/TextArt/CodeVw.dfm | Bin 0 -> 2906 bytes CItems/TextArt/CodeVw.h | 81 + CItems/TextArt/Comlib.cpp | 3366 +++++++ CItems/TextArt/Comlib.h | 329 + CItems/TextArt/Item.ico | Bin 0 -> 766 bytes CItems/TextArt/TextArt.bmp | Bin 0 -> 221238 bytes CItems/TextArt/TextArt.bpr | 182 + CItems/TextArt/TextArt.cpp | 217 + CItems/TextArt/TextArt.rc | 4 + CItems/TextArt/TextDlg.cpp | 3438 +++++++ CItems/TextArt/TextDlg.dfm | Bin 0 -> 38450 bytes CItems/TextArt/TextDlg.h | 468 + CItems/TextArt/res.h | 3 + CItems/TextArt/res/P.bmp | Bin 0 -> 49206 bytes CItems/TextArt/res/P1.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P10.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P11.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P12.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P13.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P14.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P15.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P16.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P2.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P3.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P4.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P5.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P6.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P7.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P8.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/P9.bmp | Bin 0 -> 3126 bytes CItems/TextArt/res/SB3DD.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SB3DI.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBA1.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBA2.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBA3.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBA4.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBAdj.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBC.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBClip.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBCopy.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBG1.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBG2.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBG3.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBG4.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBG5.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBGA.bmp | Bin 0 -> 106 bytes CItems/TextArt/res/SBGB.bmp | Bin 0 -> 106 bytes CItems/TextArt/res/SBGRand.bmp | Bin 0 -> 106 bytes CItems/TextArt/res/SBGRev.bmp | Bin 0 -> 102 bytes CItems/TextArt/res/SBGRot.bmp | Bin 0 -> 102 bytes CItems/TextArt/res/SBInvCol.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBLoad.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBMIR.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBMList.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBPB.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBPaste.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBPtn.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBRR.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBS1.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBS2.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBS3.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBS4.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBSftCol.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ0.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ1.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ10.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ11.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ12.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ13.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ14.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ15.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ16.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ17.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ18.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ19.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ2.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ20.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ21.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ22.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ23.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ24.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ25.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ26.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ27.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ28.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ29.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ3.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ30.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ31.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ32.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ33.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ34.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ35.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ36.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ37.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ38.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ4.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ5.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ6.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ7.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ8.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/SBZ9.bmp | Bin 0 -> 246 bytes CItems/TextArt/res/Z.bmp | Bin 0 -> 18486 bytes CItems/TextArt/res/temp.bmp | Bin 0 -> 2518 bytes CItems/TextArt/textart.res | Bin 0 -> 50084 bytes COPYING.LESSER.txt | 165 + COPYING.txt | 674 ++ ClockAdj.cpp | 478 + ClockAdj.dfm | Bin 0 -> 2219 bytes ClockAdj.h | 118 + ColorBar.cpp | 258 + ColorBar.dfm | Bin 0 -> 1596 bytes ColorBar.h | 71 + ColorSet.cpp | 125 + ColorSet.dfm | Bin 0 -> 2873 bytes ColorSet.h | 84 + ComLib.cpp | 3848 ++++++++ ComLib.h | 801 ++ Comm.cpp | 295 + Comm.h | 114 + ConvDef.cpp | 401 + ConvDef.dfm | Bin 0 -> 1998 bytes ConvDef.h | 104 + CtrBtn.cpp | 123 + CtrBtn.dfm | Bin 0 -> 914 bytes CtrBtn.h | 75 + Draw.cpp | 5929 ++++++++++++ Draw.h | 605 ++ EMMSSTV.TXT | 784 ++ EUPDATE.TXT | 860 ++ ExtCmd.cpp | 92 + ExtCmd.dfm | Bin 0 -> 973 bytes ExtCmd.h | 55 + Fft.cpp | 871 ++ Fft.h | 77 + FreqDisp.cpp | 187 + FreqDisp.dfm | Bin 0 -> 822 bytes FreqDisp.h | 83 + Hamlog5.cpp | 632 ++ Hamlog5.h | 119 + HistView.cpp | 313 + HistView.dfm | Bin 0 -> 493 bytes HistView.h | 93 + History/History.bin | Bin 0 -> 5136 bytes InputWin.cpp | 91 + InputWin.dfm | Bin 0 -> 761 bytes InputWin.h | 52 + JASTA.txt | 219 + JASTA/ARRL.DX | 423 + JASTA/App.ico | Bin 0 -> 1078 bytes JASTA/ComLib.cpp | 1618 ++++ JASTA/ComLib.h | 327 + JASTA/EMMJASTA.TXT | 54 + JASTA/FEdit.cpp | 188 + JASTA/FEdit.dfm | Bin 0 -> 1627 bytes JASTA/FEdit.h | 66 + JASTA/LogConv.cpp | 2033 +++++ JASTA/LogConv.h | 228 + JASTA/LogFile.cpp | 1541 ++++ JASTA/LogFile.h | 290 + JASTA/MMJASTA.bpr | 161 + JASTA/MMJASTA.cbproj | 282 + JASTA/MMJASTA.cbproj.local | 2 + JASTA/MMJASTA.cpp | 29 + JASTA/MMJASTA.ini | 17 + JASTA/MMJASTA.map | 6 + JASTA/MMJASTA.res | Bin 0 -> 1636 bytes JASTA/MMJASTA.tds | Bin 0 -> 8519680 bytes JASTA/MMJASTA_Icon.ico | Bin 0 -> 1078 bytes JASTA/Main.cpp | 1369 +++ JASTA/Main.dfm | Bin 0 -> 1741 bytes JASTA/Main.h | 122 + JASTA/OptDlg.cpp | 117 + JASTA/OptDlg.dfm | Bin 0 -> 2350 bytes JASTA/OptDlg.h | 56 + JASTA/QsoDlg.cpp | 49 + JASTA/QsoDlg.dfm | Bin 0 -> 928 bytes JASTA/QsoDlg.h | 37 + JASTA/TextEdit.cpp | 144 + JASTA/TextEdit.dfm | Bin 0 -> 1050 bytes JASTA/TextEdit.h | 52 + JASTA/country.cpp | 396 + JASTA/country.h | 46 + JASTA/mmjasta.txt | 96 + LineSet.cpp | 178 + LineSet.dfm | Bin 0 -> 1302 bytes LineSet.h | 65 + LinearDs.cpp | 127 + LinearDs.dfm | Bin 0 -> 421 bytes LinearDs.h | 51 + ListText.cpp | 320 + ListText.dfm | Bin 0 -> 1185 bytes ListText.h | 71 + LogConv.cpp | 2224 +++++ LogConv.h | 249 + LogFile.cpp | 1667 ++++ LogFile.h | 280 + LogList.cpp | 1143 +++ LogList.dfm | Bin 0 -> 3811 bytes LogList.h | 161 + LogPic.cpp | 211 + LogPic.dfm | Bin 0 -> 1371 bytes LogPic.h | 88 + LogSet.cpp | 235 + LogSet.dfm | Bin 0 -> 5592 bytes LogSet.h | 125 + Loglink.cpp | 865 ++ Loglink.h | 123 + MMCG.DEF | 1776 ++++ MMSSTV.TXT | 804 ++ MMlink.cpp | 408 + MMlink.h | 152 + MacroKey.cpp | 162 + MacroKey.dfm | Bin 0 -> 835 bytes MacroKey.h | 67 + Main.cpp | 14464 ++++++++++++++++++++++++++++++ Main.dfm | Bin 0 -> 42296 bytes Main.h | 1435 +++ Mmcg.cpp | 1521 ++++ Mmcg.h | 81 + MmcgDlg.cpp | 245 + MmcgDlg.dfm | Bin 0 -> 1323 bytes MmcgDlg.h | 71 + Mmsstv English.ini | 1118 +++ Mmsstv Japanese.ini | 1118 +++ Mmsstv.bpr | 127 + Mmsstv.cbproj | 784 ++ Mmsstv.cbproj.local | 2 + Mmsstv.cpp | 156 + Mmsstv.ini | 1118 +++ Mmsstv.map | 6 + Mmsstv.res | Bin 0 -> 1636 bytes Mmsstv.tds | Bin 0 -> 11272192 bytes Mmsstv_Icon.ico | Bin 0 -> 1078 bytes NVCG.txt | 86 + Option.cpp | 1231 +++ Option.dfm | Bin 0 -> 15537 bytes Option.h | 287 + PerSpect.cpp | 151 + PerSpect.dfm | Bin 0 -> 3318 bytes PerSpect.h | 90 + PicFilte.cpp | 667 ++ PicFilte.dfm | Bin 0 -> 4047 bytes PicFilte.h | 118 + PicRect.cpp | 1256 +++ PicRect.dfm | Bin 0 -> 6823 bytes PicRect.h | 188 + PicRectDlg.cpp | 33 + PicRectDlg.dfm | Bin 0 -> 506 bytes PicRectDlg.h | 48 + PicSel.cpp | 821 ++ PicSel.dfm | Bin 0 -> 4350 bytes PicSel.h | 157 + PlayDlg.cpp | 102 + PlayDlg.dfm | Bin 0 -> 1096 bytes PlayDlg.h | 69 + PrevView.cpp | 96 + PrevView.dfm | Bin 0 -> 338 bytes PrevView.h | 58 + Qsodlg.cpp | 548 ++ Qsodlg.dfm | Bin 0 -> 5797 bytes Qsodlg.h | 132 + RMenuDlg.cpp | 145 + RMenuDlg.dfm | Bin 0 -> 1293 bytes RMenuDlg.h | 63 + RadioSet.cpp | 555 ++ RadioSet.dfm | Bin 0 -> 4282 bytes RadioSet.h | 114 + RepSet.cpp | 228 + RepSet.dfm | Bin 0 -> 3998 bytes RepSet.h | 104 + Repeater.txt | 289 + RxView.cpp | 205 + RxView.dfm | Bin 0 -> 509 bytes RxView.h | 60 + Scope.cpp | 365 + Scope.dfm | Bin 0 -> 1679 bytes Scope.h | 96 + Sound.cpp | 911 ++ Sound.h | 176 + Stock/Current.bmp | Bin 0 -> 327734 bytes Stock/Current.mtm | Bin 0 -> 677 bytes Stock/List.mtm | Bin 0 -> 57 bytes Stock/t1.mtm | Bin 0 -> 677 bytes Stock/t2.mtm | Bin 0 -> 341 bytes Stock/t3.mtm | Bin 0 -> 898 bytes Stock/t4.mtm | Bin 0 -> 346 bytes Stock/t5.mtm | Bin 0 -> 479 bytes StockVew.cpp | 68 + StockVew.dfm | Bin 0 -> 422 bytes StockVew.h | 65 + TEMP.MDT | Bin 0 -> 240 bytes TEMP_BAK.MDT | Bin 0 -> 240 bytes TH5Len.cpp | 62 + TH5Len.dfm | Bin 0 -> 2225 bytes TH5Len.h | 71 + TextEdit.cpp | 185 + TextEdit.dfm | Bin 0 -> 1050 bytes TextEdit.h | 77 + TextIn.cpp | 924 ++ TextIn.dfm | Bin 0 -> 6533 bytes TextIn.h | 181 + UPDATE.TXT | 621 ++ VerDsp.cpp | 52 + VerDsp.dfm | Bin 0 -> 742 bytes VerDsp.h | 50 + Wave.cpp | 892 ++ Wave.h | 196 + ZoomView.cpp | 208 + ZoomView.dfm | Bin 0 -> 332 bytes ZoomView.h | 63 + country.cpp | 351 + country.h | 60 + cradio.cpp | 1058 +++ cradio.h | 173 + def1.mtm | Bin 0 -> 597 bytes def2.mtm | Bin 0 -> 341 bytes def3.mtm | Bin 0 -> 898 bytes def4.mtm | Bin 0 -> 346 bytes def5.mtm | Bin 0 -> 479 bytes emmsstv.cnt | 56 + emstvlog.txt | 290 + erepeate.txt | 146 + fileview.cpp | 1674 ++++ fileview.dfm | Bin 0 -> 3627 bytes fileview.h | 306 + fir.cpp | 1171 +++ fir.h | 173 + fskid.txt | 106 + jpeg/JCAPIMIN.C | 280 + jpeg/JCAPISTD.C | 161 + jpeg/JCCOEFCT.C | 449 + jpeg/JCCOLOR.C | 459 + jpeg/JCHUFF.H | 47 + jpeg/JCINIT.C | 72 + jpeg/JCMAINCT.C | 293 + jpeg/JCMARKER.C | 664 ++ jpeg/JCMASTER.C | 590 ++ jpeg/JCOMAPI.C | 106 + jpeg/JCPHUFF.C | 833 ++ jpeg/JCPREPCT.C | 354 + jpeg/JCSAMPLE.C | 519 ++ jpeg/JCTRANS.C | 388 + jpeg/JDAPIMIN.C | 395 + jpeg/JDAPISTD.C | 275 + jpeg/JDATADST.C | 151 + jpeg/JDATASRC.C | 212 + jpeg/JDCOEFCT.C | 736 ++ jpeg/JDCOLOR.C | 396 + jpeg/JDCT.H | 176 + jpeg/JDDCTMGR.C | 269 + jpeg/JDHUFF.C | 651 ++ jpeg/JDHUFF.H | 201 + jpeg/JDINPUT.C | 381 + jpeg/JDMAINCT.C | 512 ++ jpeg/JDMASTER.C | 557 ++ jpeg/JDMERGE.C | 400 + jpeg/JDPHUFF.C | 668 ++ jpeg/JDPOSTCT.C | 290 + jpeg/JDSAMPLE.C | 478 + jpeg/JDTRANS.C | 143 + jpeg/JERROR.C | 252 + jpeg/JERROR.H | 291 + jpeg/JFDCTFLT.C | 168 + jpeg/JFDCTFST.C | 224 + jpeg/JFDCTINT.C | 283 + jpeg/JIDCTFLT.C | 242 + jpeg/JIDCTFST.C | 368 + jpeg/JIDCTINT.C | 389 + jpeg/JIDCTRED.C | 398 + jpeg/JINCLUDE.H | 91 + jpeg/JMEMMGR.C | 1118 +++ jpeg/JMEMNOBS.C | 109 + jpeg/JMEMSYS.H | 198 + jpeg/JMORECFG.H | 363 + jpeg/JPEGINT.H | 392 + jpeg/JPEGLIB.H | 1096 +++ jpeg/JQUANT1.C | 856 ++ jpeg/JQUANT2.C | 1310 +++ jpeg/JUTILS.C | 179 + jpeg/JVERSION.H | 14 + jpeg/Jcdctmgr.c | 387 + jpeg/Jchuff.c | 909 ++ jpeg/Jcparam.c | 610 ++ jpeg/Jdmarker.c | 1360 +++ jpeg/jconfig.h | 48 + jpeg/jhandle.C | 443 + jpeg/jhandle.h | 12 + jpeg/log | 53 + mml.h | 67 + mmrp.h | 43 + mmsstv.cnt | 56 + mmw.h | 46 + mode.txt | 288 + mstvlog.txt | 620 ++ onkai.txt | 30 + res/App.ico | Bin 0 -> 1078 bytes res/SB240B.bmp | Bin 0 -> 246 bytes res/SB240T.bmp | Bin 0 -> 246 bytes res/SB256.bmp | Bin 0 -> 246 bytes res/SBAHist.bmp | Bin 0 -> 310 bytes res/SBAdj.bmp | Bin 0 -> 246 bytes res/SBBoxS.bmp | Bin 0 -> 246 bytes res/SBCBar.bmp | Bin 0 -> 246 bytes res/SBCW.bmp | Bin 0 -> 246 bytes res/SBCol.bmp | Bin 0 -> 246 bytes res/SBCopy.bmp | Bin 0 -> 246 bytes res/SBCut.bmp | Bin 0 -> 246 bytes res/SBD.bmp | Bin 0 -> 246 bytes res/SBDA240.bmp | Bin 0 -> 246 bytes res/SBDList.bmp | Bin 0 -> 246 bytes res/SBDS240.bmp | Bin 0 -> 246 bytes res/SBElip.bmp | Bin 0 -> 246 bytes res/SBFolder.bmp | Bin 0 -> 246 bytes res/SBFree.bmp | Bin 0 -> 246 bytes res/SBI.bmp | Bin 0 -> 246 bytes res/SBLine.bmp | Bin 0 -> 246 bytes res/SBLoop.bmp | Bin 0 -> 246 bytes res/SBMIR.bmp | Bin 0 -> 246 bytes res/SBMargin.bmp | Bin 0 -> 246 bytes res/SBNSize.bmp | Bin 0 -> 246 bytes res/SBOrg.bmp | Bin 0 -> 246 bytes res/SBPaste.bmp | Bin 0 -> 246 bytes res/SBPic.bmp | Bin 0 -> 246 bytes res/SBRL.bmp | Bin 0 -> 246 bytes res/SBRR.bmp | Bin 0 -> 246 bytes res/SBRRect.bmp | Bin 0 -> 246 bytes res/SBRatio.bmp | Bin 0 -> 246 bytes res/SBRot.bmp | Bin 0 -> 246 bytes res/SBSAdj.bmp | Bin 0 -> 246 bytes res/SBSel.bmp | Bin 0 -> 246 bytes res/SBStrch.bmp | Bin 0 -> 246 bytes res/SBTest.bmp | Bin 0 -> 246 bytes res/SBText.bmp | Bin 0 -> 246 bytes res/SBUA240.bmp | Bin 0 -> 246 bytes res/SBULog.bmp | Bin 0 -> 310 bytes res/SBUS240.bmp | Bin 0 -> 246 bytes res/SBUTemp.bmp | Bin 0 -> 310 bytes res/SBUdate.bmp | Bin 0 -> 246 bytes res/SBView.bmp | Bin 0 -> 246 bytes res/SBWHist.bmp | Bin 0 -> 310 bytes res/SBZoom.bmp | Bin 0 -> 246 bytes res/copy.bmp | Bin 0 -> 1638 bytes res/cut.bmp | Bin 0 -> 1638 bytes res/paste.bmp | Bin 0 -> 1638 bytes sstv.cpp | 3088 +++++++ sstv.h | 853 ++ temp.txt | 190 + 551 files changed, 132870 insertions(+) create mode 100644 ARRL.DX create mode 100644 BitMask.cpp create mode 100644 BitMask.dfm create mode 100644 BitMask.h create mode 100644 CItems/CUSTOM.TXT create mode 100644 CItems/ECUSTOM.TXT create mode 100644 CItems/PERIMG/About.cpp create mode 100644 CItems/PERIMG/About.dfm create mode 100644 CItems/PERIMG/About.h create mode 100644 CItems/PERIMG/Comlib.cpp create mode 100644 CItems/PERIMG/Comlib.h create mode 100644 CItems/PERIMG/Item.ico create mode 100644 CItems/PERIMG/PerDlg.cpp create mode 100644 CItems/PERIMG/PerDlg.dfm create mode 100644 CItems/PERIMG/PerDlg.h create mode 100644 CItems/PERIMG/PerImg.bpr create mode 100644 CItems/PERIMG/PerImg.cpp create mode 100644 CItems/PERIMG/PerSpect.cpp create mode 100644 CItems/PERIMG/PerSpect.dfm create mode 100644 CItems/PERIMG/PerSpect.h create mode 100644 CItems/PERIMG/perimg.rc create mode 100644 CItems/PERIMG/perimg.res create mode 100644 CItems/PERIMG/res/SB.bmp create mode 100644 CItems/PERIMG/res/SBA.bmp create mode 100644 CItems/PERIMG/res/SBB.bmp create mode 100644 CItems/PERIMG/res/SBC.bmp create mode 100644 CItems/PERIMG/res/SBD.bmp create mode 100644 CItems/PERIMG/res/SBE.bmp create mode 100644 CItems/PERIMG/res/SBF.bmp create mode 100644 CItems/PERIMG/res/SBG.bmp create mode 100644 CItems/PERIMG/res/SBH.bmp create mode 100644 CItems/PERIMG/res/SBI.bmp create mode 100644 CItems/PERIMG/res/SBJ.bmp create mode 100644 CItems/PERIMG/res/SBK.bmp create mode 100644 CItems/PERIMG/res/SBL.bmp create mode 100644 CItems/PERIMG/res/SBM.bmp create mode 100644 CItems/PERIMG/res/SBN.bmp create mode 100644 CItems/PERIMG/res/SBO.bmp create mode 100644 CItems/PERIMG/res/SBP.bmp create mode 100644 CItems/PERIMG/res/SBQ.bmp create mode 100644 CItems/QSLBox/About.cpp create mode 100644 CItems/QSLBox/About.dfm create mode 100644 CItems/QSLBox/About.h create mode 100644 CItems/QSLBox/Comlib.cpp create mode 100644 CItems/QSLBox/Comlib.h create mode 100644 CItems/QSLBox/Item.ico create mode 100644 CItems/QSLBox/TextDlg.cpp create mode 100644 CItems/QSLBox/TextDlg.dfm create mode 100644 CItems/QSLBox/TextDlg.h create mode 100644 CItems/QSLBox/qslbox.bpr create mode 100644 CItems/QSLBox/qslbox.cpp create mode 100644 CItems/QSLBox/qslbox.rc create mode 100644 CItems/QSLBox/qslbox.res create mode 100644 CItems/QSLBox/qslbox.tds create mode 100644 CItems/QSLBox/res/SB3DD.bmp create mode 100644 CItems/QSLBox/res/SB3DI.bmp create mode 100644 CItems/QSLBox/res/SBA1.bmp create mode 100644 CItems/QSLBox/res/SBA2.bmp create mode 100644 CItems/QSLBox/res/SBA3.bmp create mode 100644 CItems/QSLBox/res/SBC.bmp create mode 100644 CItems/QSLBox/res/SBG1.bmp create mode 100644 CItems/QSLBox/res/SBG2.bmp create mode 100644 CItems/QSLBox/res/SBG3.bmp create mode 100644 CItems/QSLBox/res/SBG4.bmp create mode 100644 CItems/QSLBox/res/SBS1.bmp create mode 100644 CItems/QSLBox/res/SBS2.bmp create mode 100644 CItems/QSLBox/res/SBS3.bmp create mode 100644 CItems/QSLBox/res/SBS4.bmp create mode 100644 CItems/TEXTBOX/About.cpp create mode 100644 CItems/TEXTBOX/About.dfm create mode 100644 CItems/TEXTBOX/About.h create mode 100644 CItems/TEXTBOX/CodeVw.cpp create mode 100644 CItems/TEXTBOX/CodeVw.dfm create mode 100644 CItems/TEXTBOX/CodeVw.h create mode 100644 CItems/TEXTBOX/Comlib.cpp create mode 100644 CItems/TEXTBOX/Comlib.h create mode 100644 CItems/TEXTBOX/Item.ico create mode 100644 CItems/TEXTBOX/TextBox.bpr create mode 100644 CItems/TEXTBOX/TextBox.cpp create mode 100644 CItems/TEXTBOX/TextBox.rc create mode 100644 CItems/TEXTBOX/TextBox.res create mode 100644 CItems/TEXTBOX/TextDlg.cpp create mode 100644 CItems/TEXTBOX/TextDlg.dfm create mode 100644 CItems/TEXTBOX/TextDlg.h create mode 100644 CItems/TEXTBOX/res/SB3DD.bmp create mode 100644 CItems/TEXTBOX/res/SB3DI.bmp create mode 100644 CItems/TEXTBOX/res/SBA1.bmp create mode 100644 CItems/TEXTBOX/res/SBA2.bmp create mode 100644 CItems/TEXTBOX/res/SBA3.bmp create mode 100644 CItems/TEXTBOX/res/SBA4.bmp create mode 100644 CItems/TEXTBOX/res/SBC.bmp create mode 100644 CItems/TEXTBOX/res/SBG1.bmp create mode 100644 CItems/TEXTBOX/res/SBG2.bmp create mode 100644 CItems/TEXTBOX/res/SBG3.bmp create mode 100644 CItems/TEXTBOX/res/SBG4.bmp create mode 100644 CItems/TEXTBOX/res/SBS1.bmp create mode 100644 CItems/TEXTBOX/res/SBS2.bmp create mode 100644 CItems/TEXTBOX/res/SBS3.bmp create mode 100644 CItems/TEXTBOX/res/SBS4.bmp create mode 100644 CItems/TextArt/About.cpp create mode 100644 CItems/TextArt/About.dfm create mode 100644 CItems/TextArt/About.h create mode 100644 CItems/TextArt/CodeVw.cpp create mode 100644 CItems/TextArt/CodeVw.dfm create mode 100644 CItems/TextArt/CodeVw.h create mode 100644 CItems/TextArt/Comlib.cpp create mode 100644 CItems/TextArt/Comlib.h create mode 100644 CItems/TextArt/Item.ico create mode 100644 CItems/TextArt/TextArt.bmp create mode 100644 CItems/TextArt/TextArt.bpr create mode 100644 CItems/TextArt/TextArt.cpp create mode 100644 CItems/TextArt/TextArt.rc create mode 100644 CItems/TextArt/TextDlg.cpp create mode 100644 CItems/TextArt/TextDlg.dfm create mode 100644 CItems/TextArt/TextDlg.h create mode 100644 CItems/TextArt/res.h create mode 100644 CItems/TextArt/res/P.bmp create mode 100644 CItems/TextArt/res/P1.bmp create mode 100644 CItems/TextArt/res/P10.bmp create mode 100644 CItems/TextArt/res/P11.bmp create mode 100644 CItems/TextArt/res/P12.bmp create mode 100644 CItems/TextArt/res/P13.bmp create mode 100644 CItems/TextArt/res/P14.bmp create mode 100644 CItems/TextArt/res/P15.bmp create mode 100644 CItems/TextArt/res/P16.bmp create mode 100644 CItems/TextArt/res/P2.bmp create mode 100644 CItems/TextArt/res/P3.bmp create mode 100644 CItems/TextArt/res/P4.bmp create mode 100644 CItems/TextArt/res/P5.bmp create mode 100644 CItems/TextArt/res/P6.bmp create mode 100644 CItems/TextArt/res/P7.bmp create mode 100644 CItems/TextArt/res/P8.bmp create mode 100644 CItems/TextArt/res/P9.bmp create mode 100644 CItems/TextArt/res/SB3DD.bmp create mode 100644 CItems/TextArt/res/SB3DI.bmp create mode 100644 CItems/TextArt/res/SBA1.bmp create mode 100644 CItems/TextArt/res/SBA2.bmp create mode 100644 CItems/TextArt/res/SBA3.bmp create mode 100644 CItems/TextArt/res/SBA4.bmp create mode 100644 CItems/TextArt/res/SBAdj.bmp create mode 100644 CItems/TextArt/res/SBC.bmp create mode 100644 CItems/TextArt/res/SBClip.bmp create mode 100644 CItems/TextArt/res/SBCopy.bmp create mode 100644 CItems/TextArt/res/SBG1.bmp create mode 100644 CItems/TextArt/res/SBG2.bmp create mode 100644 CItems/TextArt/res/SBG3.bmp create mode 100644 CItems/TextArt/res/SBG4.bmp create mode 100644 CItems/TextArt/res/SBG5.bmp create mode 100644 CItems/TextArt/res/SBGA.bmp create mode 100644 CItems/TextArt/res/SBGB.bmp create mode 100644 CItems/TextArt/res/SBGRand.bmp create mode 100644 CItems/TextArt/res/SBGRev.bmp create mode 100644 CItems/TextArt/res/SBGRot.bmp create mode 100644 CItems/TextArt/res/SBInvCol.bmp create mode 100644 CItems/TextArt/res/SBLoad.bmp create mode 100644 CItems/TextArt/res/SBMIR.bmp create mode 100644 CItems/TextArt/res/SBMList.bmp create mode 100644 CItems/TextArt/res/SBPB.bmp create mode 100644 CItems/TextArt/res/SBPaste.bmp create mode 100644 CItems/TextArt/res/SBPtn.bmp create mode 100644 CItems/TextArt/res/SBRR.bmp create mode 100644 CItems/TextArt/res/SBS1.bmp create mode 100644 CItems/TextArt/res/SBS2.bmp create mode 100644 CItems/TextArt/res/SBS3.bmp create mode 100644 CItems/TextArt/res/SBS4.bmp create mode 100644 CItems/TextArt/res/SBSftCol.bmp create mode 100644 CItems/TextArt/res/SBZ0.bmp create mode 100644 CItems/TextArt/res/SBZ1.bmp create mode 100644 CItems/TextArt/res/SBZ10.bmp create mode 100644 CItems/TextArt/res/SBZ11.bmp create mode 100644 CItems/TextArt/res/SBZ12.bmp create mode 100644 CItems/TextArt/res/SBZ13.bmp create mode 100644 CItems/TextArt/res/SBZ14.bmp create mode 100644 CItems/TextArt/res/SBZ15.bmp create mode 100644 CItems/TextArt/res/SBZ16.bmp create mode 100644 CItems/TextArt/res/SBZ17.bmp create mode 100644 CItems/TextArt/res/SBZ18.bmp create mode 100644 CItems/TextArt/res/SBZ19.bmp create mode 100644 CItems/TextArt/res/SBZ2.bmp create mode 100644 CItems/TextArt/res/SBZ20.bmp create mode 100644 CItems/TextArt/res/SBZ21.bmp create mode 100644 CItems/TextArt/res/SBZ22.bmp create mode 100644 CItems/TextArt/res/SBZ23.bmp create mode 100644 CItems/TextArt/res/SBZ24.bmp create mode 100644 CItems/TextArt/res/SBZ25.bmp create mode 100644 CItems/TextArt/res/SBZ26.bmp create mode 100644 CItems/TextArt/res/SBZ27.bmp create mode 100644 CItems/TextArt/res/SBZ28.bmp create mode 100644 CItems/TextArt/res/SBZ29.bmp create mode 100644 CItems/TextArt/res/SBZ3.bmp create mode 100644 CItems/TextArt/res/SBZ30.bmp create mode 100644 CItems/TextArt/res/SBZ31.bmp create mode 100644 CItems/TextArt/res/SBZ32.bmp create mode 100644 CItems/TextArt/res/SBZ33.bmp create mode 100644 CItems/TextArt/res/SBZ34.bmp create mode 100644 CItems/TextArt/res/SBZ35.bmp create mode 100644 CItems/TextArt/res/SBZ36.bmp create mode 100644 CItems/TextArt/res/SBZ37.bmp create mode 100644 CItems/TextArt/res/SBZ38.bmp create mode 100644 CItems/TextArt/res/SBZ4.bmp create mode 100644 CItems/TextArt/res/SBZ5.bmp create mode 100644 CItems/TextArt/res/SBZ6.bmp create mode 100644 CItems/TextArt/res/SBZ7.bmp create mode 100644 CItems/TextArt/res/SBZ8.bmp create mode 100644 CItems/TextArt/res/SBZ9.bmp create mode 100644 CItems/TextArt/res/Z.bmp create mode 100644 CItems/TextArt/res/temp.bmp create mode 100644 CItems/TextArt/textart.res create mode 100644 COPYING.LESSER.txt create mode 100644 COPYING.txt create mode 100644 ClockAdj.cpp create mode 100644 ClockAdj.dfm create mode 100644 ClockAdj.h create mode 100644 ColorBar.cpp create mode 100644 ColorBar.dfm create mode 100644 ColorBar.h create mode 100644 ColorSet.cpp create mode 100644 ColorSet.dfm create mode 100644 ColorSet.h create mode 100644 ComLib.cpp create mode 100644 ComLib.h create mode 100644 Comm.cpp create mode 100644 Comm.h create mode 100644 ConvDef.cpp create mode 100644 ConvDef.dfm create mode 100644 ConvDef.h create mode 100644 CtrBtn.cpp create mode 100644 CtrBtn.dfm create mode 100644 CtrBtn.h create mode 100644 Draw.cpp create mode 100644 Draw.h create mode 100644 EMMSSTV.TXT create mode 100644 EUPDATE.TXT create mode 100644 ExtCmd.cpp create mode 100644 ExtCmd.dfm create mode 100644 ExtCmd.h create mode 100644 Fft.cpp create mode 100644 Fft.h create mode 100644 FreqDisp.cpp create mode 100644 FreqDisp.dfm create mode 100644 FreqDisp.h create mode 100644 Hamlog5.cpp create mode 100644 Hamlog5.h create mode 100644 HistView.cpp create mode 100644 HistView.dfm create mode 100644 HistView.h create mode 100644 History/History.bin create mode 100644 InputWin.cpp create mode 100644 InputWin.dfm create mode 100644 InputWin.h create mode 100644 JASTA.txt create mode 100644 JASTA/ARRL.DX create mode 100644 JASTA/App.ico create mode 100644 JASTA/ComLib.cpp create mode 100644 JASTA/ComLib.h create mode 100644 JASTA/EMMJASTA.TXT create mode 100644 JASTA/FEdit.cpp create mode 100644 JASTA/FEdit.dfm create mode 100644 JASTA/FEdit.h create mode 100644 JASTA/LogConv.cpp create mode 100644 JASTA/LogConv.h create mode 100644 JASTA/LogFile.cpp create mode 100644 JASTA/LogFile.h create mode 100644 JASTA/MMJASTA.bpr create mode 100644 JASTA/MMJASTA.cbproj create mode 100644 JASTA/MMJASTA.cbproj.local create mode 100644 JASTA/MMJASTA.cpp create mode 100644 JASTA/MMJASTA.ini create mode 100644 JASTA/MMJASTA.map create mode 100644 JASTA/MMJASTA.res create mode 100644 JASTA/MMJASTA.tds create mode 100644 JASTA/MMJASTA_Icon.ico create mode 100644 JASTA/Main.cpp create mode 100644 JASTA/Main.dfm create mode 100644 JASTA/Main.h create mode 100644 JASTA/OptDlg.cpp create mode 100644 JASTA/OptDlg.dfm create mode 100644 JASTA/OptDlg.h create mode 100644 JASTA/QsoDlg.cpp create mode 100644 JASTA/QsoDlg.dfm create mode 100644 JASTA/QsoDlg.h create mode 100644 JASTA/TextEdit.cpp create mode 100644 JASTA/TextEdit.dfm create mode 100644 JASTA/TextEdit.h create mode 100644 JASTA/country.cpp create mode 100644 JASTA/country.h create mode 100644 JASTA/mmjasta.txt create mode 100644 LineSet.cpp create mode 100644 LineSet.dfm create mode 100644 LineSet.h create mode 100644 LinearDs.cpp create mode 100644 LinearDs.dfm create mode 100644 LinearDs.h create mode 100644 ListText.cpp create mode 100644 ListText.dfm create mode 100644 ListText.h create mode 100644 LogConv.cpp create mode 100644 LogConv.h create mode 100644 LogFile.cpp create mode 100644 LogFile.h create mode 100644 LogList.cpp create mode 100644 LogList.dfm create mode 100644 LogList.h create mode 100644 LogPic.cpp create mode 100644 LogPic.dfm create mode 100644 LogPic.h create mode 100644 LogSet.cpp create mode 100644 LogSet.dfm create mode 100644 LogSet.h create mode 100644 Loglink.cpp create mode 100644 Loglink.h create mode 100644 MMCG.DEF create mode 100644 MMSSTV.TXT create mode 100644 MMlink.cpp create mode 100644 MMlink.h create mode 100644 MacroKey.cpp create mode 100644 MacroKey.dfm create mode 100644 MacroKey.h create mode 100644 Main.cpp create mode 100644 Main.dfm create mode 100644 Main.h create mode 100644 Mmcg.cpp create mode 100644 Mmcg.h create mode 100644 MmcgDlg.cpp create mode 100644 MmcgDlg.dfm create mode 100644 MmcgDlg.h create mode 100644 Mmsstv English.ini create mode 100644 Mmsstv Japanese.ini create mode 100644 Mmsstv.bpr create mode 100644 Mmsstv.cbproj create mode 100644 Mmsstv.cbproj.local create mode 100644 Mmsstv.cpp create mode 100644 Mmsstv.ini create mode 100644 Mmsstv.map create mode 100644 Mmsstv.res create mode 100644 Mmsstv.tds create mode 100644 Mmsstv_Icon.ico create mode 100644 NVCG.txt create mode 100644 Option.cpp create mode 100644 Option.dfm create mode 100644 Option.h create mode 100644 PerSpect.cpp create mode 100644 PerSpect.dfm create mode 100644 PerSpect.h create mode 100644 PicFilte.cpp create mode 100644 PicFilte.dfm create mode 100644 PicFilte.h create mode 100644 PicRect.cpp create mode 100644 PicRect.dfm create mode 100644 PicRect.h create mode 100644 PicRectDlg.cpp create mode 100644 PicRectDlg.dfm create mode 100644 PicRectDlg.h create mode 100644 PicSel.cpp create mode 100644 PicSel.dfm create mode 100644 PicSel.h create mode 100644 PlayDlg.cpp create mode 100644 PlayDlg.dfm create mode 100644 PlayDlg.h create mode 100644 PrevView.cpp create mode 100644 PrevView.dfm create mode 100644 PrevView.h create mode 100644 Qsodlg.cpp create mode 100644 Qsodlg.dfm create mode 100644 Qsodlg.h create mode 100644 RMenuDlg.cpp create mode 100644 RMenuDlg.dfm create mode 100644 RMenuDlg.h create mode 100644 RadioSet.cpp create mode 100644 RadioSet.dfm create mode 100644 RadioSet.h create mode 100644 RepSet.cpp create mode 100644 RepSet.dfm create mode 100644 RepSet.h create mode 100644 Repeater.txt create mode 100644 RxView.cpp create mode 100644 RxView.dfm create mode 100644 RxView.h create mode 100644 Scope.cpp create mode 100644 Scope.dfm create mode 100644 Scope.h create mode 100644 Sound.cpp create mode 100644 Sound.h create mode 100644 Stock/Current.bmp create mode 100644 Stock/Current.mtm create mode 100644 Stock/List.mtm create mode 100644 Stock/t1.mtm create mode 100644 Stock/t2.mtm create mode 100644 Stock/t3.mtm create mode 100644 Stock/t4.mtm create mode 100644 Stock/t5.mtm create mode 100644 StockVew.cpp create mode 100644 StockVew.dfm create mode 100644 StockVew.h create mode 100644 TEMP.MDT create mode 100644 TEMP_BAK.MDT create mode 100644 TH5Len.cpp create mode 100644 TH5Len.dfm create mode 100644 TH5Len.h create mode 100644 TextEdit.cpp create mode 100644 TextEdit.dfm create mode 100644 TextEdit.h create mode 100644 TextIn.cpp create mode 100644 TextIn.dfm create mode 100644 TextIn.h create mode 100644 UPDATE.TXT create mode 100644 VerDsp.cpp create mode 100644 VerDsp.dfm create mode 100644 VerDsp.h create mode 100644 Wave.cpp create mode 100644 Wave.h create mode 100644 ZoomView.cpp create mode 100644 ZoomView.dfm create mode 100644 ZoomView.h create mode 100644 country.cpp create mode 100644 country.h create mode 100644 cradio.cpp create mode 100644 cradio.h create mode 100644 def1.mtm create mode 100644 def2.mtm create mode 100644 def3.mtm create mode 100644 def4.mtm create mode 100644 def5.mtm create mode 100644 emmsstv.cnt create mode 100644 emstvlog.txt create mode 100644 erepeate.txt create mode 100644 fileview.cpp create mode 100644 fileview.dfm create mode 100644 fileview.h create mode 100644 fir.cpp create mode 100644 fir.h create mode 100644 fskid.txt create mode 100644 jpeg/JCAPIMIN.C create mode 100644 jpeg/JCAPISTD.C create mode 100644 jpeg/JCCOEFCT.C create mode 100644 jpeg/JCCOLOR.C create mode 100644 jpeg/JCHUFF.H create mode 100644 jpeg/JCINIT.C create mode 100644 jpeg/JCMAINCT.C create mode 100644 jpeg/JCMARKER.C create mode 100644 jpeg/JCMASTER.C create mode 100644 jpeg/JCOMAPI.C create mode 100644 jpeg/JCPHUFF.C create mode 100644 jpeg/JCPREPCT.C create mode 100644 jpeg/JCSAMPLE.C create mode 100644 jpeg/JCTRANS.C create mode 100644 jpeg/JDAPIMIN.C create mode 100644 jpeg/JDAPISTD.C create mode 100644 jpeg/JDATADST.C create mode 100644 jpeg/JDATASRC.C create mode 100644 jpeg/JDCOEFCT.C create mode 100644 jpeg/JDCOLOR.C create mode 100644 jpeg/JDCT.H create mode 100644 jpeg/JDDCTMGR.C create mode 100644 jpeg/JDHUFF.C create mode 100644 jpeg/JDHUFF.H create mode 100644 jpeg/JDINPUT.C create mode 100644 jpeg/JDMAINCT.C create mode 100644 jpeg/JDMASTER.C create mode 100644 jpeg/JDMERGE.C create mode 100644 jpeg/JDPHUFF.C create mode 100644 jpeg/JDPOSTCT.C create mode 100644 jpeg/JDSAMPLE.C create mode 100644 jpeg/JDTRANS.C create mode 100644 jpeg/JERROR.C create mode 100644 jpeg/JERROR.H create mode 100644 jpeg/JFDCTFLT.C create mode 100644 jpeg/JFDCTFST.C create mode 100644 jpeg/JFDCTINT.C create mode 100644 jpeg/JIDCTFLT.C create mode 100644 jpeg/JIDCTFST.C create mode 100644 jpeg/JIDCTINT.C create mode 100644 jpeg/JIDCTRED.C create mode 100644 jpeg/JINCLUDE.H create mode 100644 jpeg/JMEMMGR.C create mode 100644 jpeg/JMEMNOBS.C create mode 100644 jpeg/JMEMSYS.H create mode 100644 jpeg/JMORECFG.H create mode 100644 jpeg/JPEGINT.H create mode 100644 jpeg/JPEGLIB.H create mode 100644 jpeg/JQUANT1.C create mode 100644 jpeg/JQUANT2.C create mode 100644 jpeg/JUTILS.C create mode 100644 jpeg/JVERSION.H create mode 100644 jpeg/Jcdctmgr.c create mode 100644 jpeg/Jchuff.c create mode 100644 jpeg/Jcparam.c create mode 100644 jpeg/Jdmarker.c create mode 100644 jpeg/jconfig.h create mode 100644 jpeg/jhandle.C create mode 100644 jpeg/jhandle.h create mode 100644 jpeg/log create mode 100644 mml.h create mode 100644 mmrp.h create mode 100644 mmsstv.cnt create mode 100644 mmw.h create mode 100644 mode.txt create mode 100644 mstvlog.txt create mode 100644 onkai.txt create mode 100644 res/App.ico create mode 100644 res/SB240B.bmp create mode 100644 res/SB240T.bmp create mode 100644 res/SB256.bmp create mode 100644 res/SBAHist.bmp create mode 100644 res/SBAdj.bmp create mode 100644 res/SBBoxS.bmp create mode 100644 res/SBCBar.bmp create mode 100644 res/SBCW.bmp create mode 100644 res/SBCol.bmp create mode 100644 res/SBCopy.bmp create mode 100644 res/SBCut.bmp create mode 100644 res/SBD.bmp create mode 100644 res/SBDA240.bmp create mode 100644 res/SBDList.bmp create mode 100644 res/SBDS240.bmp create mode 100644 res/SBElip.bmp create mode 100644 res/SBFolder.bmp create mode 100644 res/SBFree.bmp create mode 100644 res/SBI.bmp create mode 100644 res/SBLine.bmp create mode 100644 res/SBLoop.bmp create mode 100644 res/SBMIR.bmp create mode 100644 res/SBMargin.bmp create mode 100644 res/SBNSize.bmp create mode 100644 res/SBOrg.bmp create mode 100644 res/SBPaste.bmp create mode 100644 res/SBPic.bmp create mode 100644 res/SBRL.bmp create mode 100644 res/SBRR.bmp create mode 100644 res/SBRRect.bmp create mode 100644 res/SBRatio.bmp create mode 100644 res/SBRot.bmp create mode 100644 res/SBSAdj.bmp create mode 100644 res/SBSel.bmp create mode 100644 res/SBStrch.bmp create mode 100644 res/SBTest.bmp create mode 100644 res/SBText.bmp create mode 100644 res/SBUA240.bmp create mode 100644 res/SBULog.bmp create mode 100644 res/SBUS240.bmp create mode 100644 res/SBUTemp.bmp create mode 100644 res/SBUdate.bmp create mode 100644 res/SBView.bmp create mode 100644 res/SBWHist.bmp create mode 100644 res/SBZoom.bmp create mode 100644 res/copy.bmp create mode 100644 res/cut.bmp create mode 100644 res/paste.bmp create mode 100644 sstv.cpp create mode 100644 sstv.h create mode 100644 temp.txt diff --git a/ARRL.DX b/ARRL.DX new file mode 100644 index 0000000..4bbc512 --- /dev/null +++ b/ARRL.DX @@ -0,0 +1,423 @@ +! ARRL DXCC COUNTRIES LIST For MMLOG +! +AP ;AP-AS,6P-6S ;PAKISTAN ;AS ;E +!A1 ;A1 ;ABU AIL ;AS +A2 ;A2,8O ;BOTSWANA ;AF ;B +A3 ;A3 ;TONGA ;OC ;N +A4 ;A4 ;OMAN ;AS ;D +A5 ;A5 ;BHUTAN ;AS ;F +A6 ;A6 ;UNITED ARAB ;AS ;D +A7 ;A7 ;QATAR ;AS ;C +A9 ;A9 ;BAHRAIN ;AS ;C +BV9P ;BV9P\,BQ9P\ ;PRATAS IS. ;AS ;H +BV ;BV,BX ;TAIWAN ;AS ;H +BS7 ;BS7H\ ;SCARBOROUGH REEF ;AS ;H +BY ;BA-BZ,3H-3U,B1-B9 ;CHINA ;AS ;H +CE0X ;CE0X,XQ0X-XR0X,CE0AA ;SAN FELIX IS. ;SA ;R +CE0Z ;CE0Z,CE0I,CE0OGZ,XQ0Z-XR0Z,XQ0I-XR0I,CE0/JA7XYE; FERNANDEZ ;SA ;R +CE0 ;CE0,XQ0-XR0 ;EASTER IS. ;SA ;T +CE ;CA-CE,XQ-XR,3G ;CHILE ;SA ;Q +CM ;CL-CM,CO,T4 ;CUBA ;NA ;R +CN ;CN,5C-5G ;MOROCCO ;AF ;Z +CP ;CP ;BOLIVIA ;SA ;Q +CT3 ;CS3,CT3,CR9 ;MADEIRAI IS.(PORTUGAL) ;AF ;Z +CU ;CU ;AZORES IS.(PORTUGAL) ;EU ;Z +CT ;CQ-CU ;PORTUGAL ;EU ;Z +CY9 ;CY9,CY0SPI ;ST PAUL IS. ;NA ;Q +CY0 ;CY0 ;SABLE IS. ;NA ;Q +CX ;CV-CX ;URUGUAY ;SA ;P +C2 ;C2 ;NAURU ;OC ;M +C3 ;C3 ;ANDORRA ;EU ;A +C5 ;C5 ;THE GAMBIA ;AF ;Z +C6 ;C6 ;BAHAMA IS. ;NA ;R +C8 ;C8-C9 ;MOZAMBIQUE ;AF ;B +DL ;DA-DR,Y2-Y9 ;GERMANY ;EU ;A +DU ;DU-DZ,4D-4I ;PHILIPPINES ;OC ;H +D2 ;D2-D3 ;ANGOLA ;AF ;A +D4 ;D4 ;CAPE VERDE ;AF ;A +D6 ;D6 ;COMOROS ;AF ;C +EA6 ;EA6-EH6,AM6-AO6 ;BALEARIC ;EU ;A +EA8 ;EA8-EH8,AM8-AO8 ;CANARY ;AF ;A +EA9 ;EA9-EH9,AM9-AO9 ;CEUTA & MELILLA(SPAIN) ;AF ;A +EA ;EA-EH,AM-AO ;SPAIN ;EU ;A +EI ;EI-EJ ;IRELAND ;EU ;Z +EK ;EK ;ARMENIA (ex UG) ;AS ;D +EL ;EL,5L-5M,A8,D5,6Z ;LIBERIA ;AF ;Z +EP ;EP-EQ,HN,9B-9D ;IRAN ;AS ;c +ER ;ER ;MOLDOVA (ex UO) ;EU ;C +ES ;ES ;ESTONIA ;EU ;C +ET ;ET,9E-9F ;ETHIOPIA ;AF ;C +EU ;EU-EW ;BELARUS (ex UC) ;EU ;C +EX ;EX ;KYRGYZSTAN (ex UM) ;AS ;F +EY ;EY ;TAJIKISTAN (ex UJ) ;AS ;F +EZ ;EZ ;TURKMENISTAN (ex UH) ;AS ;F +E4 ;E4 ;PALESTINE ;AS ;B +E3 ;E3 ;ERITREA ;AF ;C +FG ;FG ;GUADELOUPE ;NA ;Q +FH ;FH ;MAYOTTE ;AF ;C +FJ ;FJ,FS ;SAINT MARTIN ;NA ;Q +FK ;FK,TX8 ;NEW CALEDONIA ;OC ;L +FM ;FM ;MARTINIQUE ;NA ;Q +FO/C ;FO0X,FO0AAA ;CLIPPERTON IS. ;NA ;T +FO ;FO ;FRENCH POLYNESIA ;OC ;W +FO/A ;FO ;AUSTRAL IS ;OC ;W +FO/M ;FO ;MARQUESAS IS ;OC ;W +FP ;FP ;ST.PIERRE & MIQUELON IS. ;NA ;Q +FR/J ;FR*/J,FR*/E ;JUAN DE NOVA & EUROPA IS. ;AF ;C +FR/G ;FR*/G ;GLORIOSO IS. ;AF ;C +FR/T ;FR*/T ;TROMELIN ;AF ;C +FR ; ;REUNION IS. ;AF ;C +FR/? ;FR ;REUNION IS. /GLORIOSO IS. /JUAN DE NOVA & EUROPA ;AF ;C +FT5W ;FT8W,FT2W,FT4W,FT5W,FT0W ;CROZET IS. ;AF ;C +FT5X ;FT8X,FT2X,FT4X,FT5X,FT0X ;KERGUELEN IS. ;AF ;E +FT5Z ;FT8Z,FT2Z,FT4Z,FT5Z,FT0Z ;AMSTERDAM & ST PAUL IS. ;AF ;E +FW ;FW ;WALLIS & FUTUNA IS. ;OC ;M +FY ;FY ;FRENCH GUIANA ;SA ;P +F ;F,HW-HY,TM,TO-TQ ;FRANCE ;EU ;A +GD ;GD,GT,MA6-MB6,2A6,MD ;ISLE OF MAN ;EU ;Z +GI ;GI,GN,MA5-MB5,2A5,MI ;NORTHERN IRELAND ;EU ;Z +GJ ;GH,GJ,MA7-MB7,2A7,MJ ;JERSEY ;EU ;Z +GM ;GM,GS,MA3-MB3,2A3,MM ;SCOTLAND ;EU ;Z +GU ;GU,GP,MA8-MB8,2A8,MG ;GUERNSEY ;EU ;Z +GW ;GW,GC,MA4-MB4,2A4,MW ;WALES,U.K ;EU ;Z +G ;G,2,M ;ENGLAND(U.K) ;EU ;Z +HA ;HA,HG ;HUNGARY ;EU ;A +HB0 ;HB0,HE0 ;LIECHTENSTEIN ;EU ;A +HB ;HB,HE,4U1VIC ;SWITZERLAND ;EU ;A +HC8 ;HC8-HD8 ;GALAPAGOS IS.(ECUADOR) ;SA ;R +HC ;HC,HD ;ECUADOR ;SA ;R +HH ;HH,4V ;HAITI ;NA ;R +HI ;HI ;DOMINICAN REPUBLIC ;NA ;R +HK0/M ;HK0M,5J0M,HK0TU ;MALPELO IS. ;NA ;R +HK0/A ;HK0,5J0 ;SAN ANDRES ;NA ;R +HK ;HJ-HK,5J-5K ;COLOMBIA ;SA ;R +HL ;HL,DS-DT,6K-6N,D7-D9,KL9 ;REPUBLIC OF KOREA (SOUTH KOREA) ;AS ;I +HP ;HO-HP,3E-3F,H3,H8-H9 ;PANAMA ;NA ;R +HR ;HQ-HR ;HONDURAS ;NA ;S +HS ;HS,E2 ;THAILAND ;AS ;G +HV ;HV ;VATICAN ;EU ;A +HZ ;HZ,7Z-8Z ;SAUDI ARABIA ;AS ;C +H40 ;H40 ;TEMOTU IS ;OC ;L +H4 ;H4 ;SOLOMON IS. ;OC ;L +IS ;IS,IM0,IU0 ;SARDINIA ;EU ;A +I ;I ;ITALY ;EU ;A +JD1/M ;JD1YAA,JD1BIY ;MINAMI TORISHIMA ;OC ;I +JD1 ;JD1BIC ;OGASAWARA ;AS ;I +JD1/? ;JD1 ;OGASAWARA, /MINAMI TORISHIMA ;I +JA ;JA-JS,7J-7N,8J-8N ;JAPAN ;AS ;I +JT ;JT-JV ;MONGOLIA ;AS ;H +JW ;JW ;SVALBARD IS. ;EU ;A +JX ;JX ;JA MAYEN IS. ;EU ;Z +JY ;JY ;JORDAN ;AS ;B +J2 ;J2 ;DJIBOUTI ;AF ;C +J3 ;J3 ;GRENADA ;NA ;Q +J5 ;J5 ;GUINEA-BISSAU ;AF ;Z +J6 ;J6 ;ST LUCIA ;NA ;Q +J7 ;J7 ;DOMINICA ;NA ;Q +J8 ;J8 ;ST VINCENT & DEPENDENCIES ;NA ;Q +KC4 ;8J1R?\,R1A,FB8Y,CE9A,ZL5,Y88,Y90ANT,ZS8BBB,ZS8AAA,KC4AAC,KC4USV,Y73SOP,KC4AAA,KC4USB,KC4USX,3G9A,3Y9WT,8J1RY,AT0A,IA0PS,OR4,XS7ANT,Y83ANT,ZL0AIC,ZS7ANT,VK0DS,KC4AAE ;ANTARCTICA ;AN +KC6 ;T8,KC6??\ ;(WESTERN CAROLINE IS.) BELAU ;OC ;I +KG4 ;KG4??\ ;GUANTANAMO BAY ;NA ;R +KH0 ;AH0,KH0,NH0,WH0 ;MARIANA IS. ;OC ;K +KH1 ;AH1,KH1,NH1,WH1 ;BAKER & HOWLAND IS. ;OC ;X +KH2 ;AH2,KH2,NH2,WH2 ;GUAM ;OC ;K +KH3 ;AH3,KH3,NH3,WH3 ;JOHNSTON IS. ;OC ;X +KH4 ;AH4,KH4,NH4,WH4 ;MIDWAY IS. ;OC ;M +KH5K ;AH5K,KH5K,NH5K,WH5K ;KINGMAN REEF ;OC ;W +KH5 ;AH5,KH5,NH5,WH5 ;PALMYRA & JARVIS ;OC ;W +KH7K ;AH7K,KH7K,NH7K,WH7K ;KURE IS. ;OC ;M +KH6 ;AH6-AH7,KH6-KH7,NH6-NH7,WH6-WH7 ;HAWAIIAN IS. ;OC ;W +KH8 ;AH8,KH8,NH8,WH8 ;AMERICAN SAMOA ;OC ;W +KH9 ;AH9,KH9,NH9,WH9 ;WAKE IS. ;OC ;L +KL7 ;AL,KL0-KL8,NL,WL ;ALASKA ;NA ;W +KP1 ;KP1,NP1,WP1 ;NAVASSA IS. ;NA ;Q +KP2 ;KP2,NP2,WP2 ;AM.VIRGIN IS. ;NA ;Q +KP4 ;KP3-KP4,NP3-NP4,WP3-WP4 ;PUERTO RICO ;NA ;Q +KP5 ;KP5,NP5,WP5 ;DESECHEO IS. ;NA ;Q +W ;AA6-AK6,K6,N6,W6,K?6,N?6,W?6 ;U.S.A. ;NA ;U +W ;AA7-AK7,K7,N7,W7,K?7,N?7,W?7 ;U.S.A. ;NA ;T +W ;AA0-AK0,K0,N0,W0,K?0,N?0,W?0,AA5-AK5,K5,N5,W5,K?5,N?5,W?5,AA9-AK9,K9,N9,W9,K?9,N?9,W?9 ;U.S.A. ;NA ;S +W ;AA-AL,K,N,W,4U1WB ;U.S.A. ;NA ;R +LA ;LA-LN ;NORWAY ;EU ;A +LU ;LO-LW,AY-AZ,L2-L9 ;ARGENTINA ;SA ;P +LX ;LX ;LUXEMBOURG ;EU ;A +LY ;LY ;LITHUANIA ;EU ;C +LZ ;LZ ;BULGARIA ;EU ;B +OA ;OA-OC,4T ;PERU ;SA ;R +OD ;OD ;LEBANON ;AS ;B +OE ;OE ;AUSTRIA ;EU ;A +OH0 ;OH0,OF0 ;ALAND IS. ;EU ;B +OJ0 ;OJ0 ;MARKET REEF ;EU ;B +OH ;OF-OJ ;FINLAND ;EU ;B +OK ;OK-OL ;CZECH REPUBLIC ;EU ;A +OM ;OM ;SLOVAK REPUBLIC ;EU ;A +ON ;ON-OT ;BELGIUM ;EU ;A +OX ;OX ;GREENLAND ;NA ;Q +OY ;OY ;FAROES ;EU ;Z +OZ ;OU-OZ,XP,5P-5Q ;DENMARK ;EU ;A +PJ8 ;PJ5-PJ8,PJ0J,PJ1F ;SINT MAARTEN ;NA ;Q +PJ9 ;PJ ;NETHERLANDS ANTILLES ;SA ;Q +PA ;PA-PI ;NETHERLANDS ;EU ;A +PY0/S ;PP0S-PY0S,ZV0S-ZZ0S,PY0DX,PT0MI,PS0WH-PT0WH,PY0RO,PW0PP,PP0ZS-PY0ZS ;ST PETER ;SA ;P +PY0/T ;PP0T-PY0T,ZV0T-ZZ0T ;TRINDADE ;SA ;P +PY0 ;PP0-PY0,ZV0-ZZ0 ;FERNANDO DE NORONHA ;SA ;P +PY ;PP-PY,ZV-ZZ ;BRAZIL ;SA ;P +PZ ;PZ ;SURINAM ;SA ;Q +P2 ;P2 ;PAPUA NEW GUINEA ;OC ;K +P4 ;P4 ;ARUBA ;SA ;Q +P5 ;P5-P9,HM ;NORTH KOREA (DPRK) ;AS ;I +R1/MVI ;4J1FS,R1M,*/MVI,MVI/* ;MALYJ VYSOTSKIJ IS. (ex 4J1) ;EU ;C +R1/FJL ;R1F,*/FJL,FJL/* ;FRANZ JOSEPH LAND (ex UA1/4K2) ;EU ;C +SM ;SA-SM,7S-8S ;SWEDEN ;EU ;A +SP ;SN-SR,HF,3Z ;POLAND ;EU ;A +!ST0 ;ST0,6T0-6U0 ;SOUTHEN SUDAN ;AF ;B +ST ;ST,6T-6U ;SUDAN ;AF ;B +SU ;SU,6A-6B ;EGYPT ;AF ;B +SV/A ;SY1MA,SV*/A,*/SV/A ;MT ATHOS ;EU ;B +SV5 ;SV5-SZ5,J45 ;DODECANESE IS. ;EU ;B +SV9 ;SV9-SZ9,J49 ;CRETE ;EU ;B +SV ;SV-SZ,J4 ;GREECE ;EU ;B +S2 ;S2-S3 ;BANGLADESH ;AS ;F +S5 ;S5 ;SLOVENIA (ex YU3) ;EU ;A +S7 ;S7 ;SEYCHELLES ;AF ;C +S9 ;S9 ;SAO TOME & PRINCIPE ;AF ;B +S0 ;S0 ;WESTERN SAHARA ;AF ;Z +TA ;TA1-TC1,YM1 ;TURKEY (EU) ;EU ;C +TA ;TA2-TA9,TB2-TB9,TC2-TC9,YM2-YM9;TURKEY (AS) ;AS ;C +TF ;TF ;ICELAND ;EU ;Z +TG ;TG,TD ;GUATEMALA ;NA ;S +TI9 ;TI9,TE9 ;COCOS IS. ;NA ;S +TI ;TI,TE ;COSTA RICA ;NA ;S +TJ ;TJ ;CAMEROON ;AF ;A +TK ;TK ;CORSICA ;EU ;A +TL ;TL ;CENTRAL AFRICAN REP ;AF ;A +TN ;TN ;CONGO ;AF ;A +TR ;TR ;GABON ;AF ;A +TT ;TT ;CHAD ;AF ;A +TU ;TU ;IVORY COAST ;AF ;Z +TY ;TY ;BENIN ;AF ;Z +TX0 ;TX0 ;CHESTERFIELD IS. ;OC ;L +TZ ;TZ ;MALI ;AF ;Z +T2 ;T2 ;TUVALU ;OC ;M +T30 ;T30 ;WEST KIRIBATI(GILBERT IS.) ;OC ;X +T31 ;T31 ;CENTRAL KIRIBATI(BRITISH PHOENIX IS.) ;OC ;X +T32 ;T32 ;EAST KIRIBATI(LINE IS.) ;OC ;W +T33 ;T33 ;BANABA IS(OCEAN IS.) ;OC ;M +T5 ;T5,6O ;SOMALIA ;AF ;C +T7 ;T7 ;SAN MARINO ;EU ;A +T9 ;T9 ;BOSNIA-HERZEGOVINA (ex YU4,4N4) ;EU ;A +UJ ;UJ-UM ;UZBEKISTAN (ex UI) ;AS ;E +UN ;UN-UQ ;KAZAKHSTAN (ex UL) ;AS ;E +UR ;UR-UZ,EM-EO ;UKRAINE (ex UB) ;EU ;B +UA2 ;U?2,R?2 ;KALININGRAD ;EU ;C +UA/EU ;U?1-U?6,R?1-R?6,U1-U6,R1-R6 ;EUROPEAN RUSSIA ;EU ;C +UA/AS ;U?9,R?9,U9,R9 ;ASIATIC RUSSIA ;AS ;E +UA/AS ;U?8,U?0,R?8,R?0,U8,U0,R8,R0 ;ASIATIC RUSSIA ;AS ;I +VE ;VA7-VG7,VX7,CF7-CK7,XJ7-XO7,VY1 ;CANADA ;NA ;U +VE ;VA6-VG6,VX6,CF6-CK6,XJ6-XO6,VA5-VG5,VX5,CF5-CK5,XJ5-XO5 ;CANADA ;NA ;T +VE ;VA4-VG4,VX4,CF4-CK4,XJ4-XO4 ;CANADA ;NA ;S +VE ;VA3-VG3,VX3,CF3-CK3,XJ3-XO3,VA2-VG2,VX2,CF2-CK2,XJ2-XO2 ;CANADA ;NA ;R +VE ;VA-VG,VO,VX-VY,CF-CK,CY-CZ,XJ-XO ;CANADA ;NA ;Q +VK9L ;VK9L,AX9L ;LORD HOWE IS. ;OC ;L +VK9M ;VK9JW,VK9ZR,VK9MR,VK9ZM ;MELLISH REEF ;OC ;K +VK9N ;VK9N,AX9N ;NORFOLK IS. ;OC ;L +VK9W ;VK9Z,AX9Z,VK9TR ;WILLIS IS. ;OC ;K +VK9X ;VK9X,AX9X ;CHRISTMAS IS. ;OC ;H +VK9C ;VK9Y,AX9Y,VK9WB,VK9EW ;COCOS-KEELING IS. ;OC ;H +VK9? ;VK9 ;COCOS-KEELING IS., /LORD HOWE IS., /MELLISH IS., /NORFOLK IS., /WILLIS IS., /CHRISTMAS IS. ;OC ;K +VK0/M ;VK0AE,VK0GC,VK0WH ;MACQUARIE ;OC ;K +VK0/H ;VK0HM,VK0HI,VK0CW,VK0DA,VK0IR ;HEARD IS. ;AF ;E +VK0/? ;VK0 ;HEARD IS., /MACQUARIE IS. +VK ;VH-VN,VZ,AX ;AUSTRALIA ;OC ;K +VP2E ;VP2E,VP25E ;ANGUILLA ;NA ;Q +VP2M ;VP2M ;MONTSERRAT ;NA ;Q +VP2V ;VP2V ;BRITISH VIRGIN IS. ;NA ;Q +VP5 ;VP5 ;TURKS & CAICOS IS. ;NA ;R +VP8/G ;VP8BUB,VP8CDJ,VP8SGP ;SOUTH GEORGIA ;SA ;P +VP8/O ;LU1Z,VP8BXK ;SOUTH ORKNEY ;SA ;P +VP8/S ;LU2Z,4K1F,CX0XY,HF0POL,LU5ZI,ZX0ECF,VP8CQS,VP8CQR,LZ0A ;SOUTH SHETLAND ;SA ;P +VP8/SW ;VP8SSI ;SOUTH SANDWICH IS. ;SA ;P +VP8 ;VP8CSA ;FALKLAND IS. ;SA ;Q +VP8/? ;VP8,LU?Z ;FALKLAND IS., /SOUTH GEORGIA IS., /SOUTH ORKNEY IS., /SOUTH SANDWICH IS., /SOUTH SHETLAND IS. ;SA ;P +VP9 ;VP9 ;BERMUDA IS. ;NA +VQ9 ;VQ9 ;CHAGOS IS. ;AF ;E +VR6 ;VR6,VP6 ;PITCAIRN IS. ;OC ;U +VR2 ;VS6,VS96,VS97,VR97,VR98,VR2 ;HONG KONG ;AS ;H +VU/A ;VU2JPS ;ANDAMAN & NICOBAR IS. ;AS ;e +VU/L ; ;LACCADIVE IS. ;AS ;e +VU ; ;INDIA ;AS ;e +VU/? ;VT-VW,AT-AW,8T-8Y ;INDIA, /ANDAMAN & NICOBAR IS., /LACCADIVE IS. ;AS ;e +V2 ;V2 ;ANTIGUA & BARBUDA ;NA ;Q +V3 ;V3 ;BELIZE ;NA ;S +V4 ;V4 ;ST KITTS & NEVIS ;NA ;Q +V5 ;V5 ;NAMIBIA ;AF ;B +V6 ;V6 ;MICRONESIA(E CAROLINE IS.) ;OC ;L +V7 ;V7 ;MARSHALL IS. ;OC ;M +V8 ;V8 ;BRUNEI ;OC ;H +XF4 ;XA4-XI4,4A4-4C4,6D4-6J4 ;REVILLA GIGEDO ;NA ;T +XE ;XA-XI,4A-4C,6D-6J ;MEXICO ;NA ;S +XT ;XT ;BURKINA-FASO ;AF ;Z +XU ;XU ;CAMBODIA ;AS ;G +XV ;XV,3W ;VIETNAM ;AS ;G +XW ;XW ;LAOS ;AS ;G +XX9 ;XX9 ;MACAO ;AS ;H +XZ ;XY-XZ,1Z ;MYANMAR ;AS ;f +YA ;YA,T6 ;AFGHANISTAN ;AS ;d +YB ;YB-YH,JZ,PK-PO,7A-7I,8A-8I ;INDONESIA ;OC ;H +YI ;YI ;IRAQ ;AS ;C +YJ ;YJ ;VANUATU ;OC ;L +YK ;YK,6C ;SYRIA ;AS ;B +YL ;YL,UQ ;LATVIA ;EU ;C +YN ;YN,HT,H6-H7 ;NICARAGUA ;NA ;S +YO ;YO-YR ;ROMANIA ;EU ;B +YS ;YS,HU ;EL SALVADOR ;NA ;S +YU ;YT,YU,YZ,4N-4O ;YUGOSLAVIA ;EU ;A +YV0 ;YV0-YY0,4M0 ;AVES IS. ;NA ;Q +YV ;YV-YY,4M ;VENEZUELA ;SA ;Q +ZA ;ZA ;ALBANIA ;EU ;A +ZB ;ZB ;GIBRALTAR ;EU ;A +ZC ;ZC ;UK SOVEREIGN BASES ON CYPRUS ;AS ;B +ZD7 ;ZD7 ;ST HELENA ;AF ;Z +ZD8 ;ZD8 ;ASCENSION IS. ;AF ;Z +ZD9 ;ZD9 ;TRISTAN DE CUNHA & GOUGH IS. ;AF ;Z +ZF ;ZF ;CAYMAN IS. ;NA ;R +ZK1/N ;ZK1CQ,ZK1RS,ZK1BY,ZK1WL,ZK1XP,ZK1XY ;NORTH COOK IS. ;OC ;W +ZK1/S ; ;SOUTH COOK IS ;OC ;W +ZK1/? ;ZK1 ;NORTH COOK IS., /SOUTH COOK IS. ;OC ;W +ZK2 ;ZK2 ;NIUE ;OC ;X +ZK3 ;ZK3 ;TOKELAU IS. ;OC ;X +ZL7 ;ZL7-ZM7 ;CHATHAM IS. ;OC ;M +ZL8 ;ZL8-ZM8 ;KERMADEC IS. ;OC ;M +ZL9 ;ZL9-ZM9 ;AUKLAND & CAMPBELL IS. ;OC ;M +ZL ;ZL-ZM ;NEW ZEALAND ;OC ;M +ZP ;ZP ;PARAGUAY ;SA ;Q +ZS8 ;ZS8MI,ZT8M-ZU8M,ZR8M,ZS8IR ;PRINCE EDWARD & MARION IS. ;AF ;B +!ZS9 ;ZS9 ;WALVIS BAY ;AF +ZS ;ZR-ZU ;REP OF SOUTH AFRICA ;AF ;B +Z2 ;Z2 ;ZIMBABWE ;AF ;B +Z3 ;Z3 ;MACEDONIA (ex YU5,4N5) ;EU ;A +1A0 ;1A0 ;SOVEREIGN MILLITARY ORDER OF MALTA ;EU ;A +1S ;1S,9M0,9M6OO ;SPRATLY IS. ;AS ;H +3A ;3A ;MONACO ;EU ;A +3B6 ;3B6-3B7 ;AGALEGA & ST BRANDON IS. ;AF ;C +3B8 ;3B8 ;MAURITIUS IS. ;AF ;C +3B9 ;3B9 ;RODRIGUEZ IS. ;AF ;C +3C0 ;3C0 ;ANNOBON IS. ;AF ;A +3C ;3C ;EQUATORIAL GUINEA ;AF ;A +3D2/C ;3D2CR,3D2WV,3D2HL,3D2VT,3D2AM,3D2CU,3D2CT,3D2*/C ;CONWAY REEF ;OC ;M +3D2/R ;3D2XX,3D2RJ,3D2XV,3D2XR,3D2AP,3D2RO,3D2OQ,3D2RW,3D2*/R ;ROTUMA IS ;OC ;M +3D2 ;3D2 ;FIJI IS. ;OC ;M +3DA ;3DA ;SWAZILAND ;AF ;B +3V ;3V,TS ;TUNISIA ;AF ;A +3X ;3X ;GUINEA ;AF ;Z +3Y ;3Y1VC,3Y5X ;BOUVET ;AF ;Z +3Y/P ;3Y1EE,3Y2GV ;PETER 1 IS. ;AN ;S +3Y/? ;3Y ;BOUVET, /PETER 1 IS. ;AF,AN +4J ;4J-4K ;AZERBAIJAN (ex UD) ;AS ;F +4L ;4L ;GEORGIA (ex UF) ;AS ;F +4S ;4P-4S ;SRI LANKA ;AS ;e +4U1/U ;4U1U,4U43-4U44,4U45UN ;UN HEADQUATERS NEW YORK ;NA ;R +4U1/I ;4U?ITU ;ITU GENEVA ;EU ;A +4U1/? ;4U ;UN HEADQUATERS NEW YORK, /ITU GENEVA, etc +!4W ;4W ;YEMEN :AS +4W ;4W ;EAST TIMOR ;OC ;H +4X ;4X,4Z ;ISRAEL ;AS ;B +5A ;5A ;LIBYA ;AF ;B +5B ;5B,C4,H2,P3 ;CYPRUS ;AS ;B +5H ;5H-5I ;TANZANIA ;AF ;C +5N ;5N-5O ;NIGERIA ;AF ;A +5R ;5R-5S,6X ;MADAGASCAR ;AF ;C +5T ;5T ;MAURITANIA ;AF ;Z +5U ;5U ;NIGER ;AF ;A +5V ;5V ;TOGO ;AF ;Z +5W ;5W ;WESTERN SAMOA ;OC ;X +5X ;5X ;UGANDA ;AF ;C +5Y ;5Y-5Z ;KENYA ;AF ;C +6W ;6V-6W ;SENEGAL ;AF ;Z +6Y ;6Y ;JAMAICA ;NA ;R +7O ;7O ;REP OF YEMEN ;AS ;C +7P ;7P ;LESOTHO ;AF ;B +7Q ;7Q ;MALAWI ;AF ;B +7X ;7T-7Y ;ALGERIA ;AF ;Z +8P ;8P ;BARBADOS ;NA ;Q +8Q ;8Q ;MALDIVES ;AS,AF ;E +8R ;8R ;GUYANA ;SA ;P +9A ;9A ;CROATIA (ex YU2) ;EU ;A +9G ;9G ;GHANA ;AF ;Z +9H ;9H ;MALTA ;EU ;A +9J ;9I-9J ;ZAMBIA ;AF ;B +9K ;9K ;KUWAIT ;AS ;C +9L ;9L ;SIERRA LEONE ;AF ;Z +9M2 ;9M2,9M4,9W2,9W4 ;WEST MALAYSIA ;AS ;H +9M6 ;9M6,9M8,9W6,9W8 ;EAST MALAYSIA ;OC ;H +9N ;9N ;NEPAL ;AS ;e +9Q ;9O-9T ;ZAIRE ;AF ;B +9U ;9U ;BURUNDI ;AF ;B +9V ;9V,S6 ;SINGAPORE ;AS ;H +9X ;9X ;RWANDA ;AF ;B +9Y ;9Y-9Z ;TRINIDAD & TOBAGO ;SA ;Q +$END +!---------------------------------------------------------------------------- +!ファイルの形式 +! カントリ名 ; カントリ識別子 ; QTH ; 大陸名 ; タイムゾーン +! +!● 行の先頭のはコメントコード,<$>は終了コード +!● カントリ名は8文字以内。 +!● カントリ識別子は<,>で区切って複数個記述可。 +!● QTHは任意の文字列 +!● 大陸名は NA, SA, EU, OC, AF, AS, AN +!● タイムゾーンはA〜Z(Jを除く)で記述する。小文字は+30分 +!● コードは任意の位置にあっても良い +!● 1行255文字以内。 +!● 定義する行(コメント行を除く)は最大512行まで +!● このファイルをネット等で流通させる場合は、最後の変更履歴に追加記載する +! ことをお勧めします。 +! +!カントリ識別子 +! 1.プリフィックス(コールサイン)の羅列 +! 9M2,9M4,9W2,9W4 +! JD1YAA,JD1BIY +! ※ コールサインが短い場合は終端記号(\)を付加したほうが良い +! BV9P → BV9PAも含まれる +! BV9P\ → BV9Pのみ +! +! 2.範囲の指定 +! DA-DR,Y2-Y9 +! EA6-EH6,AM6-AO6 +! 範囲は同じ位置の1ヶ所のみを昇順で記述 +! JA-JS EA6-EH6 OK +! JS-JA(降順) EA6-EH7(2ヶ所) NG +! +! 3.ワイルドカード(範囲の複合可) +! U?1-U?6,R?1-R?6 +! SV*/A,*/SV/A +! =すべての文字, <*>=すべての文字列 +! +! 4.最初に定義したほうが優先される +! JD1/M ;JD1YAA ; MINAMI TORISHIMA ;OC +! JA ;JA-JS ; JAPAN ;AS +! 上記の例ではJD1YAAはJA-JSにも含まれるが、その前にJD1/Mの定義 +! があるのでそちらが優先される +! +!<<<変更履歴>>> +! Jan 15, 1996 - BV9P追加 JE3HHT +! Feb 15, 1996 - BS7H追加 JE3HHT +! Aug. 4, 1998 - VR98追加 JQ3UDL +! Aug. 4, 1998 - TA(AS)変更 JQ3UDL +! Nov. 15, 1998 - BQ9P追加 JQ3UDL +! Feb. 7, 1999 - FO0/M追加 JQ3UDL +! Feb. 7, 1999 - FO0/A追加 JQ3UDL +! Feb. 7, 1999 - H40追加 JQ3UDL +! Jul. 10, 1999 - E4追加  JQ3UDL +! Nov. 15. 1999 - 9M6OO追加 JQ3UDL +! Nov. 20. 1999 - B1-B9追加 JQ3UDL +! Jan. 06. 2000 - ST0削除 JE3HHT +! Feb. 15. 2000 - VR6にVP6追加 JE3HHT +! Mar. 03. 2000 - FO0XにFO0AAA追加 JE3HHT +! Mar. 20. 2000 - FO0X=>FO/C,FO0/M=>FO/M,FO0/A=>FO/Aに変更 JQ3UDL +! Mar. 20. 2000 - 4W追加 JQ3UDL +! Mar. 21. 2000 - TX0追加 JE3HHT +! Jan. 07. 2001 - P2の範囲変更 JQ3UDL +! Jan. 08. 2001 - KG4範囲変更 JQ3UDL +! Jan. 08. 2001 - LZ0A追加 JQ3UDL + \ No newline at end of file diff --git a/BitMask.cpp b/BitMask.cpp new file mode 100644 index 0000000..bcc8afb --- /dev/null +++ b/BitMask.cpp @@ -0,0 +1,968 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "Clipbrd.hpp" +#include "ComLib.h" +#include "PicRect.h" +#include "PicFilte.h" +#include "BitMask.h" +#include "Main.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TBitMaskDlg *BitMaskDlg; +//--------------------------------------------------------------------- +void __fastcall MakeBitmapPtn(Graphics::TBitmap *pBmp, int hw, int sw, TColor col1, TColor col2) +{ + CWaitCursor wait; + AdjustBitmapFormat(pBmp); + hw /= 3; + TCanvas *pCanvas = pBmp->Canvas; + int x, y, f, v; + for( y = 0; y < pBmp->Height; y++ ){ + for( x = 0; x < pBmp->Width; x++ ){ + f = x / hw; + switch(sw){ + case 0: + if( (y/2) & 1 ){ + v = (x/2) & 1; + } + else { + v = !((x/2) & 1); + } + break; + case 1: + if( (y/4) & 1 ){ + v = (x/2) & 1; + } + else { + v = !((x/2) & 1); + } + break; + case 2: + if( (y/2) & 1 ){ + v = (x/4) & 1; + } + else { + v = !((x/4) & 1); + } + break; + case 3: + if( (y/4) & 1 ){ + v = (x/4) & 1; + } + else { + v = !((x/4) & 1); + } + break; + case 4: + switch(f){ + case 0: + v = (y/2) & 1; + break; + case 1: + v = (y/4) & 1; + break; + default: + v = (y/8) & 1; + break; + } + break; + case 5: + switch(f){ + case 0: + v = (x/2) & 1; + break; + case 1: + v = (x/4) & 1; + break; + default: + v = (x/8) & 1; + break; + } + break; + case 6: + switch(f){ + case 0: + v = ((y+x)/2) & 1; + break; + case 1: + v = ((y+x)/4) & 1; + break; + default: + v = ((y+x)/8) & 1; + break; + } + break; + case 7: + switch(f){ + case 0: + v = ((x-y+1024)/2) & 1; + break; + case 1: + v = ((x-y+1024)/4) & 1; + break; + default: + v = ((x-y+1024)/8) & 1; + break; + } + break; + } + pCanvas->Pixels[x][y] = v ? col1 : col2; + } + } +#if 0 + + // pBmp->PixelFormat = pf24bit; + TCanvas *pCanvas = pBmp->Canvas; + int x, y; + for( y = 0; y < pBmp->Height; y++ ){ + for( x = 0; x < pBmp->Width; x++ ){ + switch(sw){ + case 0: + if( (y/2) & 1 ){ + pCanvas->Pixels[x][y] = (x/2) & 1 ? col1 : col2; + } + else { + pCanvas->Pixels[x][y] = (x/2) & 1 ? col2 : col1; + } + break; + case 1: + if( (y/4) & 1 ){ + pCanvas->Pixels[x][y] = (x/2) & 1 ? col1 : col2; + } + else { + pCanvas->Pixels[x][y] = (x/2) & 1 ? col2 : col1; + } + break; + case 2: + if( (y/2) & 1 ){ + pCanvas->Pixels[x][y] = (x/4) & 1 ? col1 : col2; + } + else { + pCanvas->Pixels[x][y] = (x/4) & 1 ? col2 : col1; + } + break; + case 3: + if( (y/4) & 1 ){ + pCanvas->Pixels[x][y] = (x/4) & 1 ? col1 : col2; + } + else { + pCanvas->Pixels[x][y] = (x/4) & 1 ? col2 : col1; + } + break; + case 4: + pCanvas->Pixels[x][y] = (y/4) & 1 ? col1 : col2; + break; + case 5: + pCanvas->Pixels[x][y] = (x/2) & 1 ? col1 : col2; + break; + case 6: + pCanvas->Pixels[x][y] = ((y+x)/4) & 1 ? col1 : col2; + break; + case 7: + pCanvas->Pixels[x][y] = ((x-y+1024)/2) & 1 ? col1 : col2; + break; + } + } + } +#endif +} +//--------------------------------------------------------------------- +__fastcall TBitMaskDlg::TBitMaskDlg(TComponent* AOwner) + : TForm(AOwner) +{ + m_DisEvent = TRUE; + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Bitmap mask"; + CancelBtn->Caption = "Cancel"; + L1->Caption = "Size"; + GB2->Caption = "Make and Edit mask"; + PaintBtn->Caption = "Edit"; + + SBPaste->Hint = "Paste mask from the clipboard"; + SBCopy->Hint = "Copy mask to the clipboard"; + SBColAdj->Hint = "Adjusts mask image"; + GB1->Caption = "User definition mask"; + L3->Caption = "Drag&&Drop for registration"; + } + SBPaste->Glyph->Assign(Mmsstv->SBPaste->Glyph); + SBColAdj->Glyph->Assign(Mmsstv->SBHistFil->Glyph); + SBCopy->Glyph->Assign(Mmsstv->SBCopy->Glyph); + pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + pBitmap->Width = PBox->Width; + pBitmap->Height = PBox->Height; + m_pCustomBmp = NULL; + m_pUserBmp = NULL; + m_pListBmp = NULL; + m_X = m_Y = 0; + m_Size = 0; + char name[256]; + sprintf(name, "%sTextArt.bmp", BgnDir); + m_ListName = name; + UDL->Position = (SHORT)sys.m_MaskUserPage; + PC1->Color = sys.m_MaskCol1; + PC2->Color = sys.m_MaskCol2; + m_hClipNext = ::SetClipboardViewer(Handle); + ShowHint = WinNT; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::FormDestroy(TObject *Sender) +{ + sys.m_MaskUserPage = UDL->Position; + sys.m_MaskCol1 = PC1->Color; + sys.m_MaskCol2 = PC2->Color; + ::ChangeClipboardChain(Handle, m_hClipNext); + g_ExecPB.Cancel(); + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } + if( m_pCustomBmp != NULL ){ + delete m_pCustomBmp; + m_pCustomBmp = NULL; + } + if( m_pListBmp != NULL ){ + if( m_pListBmp->Modified ){ + m_pListBmp->SaveToFile(m_ListName); + } + delete m_pListBmp; + m_pListBmp = NULL; + } + if( m_pUserBmp != NULL ){ + delete m_pUserBmp; + m_pUserBmp = NULL; + } +} +//--------------------------------------------------------------------------- +int __fastcall TBitMaskDlg::Execute(Graphics::TBitmap *pBmp, CDrawText *pText) +{ + m_Text.Start(PBoxText->Canvas, 0, 0); // キャンバスのセット + m_Text.Copy(pText); + m_Text.UpdateText(); + pBitmap->Width = pBmp->Width; + pBitmap->Height = pBmp->Height; + m_XW = pBitmap->Width; + m_YW = pBitmap->Height; + UpdateCBSize(m_XW, m_YW); + FillBitmap(pBitmap, clGray); + pBitmap->Canvas->Draw(0, 0, pBmp); + UpdateSB(); + m_DisEvent = FALSE; + if( ShowModal() == IDOK ){ + pBmp->Width = m_XW < pBitmap->Width ? m_XW : pBitmap->Width; + pBmp->Height = m_YW < pBitmap->Height ? m_YW : pBitmap->Height; + pBmp->Canvas->Draw(-m_X, -m_Y, pBitmap); + return TRUE; + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxPaint(TObject *Sender) +{ +#if 0 + TRect rc; + rc.Left = 0; rc.Top = 0; + rc.Right = PBox->Width; rc.Bottom = PBox->Height; + TCanvas *pCanvas = PBox->Canvas; + pCanvas->Brush->Color = clBtnFace; + pCanvas->FillRect(rc); +#endif + PBox->Canvas->Draw(-SBH->Position, -SBV->Position, pBitmap); + DrawCursor(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UpdateSB(void) +{ + SBH->Position = 0; SBV->Position = 0; + int hmax, vmax; + if( pBitmap ){ + int xw = pBitmap->Width; + int yw = pBitmap->Height; + hmax = xw - PBox->ClientWidth; + vmax = yw - PBox->ClientHeight; + } + else { + hmax = vmax = -1; + } + SBH->Max = (hmax > 0) ? hmax : 0; + SBV->Max = (vmax > 0) ? vmax : 0; + SBH->Enabled = (hmax > 0) ? TRUE : FALSE; + SBV->Enabled = (vmax > 0) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::LoadBtnClick(TObject *Sender) +{ + TOpenDialog *pDialog = Mmsstv->OpenDialog; + pDialog->Options >> ofCreatePrompt; + pDialog->Options << ofFileMustExist; + if( MsgEng ){ + pDialog->Title = "Load picture from file"; + } + else { + pDialog->Title = "画像のロード"; + } + pDialog->Filter = GetPicFilter(); + pDialog->FileName = ""; + pDialog->DefaultExt = "jpg"; + pDialog->InitialDir = BitmapDir; + SetDisPaint(); + NormalWindow(this); + if( Mmsstv->OpenDialogExecute(TRUE) == TRUE ){ + SetDirName(BitmapDir, AnsiString(pDialog->FileName).c_str()); + if( LoadImage(pBitmap, AnsiString(pDialog->FileName).c_str()) == TRUE ){ + UpdateSrc(TRUE); + UpdateUser(); + } + } + ResDisPaint(); + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UpdateCBSize(int xw, int yw) +{ + m_DisEvent++; + int f = TRUE; + if( xw == yw ){ + switch(xw){ + case 8: + CBSize->ItemIndex = 0; + break; + case 16: + CBSize->ItemIndex = 1; + break; + case 24: + CBSize->ItemIndex = 2; + break; + case 32: + CBSize->ItemIndex = 3; + break; + default: + f = FALSE; + break; + } + } + else { + f = FALSE; + } + if( f ){ + if( CBSize->Items->Count > 4 ) CBSize->Items->Delete(4); + } + else { + char bf[256]; + sprintf(bf, "%ux%u", xw, yw); + if( CBSize->Items->Count > 4 ){ + CBSize->Items->Strings[4] = bf; + } + else { + CBSize->Items->Add(bf); + } + CBSize->ItemIndex = 4; + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::AdjustSize(void) +{ + m_X = m_Y = 0; + int xw = pBitmap->Width; + int yw = pBitmap->Height; + + if( (xw == yw) && (xw <= 32) ){ + switch(xw){ + case 8: + case 16: + case 24: + case 32: + m_XW = m_YW = xw; + break; + } + } + else if( (xw >= 32) && (yw >= 32) ){ + m_XW = m_YW = 32; + } + UpdateCBSize(m_XW, m_YW); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::DrawCursor(void) +{ + int xw = m_XW; + int yw = m_YW; + int xo = -SBH->Position; + int yo = -SBV->Position; + TCanvas *tp = PBox->Canvas; + tp->Pen->Width = 1; + tp->Pen->Style = psDot; + tp->MoveTo(xo+m_X, yo+m_Y); + int rop = ::SetROP2(tp->Handle, R2_NOT); + tp->LineTo(xo+m_X+xw, yo+m_Y); + tp->LineTo(xo+m_X+xw, yo+m_Y+yw); + tp->LineTo(xo+m_X, yo+m_Y+yw); + tp->LineTo(xo+m_X, yo+m_Y); + ::SetROP2(tp->Handle, rop); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UpdateText(void) +{ + CWaitCursor w; + + int xw = m_XW; + int yw = m_YW; + if( xw <= 0 ) xw = 1; + if( yw <= 0 ) yw = 1; + Graphics::TBitmap *pBmp = CreateBitmap(xw, yw, -1); + pBmp->Canvas->Draw(-m_X, -m_Y, pBitmap); + CopyBitmap(m_Text.pBrushBitmap, pBmp); + delete pBmp; + m_Text.UpdateText(); + PBoxTextPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::BtnClick(int n) +{ + pBitmap->Width = PBox->Width; + pBitmap->Height = PBox->Height; + MakeBitmapPtn(pBitmap, PBox->Width, n, PC1->Color, PC2->Color); + m_XW = m_YW = 8; + UpdateCBSize(m_XW, m_YW); + UpdateSrc(FALSE); + UpdateUser(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PCClick(TObject *Sender) +{ + TPanel *pPanel = (TPanel *)Sender; + TColorDialog *pDialog = Mmsstv->ColorDialog; + InitCustomColor(pDialog); + AddCustomColor(pDialog, PC1->Color); + AddCustomColor(pDialog, PC2->Color); + pDialog->Color = pPanel->Color; + SetDisPaint(); + if( pDialog->Execute() == TRUE ){ + pPanel->Color = pDialog->Color; + UpdateCustom(); + PBoxCSPaint(NULL); + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + X += SBH->Position; Y += SBV->Position; + m_X = X; m_Y = Y; + m_Size = 1; + } + else { + m_X = 0; m_Y = 0; + } + UpdateText(); + PBox->Invalidate(); + UpdateUser(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_Size ){ + X += SBH->Position; Y += SBV->Position; + if( m_Size == 1 ){ + if( (ABS(X-m_X)>4) || (ABS(Y-m_Y)>4) ){ + m_Size++; + } + } + if( m_Size == 2 ){ + DrawCursor(); + m_XW = ABS(X - m_X); + m_YW = ABS(Y - m_Y); + if( !m_XW ) m_XW = 1; + if( !m_YW ) m_YW = 1; + DrawCursor(); + UpdateCBSize(m_XW, m_YW); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_Size == 2 ){ + UpdateText(); + PBox->Invalidate(); + UpdateUser(); + } + m_Size = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PaintBtnClick(TObject *Sender) +{ + g_ExecPB.Exec(pBitmap, (HWND)Handle, CM_EDITEXIT, 0); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::OnEditExit(TMessage Message) +{ + if( Message.LParam ) return; + + if( g_ExecPB.LoadBitmap(pBitmap, TRUE) ){ + UpdateSrc(FALSE); + UpdateUser(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::OnDrawClipboard(TMessage Message) +{ + SBPaste->Enabled = Clipboard()->HasFormat(CF_BITMAP); + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_DRAWCLIPBOARD, Message.WParam, Message.LParam); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::OnChangeCbChain(TMessage Message) +{ + if( (HWND)Message.WParam == m_hClipNext ){ + m_hClipNext = (HWND)Message.LParam; + } + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_CHANGECBCHAIN, Message.WParam, Message.LParam); + Message.Result = 0; +} +//--------------------------------------------------------------------------- +static void __fastcall DrawBmpPBoxBtn(TCanvas *pCanvas, int x, int y, int w, BOOL sw) +{ + pCanvas->Pen->Style = psSolid; + pCanvas->Pen->Width = 1; + pCanvas->Pen->Color = sw ? clBlack : clWhite; + w++; + pCanvas->MoveTo(x+w, y); + pCanvas->LineTo(x, y); + pCanvas->LineTo(x, y+w); + pCanvas->LineTo(x+1, y+w); + pCanvas->Pen->Color = sw ? clWhite : clBlack; + pCanvas->LineTo(x+w, y+w); + pCanvas->LineTo(x+w, y); +} +#if 0 +//--------------------------------------------------------------------------- +static void __fastcall DrawBmpPBox(TCanvas *pCanvas, int x, int y, Graphics::TBitmap *pBmp) +{ + pCanvas->Draw(x+1, y+1, pBmp); + DrawBmpPBoxBtn(pCanvas, x, y, pBmp->Width, FALSE); +} +#endif +//--------------------------------------------------------------------------- +static void __fastcall DrawBmpPBox(TCanvas *pCanvas, int s, int w, int ws, int x, int y, Graphics::TBitmap *pBmp) +{ + TRect src, drc; + + src.Left = ((y*8)+x)*ws; + src.Right = src.Left + w; + src.Top = 0; src.Bottom = w; + drc.Left = 1 + x*s; + drc.Right = drc.Left + w; +// drc.Top = 1 + y*s; + drc.Top = 1; + drc.Bottom = drc.Top + w; + pCanvas->CopyRect(drc, pBmp->Canvas, src); + DrawBmpPBoxBtn(pCanvas, x*s, y*s, w, FALSE); +} +//--------------------------------------------------------------------------- +static int __fastcall GetIndex(int w, int m, int x, int y) +{ + if( ((x % w) < 1) || ((x % w) >= (w-1)) ) return -1; + if( ((y % w) < 1) || ((y % w) >= (w-1)) ) return -1; + x /= w; + y /= w; + int n = (y * 8) + x; + if( n >= m ) n = m-1; + return n; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UpdateCustom(void) +{ + if( !m_pCustomBmp ) m_pCustomBmp = CreateBitmap(16*8, 16, -1); + Graphics::TBitmap *pBmp = CreateBitmap(16, 16, -1); + int i; + for( i = 0; i < 8; i++ ){ + MakeBitmapPtn(pBmp, PBox->Width, i, PC1->Color, PC2->Color); + m_pCustomBmp->Canvas->Draw(i*16, 0, pBmp); + } + delete pBmp; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxCSPaint(TObject *Sender) +{ + if( !m_pCustomBmp ){ + UpdateCustom(); + if( !m_pCustomBmp ) return; + } + MultProc(); + int x; + for( x = 0; x < 8; x++ ){ + DrawBmpPBox(PBoxCS->Canvas, 18, 16, 16, x, 0, m_pCustomBmp); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TBitMaskDlg::PBoxCSMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + m_MIndex = GetIndex(18, 8, X, Y); + if( m_MIndex >= 0 ){ + DrawBmpPBoxBtn(PBoxCS->Canvas, 18*(m_MIndex%8), 0, 16, TRUE); + BtnClick(m_MIndex); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxCSMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button == mbLeft) && (m_MIndex >= 0) ){ + DrawBmpPBoxBtn(PBoxCS->Canvas, 18*(m_MIndex%8), 0, 16, FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::CBSizeChange(TObject *Sender) +{ + switch(CBSize->ItemIndex){ + case 0: + m_XW = m_YW = 8; + break; + case 1: + m_XW = m_YW = 16; + break; + case 2: + m_XW = m_YW = 24; + break; + case 3: + m_XW = m_YW = 32; + break; + } + UpdateText(); + PBox->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxTextPaint(TObject *Sender) +{ + if( !m_Text.pBitmap ) m_Text.UpdateText(); + PBoxText->Canvas->Draw(0, 0, m_Text.pBitmap); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::SBPasteClick(TObject *Sender) +{ + pBitmap->LoadFromClipboardFormat(CF_BITMAP, Clipboard()->GetAsHandle(CF_BITMAP), 0); + UpdateSrc(TRUE); + UpdateUser(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::SBCopyClick(TObject *Sender) +{ + Mmsstv->CopyBitmap(pBitmap); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::SBColAdjClick(TObject *Sender) +{ + TPicFilterDlg *pBox = new TPicFilterDlg(this); + if( pBox->Execute(pBitmap) == TRUE ){ + UpdateSrc(FALSE); + UpdateUser(); + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::SBClipClick(TObject *Sender) +{ + Graphics::TBitmap *pBmp = DupeBitmap(pBitmap, -1); + TPicRectDlg *pBox = new TPicRectDlg(this); + CopyBitmap(pBox->pBitmap, pBmp); + pBmp->Width = PBox->Width; + pBmp->Height = PBox->Height; + if( pBox->Execute(pBmp) == TRUE ){ + CopyBitmap(pBitmap, pBmp); + UpdateSrc(TRUE); + } + delete pBox; + delete pBmp; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UpdateSrc(BOOL fSize) +{ + if( fSize ) AdjustSize(); + UpdateSB(); + UpdateText(); + PBox->Invalidate(); + CBSize->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UpdateUser(void) +{ + if( !m_pUserBmp ){ + m_pUserBmp = CreateBitmap(32, 32, pf24bit); + } + Graphics::TBitmap *pSrc = m_Text.pBrushBitmap; + for( int y = 0; y < 32; y += pSrc->Height){ + for( int x = 0; x < 32; x += pSrc->Width ){ + m_pUserBmp->Canvas->Draw(x, y, pSrc); + } + } + PBoxUPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxUPaint(TObject *Sender) +{ + if( !m_pUserBmp ){ + UpdateUser(); + } + else { + DrawBmpPBox(PBoxU->Canvas, 30, 28, 32, 0, 0, m_pUserBmp); + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxUMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + DrawBmpPBoxBtn(PBoxU->Canvas, 0, 0, 28, TRUE); + if( !IsSameBitmap(m_pUserBmp, m_Text.pBrushBitmap, FALSE) ){ + CopyBitmap(pBitmap, m_pUserBmp); + UpdateSrc(TRUE); + } + ::Sleep(100); + DrawBmpPBoxBtn(PBoxU->Canvas, 0, 0, 28, FALSE); + PBoxU->BeginDrag(FALSE,0); + } +} +//--------------------------------------------------------------------------- +int __fastcall TBitMaskDlg::IsSameBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc, int fSize) +{ + int xw = pSrc->Width; + int yw = pSrc->Height; + if( xw > pDest->Width ) return FALSE; + if( yw > pDest->Height ) return FALSE; + if( fSize ){ + if( xw != pDest->Width ) return FALSE; + if( yw != pDest->Height ) return FALSE; + } + int x, y; + for( y = 0; y < yw; y++ ){ + for( x = 0; x < xw; x++ ){ + if( pSrc->Canvas->Pixels[x][y] != pDest->Canvas->Pixels[x][y] ) return FALSE; + } + } + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TBitMaskDlg::IsMList(int n) +{ + int yw = m_pListBmp->Height; + int x, y; + for( y = 0; y < yw; y++ ){ + LPBYTE p = (LPBYTE)m_pListBmp->ScanLine[y]; + p += (n * 32) * 3; + for( x = 0; x < 32; x++ ){ + if( *p++ ) return TRUE; + if( *p++ ) return TRUE; + if( *p++ ) return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxLPaint(TObject *Sender) +{ + if( !m_pListBmp ){ + if( IsFile(m_ListName.c_str()) ){ + m_pListBmp = new Graphics::TBitmap; + m_pListBmp->LoadFromFile(m_ListName); + } + else { + m_pListBmp = CreateBitmap(32*72, 32, pf24bit); + FillBitmap(m_pListBmp, clBlack); + } + m_pListBmp->Modified = FALSE; + } + int y = UDL->Position; + int x; + for( x = 0; x < 8; x++ ){ + DrawBmpPBox(PBoxL->Canvas, 30, 28, 32, x, y, m_pListBmp); + } + char bf[32]; + sprintf(bf, "%u/9", y + 1); + LP->Caption = bf; +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxLMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_MIndex = GetIndex(30, 8, X, Y); + if( m_MIndex >= 0 ){ + m_MIndex += (UDL->Position * 8); + if( (Button == mbLeft) && IsMList(m_MIndex) ){ + DrawBmpPBoxBtn(PBoxL->Canvas, (m_MIndex%8)*30, 0, 28, TRUE); + + Graphics::TBitmap *pBmp = CreateBitmap(32, 32, pf24bit); + pBmp->Canvas->Draw(-m_MIndex*32, 0, m_pListBmp); + if( !IsSameBitmap(pBmp, m_Text.pBrushBitmap, TRUE) ){ + CopyBitmap(pBitmap, pBmp); + UpdateSrc(TRUE); + } + delete pBmp; + + ::Sleep(100); + DrawBmpPBoxBtn(PBoxL->Canvas, (m_MIndex%8)*30, 0, 28, FALSE); + PBoxL->BeginDrag(FALSE,0); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxLDragOver(TObject *Sender, + TObject *Source, int X, int Y, TDragState State, bool &Accept) +{ + Accept = FALSE; + + int index = GetIndex(30, 8, X, Y); + if( index >= 0 ){ + index += (UDL->Position * 8); + if( Source == PBoxL ){ + if( index != m_MIndex ) Accept = TRUE; + } + else { + Accept = TRUE; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxLDragDrop(TObject *Sender, + TObject *Source, int X, int Y) +{ + int index = GetIndex(30, 8, X, Y); + if( index >= 0 ){ + index += (UDL->Position * 8); + if( Source == PBoxL ){ + Graphics::TBitmap *pBmp = CreateBitmap(32, 32, pf24bit); + Graphics::TBitmap *pBmp2 = CreateBitmap(32, 32, pf24bit); + pBmp2->Canvas->Draw(-index*32, 0, m_pListBmp); + pBmp->Canvas->Draw(-m_MIndex*32, 0, m_pListBmp); + m_pListBmp->Canvas->Draw(index*32, 0, pBmp); + m_pListBmp->Canvas->Draw(m_MIndex*32, 0, pBmp2); + delete pBmp2; + delete pBmp; + } + else { + m_pListBmp->Canvas->Draw(index*32, 0, m_pUserBmp); + } + PBoxUPaint(NULL); + PBoxLPaint(NULL); + m_pListBmp->Modified = TRUE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxUDragOver(TObject *Sender, + TObject *Source, int X, int Y, TDragState State, bool &Accept) +{ + Accept = ((Source == PBoxL) && (m_MIndex >= 0)); +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::PBoxUDragDrop(TObject *Sender, + TObject *Source, int X, int Y) +{ + if( m_MIndex >= 0 ){ + m_pUserBmp->Canvas->Draw(-m_MIndex*32, 0, m_pListBmp); + Graphics::TBitmap *pBmp = CreateBitmap(32, 32, pf24bit); + FillBitmap(pBmp, clBlack); + m_pListBmp->Canvas->Draw(m_MIndex*32, 0, pBmp); + delete pBmp; + PBoxUPaint(NULL); + PBoxLPaint(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TBitMaskDlg::UDLClick(TObject *Sender, TUDBtnType Button) +{ + PBoxLPaint(NULL); +} +//--------------------------------------------------------------------------- + +void __fastcall TBitMaskDlg::FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + TShiftState sf1, sf2; + sf1 << ssShift; + sf2 << ssShift; + sf1 *= Shift; + int sft = (sf1 == sf2); + + DrawCursor(); + int x = m_X; + int y = m_Y; + int xw = m_XW; + int yw = m_YW; + switch(Key){ + case VK_LEFT: + if( sft ){ + if( m_XW >= 2 ) m_XW--; + } + else { + if( m_X ) m_X--; + } + Key = 0; + break; + case VK_RIGHT: + if( sft ){ + m_XW++; + } + else { + m_X++; + } + Key = 0; + break; + case VK_UP: + if( sft ){ + if( m_YW >= 2 ) m_YW--; + } + else { + if( m_Y ) m_Y--; + } + Key = 0; + break; + case VK_DOWN: + if( sft ){ + m_YW++; + } + else { + m_Y++; + } + Key = 0; + break; + } + DrawCursor(); + if( (x != m_X) || (y != m_Y) || (xw != m_XW) || (yw != m_YW) ){ + UpdateCBSize(m_XW, m_YW); + UpdateText(); + UpdateUser(); + } +} +//--------------------------------------------------------------------------- + diff --git a/BitMask.dfm b/BitMask.dfm new file mode 100644 index 0000000000000000000000000000000000000000..ddd24f0074061b96731942e57a7e3576d7d9b32c GIT binary patch literal 3093 zcmai0Pi)&%7=N)7|4GuW32>N%wn<3kMDfxwIthVlhpt_d#?0<^00D0DmYTVKmhHCb z5OCqbm=FVrzXC2?kdSs^AP~}!kkHQT0OG(Aae`eqfn?raC)pD1P&Y3x@ArM*@ArK_ zzpM;gbIolpJL}EXX<*EODgds%VpLqyPupH{u^IHs!;i%lypYQO0NF*66jV$U_h9U# z2LV*It)%ID0qU!k7o|Q5>pB47mhq!;)A$`ff5FdhjcZ2L3Vax*tI+Rnr*c%Nu=RPr zmu|}gsbrx5#j4&7%rso_y0E%}!gRsf_TmJl>YTH>w&I>yb6&7km(My+yJfab4^_Lt zc|Yu-eHRYW3f*8~q`!5#+VFN@UBhWTk}YP(fRTM=e1lWFW-t_5NClMF;ej2)JsW`;DwGIqpb#o_)zkD&*n~+M zqXQKu74Pr`{u&2rqWzG4%@;GaKY&4E!+0(1Zc8tgNin>P8qi(a!*NVB&}{r5drXt3 z3RDwNVni+#6wdI21+^2>L+Xq;LYDxjuDP40C@gi>G1&~~ONt}63k*nlp5sVIg|3R! zSy!9zg0~x_dZmqeUT_vBcp()u*W02zN%9a~x4f_miJUCLeG2K0kT` zl$Ha(AF7%cu&%9i!ZzAXAXSmln=i#y8|^{HJl!HotUUd^8L1T#RV;)~I{A`oRCaNf zp&&55Sa!^FjKYVpVdfYeMF$xQ^#REhk&&V4V86IW^nsL&v`ar4br{)(P=| zg?*?_54}3Vjr@b)^>IOtR2y<*BHUFw6GIgyhr&9Xj?r#}>y}TO4HinJeR5Rj@J=3T zBX1C5G0av%LihZL#hd~C}2N}w)WS?bk zWuInI_Bwv98*dojU%71jy77#G{Q`G)_o7kVuf90g-r{qjOcXZ zatiYhGXiE(425h)2V)V8DTN)HQrJb~QuZb;HOlgs6$U#kV&F%N$>lL7AIq5(iYP@4 z5sks(HHQ`6s<0o7Y{voJ#nv>bXu>_Y)K?_SWsA(ux#TaTg=gC1QyR#cP+HD zh42(BmPtH}HO4V!h9ZcU2Pv_O$!s@i#wa55-13uj$j6B7RT&^N!I`xb?j#FNir?t{ zq@c)4gC(VO{N&*HNu|^{F=(7nN{fxbVgu(sZd^;L1V==zN6Pq)5qo`7D0|s#iY4Fa?7?_shb+gO zZk7hgjSh=I*;mW-dv0gL+Xv05#d3Orip+D8Z|7EecT%mXNzt9jNwuaV)#6Fz9?M@F zkJ5A&I7Paks3y2q3Qv*?12<-yHPOGU?dSNZa(?RG#;g?V5xhmlNtq^5V{r1-oRd6@ zdJT5~ao+c_7Z33Nc`#4cA9HW+8!zuQ-X+(lP1?KiW|Q$P>#X5Lt`Ft8%585TX_Zb) mF4!KurB-))t0?v_;X5>b`RCU&P&^-dk)Ds5hQaxi0q{SxxXGme literal 0 HcmV?d00001 diff --git a/BitMask.h b/BitMask.h new file mode 100644 index 0000000..5018491 --- /dev/null +++ b/BitMask.h @@ -0,0 +1,165 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef BitMaskH +#define BitMaskH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Draw.h" +#include +//---------------------------------------------------------------------------- +extern void __fastcall MakeBitmapPtn(Graphics::TBitmap *pBmp, int hw, int sw, TColor col1, TColor col2); +//---------------------------------------------------------------------------- +class TBitMaskDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TPanel *Panel; + TGroupBox *GB2; + TButton *LoadBtn; + TPaintBox *PBox; + TPanel *PC1; + TPanel *PC2; + TButton *PaintBtn; + TScrollBar *SBV; + TScrollBar *SBH; + TPaintBox *PBoxCS; + TComboBox *CBSize; + TLabel *L1; + TPaintBox *PBoxText; + TSpeedButton *SBPaste; + TSpeedButton *SBColAdj; + TSpeedButton *SBCopy; + TSpeedButton *SBClip; + TGroupBox *GB1; + TPaintBox *PBoxU; + TPaintBox *PBoxL; + TLabel *L2; + TUpDown *UDL; + TLabel *LP; + TLabel *L3; + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall LoadBtnClick(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PCClick(TObject *Sender); + void __fastcall PBoxMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PaintBtnClick(TObject *Sender); + void __fastcall FormDestroy(TObject *Sender); + + void __fastcall PBoxCSPaint(TObject *Sender); + void __fastcall PBoxCSMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxCSMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall CBSizeChange(TObject *Sender); + + void __fastcall PBoxTextPaint(TObject *Sender); + void __fastcall SBPasteClick(TObject *Sender); + void __fastcall SBCopyClick(TObject *Sender); + void __fastcall SBColAdjClick(TObject *Sender); + void __fastcall SBClipClick(TObject *Sender); + void __fastcall PBoxLPaint(TObject *Sender); + void __fastcall PBoxUPaint(TObject *Sender); + void __fastcall PBoxLMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxLDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + void __fastcall PBoxLDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + void __fastcall PBoxUDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + void __fastcall PBoxUDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + + void __fastcall UDLClick(TObject *Sender, TUDBtnType Button); + void __fastcall FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall PBoxUMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); +private: + int m_DisEvent; + + Graphics::TBitmap *pBitmap; + CDrawText m_Text; + + int m_XW; + int m_YW; + int m_X; + int m_Y; + int m_X2; + int m_Y2; + int m_Size; + void __fastcall DrawCursor(void); + void __fastcall BtnClick(int n); + void __fastcall UpdateSB(void); + + Graphics::TBitmap *m_pCustomBmp; + int m_MIndex; + void __fastcall UpdateCustom(void); + void __fastcall UpdateText(void); + void __fastcall UpdateCBSize(int xw, int yw); + DYNAMIC void __fastcall AdjustSize(void); + + void __fastcall UpdateSrc(BOOL fSize); + + AnsiString m_ListName; + Graphics::TBitmap *m_pUserBmp; + Graphics::TBitmap *m_pListBmp; + void __fastcall UpdateUser(void); + int __fastcall IsMList(int n); + int __fastcall IsSameBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc, int fSize); + + HWND m_hClipNext; +public: + virtual __fastcall TBitMaskDlg(TComponent* AOwner); + + int __fastcall Execute(Graphics::TBitmap *pBmp, CDrawText *pText); + +#define CM_EDITEXIT WM_USER+404 +protected: + void __fastcall OnEditExit(TMessage Message); + void __fastcall OnDrawClipboard(TMessage Message); + void __fastcall OnChangeCbChain(TMessage Message); + +BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(CM_EDITEXIT, TMessage, OnEditExit) + MESSAGE_HANDLER(WM_DRAWCLIPBOARD, TMessage, OnDrawClipboard) + MESSAGE_HANDLER(WM_CHANGECBCHAIN, TMessage, OnChangeCbChain) +END_MESSAGE_MAP(TForm) +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TBitMaskDlg *BitMaskDlg; +//---------------------------------------------------------------------------- +#endif + diff --git a/CItems/CUSTOM.TXT b/CItems/CUSTOM.TXT new file mode 100644 index 0000000..2f04d68 --- /dev/null +++ b/CItems/CUSTOM.TXT @@ -0,0 +1,383 @@ +MMSSTVカスタムアイテム + + 本書ではMMSSTVのテンプレートに埋めこみ可能なカスタムアイテムについて解説します。 + +======================== +○カスタムアイテムの概要 +======================== + カスタムアイテムはMMSSTVのテンプレートに埋めこみ可能な任意のオブジェクトを実装するための機能です。カスタムアイテムにはMMSSTVの組み込みアイテムと同じように、受信履歴イメージの自動参照やマクロテキストの自動展開の機能を持たせることもできます。またストックテンプレートやファイルに保存することができ、既存の組み込みアイテムとまったく同じように扱う事ができます。 + + カスタムアイテムのすべての機能は、特定のインターフェースを持ったDLLファイルで提供されます。MMSSTVはユーザーが選択したDLLファイルを動的に読みこみそれを実行するための仕組みを持つだけです。アイテムの動作や外観、編集のためのユーザーインターフェースは、すべてそのDLL内に実装するコードによって決定されます。 + + カスタムアイテムの利点はMMSSTVの本体プログラムを変更することなく、テンプレートの機能を外部からいくらでも拡張できる点です。DLLファイルは単にいずれかのフォルダ(通常はMMSSTVフォルダ)に存在するだけで良く、OLEカスタムコントロール(ActiveX)のようなWindowsレジストリへの登録は必要ありません。 + + カスタムアイテムには以下の3種類が存在します。 + +1.スタティックイメージ +~~~~~~~~~~~~~~~~~~~~~~ + テンプレート内にイメージを描画します。描画するイメージはそのオブジェクトが保持するプロパティに従い、MMSSTVの受信履歴イメージやマクロ変換テキストは参照しません。MMSSTVテンプレートのOLEオブジェクトと類似した動作になります。 + +2.アクティブイメージ +~~~~~~~~~~~~~~~~~~~~ + テンプレート内にイメージを描画します。描画するイメージはそのオブジェクトが保持するプロパティおよび、MMSSTVの受信履歴イメージを参照して作成されます。MMSSTVテンプレートの画像アイテムを拡張した動作になります。 + +3.アクティブテキスト +~~~~~~~~~~~~~~~~~~~~ + テンプレート内に文字イメージを描画します。描画するイメージはそのオブジェクトが保持するプロパティおよび、MMSSTVのマクロ変換テキストを参照して作成されます。MMSSTVテンプレートの文字アイテムを拡張した動作になります。 + + + カスタムアイテムを作成する開発環境は、Windowsの32bitコードのDLLファイルが作成できるものならば何でも構いません。DLLファイルがエクスポートするファンクションに関しては、本書の「エクスポートファンクション」および「ファンクションの解説」の項を参照して下さい。 + + +========== +○アイコン +========== + カスタムアイテムのDLLファイルは、そのアイテムの特徴を現した32x32のアイコンのリソースを保持してください。 + MMSSTVはフォルダのサムネイルのファイルの種類で「カスタムアイテム」が選択されたとき、DLLファイルから(1つ目の)アイコンをロードしてそれをサムネイルに表示します。 + + このアイコンは必須ではありませんが、フォルダのサムネイルからテンプレートにアイテムをドロップする際の助けになります。 + + +============================ +○エクスポートファンクション +============================ + カスタムアイテムのDLLファイルは、以下のファンクションをエクスポートします。 + +extern "C" __declspec(dllexport) void mcmLanguage(long lang); +extern "C" __declspec(dllexport) void mcmAboutDialog(HWND hWnd); +extern "C" __declspec(dllexport) HANDLE mcmCreateObject(const BYTE *pStorage, DWORD Size); +extern "C" __declspec(dllexport) void mcmDeleteObject(HANDLE hObj); +extern "C" __declspec(dllexport) long mcmGetItemType(HANDLE hObj); +extern "C" __declspec(dllexport) void mcmPos(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize); +extern "C" __declspec(dllexport) const BYTE* mcmCreateStorage(HANDLE hObj, LPDWORD pSize); +extern "C" __declspec(dllexport) void mcmDeleteStorage(HANDLE hObj, const BYTE *pStorage); +extern "C" __declspec(dllexport) long mcmEdit(HANDLE hObj, HWND hWnd); +extern "C" __declspec(dllexport) long mcmFont(HANDLE hObj, HWND hWnd); +extern "C" __declspec(dllexport) DWORD mcmGetOrgSize(HANDLE hObj); +extern "C" __declspec(dllexport) LPCSTR mcmGetUserText(HANDLE hObj); +extern "C" __declspec(dllexport) HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hbDest, LPCSTR pText); +extern "C" __declspec(dllexport) HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hbDest, HBITMAP hbSrc); +extern "C" __declspec(dllexport) void mcmSetDraft(HANDLE hObj, DWORD sw); + + エクスポートするファンクションは__cdecl呼び出し規約に従った、Cの修飾名でなければなりません。MMSSTVは例えばmcmAboutDialog()の場合、そのエントリポイントを"_mcmAboutDialog"または"mcmAboutDialog"の名前でDLL内から探します。 + + 必須のファンクションは、mcmCreateObject()、mcmDeleteObject()および、mcmGetItemType()です。これ以外のファンクションはそのアイテムの動作に必要がなければエクスポートする必要はありません。 + + +====================== +○ファンクションの解説 +====================== + +void mcmLanguage(long lang) +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] lang : 0-日本語, 1-英語 +[解説] + 現在のMMSSTVの動作言語モードが設定されます。アイテムのユーザーインターフェースで使用する言語は、ここで設定された言語とできるだけ一致させてください。または日本語をサポートしない場合、この値に関係なく常に英語を使用しても構いません。 + + +void mcmAboutDialog(HWND hWnd) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hWnd : MMSSTVウインドウのハンドル +[解説] + そのアイテムの名前やバージョン番号を表示するダイアログボックスを表示します。ダイアログボックスはhWndを親ウインドウとしてモーダル状態で実行します。 + このファンクションは、MMSSTVのテンプレートで、「オブジェクト」->「プロパティ」が選択された時に呼び出されます。 + + +HANDLE mcmCreateObject(const BYTE *pStorage, DWORD Size) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] pStorage: ストレージのポインタ + Size : ストレージのサイズ +[戻り値] + 作成したオブジェクトのハンドル +[解説] + アイテムのオブジェクトを1つ作成します。作成するオブジェクトはpStorageの内容で初期化されなければなりません。ストレージはオブジェクトを再構築するためにファイルにシリアライズされるデータです。詳細はmcmCreateStorage()を参照して下さい。 + MMSSTVはこのファンクションを呼び出した直後、pStorageの領域を自動的に削除します。したがってそのポインタ自体をオブジェクト内に保持してはいけません。 + + MMSSTVがオブジェクトを新規に作成する場合、pStorageはNULLで呼び出されます。この場合、そのオブジェクトはデフォルトで初期化されなければなりません。 + + MMSSTVはhObjの内容について一切関知しません。従ってhObjにはどのような構造のデータが格納されていても構いません。ただしhObjはアイテムを識別するための0以外のユニークな値でなければなりません。 + 一般的な方法として例えば動的に構築した構造体またはクラスのポインタを返す次のようなコードを記述します。 + +[Cの場合] + typedef struct { + : + : + }SMyObj; + + SMyObj *pObj = (SMyObj *)malloc(sizeof(SMyObj)); + if( pObj != NULL ){ + InitMyObject(pObj); + CreateMyObject(pObj, pStorage, Size); + } + return (HANDLE)pObj; + +[C++の場合] + class CMyObj { + : + : + }; + + CMyObj *pObj = new CMyObj; + if( pObj != NULL ) pObj->Create(pStorage, Size); + return (HANDLE)pObj; + + + オブジェクトは可能な限りGDIリソースを節約してください。例えばデバイスコンテキストそのものや、ビットマップ、パレット、フォント、ブラシ、ペンなどのGDIリソースを描画時以外に大量に保持しないようにして下さい。これらを大量に保持すると、特にWin95/98/SE/ME系のOSの場合に問題を引き起こす可能性があります。 + + +void mcmDeleteObject(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル +[解説] + mcmCreateObject()で作成したオブジェクトを削除します。hObjが保持するメモリやリソースはすべて解放されなければなりません。 + 一般的な方法として例えば動的に構築した構造体またはクラスを削除する次のようなコードを記述します。 + +[Cの場合] + SMyObj *pObj = (SMyObj *)hObj; + DeleteMyObj(pObj); + free(pObj); + +[C++の場合] + CMyObj *pObj = (CMyObj *)hObj; + delete pObj; + + +DWORD mcmGetItemType(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル +[戻り値] アイテム種別を表す32bitの値 + 00ao00uth + t : 種別 + 0-スタッティクイメージ + 1-アクティブイメージ + 2-アクティブテキスト + o : 表示 + 0-通常表示 + 1-オーバーレイ表示 + u : 更新 + 0-サイズ変更時 + 1-サイズ変更時とアイテム移動時 + a : 配置 + 0-左上詰め, 1-右上詰め, 2-左下詰め + 3-右下詰め, 4-横中央, 8-縦中央 +[解説] + hObjのアイテム種別を返します。 + + MMSSTVはそのオブジェクトの種別をmcmCreateObjectを呼び出した直後、およびmcmEdit()を呼び出した直後に読み取ります。オブジェクトはその種別をmcmEdit()内のユーザーインターフェースで変更しても構いません。 + + オーバーレイ表示(o)に関しては本書の「テンプレートの背景色とオーバーレイ」の項を参照して下さい。 + + 更新(u)は、テンプレート上でのアイテム枠のドラッグ操作により、アイテムの表示位置が変更された際に、mcmUpdateText()およびmcmUpdateImage()を呼び出すかどうかを指定します。 + + 配置(a)はそのアイテムをテンプレート上でどのように配置するかを指定します。mcmUpdateImage()およびmcmUpdateText()で引き渡されるhbDestのサイズを変更しない場合、テンプレート上での配置は変化せずMMSSTVはこのフラグを無視します。しかしmcmUpdateImage()およびmcmUpdateText()内で新しいビットマップを作成しそのハンドルを返す場合、MMSSTVは表示サイズが変更されたアイテムをテンプレート上にどのように再配置するかをこのフラグにより決定します。 + + +const BYTE* mcmCreateStorage(HANDLE hObj, LPDWORD pSize) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + pSize : ストレージのサイズを格納するポインタ +[戻り値] 作成したストレージのポインタ +[解説] + ストレージを1つ作成しそのポインタを返します。pSizeのアドレスに作成したストレージのバイト数を格納して下さい。 + + MMSSTVはテンプレートファイル(MTM, MTI)にそのアイテムを保存する際、このファンクションを呼び出して、返されたストレージを保存します。作成するストレージの構造は自由ですが、必ず2次記憶メディアに保存可能な形式でなければなりません。例えばストレージ内にポインタを格納してはなりません。 + + MMSSTVがテンプレートファイルをロードする際、mcmCreateObject()のpStorageで引き渡すストレージは、このファンクションで作成されたストーレージと同じ内容です。従って作成するストレージは、必ずオブジェクトが再構築できる形式でなければなりません。 + + ストレージの構造が変化した場合に予期しない動作に陥らないために、ストレージ内にそのバージョン番号を格納するのは良いアイデアです。 + + ストレージは動的な領域、または(オブジェクト内の)静的な領域のいずれに作成しても構いません。MMSSTVは返されたストレージをファイルに保存した直後、必ずmcmDeleteStorage()を呼び出して、動的に作成されたストレージを削除する機会を提供します。ストレージを動的に作成しなかった場合、mcmDeleteStorage()では何もする必要はありません。 + + +void mcmDeleteStorage(HANDLE hObj, const BYTE *pStorage) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + pStorage: ストレージのポインタ +[解説] + mcmCreateStorage()で作成したストレージを削除します。 + + +DWORD mcmEdit(HANDLE hObj, HWND hWnd) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + hWnd : MMSSTVウインドウのハンドル +[戻り値] + TRUE : オブジェクトが変更された時。 + FALSE : オブジェクトが変更されなかった時。 +[解説] + オブジェクトを編集するためのダイアログボックスを表示します。ダイアログボックスはhWndを親ウインドウとしてモーダル状態で実行します。 + + 戻り値がTRUEの場合、MMSSTVはそのアイテムの外観を更新するために、mcmUpdateImage()またはmcmUpdateText()を呼び出します。 + + このファンクションは、MMSSTVのテンプレートで、そのアイテムがダブルクリックされるか、または「色の設定」ボタンが押された時に呼び出されます。 + + +DWORD mcmFont(HANDLE hObj, HWND hWnd) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + hWnd : MMSSTVウインドウのハンドル +[戻り値] + TRUE : オブジェクトが変更された時。 + FALSE : オブジェクトが変更されなかった時。 +[解説] + オブジェクトのフォントを変更するためのダイアログボックスを表示します。ダイアログボックスはhWndを親ウインドウとしてモーダル状態で実行します。 + このファンクションは、アクティブテキストの場合に、MMSSTVのテンプレートで、「フォント設定」ボタンが押された時に呼び出されます。 + + 戻り値がTRUEの場合、MMSSTVはそのアイテムの外観を更新するために、mcmUpdateText()を呼び出します。 + + このファンクションは必須ではありませんが、オブジェクトがフォントを持つ場合はできるだけエクスポートするようにして下さい。これによりユーザーはフォントの変更をワンタッチで行うことができます。このファンクションがエクスポートされていない場合、MMSSTVは代わりにmcmEdit()を呼び出します。 + + +DWORD mcmGetOrgSize(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル +[戻り値] + 下位16ビット: 横幅 + 上位16ビット: 縦幅 +[解説] + アイテムの固有のサイズを返します。 + + アイテムが固有のサイズを持つ場合、テンプレートに表示されているサイズ(mcmUpdateImage()およびmcmUpdateText()のhbDestのサイズ)は必ずしもそれに一致しているとは限りません。 + MMSSTVはテンプレートのポップアップメニューの「アスペクト比を保つ」および「オリジナルのサイズに戻す」の2つの機能を実装するために、このファンクションを呼び出します。 + + アイテムが固有のサイズを持たない場合、mcmUpdateImage()のhbSrcのサイズ、またはmcmUpdateText()のhbDestのサイズを保持しておき、それを返すようにして下さい。 + + +void mcmPos(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + pos : テンプレート上の位置(X:下位16bit, Y:上位16bit) + size : テンプレート上のサイズ(X:下位16bit, Y:上位16bit) + tsize : テンプレートのサイズ(X:下位16bit, Y:上位16bit) +[解説] + アイテムが表示されるテンプレート上の位置、サイズおよび現在のテンプレートのサイズの情報が設定されます。 + このファンクションは必須ではありませんが、テンプレート上の位置によってビットマップの更新処理を変更する必要がある場合にエクスポートします。 + + +LPCSTR mcmGetUserText(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル +[戻り値] オブジェクトが保持するユーザ定義文字列のポインタ +[解説] + ユーザー定義文字列を返します。このファンクションは、アクティブテキストの場合にのみ呼び出されます。 + + 定義文字列とはユーザが設定したマクロを含む文字列です。通常この文字列はmcmEdit()で編集できるようにします。 + MMSSTVはmcmUpdateText()を呼び出す際、必ず直前にmcmGetUserText()を呼び出してユーザー定義文字列を参照します。 + + MMSSTVは返された定義文字列をマクロ変換し、それをmcmUpdateText()のpTextに引き渡します。その際行うマルチバイト文字コード処理は、常にそのPCのコードページに依存する動作になります。例えば英語版Windows上ではマルチバイト文字コード処理は行われません。 + + +HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hbDest, LPCSTR pText) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + hbDest : 描画用ビットマップのハンドル + pText : 描画する文字列 +[戻り値] 新規に作成した描画用ビットマップのハンドル +[解説] + pTextの内容で描画用のイメージを作成します。 + このファンクションは、アクティブテキストの場合にのみ呼び出されます。 + + hbDestは必ず24bitフォーマットのDIBです。新規に描画用ビットマップを作成した場合、hbDestをDeleteObject()関数で削除し、作成したビットマップのハンドルを返して下さい。描画用ビットマップとしてhbDestを更新した場合、必ずNULLを返して下さい。新規に作成するビットマップはDDBでも構いませんが、できるだけDIBにして下さい。テンプレート内に表示されるイメージのサイズはhbDestのサイズまたは返されたビットマップのサイズになります。 + + MMSSTVはアイテムの外観を更新する必要があると判断した時、このファンクションを呼び出します。 + + +[例] + 例えばpTextを単純にhbDestに展開するコードは次のようになります。 + + extern "C" __declspec(dllexport) + HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hbDest, LPCSTR pText) + { + DIBSECTION ds; + if( !GetObject(hbDest, sizeof(DIBSECTION), &ds) ) + return NULL; + + HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); + HDC hdcDest = CreateCompatibleDC(hdcScreen); + HBITMAP hbOld = SelectObject(hdcDest, hbDest); + TextOut(hdcDest, 0, 0, pText, strlen(pText)); + SelectObject(hdcDest, hbOld); + DeleteDC(hdcDest); + DeleteDC(hdcScreen); + return NULL; + } + + +HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hbDest, HBITMAP hbSrc) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + hbDest : 描画用ビットマップのハンドル + hbSrc : 履歴画像ビットマップのハンドル +[戻り値] 新規に作成した描画用ビットマップのハンドル +[解説] + 描画用イメージを作成します。 + このファンクションは、スタティックイメージまたはアクティブイメージの場合に呼び出されます。スタティックイメージの場合hbSrcは必ずNULLで呼び出されます。 + + hbDestおよびhbSrcは必ず24bitフォーマットのDIBです。新規に描画用ビットマップを作成した場合、hbDestをDeleteObject()関数で削除し、作成したビットマップのハンドルを返して下さい。描画用ビットマップとしてhbDestを更新した場合、必ずNULLを返して下さい。新規に作成するビットマップはDDBでも構いませんが、できるだけDIBにして下さい。テンプレート内に表示されるイメージのサイズはhbDestのサイズまたは返されたビットマップのサイズになります。 + + MMSSTVはアイテムの外観を更新する必要があると判断した時、このファンクションを呼び出します。 + + +[例] + 例えば現在のWindowsスクリーンをhbDestに伸縮展開するコードは次のようになります。 + + extern "C" __declspec(dllexport) + HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hbDest, HBITMAP hbSrc) + { + DIBSECTION ds; + if( !GetObject(hbDest, sizeof(DIBSECTION), &ds) ) + return NULL; + + HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); + HDC hdcDest = CreateCompatibleDC(hdcScreen); + HBITMAP hbOld = SelectObject(hdcDest, hbDest); + SetStretchBltMode(hdcDest, HALFTONE); + StretchBlt(hdcDest, 0, 0, + ds.dsBm.bmWidth, ds.dsBm.bmHeight, + hdcScreen, 0, 0, + GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN), + SRCCOPY); + SelectObject(hdcDest, hbOld); + DeleteDC(hdcDest); + DeleteDC(hdcScreen); + return NULL; + } + + +void mcmSetDraft(HANDLE hObj, DWORD sw) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[パラメータ] hObj : オブジェクトのハンドル + sw : 0-詳細描画, 1-ドラフト描画 +[解説] + mcmUpdateText()およびmcmUpdateImage()でビットマップを更新(または作成)する方法が設定されます。 + 「ドラフト描画」が指定された場合、mcmUpdateText()およびmcmUpdateImage()で更新するビットマップは、その品質よりも速度が要求されます。「ドラフト描画」が設定されるのはストックテンプレート上でアイテムが描画される際に、MMSSTVで「高速描画」のチェックが付けられている場合だけです。 + MMSSTVはオブジェクトを作成後このフラグを初期化しません。従ってオブジェクトの初期値は必ず「詳細描画」の状態にして下さい。 + + ビットマップの更新に時間を要しない場合、ドラフト描画をサポートする必要はありません。その場合、このフラグを無視するか、またはこのファンクションそのものをエクスポートする必要はありません。 + + +==================================== +○テンプレートの背景色とオーバーレイ +==================================== + カスタムアイテムはMMSSTVのテンプレートに一旦描画されます。その後テンプレートと送信素材画像が重畳されて送信画像が作成されます。 + したがってアイテムのオーバーレイの状態に関係なく、常にテンプレートは送信素材画像に対してオーバーレイです。その時の透過色はテンプレートの背景色としてユーザが設定します。つまりアイテムがオーバーレイでない場合でも、アイテム内にテンプレートの背景色と同じ色が存在する場合、その色はすべて透過になります。 + ただし複数のアイテムがテンプレート上に重なった状態では、アイテムのオーバーレイを指定しないと、アイテム間で透過されません。 + + テンプレートの背景色は、mcmUpdateImage()およびmcmUpdateText()のhbDestの初期色で得ることができます。この色は動作時のビデオモードでの純色に調整されています。従ってそのアイテムをオーバーレイ描画する場合、そのアイテムの透過色をテンプレートの背景色に一致させるのが最も好ましい方法です。 + + 一方、アイテムをオーバーレイで描画しない場合、アイテム内のすべての色はテンプレートの背景色と同じ色にしてはなりません。またオーバーレイで描画する場合でも、透過色以外の部分はテンプレートの背景色と同じ色にしてはなりません。 + 例えばmcmUpdateImageで、hbSrcからhbDestを作成する場合、hbDestに格納する色をテンプレートの背景色と一致させないようにします。この最も簡単な方法は一致する色の値を1値だけ変化させます。この方法ではビデオモードがフルカラーの場合、アイテム内のすべての色が送信画像に展開されます。ただしビデオモードが16bitカラーの場合、色の値を1値だけ変化させても結果として同じ色になる可能性が高いので、ユーザーがテンプレートの背景色を変化させなければならない場合があります。 + + +======================== +○カスタムアイテムの配布 +======================== + あなたが作成したカスタムアイテムは、あなたの裁量で自由に公開配布して下さい。 + + カスタムアイテムのDLLファイルはMMSSTV以外から利用されることはありません。したがってDLLファイルは通常はMMSSTVフォルダ内にインストールします。インストールプログラムで配布する場合、インストール先のフォルダが選択できるようになっているのが好ましいと思います。 + + 配布するカスタムアイテムが大量の他のファイルを保持、または作成する場合、専用のフォルダにそれらをインストールし、そのDLLファイルのショートカット(.LNK)をMMSSTVフォルダ内に1つだけ作成するのは良い考えです。 + + +73, Mako diff --git a/CItems/ECUSTOM.TXT b/CItems/ECUSTOM.TXT new file mode 100644 index 0000000..027bf3f --- /dev/null +++ b/CItems/ECUSTOM.TXT @@ -0,0 +1,371 @@ +MMSSTV Custom Item + March 24, 2002 + Written by JE3HHT Makoto Mori + Translated into English by JA7UDE Nob Oba + +This document explains how to make the MMSSTV custom item. + + +======================== +Overview of the custom item +======================== + + The custom item is an implementation scheme of an object that can be embedded in the MMSSTV template. The custom item can have various functions, such as the automatic reference to the receive history images and the automatic conversion of macro texts. The custom item is stored in the stock template or file so that it can be treated as a conventional embedded item. + + All the functions provided in the custom item are offered as a DLL file, which has the specific interface to MMSSTV. MMSSTV merely loads the DLL on-the-fly and runs it. The operation, the appearance, and the user interface of the custom item are all defined in the DLL. + + The biggest advantage of the custom item is high expandability. Using the custom item, the user can add any kind of functions to the MMSSTV template without modifying the MMSSTV program. The DLL file can be stored in any folder (normally in the MMSSTV directory), and does not need to be registered in Windows registry. + + The custom items are categorized into the following three types: + +1. Static image + The static image is displayed as an image in the template. The image is controlled by its own property; it does not refer to the MMSSTV receive history or the macro conversion text. It is similar to the OLE object of the MMSSTV template. + +2. Active image + The active image is displayed as an image in the template. The image is controlled by its own property and the MMSSTV receive history. It offers an extended function of the image item in the MMSSTV template. + +3. Active text + The active text is shown as a text image in the template. The text image is controlled by its own property and the MMSSTV macro conversion. It offers an extended function of the text item in the MMSSTV template. + + To make a custom item, any development suite that generates Windows 32-bit DLL can be used. For further information, refer to the sections of Export Function and Function Details in this document. + + +========== +Icon +========== + +The custom item DLL should include a 32x32 icon resource, which represents the feature of the item. MMSSTV loads and displays the (first) icon in the thumbnail window when the custom item is selected as the file type in the folder thumbnail. + +The icon is not a must, but it makes the drag&drop operation easier for the user. + + +============================ +Export Function +============================ + +The custom item DLL exports the following functions: + +extern "C" __declspec(dllexport) void mcmLanguage(long lang); +extern "C" __declspec(dllexport) void mcmAboutDialog(HWND hWnd); +extern "C" __declspec(dllexport) HANDLE mcmCreateObject(const BYTE *pStorage, DWORD Size); +extern "C" __declspec(dllexport) void mcmDeleteObject(HANDLE hObj); +extern "C" __declspec(dllexport) long mcmGetItemType(HANDLE hObj); +extern "C" __declspec(dllexport) void mcmPos(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize); +extern "C" __declspec(dllexport) const BYTE* mcmCreateStorage(HANDLE hObj, LPDWORD pSize); +extern "C" __declspec(dllexport) void mcmDeleteStorage(HANDLE hObj, const BYTE *pStorage); +extern "C" __declspec(dllexport) long mcmEdit(HANDLE hObj, HWND hWnd); +extern "C" __declspec(dllexport) long mcmFont(HANDLE hObj, HWND hWnd); +extern "C" __declspec(dllexport) DWORD mcmGetOrgSize(HANDLE hObj); +extern "C" __declspec(dllexport) LPCSTR mcmGetUserText(HANDLE hObj); +extern "C" __declspec(dllexport) HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hbDest, LPCSTR pText); +extern "C" __declspec(dllexport) HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hbDest, HBITMAP hbSrc); +extern "C" __declspec(dllexport) void mcmSetDraft(HANDLE hObj, DWORD sw); + +All the export functions must comply with __cdecl C calling rule. For example, MMSSTV looks for entry point "_mcmAboutDiaglog" or "mcmAboutDialog" in the DLL when it calls mcmAboutDialog(). + +The DLL must have at least three functions exported: mcmCreateObject(), mcmDeleteObject(), and mcmGetItemType(). All the other functions are optional and do not have to be exported if not needed. + + +====================== +Function Details +====================== + +void mcmLanguage(long lang) +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameter] lang : 0 - Japanese, 1 - English +[Details] + It specifies the language mode of MMSSTV. The language used in the user interface of the custom item should conform to the language specified here. If the item does not support Japanese, simply use the English mode. + +void mcmAboutDialog(HWND hWnd) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameter] hWnd : MMSSTV window handle +[Details] + It displays a dialog box including the item name and the version number. The dialog box has hWnd as its parent window handle and appears as a modal window. + + This function is called when the user selects Object -> Property in the MMSSTV template. + +HANDLE mcmCreateObject(const BYTE *pStorage, DWORD Size) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] pStorage: pointer to the storage + Size : storage size +[Return value] + The handle of the created object + +[Details] + This function creates an item object. The object must be initialized with the content of pStorage. The Storage contains the data that is serialized into the file for reconstructing the object. For more information, refer to mcmCreateStorage(). + + MMSSTV automatically deletes the pStorage area after calling this function. Therefore, the pointer itself must not be stored in the pStorage area. + When MMSSTV newly creates the object, it calls the function with pStorage = NULL. In that case, the object must be initialized in default. + MMSSTV does not care about the content of hObj, and therefore hObj can have any kinds of data structure. However, hObj must be a unique number other than 0 to identify the item. + + Here is a typical example that returns the class pointer to the dynamically created structure. + +[Example in C] + typedef struct { + : + : + }SMyObj; + + SMyObj *pObj = (SMyObj *)malloc(sizeof(SMyObj)); + if( pObj != NULL ){ + InitMyObject(pObj); + CreateMyObject(pObj, pStorage, Size); + } + return (HANDLE)pObj; + +[Example in C++] + class CMyObj { + : + : + }; + + CMyObj *pObj = new CMyObj; + if( pObj != NULL ) pObj->Create(pStorage, Size); + return (HANDLE)pObj; + + The object should use as few GDI resources as possible. More specifically, the object should not have the device context itself, bitmap, palette, font, brush, or pen, except that they are needed in drawing operations. If the object keeps many GDI resources, it would cause resource shortage in Windows 95/98/SE/ME operating systems. + +void mcmDeleteObject(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameter] hObj : Object handle +[Details] + This function deletes the object that have been created by mcmCreateObject(). All the memory and resources sustained by hObj must be released. + + Let me give you a typical code that deletes the dynamically created structure. + +[Example in C] + SMyObj *pObj = (SMyObj *)hObj; + DeleteMyObj(pObj); + free(pObj); + +[Example in C++] + CMyObj *pObj = (CMyObj *)hObj; + delete pObj; + + +DWORD mcmGetItemType(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameter] hObj : Object handle +[Return value] 32-bit value that identifies the item type + 00ao00uth + t : type + + 0 - Static image + 1 - Active image + 2 - Active text + o : display + 0 - normal display + 1 - overlay display + u : update + 0 - updated on resize + 1 - updated on resize and move + a : alignment + 0 - upper_left, 1 - upper_right, 2 - lower_left + 3 - lower_right, 4 - horizontally_center, 8 - vertically_center + +[Details] + This function returns the type of hObj. + MMSSTV reads the object type immediately after calling mcmCreateObject() or mcmEdit(). The object can change its type in the user interface in mcmEdit(). + For details of the overlay display, refer to the section of Background color of the template and overlay. + The update (u) specifies whether mcmUpdateText() and mcmUpdateImage() are called or not when the item is moved in the template by dragging. + The alignment (a) specifies how the item is placed in the template. In case the size hbDest, which is passed through mcmUpdateImage() and mcmUpdateText(), is not changed, MMSSTV ignores this flag. If a new bitmap is created in mcmUpdateImage() and mcmUdateText(), and its handle is returned, MMSSTV uses this flag to determine how to place the new item in the template. + + +const BYTE* mcmCreateStorage(HANDLE hObj, LPDWORD pSize) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : object handle + pSize : pointer to the storage size +[Return value] pointer to the created storage +[Details] + This function creates a storage and returns a pointer to it. Put the storage size in byte to pSize. + + + When MMSSTV stores the item in the template file (MTM/MTI), it calls this function and saves the storage returned. Any type of storage can be used here, but it must take a form that can be stored in the secondary storage. For example, the pointer must not be included in the storage itself. + When MMSSTV load the templage file, it passes the same storage specified by pStorage in mcmCreateObject(). For this reason, the storage to be created must have the reconstructable form. + It is a good idea to have a version number available in the storage to avoid unexpected behavior in case the storage structure changes. + The storage can be allocated in dynamic or (in-object) static area. MMSSTV always calls mcmDeleteStorage() to offer a chance of deleting the dynamically allocated storage after it saves the storage to a file. If you do not dynamically allocate the storage, mcmDeleteStorage() need to do nothing. + + +void mcmDeleteStorage(HANDLE hObj, const BYTE *pStorage) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : object handle + pStorage: pointer to storage +[Details] + This function deletes the storage created by mcmCreateStorage(). + + +DWORD mcmEdit(HANDLE hObj, HWND hWnd) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : Object handle + hWnd : MMSSTV window handle +[Return value] + TRUE : Object changed + FALSE : Object not changed +[Details] + The function displays a dialog box to edit the object. The dialog box has hWnd as its parent window handle and appears as a modal window. + + If it returns TRUE, MMSSTV calls mcmUpdateImage() or mcmUpdateText() to update the item's appearance. + This function is called when the item is double clicked in the MMSSTV template or when the Set color button is pressed. + + +DWORD mcmFont(HANDLE hObj, HWND hWnd) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : object handle + hWnd : MMSSTV window handle +[Return value] + TRUE : Object changed + FALSE : Object not changed +[Details] + This function displays a dialog box to change the font. The dialog box has hWnd as its parent window handle and appears as a modal window. + + This function is called when the Set font button is pressed in the MMSSTV template. + If the return value is TRUE, MMSSTV calls mcmUpdateText() to update the item appearance. + This is not a mandatory function, but it should be exported if the item has a font, so that the font change is a snap. If the function is not exported, MMSSTV calls mcmEdit() instead. + + +DWORD mcmGetOrgSize(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameter] hObj : object handle +[Return value] + Lower 16 bits: item width + Upper 16 bits: item height +[Details] + This function returns the item size in width and height. + If the item has its own size property, it may not always concur to the size displayed in the template (hbDest size in mcmUpdateImage(), mcmUpdateText()). MMSSTV call this function to perform the "Keep aspect ratio" and "Return to the original size" functions in the pop-up menu. + + If the item has no own size property, save hbSrc of mcmUpdateImage() or hbDest of mcmUpdateText() and return it in response. + + +void mcmPos(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : object handle + pos : position in the template (X: lower 16 bits, Y: upper 16 bits) + size : size in the template (X: lower 16 bits, Y: upper 16 bits) + tsize : template size (X: lower 16 bits, Y: upper 16 bits) +[Deltails] + This function specifies the position and size of the item, and also the template size. This is not a mandatory function, but it should be exported if the bitmap is updated in accordance with the position and size. + + +LPCSTR mcmGetUserText(HANDLE hObj) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameter] hObj : object handle +[Return value] pointer to the user-defined string in the object +[Details] + This function returns the user-defined character string. It is called for the active text. + + The user-defined string is the character string that contains user-specified macro. The string should be edited by mcmEdit(). MMSSTV always calls mcmGetUserText() just before calling mcmUpdateText() in order to refer to the user-define string. + MMSSTV does the macro conversion on the returned string and passes it to pText of mcmUpdateText(). The multi-byte code conversion depends on the code page of the PC. On English Windows operating system, for instance, the multi-byte conversion does not take place. + + +HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hbDest, LPCSTR pText) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : object handle + hbDest : handle of drawing bitmap + pText : character string to be drawn +[Return value] handle of newly created drawing bitmap +[Details] + This function creates a drawing image based on the content of pText. This function is called only in active text handling. + + + hbDest is always 24-bit format DIB. If you create a new drawing bitmap, you have to delete hbDest by using DeleteObject() and return the bitmap handle. If you update hbDest as the drawing bitmap, you have to return NULL. The bitmap can be DDB, but it is strongly recommended to use DIB. The image size shown in the template is the bitmap size or hbDest. + + MMSSTV call this function if it detects the need in updating the item appearance. + +[Example] + The following example code simply unfolds pText to hbDest. + + + extern "C" __declspec(dllexport) + HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hbDest, LPCSTR pText) + { + DIBSECTION ds; + if( !GetObject(hbDest, sizeof(DIBSECTION), &ds) ) + return NULL; + + HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); + HDC hdcDest = CreateCompatibleDC(hdcScreen); + HBITMAP hbOld = SelectObject(hdcDest, hbDest); + TextOut(hdcDest, 0, 0, pText, strlen(pText)); + SelectObject(hdcDest, hbOld); + DeleteDC(hdcDest); + DeleteDC(hdcScreen); + return NULL; + } + + +HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hbDest, HBITMAP hbSrc) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Parameters] hObj : object handle + hbDest : handle of drawing picture + hbSrc : handle of history bitmap +[Retruen value] handle of newly created drawing bitmap +[Details] + This function creates a drawing bitmap. This function is called for static and active images. For the static image, hbSrc must be NULL. + hbDest and hbSrc are always 24-bit DIB. When you create a new drawing bitmap, delete hbDest using DeleteObject() and return the handle of the created drawing bitmap. If hbDest was updated as a drawing bitmap, return NULL. The bitmap can be DDB, but it is strongly recommended to use DIB. The image size in the templage becomes the size of hbDest or the returned bitmap size. + + MMSSTV calls this function if it detects the need in updating the item appearance. + + +[Example] + The following example code stretches and maps the current Windows screen to hbDest. + + + extern "C" __declspec(dllexport) + HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hbDest, HBITMAP hbSrc) + { + DIBSECTION ds; + if( !GetObject(hbDest, sizeof(DIBSECTION), &ds) ) + return NULL; + + HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); + HDC hdcDest = CreateCompatibleDC(hdcScreen); + HBITMAP hbOld = SelectObject(hdcDest, hbDest); + SetStretchBltMode(hdcDest, HALFTONE); + StretchBlt(hdcDest, 0, 0, + ds.dsBm.bmWidth, ds.dsBm.bmHeight, + hdcScreen, 0, 0, + GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN), + SRCCOPY); + SelectObject(hdcDest, hbOld); + DeleteDC(hdcDest); + DeleteDC(hdcScreen); + return NULL; + } + + +void mcmSetDraft(HANDLE hObj, DWORD sw) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Prameters] hObj : object handle + sw : 0 ? full drawing, 1 ? draft drawing +[Details] + This function specifies the update mode of the bitmap in mcmUpdateText() and mcmUpdateImage(). The draft drawing mode is used if Draft is checked in the main MMSSTV window. The draft drawing mode gives priority to the speed over the quality. + + MMSSTV does not initialize this flag after creating the object, and therefore the initial mode must be set to the full drawing mode. + You do not have to support the draft drawing mode if it does not take plenty of time to update the bitmap. Just ignore this flag or do not export this function. + + +==================================== +Background color of the template and overlay +==================================== + + The custom item is first drawn in the template, and then the template is superimposed to the TX material image in order to make up the SSTV TX picture. For this reason, the template is overlaid on the TX material image regardless of the overlay status of the item. The background color of the template is supposed to be the transparent color. Even if the item is not overlaid on the template, the color in the item, which is the same as the background color, could be transparent in that case. + + The background of the template can be obtained by the initial color in mcmUpdateImage() or mcmUpdateText(). The color is adjusted to the pure color in accordance with the video mode, and therefore it is desirable that the transparent color of the item be set to the background color of the template. + + If you do not overlay the item in the template, you must not use the template background color for the any part of the item. If you overlay the item in the template, you must not use the template background color for the any part except the transparent pixels. + For example, if you make hbDest from hbSrc by using mcmUpdateImage(), you do not use the template background color for hbDest. The simplest way to do this is to change the same color by 1. This is effective for the full color video because the change affects the whole TX image. The 16-bit color video, however, the change by 1 would not affect the result, and the user may have to change the template background color. + + +======================== +Distribution of the custom item +======================== + + You can freely distribute your custom items as you like. + + The DLL file of the custom item will be used only by MMSSTV. Thus, the DLL file normally is installed in the MMSSTV directory. It is preferable that the user can select the destination folder for the installation. + + If the custom item contains or generates many file, it is good idea to get them installed in another folder and make the shortcut (foo.lnk) in the MMSSTV directory. + +73, Mako + diff --git a/CItems/PERIMG/About.cpp b/CItems/PERIMG/About.cpp new file mode 100644 index 0000000..531a7a6 --- /dev/null +++ b/CItems/PERIMG/About.cpp @@ -0,0 +1,33 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "About.h" +#include "ComLib.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TAboutDlg *AboutDlg; +#if UseHWND +__fastcall TAboutDlg::TAboutDlg(HWND hWnd) + : TForm(hWnd) +#else +__fastcall TAboutDlg::TAboutDlg(TComponent* AOwner) + : TForm(AOwner) +#endif +{ + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Caption = TTL; + } + else { + Caption = TTLJ; + } + LVer->Caption = VER" "AUT; + HICON hIcon = ::LoadIcon(HInstance, (LPCSTR)8000); + TIcon *pIcon = new TIcon; + pIcon->Handle = hIcon; + Image->Picture->Icon = pIcon; +} +//--------------------------------------------------------------------- + diff --git a/CItems/PERIMG/About.dfm b/CItems/PERIMG/About.dfm new file mode 100644 index 0000000000000000000000000000000000000000..0e17e4bb773fb3cc9fd5473bbee3435df25ee6c4 GIT binary patch literal 484 zcmX|;!BWC75Qam5wop{`;!&PJxp{_SrGm6WBOINSE|8g!FliX^3Qypp`37FR`U+Z7 zFo#V3*>86L{qtK#q|*&wNN@Ov+Re`rLL~CrHPT7sM)&x_IXx;vnCtRgsZ8X${EghM zR4J%fzjLsiB_rMz7g1J*A$LTe`-dJ=nAZh9p9`C7&^1t7fK8>o7un9%Wz=FY9P97zF|QK@qlu`Tc{0u_ka5^w8=@yEee$Rb0U z0Iv)upiCV2{*VT~u9^*T)%r(sHdxUGRLxz$j)9v;xOIYC2-&2&(OQaXIOu9oB>iEM s#+OIjKjAmFN7sk7EF2E(9?a>6>zey4Q_9DX +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ComLib.h" +//---------------------------------------------------------------------------- +class TAboutDlg : public TForm +{ +__published: + TButton *OKBtn; + TLabel *LVer; + TImage *Image; +private: +public: +#if UseHWND + virtual __fastcall TAboutDlg(HWND hWnd); +#else + virtual __fastcall TAboutDlg(TComponent* AOwner); +#endif +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TAboutDlg *AboutDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/CItems/PERIMG/Comlib.cpp b/CItems/PERIMG/Comlib.cpp new file mode 100644 index 0000000..917ee42 --- /dev/null +++ b/CItems/PERIMG/Comlib.cpp @@ -0,0 +1,1155 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +SYS sys; +// +//--------------------------------------------------------------------------- +//void mcmFunc(DWORD index, FARPROC pFunc) +// +//MMSSTV calls this function at the first time, if the function was exported. +//You can use following functions which are in the MMSSTV. +// +// index : Index of the function. +// pFunc : Address of the function. +// +//indexes and functions are as follows. +// +// 0 : HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 1 : HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +// pName is a pathname of the image (BMP, JPG, WMF) +// +// 2 : HBITMAP (__cdecl *mmLoadHistImage)(void); +// +// 3 : int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +// pName is a filename of the image (BMP, JPG) +// pFolder is a folder name (if it is NULL, MMSSTV uses a default) +// +// 4 : int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +// pName is a pathname of the image (BMP, JPG) +// +// 5 : HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 6 : int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +// Invoke macro dialog box and can choose keyword +// +// 7 : int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +// Convert macro keyword (pSrc) to the text (pDest) +// +// 8 : HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +// Create 24bit DIB +// +// 9 : void (__cdecl *mmMultProc)(void); +// 10 : void (__cdecl *mmMultProcA)(void); +// Do decoding and encoding with the DSP in MMSSTV +// +// 11 : int (__cdecl *mmColorComp)(LPDWORD pCol); +// Invoke color components dialog and can choose a color component +// +extern "C" __declspec(dllexport) +void mcmFunc(DWORD fID, FARPROC pFunc) +{ + switch(fID){ + case 0: + sys.m_fLoadImageMenu = (mmLoadImageMenu)pFunc; + break; + case 2: + sys.m_fLoadHistImage = (mmLoadHistImage)pFunc; + break; + case 9: + sys.m_fMultProc = (mmMultProc)pFunc; + break; + case 13: + sys.m_fView = (mmView)pFunc; + break; + default: + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall MultProc(void) +{ + if( sys.m_fMultProc ) sys.m_fMultProc(); +} +//--------------------------------------------------------------------------- +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = xw; + pBitmap->Height = yw; + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc) +{ + pDest->Width = pSrc->Width; + pDest->Height = pSrc->Height; + pDest->Palette = NULL; + pDest->Canvas->Draw(0, 0, pSrc); +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspect(int &sx, int &sy, int bx, int by) +{ + double ass = double(sx) / double(sy); + double asb = double(bx) / double(by); + if( asb < ass ){ // ソースの方が横長 + sx = (double(sy) * asb) + 0.5; + } + else { + sy = (double(sx) / asb) + 0.5; + } +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspectCopy(Graphics::TBitmap *pDest, int xm, int ym, Graphics::TBitmap *pSrc, int mode) +{ + if( (xm < pSrc->Width) || (ym < pSrc->Height) ){ + KeepAspect(xm, ym, pSrc->Width, pSrc->Height); + pDest->Width = xm; + pDest->Height = ym; + pDest->Palette = NULL; + TRect tc; + tc.Left = tc.Top = 0; + tc.Right = xm; tc.Bottom = ym; + int Sop = ::SetStretchBltMode(pDest->Canvas->Handle, mode); + pDest->Canvas->StretchDraw(tc, pSrc); + ::SetStretchBltMode(pDest->Canvas->Handle, Sop); + } + else { + CopyBitmap(pDest, pSrc); + } +} +//--------------------------------------------------------------------------- +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap) +{ + if( pBitmap == NULL ) return; + + if( (pBitmap->Width != pBox->Width)||(pBitmap->Height != pBox->Height) ){ + int xm = pBox->Width; + int ym = pBox->Height; + KeepAspect(xm, ym, pBitmap->Width, pBitmap->Height); + TRect rc; + rc.Left = 0; rc.Right = xm; + rc.Top = 0, rc.Bottom = ym; + int Sop = ::SetStretchBltMode(pBox->Canvas->Handle, HALFTONE); + pBox->Canvas->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(pBox->Canvas->Handle, Sop); + } + else { + pBox->Canvas->Draw(0, 0, pBitmap); + } +} +// +// +//--------------------------------------------------------------------------- +// Matrix +// +// n[] = l[] * m[] +// +static void __fastcall Matrix(double l[4][4], double m[4][4], double n[4][4]) +{ + int i, j, k; + double d; + + for( i = 0; i < 4; i++ ){ + for( j = 0; j < 4; j++ ){ + for( k = 0, d = 0.0; k < 4; k++ ) d += l[i][k] * m[k][j]; + n[i][j] = d; + } + } +} +static void __fastcall Matrix(double l[3][3], double m[3][3], double n[3][3]) +{ + int i, j, k; + double d; + + for( i = 0; i < 3; i++ ){ + for( j = 0; j < 3; j++ ){ + for( k = 0, d = 0.0; k < 3; k++ ) d += l[i][k] * m[k][j]; + n[i][j] = d; + } + } +} +//--------------------------------------------------------------------------- +// Perspect +// +void __fastcall SetMatrix(double k[3][3], LPCSPERSPECT pPar, int xs, int ys) +{ + double l[4][4]; double m[4][4]; double n[4][4]; + double k1, k2, k3, k4, k5, k6, k7, k8, k9; + double u, v, w; + + u = pPar->rx * PI / 180; + v = pPar->ry * PI / 180; + w = pPar->rz * PI / 180; + memset(l, 0, sizeof(l)); memset(m, 0, sizeof(m)); + l[0][0] = 1.0/xs; l[1][1] = -1.0/xs; l[2][2] = 1.0; l[3][3] = 1.0; + m[0][0] = pPar->ax; m[1][1] = pPar->ay; m[2][2] = 1.0; m[3][3] = 1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = 1.0; l[1][1] = 1.0; l[2][2] = 1.0; + l[3][0] = pPar->px; l[3][1] = pPar->py; l[3][2] = pPar->pz; l[3][3] = 1.0; + Matrix(n, l, m); + memset(n, 0, sizeof(n)); + n[0][0] = cos(w); n[0][1] = sin(w); + n[1][0] = -n[0][1]; n[1][1] = n[0][0]; + n[2][2] = 1.0; n[3][3] = 1.0; + Matrix(m, n, l); + memset(m, 0, sizeof(m)); + m[0][0] = 1.0; m[1][1] = cos(u); m[1][2] = sin(u); + m[2][1] = -m[1][2]; m[2][2] = m[1][1]; m[3][3] = 1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = cos(v); l[0][2] = sin(v); l[1][1] = 1.0; + l[2][0] = -l[0][2]; l[2][2] = l[0][0]; l[3][3] = 1.0; + Matrix(n, l, m); + memset(n, 0, sizeof(n)); + n[0][0] = 1.0; n[1][1] = 1.0; n[2][2] = -1.0; n[3][2] = -pPar->v; n[3][3] = 1.0; + Matrix(m, n, l); + memset(m, 0, sizeof(m)); + m[0][0] = 1.0; m[1][1] = 1.0; m[2][2] = 1/pPar->s; m[2][3] = m[2][2]; + m[3][2] = -1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = xs; l[1][1] = -xs; l[2][2] = 1.0; l[3][3] = 1.0; + Matrix(n, l, m); + + k1 = m[0][3]; k2 = m[1][3]; k3 = m[3][3]; + k4 = m[0][0]; k5 = m[1][0]; k6 = m[3][0]; + k7 = m[0][1]; k8 = m[1][1]; k9 = m[3][1]; + + k[0][0] = k7*k2 - k8*k1; k[0][1] = k5*k1 - k4*k2; k[0][2] = k4*k8 - k7*k5; + k[1][0] = k8*k3 - k9*k2; k[2][0] = k9*k1 - k7*k5; k[1][1] = k6*k2 - k5*k3; + k[2][1] = k4*k3 - k6*k1; k[1][2] = k5*k9 - k8*k6; k[2][2] = k7*k6 - k4*k9; + + if( pPar->r != 0.0 ){ // simple rotation + double r = pPar->r * PI / 180.0; + double m[3][3]; + double z[3][3]; + memset(m, 0, sizeof(m)); + m[0][0] = cos(r); m[0][1] = sin(r); + m[1][0] = -m[0][1]; m[1][1] = m[0][0]; + m[2][2] = 1.0; + Matrix(k, m, z); + memcpy(k, z, sizeof(z)); + } +} +#define TMAX 400 +//--------------------------------------------------------------------------- +// Create mapping table +LPCDOUBLE __fastcall MapTable(int wave, int xs, int ys, double ks) +{ +#define VMAX 32767.0 +#define VMIN (1.0/VMAX) + LPDOUBLE pTbl, dp; + double d; + switch(wave){ + case 6: + { + double ky = 0.5 * PI / ys; + dp = pTbl = new double[ys*2]; + for( int y = -ys; y < ys; y++, dp++ ){ + d = cos(y * ky); + if( ABS(d) >= VMIN ){ + d = 1.0 * ks / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + } + } + break; + case 9: + { + dp = pTbl = new double[xs*2]; + double kd = xs * xs; + for( int x = -xs; x < xs; x++, dp++ ){ + d = kd - x * x; + if( d >= 0 ){ + d = sqrt(d); + *dp = (d > VMIN) ? xs * ks / d : VMAX; + } + else { + *dp = 1.0; + } + } + } + break; + case 14: + { + dp = pTbl = new double[ys*2]; + double kd = ys * ys; + for( int y = -ys; y < ys; y++, dp++ ){ + d = kd - y * y; + if( d >= 0 ){ + d = sqrt(d); + *dp = (d > VMIN) ? ys / d : VMAX; + } + else { + *dp = 1.0; + } + } + } + break; + case 10: + case 11: + { + dp = pTbl = new double[xs*2]; + double kd = xs * xs; + double kc = xs * 0.25; + for( int x = -xs; x < xs; x++, dp++ ){ + d = kd - x * x; + if( d >= 0 ){ + *dp = sqrt(d) * 0.5 * ks - kc; + if( wave == 10 ) *dp = -*dp; + } + else { + *dp = 1.0; + } + } + } + break; + case 7: + case 8: + case 12: + case 13: + case 15: + case 25: + pTbl = NULL; + break; + case 16: + { + dp = pTbl = new double[ys*2]; + double kc = ks * PI /(4 * ys); + double d; + for( int y = -ys; y < ys; y++, dp++ ){ + d = fabs(sin((y + ys)*kc)); + *dp = d > VMIN ? 1.0 / d : VMAX; + } + } + break; + case 17: + { + dp = pTbl = new double[ys*2]; + double kc = ks * PI /(4 * ys); + double d; + for( int y = ys-1; y >= -ys; y--, dp++ ){ + d = fabs(sin((y + ys)*kc)); + *dp = d > VMIN ? 1.0 / d : VMAX; + } + } + break; + case 22: + { + dp = pTbl = new double[ys*2]; + double kc = PI * (ks-0.85)/ (ys * ys); + double d; + for( int y = -ys; y < ys; y++, dp++ ){ + d = y * y * kc + (PI/4); + *dp = ABS(d) >= VMIN ? (1.0 / d) : VMAX; + } + } + break; + case 28: + case 29: + { + dp = pTbl = new double[xs*2]; + double kd = xs * xs; + double kc = ks*0.5 + 0.05; + for( int x = -xs; x < xs; x++, dp++ ){ + d = kd - x * x; + if( d >= 0 ){ + d = sqrt(d); + *dp = (d > VMIN) ? xs * kc / d : VMAX; + } + else { + *dp = 1.0; + } + } + } + break; + case 36: + { + dp = pTbl = new double[xs*2]; + double kx = PI * 0.5 / xs; + double ky = ys * ks * 0.125; + double ko = ks * ys * 0.1875; + for( int x = -xs; x < xs; x++, dp++ ){ + *dp = ky * ((xs-x) * kx) - ko; + } + } + break; + case 38: + { + dp = pTbl = new double[ys*2]; + double ky = PI * 0.5 / ys; + double kx = xs * ks * 0.25; + double ko = ks * xs * 0.375; + for( int y = -ys; y < ys; y++, dp++ ){ + *dp = kx * ((ys-y) * ky) - ko; + } + } + break; + default: + { + double kx = PI / xs; + double ky = ys * ks/ 8; + dp = pTbl = new double[xs*2]; + for( int x = -xs; x < xs; x++, dp++ ){ + switch(wave){ + case 1: + *dp = ky * sin(x * kx); + break; + case 2: + *dp = ky * sin(-x * kx); + break; + case 3: + *dp = ky * sin(x * kx + PI/2); + break; + case 4: + *dp = ky * sin(-x * kx - PI/2); + break; + case 5: + d = cos(x * kx * 0.5); + if( ABS(d) >= VMIN ){ + d = 1.0 * ks/ d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 18: + d = ABS(x) * kx + (PI/2) * ks; + if( ABS(d) >= VMIN ){ + d = PI / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 19: + case 34: + case 35: + d = fabs(sin(x * kx)) + 0.25 * ks; + if( ABS(d) >= VMIN ){ + d = 1.0 / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 20: + case 30: + case 32: + d = (x+xs) * kx * 0.5 + (PI/2) * ks; + if( ABS(d) >= VMIN ){ + d = PI / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 21: + case 31: + case 33: + d = (xs-x) * kx * 0.5 + (PI/2) * ks; + if( ABS(d) >= VMIN ){ + d = PI / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 23: + d = x * x * kx * kx + (PI * (ks+1.0)); + *dp = ABS(d) >= VMIN ? (PI * 2.0 / d) : VMAX; + break; + case 24: + case 26: + case 27: + d = (xs-ABS(x)) * kx + (PI/2) * ks; + *dp = ABS(d) >= VMIN ? (PI * 0.8 / d) : VMAX; + break; + case 37: + *dp = ky * (ABS(x) * kx * 0.5); + break; + default: + break; + } + } + } + break; + } + return pTbl; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::Perspect(Graphics::TBitmap* pDest, Graphics::TBitmap *pSrc) +{ + ASSERT(pSrc->PixelFormat == pf24bit); + + Graphics::TBitmap *pSrcBak = pSrc; + TColor back = m_Back; + LPCSPERSPECT pPar = &m_sperspect; + if( (pDest == NULL) || (pDest->PixelFormat != pf24bit) ){ + if( pDest != NULL ) delete pDest; + pDest = new Graphics::TBitmap; + pDest->PixelFormat = pf24bit; + } + + if( (pSrc->Width < 2) || (pSrc->Height < 2) ){ + pDest->Width = pSrc->Width; + pDest->Height = pSrc->Width; + CopyBitmap(pDest, pSrc); + } + else { + int flag = pPar->flag & 0x0000ffff; + int wave = pPar->flag >> 16; + int bw = (pSrc->Width & 1) ? pSrc->Width - 1 : pSrc->Width; + int bh = (pSrc->Height & 1) ? pSrc->Height - 1 : pSrc->Height; + pDest->Width = bw; + pDest->Height = bh; + int i, j, m, n; + double x, y, w, p, q; + double k[3][3]; + int xs = bw / 2; + int ys = bh / 2; + SetMatrix(k, pPar, xs, ys); + BYTE *sp1, *sp2; + BYTE *tp; + + BYTE br, bg, bb; + if( flag == 2 ){ // Overlay on source + tp = (BYTE *)pSrc->ScanLine[0]; + bb = *tp++; + bg = *tp++; + br = *tp; + } + else { // Overlay on template + bb = (BYTE)(DWORD(back)>>16); + bg = (BYTE)(DWORD(back)>> 8); + br = (BYTE)(DWORD(back)); + } + if( m_Frame ){ + pSrc = CreateBitmap(pSrcBak->Width, pSrcBak->Height); + CopyBitmap(pSrc, pSrcBak); + int ww = (m_Frame + 1) * 2; + TRect rc; + rc.Left = ww/2; rc.Top = ww/2; + rc.Right = pSrc->Width - ww/2; rc.Bottom = pSrc->Height - ww/2; + pSrc->Canvas->Pen->Color = m_FrameCol; + pSrc->Canvas->Pen->Width = ww; + pSrc->Canvas->MoveTo(rc.Left, rc.Top); + pSrc->Canvas->LineTo(rc.Right, rc.Top); + pSrc->Canvas->LineTo(rc.Right, rc.Bottom); + pSrc->Canvas->LineTo(rc.Left, rc.Bottom); + pSrc->Canvas->LineTo(rc.Left, rc.Top); + } + int r, g, b; + LPCDOUBLE pTbl = NULL; + double ks = 1.0 + (double(m_SC) * 0.05); + if( wave ) pTbl = MapTable(wave, xs, ys, ks); + double kc, kc3, kx, kc7; + switch(wave){ + case 7: + case 8: + kc7 = ((wave == 7) ? 0.6 : 0.8)*double(ys)/double(xs); + kx = xs * ((wave == 7) ? 4.0 * ks : 2.994) / PI; + kc3 = ys/3; + if( wave == 8 ){ + kc7 *= ks; + kc3 *= ks; + } + break; + case 13: + if( m_SC >= (88-30) ) m_SC = 88-30; + if( m_SC <= -30 ) m_SC = -29; + kc = 30 + m_SC; + kc3 = 1.0/tan(kc*PI/180); + kx = 1.0/cos(kc*PI/180); + kc7 = 1.0/sin(kc*PI/180); + break; + case 14: + kc3 = ys * 7 /8; + break; + case 15: + kc3 = ks + 0.75; + break; + case 25: + kc7 = 0.6*double(ys)/double(xs); + kx = xs * (4.0 * ks) / PI; + kc3 = ys/3; + break; + case 26: + case 27: + case 34: + case 35: + kc3 = (ABS(ks) > VMIN) ? (1.0 / ks) : VMAX; + break; + case 28: + case 29: + kc3 = (ABS(ks) > VMIN) ? (ks) : VMAX; + break; + case 30: + case 31: + case 32: + case 33: + kc3 = (ABS(ks) > VMIN) ? (0.8 / ks) : VMAX; + break; + } + kc = double(xs)/double(ys); + for( i = -ys; i < ys; i++ ){ + tp = (BYTE *)pDest->ScanLine[i+ys]; + for( j = -xs; j < xs; j++ ){ + w = k[0][0] * j + k[0][1] * i + k[0][2]; + x = k[1][0] * j + k[1][1] * i + k[1][2]; + y = k[2][0] * j + k[2][1] * i + k[2][2]; + if( w ){ + x = x / w; + y = y / w; + } + else { + x = y = 10000.0; + } + if( wave ){ + switch(wave){ + case 1: + case 2: + case 3: + case 4: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y += pTbl[m]; + break; + case 5: + ASSERT(pTbl); + x *= 0.8; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 6: + ASSERT(pTbl); + y *= 0.8; + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x *= pTbl[m]; + break; + case 7: + case 8: + if( wave == 7 ){ + y -= ys; + } + x *= kc7; + y *= kc7; + q = -y * kc; + w = (y||x) ? atan2(x, q) : 0.0; + p = sqrt(q * q + x * x); + x = w * kx; + if( p >= kc3 ){ + if( wave == 8 ){ + x += xs; + if( x < 0 ) x += 2*xs; + x = fmod(x, 2*xs-1); + x -= xs; + } + p = (p - kc3) * 3; + y = (-(p) + ys); + } + else { + y = ys; + } + break; + case 9: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 10: + case 11: + case 36: + case 37: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y += pTbl[m]; + break; + case 12: + x *= 0.8; + p = (y+ys)*0.5; + w = xs * xs - x * x; + if( w >= 0 ){ + w = sqrt(w) * ks/2.0 - xs*0.25; + y -= w; + } + else { + y = ys; + } + + w = ys * ys - p * p; + if( w > 0 ){ + w = ys / sqrt(w); + x *= w; + } + else { + x = xs; + } + break; + case 13: + x += xs / 3; + y += ys / 3; + x *= 0.75; + y *= 0.75; + if( (y >= 0) && (x >= 0) ){ // C + y = y * 2 - ys; + x = x * 2 - xs; + } + else if( (-y*kc3 >= -x) ){ // A + x = (x - y*kc3) * 2 - xs; + y = y * kc7 * 3 + ys; + } + else { // B + y = (y - x/kc3) * 2 - ys; + x = x * kx * 3 * kc + xs; + } +// m = int(y); n = int(x); +// if( (n ==(-xs+1))||(n==(xs-1))||(m==(-ys+1))||(m==(ys-1)) ){ +// x = xs-1; y = ys-1; +// } + break; + case 14: + y += kc3; + w = (x||y) ? atan2(x, y*kc) : 0.0; + p = fabs(ks + cos(w)); + p = (p > VMIN) ? 1.0 / p : VMAX; + y *= p; + ASSERT(pTbl); + m = y; + if( m >= ys ) m = ys-1; + if( m < -ys ) m = -ys; + x *= p * pTbl[m+ys]; + break; + case 15: + x *= 1.7; y *= 1.7; + p = fabs(x); q = fabs(y); + w = (x||y) ? atan2(p, q*kc) : 0.0; + p = 1 + sin(w * kc3); + p = (p > VMIN) ? 1.0 / p : VMAX; + x *= p; + y *= p; + break; + case 16: + case 17: + case 22: + ASSERT(pTbl); + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x *= pTbl[m]; + break; + case 18: + case 20: + case 21: + case 24: + ASSERT(pTbl); + y *= 1.50; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 19: + ASSERT(pTbl); + y *= 1.30; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 23: + ASSERT(pTbl); + y *= 2.00; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 25: + y += ys; + x *= kc7; + y *= kc7; + q = y * kc; + w = (y||x) ? atan2(x, q) : 0.0; + p = sqrt(q * q + x * x); + x = w * kx; + if( p >= kc3 ){ + p = (p - kc3) * 3; + y = p - ys; + } + else { + y = -ys; + } + break; + case 26: + case 28: + case 30: + case 31: + case 34: + ASSERT(pTbl); + if( y < 0 ){ + y *= 1.3; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + } + else { + y *= kc3; + } + break; + case 27: + case 29: + case 32: + case 33: + case 35: + ASSERT(pTbl); + if( y > 0 ){ + y *= 1.3; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + } + else { + y *= kc3; + } + break; + case 38: + ASSERT(pTbl); + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x += pTbl[m]; + break; + default: + break; + } + } + if( y > 0 ){ m = int(y); } else { m = int(y-1); } + if( x > 0 ){ n = int(x); } else { n = int(x-1); } + q = y - m; + p = x - n; + double pp = 1.0 - p; + double qq = 1.0 - q; + if( (m >= -ys) && (m < ys-1) && (n >= -xs) && (n < xs-1) ){ + sp1 = (BYTE *)pSrc->ScanLine[m+ys] + (n+xs)*3; + sp2 = (BYTE *)pSrc->ScanLine[m+ys+1] + (n+xs)*3; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + b = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + if( b < 0 ) b = 0; + if( b > 255 ) b = 255; + } + else { + b = *sp1; + } + sp1++; sp2++; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + g = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + if( g < 0 ) g = 0; + if( g > 255 ) g = 255; + } + else { + g = *sp1; + } + sp1++; sp2++; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + r = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + if( r < 0 ) r = 0; + if( r > 255 ) r = 255; + } + else { + r = *sp1; + } + if( (br == r) && (bg == g) && (bb == b) && (flag != 2) ){ + if( r ){ r--; } + else if( g ){ g--; } + else if( b ){ b--; } + else { r++; } + } + *tp++ = BYTE(b); + *tp++ = BYTE(g); + *tp++ = BYTE(r); + } + else { + *tp++ = bb; + *tp++ = bg; + *tp++ = br; + } + } + } + if( pTbl != NULL ) delete pTbl; + } + if( pSrcBak != pSrc ) delete pSrc; + return pDest; +} +// +// +//--------------------------------------------------------------------------- +// CItem class +// +__fastcall CItem::CItem(void) +{ + m_pMemStream = NULL; + m_pBitmap = NULL; + + // Init as default + m_sperspect.ver = 3; + m_sperspect.flag = 0; + m_sperspect.ax = 3.0; m_sperspect.ay = 3.0; + m_sperspect.px = m_sperspect.py = m_sperspect.pz = 0.0; + m_sperspect.rz = -180; m_sperspect.rx = m_sperspect.ry = 0; + m_sperspect.v = 10; m_sperspect.s = 2.3; + m_sperspect.r = 0.0; + m_SC = 0; + + m_Back = clBlack; + m_OrgXW = m_OrgYW = 16; + m_Draft = 0; + + m_Frame = 0; + m_FrameCol = clWhite; +} +//--------------------------------------------------------------------------- +__fastcall CItem::~CItem() +{ + if( m_pMemStream != NULL ) delete m_pMemStream; + if( m_pBitmap != NULL ) delete m_pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Create(LPCBYTE ps, DWORD size) +{ + if( (ps != NULL) && size ){ + LPSPERSPECT lps = (LPSPERSPECT)ps; + if( lps->ver <= m_sperspect.ver ){ + int ver = m_sperspect.ver; + if( !(lps->flag & 0x0000ffff) && (size <= sizeof(SPERSPECT)) ){ + memcpy(&m_sperspect, lps, size); + m_sperspect.flag &= 0xffff0000; + } + else { + TMemoryStream *pMem = new TMemoryStream; + try{ + pMem->Clear(); + pMem->Write(ps, size); + pMem->Seek(soFromBeginning, 0); + SPERSPECT sperspect; + pMem->Read(&sperspect, sizeof(SPERSPECT)); + memcpy(&m_sperspect, &sperspect, sizeof(m_sperspect)); + m_SC = 0; + if( m_sperspect.ver >= 2 ){ + pMem->Read(&m_SC, sizeof(m_SC)); + } + if( m_sperspect.flag & 0x0000ffff ){ + if( m_pBitmap == NULL ) m_pBitmap = CreateBitmap(16, 16); + m_pBitmap->LoadFromStream(pMem); + m_OrgXW = m_pBitmap->Width; + m_OrgYW = m_pBitmap->Height; + } + m_Frame = 0; + m_FrameCol = clWhite; + if( m_sperspect.ver >= 3 ){ + pMem->Read(&m_Frame, sizeof(m_Frame)); + pMem->Read(&m_FrameCol, sizeof(m_FrameCol)); + } + } + catch(...){ + ASSERT(0); + } + delete pMem; + } + m_sperspect.ver = ver; + } + } +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetItemType(void) +{ + return (m_sperspect.flag & 0x0000ffff) ? 0x00010000 : 0x00010001; +} +//--------------------------------------------------------------------------- +LPCBYTE __fastcall CItem::CreateStorage(LPDWORD pSize) +{ + ASSERT(pSize); + + if( m_pMemStream != NULL ) delete m_pMemStream; + m_pMemStream = new TMemoryStream; + m_pMemStream->Clear(); + m_pMemStream->Write(&m_sperspect, sizeof(m_sperspect)); + m_pMemStream->Write(&m_SC, sizeof(m_SC)); + if( (m_sperspect.flag & 0x0000ffff) && (m_pBitmap != NULL) ){ + m_pBitmap->SaveToStream(m_pMemStream); + } + m_pMemStream->Write(&m_Frame, sizeof(m_Frame)); + m_pMemStream->Write(&m_FrameCol, sizeof(m_FrameCol)); + *pSize = m_pMemStream->Position; + return (LPCBYTE)m_pMemStream->Memory; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteStorage(LPCBYTE pStorage) +{ + ASSERT(pStorage); + + if( m_pMemStream != NULL ){ + ASSERT(pStorage == (LPCBYTE)m_pMemStream->Memory); + delete m_pMemStream; + m_pMemStream = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Copy(CItem *sp) +{ + ASSERT(sp); + + memcpy(&m_sperspect, &sp->m_sperspect, sizeof(m_sperspect)); + m_Frame = sp->m_Frame; + m_FrameCol = sp->m_FrameCol; + m_SC = sp->m_SC; + if( sp->m_pBitmap != NULL ){ + CopySource(sp->m_pBitmap); + } + m_Back = sp->m_Back; + m_OrgXW = sp->m_OrgXW; + m_OrgYW = sp->m_OrgYW; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::CopySource(Graphics::TBitmap *pSrc) +{ + ASSERT(pSrc); + + int xm = pSrc->Width; + int ym = pSrc->Height; + if( xm > 400 ) xm = 400; + if( ym > 320 ) ym = 320; + if( m_pBitmap == NULL ) m_pBitmap = CreateBitmap(320, 256); + KeepAspectCopy(m_pBitmap, xm, ym, pSrc, ((m_sperspect.flag & 3)!=2) ? HALFTONE : COLORONCOLOR); + m_OrgXW = m_pBitmap->Width; + m_OrgYW = m_pBitmap->Height; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::CopyFromHistory(void) +{ + ASSERT(sys.m_fLoadHistImage); + + if( m_pBitmap == NULL ) m_pBitmap = CreateBitmap(16, 16); + m_pBitmap->Handle = sys.m_fLoadHistImage(); + m_OrgXW = m_pBitmap->Width; + m_OrgYW = m_pBitmap->Height; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteSource(void) +{ + if( m_pBitmap != NULL ){ + delete m_pBitmap; + m_pBitmap = NULL; + } +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetOrgSize(void) +{ + DWORD w = m_OrgXW; + DWORD h = m_OrgYW; + return (h << 16) + w; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Draw(Graphics::TBitmap *pDest) +{ + if( m_pBitmap == NULL ) return; // No source image + + m_Back = pDest->Canvas->Pixels[0][0]; + + + Graphics::TBitmap *pSrc = m_pBitmap; + if( m_Draft ){ + int xm = pSrc->Width; + int ym = pSrc->Height; + if( xm > 80 ) xm = 80; + if( ym > 64 ) ym = 64; + pSrc = CreateBitmap(xm, ym); + KeepAspectCopy(pSrc, xm, ym, m_pBitmap, COLORONCOLOR); + } + // Do perspect + Graphics::TBitmap *pBitmap = Perspect(NULL, pSrc); + if( pSrc != m_pBitmap ) delete pSrc; + + // pBitmap -> pDest + TRect rc; + rc.Left = rc.Top = 0; + rc.Right = pDest->Width; + rc.Bottom = pDest->Height; + int Sop = ::SetStretchBltMode(pDest->Canvas->Handle, COLORONCOLOR); + pDest->Canvas->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(pDest->Canvas->Handle, Sop); + + delete pBitmap; + + // Delete source for saving resource + if( !(m_sperspect.flag & 0x0000ffff) ) DeleteSource(); + + // set transparent color to (0,0) for overlay + if( (m_sperspect.flag & 0x0000ffff) != 2 ){ + LPBYTE p = (LPBYTE)pDest->ScanLine[0]; + ASSERT(p); + *p++ = (BYTE)(DWORD(m_Back)>>16); + *p++ = (BYTE)(DWORD(m_Back)>> 8); + *p = (BYTE)(DWORD(m_Back)); + } +} +///------------------------------------------------------ +/// +///CWaitCursor クラス +/// +CWaitCursor::CWaitCursor() +{ + sv = Screen->Cursor; + Screen->Cursor = crHourGlass; +} + +CWaitCursor::~CWaitCursor() +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Delete(void) +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Wait(void) +{ + Screen->Cursor = crHourGlass; +} + + \ No newline at end of file diff --git a/CItems/PERIMG/Comlib.h b/CItems/PERIMG/Comlib.h new file mode 100644 index 0000000..22afd25 --- /dev/null +++ b/CItems/PERIMG/Comlib.h @@ -0,0 +1,129 @@ +#ifndef ComLibH +#define ComLibH +#include +#include +#include +#include +#include + +#define UseHWND 0 + +#define NDEBUG // Remove this symbol, if you would like to do debug +#include +#define ASSERT(c) assert(c) + +#define AN(c) (sizeof(c)/sizeof(c[0])) +#define ABS(c) (((c)<0)?(-(c)):(c)) +#define PI 3.1415926535897932384626433832795 + +typedef const BYTE* LPCBYTE; +typedef double* LPDOUBLE; +typedef const double* LPCDOUBLE; + +extern int MsgEng; +#define VER "PerImg Version 1.08" +#define AUT "(C) JE3HHT 2002." +#define TTL "MMSSTV custom item" +#define TTLJ "MMSSTV カスタムアイテム" // Japanese code + +// These prototypes are the functions in the MMSSTV. +// ---- Refer to the comment of the mcmFunc() --- +/*0*/typedef HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +/*1*/typedef HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +/*2*/typedef HBITMAP (__cdecl *mmLoadHistImage)(void); +/*3*/typedef int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +/*4*/typedef int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +/*5*/typedef HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +/*6*/typedef int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +/*7*/typedef int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +/*8*/typedef HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +/*9*/typedef void (__cdecl *mmMultProc)(void); +/*10*/typedef void (__cdecl *mmMultProcA)(void); +/*11*/typedef int (__cdecl *mmColorComp)(LPDWORD pCol); +/*12*/typedef HBITMAP (__cdecl *mmLoadRxImage)(void); +/*13*/typedef void (__cdecl *mmView)(HBITMAP hb); +extern mmLoadImageMenu fLoadImageMenu; +extern mmLoadHistImage fLoadHistImage; +extern mmMultProc fMultProc; + + +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw); +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc); +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap); +void __fastcall MultProc(void); + +typedef struct { // Do not change the format + int ver; + int flag; + double ax; + double ay; + double px; + double py; + double pz; + double rz; + double rx; + double ry; + double v; + double s; + double r; +}SPERSPECT; +typedef SPERSPECT* LPSPERSPECT; +typedef const SPERSPECT* LPCSPERSPECT; +//Graphics::TBitmap* __fastcall Perspect(Graphics::TBitmap* pDest, Graphics::TBitmap *pSrc, LPCSPERSPECT pPar, TColor back); + +class CItem { +public: + SPERSPECT m_sperspect; + Graphics::TBitmap *m_pBitmap; + TColor m_Back; + TMemoryStream *m_pMemStream; + int m_SC; + int m_OrgXW; + int m_OrgYW; + int m_Draft; + int m_Frame; + TColor m_FrameCol; +public: + __fastcall CItem(void); + __fastcall ~CItem(); + void __fastcall Create(LPCBYTE ps, DWORD size); + DWORD __fastcall GetItemType(void); + LPCBYTE __fastcall CreateStorage(LPDWORD psize); + void __fastcall DeleteStorage(LPCBYTE pStorage); + void __fastcall Copy(CItem *sp); + void __fastcall CopySource(Graphics::TBitmap *pSrc); + void __fastcall CopyFromHistory(void); + void __fastcall DeleteSource(void); + DWORD __fastcall GetOrgSize(void); + void __fastcall Draw(Graphics::TBitmap *pDest); + inline void __fastcall SetDraft(DWORD draft){ + m_Draft = draft; + }; + Graphics::TBitmap* __fastcall Perspect(Graphics::TBitmap* pDest, Graphics::TBitmap *pSrc); +}; +// +// +typedef struct { + DWORD m_dwVersion; + int m_WinNT; + int m_MsgEng; + mmLoadImageMenu m_fLoadImageMenu; + mmLoadHistImage m_fLoadHistImage; + mmMultProc m_fMultProc; + mmView m_fView; +}SYS; +extern SYS sys; +// +// +// +class CWaitCursor +{ +private: + TCursor sv; +public: + CWaitCursor(); + ~CWaitCursor(); + void Delete(void); + void Wait(void); +}; +#endif diff --git a/CItems/PERIMG/Item.ico b/CItems/PERIMG/Item.ico new file mode 100644 index 0000000000000000000000000000000000000000..4c2283d905e429573749cbf340a90ec3015c4fb9 GIT binary patch literal 766 zcmbu7Jr2S!424~U#LC3lC=*l8z|nfIN~lLcosf`xh47voQiBi+Y5nv0*=eOjWWbZs zQMm3qkrUz>mS7jyAbWU`3EKBHL4-0*9^jG6vMh)cs=ZPxGZ-G0=ss3X?}atz94q7; zn$&nJ>G~@8Tx8Cv5A-hehQMqneOtAG)&&KO-p&QAXm8tE7MZfH<}hsIR)Qmz7c>rN z{}mYn +#pragma hdrstop + +#include "PerDlg.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +#if UseHWND +__fastcall TPerDlgBox::TPerDlgBox(HWND hWnd) + : TForm(hWnd) +#else +__fastcall TPerDlgBox::TPerDlgBox(TComponent* AOwner) + : TForm(AOwner) +#endif +{ + m_Loaded = 0; + m_DisEvent = 1; + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Caption = VER" - "TTL; + CancelBtn->Caption = "Cancel"; + DefBtn->Caption = "Default"; + L1->Caption = "Rot.X"; + L2->Caption = "Rot.Y"; + L3->Caption = "Rot.Z"; + L4->Caption = "Move.Z"; + L5->Caption = "Move.Y"; + L6->Caption = "Move.X"; + L7->Caption = "ViewP."; + L8->Caption = "Scale.X"; + L9->Caption = "Scale.Y"; + L10->Caption = "Rot"; + L11->Caption = "Defo."; + RGSRC->Caption = "Source"; + RGSRC->Items->Strings[0] = "History"; + RGSRC->Items->Strings[1] = "Loaded image"; + RGSRC->Items->Strings[2] = "Overlay"; + ViewBtn->Caption = "Show"; + PasteBtn->Caption = "Paste"; + DefBtn->Hint = "Return to the default"; + LoadBtn->Hint = "Load image file"; + PasteBtn->Hint = "Load from the clipboard"; + ViewBtn->Hint = "Show source image"; + SBR->Hint = "Return to the default"; + L12->Caption = "Frame W."; + CBF->Items->Strings[0] = "None"; + PC->Hint = "Set frame color"; + } + else { + Caption = VER" - "TTLJ; + } + m_pBitmap = NULL; + m_pItem = NULL; + m_XC = -1; + m_Wave = 0; + for( int i = 0; i < AN(m_DirTB); i++ ){ + m_DirTB[i] = 1; + } + m_hClipNext = ::SetClipboardViewer(Handle); + ShowHint = sys.m_WinNT; + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::FormDestroy(TObject *Sender) +{ + ::ChangeClipboardChain(Handle, m_hClipNext); + if( m_pBitmap != NULL ) delete m_pBitmap; +} +//--------------------------------------------------------------------------- +int __fastcall TPerDlgBox::Execute(CItem *pItem) +{ + m_pItem = pItem; + m_Item.Copy(pItem); + if( m_Item.m_pBitmap == NULL ) m_Item.CopyFromHistory(); + m_Back = m_Item.m_Back; + LPSPERSPECT psp = &m_Item.m_sperspect; + + MultProc(); + + TBAX->Position = psp->ax * 20.0 + 0.5; + TBAY->Position = psp->ay * 20.0 + 0.5; + TBPX->Position = psp->px * 40.0; + TBPY->Position = psp->py * 40.0; + TBPZ->Position = psp->pz * 40.0; + TBRX->Position = psp->rx; + TBRY->Position = psp->ry; + TBRZ->Position = psp->rz; + TBS->Position = psp->s * 10.0 + 0.5; + TBR->Position = psp->r; + RGSRC->ItemIndex = psp->flag & 0x0000ffff; + SBSC->Position = SHORT(m_Item.m_SC); + m_Wave = psp->flag >> 16; + CBF->ItemIndex = pItem->m_Frame; + PC->Color = pItem->m_FrameCol; + + UpdateWaveBtn(0); + UpdateBitmap(); + UpdateBtn(); + m_DisEvent = 0; + MultProc(); + if( ShowModal() == IDOK ){ + MultProc(); + psp = &pItem->m_sperspect; + psp->ax = double(TBAX->Position)/20.0; + psp->ay = double(TBAY->Position)/20.0; + psp->px = double(TBPX->Position)/40.0; + psp->py = double(TBPY->Position)/40.0; + psp->pz = double(TBPZ->Position)/40.0; + psp->rx = TBRX->Position; + psp->ry = TBRY->Position; + psp->rz = TBRZ->Position; + psp->s = double(TBS->Position)/10.0; + psp->r = TBR->Position; + pItem->m_SC = SBSC->Position; + pItem->m_Frame = CBF->ItemIndex; + pItem->m_FrameCol = PC->Color; + + UpdateWaveBtn(1); + psp->flag = RGSRC->ItemIndex | (m_Wave << 16); + if( (psp->flag & 0x0000ffff) && m_Loaded && (m_Item.m_pBitmap != NULL) ){ + pItem->CopySource(m_Item.m_pBitmap); + } + return TRUE; + } + MultProc(); + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TPerDlgBox::UpdateWaveBtn(int dir) +{ + TSpeedButton *tbl[]={ + SB, SBZ1, SBZ2, SBZ3, SBZ4, SBZ5, SBZ6, SBZ7, + SBZ8, SBZ9, SBZ10, SBZ11, SBZ12, SBZ13, SBZ14, + SBZ15, SBZ16, SBZ17, SBZ18, SBZ19, SBZ20, SBZ21, + SBZ22, SBZ23, SBZ24, SBZ25, SBZ26, SBZ27, SBZ28, + SBZ29, SBZ30, SBZ31, SBZ32, SBZ33, SBZ34, SBZ35, + SBZ36, SBZ37, SBZ38, + NULL, + }; + if( dir ){ + for( int i = 0; tbl[i] != NULL; i++ ){ + if( tbl[i]->Down ){ + m_Wave = i; + break; + } + } + } + else { + if( m_Wave >= (AN(tbl)-1) ) m_Wave = 0; + tbl[m_Wave]->Down = TRUE; + } +} +//--------------------------------------------------------------------- +void __fastcall TPerDlgBox::UpdateBitmap(void) +{ + if( m_Item.m_pBitmap == NULL ) return; + + m_Item.m_sperspect.ax = double(TBAX->Position)/20.0; + m_Item.m_sperspect.ay = double(TBAY->Position)/20.0; + + m_Item.m_sperspect.px = double(TBPX->Position)/40.0; + m_Item.m_sperspect.py = double(TBPY->Position)/40.0; + m_Item.m_sperspect.pz = double(TBPZ->Position)/40.0; + + m_Item.m_sperspect.rx = TBRX->Position; + m_Item.m_sperspect.ry = TBRY->Position; + m_Item.m_sperspect.rz = TBRZ->Position; + m_Item.m_sperspect.s = double(TBS->Position)/10.0; + m_Item.m_sperspect.r = TBR->Position; + m_Item.m_SC = SBSC->Position; + m_Item.m_Frame = CBF->ItemIndex; + m_Item.m_FrameCol = PC->Color; + m_pBitmap = m_Item.Perspect(m_pBitmap, m_Item.m_pBitmap); + UpdateHint(); + UpdateTB(); + if( ShowHint ) Application->CancelHint(); +} +//--------------------------------------------------------------------- +void __fastcall TPerDlgBox::PBoxPaint(TObject *Sender) +{ + DrawBitmap(PBox, m_pBitmap); +} +//--------------------------------------------------------------------- +void __fastcall TPerDlgBox::UpdateHint(void) +{ + if( sys.m_WinNT ){ + char bf[128]; + wsprintf(bf, "VP: %d", TBS->Position); + TBS->Hint = bf; + wsprintf(bf, "SX: %d", TBAX->Position); + TBAX->Hint = bf; + wsprintf(bf, "SY: %d", TBAY->Position); + TBAY->Hint = bf; + wsprintf(bf, "PX: %d", TBPX->Position); + TBPX->Hint = bf; + wsprintf(bf, "PY: %d", TBPY->Position); + TBPY->Hint = bf; + wsprintf(bf, "PZ: %d", TBPZ->Position); + TBPZ->Hint = bf; + wsprintf(bf, "RX: %d", TBRX->Position); + TBRX->Hint = bf; + wsprintf(bf, "RY: %d", TBRY->Position); + TBRY->Hint = bf; + wsprintf(bf, "RZ: %d", TBRZ->Position); + TBRZ->Hint = bf; + wsprintf(bf, "R: %d", TBR->Position); + TBR->Hint = bf; + wsprintf(bf, "%d", SBSC->Position); + SBSC->Hint = bf; + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::DefBtnClick(TObject *Sender) +{ +#if 0 // for to get default + FILE *fp = fopen("TEST.TXT", "wt"); + fprintf(fp, "%d\n", TBAX->Position); + fprintf(fp, "%d\n", TBAY->Position); + fprintf(fp, "%d\n", TBPX->Position); + fprintf(fp, "%d\n", TBPY->Position); + fprintf(fp, "%d\n", TBPZ->Position); + fprintf(fp, "%d\n", TBRX->Position); + fprintf(fp, "%d\n", TBRY->Position); + fprintf(fp, "%d\n", TBRZ->Position); + fprintf(fp, "%d\n\n", TBS->Position); + + SPERSPECT *psp = &m_Item.m_sperspect; + fprintf(fp, "%f\n", psp->ax); + fprintf(fp, "%f\n", psp->ay); + fprintf(fp, "%f\n", psp->px); + fprintf(fp, "%f\n", psp->py); + fprintf(fp, "%f\n", psp->pz); + fprintf(fp, "%f\n", psp->rx); + fprintf(fp, "%f\n", psp->ry); + fprintf(fp, "%f\n", psp->rz); + fprintf(fp, "%f\n", psp->s); + fclose(fp); +#else + m_DisEvent++; + TBAX->Position = 60; + TBAY->Position = 60; + TBPX->Position = 0; + TBPY->Position = 0; + TBPZ->Position = 0; + TBRX->Position = 0; + TBRY->Position = 0; + TBRZ->Position = -180; + TBR->Position = 0; + TBS->Position = 23; + SBSC->Position = 0; + m_DisEvent--; + UpdateItem(); + UpdateBtn(); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::UpdateBtn(void) +{ + LoadBtn->Enabled = RGSRC->ItemIndex && sys.m_fLoadImageMenu; + PasteBtn->Enabled = RGSRC->ItemIndex && Clipboard()->HasFormat(CF_BITMAP); + ViewBtn->Visible = sys.m_fView && (m_Item.m_pBitmap != NULL); + SBSC->Enabled = !SB->Down; + SBR->Enabled = !SB->Down && SBSC->Position; +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::RGSRCClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + if( !RGSRC->ItemIndex ){ + if( m_Item.m_sperspect.flag & 0x0000ffff ) m_Item.CopyFromHistory(); + } + else if( !(m_Item.m_sperspect.flag & 0x0000ffff) ){ + if( m_pItem->m_pBitmap != NULL ){ + m_Item.CopySource(m_pItem->m_pBitmap); + m_Loaded = 0; + } + else { + m_Loaded = 1; + } + } + UpdateWaveBtn(1); + m_Item.m_sperspect.flag = RGSRC->ItemIndex | (m_Wave << 16); + UpdateBitmap(); +// PBoxPaint(NULL); + PBox->Invalidate(); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_pBitmap == NULL ) return; + + m_SCX = double(m_pBitmap->Width) / double(PBox->Width); + m_SCY = double(m_pBitmap->Height) / double(PBox->Height); + X = X * m_SCX; + Y = Y * m_SCY; + + m_XC = m_pBitmap->Width / 2; + m_YC = m_pBitmap->Height / 2; + int x = X - m_XC; + int y = m_YC - Y; + if( x || y ){ + m_Deg = atan2(y, x); + } + else { + m_Deg = 0; + } + m_Dist = sqrt(x * x + y * y); + m_SDeg = TBR->Position; + m_SDistX = TBAX->Position; + m_SDistY = TBAY->Position; +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::PBoxMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_XC > 0 ){ + X = X * m_SCX; + Y = Y * m_SCY; + + int x = X - m_XC; + int y = m_YC - Y; + double Deg; + if( x || y ){ + Deg = atan2(y, x); + } + else { + Deg = 0; + } + Deg = (m_Deg - Deg) * 180.0 / PI; + Deg += m_SDeg; + if( Deg < -180 ) Deg += 360.0; + if( Deg > 180 ) Deg -= 360.0; + TBR->Position = SHORT(Deg); + + double Dist = sqrt(x * x + y * y); + Dist = (Dist - m_Dist)/2; + int d = Dist + m_SDistX; + if( d > 201 ) d = 201; + if( d < 2 ) d = 2; + TBAX->Position = d; + d = Dist + m_SDistY; + if( d > 201 ) d = 201; + if( d < 2 ) d = 2; + TBAY->Position = d; + + UpdateItem(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_XC = -1; +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::LoadBtnClick(TObject *Sender) +{ + if( sys.m_fLoadImageMenu ){ + NoTopMost(); + CWaitCursor w; + HBITMAP hb = sys.m_fLoadImageMenu(1, 16, 16); + if( hb != NULL ){ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + pBitmap->Handle = hb; + m_Item.CopySource(pBitmap); + m_Loaded = 1; + UpdateBitmap(); + PBox->Invalidate(); + delete pBitmap; + } + TopMost(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::PasteBtnClick(TObject *Sender) +{ + NoTopMost(); + TClipboard *pCB = Clipboard(); + if (pCB->HasFormat(CF_BITMAP)){ + CWaitCursor w; + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + try + { + pBitmap->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); + m_Item.CopySource(pBitmap); + m_Loaded = 1; + UpdateBitmap(); + PBox->Invalidate(); + } + catch(...){ + ASSERT(0); + } + delete pBitmap; + } + TopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::TopMost(void) +{ +#if UseHWND + ::SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::NoTopMost(void) +{ +#if UseHWND + ::SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::FormActivate(TObject *Sender) +{ + TopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::FormDeactivate(TObject *Sender) +{ + NoTopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::ViewBtnClick(TObject *Sender) +{ + if( sys.m_fView && (m_Item.m_pBitmap != NULL) ){ + NoTopMost(); + sys.m_fView(m_Item.m_pBitmap->Handle); + TopMost(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::SBRClick(TObject *Sender) +{ + m_DisEvent++; + SBSC->Position = 0; + m_DisEvent--; + UpdateItem(); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::SBClick(TObject *Sender) +{ + UpdateWaveBtn(1); + m_Item.m_sperspect.flag = RGSRC->ItemIndex | (m_Wave << 16); + UpdateBitmap(); + PBoxPaint(NULL); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::CBFChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + UpdateItem(); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::PCClick(TObject *Sender) +{ + ColorDialog->Color = PC->Color; + if( ColorDialog->Execute() == TRUE ){ + PC->Color = ColorDialog->Color; + CBFChange(NULL); + } +} +//--------------------------------------------------------------------------- +static void __fastcall UpdateDefTB(TTrackBar *pBar, int f, int def, int &dir) +{ + if( f ){ + pBar->Position = pBar->Position + (pBar->PageSize * dir); + if( pBar->Position == pBar->Max ){ + dir = -1; + } + else if( pBar->Position == pBar->Min ){ + dir = 1; + } + } + else { + pBar->Position = def; + } + pBar->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::LDefMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button != mbLeft) && (Button != mbRight) ) return; + BOOL f = (Button != mbLeft); + + TLabel *_tt[]={L7, L8, L9, L6, L5, L4, L1, L2, L3, L10}; + + int i; + for( i = 0; i < AN(_tt); i++ ){ + if( _tt[i] == (TLabel *)Sender ) break; + } + m_DisEvent++; + switch(i){ + case 0: + UpdateDefTB(TBS, f, 23, m_DirTB[0]); + break; + case 1: + UpdateDefTB(TBAX, f, 60, m_DirTB[1]); + break; + case 2: + UpdateDefTB(TBAY, f, 60, m_DirTB[2]); + break; + case 3: + UpdateDefTB(TBPX, f, 0, m_DirTB[3]); + break; + case 4: + UpdateDefTB(TBPY, f, 0, m_DirTB[4]); + break; + case 5: + UpdateDefTB(TBPZ, f, 0, m_DirTB[5]); + break; + case 6: + UpdateDefTB(TBRX, f, 0, m_DirTB[6]); + break; + case 7: + UpdateDefTB(TBRY, f, 0, m_DirTB[7]); + break; + case 8: + UpdateDefTB(TBRZ, f, -180, m_DirTB[8]); + break; + case 9: + UpdateDefTB(TBR, f, 0, m_DirTB[9]); + break; + } + m_DisEvent--; + UpdateItem(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::UpdateTB(void) +{ + m_SBar[0] = TBS->Position; + m_SBar[1] = TBAX->Position; + m_SBar[2] = TBAY->Position; + m_SBar[3] = TBPX->Position; + m_SBar[4] = TBPY->Position; + m_SBar[5] = TBPZ->Position; + m_SBar[6] = TBRX->Position; + m_SBar[7] = TBRY->Position; + m_SBar[8] = TBRZ->Position; + m_SBar[9] = TBR->Position; +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::UpdateItem(void) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); + PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::TBSChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + TTrackBar *_tt[]={TBS, TBAX, TBAY, TBPX, TBPY, TBPZ, TBRX, TBRY, TBRZ, TBR}; + TTrackBar *pBar = (TTrackBar *)Sender; + + int i; + for( i = 0; i < AN(_tt); i++ ){ + if( _tt[i] == pBar ) break; + } + if( m_SBar[i] != pBar->Position ){ + m_SBar[i] = pBar->Position; + UpdateItem(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::SBSCChange(TObject *Sender) +{ + UpdateItem(); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::OnDrawClipboard(TMessage Message) +{ + PasteBtn->Enabled = RGSRC->ItemIndex && ::IsClipboardFormatAvailable(CF_BITMAP); + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_DRAWCLIPBOARD, Message.WParam, Message.LParam); +} +//--------------------------------------------------------------------------- +void __fastcall TPerDlgBox::OnChangeCbChain(TMessage Message) +{ + if( (HWND)Message.WParam == m_hClipNext ){ + m_hClipNext = (HWND)Message.LParam; + } + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_CHANGECBCHAIN, Message.WParam, Message.LParam); + Message.Result = 0; +} +//--------------------------------------------------------------------------- + diff --git a/CItems/PERIMG/PerDlg.dfm b/CItems/PERIMG/PerDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..4ccbb2650d3dabe0c789f0822de97729859719dc GIT binary patch literal 18902 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 BDir_# literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/PerDlg.h b/CItems/PERIMG/PerDlg.h new file mode 100644 index 0000000..4f4a398 --- /dev/null +++ b/CItems/PERIMG/PerDlg.h @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------------- +#ifndef PerSpectDlgH +#define PerSpectDlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "ComLib.h" +#include +//---------------------------------------------------------------------------- +class TPerDlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TTrackBar *TBAX; + TTrackBar *TBAY; + TTrackBar *TBRX; + TTrackBar *TBRY; + TTrackBar *TBRZ; + TPaintBox *PBox; + TTrackBar *TBS; + TTrackBar *TBPX; + TTrackBar *TBPY; + TTrackBar *TBPZ; + TLabel *L1; + TLabel *L2; + TLabel *L3; + TLabel *L4; + TLabel *L5; + TLabel *L6; + TLabel *L7; + TLabel *L8; + TLabel *L9; + TButton *DefBtn; + TRadioGroup *RGSRC; + TTrackBar *TBR; + TLabel *L10; + TPanel *Panel; + TSpeedButton *SB; + TButton *ViewBtn; + TSpeedButton *SBR; + TButton *LoadBtn; + TButton *PasteBtn; + TLabel *L11; + TComboBox *CBF; + TPanel *PC; + TLabel *L12; + TColorDialog *ColorDialog; + TSpeedButton *SBZ1; + TSpeedButton *SBZ2; + TSpeedButton *SBZ3; + TSpeedButton *SBZ4; + TSpeedButton *SBZ5; + TSpeedButton *SBZ6; + TSpeedButton *SBZ7; + TSpeedButton *SBZ25; + TSpeedButton *SBZ8; + TSpeedButton *SBZ9; + TSpeedButton *SBZ10; + TSpeedButton *SBZ11; + TSpeedButton *SBZ12; + TSpeedButton *SBZ13; + TSpeedButton *SBZ14; + TSpeedButton *SBZ15; + TSpeedButton *SBZ16; + TSpeedButton *SBZ17; + TSpeedButton *SBZ18; + TSpeedButton *SBZ24; + TSpeedButton *SBZ19; + TSpeedButton *SBZ20; + TSpeedButton *SBZ21; + TSpeedButton *SBZ22; + TSpeedButton *SBZ23; + TSpeedButton *SBZ26; + TSpeedButton *SBZ27; + TSpeedButton *SBZ28; + TSpeedButton *SBZ29; + TSpeedButton *SBZ30; + TSpeedButton *SBZ31; + TSpeedButton *SBZ32; + TSpeedButton *SBZ33; + TSpeedButton *SBZ34; + TSpeedButton *SBZ35; + TSpeedButton *SBZ36; + TSpeedButton *SBZ37; + TSpeedButton *SBZ38; + TScrollBar *SBSC; + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall TBSChange(TObject *Sender); + void __fastcall DefBtnClick(TObject *Sender); + void __fastcall RGSRCClick(TObject *Sender); + + void __fastcall FormDestroy(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall LoadBtnClick(TObject *Sender); + void __fastcall PasteBtnClick(TObject *Sender); + void __fastcall FormActivate(TObject *Sender); + void __fastcall FormDeactivate(TObject *Sender); + void __fastcall ViewBtnClick(TObject *Sender); + + void __fastcall SBRClick(TObject *Sender); + void __fastcall SBClick(TObject *Sender); + void __fastcall CBFChange(TObject *Sender); + void __fastcall PCClick(TObject *Sender); + void __fastcall LDefMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBSCChange(TObject *Sender); + +private: + int m_DisEvent; + Graphics::TBitmap *m_pBitmap; + CItem m_Item; + CItem *m_pItem; + TColor m_Back; + int m_Wave; + void __fastcall UpdateWaveBtn(int dir); + void __fastcall UpdateBitmap(void); + void __fastcall UpdateHint(void); + void __fastcall TopMost(void); + void __fastcall NoTopMost(void); + + int m_XC, m_YC; + double m_SCX, m_SCY; + double m_Deg, m_SDeg; + double m_Dist, m_SDistX, m_SDistY; + + void __fastcall UpdateBtn(void); + int m_Loaded; + + void __fastcall UpdateTB(void); + void __fastcall UpdateItem(void); + int m_SBar[10]; + int m_DirTB[10]; + + HWND m_hClipNext; + +public: +#if UseHWND + virtual __fastcall TPerDlgBox(HWND hWnd); +#else + virtual __fastcall TPerDlgBox(TComponent* AOwner); +#endif + int __fastcall Execute(CItem *pItem); + +protected: + void __fastcall OnDrawClipboard(TMessage Message); + void __fastcall OnChangeCbChain(TMessage Message); +BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(WM_DRAWCLIPBOARD, TMessage, OnDrawClipboard) + MESSAGE_HANDLER(WM_CHANGECBCHAIN, TMessage, OnChangeCbChain) +END_MESSAGE_MAP(TForm) + +}; +//---------------------------------------------------------------------------- +#endif diff --git a/CItems/PERIMG/PerImg.bpr b/CItems/PERIMG/PerImg.bpr new file mode 100644 index 0000000..9df06d6 --- /dev/null +++ b/CItems/PERIMG/PerImg.bpr @@ -0,0 +1,181 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE セクション +# --------------------------------------------------------------------------- +# プロジェクトメイクファイルの以下のセクションは、IDE によって管理されます。 +# このセクションを変更する場合は、できるだけ IDE を使用するようにして +# ください。 +# --------------------------------------------------------------------------- + +VERSION = BCB.03 +# --------------------------------------------------------------------------- +PROJECT = PerImg.dll +OBJFILES = PerImg.obj Comlib.obj About.obj PerDlg.obj +RESFILES = perimg.res +DEFFILE = +RESDEPEN = $(RESFILES) About.dfm PerDlg.dfm +LIBFILES = +LIBRARIES = VCL35.lib +SPARELIBS = VCL35.lib +PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ + QRPT35.bpi TEEUI35.bpi VCLSMP35.bpi TEEDB35.bpi TEE35.bpi ibsmp35.bpi \ + NMFAST35.bpi INETDB35.bpi INET35.bpi +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +# --------------------------------------------------------------------------- +CFLAG1 = -WD -O2 -Hc -w -Ve -d -k- -vi -c -b- -w-par -w-inl -Vx +CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm +CFLAG3 = -Tkh30000 +PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$L- -$D- -v -JPHN -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn /d_RTLDLL +LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gn +IFLAGS = +# --------------------------------------------------------------------------- +ALLOBJ = c0d32.obj sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1041 +CodePage=932 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=2 +Item0=_RTLDLL +Item1=_RTLDLL;USEPACKAGES + +[HistoryLists\hlHostApplication] +Count=1 +Item0=D:\Mmsstv\Mmsstv.exe + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication=D:\Mmsstv\Mmsstv.exe + +!endif + +# --------------------------------------------------------------------------- +# MAKE セクション +# --------------------------------------------------------------------------- +# IDE はプロジェクトファイルのこのセクションは使用していません。 +# コマンドラインの MAKE ユーティリティを使用してビルドするためのものです。 +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/CItems/PERIMG/PerImg.cpp b/CItems/PERIMG/PerImg.cpp new file mode 100644 index 0000000..eae56d5 --- /dev/null +++ b/CItems/PERIMG/PerImg.cpp @@ -0,0 +1,169 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +#include "PerDlg.h" +#include "About.h" +//--------------------------------------------------------------------------- +USEUNIT("Comlib.cpp"); +USEFORM("About.cpp", AboutDlg); +USEFORM("PerDlg.cpp", PerDlgBox); +USERC("perimg.rc"); +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + switch(reason){ + case DLL_PROCESS_ATTACH: + { + memset(&sys, 0, sizeof(sys)); + + sys.m_dwVersion = ::GetVersion(); + sys.m_WinNT = (sys.m_dwVersion < 0x80000000) ? TRUE : FALSE; + + HWND hMM = ::FindWindow("TMmsstv", NULL); + if( hMM != NULL ) Application->Handle = hMM; + } + break; + case DLL_PROCESS_DETACH: + sys.m_fMultProc = NULL; + break; + } + return 1; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmLanguage(DWORD lang) +{ + sys.m_MsgEng = lang; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmAboutDialog(HWND hWnd) +{ +#if UseHWND + TAboutDlg *pBox = new TAboutDlg(hWnd); +#else + TAboutDlg *pBox = new TAboutDlg(NULL); +#endif + pBox->ShowModal(); + delete pBox; +#if UseHWND + ::SetForegroundWindow(hWnd); +#endif +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HANDLE mcmCreateObject(LPCBYTE pStorage, DWORD Size) +{ + CItem *pItem = new CItem; + ASSERT(pItem); + if( pItem != NULL ) pItem->Create(pStorage, Size); + return (HANDLE)pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetItemType(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetItemType(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCBYTE mcmCreateStorage(HANDLE hObj, LPDWORD pSize) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->CreateStorage(pSize); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteStorage(HANDLE hObj, LPCBYTE pStorage) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->DeleteStorage(pStorage); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteObject(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + if( pItem != NULL ) delete pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmEdit(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + +#if UseHWND + TPerDlgBox *pBox = new TPerDlgBox(hWnd); +#else + TPerDlgBox *pBox = new TPerDlgBox(NULL); +#endif + DWORD r = (DWORD)pBox->Execute(pItem); + delete pBox; +#if UseHWND + ::SetForegroundWindow(hWnd); +#endif + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetOrgSize(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetOrgSize(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCSTR mcmGetUserText(HANDLE hObj) +{ + ASSERT(0); // This function should not be called + return ""; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hDest, LPCSTR pText) +{ + ASSERT(0); // This function should not be called + return NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hDest, HBITMAP hSrc) +{ + ASSERT(hObj); + ASSERT(hDest); + CItem *pItem = (CItem *)hObj; + if( (hSrc != NULL) && !(pItem->m_sperspect.flag & 0x0000ffff) ){ + // Copy hSrc to the object + Graphics::TBitmap *pSrc = new Graphics::TBitmap; + pSrc->Handle = hSrc; + pItem->CopySource(pSrc); + pSrc->ReleaseHandle(); + delete pSrc; + } + + // Draw object to hDest + Graphics::TBitmap *pDest = new Graphics::TBitmap; + pDest->Handle = hDest; + pItem->Draw(pDest); + + HBITMAP hb = pDest->ReleaseHandle(); + ASSERT(hb); + delete pDest; + return (hb != hDest) ? hb : NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetDraft(HANDLE hObj, DWORD draft) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->SetDraft(draft); +} diff --git a/CItems/PERIMG/PerSpect.cpp b/CItems/PERIMG/PerSpect.cpp new file mode 100644 index 0000000..eaf2ed9 --- /dev/null +++ b/CItems/PERIMG/PerSpect.cpp @@ -0,0 +1,287 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "PerSpect.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TPerSpectDlg::TPerSpectDlg(TComponent* AOwner) + : TForm(AOwner) +{ + m_Loaded = 0; + m_DisEvent = 1; + if( MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Caption = VER" - "TTL; + CancelBtn->Caption = "Cancel"; + DefBtn->Caption = "Default"; + L1->Caption = "Rot.X"; + L2->Caption = "Rot.Y"; + L3->Caption = "Rot.Z"; + L4->Caption = "Move.Z"; + L5->Caption = "Move.Y"; + L6->Caption = "Move.X"; + L7->Caption = "ViewP."; + L8->Caption = "Scale.X"; + L9->Caption = "Scale.Y"; + L10->Caption = "Rot"; + RGSRC->Caption = "Source"; + RGSRC->Items->Strings[0] = "History"; + RGSRC->Items->Strings[1] = "Loaded image"; + RGSRC->Items->Strings[2] = "Overlay"; + PasteBtn->Caption = "Paste"; + } + else { + Caption = VER" - "TTLJ; + } + pBitmap = NULL; + m_pObj = NULL; + m_XC = -1; +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::FormDestroy(TObject *Sender) +{ + if( pBitmap != NULL ) delete pBitmap; +} +//--------------------------------------------------------------------------- +int __fastcall TPerSpectDlg::Execute(CObj *pObj) +{ + m_pObj = pObj; + m_Obj.Copy(pObj); + m_Back = m_Obj.m_Back; + LPSPERSPECT psp = &m_Obj.m_sperspect; + + TBAX->Position = psp->ax * 20.0; + TBAY->Position = psp->ay * 20.0; + TBPX->Position = psp->px * 40.0; + TBPY->Position = psp->py * 40.0; + TBPZ->Position = psp->pz * 40.0; + TBRX->Position = psp->rx; + TBRY->Position = psp->ry; + TBRZ->Position = psp->rz; + TBS->Position = psp->s * 10.0; + TBR->Position = psp->r; + RGSRC->ItemIndex = psp->flag; + + UpdateBitmap(); + UpdateBtn(); + m_DisEvent = 0; + if( ShowModal() == IDOK ){ + psp = &pObj->m_sperspect; + psp->ax = double(TBAX->Position)/20.0; + psp->ay = double(TBAY->Position)/20.0; + psp->px = double(TBPX->Position)/40.0; + psp->py = double(TBPY->Position)/40.0; + psp->pz = double(TBPZ->Position)/40.0; + psp->rx = TBRX->Position; + psp->ry = TBRY->Position; + psp->rz = TBRZ->Position; + psp->s = double(TBS->Position)/10.0; + psp->r = TBR->Position; + psp->flag = RGSRC->ItemIndex; + if( psp->flag && m_Loaded && (m_Obj.pBitmap != NULL) ){ + pObj->CopySource(m_Obj.pBitmap); + } + return TRUE; + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TPerSpectDlg::UpdateBitmap(void) +{ + if( m_Obj.pBitmap == NULL ) return; + + m_Obj.m_sperspect.ax = double(TBAX->Position)/20.0; + m_Obj.m_sperspect.ay = double(TBAY->Position)/20.0; + + m_Obj.m_sperspect.px = double(TBPX->Position)/40.0; + m_Obj.m_sperspect.py = double(TBPY->Position)/40.0; + m_Obj.m_sperspect.pz = double(TBPZ->Position)/40.0; + + m_Obj.m_sperspect.rx = TBRX->Position; + m_Obj.m_sperspect.ry = TBRY->Position; + m_Obj.m_sperspect.rz = TBRZ->Position; + m_Obj.m_sperspect.s = double(TBS->Position)/10.0; + m_Obj.m_sperspect.r = TBR->Position; + + pBitmap = Perspect(pBitmap, m_Obj.pBitmap, &m_Obj.m_sperspect, m_Back); +} +//--------------------------------------------------------------------- +void __fastcall TPerSpectDlg::PBoxPaint(TObject *Sender) +{ + DrawBitmap(PBox, pBitmap); +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::TBAXChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); + PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::DefBtnClick(TObject *Sender) +{ +#if 0 // for to get default + FILE *fp = fopen("TEST.TXT", "wt"); + fprintf(fp, "%d\n", TBAX->Position); + fprintf(fp, "%d\n", TBAY->Position); + fprintf(fp, "%d\n", TBPX->Position); + fprintf(fp, "%d\n", TBPY->Position); + fprintf(fp, "%d\n", TBPZ->Position); + fprintf(fp, "%d\n", TBRX->Position); + fprintf(fp, "%d\n", TBRY->Position); + fprintf(fp, "%d\n", TBRZ->Position); + fprintf(fp, "%d\n\n", TBS->Position); + + SPERSPECT *psp = &m_Obj.m_sperspect; + fprintf(fp, "%f\n", psp->ax); + fprintf(fp, "%f\n", psp->ay); + fprintf(fp, "%f\n", psp->px); + fprintf(fp, "%f\n", psp->py); + fprintf(fp, "%f\n", psp->pz); + fprintf(fp, "%f\n", psp->rx); + fprintf(fp, "%f\n", psp->ry); + fprintf(fp, "%f\n", psp->rz); + fprintf(fp, "%f\n", psp->s); + fclose(fp); +#else + m_DisEvent++; + TBAX->Position = 59; + TBAY->Position = 59; + TBPX->Position = 0; + TBPY->Position = 0; + TBPZ->Position = 0; + TBRX->Position = 0; + TBRY->Position = 0; + TBRZ->Position = -180; + TBR->Position = 0; + TBS->Position = 23; + m_DisEvent--; + TBAXChange(NULL); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::UpdateBtn(void) +{ + LoadBtn->Enabled = RGSRC->ItemIndex && fLoadImageMenu; + PasteBtn->Enabled = LoadBtn->Enabled && Clipboard()->HasFormat(CF_BITMAP); +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::RGSRCClick(TObject *Sender) +{ + if( !RGSRC->ItemIndex ){ + if( m_Obj.m_sperspect.flag && fLoadHistImage ){ + if( m_Obj.pBitmap == NULL ) m_Obj.pBitmap = CreateBitmap(16, 16); + m_Obj.pBitmap->Handle = fLoadHistImage(); + } + } + else if( !m_Obj.m_sperspect.flag ){ + if( m_pObj->pBitmap != NULL ) m_Obj.CopySource(m_pObj->pBitmap); + } + m_Obj.m_sperspect.flag = RGSRC->ItemIndex; + UpdateBitmap(); + PBox->Invalidate(); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_XC = PBox->Width / 2; + m_YC = PBox->Height / 2; + int x = X - m_XC; + int y = m_YC - Y; + if( x || y ){ + m_Deg = atan2(y, x); + } + else { + m_Deg = 0; + } + m_Dist = sqrt(x * x + y * y); + m_SDeg = TBR->Position; + m_SDistX = TBAX->Position; + m_SDistY = TBAY->Position; +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::PBoxMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_XC > 0 ){ + int x = X - m_XC; + int y = m_YC - Y; + double Deg; + if( x || y ){ + Deg = atan2(y, x); + } + else { + Deg = 0; + } + Deg = (m_Deg - Deg) * 180.0 / PI; + Deg += m_SDeg; + if( Deg < -180 ) Deg += 360.0; + if( Deg > 180 ) Deg -= 360.0; + TBR->Position = SHORT(Deg); + + double Dist = sqrt(x * x + y * y); + Dist = (Dist - m_Dist)/2; + int d = Dist + m_SDistX; + if( d > 201 ) d = 201; + if( d < 2 ) d = 2; + TBAX->Position = d; + d = Dist + m_SDistY; + if( d > 201 ) d = 201; + if( d < 2 ) d = 2; + TBAY->Position = d; + + TBAXChange(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_XC = -1; +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::LoadBtnClick(TObject *Sender) +{ + if( fLoadImageMenu ){ + HBITMAP hb = fLoadImageMenu(1, 320, 256); + if( hb != NULL ){ + if( m_Obj.pBitmap == NULL ) m_Obj.pBitmap = CreateBitmap(16, 16); + m_Obj.pBitmap->Handle = hb; + m_Loaded = 1; + TBAXChange(NULL); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::PasteBtnClick(TObject *Sender) +{ + TClipboard *pCB = Clipboard(); + if (pCB->HasFormat(CF_BITMAP)){ + Graphics::TBitmap *pbmp = new Graphics::TBitmap; + try + { + pbmp->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); + m_Obj.CopySource(pbmp); + m_Loaded = 1; + TBAXChange(NULL); + } + catch(...){ + } + delete pbmp; + } +} +//--------------------------------------------------------------------------- +void __fastcall TPerSpectDlg::TimerTimer(TObject *Sender) +{ + if( LoadBtn->Enabled ){ + PasteBtn->Enabled = Clipboard()->HasFormat(CF_BITMAP); + } +} +//--------------------------------------------------------------------------- + diff --git a/CItems/PERIMG/PerSpect.dfm b/CItems/PERIMG/PerSpect.dfm new file mode 100644 index 0000000000000000000000000000000000000000..ecfbba1788999e2c298b4abb4fff6f51f2b54b05 GIT binary patch literal 4138 zcmcgv%a7Yc7ignips1ro3-M2f<0-o zy|Ly%RkVOsr4pk50Rkaa;>MjG5aLEFu3Q22#HozOkIa^RbhBv>iRSazzwh_^zM1cv zxt|wIeZFPr^A)pNUliu1pO_ZtqlLMGsUy$mBa2j>j>e6%b+ksr7c!!W`{GSOD`T%s z-y|Cjl9g4zYC{Ki3KhpjE?Gi$XPt>vlIppPa&vuDnK}ucf<7Mn3iCJw$ZMs$D6Ay35)T!5t zjiPQ3k>k^F)Ld&F4D%tYn9p%RHFZb<%Xpa8!#@_OQ!G+I$wlJd$w+Zjgp5=fcs|vr zTApEFK_$o0nr;IRd{o7kUAY*7q-HYJz?Tp=6`GVRd+pu6tfk*jqv+}SlRW6ZM*uy?fxgUx&Sb`CdY%J)g$KPg9@9_nY=1Y)gP!6+zd8aaFaK2z6b#2w z&xrDQdM(0yI!r#0W6b9cll$z}we5>sJYVNo&W^?M^X}H29joaL9&=%Q%uzJO`iZ#+ zbcU__x02O#IPKxO7X;ZX4+z0-u6d?RTm~!t7S+Yo1XoXD`b@fOK=X`TMQd>25LIj7 zHgsCZrv}IoF*RcS{zK&^ zKgx};e{R%C%i(h)CSBsO$;nSz&UtRBiBHBme`0cIKKDCn<%NG@ai#V6callT6Dm54CGJEeBLIY0_GD?3(R8iU4>tV&qAS*|BGS zc)Vhiql-yezeF2((wRYSug07<6@nW52-DwZL4|A5g_K~P(TMqtP7$>K^P$ z+P-j|Y<|Csvty~VVuBiblT6d@Auq@Nm0EZKz62fdSDAjnp3&n}_yYTjve;)U`a^nB G6#fGcQ4ml7 literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/PerSpect.h b/CItems/PERIMG/PerSpect.h new file mode 100644 index 0000000..f7b8f67 --- /dev/null +++ b/CItems/PERIMG/PerSpect.h @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------------- +#ifndef PerSpectDlgH +#define PerSpectDlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "ComLib.h" +//---------------------------------------------------------------------------- +class TPerSpectDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TTrackBar *TBAX; + TTrackBar *TBAY; + TTrackBar *TBRX; + TTrackBar *TBRY; + TTrackBar *TBRZ; + TPaintBox *PBox; + TTrackBar *TBS; + TTrackBar *TBPX; + TTrackBar *TBPY; + TTrackBar *TBPZ; + TLabel *L1; + TLabel *L2; + TLabel *L3; + TLabel *L4; + TLabel *L5; + TLabel *L6; + TLabel *L7; + TLabel *L8; + TLabel *L9; + TButton *DefBtn; + TRadioGroup *RGSRC; + TTrackBar *TBR; + TLabel *L10; + TButton *LoadBtn; + TButton *PasteBtn; + TTimer *Timer; + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall TBAXChange(TObject *Sender); + void __fastcall DefBtnClick(TObject *Sender); + void __fastcall RGSRCClick(TObject *Sender); + + void __fastcall FormDestroy(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall LoadBtnClick(TObject *Sender); + void __fastcall PasteBtnClick(TObject *Sender); + void __fastcall TimerTimer(TObject *Sender); + +private: + int m_DisEvent; + Graphics::TBitmap *pBitmap; + CObj m_Obj; + CObj *m_pObj; + TColor m_Back; + void __fastcall UpdateBitmap(void); + + int m_XC, m_YC; + double m_Deg, m_SDeg; + double m_Dist, m_SDistX, m_SDistY; + + void __fastcall UpdateBtn(void); + int m_Loaded; +public: + virtual __fastcall TPerSpectDlg(TComponent* AOwner); + + int __fastcall Execute(CObj *pObj); +}; +//---------------------------------------------------------------------------- +#endif diff --git a/CItems/PERIMG/perimg.rc b/CItems/PERIMG/perimg.rc new file mode 100644 index 0000000..0e32c13 --- /dev/null +++ b/CItems/PERIMG/perimg.rc @@ -0,0 +1,2 @@ +8000 ICON DISCARDABLE "Item.ico" + \ No newline at end of file diff --git a/CItems/PERIMG/perimg.res b/CItems/PERIMG/perimg.res new file mode 100644 index 0000000000000000000000000000000000000000..5f5245c0dfa69b09fc28f8efe28f6f92c805db27 GIT binary patch literal 860 zcmbtT%WA|h3{={}-bxO=$N1Ef=_l-`<-Y<;K4r;ip`c%IXC%i_pzLJ@dW>eI7-EZv zBzUdvC{Oly+xd5B2II!@kbI*|@GE?f4@8j}GymHR63je%LPRO+x+0U{A(*NsL_Zgs zXUpk~x14kA5a%FL!$(WEz2S2ab54DrtJDPnQ&9R^wSlGr0}O4)1y~_(Ypsfyv~CtK zY~$8KAS^p*I6ymB#26?~@y5gH@3P!n=6Hd%vBDg%wV&dlxrX_98E=xOg+ Goc#crg=X;p literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBB.bmp b/CItems/PERIMG/res/SBB.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6d1f4faecee2212a4ae58255095f342c4527aa06 GIT binary patch literal 246 zcmb7-u?@f=3H>CXn_6V; zLF)cxNEoIx07ol1XOKbbS6X8S;qVD|vs?!(6rEcsAxf06AVB(G&goDW!z}-H?0D~d E0Gfqn@c;k- literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBC.bmp b/CItems/PERIMG/res/SBC.bmp new file mode 100644 index 0000000000000000000000000000000000000000..39683d61b93d204b4d5d68910b8bd4050ee4f7c5 GIT binary patch literal 246 zcmb77u?>JQ3^Ni^w~8~kgPmVG!P?V$3KwK#Ep}2dvEbHr8cX%I-v}JEm0SiV%pO$N zFJYpv)-WnZwASbfx?l9JiR96Wat@^M0^b1HkP7U|_R8 A@c;k- literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBD.bmp b/CItems/PERIMG/res/SBD.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bdba52d341f2789422ebdda987e8e11eb677d0f6 GIT binary patch literal 246 zcmbV_I}UJbnsgpPO&&tdOfsI=v19EB55+Tz>A#Ky{j`D7=s+kR=_z*e|CoHTop zUB86J%AALxM3qu-E4p9xZV7U1gq$x@@T^#wCN-cC&04F`?U&nIsKB39zEK*x&U6E~ CMP~5; literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBE.bmp b/CItems/PERIMG/res/SBE.bmp new file mode 100644 index 0000000000000000000000000000000000000000..992aef92a3b726dbaf154305fab3d21718e02fe9 GIT binary patch literal 246 zcmZvVyAgmO5Jb-zXUrJOunu#3A@Wj6qZBJ3G{xNoO!VMB`F8nNn-07%k_FPNQmDt(=fpL@54^xQNAYX$YlU0I?tdAPFP^BmssV{(GK)_kFzQ I{e6An57*;hZvX%Q literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBF.bmp b/CItems/PERIMG/res/SBF.bmp new file mode 100644 index 0000000000000000000000000000000000000000..769f4adff7f9b473ed6f5cec5e40aa2e4dbdfab5 GIT binary patch literal 246 zcmZvVu?>JQ3DmzbI`L(D$-`OjKTyiX~X{;Q<22~&b?&s$DRC~uno1oHKkcW zll}=3hON0l(Wc%zoWambW3WTv5z>% literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBG.bmp b/CItems/PERIMG/res/SBG.bmp new file mode 100644 index 0000000000000000000000000000000000000000..37059fca0c7ed0398771c9214773202139fac374 GIT binary patch literal 246 zcmairyA6Oa3`C8DlnyZlbI`MkE8J$ZjN%Dg(uU_iiNq!Man9L~OCFrq2G^I9%%iA7 zzl0{sS|3A+(ptl_=;KQ7nII>h5c`9&BE@WpqT!|yzC;w5aOOmz2X3YWXWvxv+aGQ% CXITFL literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBH.bmp b/CItems/PERIMG/res/SBH.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6a19934c3cce4b850435ce9ba3fe73a32b3b12b5 GIT binary patch literal 246 zcmZvVJq~~%3`T2W!e%^%=WzEfOtNw`j=~8#y5cL)#KFSX_oYASc|9`X1_#=w7Fl~E z_xzXWSTpAVGFD0{&>F3OY0VtsS&5WV6bT7zsucq;DH>FRbE7zAHGH+%5BsdoRNr$l KOR(d2=G_->UuFXU literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBI.bmp b/CItems/PERIMG/res/SBI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..49be86cb61eca19028e41619725eeaa59ac70483 GIT binary patch literal 246 zcma)#F%Ezr3`J{V!bUuX=WzEfOm^+jdK6C3(G`CS#Kl3N|NZjQ^f+(o=K^-rHfo_Y z0tx*RBp!-%Kw(K$K@VCyYRw%A*S{dlg(xwQ%_P2<^ w5;iJp4WlxmwMJJl{9_Cyl20RwO{DNL2gn|9=gtLmy5qN(*iQxp9oJp67erQO@c;k- literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBL.bmp b/CItems/PERIMG/res/SBL.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3a3256102174e1f324043d5d0942144111cccc3b GIT binary patch literal 246 zcmZuqu?>JQ3=0wxTf`aM!Okz4VC`u=r59vmEsom?36VCoWk>RU+|uR*ZP>N%Br}6V z`~xHrrql=sDLH3w1eITE4TZ%E3vj(-3$JQ3=0wxTf`aM!Okz8$lB9#N-xOB8l0xxSa54QjV1TI9!lJ>1KbA}T6<8t zehHEYYfXbJg2t_e5xz0F-bJ)9!m9#h7jdBxE+MW+itt0Vlu}SDw0@;EbAV$hD0xItoJg#vCaGtvFKWOih^wZACK@cw48rX54wfH% NShY0z+2{NHzZ-()V^shE literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBP.bmp b/CItems/PERIMG/res/SBP.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4871f9b9a00a9857315af27f77375ec240bb3563 GIT binary patch literal 246 zcmZupF%p0v46AqEv3Wkjcewi(CcE-9p27u`sDUPJQrM5nI!?%jT1QPbD@fu$ zLc%bmE?~5lbA~c#y4D&y6b>zr4@CGxtU`IKFY?1jwOHIA)k46pd_YBjSO!NJeRSt| E17hG~n*aa+ literal 0 HcmV?d00001 diff --git a/CItems/PERIMG/res/SBQ.bmp b/CItems/PERIMG/res/SBQ.bmp new file mode 100644 index 0000000000000000000000000000000000000000..caa44575697c11bcb074992582e035684fab3df4 GIT binary patch literal 246 zcmZvVu?>JQ3DmzbI`L(D%@tYjKTyiX~X{;8o-JFtba>hw=+fUz=EFd9@40w zO8*22!&(DSjH$H-GU)oLcTQ+LS`b4`6ti*!v&$&%GP1jjo3Ir;q|JpF6=U&3+-Jop FvkOfDW19c~ literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/About.cpp b/CItems/QSLBox/About.cpp new file mode 100644 index 0000000..205c6d9 --- /dev/null +++ b/CItems/QSLBox/About.cpp @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "About.h" +#include "ComLib.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TAboutDlg *AboutDlg; +//--------------------------------------------------------------------- +__fastcall TAboutDlg::TAboutDlg(HWND hWnd) + : TForm(hWnd) +{ + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Caption = TTL; + } + else { + Caption = TTLJ; + } + LVer->Caption = VER" "AUT; + HICON hIcon = ::LoadIcon(HInstance, (LPCSTR)8000); + TIcon *pIcon = new TIcon; + pIcon->Handle = hIcon; + Image->Picture->Icon = pIcon; +} +//--------------------------------------------------------------------- + diff --git a/CItems/QSLBox/About.dfm b/CItems/QSLBox/About.dfm new file mode 100644 index 0000000000000000000000000000000000000000..0e17e4bb773fb3cc9fd5473bbee3435df25ee6c4 GIT binary patch literal 484 zcmX|;!BWC75Qam5wop{`;!&PJxp{_SrGm6WBOINSE|8g!FliX^3Qypp`37FR`U+Z7 zFo#V3*>86L{qtK#q|*&wNN@Ov+Re`rLL~CrHPT7sM)&x_IXx;vnCtRgsZ8X${EghM zR4J%fzjLsiB_rMz7g1J*A$LTe`-dJ=nAZh9p9`C7&^1t7fK8>o7un9%Wz=FY9P97zF|QK@qlu`Tc{0u_ka5^w8=@yEee$Rb0U z0Iv)upiCV2{*VT~u9^*T)%r(sHdxUGRLxz$j)9v;xOIYC2-&2&(OQaXIOu9oB>iEM s#+OIjKjAmFN7sk7EF2E(9?a>6>zey4Q_9DX +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TAboutDlg : public TForm +{ +__published: + TButton *OKBtn; + TLabel *LVer; + TImage *Image; +private: +public: + virtual __fastcall TAboutDlg(HWND hWnd); +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TAboutDlg *AboutDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/CItems/QSLBox/Comlib.cpp b/CItems/QSLBox/Comlib.cpp new file mode 100644 index 0000000..85e17a5 --- /dev/null +++ b/CItems/QSLBox/Comlib.cpp @@ -0,0 +1,2165 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "TextDlg.h" +SYS sys; +// +//--------------------------------------------------------------------------- +//void mcmFunc(DWORD index, FARPROC pFunc) +// +//MMSSTV calls this function at the first time, if the function was exported. +//You can use following functions which are in the MMSSTV. +// +// index : Index of the function. +// pFunc : Address of the function. +// +//indexes and functions are as follows. +// +// 0 : HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 1 : HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +// pName is a pathname of the image (BMP, JPG, WMF) +// +// 2 : HBITMAP (__cdecl *mmLoadHistImage)(void); +// +// 3 : int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +// pName is a filename of the image (BMP, JPG) +// pFolder is a folder name (if it is NULL, MMSSTV uses a default) +// +// 4 : int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +// pName is a pathname of the image (BMP, JPG) +// +// 5 : HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 6 : int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +// Invoke macro dialog box and can choose keyword +// +// 7 : int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +// Convert macro keyword (pSrc) to the text (pDest) +// +// 8 : HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +// Create 24bit DIB +// +// 9 : void (__cdecl *mmMultProc)(void); +// 10 : void (__cdecl *mmMultProcA)(void); +// Do decoding and encoding with the DSP in MMSSTV +// +// 11 : int (__cdecl *mmColorComp)(LPDWORD pCol); +// Invoke color components dialog and can choose a color component +// +extern "C" __declspec(dllexport) +void mcmFunc(DWORD index, FARPROC pFunc) +{ + switch(index){ + case 6: + sys.m_fGetMacKey = (mmGetMacKey)pFunc; + break; + case 7: + sys.m_fConvMac = (mmConvMac)pFunc; + break; + case 9: + sys.m_fMultProc = (mmMultProc)pFunc; + break; + case 11: + sys.m_fColorComp = (mmColorComp)pFunc; + break; + default: + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall MultProc(void) +{ + if( sys.m_fMultProc ) sys.m_fMultProc(); +} +//--------------------------------------------------------------------------- +char __fastcall LastC(LPCSTR p) +{ + char c = 0; + + if( *p ){ + c = *(p + strlen(p) - 1); + } + return c; +} +//--------------------------------------------------------------------------- +void __fastcall SetCurDir(LPSTR t, int size) +{ + if( !::GetCurrentDirectory(size-1, t) ){ + *t = 0; + } + else { + if( LastC(t) != '\\' ){ + strcat(t, "\\"); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall SetDirName(LPSTR t, LPCSTR pName) +{ + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + strncpy(t, Dir.c_str(), 128); +} +///---------------------------------------------------------------- +void __fastcall Yen2CrLf(AnsiString &ws, AnsiString cs) +{ + ws = ""; + LPCSTR p; + int f; + int dlm = 0; + + p = cs.c_str(); + if( *p == 0x22 ){ + p++; + dlm++; + } + for( f = 0; *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == '\\' ){ + switch(*(p+1)){ + case 'r': + ws += "\r"; + p++; + break; + case 'n': + ws += "\n"; + p++; + break; + case 't': + ws += "\t"; + p++; + break; + case '\\': + ws += "\\"; + p++; + break; + default: + p++; + ws += *p; + break; + } + } + else if( !dlm || (*p!=0x22) || *(p+1) ){ + ws += *p; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall CrLf2Yen(AnsiString &ws, AnsiString cs) +{ + ws = "\x22"; + LPCSTR p; + int f = 0; + + for( p = cs.c_str(); *p; p++ ){ + if( f ){ + ws += *p; + f = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == 0x0d ){ + ws += "\\r"; + } + else if( *p == 0x0a ){ + ws += "\\n"; + } + else if( *p == '\t' ){ + ws += "\\t"; + } + else if( *p == '\\' ){ + ws += "\\\\"; + } + else { + ws += *p; + } + } + ws += "\x22"; +} +//--------------------------------------------------------------------------- +void __fastcall LoadStringsFromIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TIniFile *pIniFile = new TIniFile(fname); + int count = pIniFile->ReadInteger(pSect, "Count", 0); + int i; + AnsiString as; + for( i = 0; i < count; i++ ){ + char bf[32]; + sprintf(bf, "Text%u", i); + as = pIniFile->ReadString(pSect, bf, ""); + if( !as.IsEmpty() ){ + pList->Add(as.c_str()); + } + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall SaveStringsToIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TIniFile *pIniFile = new TIniFile(fname); + pIniFile->WriteInteger(pSect, "Count", pList->Count); + int i; + for( i = 0; i < pList->Count; i++ ){ + char bf[32]; + sprintf(bf, "Text%u", i); + pIniFile->WriteString(pSect, bf, pList->Strings[i]); + } + delete pIniFile; +} +//--------------------------------------------------------------------- +void __fastcall InitCustomColor(TColorDialog *tp) +{ + tp->CustomColors->Text = ""; +} +//--------------------------------------------------------------------- +void __fastcall AddCustomColor(TColorDialog *tp, TColor col) +{ + char bf[256]; + + sprintf(bf, "Color%c=%06lX", tp->CustomColors->Count + 'A', DWORD(col) & 0x00ffffff); + tp->CustomColors->Add(bf); +} +//--------------------------------------------------------------------- +LPSTR __fastcall ZeroConv(LPCSTR p, BYTE charset) +{ + LPSTR bp = new char[(strlen(p)*2) + 1]; + LPSTR t = bp; + int f = 0; + for( ; *p; p++ ){ + if( f ){ + *t++ = *p; + f = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + *t++ = *p; + f = 1; + } + else if( *p == '0' ){ + switch(charset){ + case SHIFTJIS_CHARSET: + *t++ = 0x83; + *t++ = 0xd3; + break; + case HANGEUL_CHARSET: + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case CHINESEBIG5_CHARSET: // 台湾 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 134: // 中国語簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + switch(sys.m_CodePage){ + case 949: // HANGEUL + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case 950: // CHINESEBIG5 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 936: // CHINESE 簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + *t++ = 'リ'; + break; + } + break; + } + } + else { + *t++ = *p; + } + } + *t = 0; + return bp; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = xw; + pBitmap->Height = yw; + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall FillBitmap(Graphics::TBitmap *pDest, UCOL ucol) +{ + TRect rc; + rc.Left = rc.Top = 0; + rc.Right = pDest->Width; + rc.Bottom = pDest->Height; + pDest->Canvas->Brush->Color = ucol.c; + pDest->Canvas->FillRect(rc); +} +//--------------------------------------------------------------------------- +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc) +{ + pDest->Width = pSrc->Width; + pDest->Height = pSrc->Height; + pDest->Palette = NULL; + pDest->Canvas->Draw(0, 0, pSrc); +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspect(int &sx, int &sy, int bx, int by) +{ + double ass = double(sx) / double(sy); + double asb = double(bx) / double(by); + if( asb < ass ){ // ソースの方が横長 + sx = (double(sy) * asb) + 0.5; + } + else { + sy = (double(sx) / asb) + 0.5; + } +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspectCopy(Graphics::TBitmap *pDest, int xm, int ym, Graphics::TBitmap *pSrc, int mode) +{ + if( (xm < pSrc->Width) || (ym < pSrc->Height) ){ + KeepAspect(xm, ym, pSrc->Width, pSrc->Height); + pDest->Width = xm; + pDest->Height = ym; + pDest->Palette = NULL; + TRect tc; + tc.Left = tc.Top = 0; + tc.Right = xm; tc.Bottom = ym; + int Sop = ::SetStretchBltMode(pDest->Canvas->Handle, mode); + pDest->Canvas->StretchDraw(tc, pSrc); + ::SetStretchBltMode(pDest->Canvas->Handle, Sop); + } + else { + CopyBitmap(pDest, pSrc); + } +} +//--------------------------------------------------------------------------- +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap) +{ + if( pBitmap == NULL ) return; + + if( (pBitmap->Width != pBox->Width)||(pBitmap->Height != pBox->Height) ){ + TRect rc; + rc.Left = 0; rc.Right = pBox->Width; + rc.Top = 0, rc.Bottom = pBox->Height; + int Sop = ::SetStretchBltMode(pBox->Canvas->Handle, HALFTONE); + pBox->Canvas->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(pBox->Canvas->Handle, Sop); + } + else { + pBox->Canvas->Draw(0, 0, pBitmap); + } +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetUniqueColor(HDC hdc, UCOL ucol) +{ + ucol.d = ucol.d & 0x00e0e0e0; + UCOL c = ucol; + + while(c.d == ucol.d){ +#if (RANDMAX >= 0x00ffffff) + c.d = rand() & 0x00e0e0e0; +#else + c.b.r = (BYTE)(rand() & 0x00e0); + c.b.g = (BYTE)(rand() & 0x00e0); + c.b.b = (BYTE)(rand() & 0x00e0); +#endif + } + c.d = GetNearestColor(hdc, (COLORREF)c.d); + return c; +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetGrade2(UCOL s[2], int x, int xw) +{ + if( x < 0 ) x = 0; + if( x > xw ) x = xw; + UCOL r; + int c = s[0].b.b + ((int(s[1].b.b) - int(s[0].b.b)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.b = BYTE(c); + c = s[0].b.g + ((int(s[1].b.g) - int(s[0].b.g)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.g = BYTE(c); + c = s[0].b.r + ((int(s[1].b.r) - int(s[0].b.r)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.r = BYTE(c); + return r; +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetGrade4(UCOL s[4], int x, int xw) +{ + int xw3 = xw/3; + if( x < xw3 ){ + return GetGrade2(s, x, xw3); + } + x -= xw3; + if( x < xw3 ){ + return GetGrade2(&s[1], x, xw3); + } + x -= xw3; + return GetGrade2(&s[2], x, xw3); +} +//--------------------------------------------------------------------------- +void __fastcall WriteString(TStream *ps, AnsiString &as) +{ + int len = as.Length(); + ps->Write(&len, sizeof(len)); + if( len ){ + ps->Write(as.c_str(), len); + } +} +void __fastcall ReadString(TStream *ps, AnsiString &as) +{ + as = ""; + int len; + ps->Read(&len, sizeof(len)); + if( len ){ + LPSTR p = new char[len+1]; + ps->Read(p, len); + p[len] = 0; + as = p; + delete p; + } +} +//--------------------------------------------------------------------------- +int FontStyle2Code(TFontStyles style) +{ + int code = 0; + + TFontStyles fa; + TFontStyles fb; + + fa << fsBold; + fb << fsBold; + fa *= style; + if( fa == fb ) code |= FSBOLD; + + fa >> fsBold; + fb >> fsBold; + fa << fsItalic; + fb << fsItalic; + fa *= style; + if( fa == fb ) code |= FSITALIC; + + fa >> fsItalic; + fb >> fsItalic; + fa << fsUnderline; + fb << fsUnderline; + fa *= style; + if( fa == fb ) code |= FSUNDERLINE; + + fa >> fsUnderline; + fb >> fsUnderline; + fa << fsStrikeOut; + fb << fsStrikeOut; + fa *= style; + if( fa == fb ) code |= FSSTRIKEOUT; + + return code; +} + +TFontStyles Code2FontStyle(int code) +{ + TFontStyles fs; + + if( code & FSBOLD ) fs << fsBold; + if( code & FSITALIC ) fs << fsItalic; + if( code & FSUNDERLINE ) fs << fsUnderline; + if( code & FSSTRIKEOUT ) fs << fsStrikeOut; + return fs; +} +//--------------------------------------------------------------------------- +void __fastcall WriteFont(TStream *ps, TFont *pFont) +{ + int d; + if( pFont != NULL ){ + d = 1; + ps->Write(&d, sizeof(d)); + WriteString(ps, pFont->Name); + d = pFont->Charset; + ps->Write(&d, sizeof(d)); + d = pFont->Height; + ps->Write(&d, sizeof(d)); + TFontStyles ts = pFont->Style; + d = FontStyle2Code(ts); + ps->Write(&d, sizeof(d)); + } + else { + d = 0; + ps->Write(&d, sizeof(d)); + } +} +//--------------------------------------------------------------------------- +TFont* __fastcall ReadFont(TStream *ps) +{ + TFont *pFont = NULL; + int d; + ps->Read(&d, sizeof(d)); + if( d == 1 ){ + pFont = new TFont; + AnsiString as; + ReadString(ps, as); + pFont->Name = as; + ps->Read(&d, sizeof(d)); + pFont->Charset = BYTE(d); + ps->Read(&d, sizeof(d)); + pFont->Height = d; + ps->Read(&d, sizeof(d)); + TFontStyles ts = Code2FontStyle(d); + pFont->Style = ts; + } + return pFont; +} +//--------------------------------------------------------------------------- +int __fastcall IsInside(POINT &pnt, RECT &rc) +{ + if( rc.left < rc.right ){ + if( pnt.x < rc.left ) return FALSE; + if( pnt.x > rc.right ) return FALSE; + } + else { + if( pnt.x > rc.left ) return FALSE; + if( pnt.x < rc.right ) return FALSE; + } + if( rc.top > rc.bottom ){ + if( pnt.y > rc.top ) return FALSE; + if( pnt.y < rc.bottom ) return FALSE; + } + else { + if( pnt.y < rc.top ) return FALSE; + if( pnt.y > rc.bottom ) return FALSE; + } + return TRUE; +} + +int __fastcall IsNear(POINT &pnt, POINT &tpnt, int Width) +{ + RECT rc; + rc.left = tpnt.x - Width; + rc.right = tpnt.x + Width; + rc.top = tpnt.y + Width; + rc.bottom = tpnt.y - Width; + return IsInside(pnt, rc); +} + +int __fastcall IsLine(POINT &pnt, POINT &spnt, POINT &tpnt, int Width) +{ + int Xw = tpnt.x - spnt.x; + int Yw = tpnt.y - spnt.y; + double A, B; + int C; + + if( IsNear(pnt, spnt, Width)==TRUE ){ + return HT_P1; /* 始点と一致 */ + } + else if( IsNear(pnt, tpnt, Width)==TRUE ){ + return HT_P2; /* 終点と一致 */ + } + if( spnt.x > tpnt.x ){ /* X方向の入れ替え */ + POINT bpnt = spnt; + spnt = tpnt; + tpnt = bpnt; + } + if( (pnt.x >= (spnt.x-Width)) && (pnt.x <= (tpnt.x+Width)) ){ + if( Xw ){ + A = double(Yw)/double(Xw); + B = double(spnt.y) - (A * double(spnt.x)); + C = int((A * double(pnt.x)) + B); + A = A < 0.0 ? -A : A; + if( A >= 1.0 ){ + Width = int(double(Width) * A); + } + if( (pnt.y < (C+Width)) && (pnt.y >= (C-Width)) ){ + return HT_PM; + } + } + else if( spnt.y > tpnt.y ){ + if( (pnt.y < spnt.y) && (pnt.y > tpnt.y) ){ + return HT_PM; + } + } + else if( (pnt.y > spnt.y) && (pnt.y < tpnt.y) ){ + return HT_PM; + } + } + return 0; +} + +int __fastcall IsLine(POINT &pnt, POINT &spnt, POINT &tpnt) +{ + int r = IsLine(pnt, spnt, tpnt, 4); + if( (r == HT_P1)||(r == HT_P2) ) return r; + return IsLine(pnt, spnt, tpnt, 10) ? HT_PM : 0; +} +//*************************************************************************** +//DrawGroupクラス +//--------------------------------------------------------------------------- +__fastcall CDraw::CDraw() +{ + m_Ver = 0; + m_Cursor = 0; + m_CX1 = m_CY1 = 0; + m_CX2 = m_CY2 = 0; + m_LineColor.c = clBlack; + m_LineStyle = psSolid; + m_LineWidth = 1; + m_X1 = m_Y1 = m_X2 = m_Y2 = 0; + m_BX = m_BY = m_MF = 0; + m_pCanvas = NULL; +} + +void __fastcall CDraw::Start(TCanvas *pCanvas, int x, int y) +{ + m_pCanvas = pCanvas; + m_CX1 = m_X1 = x; + m_CY1 = m_Y1 = y; +} + +void __fastcall CDraw::StartMove(TCanvas *pCanvas, int x, int y, int code) +{ + m_pCanvas = pCanvas; + m_BX = x; + m_BY = y; + m_MF = 0; + m_MC = code; + m_CX1 = m_X1; + m_CX2 = m_X2; + m_CY1 = m_Y1; + m_CY2 = m_Y2; +} + +int __fastcall CDraw::Edit(void) +{ +#if 0 + TLineSetDlg *pBox = new TLineSetDlg(Mmsstv); + int r = pBox->Execute(this); + delete pBox; + return r; +#endif +} + +int __fastcall CDraw::Color(void) +{ +#if 0 + InitCustomColor(Mmsstv->ColorDialog); + AddCustomColor(Mmsstv->ColorDialog, m_LineColor); + Mmsstv->ColorDialog->Color = m_LineColor; + DisPaint++; + if( Mmsstv->ColorDialog->Execute() == TRUE ){ + m_LineColor = Mmsstv->ColorDialog->Color; + DisPaint--; + return TRUE; + } + DisPaint--; + return FALSE; +#endif +} + +void __fastcall CDraw::SaveToStream(TStream *sp) +{ + sp->Write(&m_Command, sizeof(m_Command)); + sp->Write(&m_Ver, sizeof(m_Ver)); + sp->Write(&m_X1, sizeof(m_X1)); + sp->Write(&m_Y1, sizeof(m_Y1)); + sp->Write(&m_X2, sizeof(m_X2)); + sp->Write(&m_Y2, sizeof(m_Y2)); + sp->Write(&m_LineColor, sizeof(m_LineColor)); + sp->Write(&m_LineStyle, sizeof(m_LineStyle)); + sp->Write(&m_LineWidth, sizeof(m_LineWidth)); +} + +int __fastcall CDraw::LoadFromStream(TStream *sp) +{ + try { + pc = tp; + sp->Read(&m_Ver, sizeof(m_Ver)); + sp->Read(&m_X1, sizeof(m_X1)); + sp->Read(&m_Y1, sizeof(m_Y1)); + sp->Read(&m_X2, sizeof(m_X2)); + sp->Read(&m_Y2, sizeof(m_Y2)); + sp->Read(&m_LineColor, sizeof(m_LineColor)); + sp->Read(&m_LineStyle, sizeof(m_LineStyle)); + sp->Read(&m_LineWidth, sizeof(m_LineWidth)); + return TRUE; + } + catch(...){ + return FALSE; + } +} + +void __fastcall CDraw::Copy(CDraw *dp) +{ +} + +void __fastcall CDraw::Normal(void) +{ + NormalRect(m_X1, m_Y1, m_X2, m_Y2); +} + +//--------------------------------------------------------------------------- +__fastcall CDrawLine::CDrawLine() +{ + m_Command = CM_LINE; + m_Cursor = 0; +} + +int __fastcall CDrawLine::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + return ((m_X1 != m_X2)||(m_Y1 != m_Y2)) ? TRUE : FALSE; +} + +void __fastcall CDrawLine::Draw(TCanvas *pCanvas) +{ + m_pCanvas = pCanvas; + pCanvas->Pen->Color = m_LineColor; + pCanvas->Pen->Style = m_LineStyle; + pCanvas->Pen->Width = m_LineWidth; + pCanvas->MoveTo(m_X1, m_Y1); + pCanvas->LineTo(m_X2, m_Y2); +} + +void __fastcall CDrawLine::DrawSel(TCanvas *pCanvas, int sw) +{ + m_pCanvas = pCanvas; + pCanvas->Pen->Color = clBlue; + pCanvas->Pen->Style = psDot; + pCanvas->Pen->Width = 1; + pCanvas->MoveTo(m_X1, m_Y1); + int rop = ::SetROP2(pCanvas->Handle, sw ? R2_NOT : R2_COPYPEN); + pCanvas->LineTo(m_X2, m_Y2); + ::SetROP2(pCanvas->Handle, rop); +} + +void __fastcall CDrawLine::DrawCursor(void) +{ + ASSERT(m_pCanvas); + m_pCanvas->Pen->Style = psDot; + m_pCanvas->Pen->Width = 1; + m_pCanvas->MoveTo(m_CX1, m_CY1); + int Sop = ::SetROP2(m_pCanvas->Handle, R2_NOT); + m_pCanvas->LineTo(m_CX2, m_CY2); + ::SetROP2(m_pCanvas->Handle, Sop); +} + +void __fastcall CDrawLine::Making(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + m_CX2 = x; + m_CY2 = y; + DrawCursor(); + m_Cursor = 1; +} + +int __fastcall CDrawLine::HitTest(int x, int y) +{ + POINT N; + POINT B, E; + N.x = x; N.y = y; + B.x = m_X1; B.y = m_Y1; + E.x = m_X2; E.y = m_Y2; + return IsLine(N, B, E, 5) ? HT_I : HT_NONE; +} + +void __fastcall CDrawLine::Moving(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + if( !m_MF ){ + if( m_BX != x ) m_MF = 1; + if( m_BY != y ) m_MF = 1; + } + x -= m_BX; + y -= m_BY; + m_CX1 = m_X1 + x; + m_CX2 = m_X2 + x; + m_CY1 = m_Y1 + y; + m_CY2 = m_Y2 + y; + DrawCursor(); + m_Cursor = 1; +} + +void __fastcall CDrawLine::Move(int x, int y) +{ + m_X1 = m_CX1; + m_Y1 = m_CY1; + m_X2 = m_CX2; + m_Y2 = m_CY2; +} + +//--------------------------------------------------------------------------- +__fastcall CDrawBox::CDrawBox() +{ + m_Command = CM_BOX; +} + +int __fastcall CDrawBox::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + Normal(); + return ((m_X1 != m_X2)&&(m_Y1 != m_Y2)) ? TRUE : FALSE; +} + +void __fastcall CDrawBox::Draw(TCanvas *pCanvas) +{ + if( m_LineStyle < 0 ) return; + + pCanvas->Pen->Color = m_LineColor; + pCanvas->Pen->Style = m_LineStyle; + pCanvas->Pen->Width = m_LineWidth; + pCanvas->MoveTo(m_X1, m_Y1); + pCanvas->LineTo(m_X2, m_Y1); + pCanvas->LineTo(m_X2, m_Y2); + pCanvas->LineTo(m_X1, m_Y2); + pCanvas->LineTo(m_X1, m_Y1); +} + +void __fastcall CDrawBox::DrawSel(TCanvas *pCanvas, int sw) +{ + pCanvas->Brush->Color = clWhite; + pCanvas->Pen->Color = clBlue; + pCanvas->Pen->Width = 1; + pCanvas->Pen->Style = psDot; + pCanvas->MoveTo(m_X1, m_Y1); + int rop = ::SetROP2(pCanvas->Handle, sw ? R2_NOT : R2_COPYPEN); + pCanvas->LineTo(m_X2, m_Y1); + pCanvas->LineTo(m_X2, m_Y2); + pCanvas->LineTo(m_X1, m_Y2); + pCanvas->LineTo(m_X1, m_Y1); + ::SetROP2(pCanvas->Handle, rop); +} + +void __fastcall CDrawBox::DrawCursor(void) +{ + ASSERT(m_pCanvas); + m_pCanvas->Pen->Style = psDot; + m_pCanvas->Pen->Width = 1; + m_pCanvas->MoveTo(m_CX1, m_CY1); + int Sop = ::SetROP2(m_pCanvas->Handle, R2_NOT); + m_pCanvas->LineTo(m_CX2, m_CY1); + m_pCanvas->LineTo(m_CX2, m_CY2); + m_pCanvas->LineTo(m_CX1, m_CY2); + m_pCanvas->LineTo(m_CX1, m_CY1); + ::SetROP2(m_pCanvas->Handle, Sop); +} + +void __fastcall CDrawBox::Making(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + m_CX2 = x; + m_CY2 = y; + DrawCursor(); + m_Cursor = 1; +} + +int __fastcall CDrawBox::HitTest(int x, int y) +{ + POINT N; + POINT B, E; + N.x = x; N.y = y; + B.x = m_X1; B.y = m_Y1; + E.x = m_X2; E.y = m_Y1; + int r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_LT; + case HT_P2: + return HT_RT; + default: + return HT_T; + } + } + B.x = m_X2; B.y = m_Y1; + E.x = m_X2; E.y = m_Y2; + r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_RT; + case HT_P2: + return HT_RB; + default: + return HT_R; + } + } + B.x = m_X2; B.y = m_Y2; + E.x = m_X1; E.y = m_Y2; + r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_RB; + case HT_P2: + return HT_LB; + default: + return HT_B; + } + } + B.x = m_X1; B.y = m_Y2; + E.x = m_X1; E.y = m_Y1; + r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_LB; + case HT_P2: + return HT_LT; + default: + return HT_L; + } + } + if( (x < m_X1) || (x > m_X2) ) return FALSE; + if( (y < m_Y1) || (y > m_Y2) ) return FALSE; + return HT_I; +} + +void __fastcall CDrawBox::Moving(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + if( !m_MF ){ + if( m_BX != x ) m_MF = 1; + if( m_BY != y ) m_MF = 1; + } + x -= m_BX; + y -= m_BY; + switch(m_MC){ + case HT_LT: + m_CX1 = m_X1 + x; + m_CY1 = m_Y1 + y; + break; + case HT_T: + m_CY1 = m_Y1 + y; + break; + case HT_RT: + m_CX2 = m_X2 + x; + m_CY1 = m_Y1 + y; + break; + case HT_R: + m_CX2 = m_X2 + x; + break; + case HT_RB: + m_CX2 = m_X2 + x; + m_CY2 = m_Y2 + y; + break; + case HT_B: + m_CY2 = m_Y2 + y; + break; + case HT_LB: + m_CX1 = m_X1 + x; + m_CY2 = m_Y2 + y; + break; + case HT_L: + m_CX1 = m_X1 + x; + break; + default: + m_CX1 = m_X1 + x; + m_CX2 = m_X2 + x; + m_CY1 = m_Y1 + y; + m_CY2 = m_Y2 + y; + break; + } + DrawCursor(); + m_Cursor = 1; +} + +void __fastcall CDrawBox::Move(int x, int y) +{ + m_X1 = m_CX1; + m_Y1 = m_CY1; + m_X2 = m_CX2; + m_Y2 = m_CY2; + Normal(); + AdjustRect(); +} +// +//--------------------------------------------------------------------------- +__fastcall CDrawText::CDrawText() +{ + m_Command = CM_TEXT; + +} + + +//*************************************************************************** +//DrawGroupクラス +//--------------------------------------------------------------------------- +__fastcall CDrawGroup::CDrawGroup() +{ + m_Command = CM_GROUP; + m_Cnt = 0; + m_Max = 0; + m_TransX = 319; + m_TransY = 255; + m_TransCol = TColor(0x00f8f8f8); + m_SX = 320; + m_SY = 256; + m_Ver = 2; + m_pBase = NULL; + m_pSel = NULL; +} + +__fastcall CDrawGroup::~CDrawGroup() +{ + FreeItem(); + Free(); +} + +void __fastcall CDrawGroup::Free(void) +{ + if( m_pBase != NULL ){ + delete m_pBase; + m_pBase = NULL; + } + m_Cnt = m_Max = 0; +} + +void __fastcall CDrawGroup::FreeItem(void) +{ + if( m_pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + delete m_pBase[i]; + } + delete pBase; + m_pBase = NULL; + m_Cnt = m_Max = 0; + m_pSel = NULL; + m_TransX = 319; + m_TransY = 255; + m_TransCol = TColor(0x00f8f8f8); +} + +void __fastcall CDrawGroup::AddItem(CDraw *dp) +{ + if( m_Cnt >= m_Max ){ + m_Max = m_Max ? m_Max * 2 : 4; + CDraw **pNewBase = new CDraw*[m_Max]; + if( m_pBase != NULL ){ + memcpy(pNewBase, m_pBase, sizeof(CDraw*)*m_Cnt); + delete m_pBase; + } + m_pBase = pNewBase; + } + m_pBase[m_Cnt] = dp; + m_Cnt++; +} + +void __fastcall CDrawGroup::DeleteItem(CDraw *dp) +{ + if( m_pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + if( m_pBase[i] == dp ){ + delete m_pBase[i]; + for( ; i < (m_Cnt - 1); i++ ){ + m_pBase[i] = m_pBase[i+1]; + } + m_pBase[i] = NULL; + m_Cnt--; + return; + } + } +} + +void __fastcall CDrawGroup::ReleaseItem(CDraw *dp) +{ + if( m_pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + if( m_pBase[i] == dp ){ + for( ; i < (m_Cnt - 1); i++ ){ + m_pBase[i] = m_pBase[i+1]; + } + m_pBase[i] = NULL; + m_Cnt--; + return; + } + } +} + +CDraw * __fastcall CDrawGroup::AddItemCopy(CDraw *dp) +{ + CDraw *pItem = MakeItem(dp->m_Command); + pItem->Copy(dp); + AddItem(pItem); + return pItem; +} + +void __fastcall CDrawGroup::Draw(TCanvas *pCanvas) +{ + if( m_pBase == NULL ) return; + + TransCol = m_TransCol; + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->Draw(pCanvas); + } +} + +CDraw* __fastcall CDrawGroup::SelectItem(int X, int Y) +{ + if( m_pBase == NULL ) return NULL; + + for( int i = m_Cnt - 1; i >= 0; i-- ){ + if( (m_Hit = m_pBase[i]->HitTest(X, Y)) != 0 ){ + return m_pBase[i]; + } + } + return NULL; +} + +CDraw* __fastcall CDrawGroup::MakeItem(int cmd) +{ + CDraw *pItem = NULL; + switch(cmd){ + case CM_LINE: + pItem = new CDrawLine; + break; + case CM_BOX: + pItem = new CDrawBox; + break; + case CM_TEXT: + pItem = new CDrawText; + break; + case CM_GROUP: + pItem = new CDrawGroup; + break; + } + return pItem; +} + +void __fastcall CDrawGroup::SaveToStream(TStream *sp) +{ + m_Ver = 0; + CDrawBox::SaveToStream(sp); + + sp->Write(&m_TransX, sizeof(m_TransX)); + sp->Write(&m_TransY, sizeof(m_TransY)); + sp->Write(&m_TransCol, sizeof(m_TransCol)); + sp->Write(&m_SX, sizeof(m_SX)); + sp->Write(&m_SY, sizeof(m_SY)); + sp->Write(&m_Cnt, sizeof(m_Cnt)); + for( int i = 0; i < m_Cnt; i++ ){ + m_pBase[i]->SaveToStream(sp); + } +} + +int __fastcall CDrawGroup::LoadFromStream(TStream *sp) +{ + FreeItem(); + MultProc(); + try { + int cnt, cmd; + sp->Read(&cmd, sizeof(cmd)); + if( cmd != CM_GROUP ){ + goto _err; + } + + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) goto _err; + sp->Read(&m_TransX, sizeof(m_TransX)); + sp->Read(&m_TransY, sizeof(m_TransY)); + sp->Read(&m_TransCol, sizeof(m_TransCol)); + sp->Read(&m_SX, sizeof(m_SX)); + sp->Read(&m_SY, sizeof(m_SY)); + m_pSel = NULL; + sp->Read(&cnt, sizeof(cnt)); + for( int i = 0; i < cnt; i++ ){ + MultProcA(); + sp->Read(&cmd, sizeof(cmd)); + CDraw *pItem = MakeItem(cmd); + if( pItem != NULL ){ + if( pItem->LoadFromStream(sp) == FALSE ){ + delete pItem; + goto _err; + } + AddItem(pItem); + } + else { + goto _err; + } + } + if( !m_Cnt ) m_TransCol = TColor(0x00f8f8f8); + return TRUE; + } + catch(...){ + } +_err:; + FreeItem(); + return FALSE; +} + +void __fastcall CDrawGroup::BackItem(CDraw *pItem) +{ + int i, k; + for( i = m_Cnt - 1; i >= 0; i-- ){ + if( m_pBase[i] == pItem ){ + for( k = i; k > 0; k-- ){ + m_pBase[k] = m_pBase[k-1]; + } + m_pBase[0] = pItem; + break; + } + } +} + +void __fastcall CDrawGroup::FrontItem(CDraw *pItem) +{ + int i, k; + for( i = 0; i < m_Cnt; i++ ){ + if( m_pBase[i] == pItem ){ + for( k = i; k < m_Cnt - 1; k++ ){ + m_pBase[k] = m_pBase[k+1]; + } + m_pBase[k] = pItem; + break; + } + } +} + +int __fastcall CDrawGroup::UpItem(int n) +{ + if( n ){ + CDraw *pItem = pBase[n-1]; + pBase[n-1] = pBase[n]; + pBase[n] = pItem; + return TRUE; + } + return FALSE; +} + +int __fastcall CDrawGroup::DownItem(int n) +{ + if( n < (m_Cnt - 1) ){ + CDraw *pItem = pBase[n+1]; + pBase[n+1] = pBase[n]; + pBase[n] = pItem; + return TRUE; + } + return FALSE; +} +//-------------------------------------------------------------------------- +void __fastcall CDrawGroup::AdjustTransPoint(void) +{ + MultProc(); + int i; + int f = 0; + int XW = 320; + int YW = 256; + for( i = 0; i < m_Cnt; i++ ){ + if( m_pBase[i]->HitTest(m_TransX, m_TransY) ){ + for( m_TransX = XW-1; m_TransX >= 0; m_TransX -= 5 ){ + for( m_TransY = YW-1; m_TransY >= 0; m_TransY-- ){ + f = 0; + for( i = 0; i < m_Cnt; i++ ){ + if( m_pBase[i]->HitTest(m_TransX, m_TransY) ){ + f++; + break; + } + } + if( !f ) return; + } + MultProc(); + } + break; + } + } + if( f ){ + m_TransX = XW-1; + m_TransY = YW-1; + } +} +//-------------------------------------------------------------------------- +CDraw* __fastcall CDrawGroup::GetLastItem(void) +{ + return m_Cnt ? pBase[m_Cnt-1]: NULL; +} +// +// +//--------------------------------------------------------------------------- +// CItem class +// +__fastcall CItem::CItem(void) +{ + m_pMemStream = NULL; + + m_Ver = 0; + m_ASize = 1; + m_Align = 0; + m_Grade = 0; + m_Shadow = 2; + m_Line = 1; + m_Zero = 0; + m_3d = 0x00000404; + m_Text = "TX\tFT1000MP\r\nANT\tMagnetic loop\r\nSOFT\tHome-made"; + m_pFont = NULL; + m_ColG[0].d = 255; + m_ColG[1].d = 16711935; + m_ColG[2].d = 65535; + m_ColG[3].d = 16776960; + m_ColB[0].c = clBlack; + m_ColB[1].c = clWhite; + m_ColB[2].c = clBlue; + m_ColB[3].c = clRed; + + m_OrgXW = -1; + m_OrgYW = -1; + m_TextXW = -1; + m_TextYW = -1; + m_Draft = 0; + m_IniSize = 0; +} +//--------------------------------------------------------------------------- +__fastcall CItem::~CItem() +{ + if( m_pFont != NULL ) delete m_pFont; + if( m_pMemStream != NULL ) delete m_pMemStream; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::LoadDefault(void) +{ + if( sys.m_pDefStg != NULL ) return; + + CItem *pItem = new CItem; + pItem->LoadFromInifile("Default", ININAME); + LPCBYTE p = pItem->CreateStorage(&sys.m_DefStgSize); + sys.m_pDefStg = new BYTE[sys.m_DefStgSize]; + memcpy(sys.m_pDefStg, p, sys.m_DefStgSize); + pItem->DeleteStorage(p); + delete pItem; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::UpdateDefault(void) +{ + if( sys.m_pDefStg != NULL ){ + delete sys.m_pDefStg; + sys.m_pDefStg = NULL; + } + LPCBYTE p = CreateStorage(&sys.m_DefStgSize); + sys.m_pDefStg = new BYTE[sys.m_DefStgSize]; + memcpy(sys.m_pDefStg, p, sys.m_DefStgSize); + DeleteStorage(p); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Create(LPCBYTE ps, DWORD size) +{ + if( (ps == NULL) || !size ){ + if( sys.m_pDefStg == NULL ) LoadDefault(); + ps = sys.m_pDefStg; + size = sys.m_DefStgSize; + } + + TMemoryStream *pMem = new TMemoryStream; + pMem->Clear(); + pMem->Write(ps, size); + pMem->Seek(soFromBeginning, 0); + int ver; + pMem->Read(&ver, sizeof(ver)); + if( ver <= m_Ver ){ + pMem->Read(&m_TextXW, sizeof(m_TextXW)); + pMem->Read(&m_TextYW, sizeof(m_TextYW)); + pMem->Read(&m_OrgXW, sizeof(m_OrgXW)); + pMem->Read(&m_OrgYW, sizeof(m_OrgYW)); + pMem->Read(&m_ASize, sizeof(m_ASize)); + pMem->Read(&m_Align, sizeof(m_Align)); + pMem->Read(&m_Grade, sizeof(m_Grade)); + pMem->Read(&m_Shadow, sizeof(m_Shadow)); + pMem->Read(&m_Line, sizeof(m_Line)); + pMem->Read(&m_Zero, sizeof(m_Zero)); + pMem->Read(&m_3d, sizeof(m_3d)); + pMem->Read(&m_ColG, sizeof(m_ColG)); + pMem->Read(&m_ColB, sizeof(m_ColB)); + ReadString(pMem, m_Text); + if( m_pFont != NULL ) delete m_pFont; + m_pFont = ReadFont(pMem); + UpdateFont(); + } + delete pMem; +} +//--------------------------------------------------------------------------- +LPCBYTE __fastcall CItem::CreateStorage(LPDWORD pSize) +{ + ASSERT(pSize); + + if( m_pMemStream != NULL ) delete m_pMemStream; + m_pMemStream = new TMemoryStream; + m_pMemStream->Clear(); + m_Ver = 0; + m_pMemStream->Write(&m_Ver, sizeof(m_Ver)); + m_pMemStream->Write(&m_TextXW, sizeof(m_TextXW)); + m_pMemStream->Write(&m_TextYW, sizeof(m_TextYW)); + m_pMemStream->Write(&m_OrgXW, sizeof(m_OrgXW)); + m_pMemStream->Write(&m_OrgYW, sizeof(m_OrgYW)); + m_pMemStream->Write(&m_ASize, sizeof(m_ASize)); + m_pMemStream->Write(&m_Align, sizeof(m_Align)); + m_pMemStream->Write(&m_Grade, sizeof(m_Grade)); + m_pMemStream->Write(&m_Shadow, sizeof(m_Shadow)); + m_pMemStream->Write(&m_Line, sizeof(m_Line)); + m_pMemStream->Write(&m_Zero, sizeof(m_Zero)); + m_pMemStream->Write(&m_3d, sizeof(m_3d)); + m_pMemStream->Write(&m_ColG, sizeof(m_ColG)); + m_pMemStream->Write(&m_ColB, sizeof(m_ColB)); + WriteString(m_pMemStream, m_Text); + WriteFont(m_pMemStream, m_pFont); + *pSize = m_pMemStream->Position; + return (LPCBYTE)m_pMemStream->Memory; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::LoadFromInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TIniFile *pIniFile = new TIniFile(fname); + MultProc(); + m_ASize = pIniFile->ReadInteger(pSect, "AutoSize", m_ASize); + m_Align = pIniFile->ReadInteger(pSect, "Align", m_Align); + m_Grade = pIniFile->ReadInteger(pSect, "Grade", m_Grade); + m_Shadow = pIniFile->ReadInteger(pSect, "Shadow", m_Shadow); + m_Line = pIniFile->ReadInteger(pSect, "Line", m_Line); + m_Zero = pIniFile->ReadInteger(pSect, "Zero", 0); + m_3d = pIniFile->ReadInteger(pSect, "3D", m_3d); + int i; + for( i = 0; i < 4; i++ ){ + char bf[32]; + sprintf(bf, "ColG%u", i); + m_ColG[i].d = pIniFile->ReadInteger(pSect, bf, m_ColG[i].d); + sprintf(bf, "ColB%u", i); + m_ColB[i].d = pIniFile->ReadInteger(pSect, bf, m_ColB[i].d); + } + if( m_ASize ){ + m_OrgXW = m_OrgYW = -1; + m_TextXW = m_TextYW = -1; + } + else { + m_TextXW = pIniFile->ReadInteger(pSect, "Width", m_TextXW); + m_TextYW = pIniFile->ReadInteger(pSect, "Height", m_TextYW); + m_IniSize = 1; + } + AnsiString as, cs; + ::CrLf2Yen(cs, m_Text); + as = pIniFile->ReadString(pSect, "Text", cs); + ::Yen2CrLf(m_Text, as); + + if( pIniFile->ReadInteger(pSect, "Font", 0) ){ + if( m_pFont != NULL ) delete m_pFont; + m_pFont = new TFont; + m_pFont->Name = pIniFile->ReadString(pSect, "FontName", m_pFont->Name); + m_pFont->Charset = (BYTE)pIniFile->ReadInteger(pSect, "FontSet", m_pFont->Charset); + m_pFont->Height = pIniFile->ReadInteger(pSect, "FontSize", m_pFont->Height); + TFontStyles ts = m_pFont->Style; + DWORD d = FontStyle2Code(ts); + d = pIniFile->ReadInteger(pSect, "FontStyle", d); + m_fsCode = d; + ts = Code2FontStyle(d); + m_pFont->Style = ts; + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SaveToInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + + TIniFile *pIniFile = new TIniFile(fname); + MultProc(); + try { + pIniFile->WriteInteger(pSect, "AutoSize", m_ASize); + pIniFile->WriteInteger(pSect, "Align", m_Align); + pIniFile->WriteInteger(pSect, "Grade", m_Grade); + pIniFile->WriteInteger(pSect, "Shadow", m_Shadow); + pIniFile->WriteInteger(pSect, "Line", m_Line); + pIniFile->WriteInteger(pSect, "Zero", m_Zero); + pIniFile->WriteInteger(pSect, "3D", m_3d); + int i; + for( i = 0; i < 4; i++ ){ + char bf[32]; + sprintf(bf, "ColG%u", i); + pIniFile->WriteInteger(pSect, bf, m_ColG[i].d); + sprintf(bf, "ColB%u", i); + pIniFile->WriteInteger(pSect, bf, m_ColB[i].d); + } + pIniFile->WriteInteger(pSect, "Width", m_TextXW); + pIniFile->WriteInteger(pSect, "Height", m_TextYW); + AnsiString cs; + ::CrLf2Yen(cs, m_Text); + pIniFile->WriteString(pSect, "Text", cs); + + pIniFile->WriteInteger(pSect, "Font", m_pFont != NULL ? 1 : 0); + if( m_pFont != NULL ){ + pIniFile->WriteString(pSect, "FontName", m_pFont->Name); + pIniFile->WriteInteger(pSect, "FontSet", m_pFont->Charset); + pIniFile->WriteInteger(pSect, "FontSize", m_pFont->Height); + TFontStyles ts = m_pFont->Style; + DWORD d = FontStyle2Code(ts); + pIniFile->WriteInteger(pSect, "FontStyle", d); + } + } + catch(...){ + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + + TIniFile *pIniFile = new TIniFile(fname); + MultProc(); + try { + pIniFile->EraseSection(pSect); + } + catch(...){ + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetItemType(void) +{ + DWORD type = 0x00010002; // Active text as Overlay + if( m_ASize ){ + switch(m_Align){ + case 1: + type |= 0x00400000; // align center + break; + case 2: + type |= 0x00100000; // aling right-top + break; + default: + break; + } + } + return type; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteStorage(LPCBYTE pStorage) +{ + if( m_pMemStream != NULL ){ + ASSERT(pStorage == (LPCBYTE)m_pMemStream->Memory); + delete m_pMemStream; + m_pMemStream = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Copy(CItem *sp) +{ + ASSERT(sp); + + DWORD size; + LPCBYTE ps = sp->CreateStorage(&size); + Create(ps, size); + sp->DeleteStorage(ps); + m_Back = sp->m_Back; + if( m_ASize ){ + m_OrgXW = m_OrgYW = -1; + m_TextXW = m_TextYW = -1; + } + else { + m_IniSize = 1; + } +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetOrgSize(void) +{ + if(m_OrgXW >= 0){ + DWORD w = m_OrgXW; + DWORD h = m_OrgYW; + return (h << 16) + w; + } + else { + return (128 << 16) + 160; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetFontSize(Graphics::TBitmap *pDest) +{ + ASSERT(m_OrgXW > 0); + ASSERT(m_OrgYW > 0); + if( (m_OrgXW <= 0) || (m_OrgYW <= 0) ) return; + + int size = m_pFont->Height; + if( m_OrgXW < pDest->Width ){ + size = size * pDest->Width / m_OrgXW; + } + else if( m_OrgYW < pDest->Height ){ + size = size * pDest->Height / m_OrgYW; + } + else if( m_OrgXW > pDest->Width ){ + size = size * pDest->Width / m_OrgXW; + } + else if( m_OrgYW > pDest->Height ){ + size = size * pDest->Height / m_OrgYW; + } + m_pFont->Height = size; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetTextSize(Graphics::TBitmap *pDest) +{ + ASSERT(m_OrgXW > 0); + ASSERT(m_OrgYW > 0); + if( (m_OrgXW <= 0) || (m_OrgYW <= 0) ) return; + + if( m_OrgXW < pDest->Width ){ + m_TextXW = m_TextXW * pDest->Width / m_OrgXW; + } + else if( m_OrgYW < pDest->Height ){ + m_TextYW = m_TextYW * pDest->Height / m_OrgYW; + } + else if( m_OrgXW > pDest->Width ){ + m_TextXW = m_TextXW * pDest->Width / m_OrgXW; + } + else if( m_OrgYW > pDest->Height ){ + m_TextYW = m_TextYW * pDest->Height / m_OrgYW; + } +} +//--------------------------------------------------------------------------- +int __fastcall CItem::GetMaxWH(int &W, int &H, Graphics::TBitmap *pDest, LPCSTR pText) +{ + int lf = 1; + int n = 0; + W = H = 0; + char bf[1024]; + LPSTR t; + for( t = bf; 1; pText++ ){ + if( *pText != 0x0d ){ + if( (*pText == 0x0a) || !*pText ){ + if( lf && *pText ){ + n++; + } + *t = 0; + if( bf[0] ){ + DWORD wh = ::GetTabbedTextExtent(pDest->Canvas->Handle, bf, strlen(bf), 0, NULL); + int w = wh & 0x0000ffff; + int h = wh >> 16; + if( H < h ) H = h; + if( W < w ) W = w; + } + if( !*pText ) break; + lf = 1; + t = bf; + } + else { + if( lf ){ + lf = 0; + n++; + } + *t++ = *pText; + } + } + } + return n; +} +//--------------------------------------------------------------------------- +UINT __fastcall CItem::GetDrawFormat(void) +{ + UINT wFormat = DT_NOPREFIX|DT_NOCLIP|DT_EXPANDTABS; + switch(m_Align){ + case 1: + wFormat |= DT_CENTER; + break; + case 2: + wFormat |= DT_RIGHT; + break; + default: + wFormat |= DT_LEFT; + break; + } + if( !m_ASize ) wFormat |= DT_WORDBREAK; + return wFormat; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawText(RECT rc, int xoff, int yoff, Graphics::TBitmap *pDest, LPCSTR pText, UCOL ucol) +{ + rc.left += xoff; rc.top += yoff; + rc.right += xoff; rc.bottom += yoff; + pDest->Canvas->Font = m_pFont; + pDest->Canvas->Font->Color = ucol.c; + HDC hdc = pDest->Canvas->Handle; + ::SetBkMode(hdc, TRANSPARENT); + ::DrawText(hdc, pText, strlen(pText), &rc, GetDrawFormat()); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawTrans(Graphics::TBitmap *pDest, int x, int y, Graphics::TBitmap *pSrc) +{ + Graphics::TBitmap *pbmp = pSrc; + if( sys.m_BitPixel == 16 ){ + pbmp = new Graphics::TBitmap; + pbmp->Width = pSrc->Width; + pbmp->Height = pSrc->Height; + pbmp->Canvas->Draw(0, 0, pSrc); + } + pbmp->Transparent = TRUE; + pbmp->TransparentMode = tmAuto; + pDest->Canvas->Draw(x, y, pbmp); + if( pbmp != pSrc ) delete pbmp; +} +//--------------------------------------------------------------------------- +LPBYTE __fastcall CItem::CreateTable(Graphics::TBitmap *pDest) +{ + int XW = pDest->Width; + int YW = pDest->Height; + LPBYTE pTbl = new BYTE[XW*YW]; + memset(pTbl, 0, XW*YW); + LPBYTE wp = pTbl; + int x, y; + + BYTE br = m_cBack.b.r; + BYTE bg = m_cBack.b.g; + BYTE bb = m_cBack.b.b; + for( y = 0; y < YW; y++ ){ + LPBYTE p = (LPBYTE)pDest->ScanLine[y]; + for( x = 0; x < XW; x++, wp++, p+=3 ){ + if( (bb != *p) || (bg != *(p+1)) || (br != *(p+2)) ){ + *wp = 1; + } + } + } + return pTbl; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::EditDialog(HWND hWnd) +{ + TTextDlgBox *pBox = new TTextDlgBox(hWnd); + if( pBox == NULL ) return FALSE; + + int r = pBox->Execute(this); + delete pBox; + if( r == TRUE ) UpdateDefault(); + return r; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::FontDialog(HWND hWnd) +{ + if( m_pFont == NULL ) m_pFont = new TFont; + TFontDialog *pDlg = new TFontDialog(NULL); + if( pDlg == NULL ) return FALSE; + + ASSERT(m_pFont); + pDlg->Font->Assign(m_pFont); + pDlg->Font->Color = m_ColG[0].c; + MultProc(); + int r = pDlg->Execute(); + MultProc(); + if( r == TRUE ){ + m_pFont->Assign(pDlg->Font); + m_ColG[0].c = pDlg->Font->Color; + UpdateFont(); + UpdateDefault(); + } + delete pDlg; + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::UpdateFont(void) +{ + if( m_pFont == NULL ) return; + + TFontStyles ts = m_pFont->Style; + m_fsCode = FontStyle2Code(ts); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Draw3D(RECT &rc, Graphics::TBitmap *pDest, LPCSTR pText, UCOL cl[2]) +{ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + int max = ABS(xm) > ABS(ym) ? ABS(xm) : ABS(ym); + for( int i = max; i > 0; i-- ){ + int x = xm * i / max; + int y = ym * i / max; + DrawText(rc, x, y, pDest, pText, GetGrade2(cl, i, max)); + } +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::DrawExt(Graphics::TBitmap *pDest, RECT &rc, LPCSTR pText) +{ + MultProc(); + int xw = pDest->Width; + int yw = pDest->Height; + LPBYTE pTbl = NULL; + if( m_Grade || (m_Shadow == 2) ) pTbl = CreateTable(pDest); + + LPBYTE wp, p; + if( m_Grade ){ + MultProc(); + ASSERT(pTbl); + RECT mc; + mc.left = rc.right; mc.top = rc.bottom; + mc.right = rc.left; mc.bottom = rc.top; + wp = pTbl; + int x, y; + for( y = 0; y < yw; y++ ){ + for( x = 0; x < xw; x++, wp++ ){ + if( *wp ){ + if( mc.left > x ) mc.left = x; + if( mc.right < x ) mc.right = x; + if( mc.top > y ) mc.top = y; + if( mc.bottom < y ) mc.bottom = y; + } + } + } + int bw = mc.right - mc.left + 1; + int bh = mc.bottom - mc.top + 1; + int bd = sqrt(bw*bw + bh*bh); + UCOL c; + for( y = mc.top; y <= mc.bottom; y++ ){ + p = (LPBYTE)pDest->ScanLine[y]; + wp = &pTbl[y*xw]; + for( x = 0; x < xw; x++, wp++, p+=3 ){ + if( *wp ){ + int xx = x - mc.left; + int yy = y - mc.top; + switch(m_Grade){ + case 1: + c = GetGrade4(m_ColG, xx, bw); + break; + case 2: + c = GetGrade4(m_ColG, yy, bh); + break; + case 3: + c = GetGrade4(m_ColG, sqrt(xx*xx + yy*yy), bd); + break; + } + *p++ = c.b.b; + *p++ = c.b.g; + *p = c.b.r; + p -= 2; + } + } + } + } + MultProc(); + switch(m_Shadow){ + case 1: + { + Graphics::TBitmap* pbmp = CreateBitmap(xw, yw); + FillBitmap(pbmp, m_cBack); + if( m_3d & 0x00010000 ){ + Draw3D(rc, pbmp, pText, &m_ColB[1]); + } + else { + for( int i = m_Line - 1; i >= 0; i-- ){ + DrawText(rc, i+1, i+1, pbmp, pText, m_ColB[0]); + } + } + DrawTrans(pbmp, 0, 0, pDest); + delete pDest; + pDest = pbmp; + } + break; + case 2: + { + ASSERT(pTbl); + if( m_3d & 0x00010000 ){ + Graphics::TBitmap* pbmp = CreateBitmap(xw, yw); + FillBitmap(pbmp, m_cBack); + Draw3D(rc, pbmp, pText, &m_ColB[1]); + DrawTrans(pbmp, 0, 0, pDest); + delete pDest; + pDest = pbmp; + } + int f; + int x, y; + for( y = 0; y < yw; y++ ){ + wp = &pTbl[y*xw]; + p = (LPBYTE)pDest->ScanLine[y]; + f = 0; + for( x = 0; x < xw; x++, wp++, p+=3 ){ + if( *wp ){ + if( !m_Grade ){ + *p++ = m_ColG[0].b.b; + *p++ = m_ColG[0].b.g; + *p = m_ColG[0].b.r; + p -= 2; + } + f = m_Line; + } + else if( f ){ + f--; + if( !*wp ){ + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + p -= 2; + *wp = BYTE(f); + } + } + } + f = 0; + wp--; + p -= 3; + x--; + for( ; x >= 0; x--, wp--, p-=3 ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + if( !*wp ){ + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + p -= 2; + *wp = BYTE(f); + } + } + } + + } + int ax = 0; + for( x = 0; x < xw; x++, ax+=3 ){ + wp = &pTbl[x]; + f = 0; + for( y = 0; y < yw; y++, wp += xw ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + if( !*wp ){ + p = (LPBYTE)pDest->ScanLine[y]; + p += ax; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + *wp = BYTE(f); + } + } + } + f = 0; + y--; + wp -= xw; + for( ; y >= 0; y--, wp -= xw ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + if( !*wp ){ + p = (LPBYTE)pDest->ScanLine[y]; + p += ax; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + } + } + } + } + } + break; + case 3: + { + Graphics::TBitmap* pbmp = CreateBitmap(xw, yw); + FillBitmap(pbmp, m_cBack); + if( m_3d & 0x00010000 ){ + rc.left++; rc.right++; + rc.top++; rc.bottom++; + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + Draw3D(rc, pbmp, pText, &m_ColB[1]); + DrawText(rc, (xm & 0x80) ? 1 : -1, (ym & 0x80) ? 1 : -1, pbmp, pText, m_ColB[0]); + } + else { + for( int i = m_Line - 1; i >= 0; i-- ){ + DrawText(rc, i+2, i+2, pbmp, pText, m_ColB[0]); + } + DrawText(rc, 0, 0, pbmp, pText, m_ColB[1]); + } + DrawTrans(pbmp, 1, 1, pDest); + delete pDest; + pDest = pbmp; + } + break; + default: + break; + } + if( pTbl != NULL ) delete pTbl; + + return pDest; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::Draw(Graphics::TBitmap *pDest, LPCSTR pText) +{ + if( (pText == NULL) || !*pText ) return pDest; + AnsiString as; + if( m_Align ){ + as = pText; + for( LPSTR t = as.c_str(); *t; t++ ){ + if( *t == '\t' ) *t = ' '; + } + pText = as.c_str(); + } + m_Back.c = pDest->Canvas->Pixels[0][0]; + m_cBack = m_Back; + if( m_pFont == NULL ){ + m_pFont = new TFont(); + m_pFont->Assign(pDest->Canvas->Font); + m_pFont->Size = 18; + UpdateFont(); + } + else if( m_OrgXW >= 0 ){ + if( m_ASize ) SetFontSize(pDest); + } + + LPCSTR pOrgText = pText; + if( m_Zero ){ + pText = ZeroConv(pText, m_pFont->Charset); + } + + pDest->Canvas->Font = m_pFont; + + int xw, yw; + if( m_ASize ){ + int n = GetMaxWH(xw, yw, pDest, pText); + yw *= n; + if( m_fsCode & FSITALIC ){ + xw += yw / 12; + } + } + else if( m_IniSize || (m_OrgXW < 0) ){ + m_IniSize = 0; + if( m_TextXW > 0 ){ + xw = m_TextXW; + yw = m_TextYW; + } + else { + xw = pDest->Width; + yw = pDest->Height; + } + } + else { + SetTextSize(pDest); + xw = m_TextXW; + yw = m_TextYW; + } + m_TextXW = xw; + m_TextYW = yw; + + if( m_Shadow && (m_cBack.d == m_ColB[0].d) ){ + m_cBack = GetUniqueColor(pDest->Canvas->Handle, m_cBack); + } + if( m_cBack.d == m_ColG[0].d ){ + m_cBack = GetUniqueColor(pDest->Canvas->Handle, m_cBack); + } + + MultProc(); + + RECT rc; + rc.left = rc.top = 0; + rc.right = xw; + rc.bottom = yw; + + if( m_3d & 0x00010000 ){ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + if( xm < 0 ){ + rc.left -= xm; + rc.right -= xm; + } + if( ym < 0 ){ + rc.top -= ym; + rc.bottom -= ym; + } + xw += ABS(xm); + yw += ABS(ym); + } + + switch(m_Shadow){ + case 1: + xw += m_Line; + yw += m_Line; + break; + case 2: + rc.left += m_Line; + rc.right += m_Line; + rc.top += m_Line; + rc.bottom += m_Line; + xw += m_Line*2; + yw += m_Line*2; + break; + case 3: + xw += m_Line*2; + yw += m_Line*2; + break; + } + + if( (m_fsCode & FSITALIC) && (m_Align == 2) ){ + int ow = yw / 12; + rc.left -= ow; + rc.right -= ow; + } + + Graphics::TBitmap *pBmp = pDest; + if( (pDest->Width != xw) || (pDest->Height != yw) ){ + pBmp = CreateBitmap(xw, yw); + FillBitmap(pBmp, m_cBack); + } + else if( m_Back.d != m_cBack.d ){ + FillBitmap(pBmp, m_cBack); + } + + MultProc(); + DrawText(rc, 0, 0, pBmp, pText, m_ColG[0]); + Graphics::TBitmap *pNew = pBmp; + if( !m_Draft ){ + pNew = DrawExt(pBmp, rc, pText); + } + m_OrgXW = xw; + m_OrgYW = yw; + if( pBmp != pDest ) delete pDest; + pDest = pNew; + if( pOrgText != pText ) delete pText; + + // set transparent color to (0,0) for overlay + LPBYTE p = (LPBYTE)pDest->ScanLine[0]; + ASSERT(p); + *p++ = m_cBack.b.b; + *p++ = m_cBack.b.g; + *p = m_cBack.b.r; + + MultProc(); + return pDest; +} + + diff --git a/CItems/QSLBox/Comlib.h b/CItems/QSLBox/Comlib.h new file mode 100644 index 0000000..8cb46db --- /dev/null +++ b/CItems/QSLBox/Comlib.h @@ -0,0 +1,372 @@ +#ifndef ComLibH +#define ComLibH +#include +#include +#include +#include +#include +#include +#include + +#define NDEBUG // Remove this symbol, if you would like to do debug +#include +#define ASSERT(c) assert(c) + +#define ABS(c) (((c)<0)?(-(c)):(c)) +#define PI 3.1415926535897932384626433832795 + +typedef const BYTE* LPCBYTE; +typedef double* LPDOUBLE; +typedef const double* LPCDOUBLE; +typedef union { + struct { + BYTE r; + BYTE g; + BYTE b; + BYTE s; + }b; + DWORD d; + TColor c; +}UCOL; + +#define VER "QSLBox Version 1.00" +#define AUT "(C) JE3HHT 2002." +#define TTL "MMSSTV custom item" +#define TTLJ "MMSSTV カスタムアイテム" // Japanese code + +#define ININAME "QSLBox.ini" + +#define FSBOLD 1 +#define FSITALIC 2 +#define FSUNDERLINE 4 +#define FSSTRIKEOUT 8 + +// These prototypes are the functions in the MMSSTV. +// ---- Refer to the comment of the mcmFunc() --- +typedef HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +typedef HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +typedef HBITMAP (__cdecl *mmLoadHistImage)(void); +typedef int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +typedef int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +typedef HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +typedef int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +typedef int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +typedef HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +typedef void (__cdecl *mmMultProc)(void); +typedef void (__cdecl *mmMultProcA)(void); +typedef int (__cdecl *mmColorComp)(LPDWORD pCol); + +void __fastcall MultProc(void); +char __fastcall LastC(LPCSTR p); +void __fastcall SetCurDir(LPSTR t, int size); +void __fastcall SetDirName(LPSTR t, LPCSTR pName); +void __fastcall Yen2CrLf(AnsiString &ws, AnsiString cs); +void __fastcall CrLf2Yen(AnsiString &ws, AnsiString cs); +void __fastcall LoadStringsFromIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName); +void __fastcall SaveStringsToIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName); +void __fastcall InitCustomColor(TColorDialog *tp); +void __fastcall AddCustomColor(TColorDialog *tp, TColor col); +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw); +void __fastcall FillBitmap(Graphics::TBitmap *pDest, UCOL ucol); +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc); +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap); + +//*********************************************************** +//CDraw item class +//*********************************************************** +enum { + HT_NONE, + HT_P1, // line + HT_P2, // line + HT_PM, // line + HT_LT, // box + HT_RT, + HT_LB, + HT_RB, + HT_L, + HT_T, + HT_R, + HT_B, + HT_I, +}; + +class CDraw +{ +public: + int m_Command; + int m_Ver; + int m_X1, m_Y1; + int m_X2, m_Y2; + UCOL m_LineColor; + TPenStyle m_LineStyle; + int m_LineWidth; + +public: + int m_Cursor; + int m_CX1, m_CY1; + int m_CX2, m_CY2; + int m_BX, m_BY; + int m_MF; + int m_MC; +public: + TCanvas *m_pCanvas; + +public: + __fastcall CDraw(); + virtual __fastcall ~CDraw(){}; + virtual void __fastcall Start(TCanvas *tp, int X, int Y); + virtual int __fastcall Finish(int X, int Y){return FALSE;}; + virtual void __fastcall Draw(TCanvas *tp){}; + virtual void __fastcall DrawFast(TCanvas *tp){Draw(tp);}; + virtual void __fastcall DrawSel(TCanvas *tp, int sw){}; + virtual void __fastcall Making(int X, int Y){}; + virtual int __fastcall HitTest(int x, int y){return FALSE;}; + virtual void __fastcall StartMove(TCanvas *tp, int X, int Y, int code); + virtual void __fastcall Moving(int X, int Y){}; + virtual void __fastcall Move(int X, int Y){}; + virtual int __fastcall IsMove(void){return m_MF;}; + virtual int __fastcall Edit(void); + virtual void __fastcall SaveToStream(TStream *sp); + virtual int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + virtual void __fastcall Copy(CDraw *dp); + void __fastcall Normal(void); +}; + +class CDrawLine : public CDraw +{ +private: + void __fastcall DrawCursor(void); + +protected: +public: + __fastcall CDrawLine(); + virtual __fastcall ~CDrawLine(){}; + virtual int __fastcall Finish(int X, int Y); + virtual void __fastcall Draw(TCanvas *tp); + virtual void __fastcall DrawSel(TCanvas *tp, int sw); + virtual void __fastcall Making(int X, int Y); + virtual int __fastcall HitTest(int x, int y); + virtual void __fastcall Moving(int X, int Y); + virtual void __fastcall Move(int X, int Y); +}; + +class CDrawBox : public CDraw +{ +private: + +protected: + void __fastcall DrawCursor(void); +public: + __fastcall CDrawBox(); + virtual __fastcall ~CDrawBox(){}; + + virtual int __fastcall Finish(int X, int Y); + virtual void __fastcall Draw(TCanvas *tp); + virtual void __fastcall DrawSel(TCanvas *tp, int sw); + virtual void __fastcall Making(int X, int Y); + virtual int __fastcall HitTest(int X, int Y); + virtual void __fastcall Moving(int X, int Y); + virtual void __fastcall Move(int X, int Y); +}; + +class CDrawText : public CDrawBoxS +{ +public: + int m_Grade; + int m_Shadow; + int m_Zero; + int m_Rot; + int m_RightAdj; + int m_PerSpect; + int m_Stack; + int m_StackPara; + int m_Vert; + int m_VertH; + SPERSPECT m_sperspect; + AnsiString m_Text; + TFont *pFont; + TColor m_Col1; + TColor m_Col2; + TColor m_Col3; + TColor m_Col4; + TColor m_ColS; + TColor m_ColB; + Graphics::TBitmap *pBitmap; + Graphics::TBitmap *pBrushBitmap; + int m_X; + int m_Y; +private: + Graphics::TBitmap * __fastcall DupeB(TColor col); + void __fastcall MakeBitmap(); + int __fastcall ZeroConv(BYTE charset, LPSTR p); + int __fastcall GetMaxWidth(int &n, LPCSTR p); + void __fastcall DrawTextVert(TCanvas *tp, int xc, int y, int fh, LPCSTR p); + void __fastcall DrawTextHoriANSI(TCanvas *tp, int xc, int y, LPCSTR p); + void __fastcall DrawText(TCanvas *cp, int x, int y, LPCSTR p, int zc); +protected: +public: + __fastcall CDrawText(); + __fastcall ~CDrawText(); + +// virtual int HitTest(int x, int y){return CDrawBox::HitTest(x, y) ? HT_I : HT_NONE;}; + int __fastcall Finish(int X, int Y); + void __fastcall Move(int X, int Y); + void __fastcall Draw(TCanvas *tp); + void __fastcall DrawFast(TCanvas *tp); + int __fastcall Edit(void); + int __fastcall Color(void){return Edit();}; + inline void __fastcall UpdateFont(TFont *pf); + + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + void __fastcall Copy(CDraw *dp); + void __fastcall Copy(CDraw *dp, int sw); + void __fastcall UpdateText(void); + void __fastcall UpdateTimeText(void); + int __fastcall IsTimeMacro(void); + void __fastcall ReleaseResource(void); +}; + +class CDrawGroup : public CDrawBox +{ +public: + int m_Max; + int m_Cnt; + int m_TransX, m_TransY; + int m_SX, m_SY; + TColor m_TransCol; + CDraw **pBase; + CDraw *pSel; +public: + int m_Hit; +protected: +public: + __fastcall CDrawGroup(); + __fastcall ~CDrawGroup(); + void __fastcall Free(void); + void __fastcall FreeItem(void); + void __fastcall AddItem(CDraw *dp); + void __fastcall DeleteItem(CDraw *dp); + void __fastcall ReleaseItem(CDraw *dp); + void __fastcall UpdatePic(Graphics::TBitmap *pBmp); + void __fastcall FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off); + void __fastcall Draw(TCanvas *tp); + void __fastcall DrawFast(TCanvas *tp); + void __fastcall DrawNotSel(TCanvas *tp); + CDraw* __fastcall SelectItem(int X, int Y); + int __fastcall HitTest(int x, int y){return CDrawBox::HitTest(x, y) ? HT_I : HT_NONE;}; + + CDraw * __fastcall MakeItem(int cmd); + CDraw * __fastcall AddItemCopy(CDraw *dp); + virtual void __fastcall SaveToStream(TStream *sp); + virtual int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + + virtual void __fastcall Copy(CDraw *dp); + void __fastcall UpdateText(void); + void __fastcall UpdateTimeText(void); + int __fastcall IsTimeMacro(void); + + void __fastcall BackItem(CDraw *pItem); + void __fastcall FrontItem(CDraw *pItem); + int __fastcall UpItem(int n); + int __fastcall DownItem(int n); + void __fastcall DrawTrans(TCanvas *tp); + + int __fastcall IsMacro(LPCSTR pKey); + void __fastcall AdjustTransPoint(void); + void __fastcall AdjustTransColor(Graphics::TBitmap *pBmp); + void __fastcall ReleaseResource(void); + void __fastcall GetColorBarPos(int &Y1, int &Y2); + CDraw * __fastcall GetLastItem(void); + + int __fastcall IsConvBitmap(CDraw *pItem); + void __fastcall ConvBitmap(CDraw *pItem); + CDrawPic* __fastcall MakePic(int x, int y, Graphics::TBitmap *pBitmap, int ov); +}; + +class CItem +{ +public: + int m_Ver; + int m_ASize; + int m_Align; + int m_Grade; + int m_Shadow; + int m_Line; + int m_Zero; + DWORD m_3d; + AnsiString m_Text; + TFont *m_pFont; + UCOL m_ColG[4]; + UCOL m_ColB[4]; + UCOL m_Back; + int m_OrgXW; + int m_OrgYW; + int m_TextXW; + int m_TextYW; +private: + UCOL m_cBack; + int m_Draft; + int m_fsCode; + int m_IniSize; + TMemoryStream *m_pMemStream; +private: + void __fastcall LoadDefault(void); + void __fastcall UpdateDefault(void); + void __fastcall SetFontSize(Graphics::TBitmap *pDest); + void __fastcall SetTextSize(Graphics::TBitmap *pDest); + int __fastcall GetMaxWH(int &W, int &H, Graphics::TBitmap *pDest, LPCSTR pText); + UINT __fastcall GetDrawFormat(void); + void __fastcall DrawText(RECT rc, int xoff, int yoff, Graphics::TBitmap *pDest, LPCSTR pText, UCOL ucol); + void __fastcall DrawTrans(Graphics::TBitmap *pDest, int x, int y, Graphics::TBitmap *pSrc); + LPBYTE __fastcall CreateTable(Graphics::TBitmap *pDest); + void __fastcall Draw3D(RECT &rc, Graphics::TBitmap *pDest, LPCSTR pText, UCOL cl[2]); + Graphics::TBitmap* __fastcall DrawExt(Graphics::TBitmap *pDest, RECT &rc, LPCSTR pText); + +protected: +public: + __fastcall CItem(void); + __fastcall ~CItem(); + void __fastcall Create(LPCBYTE ps, DWORD size); + DWORD __fastcall GetItemType(void); + LPCBYTE __fastcall CreateStorage(LPDWORD psize); + void __fastcall DeleteStorage(LPCBYTE pStorage); + void __fastcall Copy(CItem *sp); + int __fastcall EditDialog(HWND hWnd); + int __fastcall FontDialog(HWND hWnd); + DWORD __fastcall GetOrgSize(void); + inline LPCSTR __fastcall GetText(void){ + return m_Text.c_str(); + }; + inline void __fastcall SetDraft(int draft){ + m_Draft = draft; + }; + void __fastcall UpdateFont(void); + void __fastcall LoadFromInifile(LPCSTR pSect, LPCSTR pName); + void __fastcall SaveToInifile(LPCSTR pSect, LPCSTR pName); + void __fastcall DeleteInifile(LPCSTR pSect, LPCSTR pName); + Graphics::TBitmap* __fastcall Draw(Graphics::TBitmap *pDest, LPCSTR pText); +}; + +//*********************************************************** +//Common structer +//*********************************************************** +typedef struct { + DWORD m_dwVersion; + int m_WinNT; + UINT m_CodePage; + int m_MsgEng; + int m_BitPixel; + mmGetMacKey m_fGetMacKey; + mmConvMac m_fConvMac; + mmMultProc m_fMultProc; + mmColorComp m_fColorComp; + DWORD m_DefStgSize; + LPBYTE m_pDefStg; + TStringList *m_pTextList; + TStringList *m_pStyleList; + char m_BgnDir[512]; +}SYS; +extern SYS sys; +#endif + diff --git a/CItems/QSLBox/Item.ico b/CItems/QSLBox/Item.ico new file mode 100644 index 0000000000000000000000000000000000000000..b709881afc02636ff6ff58a882cf0f8e33f5aac7 GIT binary patch literal 766 zcmc(d%MHUI5JcBe3dkvEA5%t3qYa;Eg#wUhBP}2ykvD5uCRTEFX1$-;0WZQfo3MGl znee)p-N_Gp#-I3PSE5-!`;LH!62h8@l$KH=OX&Vs@2YT2Ey8j@q&c9*fl!{$3sXzZ znUo9jofArLSdFcdoGT0*!MXNI64&{Q+b7qWUwT8>_VfO}ac_=%J&!LQ&a0_A&cDBX OwyJvg+zY?MU-1U)I`Q}b literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/TextDlg.cpp b/CItems/QSLBox/TextDlg.cpp new file mode 100644 index 0000000..f9327a0 --- /dev/null +++ b/CItems/QSLBox/TextDlg.cpp @@ -0,0 +1,671 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TextDlg.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TTextDlgBox *TextDlgBox; +//--------------------------------------------------------------------- +__fastcall TTextDlgBox::TTextDlgBox(HWND hWnd) + : TForm(hWnd) +{ + MultProc(); + m_DisEvent = 1; + m_pBitmap = NULL; + m_Change = 0; + m_DropProfile = 0; + m_FText = ""; + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + + Caption = "Set text and colors - "VER" "TTL; + CancelBtn->Caption = "Cancel"; + FontBtn->Caption = "Font"; + SBM->Caption = "Mac"; + GBG->Caption = "Gradation"; + GBS->Caption = "Shadow"; + GBA->Caption = "Misc"; + CBFixed->Caption = "Fixed box-size"; + CBZero->Caption = "Slash zero"; + SBLD->Caption = "Del"; + SBLW->Caption = "Add"; + GBY->Caption = "Style profiles"; + L1->Caption = "Align"; + L2->Caption = "Style name"; + SBYD->Caption = "Del"; + SBYW->Caption = "Add"; + CBY->Text = "Untitled"; + SBM->Hint = "Insert macro-keyword"; + SBC->Hint = "Choose color's component"; + SBLD->Hint = "Delete the text in the list"; + SBLW->Hint = "Add current text into the list"; + SBYD->Hint = "Delete the style in the profiles"; + SBYW->Hint = "Add current style into the profiles"; + SB3DD->Hint = "Make the shadow shorter"; + SB3DI->Hint = "Make the shadow longer"; + FontBtn->Hint = "Choose font"; + SBFD->Hint = "Make the font smaller"; + SBFI->Hint = "Make the font bigger"; + } + else { + Caption = "テキストと色の設定 - "VER" "TTLJ; + CBY->Text = "無題"; + } + SBFD->Glyph->Assign(SB3DD->Glyph); + SBFI->Glyph->Assign(SB3DI->Glyph); + MultProc(); + if( sys.m_pTextList == NULL ){ + sys.m_pTextList = new TStringList; + LoadStringsFromIniFile(sys.m_pTextList, "Strings", ININAME); + MultProc(); + if(!sys.m_pTextList->Count){ + sys.m_pTextList->Add("%c\\r\\nur %r\\r\\nde %m"); + sys.m_pTextList->Add("Tnx for nice PIC\\r\\nur %r\\r\\nde %m"); + sys.m_pTextList->Add("%n\\r\\nBest 73\\r\\nde %m"); + } + } + ASSERT(sys.m_pTextList); + CBList->Items->Assign(sys.m_pTextList); + if( sys.m_pStyleList == NULL ){ + sys.m_pStyleList = new TStringList; + LoadStringsFromIniFile(sys.m_pStyleList, "Styles", ININAME); + MultProc(); + } + CBY->Items->Assign(sys.m_pStyleList); + CBY->Sorted = TRUE; + ShowHint = sys.m_WinNT; + MultProc(); +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormDestroy(TObject *Sender) +{ + if( m_pBitmap != NULL ) delete m_pBitmap; + MultProc(); + ASSERT(sys.m_pTextList); + sys.m_pTextList->Assign(CBList->Items); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TopMost(void) +{ + ::SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::NoTopMost(void) +{ + ::SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateUI(void) +{ + m_DisEvent++; + int f = SBG1->Down ? FALSE : TRUE; + PG2->Visible = f; + PG3->Visible = f; + PG4->Visible = f; + SBC->Visible = f && sys.m_fColorComp; + f = !SBS1->Down; + if( !f ) CB3D->Checked = FALSE; + CB3D->Enabled = f; + PB1->Visible = f && (!SBS2->Down || !CB3D->Checked); + PB2->Visible = f && (SBS4->Down || CB3D->Checked); + PB3->Visible = f && CB3D->Checked; + UDL->Enabled = f && (SBS3->Down || !CB3D->Checked); + SBLW->Enabled = (!m_FText.IsEmpty() && CBList->Items->IndexOf(m_FText) < 0) ? TRUE : FALSE; + SBLD->Enabled = CBList->ItemIndex >= 0 ? TRUE : FALSE; + SBYW->Enabled = !CBY->Text.IsEmpty(); + SBYD->Enabled = !CBY->Text.IsEmpty() && (sys.m_pStyleList->IndexOf(CBY->Text) >= 0); + UDX->Enabled = CB3D->Checked; + UDY->Enabled = CB3D->Checked; + SB3DI->Enabled = CB3D->Checked; + SB3DD->Enabled = CB3D->Checked; + if( sys.m_WinNT ){ + char bf[32]; + sprintf(bf, "W = %d", UDL->Position); + UDL->Hint = bf; + sprintf(bf, "3D(Y) = %d", UDY->Position); + UDY->Hint = bf; + sprintf(bf, "3D(X) = %d", UDX->Position); + UDX->Hint = bf; + } + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateMemoFont(BYTE charset) +{ + switch(charset){ + case SHIFTJIS_CHARSET: + case HANGEUL_CHARSET: + case CHINESEBIG5_CHARSET: // + case 134: // 簡略 + break; + default: + charset = Font->Charset; + break; + } + m_DisEvent++; + if( Memo->Font->Charset != charset ){ + Memo->Font->Charset = charset; + } + m_DisEvent--; +} +//--------------------------------------------------------------------- +int __fastcall TTextDlgBox::Execute(CItem *pItem) +{ + MultProc(); + m_Item.Copy(pItem); + UpdateDialog(&m_Item); + UpdateBitmap(); + m_DisEvent = 0; + MultProc(); + if( ShowModal() == IDOK ){ + MultProc(); + pItem->Copy(&m_Item); + if( pItem->m_ASize ){ + pItem->m_OrgXW = -1; + } + MultProc(); + return TRUE; + } + else { + MultProc(); + return FALSE; + } +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateFText(void) +{ + AnsiString as; + if( Memo->Text.IsEmpty() ){ + m_FText = ""; + } + else { + ::CrLf2Yen(as, Memo->Text); + LPSTR p = as.c_str(); + if( *p ){ + *(p+strlen(p)-1) = 0; + m_FText = p+1; + } + } + m_DisEvent++; + CBList->ItemIndex = CBList->Items->IndexOf(m_FText); + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateItem(CItem *pItem) +{ + UpdateUI(); + if( SBG1->Down ){ + pItem->m_Grade = 0; + } + else if( SBG2->Down ){ + pItem->m_Grade = 1; + } + else if( SBG3->Down ){ + pItem->m_Grade = 2; + } + else { + pItem->m_Grade = 3; + } + if( SBS1->Down ){ + pItem->m_Shadow = 0; + } + else if( SBS2->Down ){ + pItem->m_Shadow = 1; + } + else if( SBS3->Down ){ + pItem->m_Shadow = 2; + } + else { + pItem->m_Shadow = 3; + } + if( SBA1->Down ){ + pItem->m_Align = 0; + } + else if( SBA2->Down ){ + pItem->m_Align = 1; + } + else { + pItem->m_Align = 2; + } + pItem->m_ColB[0].c = PB1->Color; + pItem->m_ColB[1].c = PB2->Color; + pItem->m_ColB[2].c = PB3->Color; + pItem->m_ColG[0].c = PG1->Color; + pItem->m_ColG[1].c = PG2->Color; + pItem->m_ColG[2].c = PG3->Color; + pItem->m_ColG[3].c = PG4->Color; + pItem->m_Line = UDL->Position; + pItem->m_ASize = !CBFixed->Checked; + pItem->m_Zero = CBZero->Checked; + pItem->m_Text = Memo->Text.c_str(); + pItem->m_3d = (CB3D->Enabled && CB3D->Checked) ? 0x00010000 : 0; + pItem->m_3d |= ((UDY->Position << 8)&0x0000ff00); + pItem->m_3d |= (UDX->Position & 0x000000ff); +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateDialog(CItem *pItem) +{ + m_DisEvent++; + switch(pItem->m_Grade){ + case 1: + SBG2->Down = TRUE; + break; + case 2: + SBG3->Down = TRUE; + break; + case 3: + SBG4->Down = TRUE; + break; + default: + SBG1->Down = TRUE; + break; + } + switch(pItem->m_Shadow){ + case 1: + SBS2->Down = TRUE; + break; + case 2: + SBS3->Down = TRUE; + break; + case 3: + SBS4->Down = TRUE; + break; + default: + SBS1->Down = TRUE; + break; + } + switch(pItem->m_Align){ + case 1: + SBA2->Down = TRUE; + break; + case 2: + SBA3->Down = TRUE; + break; + default: + SBA1->Down = TRUE; + break; + } + PB1->Color = pItem->m_ColB[0].c; + PB2->Color = pItem->m_ColB[1].c; + PB3->Color = pItem->m_ColB[2].c; + PG1->Color = pItem->m_ColG[0].c; + PG2->Color = pItem->m_ColG[1].c; + PG3->Color = pItem->m_ColG[2].c; + PG4->Color = pItem->m_ColG[3].c; + UDL->Position = SHORT(pItem->m_Line); + CBFixed->Checked = !pItem->m_ASize; + CBZero->Checked = pItem->m_Zero; + CB3D->Checked = pItem->m_3d & 0x00010000; + int xm = pItem->m_3d & 0x000000ff; + int ym = (pItem->m_3d >> 8) & 0x000000ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + UDY->Position = SHORT(ym); + UDX->Position = SHORT(xm); + if( pItem->m_pFont != NULL ){ + UpdateMemoFont(pItem->m_pFont->Charset); + } + Memo->Text = pItem->m_Text.c_str(); + UpdateFText(); + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateBitmap(void) +{ + MultProc(); + m_Change = 0; + UpdateItem(&m_Item); + char bf[1024]; + sys.m_fConvMac(bf, m_Item.GetText(), sizeof(bf)-1); + MultProc(); + if( m_pBitmap == NULL ){ + int xw = m_Item.m_OrgXW; + int yw = m_Item.m_OrgYW; + if( (xw < 0)||(yw < 0) ){ + xw = 160; + yw = 128; + } + m_pBitmap = CreateBitmap(xw, yw); + } + FillBitmap(m_pBitmap, m_Item.m_Back); + MultProc(); + m_pBitmap = m_Item.Draw(m_pBitmap, bf); + PBox->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxPaint(TObject *Sender) +{ + if( m_pBitmap == NULL ) return; + + Graphics::TBitmap *pBitmap = m_pBitmap; + if( sys.m_BitPixel == 16 ){ + pBitmap = new Graphics::TBitmap; + pBitmap->Width = m_pBitmap->Width; + pBitmap->Height = m_pBitmap->Height; + pBitmap->Canvas->Draw(0, 0, m_pBitmap); + } + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[0][0]; + PBox->Canvas->Draw(0, 0, pBitmap); + pBitmap->Transparent = FALSE; + if( pBitmap != m_pBitmap ) delete pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + m_Change = 2; + Timer->Enabled = TRUE; + UpdateFText(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TimerTimer(TObject *Sender) +{ + if( m_Change ){ + m_Change--; + if( !m_Change ){ + Timer->Enabled = FALSE; + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBG1Click(TObject *Sender) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PB1Click(TObject *Sender) +{ + TPanel *pPanel = (TPanel *)Sender; + InitCustomColor(ColorDialog); + AddCustomColor(ColorDialog, PG1->Color); + AddCustomColor(ColorDialog, PG2->Color); + AddCustomColor(ColorDialog, PG3->Color); + AddCustomColor(ColorDialog, PG4->Color); + AddCustomColor(ColorDialog, PB1->Color); + AddCustomColor(ColorDialog, PB2->Color); + AddCustomColor(ColorDialog, m_Item.m_Back.c); + + ColorDialog->Color = pPanel->Color; + NoTopMost(); + int r = ColorDialog->Execute(); + TopMost(); + if( r == TRUE ){ + pPanel->Color = ColorDialog->Color; + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormActivate(TObject *Sender) +{ + TopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormDeactivate(TObject *Sender) +{ + NoTopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UDLClick(TObject *Sender, TUDBtnType Button) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FontBtnClick(TObject *Sender) +{ + FontDialog->Font->Assign(m_Item.m_pFont); + FontDialog->Font->Color = PG1->Color; + NoTopMost(); + int r = FontDialog->Execute(); + TopMost(); + if( r == TRUE ){ + m_Item.m_pFont->Assign(FontDialog->Font); + PG1->Color = FontDialog->Font->Color; + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMClick(TObject *Sender) +{ + if( sys.m_fGetMacKey ){ + char bf[256]; + NoTopMost(); + int r = sys.m_fGetMacKey(bf, sizeof(bf)); + TopMost(); + if( r ){ + Memo->SetFocus(); + for( LPCSTR p = bf; *p; p++ ){ + ::PostMessage(Memo->Handle, WM_CHAR, *p, 0); + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBCClick(TObject *Sender) +{ + if( sys.m_fColorComp ){ + UCOL col[4]; + col[0].c = PG1->Color; + col[1].c = PG2->Color; + col[2].c = PG3->Color; + col[3].c = PG4->Color; + NoTopMost(); + int r = sys.m_fColorComp(&col[0].d); + TopMost(); + if( r ){ + PG1->Color = col[0].c; + PG2->Color = col[1].c; + PG3->Color = col[2].c; + PG4->Color = col[3].c; + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLWClick(TObject *Sender) +{ + m_DisEvent++; + CBList->Items->Add(m_FText); + CBList->ItemIndex = CBList->Items->IndexOf(m_FText); + UpdateUI(); + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLDClick(TObject *Sender) +{ + m_DisEvent++; + if( CBList->ItemIndex >= 0 ){ + int n = CBList->ItemIndex; + CBList->ItemIndex = -1; + CBList->Items->Delete(n); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBListChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( CBList->ItemIndex < 0 ) return; + + m_DisEvent++; + AnsiString cs; + AnsiString as = CBList->Items->Strings[CBList->ItemIndex]; + m_FText = as; + ::Yen2CrLf(cs, as); + Memo->Text = cs; + UpdateBitmap(); + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBYWClick(TObject *Sender) +{ + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r < 0 ) r = sys.m_pStyleList->Count; + + CItem *pItem = new CItem; + pItem->Copy(&m_Item); + pItem->m_Text = CBY->Text; + char bf[64]; + sprintf(bf, "Style.%u", r); + pItem->SaveToInifile(bf, ININAME); + delete pItem; + + if( r == sys.m_pStyleList->Count ){ + CBY->Items->Add(CBY->Text); + sys.m_pStyleList->Add(CBY->Text); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBYDClick(TObject *Sender) +{ + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r >= 0 ){ + char bf[64]; + CItem *pItem = new CItem; + int i; + for( i = r; i < sys.m_pStyleList->Count - 1; i++ ){ + sprintf(bf, "Style.%u", i+1); + pItem->LoadFromInifile(bf, ININAME); + sprintf(bf, "Style.%u", i); + pItem->SaveToInifile(bf, ININAME); + MultProc(); + } + sprintf(bf, "Style.%u", i); + pItem->DeleteInifile(bf, ININAME); + delete pItem; + sys.m_pStyleList->Delete(r); + r = CBY->Items->IndexOf(CBY->Text); + if( r >= 0 ) CBY->Items->Delete(r); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( !m_DropProfile ){ + UpdateUI(); + return; + } + m_DropProfile = 0; + + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r >= 0 ){ + AnsiString as = m_Item.m_Text; + CItem *pItem = new CItem; + char bf[64]; + sprintf(bf, "Style.%u", r); + pItem->LoadFromInifile(bf, ININAME); + m_Item.Copy(pItem); + delete pItem; + m_Item.m_Text = as; + UpdateDialog(&m_Item); + UpdateBitmap(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYKeyPress(TObject *Sender, char &Key) +{ + m_DropProfile = 0; + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYDropDown(TObject *Sender) +{ + m_DropProfile = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_DisEvent ) return; + + m_DisEvent++; + if( Button == mbRight ){ + CB3D->Checked = FALSE; + } + else { + CB3D->Checked = TRUE; + int xc = m_pBitmap->Width / 2; + int yc = m_pBitmap->Height / 2; + int x = X - xc; + int y = Y - yc; + x = x * 48 / xc; + y = y * 48 / yc; + UDX->Position = SHORT(x); + UDY->Position = SHORT(y); + } + m_DisEvent--; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UD3D(int a) +{ + m_DisEvent++; + int x = UDX->Position; + int y = UDY->Position; + int xs = (x >= 0) ? 1 : -1; + int ys = (y >= 0) ? 1 : -1; + x = ABS(x); + y = ABS(y); + if( (x == y) && !(x & 1) ){ + x += a; + y += a; + if( x < 4 ) x = 4; + if( y < 4 ) y = 4; + if( x > 48 ) x = 48; + if( y > 48 ) y = 48; + } + else { + if( x < y ) x = y; + x &= 0xfffffffc; + y = x; + } + x *= xs; y *= ys; + UDX->Position = SHORT(x); + UDY->Position = SHORT(y); + m_DisEvent--; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SB3DIClick(TObject *Sender) +{ + UD3D((Sender == SB3DI) ? 4 : -4); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBFDClick(TObject *Sender) +{ + if( m_Item.m_pFont == NULL ) return; + + if( Sender == SBFD ){ + if( m_Item.m_pFont->Height < -1 ) m_Item.m_pFont->Height++; + UpdateBitmap(); + } + else { + m_Item.m_pFont->Height--; + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- + diff --git a/CItems/QSLBox/TextDlg.dfm b/CItems/QSLBox/TextDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..796b40f29445c533884763d81f40618fb2be3539 GIT binary patch literal 9064 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 QrQxhAQnbS#^*fCI1weygtN;K2 literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/TextDlg.h b/CItems/QSLBox/TextDlg.h new file mode 100644 index 0000000..f7a95da --- /dev/null +++ b/CItems/QSLBox/TextDlg.h @@ -0,0 +1,127 @@ +//---------------------------------------------------------------------------- +#ifndef TextDlgH +#define TextDlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "ComLib.h" +#include +#include +//---------------------------------------------------------------------------- +class TTextDlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TButton *FontBtn; + TMemo *Memo; + TGroupBox *GBG; + TSpeedButton *SBM; + TSpeedButton *SBG1; + TSpeedButton *SBG2; + TSpeedButton *SBG3; + TSpeedButton *SBG4; + TPanel *PG1; + TPanel *PG2; + TPanel *PG3; + TPanel *PG4; + TSpeedButton *SBC; + TGroupBox *GBS; + TSpeedButton *SBS1; + TSpeedButton *SBS2; + TSpeedButton *SBS3; + TSpeedButton *SBS4; + TPanel *PB1; + TPanel *PB2; + TPanel *PB3; + TUpDown *UDL; + TGroupBox *GB3D; + TCheckBox *CB3D; + TUpDown *UDY; + TUpDown *UDX; + TSpeedButton *SB3DI; + TSpeedButton *SB3DD; + TLabel *L1; + TLabel *LY; + TLabel *LX; + TGroupBox *GBA; + TSpeedButton *SBA1; + TSpeedButton *SBA2; + TSpeedButton *SBA3; + TCheckBox *CBFixed; + TCheckBox *CBZero; + TComboBox *CBList; + TSpeedButton *SBLW; + TSpeedButton *SBLD; + TGroupBox *GBY; + TComboBox *CBY; + TLabel *L2; + TSpeedButton *SBYW; + TSpeedButton *SBYD; + TPaintBox *PBox; + TFontDialog *FontDialog; + TColorDialog *ColorDialog; + TTimer *Timer; + TSpeedButton *SBFD; + TSpeedButton *SBFI; + void __fastcall FormDestroy(TObject *Sender); + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall MemoChange(TObject *Sender); + void __fastcall TimerTimer(TObject *Sender); + void __fastcall SBG1Click(TObject *Sender); + void __fastcall PB1Click(TObject *Sender); + void __fastcall FormActivate(TObject *Sender); + void __fastcall FormDeactivate(TObject *Sender); + void __fastcall UDLClick(TObject *Sender, TUDBtnType Button); + void __fastcall FontBtnClick(TObject *Sender); + void __fastcall SBMClick(TObject *Sender); + void __fastcall SBCClick(TObject *Sender); + void __fastcall SBLWClick(TObject *Sender); + void __fastcall SBLDClick(TObject *Sender); + void __fastcall CBListChange(TObject *Sender); + void __fastcall SBYWClick(TObject *Sender); + void __fastcall SBYDClick(TObject *Sender); + void __fastcall CBYChange(TObject *Sender); + void __fastcall CBYKeyPress(TObject *Sender, char &Key); + void __fastcall CBYDropDown(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall SB3DIClick(TObject *Sender); + void __fastcall SBFDClick(TObject *Sender); +private: + int m_DisEvent; + int m_DropProfile; + Graphics::TBitmap *m_pBitmap; + CItem m_Item; + int m_Change; + AnsiString m_FText; + void __fastcall TopMost(void); + void __fastcall NoTopMost(void); + void __fastcall UpdateMemoFont(BYTE charset); + void __fastcall UpdateFText(void); + void __fastcall UpdateUI(void); + void __fastcall UpdateItem(CItem *pItem); + void __fastcall UpdateDialog(CItem *pItem); + void __fastcall UpdateBitmap(void); + void __fastcall UD3D(int a); + +public: + virtual __fastcall TTextDlgBox(HWND hWnd); + + int __fastcall Execute(CItem *pItem); +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TTextDlgBox *TextDlgBox; +//---------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/CItems/QSLBox/qslbox.bpr b/CItems/QSLBox/qslbox.bpr new file mode 100644 index 0000000..754f354 --- /dev/null +++ b/CItems/QSLBox/qslbox.bpr @@ -0,0 +1,182 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE セクション +# --------------------------------------------------------------------------- +# プロジェクトメイクファイルの以下のセクションは、IDE によって管理されます。 +# このセクションを変更する場合は、できるだけ IDE を使用するようにして +# ください。 +# --------------------------------------------------------------------------- + +VERSION = BCB.03 +# --------------------------------------------------------------------------- +PROJECT = qslbox.dll +OBJFILES = qslbox.obj Comlib.obj About.obj TextDlg.obj +RESFILES = qslbox.res +DEFFILE = +RESDEPEN = $(RESFILES) About.dfm TextDlg.dfm +LIBFILES = +LIBRARIES = VCL35.lib +SPARELIBS = VCL35.lib +PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ + QRPT35.bpi TEEUI35.bpi VCLSMP35.bpi TEEDB35.bpi TEE35.bpi ibsmp35.bpi \ + NMFAST35.bpi INETDB35.bpi INET35.bpi +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +# --------------------------------------------------------------------------- +CFLAG1 = -WD -O2 -Hc -w -Ve -d -k- -vi -c -b- -w-par -w-inl -Vx +CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm +CFLAG3 = -Tkh30000 +PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$L- -$D- -v -JPHN -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn /d_RTLDLL +LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gn +IFLAGS = +# --------------------------------------------------------------------------- +ALLOBJ = c0d32.obj sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1041 +CodePage=932 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=2 +Item0=_RTLDLL +Item1=_RTLDLL;USEPACKAGES + +[HistoryLists\hlHostApplication] +Count=1 +Item0=D:\Mmsstv\Mmsstv.exe + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication=D:\Mmsstv\Mmsstv.exe + +!endif + +# --------------------------------------------------------------------------- +# MAKE セクション +# --------------------------------------------------------------------------- +# IDE はプロジェクトファイルのこのセクションは使用していません。 +# コマンドラインの MAKE ユーティリティを使用してビルドするためのものです。 +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- + \ No newline at end of file diff --git a/CItems/QSLBox/qslbox.cpp b/CItems/QSLBox/qslbox.cpp new file mode 100644 index 0000000..8aa137f --- /dev/null +++ b/CItems/QSLBox/qslbox.cpp @@ -0,0 +1,184 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +#include "ComLib.h" +#include "About.h" +//--------------------------------------------------------------------------- +USEUNIT("Comlib.cpp"); +USEFORM("About.cpp", AboutDlg); +USERC("qslbox.rc"); +USEFORM("TextDlg.cpp", TextDlgBox); +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + switch(reason){ + case DLL_PROCESS_ATTACH: + { + memset(&sys, 0, sizeof(sys)); + + sys.m_dwVersion = ::GetVersion(); + sys.m_WinNT = (sys.m_dwVersion < 0x80000000) ? TRUE : FALSE; + sys.m_CodePage = ::GetACP(); // Get codepage + + char bf[512]; + ::GetModuleFileName(hinst, bf, sizeof(bf)); + ::SetDirName(sys.m_BgnDir, bf); + + HDC hdcScreen = ::CreateDC("DISPLAY", NULL, NULL, NULL); + sys.m_BitPixel = ::GetDeviceCaps(hdcScreen, BITSPIXEL); + ::DeleteDC(hdcScreen); + + _setmbcp(_MB_CP_ANSI); + } + break; + case DLL_PROCESS_DETACH: + sys.m_fMultProc = NULL; + if( sys.m_pDefStg != NULL ){ + CItem *pItem = new CItem; + pItem->Create(NULL, 0); + pItem->SaveToInifile("Default", ININAME); + delete pItem; + delete sys.m_pDefStg; + sys.m_pDefStg = NULL; + } + if( sys.m_pTextList != NULL ){ + SaveStringsToIniFile(sys.m_pTextList, "Strings", ININAME); + delete sys.m_pTextList; + sys.m_pTextList = NULL; + } + if( sys.m_pStyleList != NULL ){ + SaveStringsToIniFile(sys.m_pStyleList, "Styles", ININAME); + delete sys.m_pStyleList; + sys.m_pStyleList = NULL; + } + break; + } + return 1; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmLanguage(DWORD lang) +{ + sys.m_MsgEng = lang; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmAboutDialog(HWND hWnd) +{ + TAboutDlg *pBox = new TAboutDlg(hWnd); + pBox->ShowModal(); + delete pBox; + ::SetForegroundWindow(hWnd); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HANDLE mcmCreateObject(LPCBYTE pStorage, DWORD Size) +{ + CItem *pItem = new CItem; + ASSERT(pItem); + if( pItem != NULL ) pItem->Create(pStorage, Size); + return (HANDLE)pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetItemType(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetItemType(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCBYTE mcmCreateStorage(HANDLE hObj, LPDWORD pSize) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->CreateStorage(pSize); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteStorage(HANDLE hObj, LPCBYTE pStorage) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->DeleteStorage(pStorage); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteObject(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + if( pItem != NULL ) delete pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmEdit(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + int r = pItem->EditDialog(hWnd); + ::SetForegroundWindow(hWnd); + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmFont(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + int r = pItem->FontDialog(hWnd); + ::SetForegroundWindow(hWnd); + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetOrgSize(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetOrgSize(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCSTR mcmGetUserText(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetText(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hDest, LPCSTR pText) +{ + ASSERT(hObj); + ASSERT(hDest); + CItem *pItem = (CItem *)hObj; + + // Draw object to hDest + Graphics::TBitmap *pDest = new Graphics::TBitmap; + pDest->Handle = hDest; + pDest = pItem->Draw(pDest, pText); + + HBITMAP hb = pDest->ReleaseHandle(); + delete pDest; + return (hb != hDest) ? hb : NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hDest, HBITMAP hSrc) +{ + ASSERT(0); // This function should not be called + return NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetDraft(HANDLE hObj, DWORD draft) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetDraft(draft); +} \ No newline at end of file diff --git a/CItems/QSLBox/qslbox.rc b/CItems/QSLBox/qslbox.rc new file mode 100644 index 0000000..0e32c13 --- /dev/null +++ b/CItems/QSLBox/qslbox.rc @@ -0,0 +1,2 @@ +8000 ICON DISCARDABLE "Item.ico" + \ No newline at end of file diff --git a/CItems/QSLBox/qslbox.res b/CItems/QSLBox/qslbox.res new file mode 100644 index 0000000000000000000000000000000000000000..4dd7390f71ee04e574b06c8d2cfc2a681a403a8f GIT binary patch literal 860 zcmc(eJr08~427MxbH&iT89Vj}94*&i;wl^~mT9D?P!vuG?B(lo9XoAUC2&V$W|&kT5CLM5L5yn#e|&2uoTMvFcJ84mRq} z=F@ROPsurxa?yEoOengr=5bMyV+#$2aBO>xGE6_Utv$A$fBXWm_Va#Su|I5a)#J^L pUORQO)4%88cMsf(Q|-a&5m&wA{nNy}n>n!CA0)=kr@*Er$QSFo02%-Q literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/qslbox.tds b/CItems/QSLBox/qslbox.tds new file mode 100644 index 0000000000000000000000000000000000000000..457c25803fe7e4bdd8c18db709cb3e3d8889fa56 GIT binary patch literal 327680 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

F^YZjfqT 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�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 a8G(#IMj#`Q5y%MqKSE%6duiz(mi`agaZYmp literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SB3DD.bmp b/CItems/QSLBox/res/SB3DD.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1c74fe6a4e3759ecbc319c7f83a2c8b0399e485a GIT binary patch literal 246 zcmZuqu?@f=3`?a-S$jtB=-ywL%F1cEs%x-GKphI$j$$WV_bYK8$O#;YP4;25!G8pY zW@{l}lwxL38a|%5vjTA00@XYkT1u!^MMbcqbP;7*sB0|JUtWIZ=X~y)`{#ch?+Zs& literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SB3DI.bmp b/CItems/QSLBox/res/SB3DI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c162a1f25dbdeb966d95d590e6c23d9c0f2a39f2 GIT binary patch literal 246 zcmZuqITC;{2*ep@Xnlt7u=g)i+VV7BWgB-PbRpRzY(lR4ld1=D0>{KAdj_7oA|wpm vOTe%a5l{vrw~RptV6g>yXGuDQbrw|`Gc_t1jr3*NU03IIzu)(~p5Ood=GRA6 literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBA1.bmp b/CItems/QSLBox/res/SBA1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..732f99bcf9e86f7e43f9af714e273bf8543a5f03 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT rF%W`;fJ8YI0ENK-mCp|2mNURrLWEEh1BIa4;Tlj)gUG`r5$ekUHr6~s literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBA2.bmp b/CItems/QSLBox/res/SBA2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..74ba1fb9e16fac13616763ee43e5417cb05fa89e GIT binary patch literal 246 zcmZupK@Na02&;+7u0F$ec=s=!+?A*8RbE+vjYMM^g|=kJ`5EnS&{5I}owE9e9|@EWcy>J$ literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBA3.bmp b/CItems/QSLBox/res/SBA3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..768947d6fb38562c449aa53f93401f15d9529856 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT rF%W`;fJ8YI0ENK-#xE~GJQ3a{)VMo3qH; zi_-Hi&}3Q401~UzTEQ%$KZ(c^SDL9QpTL6X&ayrfx*;ggMLXP{G`r3Ip61hD?6PhL>mAA literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBG2.bmp b/CItems/QSLBox/res/SBG2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a737fbe26a131cf64a1f657caa827f37fda036ac GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT YF%W`;fJ8YI%$#}m?(W_1-qD)|0BBrzR{#J2 literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBG3.bmp b/CItems/QSLBox/res/SBG3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3d99ffbcc88173b906f10b0b159c492867a812b6 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT YF%W`;fJ8YIydwa1699J!fSEV|05?N<%>V!Z literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBG4.bmp b/CItems/QSLBox/res/SBG4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8cb6c5ef32a327697f6977ebb3189a5f4a525fa5 GIT binary patch literal 246 zcmZvRu?>JQ3z5 zi{$=iXjrBcfFnw44P?>%OYck=Jf2|ZP$}jr5Ch5JtY$h6sy9+KjX<(;qNzC!H8XH$ LK=I+l0=x4CK^}Oh literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBS1.bmp b/CItems/QSLBox/res/SBS1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..593f6fd4c50d22a02ed2e7a2ded5100e242a396c GIT binary patch literal 246 zcmZvT%ME}q3`2v&0F1#L+*yaJw{B5&n@+_wyd)q#!maHnc9wOQz=q9mIyuPbL2>;P z5(`TSLm8#_j$5GqMb#$AvlWuQXe@FKUbA}xR>p{Nuic)j$86u8qE6Az?DT;Hhv`-^ literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBS2.bmp b/CItems/QSLBox/res/SBS2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3e9baf8d7069b41337877151e0a3baabaf62175d GIT binary patch literal 246 zcmZvSu?>JQ3Ye8pg_X#e|G-Y?Xo@xSkU}vu+f9) z{%0f#W9-0Lt=0+^H2 J=OAj``vYM7O9=n~ literal 0 HcmV?d00001 diff --git a/CItems/QSLBox/res/SBS4.bmp b/CItems/QSLBox/res/SBS4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b6e587b41e128ae5ed660dad081092ac90b5e919 GIT binary patch literal 246 zcmZvTu?@p83 +#pragma hdrstop + +#include "About.h" +#include "ComLib.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TAboutDlg *AboutDlg; +//--------------------------------------------------------------------- +#if UseHWND +__fastcall TAboutDlg::TAboutDlg(HWND hWnd) + : TForm(hWnd) +#else +__fastcall TAboutDlg::TAboutDlg(TComponent* AOwner) + : TForm(AOwner) +#endif +{ + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Caption = TTL; + } + else { + Caption = TTLJ; + } + LVer->Caption = VER" "AUT; + HICON hIcon = ::LoadIcon(HInstance, (LPCSTR)8000); + TIcon *pIcon = new TIcon; + pIcon->Handle = hIcon; + Image->Picture->Icon = pIcon; +} +//--------------------------------------------------------------------- + + \ No newline at end of file diff --git a/CItems/TEXTBOX/About.dfm b/CItems/TEXTBOX/About.dfm new file mode 100644 index 0000000000000000000000000000000000000000..aaa1fccf810c4dc040d3bc2e069eba74038e8dfa GIT binary patch literal 484 zcmX|;!BWC75Qam5wop{`;!&PJxp{^nf*|eC2uDrn0-1?PCk-QB;aPkjAHu6A?^@Dg z4w?M3-|YVT=eLeXr|UnF-uNE1o1Z0wNYHQBNGFmT-Qz3g_^6CwsmnK|GLcF73%OmX zVo;%e=U_Wg+GCWfvN|J2^}tI=G;o;L<+Esik*{yZGoo&sG(S_@k{+Mz8HLgEHb7M z@XB}w%EWx~z5oCK literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/About.h b/CItems/TEXTBOX/About.h new file mode 100644 index 0000000..21c19b6 --- /dev/null +++ b/CItems/TEXTBOX/About.h @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------------- +#ifndef OCRH +#define OCRH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ComLib.h" +//---------------------------------------------------------------------------- +class TAboutDlg : public TForm +{ +__published: + TButton *OKBtn; + TLabel *LVer; + TImage *Image; +private: +public: +#if UseHWND + virtual __fastcall TAboutDlg(HWND hWnd); +#else + virtual __fastcall TAboutDlg(TComponent* AOwner); +#endif +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TAboutDlg *AboutDlg; +//---------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/CItems/TEXTBOX/CodeVw.cpp b/CItems/TEXTBOX/CodeVw.cpp new file mode 100644 index 0000000..93c54af --- /dev/null +++ b/CItems/TEXTBOX/CodeVw.cpp @@ -0,0 +1,479 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "CodeVw.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +//TCodeView *CodeView; +//--------------------------------------------------------------------------- +__fastcall TCodeView::TCodeView(TComponent* Owner) + : TForm(Owner) +{ + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + +// Caption = "Character code list"; + SBClose->Caption = "Close"; + SBOut->Caption = "EUDC"; + SBEdit->Caption = "Edit"; + SBClear->Caption = "Clear"; + + SBFont->Hint = "Choose font"; + SBClear->Font->Size = 10; + SBOut->Font->Size = 10; + SBEdit->Font->Size = 10; + } + SBA->Hint = "Webdings"; + SBB->Hint = "Wingdings"; + SBC->Hint = "Symbol"; + SBUS->Hint = "English(ANSI)"; + SBJA->Hint = sys.m_MsgEng ? "Japanese(Shift-JIS)" : "日本語(シフトJIS)"; + SBHL->Hint = sys.m_MsgEng ? "Korean(Hangul)" : "韓国語(ハングル)"; + SBBY->Hint = sys.m_MsgEng ? "Chinese(GB2312)" : "中国語(簡体)"; + SBBV->Hint = sys.m_MsgEng ? "Chinese(BIG5)" : "中国語(繁体)"; + SBOut->Hint = "EUDC(End-user-defined-characters)"; + m_hWnd = NULL; + m_pFont = NULL; + m_Base = 0; + m_MouseDown = 0; + CheckFontCharset(); + SBJA->Enabled = sys.m_tFontFam[fmJA]; + SBHL->Enabled = sys.m_tFontFam[fmHL] || sys.m_tFontFam[fmJOHAB]; + SBBV->Enabled = sys.m_tFontFam[fmBV]; + SBBY->Enabled = sys.m_tFontFam[fmBY]; + + UpdateXW(); + int YW = GetSystemMetrics(SM_CYFULLSCREEN); + Left = sys.m_CodeLeft; + Top = sys.m_CodeTop; + if( Left < 0 ) Left = 0; + if( Top + Height > YW ) Top = YW - Height; + SBEdit->Enabled = sys.m_fEudc; + ShowHint = sys.m_WinNT; +} +//--------------------------------------------------------------------------- +WORD __fastcall TCodeView::GetEUDC(int y, int x) +{ +const WORD _tOut[]={0xf040, 0xf050, 0xf060, 0xf070, + 0xf080, 0xf090, 0xf0a0, 0xf0b0, + 0xf0c0, 0xf0d0, 0xf0e0, 0xf0f0, + 0xf140, 0xf150, 0xf160, 0xf170, +}; +const WORD _tOutHL[]={0xc9a0, 0xc9b0, 0xc9c0, 0xc9d0, + 0xc9e0, 0xc9f0, 0xfea0, 0xfeb0, + 0xfec0, 0xfed0, 0xfee0, 0xfef0, + 0, 0, 0, 0, +}; +const WORD _tOutBV[]={0xfa40, 0xfa50, 0xfa60, 0xfa70, + 0xfaa0, 0xfab0, 0xfac0, 0xfad0, + 0xfae0, 0xfaf0, 0xfb40, 0xfb50, + 0xfb60, 0xfb70, 0xfba0, 0xfbb0, +}; +const WORD _tOutBY[]={0xaaa0, 0xaab0, 0xaac0, 0xaad0, + 0xaae0, 0xaaf0, 0xaba0, 0xabb0, + 0xabc0, 0xabd0, 0xabe0, 0xabf0, + 0xaca0, 0xacb0, 0xacc0, 0xacd0, +}; + int c; + switch(m_pFont->Charset){ + case SHIFTJIS_CHARSET: + c = _tOut[y] + x; + if( (c==0xf07f)||(c==0xf0fd)||(c==0xf0fe)||(c==0xf0ff)||(c==0xf17f) ) c = 0; + break; + case HANGEUL_CHARSET: + c = _tOutHL[y]; + if( c ){ + c += x; + if( (c==0xc9a0)||(c==0xfea0)||(c==0xc9ff)||(c==0xfeff) ) c = 0; + } + break; + case CHINESEBIG5_CHARSET: // 台湾 + c = _tOutBV[y] + x; + if( (c==0xfa7f)||(c==0xfaa0)||(c==0xfaff)||(c==0xfb7f)||(c==0xfba0) ) c = 0; + break; + case 134: // 中国語簡略 + c = _tOutBY[y] + x; + if( (c==0xaaa0)||(c==0xaaff)||(c==0xaba0)||(c==0xabff)||(c==0xaca0) ) c = 0; + break; + default: + c = 0; + break; + } + return WORD(c); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::UpdateTitle(void) +{ + AnsiString as = sys.m_MsgEng ? "Character code list" : "文字コード表"; + as += " ["; + as += m_pFont->Name; + AddStyle(as, m_pFont->Charset, 0); + as += "]"; + Caption = as; +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::UpdateXW(void) +{ + if( SBOut->Down || m_Base ){ + m_XW = PBox->Width / 17; + m_XW--; + m_YW1 = m_YW = PBox->Height / 17; + m_XW1 = PBox->Width - (m_XW * 16); + SBEdit->Visible = SBOut->Down; + UDMB->Visible = m_Base ? TRUE : FALSE; + } + else { + m_XW1 = m_XW = PBox->Width / 17; + m_YW1 = m_YW = PBox->Height / 17; + SBEdit->Visible = FALSE; + UDMB->Visible = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SetPBoxFont(TCanvas *pCanvas) +{ + pCanvas->Font = m_pFont; + pCanvas->Font->Height = -(m_YW-5); + TFontStyles fs; + fs = Code2FontStyle(0); + pCanvas->Font->Style = fs; +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::DrawChar(TCanvas *pCanvas, int c, BOOL f) +{ + + int x = c % 16; + int y = c / 16; + char bf[32]; + LPSTR t = bf; + if( SBOut->Down ){ + c = GetEUDC(y, x); + } + else if( c ){ + c += m_Base; + } + if( !c ) return; + if( c & 0x00ff00 ) *t++ = BYTE(c>>8); + *t++ = BYTE(c); + *t = 0; + pCanvas->Font->Color = f ? clWhite : clBlack; + int fw = pCanvas->TextWidth(bf); + int fh = pCanvas->TextHeight(bf); + int xx = m_XW1 + x * m_XW + (m_XW-fw)/2; + int yy = m_YW1 + y * m_YW + (m_YW-fh)/2; + ::SetBkMode(pCanvas->Handle, TRANSPARENT); + pCanvas->TextOut(xx, yy, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::DrawCursor(TCanvas *pCanvas, int c, BOOL f) +{ + TRect rc; + + int x = c % 16; + int y = c / 16; + rc.Left = 1 + m_XW1 + x * m_XW; + rc.Top = 1 + m_YW1 + y * m_YW; + rc.Right = rc.Left + m_XW - 1; + rc.Bottom = rc.Top + m_YW - 1; + TColor col; + if( f ){ + col = clBlue; + } + else if( (!SBOut->Down && !m_Base) && m_tPfx[c] ){ + col = clGray; + } + else { + col = clWhite; + } + pCanvas->Pen->Color = col; + pCanvas->Brush->Color = col; + pCanvas->FillRect(rc); + DrawChar(pCanvas, c, f); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::PBoxPaint(TObject *Sender) +{ + if( !m_pFont ) return; + + CWaitCursor w; + Graphics::TBitmap *pBmp = new Graphics::TBitmap; + pBmp->Width = PBox->Width; + pBmp->Height = PBox->Height; + TCanvas *pCanvas = pBmp->Canvas; + BOOL eud = SBOut->Down; + if( !m_Base && !eud ) memset(m_tPfx, 0, sizeof(m_tPfx)); + SetPBoxFont(pCanvas); + if( !eud ) SetMBCP(m_pFont->Charset); + int x, y, xx, yy, fw, fh; + char bf[16]; + int c = 0; + for( y = 0; y < 16; y++ ){ + for( x = 0; x < 16; x++ ){ + if( eud ){ + DrawChar(pCanvas, c, FALSE); + } + else { + if( !m_Base && (_mbsbtype((const unsigned char *)&c, 0) == _MBC_LEAD) ){ + m_tPfx[c] = TRUE; + DrawCursor(pCanvas, c, FALSE); + } + else { + DrawChar(pCanvas, c, FALSE); + } + } + c++; + } + } + pCanvas->Font = Font; + pCanvas->Pen->Color = clBlack; + ::SetBkMode(pCanvas->Handle, TRANSPARENT); + for( y = 0; y < 16; y++ ){ + wsprintf(bf, "%X", y); + fw = pCanvas->TextWidth(bf); + fh = pCanvas->TextHeight(bf); + xx = m_XW1 + y*m_XW + (m_XW-fw)/2; + yy = (m_YW1-fh)/2; + pCanvas->TextOut(xx, yy, bf); + + if( eud ){ + c = GetEUDC(y, 1) & 0xfff0; + if( c ){ + wsprintf(bf, "%04x", c); + } + else { + bf[0] = 0; + } + } + else if( m_Base ){ + wsprintf(bf, "%04x", y*16 + m_Base); + } + else { + wsprintf(bf, "%02X", y*16); + } + fw = pCanvas->TextWidth(bf); + fh = pCanvas->TextHeight(bf); + xx = (m_XW1-fw)/2; + yy = m_YW1 + y*m_YW + (m_YW-fh)/2; + pCanvas->TextOut(xx, yy, bf); + + pCanvas->Pen->Width = y ? 1 : 2; + pCanvas->MoveTo(0, m_YW1 + y*m_YW); + pCanvas->LineTo(PBox->Width, m_YW1 + y*m_YW); + pCanvas->MoveTo(m_XW1 + y*m_XW, 0); + pCanvas->LineTo(m_XW1 + y*m_XW, PBox->Height); + } + PBox->Canvas->Draw(0, 0, pBmp); + delete pBmp; + m_pfxCount = 0; + for( x = 0; x < 256; x++ ){ + if( m_tPfx[x] ){ + m_tPfxIdx[m_pfxCount] = x; + m_pfxCount++; + } + } + if( m_pfxCount != UDMB->Max ) UDMB->Max = short(m_pfxCount - 1); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::ReqClose(void) +{ + sys.m_CodeLeft = Left; + sys.m_CodeTop = Top; + if( SBOut->Visible ) sys.m_CodeOut = SBOut->Down; + ::PostMessage(m_hWnd, WM_FORMCLOSE, 0, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::FormClose(TObject *Sender, TCloseAction &Action) +{ + if( Action == caHide ) ReqClose(); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::Execute(HWND hWnd, TFont *pFont) +{ + int f = Visible; + if( f && SBOut->Visible ) sys.m_CodeOut = SBOut->Down; + m_hWnd = hWnd; + m_pFont = pFont; + m_Base = 0; + SBOut->Visible = GetEUDC(0, 1) ? TRUE : FALSE; + SBOut->Down = SBOut->Visible && sys.m_CodeOut; + UpdateXW(); + UpdateTitle(); + Visible = TRUE; + if( f ) PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBCloseClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button == mbRight) && (m_Base || SBOut->Down) ){ + if( m_Base ){ + m_Base = 0; + } + else { + SBOut->Down = FALSE; + } + UpdateXW(); PBoxPaint(NULL); + return; + } + if( Button != mbLeft ) return; + + X -= m_XW1; + Y -= m_YW1; + if( X < 0 ) return; + if( Y < 0 ) return; + X /= m_XW; + Y /= m_YW; + if( X >= 16 ) X = 15; + if( Y >= 16 ) Y = 15; + int code = (Y * 16) + X; + m_MouseDown = code + 1; + TCanvas *pCanvas = PBox->Canvas; + SetPBoxFont(pCanvas); + DrawCursor(pCanvas, code, TRUE); + if( SBOut->Down ){ + code = GetEUDC(Y, X); + if( !code ) return; + } + else { + if( m_Base ){ + code |= m_Base | 0x00010000; +// PBoxPaint(NULL); + } + else if( m_tPfx[code] ){ + for( int i = 0; i < m_pfxCount; i++ ){ + if( m_tPfxIdx[i] == code ){ + UDMB->Position = short(i); + break; + } + } + m_Base = (code << 8); + UpdateXW(); PBoxPaint(NULL); + m_MouseDown = FALSE; + return; + } + } + ::PostMessage(m_hWnd, WM_CODEINSERT, code, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_MouseDown ) return; + + m_MouseDown--; + TCanvas *pCanvas = PBox->Canvas; + SetPBoxFont(pCanvas); + DrawCursor(pCanvas, m_MouseDown, FALSE); + m_MouseDown = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBClearClick(TObject *Sender) +{ + ::PostMessage(m_hWnd, WM_CODEINSERT, 0xffffffff, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBFontClick(TObject *Sender) +{ + ::PostMessage(m_hWnd, WM_CODEINSERT, 0xfffffffe, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBOutClick(TObject *Sender) +{ + m_Base = 0; + UpdateXW(); + PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBEditClick(TObject *Sender) +{ + LPCSTR pName = "EUDCEDIT.EXE"; + if( sys.m_Eudc.IsEmpty() ){ + char dir[MAX_PATH]; + char bf[512]; + if( ::GetSystemDirectory(dir, sizeof(dir)) ){ + wsprintf(bf, "%s\\%s", dir, pName); + if( IsFile(bf) ) sys.m_Eudc = bf; + } + if( sys.m_Eudc.IsEmpty() && ::GetWindowsDirectory(dir, sizeof(dir)) ){ + wsprintf(bf, "%s\\%s", dir, pName); + if( IsFile(bf) ) sys.m_Eudc = bf; + } + if( sys.m_Eudc.IsEmpty() ){ + wsprintf(bf, "%c:\\Program Files\\Accessories\\%s", dir[0], pName); + if( IsFile(bf) ) sys.m_Eudc = bf; + } + if( sys.m_Eudc.IsEmpty() ) sys.m_Eudc = pName; + } + if( ::WinExec(sys.m_Eudc.c_str(), SW_SHOWDEFAULT) > 31 ){ + ReqClose(); + } + else { + SBEdit->Enabled = FALSE; + sys.m_fEudc = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBAClick(TObject *Sender) +{ + DWORD dw = 0xfffffff2; + if( Sender == SBA ){ + dw = 0xfffffff0; + } + else if( Sender == SBB ){ + dw = 0xfffffff1; + } + ::PostMessage(m_hWnd, WM_CODEINSERT, dw, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBUSClick(TObject *Sender) +{ + DWORD sw; + if( Sender == SBJA ){ + sw = 0xfffffff4; + } + else if( Sender == SBHL ){ + sw = 0xfffffff5; + } + else if( Sender == SBBY ){ + sw = 0xfffffff6; + } + else if( Sender == SBBV ){ + sw = 0xfffffff7; + } + else { + sw = 0xfffffff3; + } + ::PostMessage(m_hWnd, WM_CODEINSERT, sw, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::UDMBClick(TObject *Sender, TUDBtnType Button) +{ + m_Base = m_tPfxIdx[UDMB->Position] << 8; + UpdateXW(); PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +int CALLBACK EnumFontFamExProc(ENUMLOGFONT FAR* lpelf, NEWTEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam) +{ switch(lpelf->elfLogFont.lfCharSet){ case SHIFTJIS_CHARSET: sys.m_tFontFam[fmJA] = TRUE; break; case HANGEUL_CHARSET: sys.m_tFontFam[fmHL] = TRUE; break; case JOHAB_CHARSET: sys.m_tFontFam[fmJOHAB] = TRUE; break; case CHINESEBIG5_CHARSET: // 台湾 sys.m_tFontFam[fmBV] = TRUE; break; case 134: // 中国語簡略 sys.m_tFontFam[fmBY] = TRUE; break; default: break; } int r = FALSE; for( int i = 0; i < fmEND; i++ ){ if( !sys.m_tFontFam[i] ) r = TRUE; } return r; } //--------------------------------------------------------------------------- +void __fastcall TCodeView::CheckFontCharset(void) +{ + if( sys.m_fFontFam ) return; + + sys.m_fFontFam = TRUE; + memset(sys.m_tFontFam, 0, sizeof(sys.m_tFontFam)); + LOGFONT logfont; + memset(&logfont, 0, sizeof(logfont)); + logfont.lfCharSet = DEFAULT_CHARSET; + HDC hDC = ::CreateDC("DISPLAY", NULL, NULL, NULL); + ::EnumFontFamiliesEx(hDC, &logfont, (int (_stdcall *)())EnumFontFamExProc, LPARAM(this), 0); + ::DeleteDC(hDC); +} +//--------------------------------------------------------------------------- + diff --git a/CItems/TEXTBOX/CodeVw.dfm b/CItems/TEXTBOX/CodeVw.dfm new file mode 100644 index 0000000000000000000000000000000000000000..8d98b33c9e26b493c608244addec1217f973f41c GIT binary patch literal 2906 zcmd6pJ&)5!7{|xs#E#=|EES@oLR1LpTAJ9KC0Xsp5q1(GkPdG=n~WG{EZboh3IuUS zu?V4+5HvJ=02)L=ak~1dqq(ne(iKR2fMZ^~-WRfBIfO_vn(=u4&+~hpd3pY;gTVEc zTZ2w(2re&OwE+lvE0?XnWf2-+v{l>dRMyaDrvDD~fWdbd(}-;aXgjmzgi?hcEjj9jcaU*Jp{rR->^kWI4Z63~SquKR4|39nMX2SQ_!CV@fsl!MF>b)@G`%5^i zk|n}sD}s4&Rp0TZicPnV4O+cP2;1UKKep;u6E=-IG(y`@D*-Eyy`2|jIO|e%o;@DS zR)hgvi`LJbDB5d_nhWQ;qWJd+#kunF*xymk^@XJvD2fj!p%^R*g%R{Zibz$q z5&%m7Ay8EZuepjW=nu4Nli)Emt0CcqNm13Q+C)2AuG# zN`SfrYTxxThu%y6w0Ah zO!Z^aE+_cFqtc>jiI1`ifEn~-AyMfsuNRNYAs^s{y*+qFU&j;z+e?J`P*kpFV;Z$t og75QUA|$mQOR@M2!2wQlfK$9dP^~gd!q_TbYD*X_?j`^}1N^s+$N&HU literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/CodeVw.h b/CItems/TEXTBOX/CodeVw.h new file mode 100644 index 0000000..7808ed5 --- /dev/null +++ b/CItems/TEXTBOX/CodeVw.h @@ -0,0 +1,81 @@ +//--------------------------------------------------------------------------- +#ifndef CodeVwH +#define CodeVwH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +#include "ComLib.h" +#include +#define WM_FORMCLOSE (WM_USER+410) +#define WM_CODEINSERT (WM_USER+411) +//--------------------------------------------------------------------------- +class TCodeView : public TForm +{ +__published: // IDE 管理のコンポーネント + TPanel *Panel; + TPaintBox *PBox; + TSpeedButton *SBClose; + TSpeedButton *SBClear; + TSpeedButton *SBFont; + TSpeedButton *SBOut; + TSpeedButton *SBEdit; + TSpeedButton *SBA; + TSpeedButton *SBB; + TSpeedButton *SBC; + TSpeedButton *SBUS; + TSpeedButton *SBJA; + TSpeedButton *SBHL; + TSpeedButton *SBBY; + TSpeedButton *SBBV; + TUpDown *UDMB; + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall SBCloseClick(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBClearClick(TObject *Sender); + void __fastcall SBFontClick(TObject *Sender); + + void __fastcall SBOutClick(TObject *Sender); + void __fastcall SBEditClick(TObject *Sender); + void __fastcall SBAClick(TObject *Sender); + + void __fastcall SBUSClick(TObject *Sender); + void __fastcall UDMBClick(TObject *Sender, TUDBtnType Button); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); +private: // ユーザー宣言 + HWND m_hWnd; + TFont *m_pFont; + int m_XW1; + int m_YW1; + int m_XW; + int m_YW; + int m_MouseDown; + int m_Base; + BOOL m_tPfx[256]; + int m_pfxCount; + int m_tPfxIdx[256]; + void __fastcall UpdateTitle(void); + void __fastcall ReqClose(void); + void __fastcall UpdateXW(void); + void __fastcall SetPBoxFont(TCanvas *pCanvas); + void __fastcall DrawChar(TCanvas *pCanvas, int c, BOOL f); + void __fastcall DrawCursor(TCanvas *pCanvas, int c, BOOL f); + WORD __fastcall GetEUDC(int y, int x); + void __fastcall CheckFontCharset(void); + +public: // ユーザー宣言 + __fastcall TCodeView(TComponent* Owner); + + void __fastcall Execute(HWND hWnd, TFont *pFont); +}; +//--------------------------------------------------------------------------- +//extern PACKAGE TCodeView *CodeView; +//--------------------------------------------------------------------------- +#endif diff --git a/CItems/TEXTBOX/Comlib.cpp b/CItems/TEXTBOX/Comlib.cpp new file mode 100644 index 0000000..3f09c6f --- /dev/null +++ b/CItems/TEXTBOX/Comlib.cpp @@ -0,0 +1,2000 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "TextDlg.h" +SYS sys; +//--------------------------------------------------------------------------- +void __fastcall InitSys(void) +{ + sys.m_dwVersion = 0; + sys.m_WinNT = 0; + sys.m_CodePage = 0; + sys.m_MsgEng = 0; + sys.m_BitPixel = 0; + sys.m_fGetMacKey = 0; + sys.m_fConvMac = 0; + sys.m_fMultProc = 0; + sys.m_fColorComp = 0; + sys.m_DefStgSize = 0; + sys.m_pDefStg = NULL; + sys.m_pTextList = NULL; + sys.m_pStyleList = NULL; + sys.m_BgnDir[0] = 0; + sys.m_pFontList = NULL; + sys.m_pBitmapTemp = NULL; + + sys.m_CodeLeft = 0; + sys.m_CodeTop = 0; + sys.m_CodeOut = 0; + + sys.m_fFontFam = FALSE; + memset(sys.m_tFontFam, 0, sizeof(sys.m_tFontFam)); + + sys.m_dwVersion = ::GetVersion(); + sys.m_WinNT = (sys.m_dwVersion < 0x80000000) ? TRUE : FALSE; + sys.m_CodePage = ::GetACP(); // Get codepage + + HDC hdcScreen = ::CreateDC("DISPLAY", NULL, NULL, NULL); + sys.m_BitPixel = ::GetDeviceCaps(hdcScreen, BITSPIXEL); + ::DeleteDC(hdcScreen); + + sys.m_fEudc = TRUE; + sys.m_Eudc = ""; +} +// +//--------------------------------------------------------------------------- +//void mcmFunc(DWORD index, FARPROC pFunc) +// +//MMSSTV calls this function at the first time, if the function was exported. +//You can use following functions which are in the MMSSTV. +// +// index : Index of the function. +// pFunc : Address of the function. +// +//indexes and functions are as follows. +// +// 0 : HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 1 : HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +// pName is a pathname of the image (BMP, JPG, WMF) +// +// 2 : HBITMAP (__cdecl *mmLoadHistImage)(void); +// +// 3 : int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +// pName is a filename of the image (BMP, JPG) +// pFolder is a folder name (if it is NULL, MMSSTV uses a default) +// +// 4 : int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +// pName is a pathname of the image (BMP, JPG) +// +// 5 : HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 6 : int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +// Invoke macro dialog box and can choose keyword +// +// 7 : int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +// Convert macro keyword (pSrc) to the text (pDest) +// +// 8 : HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +// Create 24bit DIB +// +// 9 : void (__cdecl *mmMultProc)(void); +// 10 : void (__cdecl *mmMultProcA)(void); +// Do decoding and encoding with the DSP in MMSSTV +// +// 11 : int (__cdecl *mmColorComp)(LPDWORD pCol); +// Invoke color components dialog and can choose a color component +// +extern "C" __declspec(dllexport) +void mcmFunc(DWORD index, FARPROC pFunc) +{ + switch(index){ + case 6: + sys.m_fGetMacKey = (mmGetMacKey)pFunc; + break; + case 7: + sys.m_fConvMac = (mmConvMac)pFunc; + break; + case 9: + sys.m_fMultProc = (mmMultProc)pFunc; + break; + case 11: + sys.m_fColorComp = (mmColorComp)pFunc; + break; + default: + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall MultProc(void) +{ + if( sys.m_fMultProc ) sys.m_fMultProc(); +} +//--------------------------------------------------------------------------- +char __fastcall LastC(LPCSTR p) +{ + char c = 0; + + if( *p ){ + c = *(p + strlen(p) - 1); + } + return c; +} +//--------------------------------------------------------------------------- +void __fastcall SetCurDir(LPSTR t, int size) +{ + if( !::GetCurrentDirectory(size-1, t) ){ + *t = 0; + } + else { + if( LastC(t) != '\\' ){ + strcat(t, "\\"); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall SetDirName(LPSTR t, LPCSTR pName) +{ + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + strncpy(t, Dir.c_str(), 128); +} +///---------------------------------------------------------------- +void __fastcall Yen2CrLf(AnsiString &ws, AnsiString cs) +{ + ws = ""; + LPCSTR p; + int f; + int dlm = 0; + + p = cs.c_str(); + if( *p == 0x22 ){ + p++; + dlm++; + } + for( f = 0; *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == '\\' ){ + switch(*(p+1)){ + case 'r': + ws += "\r"; + p++; + break; + case 'n': + ws += "\n"; + p++; + break; + case 't': + ws += "\t"; + p++; + break; + case '\\': + ws += "\\"; + p++; + break; + default: + p++; + ws += *p; + break; + } + } + else if( !dlm || (*p!=0x22) || *(p+1) ){ + ws += *p; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall CrLf2Yen(AnsiString &ws, AnsiString cs) +{ + ws = "\x22"; + LPCSTR p; + int f = 0; + + for( p = cs.c_str(); *p; p++ ){ + if( f ){ + ws += *p; + f = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == 0x0d ){ + ws += "\\r"; + } + else if( *p == 0x0a ){ + ws += "\\n"; + } + else if( *p == '\t' ){ + ws += "\\t"; + } + else if( *p == '\\' ){ + ws += "\\\\"; + } + else { + ws += *p; + } + } + ws += "\x22"; +} +///---------------------------------------------------------------- +/// 文字列を数値に変換する +/// +int htoin(LPCSTR sp, int n) +{ + int d = 0; + + for( ; *sp && n; sp++, n-- ){ + d = d * 16; + d += *sp & 0x0f; + if( *sp >= 'A' ) d += 9; + } + return d; + +} +//--------------------------------------------------------------------------- +void __fastcall AddStyle(AnsiString &as, BYTE charset, DWORD style) +{ + switch(charset){ + case ANSI_CHARSET: + as += sys.m_MsgEng ? "/ANSI" : "/欧文"; + break; + case SHIFTJIS_CHARSET: + as += sys.m_MsgEng ? "/Japanese" : "/日本語"; + break; + case HANGEUL_CHARSET: + as += sys.m_MsgEng ? "/Korean(Hangul)" : "/ハングル"; + break; + case JOHAB_CHARSET: + as += sys.m_MsgEng ? "/Korean(Johab)" : "/ハングル(Johab)"; + break; + case CHINESEBIG5_CHARSET: // 台湾 + as += sys.m_MsgEng ? "/Chinese(BIG5)" : "/中国語(繁体)"; + break; + case 134: // 中国語簡略 + as += sys.m_MsgEng ? "/Chinese(GB2312)" : "/中国語(簡体)"; + break; + case SYMBOL_CHARSET: + as += sys.m_MsgEng ? "/Symbol" : "/シンボル"; + break; + default: + break; + } + if( style & FSBOLD ) as += sys.m_MsgEng ? "/Bold" : "/太字"; + if( style & FSITALIC ) as += sys.m_MsgEng ? "/Italic" : "/斜体"; + if( style & FSUNDERLINE ) as += sys.m_MsgEng ? "/UnderLine" : "/下線"; + if( style & FSSTRIKEOUT ) as += sys.m_MsgEng ? "/StrikeOut" : "/取消し線"; +} +//--------------------------------------------------------------------------- +int __fastcall IsFile(LPCSTR pName) +{ + WIN32_FIND_DATA fdata; + HANDLE hFind = ::FindFirstFile(pName, &fdata); + if( hFind != INVALID_HANDLE_VALUE ){ + FindClose(hFind); + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall SetMBCP(BYTE charset) +{ + UINT cp; + switch(charset){ + case SHIFTJIS_CHARSET: + cp = 932; + break; + case HANGEUL_CHARSET: + cp = 949; + break; + case JOHAB_CHARSET: + cp = 1361; + break; + case CHINESEBIG5_CHARSET: // + cp = 950; + break; + case 134: // 簡略 + cp = 936; + break; + case ANSI_CHARSET: + case SYMBOL_CHARSET: + cp = 1252; + break; + default: + cp = _MB_CP_ANSI; + break; + } + if( cp != _MB_CP_ANSI ){ + CPINFO info; + if( GetCPInfo(cp, &info) != TRUE ){ + cp = _MB_CP_ANSI; + } + } + _setmbcp(cp); +} +//--------------------------------------------------------------------------- +void __fastcall LoadStringsFromIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TMemIniFile *pIniFile = new TMemIniFile(fname); + int count = pIniFile->ReadInteger(pSect, "Count", 0); + int i; + AnsiString as; + for( i = 0; i < count; i++ ){ + char bf[32]; + sprintf(bf, "Text%u", i); + as = pIniFile->ReadString(pSect, bf, ""); + if( !as.IsEmpty() ){ + pList->Add(as.c_str()); + } + } + if( msg ){ + as = pIniFile->ReadString(pSect, "MSG", ""); + ::Yen2CrLf(sys.m_Msg, as); + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall SaveStringsToIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TMemIniFile *pIniFile = new TMemIniFile(fname); + pIniFile->WriteInteger(pSect, "Count", pList->Count); + int i; + for( i = 0; i < pList->Count; i++ ){ + char bf[32]; + sprintf(bf, "Text%u", i); + pIniFile->WriteString(pSect, bf, pList->Strings[i]); + } + if( msg ){ + AnsiString as; + ::CrLf2Yen(as, sys.m_Msg); + pIniFile->WriteString(pSect, "MSG", as); + } + pIniFile->UpdateFile(); + delete pIniFile; +} +//--------------------------------------------------------------------- +void __fastcall InitCustomColor(TColorDialog *tp) +{ + tp->CustomColors->Text = ""; +} +//--------------------------------------------------------------------- +void __fastcall AddCustomColor(TColorDialog *tp, TColor col) +{ + char bf[256]; + + sprintf(bf, "Color%c=%06lX", tp->CustomColors->Count + 'A', DWORD(col) & 0x00ffffff); + tp->CustomColors->Add(bf); +} +//--------------------------------------------------------------------- +LPSTR __fastcall ZeroConv(LPCSTR p, BYTE charset) +{ + LPSTR bp = new char[(strlen(p)*2) + 1]; + LPSTR t = bp; + int f = 0; + for( ; *p; p++ ){ + if( f ){ + *t++ = *p; + f = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + *t++ = *p; + f = 1; + } + else if( *p == '0' ){ + switch(charset){ + case SHIFTJIS_CHARSET: + *t++ = 0x83; + *t++ = 0xd3; + break; + case HANGEUL_CHARSET: + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case CHINESEBIG5_CHARSET: // 台湾 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 134: // 中国語簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + switch(sys.m_CodePage){ + case 949: // HANGEUL + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case 950: // CHINESEBIG5 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 936: // CHINESE 簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + *t++ = 'リ'; + break; + } + break; + } + } + else { + *t++ = *p; + } + } + *t = 0; + return bp; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = xw; + pBitmap->Height = yw; + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall FillBitmap(Graphics::TBitmap *pDest, UCOL ucol) +{ + TRect rc; + rc.Left = rc.Top = 0; + rc.Right = pDest->Width; + rc.Bottom = pDest->Height; + pDest->Canvas->Brush->Color = ucol.c; + pDest->Canvas->FillRect(rc); +} +//--------------------------------------------------------------------------- +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc) +{ + pDest->Width = pSrc->Width; + pDest->Height = pSrc->Height; + pDest->Palette = NULL; + pDest->Canvas->Draw(0, 0, pSrc); +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspect(int &sx, int &sy, int bx, int by) +{ + double ass = double(sx) / double(sy); + double asb = double(bx) / double(by); + if( asb < ass ){ // ソースの方が横長 + sx = (double(sy) * asb) + 0.5; + } + else { + sy = (double(sx) / asb) + 0.5; + } +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspectCopy(Graphics::TBitmap *pDest, int xm, int ym, Graphics::TBitmap *pSrc, int mode) +{ + if( (xm < pSrc->Width) || (ym < pSrc->Height) ){ + KeepAspect(xm, ym, pSrc->Width, pSrc->Height); + pDest->Width = xm; + pDest->Height = ym; + pDest->Palette = NULL; + TRect tc; + tc.Left = tc.Top = 0; + tc.Right = xm; tc.Bottom = ym; + int Sop = ::SetStretchBltMode(pDest->Canvas->Handle, mode); + pDest->Canvas->StretchDraw(tc, pSrc); + ::SetStretchBltMode(pDest->Canvas->Handle, Sop); + } + else { + CopyBitmap(pDest, pSrc); + } +} +//--------------------------------------------------------------------------- +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap) +{ + if( pBitmap == NULL ) return; + + if( (pBitmap->Width != pBox->Width)||(pBitmap->Height != pBox->Height) ){ + TRect rc; + rc.Left = 0; rc.Right = pBox->Width; + rc.Top = 0, rc.Bottom = pBox->Height; + int Sop = ::SetStretchBltMode(pBox->Canvas->Handle, HALFTONE); + pBox->Canvas->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(pBox->Canvas->Handle, Sop); + } + else { + pBox->Canvas->Draw(0, 0, pBitmap); + } +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetUniqueColor(UCOL ucol) +{ + ucol.d = ucol.d & 0x00f0f0f0; + UCOL c = ucol; + DWORD r; + + while(!c.d || (c.d == ucol.d)){ +#if (RANDMAX >= 0x00ffffff) + c.d = rand() & 0x00f0f0f0; +#else + r = rand(); r = r << 4; + c.b.r = (BYTE)(r & 0x00f0); r = r >> 4; + c.b.g = (BYTE)(r & 0x00f0); r = r >> 4; + c.b.b = (BYTE)(r & 0x00f0); +#endif + } + if( sys.m_pBitmapTemp ){ + sys.m_pBitmapTemp->Canvas->Pixels[0][0] = c.c; + c.c = sys.m_pBitmapTemp->Canvas->Pixels[0][0]; + } + return c; +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetGrade2(UCOL s[2], int x, int xw) +{ + if( x < 0 ) x = 0; + if( x > xw ) x = xw; + UCOL r; + int c = s[0].b.b + ((int(s[1].b.b) - int(s[0].b.b)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.b = BYTE(c); + c = s[0].b.g + ((int(s[1].b.g) - int(s[0].b.g)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.g = BYTE(c); + c = s[0].b.r + ((int(s[1].b.r) - int(s[0].b.r)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.r = BYTE(c); + return r; +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetGrade4(UCOL s[4], int x, int xw) +{ + int xw3 = xw/3; + if( x < xw3 ){ + return GetGrade2(s, x, xw3); + } + x -= xw3; + if( x < xw3 ){ + return GetGrade2(&s[1], x, xw3); + } + x -= xw3; + return GetGrade2(&s[2], x, xw3); +} +//--------------------------------------------------------------------------- +void __fastcall WriteString(TStream *ps, AnsiString &as) +{ + int len = as.Length(); + ps->Write(&len, sizeof(len)); + if( len ){ + ps->Write(as.c_str(), len); + } +} +void __fastcall ReadString(TStream *ps, AnsiString &as) +{ + as = ""; + int len; + ps->Read(&len, sizeof(len)); + if( len ){ + LPSTR p = new char[len+1]; + ps->Read(p, len); + p[len] = 0; + as = p; + delete p; + } +} +//--------------------------------------------------------------------------- +int FontStyle2Code(TFontStyles style) +{ + int code = 0; + + TFontStyles fa; + TFontStyles fb; + + fa << fsBold; + fb << fsBold; + fa *= style; + if( fa == fb ) code |= FSBOLD; + + fa >> fsBold; + fb >> fsBold; + fa << fsItalic; + fb << fsItalic; + fa *= style; + if( fa == fb ) code |= FSITALIC; + + fa >> fsItalic; + fb >> fsItalic; + fa << fsUnderline; + fb << fsUnderline; + fa *= style; + if( fa == fb ) code |= FSUNDERLINE; + + fa >> fsUnderline; + fb >> fsUnderline; + fa << fsStrikeOut; + fb << fsStrikeOut; + fa *= style; + if( fa == fb ) code |= FSSTRIKEOUT; + + return code; +} + +TFontStyles Code2FontStyle(int code) +{ + TFontStyles fs; + + if( code & FSBOLD ) fs << fsBold; + if( code & FSITALIC ) fs << fsItalic; + if( code & FSUNDERLINE ) fs << fsUnderline; + if( code & FSSTRIKEOUT ) fs << fsStrikeOut; + return fs; +} +//--------------------------------------------------------------------------- +void __fastcall WriteFont(TStream *ps, TFont *pFont) +{ + int d; + if( pFont != NULL ){ + d = 1; + ps->Write(&d, sizeof(d)); + WriteString(ps, pFont->Name); + d = pFont->Charset; + ps->Write(&d, sizeof(d)); + d = pFont->Height; + ps->Write(&d, sizeof(d)); + TFontStyles ts = pFont->Style; + d = FontStyle2Code(ts); + ps->Write(&d, sizeof(d)); + } + else { + d = 0; + ps->Write(&d, sizeof(d)); + } +} +//--------------------------------------------------------------------------- +TFont* __fastcall ReadFont(TStream *ps) +{ + TFont *pFont = NULL; + int d; + ps->Read(&d, sizeof(d)); + if( d == 1 ){ + pFont = new TFont; + AnsiString as; + ReadString(ps, as); + pFont->Name = as; + ps->Read(&d, sizeof(d)); + pFont->Charset = BYTE(d); + ps->Read(&d, sizeof(d)); + pFont->Height = d; + ps->Read(&d, sizeof(d)); + TFontStyles ts = Code2FontStyle(d); + pFont->Style = ts; + } + return pFont; +} +///------------------------------------------------------ +/// +///CWaitCursor クラス +/// +CWaitCursor::CWaitCursor() +{ + sv = Screen->Cursor; + Screen->Cursor = crHourGlass; +} + +CWaitCursor::CWaitCursor(BOOL sw) +{ + sv = Screen->Cursor; + if( sw ){ + Screen->Cursor = crHourGlass; + } +} + +CWaitCursor::~CWaitCursor() +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Delete(void) +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Wait(void) +{ + Screen->Cursor = crHourGlass; +} +// +// +//--------------------------------------------------------------------------- +// CItem class +// +__fastcall CItem::CItem(void) +{ + m_pMemStream = NULL; + + m_Ver = 1; + m_ASize = 1; + m_Align = 0; + m_Grade = 0; + m_Shadow = 2; + m_Line = 1; + m_Zero = 0; + m_3d = 0x00000404; + m_Text = "TX\tFT1000MP\r\nANT\tMagnetic loop\r\nSOFT\tHome-made"; + m_pFont = NULL; + m_ColG[0].d = 255; + m_ColG[1].d = 16711935; + m_ColG[2].d = 65535; + m_ColG[3].d = 16776960; + m_ColB[0].c = clBlack; + m_ColB[1].c = clWhite; + m_ColB[2].c = clBlue; + m_ColB[3].c = clRed; + + m_OrgXW = -1; + m_OrgYW = -1; + m_TextXW = -1; + m_TextYW = -1; + m_Draft = 0; + m_IniSize = 0; + m_Pos = 0; + m_Ex = 0; + m_OYW = 0; + m_Rot = 0; +} +//--------------------------------------------------------------------------- +__fastcall CItem::~CItem() +{ + if( m_pFont != NULL ) delete m_pFont; + if( m_pMemStream != NULL ) delete m_pMemStream; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::LoadDefault(void) +{ + if( sys.m_pDefStg != NULL ) return; + + CItem *pItem = new CItem; + pItem->LoadFromInifile("Default", ININAME); + LPCBYTE p = pItem->CreateStorage(&sys.m_DefStgSize); + sys.m_pDefStg = new BYTE[sys.m_DefStgSize]; + memcpy(sys.m_pDefStg, p, sys.m_DefStgSize); + pItem->DeleteStorage(p); + delete pItem; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::UpdateDefault(void) +{ + if( sys.m_pDefStg != NULL ){ + delete sys.m_pDefStg; + sys.m_pDefStg = NULL; + } + LPCBYTE p = CreateStorage(&sys.m_DefStgSize); + sys.m_pDefStg = new BYTE[sys.m_DefStgSize]; + memcpy(sys.m_pDefStg, p, sys.m_DefStgSize); + DeleteStorage(p); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Create(LPCBYTE ps, DWORD size) +{ + if( (ps == NULL) || !size ){ + if( sys.m_pDefStg == NULL ) LoadDefault(); + ps = sys.m_pDefStg; + size = sys.m_DefStgSize; + } + + TMemoryStream *pMem = new TMemoryStream; + pMem->Clear(); + pMem->Write(ps, size); + pMem->Seek(soFromBeginning, 0); + int ver; + pMem->Read(&ver, sizeof(ver)); + if( ver <= m_Ver ){ + pMem->Read(&m_TextXW, sizeof(m_TextXW)); + pMem->Read(&m_TextYW, sizeof(m_TextYW)); + pMem->Read(&m_OrgXW, sizeof(m_OrgXW)); + pMem->Read(&m_OrgYW, sizeof(m_OrgYW)); + pMem->Read(&m_ASize, sizeof(m_ASize)); + pMem->Read(&m_Align, sizeof(m_Align)); + pMem->Read(&m_Grade, sizeof(m_Grade)); + pMem->Read(&m_Shadow, sizeof(m_Shadow)); + pMem->Read(&m_Line, sizeof(m_Line)); + pMem->Read(&m_Zero, sizeof(m_Zero)); + pMem->Read(&m_3d, sizeof(m_3d)); + pMem->Read(&m_ColG, sizeof(m_ColG)); + pMem->Read(&m_ColB, sizeof(m_ColB)); + if( ver >= 1 ){ + pMem->Read(&m_OYW, sizeof(m_OYW)); + pMem->Read(&m_Rot, sizeof(m_Rot)); + } + ReadString(pMem, m_Text); + if( m_pFont != NULL ) delete m_pFont; + m_pFont = ReadFont(pMem); + UpdateFont(); + } + delete pMem; +} +//--------------------------------------------------------------------------- +LPCBYTE __fastcall CItem::CreateStorage(LPDWORD pSize) +{ + ASSERT(pSize); + + if( m_pMemStream != NULL ) delete m_pMemStream; + m_pMemStream = new TMemoryStream; + m_pMemStream->Clear(); + m_Ver = 1; + m_pMemStream->Write(&m_Ver, sizeof(m_Ver)); + m_pMemStream->Write(&m_TextXW, sizeof(m_TextXW)); + m_pMemStream->Write(&m_TextYW, sizeof(m_TextYW)); + m_pMemStream->Write(&m_OrgXW, sizeof(m_OrgXW)); + m_pMemStream->Write(&m_OrgYW, sizeof(m_OrgYW)); + m_pMemStream->Write(&m_ASize, sizeof(m_ASize)); + m_pMemStream->Write(&m_Align, sizeof(m_Align)); + m_pMemStream->Write(&m_Grade, sizeof(m_Grade)); + m_pMemStream->Write(&m_Shadow, sizeof(m_Shadow)); + m_pMemStream->Write(&m_Line, sizeof(m_Line)); + m_pMemStream->Write(&m_Zero, sizeof(m_Zero)); + m_pMemStream->Write(&m_3d, sizeof(m_3d)); + m_pMemStream->Write(&m_ColG, sizeof(m_ColG)); + m_pMemStream->Write(&m_ColB, sizeof(m_ColB)); + m_pMemStream->Write(&m_OYW, sizeof(m_OYW)); + m_pMemStream->Write(&m_Rot, sizeof(m_Rot)); + WriteString(m_pMemStream, m_Text); + WriteFont(m_pMemStream, m_pFont); + *pSize = m_pMemStream->Position; + return (LPCBYTE)m_pMemStream->Memory; +} +//--------------------------------------------------------------------------- +void __fastcall LoadFontFromInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile) +{ + if( pFont == NULL ) return; + + pFont->Name = pIniFile->ReadString(pSect, "FontName", pFont->Name); + pFont->Charset = (BYTE)pIniFile->ReadInteger(pSect, "FontSet", pFont->Charset); + pFont->Height = pIniFile->ReadInteger(pSect, "FontSize", pFont->Height); + TFontStyles ts = pFont->Style; + DWORD d = FontStyle2Code(ts); + d = pIniFile->ReadInteger(pSect, "FontStyle", d); + ts = Code2FontStyle(d); + pFont->Style = ts; +} +//--------------------------------------------------------------------------- +void __fastcall SaveFontToInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile) +{ + if( pFont == NULL ) return; + + pIniFile->WriteString(pSect, "FontName", pFont->Name); + pIniFile->WriteInteger(pSect, "FontSet", pFont->Charset); + pIniFile->WriteInteger(pSect, "FontSize", pFont->Height); + TFontStyles ts = pFont->Style; + DWORD d = FontStyle2Code(ts); + pIniFile->WriteInteger(pSect, "FontStyle", d); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::LoadFromInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TMemIniFile *pIniFile = new TMemIniFile(fname); + MultProc(); + m_ASize = pIniFile->ReadInteger(pSect, "AutoSize", m_ASize); + m_Align = pIniFile->ReadInteger(pSect, "Align", m_Align); + m_Grade = pIniFile->ReadInteger(pSect, "Grade", m_Grade); + m_Shadow = pIniFile->ReadInteger(pSect, "Shadow", m_Shadow); + m_Line = pIniFile->ReadInteger(pSect, "Line", m_Line); + m_Zero = pIniFile->ReadInteger(pSect, "Zero", 0); + m_3d = pIniFile->ReadInteger(pSect, "3D", m_3d); + m_OYW = pIniFile->ReadInteger(pSect, "OYW", m_OYW); + m_Rot = pIniFile->ReadInteger(pSect, "Rot", m_Rot); + int i; + for( i = 0; i < 4; i++ ){ + char bf[32]; + sprintf(bf, "ColG%u", i); + m_ColG[i].d = pIniFile->ReadInteger(pSect, bf, m_ColG[i].d); + sprintf(bf, "ColB%u", i); + m_ColB[i].d = pIniFile->ReadInteger(pSect, bf, m_ColB[i].d); + } + if( m_ASize ){ + m_OrgXW = m_OrgYW = -1; + m_TextXW = m_TextYW = -1; + } + else { + m_TextXW = pIniFile->ReadInteger(pSect, "Width", m_TextXW); + m_TextYW = pIniFile->ReadInteger(pSect, "Height", m_TextYW); + m_IniSize = 1; + } + AnsiString as, cs; + ::CrLf2Yen(cs, m_Text); + as = pIniFile->ReadString(pSect, "Text", cs); + ::Yen2CrLf(m_Text, as); + + if( pIniFile->ReadInteger(pSect, "Font", 0) ){ + if( m_pFont != NULL ) delete m_pFont; + m_pFont = new TFont; +#if 1 + LoadFontFromInifile(m_pFont, pSect, pIniFile); + UpdateFont(); +#else + m_pFont->Name = pIniFile->ReadString(pSect, "FontName", m_pFont->Name); + m_pFont->Charset = (BYTE)pIniFile->ReadInteger(pSect, "FontSet", m_pFont->Charset); + m_pFont->Height = pIniFile->ReadInteger(pSect, "FontSize", m_pFont->Height); + TFontStyles ts = m_pFont->Style; + DWORD d = FontStyle2Code(ts); + d = pIniFile->ReadInteger(pSect, "FontStyle", d); + m_fsCode = d; + ts = Code2FontStyle(d); + m_pFont->Style = ts; +#endif + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SaveToInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + + TMemIniFile *pIniFile = new TMemIniFile(fname); + MultProc(); + try { + pIniFile->WriteInteger(pSect, "AutoSize", m_ASize); + pIniFile->WriteInteger(pSect, "Align", m_Align); + pIniFile->WriteInteger(pSect, "Grade", m_Grade); + pIniFile->WriteInteger(pSect, "Shadow", m_Shadow); + pIniFile->WriteInteger(pSect, "Line", m_Line); + pIniFile->WriteInteger(pSect, "Zero", m_Zero); + pIniFile->WriteInteger(pSect, "3D", m_3d); + pIniFile->WriteInteger(pSect, "OYW", GetTrueOYW()); + pIniFile->WriteInteger(pSect, "Rot", m_Rot); + int i; + for( i = 0; i < 4; i++ ){ + char bf[32]; + sprintf(bf, "ColG%u", i); + pIniFile->WriteInteger(pSect, bf, m_ColG[i].d); + sprintf(bf, "ColB%u", i); + pIniFile->WriteInteger(pSect, bf, m_ColB[i].d); + } + pIniFile->WriteInteger(pSect, "Width", m_TextXW); + pIniFile->WriteInteger(pSect, "Height", m_TextYW); + AnsiString cs; + ::CrLf2Yen(cs, m_Text); + pIniFile->WriteString(pSect, "Text", cs); + + pIniFile->WriteInteger(pSect, "Font", m_pFont != NULL ? 1 : 0); + if( m_pFont != NULL ){ +#if 1 + SaveFontToInifile(m_pFont, pSect, pIniFile); +#else + pIniFile->WriteString(pSect, "FontName", m_pFont->Name); + pIniFile->WriteInteger(pSect, "FontSet", m_pFont->Charset); + pIniFile->WriteInteger(pSect, "FontSize", m_pFont->Height); + TFontStyles ts = m_pFont->Style; + DWORD d = FontStyle2Code(ts); + pIniFile->WriteInteger(pSect, "FontStyle", d); +#endif + } + } + catch(...){ + } + pIniFile->UpdateFile(); + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + + TMemIniFile *pIniFile = new TMemIniFile(fname); + MultProc(); + try { + pIniFile->EraseSection(pSect); + } + catch(...){ + } + pIniFile->UpdateFile(); + delete pIniFile; +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetItemType(void) +{ + DWORD type = 0x00010002; // Active text as Overlay + if( m_ASize ){ + switch(m_Align){ + case 1: + type |= 0x00400000; // align center + break; + case 2: + type |= 0x00100000; // aling right-top + break; + case 3: + type |= m_Pos << 20; + type |= 0x00000010; + break; + default: + break; + } + } + return type; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetPos(DWORD pos, DWORD size, DWORD tsize) +{ + int x = pos & 0x0000ffff; + int y = pos >> 16; + if( x & 0x00008000 ) x |= 0xffff8000; + if( y & 0x00008000 ) y |= 0xffff8000; + int xw = size & 0x0000ffff; + int yw = size >> 16; + int txw = tsize & 0x0000ffff; + int tyw = tsize >> 16; + + int xr = x + xw; + int yb = y + yw; + m_Pos = 0; + if( xr > (txw * 7/8) ){ + m_Pos |= 1; + } + else if( x > (txw / 8) ){ + m_Pos |= 4; + } + if( yb > (tyw * 6/8) ){ + m_Pos |= 2; + } + else if( y > (tyw * 2 / 8) ){ + m_Pos |= 8; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteStorage(LPCBYTE pStorage) +{ + if( m_pMemStream != NULL ){ + ASSERT(pStorage == (LPCBYTE)m_pMemStream->Memory); + delete m_pMemStream; + m_pMemStream = NULL; + } +} +//--------------------------------------------------------------------------- +int __fastcall CItem::GetTrueOYW(void) +{ + int oyw = int((SHORT)m_OYW); + int oyh = m_OYW >> 16; + if( oyh > 0 ){ + int fw = oyh >> 8; + oyh &= 0x00ff; + oyw = oyw * fw / oyh; + } + return oyw; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Copy(CItem *sp) +{ + ASSERT(sp); + + DWORD size; + LPCBYTE ps = sp->CreateStorage(&size); + Create(ps, size); + sp->DeleteStorage(ps); + m_Back = sp->m_Back; + if( m_ASize ){ + m_OrgXW = m_OrgYW = -1; + m_TextXW = m_TextYW = -1; + } + else { + m_IniSize = 1; + } + m_Pos = sp->m_Pos; + m_Ex = sp->m_Ex; +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetOrgSize(void) +{ + if(m_OrgXW >= 0){ + DWORD w = m_OrgXW; + DWORD h = m_OrgYW; + return (h << 16) + w; + } + else { + return (128 << 16) + 160; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetFontSize(Graphics::TBitmap *pDest) +{ + ASSERT(m_OrgXW > 0); + ASSERT(m_OrgYW > 0); + if( (m_OrgXW <= 0) || (m_OrgYW <= 0) ) return; + + int size = m_pFont->Height; + if( m_OrgXW < pDest->Width ){ + size = size * pDest->Width / m_OrgXW; + if( size == m_pFont->Height ) size--; + } + else if( m_OrgYW < pDest->Height ){ + size = size * pDest->Height / m_OrgYW; + if( size == m_pFont->Height ) size--; + } + else if( m_OrgXW > pDest->Width ){ + size = size * pDest->Width / m_OrgXW; + if( size == m_pFont->Height ) size++; + } + else if( m_OrgYW > pDest->Height ){ + size = size * pDest->Height / m_OrgYW; + if( size == m_pFont->Height ) size++; + } + if( !size ) size = -1; + m_pFont->Height = size; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetTextSize(Graphics::TBitmap *pDest) +{ + ASSERT(m_OrgXW > 0); + ASSERT(m_OrgYW > 0); + if( (m_OrgXW <= 0) || (m_OrgYW <= 0) ) return; + + if( m_OrgXW < pDest->Width ){ + m_TextXW = m_TextXW * pDest->Width / m_OrgXW; + } + else if( m_OrgYW < pDest->Height ){ + m_TextYW = m_TextYW * pDest->Height / m_OrgYW; + } + else if( m_OrgXW > pDest->Width ){ + m_TextXW = m_TextXW * pDest->Width / m_OrgXW; + } + else if( m_OrgYW > pDest->Height ){ + m_TextYW = m_TextYW * pDest->Height / m_OrgYW; + } +} +//--------------------------------------------------------------------------- +int __fastcall CItem::GetMaxWH(int &W, int &H, Graphics::TBitmap *pDest, LPCSTR pText) +{ + int lf = 1; + int n = 0; + W = H = 0; + char bf[1024]; + LPSTR t; + for( t = bf; 1; pText++ ){ + if( *pText != 0x0d ){ + if( (*pText == 0x0a) || !*pText ){ + if( lf && *pText ){ + n++; + } + *t = 0; + if( bf[0] ){ + DWORD wh = ::GetTabbedTextExtent(pDest->Canvas->Handle, bf, strlen(bf), 0, NULL); + int w = wh & 0x0000ffff; + int h = wh >> 16; + if( H < h ) H = h; + if( W < w ) W = w; + } + if( !*pText ) break; + lf = 1; + t = bf; + } + else { + if( lf ){ + lf = 0; + n++; + } + *t++ = *pText; + } + } + } + return n; +} +//--------------------------------------------------------------------------- +UINT __fastcall CItem::GetPosFormat(void) +{ + UINT wFormat; + switch(m_Align){ + case 1: + wFormat = DT_CENTER; + break; + case 2: + wFormat = DT_RIGHT; + break; + case 3: + if( m_Pos & 4 ){ + wFormat = DT_CENTER; + } + else { + wFormat = (m_Pos & 1) ? DT_RIGHT : DT_LEFT; + } + break; + default: + wFormat = DT_LEFT; + break; + } + return wFormat; +} +//--------------------------------------------------------------------------- +UINT __fastcall CItem::GetDrawFormat(void) +{ + UINT wFormat = DT_NOPREFIX|DT_NOCLIP|DT_EXPANDTABS; + if( m_Rot ){ + wFormat |= DT_LEFT; + } + else { + wFormat |= GetPosFormat(); + } + if( !m_ASize ) wFormat |= DT_WORDBREAK; + return wFormat; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::GetFont(LOGFONT *pLogfont) +{ + memset(pLogfont, 0, sizeof(LOGFONT)); + pLogfont->lfHeight = m_pFont->Height; + pLogfont->lfWidth = 0; + pLogfont->lfEscapement = m_Rot * 10; + pLogfont->lfOrientation = m_Rot * 10; + TFontStyles ts = m_pFont->Style; + int fsw = FontStyle2Code(ts); + pLogfont->lfWeight = fsw & FSBOLD ? 700 : 400; + pLogfont->lfItalic = BYTE(fsw & FSITALIC ? TRUE : FALSE); + pLogfont->lfUnderline = BYTE(fsw & FSUNDERLINE ? TRUE : FALSE); + pLogfont->lfStrikeOut = BYTE(fsw & FSSTRIKEOUT ? TRUE : FALSE); + pLogfont->lfCharSet = m_pFont->Charset; + pLogfont->lfOutPrecision = OUT_CHARACTER_PRECIS; + pLogfont->lfClipPrecision = CLIP_DEFAULT_PRECIS; + pLogfont->lfQuality = NONANTIALIASED_QUALITY; + pLogfont->lfPitchAndFamily = DEFAULT_PITCH; + strcpy(pLogfont->lfFaceName, m_pFont->Name.c_str()); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetFont(LOGFONT *pLogfont) +{ + if( m_pFont == NULL ) m_pFont = new TFont; + m_pFont->Name = pLogfont->lfFaceName; + m_pFont->Charset = pLogfont->lfCharSet; + if( pLogfont->lfHeight ){ + m_pFont->Height = pLogfont->lfHeight; + } + else { + m_pFont->Size = pLogfont->lfWidth; + } + DWORD d = 0; + if( pLogfont->lfWeight > 600 ) d |= FSBOLD; + if( pLogfont->lfItalic ) d |= FSITALIC; + if( pLogfont->lfUnderline ) d |= FSUNDERLINE; + if( pLogfont->lfStrikeOut ) d |= FSSTRIKEOUT; + m_fsCode = d; + TFontStyles ts = Code2FontStyle(d); + m_pFont->Style = ts; + m_Rot = pLogfont->lfEscapement / 10; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawText(RECT rc, int xoff, int yoff, Graphics::TBitmap *pDest, LPCSTR pText, UCOL ucol) +{ + if( m_Rot || (m_Ex & DISFONTSMOOTHING) ){ + LOGFONT lf; +#if 1 + GetFont(&lf); +#else + memset(&lf, 0, sizeof(lf)); + lf.lfHeight = m_pFont->Height; + lf.lfWidth = 0; + lf.lfEscapement = m_Rot * 10; + lf.lfOrientation = m_Rot * 10; + TFontStyles ts = m_pFont->Style; + int fsw = FontStyle2Code(ts); + lf.lfWeight = fsw & FSBOLD ? 700 : 400; + lf.lfItalic = BYTE(fsw & FSITALIC ? TRUE : FALSE); + lf.lfUnderline = BYTE(fsw & FSUNDERLINE ? TRUE : FALSE); + lf.lfStrikeOut = BYTE(fsw & FSSTRIKEOUT ? TRUE : FALSE); + lf.lfCharSet = m_pFont->Charset; + lf.lfOutPrecision = OUT_CHARACTER_PRECIS; + lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf.lfQuality = NONANTIALIASED_QUALITY; + lf.lfPitchAndFamily = DEFAULT_PITCH; + strcpy(lf.lfFaceName, m_pFont->Name.c_str()); +#endif + pDest->Canvas->Font->Handle = CreateFontIndirect(&lf); + } + else { + pDest->Canvas->Font = m_pFont; + } + pDest->Canvas->Font->Color = ucol.c; + + if( m_OYWC || m_Rot ){ + TStringList *pList = new TStringList; + pList->Text = pText; + UINT wFormat = GetPosFormat(); + int xw = rc.right - rc.left; + for( int i = 0; i < pList->Count; i++ ){ + RECT trc; + trc = rc; + int txw = pDest->Canvas->TextWidth(pList->Strings[i].c_str()); + if( m_Rot ){ // 回転時の位置補正 + int x; + switch(wFormat){ + case DT_CENTER: + x = (xw - txw)/2; + trc.left += x * m_CosX; + trc.right += x * m_CosX; + trc.top -= x * m_SinX; + break; + case DT_RIGHT: + x = xw - txw; + trc.left += x * m_CosX; + trc.right += x * m_CosX; + trc.top -= x * m_SinX; + break; + } + } + DrawText_(trc, xoff, yoff, pDest, pList->Strings[i].c_str()); + int N = m_ASize ? 1 : ((txw - 1)/ xw) + 1; + if( m_Rot ){ + rc.left += (m_FW + m_OYWC) * N * m_SinX; + rc.right += (m_FW + m_OYWC) * N * m_SinX; + rc.top += (m_FW + m_OYWC) * N * m_CosX; + } + else { + rc.top += (m_FW + m_OYWC) * N; + } + } + delete pList; + } + else { + DrawText_(rc, xoff, yoff, pDest, pText); + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawText_(RECT rc, int xoff, int yoff, Graphics::TBitmap *pDest, LPCSTR pText) +{ + rc.left += xoff; rc.top += yoff; + rc.right += xoff; rc.bottom += yoff; + HDC hdc = pDest->Canvas->Handle; + ::SetBkMode(hdc, TRANSPARENT); + if( m_ASize && (m_Row <= 1) ){ + pDest->Canvas->TextOut(rc.left, rc.top, pText); + } + else { + ::DrawText(hdc, pText, strlen(pText), &rc, GetDrawFormat()); + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawTrans(Graphics::TBitmap *pDest, int x, int y, Graphics::TBitmap *pSrc) +{ + Graphics::TBitmap *pbmp = pSrc; + if( sys.m_BitPixel == 16 ){ + pbmp = new Graphics::TBitmap; + pbmp->Width = pSrc->Width; + pbmp->Height = pSrc->Height; + pbmp->Canvas->Draw(0, 0, pSrc); + } + pbmp->Transparent = TRUE; + pbmp->TransparentMode = tmAuto; + pDest->Canvas->Draw(x, y, pbmp); + if( pbmp != pSrc ) delete pbmp; +} +//--------------------------------------------------------------------------- +LPBYTE __fastcall CItem::CreateTable(LPBYTE* &pAdr, Graphics::TBitmap *pDest) +{ + int XW = pDest->Width; + int YW = pDest->Height; + LPBYTE pTbl = new BYTE[XW*YW]; + memset(pTbl, 0, XW*YW); + LPBYTE wp = pTbl; + int x, y; + + pAdr = new BYTE*[YW]; + BYTE br = m_cBack.b.r; + BYTE bg = m_cBack.b.g; + BYTE bb = m_cBack.b.b; + for( y = 0; y < YW; y++ ){ + LPBYTE p = (LPBYTE)pDest->ScanLine[y]; + pAdr[y] = p; + for( x = 0; x < XW; x++, wp++, p+=3 ){ + if( (bb != *p) || (bg != *(p+1)) || (br != *(p+2)) ){ + *wp = 1; + } + } + } + return pTbl; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::EditDialog(HWND hWnd) +{ +#if UseHWND + TTextDlgBox *pBox = new TTextDlgBox(hWnd); +#else + TTextDlgBox *pBox = new TTextDlgBox(NULL); +#endif + if( pBox == NULL ) return FALSE; + + int r = pBox->Execute(this); + delete pBox; + if( r == TRUE ) UpdateDefault(); + return r; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::FontDialog(HWND hWnd) +{ + if( m_pFont == NULL ) m_pFont = new TFont; + TFontDialog *pDlg = new TFontDialog(NULL); + if( pDlg == NULL ) return FALSE; + + ASSERT(m_pFont); + pDlg->Font->Assign(m_pFont); + pDlg->Font->Color = m_ColG[0].c; + MultProc(); + int r = pDlg->Execute(); + MultProc(); + if( r == TRUE ){ + m_pFont->Assign(pDlg->Font); + m_ColG[0].c = pDlg->Font->Color; + UpdateFont(); + UpdateDefault(); + } + delete pDlg; + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::UpdateFont(void) +{ + if( m_pFont == NULL ) return; + + TFontStyles ts = m_pFont->Style; + m_fsCode = FontStyle2Code(ts); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Draw3D(RECT &rc, Graphics::TBitmap *pDest, LPCSTR pText, UCOL cl[2]) +{ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + if( m_Rot ){ + int x = xm * m_CosX + ym * m_SinX; + int y = -xm * m_SinX + ym * m_CosX; + xm = x; + ym = y; + } + + int max = ABS(xm) > ABS(ym) ? ABS(xm) : ABS(ym); + for( int i = max; i > 0; i-- ){ + int x = xm * i / max; + int y = ym * i / max; + DrawText(rc, x, y, pDest, pText, GetGrade2(cl, i, max)); + } +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::DrawExt(Graphics::TBitmap *pDest, RECT &rc, LPCSTR pText) +{ + MultProc(); + int xw = pDest->Width; + int yw = pDest->Height; + LPBYTE pTbl = NULL; + BYTE **pAdr = NULL; + if( m_Grade || (m_Shadow == 2) ) pTbl = CreateTable(pAdr, pDest); + + LPBYTE wp, p; + if( m_Grade ){ + MultProc(); + ASSERT(pTbl); + RECT mc; + mc.left = rc.right; mc.top = rc.bottom; + mc.right = rc.left; mc.bottom = rc.top; + wp = pTbl; + int x, y; + for( y = 0; y < yw; y++ ){ + for( x = 0; x < xw; x++, wp++ ){ + if( *wp ){ + if( mc.left > x ) mc.left = x; + if( mc.right < x ) mc.right = x; + if( mc.top > y ) mc.top = y; + if( mc.bottom < y ) mc.bottom = y; + } + } + } + int bw = mc.right - mc.left + 1; + int bh = mc.bottom - mc.top + 1; + int bd = sqrt(bw*bw + bh*bh); + UCOL c; + for( y = mc.top; y <= mc.bottom; y++ ){ +// p = (LPBYTE)pDest->ScanLine[y]; + p = pAdr[y]; + wp = &pTbl[y*xw]; + for( x = 0; x < xw; x++, wp++, p+=3 ){ + if( *wp ){ + int xx = x - mc.left; + int yy = y - mc.top; + switch(m_Grade){ + case 1: + c = GetGrade4(m_ColG, xx, bw); + break; + case 2: + c = GetGrade4(m_ColG, yy, bh); + break; + case 3: + c = GetGrade4(m_ColG, sqrt(xx*xx + yy*yy), bd); + break; + } + *p++ = c.b.b; + *p++ = c.b.g; + *p = c.b.r; + p -= 2; + } + } + } + } + MultProc(); + switch(m_Shadow){ + case 1: + { + Graphics::TBitmap* pbmp = CreateBitmap(xw, yw); + FillBitmap(pbmp, m_cBack); + if( m_3d & 0x00010000 ){ + Draw3D(rc, pbmp, pText, &m_ColB[1]); + } + else { + for( int i = m_Line - 1; i >= 0; i-- ){ + DrawText(rc, i+1, i+1, pbmp, pText, m_ColB[0]); + } + } + DrawTrans(pbmp, 0, 0, pDest); + delete pDest; + pDest = pbmp; + } + break; + case 2: + { + ASSERT(pTbl); + if( m_3d & 0x00010000 ){ + Graphics::TBitmap* pbmp = CreateBitmap(xw, yw); + FillBitmap(pbmp, m_cBack); + Draw3D(rc, pbmp, pText, &m_ColB[1]); + DrawTrans(pbmp, 0, 0, pDest); + delete pDest; + pDest = pbmp; + for( int y = 0; y < yw; y++ ) pAdr[y] = (LPBYTE)pDest->ScanLine[y]; + } + int f; + int x, y; + for( y = 0; y < yw; y++ ){ + wp = &pTbl[y*xw]; +// p = (LPBYTE)pDest->ScanLine[y]; + p = pAdr[y]; + f = 0; + for( x = 0; x < xw; x++, wp++, p+=3 ){ + if( *wp ){ + if( !m_Grade ){ + *p++ = m_ColG[0].b.b; + *p++ = m_ColG[0].b.g; + *p = m_ColG[0].b.r; + p -= 2; + } + f = m_Line; + } + else if( f ){ + f--; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + p -= 2; + *wp = BYTE((m_Line >= 2) ? 1 : f); +// *wp = BYTE(f); + } + } + f = 0; + wp--; + p -= 3; + x--; + for( ; x >= 0; x--, wp--, p-=3 ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + p -= 2; + *wp = BYTE((m_Line >= 2) ? 1 : f); +// *wp = BYTE(f); + } + } + + } + int ax = 0; + for( x = 0; x < xw; x++, ax+=3 ){ + wp = &pTbl[x]; + f = 0; + for( y = 0; y < yw; y++, wp += xw ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; +// p = (LPBYTE)pDest->ScanLine[y]; + p = pAdr[y]; + p += ax; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + *wp = BYTE((m_Line >= 2) ? 1 : f); +// *wp = BYTE(f); + } + } + f = 0; + y--; + wp -= xw; + for( ; y >= 0; y--, wp -= xw ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; +// p = (LPBYTE)pDest->ScanLine[y]; + p = pAdr[y]; + p += ax; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + } + } + } + } + break; + case 3: + { + Graphics::TBitmap* pbmp = CreateBitmap(xw, yw); + FillBitmap(pbmp, m_cBack); + if( m_3d & 0x00010000 ){ + rc.left++; rc.right++; + rc.top++; rc.bottom++; + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + Draw3D(rc, pbmp, pText, &m_ColB[1]); + DrawText(rc, (xm & 0x80) ? 1 : -1, (ym & 0x80) ? 1 : -1, pbmp, pText, m_ColB[0]); + } + else { + for( int i = m_Line - 1; i >= 0; i-- ){ + DrawText(rc, i+2, i+2, pbmp, pText, m_ColB[0]); + } + DrawText(rc, 0, 0, pbmp, pText, m_ColB[1]); + } + DrawTrans(pbmp, 1, 1, pDest); + delete pDest; + pDest = pbmp; + } + break; + default: + break; + } + if( pAdr != NULL ) delete pAdr; + if( pTbl != NULL ) delete pTbl; + +#if ADJUST_MINIMIZED + pTbl = CreateTable(pDest); + rc.left = rc.right; rc.right = 0; + rc.top = rc.bottom; rc.bottom = 0; + wp = pTbl; + int x, y; + for( y = 0; y < yw; y++ ){ + for( x = 0; x < xw; x++, wp++ ){ + if( *wp ){ + if( rc.left > x ) rc.left = x; + if( rc.right < x ) rc.right = x; + if( rc.top > y ) rc.top = y; + if( rc.bottom < y ) rc.bottom = y; + } + } + } + delete pTbl; +#endif + return pDest; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::ConvChar(LPSTR pStr) +{ + char bf[8192]; + LPCSTR p; + LPSTR t = bf; + for( p = pStr; *p; p++ ){ + if( (_mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD) && *(p+1) ){ + *t++ = *p++; + *t++ = *p; + } + else if( (*p == '\\') && (*(p+1)=='x') ){ + p+=2; + *t++ = (char)htoin(p, 2); + p++; + } + else if( (*p == '\\') && (*(p+1)=='$') ){ + p+=2; + *t++ = (char)htoin(p, 2); + p+=2; + *t++ = (char)htoin(p, 2); + p++; + } + else if( (*p == '\t') && (m_Align) ){ + *t++ = ' '; + } + else { + *t++ = *p; + } + } + *t = 0; + strcpy(pStr, bf); +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::Draw(Graphics::TBitmap *pDest, LPCSTR pText) +{ + if( (pText == NULL) || !*pText ) return pDest; + + m_Back.c = pDest->Canvas->Pixels[0][0]; + m_Back.d &= 0x00ffffff; + m_cBack = m_Back; + if( m_pFont == NULL ){ + m_pFont = new TFont(); + m_pFont->Assign(pDest->Canvas->Font); + m_pFont->Size = 18; + UpdateFont(); + } + else if( m_OrgXW >= 0 ){ + if( m_ASize ) SetFontSize(pDest); + } + SetMBCP(m_pFont->Charset); + AnsiString as = pText; + ConvChar(as.c_str()); + pText = as.c_str(); + + LPCSTR pOrgText = pText; + if( m_Zero ){ + pText = ZeroConv(pText, m_pFont->Charset); + } + + pDest->Canvas->Font = m_pFont; + m_FW = pDest->Canvas->TextHeight(pText); + + m_OYWC = int((short)m_OYW); + if( m_OYW ){ + int oyh = m_OYW >> 16; + if( oyh <= 0 ){ // 最初のフォントサイズの設定 + m_OYW &= 0x0000ffff; + m_OYW |= (m_FW << 24)|(m_FW << 16); + } + else { // フォントサイズによる換算 + m_OYW &= 0x00ffffff; + m_OYW |= m_FW << 24; + oyh &= 0x00ff; + if( oyh ) m_OYWC = m_OYWC * m_FW / oyh; + } + } + int xw, yw; + if( m_ASize ){ + int n = GetMaxWH(xw, yw, pDest, pText); + m_FW = yw; + m_Row = n; + if( m_OYWC && n ){ + yw = (yw + m_OYWC) * (n - 1) + yw; + if( yw < m_FW ) yw = m_FW; + } + else { + yw *= n; + } + if( m_fsCode & FSITALIC ){ +// xw += yw / 12; + xw += m_FW / 4; + } + } + else if( m_IniSize || (m_OrgXW < 0) ){ + m_IniSize = 0; + if( m_TextXW > 0 ){ + xw = m_TextXW; + yw = m_TextYW; + } + else { + xw = pDest->Width; + yw = pDest->Height; + } + } + else { + SetTextSize(pDest); + xw = m_TextXW; + yw = m_TextYW; + } + m_TextXW = xw; + m_TextYW = yw; + + if( m_Shadow && (m_cBack.d == m_ColB[0].d) ){ + m_cBack = GetUniqueColor(m_cBack); + } + if( m_cBack.d == m_ColG[0].d ){ + m_cBack = GetUniqueColor(m_cBack); + } + + MultProc(); + + RECT rc; + rc.left = rc.top = 0; + rc.right = xw; + rc.bottom = yw; + + if( m_Rot ){ + if( ABS(m_Rot - 90) < 10 ) rc.right += m_FW/6; + if( ABS(m_Rot - 180) < 10 ) rc.right += m_FW/6; + if( ABS(m_Rot - 270) < 10 ) rc.right += m_FW/6; +// rc.right += m_FW/2; +// rc.bottom += m_FW/2; + double s = 2 * PI * m_Rot / 360; + m_CosX = cos(s); + m_SinX = sin(s); + int xc = rc.right/2; + int yc = rc.bottom/2; + POINT N[5]; + N[0].x = -xc; + N[0].y = -yc; + N[1].x = xc; + N[1].y = -yc; + N[2].x = xc; + N[2].y = yc; + N[3].x = -xc; + N[3].y = yc; + N[4].x = rc.left - xc; + N[4].y = rc.top - yc; + int i; + for( i = 0; i < 5; i++ ){ + int x = N[i].x * m_CosX + N[i].y * m_SinX; + int y = -N[i].x * m_SinX + N[i].y * m_CosX; + N[i].x = x + xc; N[i].y = y + yc; + } + int x1, x2, y1, y2; + x1 = x2 = N[0].x; y1 = y2 = N[0].y; + for( i = 1; i < 4; i++ ){ + if( x1 > N[i].x ) x1 = N[i].x; + if( x2 < N[i].x ) x2 = N[i].x; + if( y1 > N[i].y ) y1 = N[i].y; + if( y2 < N[i].y ) y2 = N[i].y; + } + int xo = N[4].x - x1; + int yo = N[4].y - y1; + if( ABS(m_Rot - 90) < 10 ) yo += m_FW/12; + if( ABS(m_Rot - 180) < 10 ) xo += m_FW/12; +// if( ABS(m_Rot - 270) < 10 ) yo += m_FW/12; + rc.left += xo; rc.right += xo; + rc.top += yo; rc.bottom += yo; + xw = x2 - x1 + 1; yw = y2 - y1 + 1; + } + + if( m_3d & 0x00010000 ){ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + if( m_Rot ){ + int x = xm * m_CosX + ym * m_SinX; + int y = -xm * m_SinX + ym * m_CosX; + xm = x; + ym = y; + } + if( xm < 0 ){ + rc.left -= xm; + rc.right -= xm; + } + if( ym < 0 ){ + rc.top -= ym; + rc.bottom -= ym; + } + xw += ABS(xm); + yw += ABS(ym); + } + + switch(m_Shadow){ + case 1: + xw += m_Line; + yw += m_Line; + break; + case 2: + rc.left += m_Line; + rc.right += m_Line; + rc.top += m_Line; + rc.bottom += m_Line; + xw += m_Line*2; + yw += m_Line*2; + break; + case 3: + xw += m_Line*2; + yw += m_Line*2; + break; + } + + if( m_fsCode & FSITALIC ){ // イタリックの場合の位置補正 + int oxw = 0; + int oyw = 0; + switch(GetPosFormat()){ + case DT_CENTER: + oxw = m_FW / 8; + if( m_Rot ){ + oxw *= m_CosX; + } + break; + case DT_RIGHT: + oxw = m_FW / 4; + if( m_Rot ){ + oxw *= m_CosX; + oyw = -(m_FW / 4) * m_SinX; + } + break; + default: + break; + } + rc.left -= oxw; + rc.right -= oxw; + rc.top -= oyw; + rc.bottom -= oyw; + } + + Graphics::TBitmap *pBmp = pDest; + if( (pDest->Width != xw) || (pDest->Height != yw) ){ + pBmp = CreateBitmap(xw, yw); + FillBitmap(pBmp, m_cBack); + } + else if( m_Back.d != m_cBack.d ){ + FillBitmap(pBmp, m_cBack); + } + + MultProc(); + UCOL col = m_ColG[0]; + if( m_Draft && (col.d == m_Back.d) ) col.d = col.d ^ 0x00ffffff; + DrawText(rc, 0, 0, pBmp, pText, col); + Graphics::TBitmap *pNew = pBmp; + if( !m_Draft ){ + pNew = DrawExt(pBmp, rc, pText); +#if ADJUST_MINIMIZED + if( rc.left || rc.top ){ + xw = rc.right - rc.left + 1; + yw = rc.bottom - rc.top + 1; + Graphics::TBitmap *pbmp = CreateBitmap(xw, yw); + pbmp->Canvas->Draw(-rc.left, -rc.top, pNew); + delete pNew; + pNew = pbmp; + } +#endif + } + m_OrgXW = xw; + m_OrgYW = yw; + if( pBmp != pDest ) delete pDest; + pDest = pNew; + if( pOrgText != pText ) delete pText; + + // set transparent color to (0,0) for overlay + LPBYTE p = (LPBYTE)pDest->ScanLine[0]; + ASSERT(p); + *p++ = m_cBack.b.b; + *p++ = m_cBack.b.g; + *p = m_cBack.b.r; + + MultProc(); + return pDest; +} + + + \ No newline at end of file diff --git a/CItems/TEXTBOX/Comlib.h b/CItems/TEXTBOX/Comlib.h new file mode 100644 index 0000000..f833dec --- /dev/null +++ b/CItems/TEXTBOX/Comlib.h @@ -0,0 +1,234 @@ +#ifndef ComLibH +#define ComLibH +#include +#include +#include +#include +#include +#include +#include + +#define UseHWND 0 +#define ADJUST_MINIMIZED FALSE + +#define NDEBUG // Remove this symbol, if you would like to do debug +#include +#define ASSERT(c) assert(c) + +#define ABS(c) (((c)<0)?(-(c)):(c)) +#define PI 3.1415926535897932384626433832795 + +typedef const BYTE* LPCBYTE; +typedef double* LPDOUBLE; +typedef const double* LPCDOUBLE; +typedef union { + struct { + BYTE r; + BYTE g; + BYTE b; + BYTE s; + }b; + DWORD d; + TColor c; +}UCOL; + +#define VER "TextBox Version 1.09" +#define AUT "(C) JE3HHT 2002-2003." +#define TTL "MMSSTV custom item" +#define TTLJ "MMSSTV カスタムアイテム" // Japanese code + +#define ININAME "TextBox.ini" + +#define FSBOLD 1 +#define FSITALIC 2 +#define FSUNDERLINE 4 +#define FSSTRIKEOUT 8 + +#define DISFONTSMOOTHING 0x00000001 + +// These prototypes are the functions in the MMSSTV. +// ---- Refer to the comment of the mcmFunc() --- +typedef HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +typedef HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +typedef HBITMAP (__cdecl *mmLoadHistImage)(void); +typedef int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +typedef int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +typedef HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +typedef int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +typedef int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +typedef HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +typedef void (__cdecl *mmMultProc)(void); +typedef void (__cdecl *mmMultProcA)(void); +typedef int (__cdecl *mmColorComp)(LPDWORD pCol); + +void __fastcall InitSys(void); +void __fastcall MultProc(void); +char __fastcall LastC(LPCSTR p); +void __fastcall SetCurDir(LPSTR t, int size); +void __fastcall SetDirName(LPSTR t, LPCSTR pName); +void __fastcall Yen2CrLf(AnsiString &ws, AnsiString cs); +void __fastcall CrLf2Yen(AnsiString &ws, AnsiString cs); +void __fastcall LoadStringsFromIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg); +void __fastcall SaveStringsToIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg); +void __fastcall InitCustomColor(TColorDialog *tp); +void __fastcall AddCustomColor(TColorDialog *tp, TColor col); +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw); +void __fastcall FillBitmap(Graphics::TBitmap *pDest, UCOL ucol); +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc); +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap); + +int __fastcall IsFile(LPCSTR pName); +void __fastcall SetMBCP(BYTE charset); +void __fastcall AddStyle(AnsiString &as, BYTE charset, DWORD style); +void __fastcall LoadFontFromInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile); +void __fastcall SaveFontToInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile); + +class CWaitCursor +{ +private: + TCursor sv; +public: + CWaitCursor(BOOL sw); + CWaitCursor(); + ~CWaitCursor(); + void Delete(void); + void Wait(void); +}; + +int FontStyle2Code(TFontStyles style); +TFontStyles Code2FontStyle(int code); + +class CItem +{ +public: + int m_Ver; + int m_ASize; + int m_Align; + int m_Grade; + int m_Shadow; + int m_Line; + int m_Zero; + DWORD m_3d; + AnsiString m_Text; + TFont *m_pFont; + UCOL m_ColG[4]; + UCOL m_ColB[4]; + UCOL m_Back; + int m_OrgXW; + int m_OrgYW; + int m_TextXW; + int m_TextYW; + int m_OYW; + int m_Rot; +private: + UCOL m_cBack; + int m_Draft; + int m_fsCode; + int m_IniSize; + int m_Pos; + DWORD m_Ex; + int m_FW; + double m_SinX; + double m_CosX; + int m_OYWC; + int m_Row; + TMemoryStream *m_pMemStream; +private: + void __fastcall LoadDefault(void); + void __fastcall UpdateDefault(void); + void __fastcall SetFontSize(Graphics::TBitmap *pDest); + void __fastcall SetTextSize(Graphics::TBitmap *pDest); + int __fastcall GetMaxWH(int &W, int &H, Graphics::TBitmap *pDest, LPCSTR pText); + UINT __fastcall GetPosFormat(void); + UINT __fastcall GetDrawFormat(void); + void __fastcall DrawText(RECT rc, int xoff, int yoff, Graphics::TBitmap *pDest, LPCSTR pText, UCOL ucol); + void __fastcall DrawText_(RECT rc, int xoff, int yoff, Graphics::TBitmap *pDest, LPCSTR pText); + void __fastcall DrawTrans(Graphics::TBitmap *pDest, int x, int y, Graphics::TBitmap *pSrc); + LPBYTE __fastcall CreateTable(LPBYTE* &pAdr, Graphics::TBitmap *pDest); + void __fastcall Draw3D(RECT &rc, Graphics::TBitmap *pDest, LPCSTR pText, UCOL cl[2]); + Graphics::TBitmap* __fastcall DrawExt(Graphics::TBitmap *pDest, RECT &rc, LPCSTR pText); + + void __fastcall ConvChar(LPSTR pStr); +protected: +public: + __fastcall CItem(void); + __fastcall ~CItem(); + void __fastcall Create(LPCBYTE ps, DWORD size); + DWORD __fastcall GetItemType(void); + LPCBYTE __fastcall CreateStorage(LPDWORD psize); + void __fastcall DeleteStorage(LPCBYTE pStorage); + void __fastcall Copy(CItem *sp); + int __fastcall EditDialog(HWND hWnd); + int __fastcall FontDialog(HWND hWnd); + DWORD __fastcall GetOrgSize(void); + void __fastcall SetPos(DWORD pos, DWORD size, DWORD tsize); + inline LPCSTR __fastcall GetText(void){ + return m_Text.c_str(); + }; + inline void __fastcall SetDraft(int draft){ + m_Draft = draft; + }; + void __fastcall UpdateFont(void); + void __fastcall LoadFromInifile(LPCSTR pSect, LPCSTR pName); + void __fastcall SaveToInifile(LPCSTR pSect, LPCSTR pName); + void __fastcall DeleteInifile(LPCSTR pSect, LPCSTR pName); + Graphics::TBitmap* __fastcall Draw(Graphics::TBitmap *pDest, LPCSTR pText); + inline void __fastcall SetEx(DWORD ex){ m_Ex = ex;}; + inline DWORD __fastcall GetEx(void){return m_Ex;}; + inline void __fastcall SetPos(int pos){ m_Pos = pos;}; + inline DWORD __fastcall GetPos(void){return m_Pos;}; + int __fastcall GetTrueOYW(void); + + void __fastcall GetFont(LOGFONT *pLogfont); + void __fastcall SetFont(LOGFONT *pLogfont); + +}; + +typedef struct { + AnsiString m_Name; + int m_Height; + BYTE m_Charset; + DWORD m_Style; +}FONTDATA; + +enum { + fmJA, + fmHL, + fmJOHAB, + fmBV, + fmBY, + fmEND, +}; +typedef struct { + DWORD m_dwVersion; + int m_WinNT; + UINT m_CodePage; + int m_MsgEng; + int m_BitPixel; + mmGetMacKey m_fGetMacKey; + mmConvMac m_fConvMac; + mmMultProc m_fMultProc; + mmColorComp m_fColorComp; + DWORD m_DefStgSize; + LPBYTE m_pDefStg; + TStringList *m_pTextList; + TStringList *m_pStyleList; + char m_BgnDir[512]; + + AnsiString m_Msg; + TStringList *m_pFontList; + + Graphics::TBitmap *m_pBitmapTemp; + + int m_CodeLeft; + int m_CodeTop; + int m_CodeOut; + + BOOL m_fEudc; + AnsiString m_Eudc; + + BOOL m_fFontFam; + BOOL m_tFontFam[fmEND]; +}SYS; +extern SYS sys; +#endif diff --git a/CItems/TEXTBOX/Item.ico b/CItems/TEXTBOX/Item.ico new file mode 100644 index 0000000000000000000000000000000000000000..b709881afc02636ff6ff58a882cf0f8e33f5aac7 GIT binary patch literal 766 zcmc(d%MHUI5JcBe3dkvEA5%t3qYa;Eg#wUhBP}2ykvD5uCRTEFX1$-;0WZQfo3MGl znee)p-N_Gp#-I3PSE5-!`;LH!62h8@l$KH=OX&Vs@2YT2Ey8j@q&c9*fl!{$3sXzZ znUo9jofArLSdFcdoGT0*!MXNI64&{Q+b7qWUwT8>_VfO}ac_=%J&!LQ&a0_A&cDBX OwyJvg+zY?MU-1U)I`Q}b literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/TextBox.bpr b/CItems/TEXTBOX/TextBox.bpr new file mode 100644 index 0000000..33d9e3d --- /dev/null +++ b/CItems/TEXTBOX/TextBox.bpr @@ -0,0 +1,184 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE セクション +# --------------------------------------------------------------------------- +# プロジェクトメイクファイルの以下のセクションは、IDE によって管理されます。 +# このセクションを変更する場合は、できるだけ IDE を使用するようにして +# ください。 +# --------------------------------------------------------------------------- + +VERSION = BCB.03 +# --------------------------------------------------------------------------- +PROJECT = TextBox.dll +OBJFILES = TextBox.obj Comlib.obj About.obj TextDlg.obj CodeVw.obj +RESFILES = textbox.res +DEFFILE = +RESDEPEN = $(RESFILES) About.dfm TextDlg.dfm CodeVw.dfm +LIBFILES = +LIBRARIES = VCL35.lib +SPARELIBS = VCL35.lib +PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ + QRPT35.bpi TEEUI35.bpi VCLSMP35.bpi TEEDB35.bpi TEE35.bpi ibsmp35.bpi \ + NMFAST35.bpi INETDB35.bpi INET35.bpi +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +# --------------------------------------------------------------------------- +CFLAG1 = -WD -O2 -Hc -w -Ve -d -k- -vi -c -b- -w-par -w-inl -Vx +CFLAG2 = -I..\textart;$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm +CFLAG3 = -Tkh30000 +PFLAGS = -U..\textart;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I..\textart;$(BCB)\include;$(BCB)\include\vcl -$L- -$D- -v -JPHN -M +RFLAGS = -i..\textart;$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i..\textart /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn /d_RTLDLL +LFLAGS = -L..\textart;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gn +IFLAGS = +# --------------------------------------------------------------------------- +ALLOBJ = c0d32.obj sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1041 +CodePage=932 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=2 +Item0=..\textart;$(BCB)\include;$(BCB)\include\vcl +Item1=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=2 +Item0=..\textart;$(BCB)\lib\obj;$(BCB)\lib +Item1=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=2 +Item0=_RTLDLL +Item1=_RTLDLL;USEPACKAGES + +[HistoryLists\hlHostApplication] +Count=1 +Item0=D:\Mmsstv\Mmsstv.exe + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication=D:\Mmsstv\Mmsstv.exe + +!endif + +# --------------------------------------------------------------------------- +# MAKE セクション +# --------------------------------------------------------------------------- +# IDE はプロジェクトファイルのこのセクションは使用していません。 +# コマンドラインの MAKE ユーティリティを使用してビルドするためのものです。 +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- + \ No newline at end of file diff --git a/CItems/TEXTBOX/TextBox.cpp b/CItems/TEXTBOX/TextBox.cpp new file mode 100644 index 0000000..eff5836 --- /dev/null +++ b/CItems/TEXTBOX/TextBox.cpp @@ -0,0 +1,237 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +#include "ComLib.h" +#include "About.h" +//--------------------------------------------------------------------------- +USEUNIT("Comlib.cpp"); +USEFORM("About.cpp", AboutDlg); +USERC("textbox.rc"); +USEFORM("TextDlg.cpp", TextDlgBox); +USEFORM("CodeVw.cpp", CodeView); +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + switch(reason){ + case DLL_PROCESS_ATTACH: + { + InitSys(); + + char bf[512]; + ::GetModuleFileName(hinst, bf, sizeof(bf)); + ::SetDirName(sys.m_BgnDir, bf); + + _setmbcp(_MB_CP_ANSI); + HWND hMM = ::FindWindow("TMmsstv", NULL); + if( hMM != NULL ) Application->Handle = hMM; + + if( sys.m_BitPixel < 24 ){ + sys.m_pBitmapTemp = new Graphics::TBitmap; + sys.m_pBitmapTemp->Width = 1; + sys.m_pBitmapTemp->Height = 1; + } + } + break; + case DLL_PROCESS_DETACH: + sys.m_fMultProc = NULL; + if( sys.m_pDefStg != NULL ){ + CItem *pItem = new CItem; + pItem->Create(NULL, 0); + pItem->SaveToInifile("Default", ININAME); + delete pItem; + delete sys.m_pDefStg; + sys.m_pDefStg = NULL; + } + if( sys.m_pTextList != NULL ){ + SaveStringsToIniFile(sys.m_pTextList, "Strings", ININAME, TRUE); + delete sys.m_pTextList; + sys.m_pTextList = NULL; + } + if( sys.m_pStyleList != NULL ){ + SaveStringsToIniFile(sys.m_pStyleList, "Styles", ININAME, FALSE); + delete sys.m_pStyleList; + sys.m_pStyleList = NULL; + } + if( sys.m_pFontList != NULL ){ + delete sys.m_pFontList; + sys.m_pFontList = NULL; + } + if( sys.m_pBitmapTemp != NULL ){ + delete sys.m_pBitmapTemp; + sys.m_pBitmapTemp = NULL; + } + break; + } + return 1; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmLanguage(DWORD lang) +{ + sys.m_MsgEng = lang; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmAboutDialog(HWND hWnd) +{ +#if UseHWND + TAboutDlg *pBox = new TAboutDlg(hWnd); +#else + TAboutDlg *pBox = new TAboutDlg(NULL); +#endif + pBox->ShowModal(); + delete pBox; +#if UseHWND + ::SetForegroundWindow(hWnd); +#endif +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HANDLE mcmCreateObject(LPCBYTE pStorage, DWORD Size) +{ + CItem *pItem = new CItem; + ASSERT(pItem); + if( pItem != NULL ) pItem->Create(pStorage, Size); + return (HANDLE)pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetItemType(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetItemType(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCBYTE mcmCreateStorage(HANDLE hObj, LPDWORD pSize) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->CreateStorage(pSize); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteStorage(HANDLE hObj, LPCBYTE pStorage) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->DeleteStorage(pStorage); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteObject(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + if( pItem != NULL ) delete pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmEdit(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + int r = pItem->EditDialog(hWnd); +#if UseHWND + ::SetForegroundWindow(hWnd); +#endif + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmFont(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + int r = pItem->FontDialog(hWnd); + ::SetForegroundWindow(hWnd); + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetOrgSize(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetOrgSize(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmPos(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->SetPos(pos, size, tsize); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCSTR mcmGetUserText(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetText(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hDest, LPCSTR pText) +{ + ASSERT(hObj); + ASSERT(hDest); + CItem *pItem = (CItem *)hObj; + + // Draw object to hDest + Graphics::TBitmap *pDest = new Graphics::TBitmap; + pDest->Handle = hDest; + pDest = pItem->Draw(pDest, pText); + + HBITMAP hb = pDest->ReleaseHandle(); + delete pDest; + return (hb != hDest) ? hb : NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hDest, HBITMAP hSrc) +{ + ASSERT(0); // This function should not be called + return NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetDraft(HANDLE hObj, DWORD draft) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetDraft(draft); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetEx(HANDLE hObj, DWORD ex) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetEx(ex); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmGetFont(HANDLE hObj, LOGFONT *pLogfont) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->GetFont(pLogfont); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetFont(HANDLE hObj, LOGFONT *pLogfont) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetFont(pLogfont); +} + diff --git a/CItems/TEXTBOX/TextBox.rc b/CItems/TEXTBOX/TextBox.rc new file mode 100644 index 0000000..0e32c13 --- /dev/null +++ b/CItems/TEXTBOX/TextBox.rc @@ -0,0 +1,2 @@ +8000 ICON DISCARDABLE "Item.ico" + \ No newline at end of file diff --git a/CItems/TEXTBOX/TextBox.res b/CItems/TEXTBOX/TextBox.res new file mode 100644 index 0000000000000000000000000000000000000000..4dd7390f71ee04e574b06c8d2cfc2a681a403a8f GIT binary patch literal 860 zcmc(eJr08~427MxbH&iT89Vj}94*&i;wl^~mT9D?P!vuG?B(lo9XoAUC2&V$W|&kT5CLM5L5yn#e|&2uoTMvFcJ84mRq} z=F@ROPsurxa?yEoOengr=5bMyV+#$2aBO>xGE6_Utv$A$fBXWm_Va#Su|I5a)#J^L pUORQO)4%88cMsf(Q|-a&5m&wA{nNy}n>n!CA0)=kr@*Er$QSFo02%-Q literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/TextDlg.cpp b/CItems/TEXTBOX/TextDlg.cpp new file mode 100644 index 0000000..8dca206 --- /dev/null +++ b/CItems/TEXTBOX/TextDlg.cpp @@ -0,0 +1,1217 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TextDlg.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TTextDlgBox *TextDlgBox; +//--------------------------------------------------------------------- +#if UseHWND +__fastcall TTextDlgBox::TTextDlgBox(HWND hWnd) + : TForm(hWnd) +#else +__fastcall TTextDlgBox::TTextDlgBox(TComponent* AOwner) + : TForm(AOwner) +#endif +{ + MultProc(); + m_DisEvent = 1; + m_pBitmap = NULL; + m_Change = 0; + m_DropProfile = 0; + m_FText = ""; + m_MemoDown = 0; + m_MouseHold = 0; + m_pCodeView = NULL; + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + + Caption = "Set text and colors - "VER" "TTL; + CancelBtn->Caption = "Cancel"; + FontBtn->Caption = "Font"; + SBM->Caption = "Mac"; + SBL->Caption = "Code"; + GBG->Caption = "Gradation"; + GBS->Caption = "Shadow"; + GBA->Caption = "Misc"; + CBFixed->Caption = "Fixed size"; + CBZero->Caption = "Slash zero"; + SBLD->Caption = "Del"; + SBLW->Caption = "Add"; + GBY->Caption = "Style profiles"; + L1->Caption = "Align"; + L2->Caption = "Style name"; + L33->Caption = "V.space"; + L34->Caption = "Rot."; + SBYD->Caption = "Del"; + SBYW->Caption = "Add"; + CBY->Text = "Untitled"; + SBM->Hint = "Insert macro-keyword"; + SBL->Hint = "Character code list"; + SBC->Hint = "Choose color's component"; + SBLD->Hint = "Delete the text in the list"; + SBLW->Hint = "Add current text into the list"; + SBYD->Hint = "Delete the style in the profiles"; + SBYW->Hint = "Add current style into the profiles"; + SB3DD->Hint = "Make the shadow shorter"; + SB3DI->Hint = "Make the shadow longer"; + SBA1->Hint = "Left"; + SBA2->Hint = "Center"; + SBA3->Hint = "Right"; + SBA4->Hint = "Auto"; +// FontBtn->Hint = "Choose font"; + SBFD->Hint = "Make the font smaller"; + SBFI->Hint = "Make the font bigger"; + SBB->Hint = "Bold"; + SBI->Hint = "Italic"; + SBMSG->Hint = "Show messages list"; + Msg->Hint = "Copy the message to the text box with double click"; + } + else { + Caption = "テキストと色の設定 - "VER" "TTLJ; + CBY->Text = "無題"; + } + SBFD->Glyph->Assign(SB3DD->Glyph); + SBFI->Glyph->Assign(SB3DI->Glyph); + MultProc(); + if( sys.m_pTextList == NULL ){ + sys.m_pTextList = new TStringList; + LoadStringsFromIniFile(sys.m_pTextList, "Strings", ININAME, TRUE); + MultProc(); + if(!sys.m_pTextList->Count){ + sys.m_pTextList->Add("%c\\r\\nur %r\\r\\nde %m"); + sys.m_pTextList->Add("Tnx for nice PIC\\r\\nur %r\\r\\nde %m"); + sys.m_pTextList->Add("%n\\r\\nBest 73\\r\\nde %m"); + } + } + ASSERT(sys.m_pTextList); + CBList->Items->Assign(sys.m_pTextList); + if( sys.m_pStyleList == NULL ){ + sys.m_pStyleList = new TStringList; + LoadStringsFromIniFile(sys.m_pStyleList, "Styles", ININAME, FALSE); + MultProc(); + } + CBY->Items->Assign(sys.m_pStyleList); + CBY->Sorted = TRUE; + int i; + if( sys.m_pFontList == NULL ){ + sys.m_pFontList = new TStringList; + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, ININAME); + TMemIniFile *pIniFile = new TMemIniFile(fname); + for( i = 0; i < 5; i++ ){ + char bf[32]; + sprintf(bf, "Font.%u", i); + AnsiString as = pIniFile->ReadString(bf, "FontName", ""); + if( !as.IsEmpty() ){ + BYTE charset = (BYTE)pIniFile->ReadInteger(bf, "FontSet", 0); + DWORD style = pIniFile->ReadInteger(bf, "FontStyle", 0); + AddStyle(as, charset, style); + } + sys.m_pFontList->Add(as); + } + delete pIniFile; + } + for( i = 0; i < 5; i++ ) SetSBF(i); + ShowHint = sys.m_WinNT; + MultProc(); +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormDestroy(TObject *Sender) +{ + if( m_pBitmap != NULL ) delete m_pBitmap; + if( m_pCodeView ) delete m_pCodeView; + MultProc(); + ASSERT(sys.m_pTextList); + sys.m_pTextList->Assign(CBList->Items); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TopMost(void) +{ +#if UseHWND + ::SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::NoTopMost(void) +{ +#if UseHWND + ::SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateUI(void) +{ + m_DisEvent++; + int f = SBG1->Down ? FALSE : TRUE; + PG2->Visible = f; + PG3->Visible = f; + PG4->Visible = f; + SBC->Visible = f && sys.m_fColorComp; + f = !SBS1->Down; + if( !f ) CB3D->Checked = FALSE; + CB3D->Enabled = f; + PB1->Visible = f && (!SBS2->Down || !CB3D->Checked); + PB2->Visible = f && (SBS4->Down || CB3D->Checked); + PB3->Visible = f && CB3D->Checked; + UDL->Enabled = f && (SBS3->Down || !CB3D->Checked); + SBLW->Enabled = (!m_FText.IsEmpty() && CBList->Items->IndexOf(m_FText) < 0) ? TRUE : FALSE; + SBLD->Enabled = CBList->ItemIndex >= 0 ? TRUE : FALSE; + SBYW->Enabled = !CBY->Text.IsEmpty(); + SBYD->Enabled = !CBY->Text.IsEmpty() && (sys.m_pStyleList->IndexOf(CBY->Text) >= 0); + UDX->Enabled = CB3D->Checked; + UDY->Enabled = CB3D->Checked; + SB3DI->Enabled = CB3D->Checked; + SB3DD->Enabled = CB3D->Checked; + if( ShowHint ){ + char bf[32]; + sprintf(bf, "W = %d", UDL->Position); + UDL->Hint = bf; + sprintf(bf, "3D(Y) = %d", UDY->Position); + UDY->Hint = bf; + sprintf(bf, "3D(X) = %d", UDX->Position); + UDX->Hint = bf; + } + Msg->Visible = SBMSG->Down; + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateMemoFont(BYTE charset) +{ + switch(charset){ + case SHIFTJIS_CHARSET: + case HANGEUL_CHARSET: + case CHINESEBIG5_CHARSET: // + case 134: // 簡略 + break; + default: + charset = Font->Charset; + break; + } + m_DisEvent++; + if( Memo->Font->Charset != charset ){ + Memo->Font->Charset = charset; + } + m_DisEvent--; + UpdateFontBtnHint(); +} +//--------------------------------------------------------------------- +int __fastcall TTextDlgBox::Execute(CItem *pItem) +{ + MultProc(); + m_Item.Copy(pItem); + UpdateDialog(&m_Item); + UpdateBitmap(); + m_DisEvent = 0; + MultProc(); + int r = ShowModal(); + if( Msg->Modified ) sys.m_Msg = Msg->Text; + if( r == IDOK ){ + MultProc(); + pItem->Copy(&m_Item); + if( pItem->m_ASize ){ + pItem->m_OrgXW = -1; + } + MultProc(); + return TRUE; + } + else { + MultProc(); + return FALSE; + } +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateFText(void) +{ + AnsiString as; + if( Memo->Text.IsEmpty() ){ + m_FText = ""; + } + else { + ::CrLf2Yen(as, Memo->Text); + LPSTR p = as.c_str(); + if( *p ){ + *(p+strlen(p)-1) = 0; + m_FText = p+1; + } + } + m_DisEvent++; + CBList->ItemIndex = CBList->Items->IndexOf(m_FText); + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateItem(CItem *pItem) +{ + UpdateUI(); + if( SBG1->Down ){ + pItem->m_Grade = 0; + } + else if( SBG2->Down ){ + pItem->m_Grade = 1; + } + else if( SBG3->Down ){ + pItem->m_Grade = 2; + } + else { + pItem->m_Grade = 3; + } + if( SBS1->Down ){ + pItem->m_Shadow = 0; + } + else if( SBS2->Down ){ + pItem->m_Shadow = 1; + } + else if( SBS3->Down ){ + pItem->m_Shadow = 2; + } + else { + pItem->m_Shadow = 3; + } + if( SBA1->Down ){ + pItem->m_Align = 0; + } + else if( SBA2->Down ){ + pItem->m_Align = 1; + } + else if( SBA3->Down ){ + pItem->m_Align = 2; + } + else { + pItem->m_Align = 3; + } + pItem->m_ColB[0].c = PB1->Color; + pItem->m_ColB[1].c = PB2->Color; + pItem->m_ColB[2].c = PB3->Color; + pItem->m_ColG[0].c = PG1->Color; + pItem->m_ColG[1].c = PG2->Color; + pItem->m_ColG[2].c = PG3->Color; + pItem->m_ColG[3].c = PG4->Color; + pItem->m_Line = UDL->Position; + pItem->m_ASize = !CBFixed->Checked; + pItem->m_Zero = CBZero->Checked; + pItem->m_Text = Memo->Text.c_str(); + pItem->m_3d = (CB3D->Enabled && CB3D->Checked) ? 0x00010000 : 0; + pItem->m_3d |= ((UDY->Position << 8)&0x0000ff00); + pItem->m_3d |= (UDX->Position & 0x000000ff); + pItem->m_OYW = UDOYW->Position & 0x0000ffff; + pItem->m_Rot = UDRot->Position; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateDialog(CItem *pItem) +{ + m_DisEvent++; + switch(pItem->m_Grade){ + case 1: + SBG2->Down = TRUE; + break; + case 2: + SBG3->Down = TRUE; + break; + case 3: + SBG4->Down = TRUE; + break; + default: + SBG1->Down = TRUE; + break; + } + switch(pItem->m_Shadow){ + case 1: + SBS2->Down = TRUE; + break; + case 2: + SBS3->Down = TRUE; + break; + case 3: + SBS4->Down = TRUE; + break; + default: + SBS1->Down = TRUE; + break; + } + switch(pItem->m_Align){ + case 1: + SBA2->Down = TRUE; + break; + case 2: + SBA3->Down = TRUE; + break; + case 3: + SBA4->Down = TRUE; + break; + default: + SBA1->Down = TRUE; + break; + } + PB1->Color = pItem->m_ColB[0].c; + PB2->Color = pItem->m_ColB[1].c; + PB3->Color = pItem->m_ColB[2].c; + PG1->Color = pItem->m_ColG[0].c; + PG2->Color = pItem->m_ColG[1].c; + PG3->Color = pItem->m_ColG[2].c; + PG4->Color = pItem->m_ColG[3].c; + UDL->Position = SHORT(pItem->m_Line); + CBFixed->Checked = !pItem->m_ASize; + CBZero->Checked = pItem->m_Zero; + CB3D->Checked = pItem->m_3d & 0x00010000; + int xm = pItem->m_3d & 0x000000ff; + int ym = (pItem->m_3d >> 8) & 0x000000ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + UDY->Position = SHORT(ym); + UDX->Position = SHORT(xm); + if( pItem->m_pFont != NULL ){ + UpdateMemoFont(pItem->m_pFont->Charset); + UpdateFontBtnHint(); + } + Memo->Text = pItem->m_Text.c_str(); + + UDOYW->Position = (SHORT)pItem->GetTrueOYW(); + UDRot->Position = (SHORT)pItem->m_Rot; + UpdateFText(); + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateBitmap(void) +{ + MultProc(); + m_Change = 0; + UpdateItem(&m_Item); + char bf[1024]; + sys.m_fConvMac(bf, m_Item.GetText(), sizeof(bf)-1); + MultProc(); + if( m_pBitmap == NULL ){ + int xw = m_Item.m_OrgXW; + int yw = m_Item.m_OrgYW; + if( (xw < 0)||(yw < 0) ){ + xw = 160; + yw = 128; + } + m_pBitmap = CreateBitmap(xw, yw); + } + FillBitmap(m_pBitmap, m_Item.m_Back); + MultProc(); + m_pBitmap = m_Item.Draw(m_pBitmap, bf); + PBox->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxPaint(TObject *Sender) +{ + if( m_pBitmap == NULL ) return; + + Graphics::TBitmap *pBitmap = m_pBitmap; + if( sys.m_BitPixel == 16 ){ + pBitmap = new Graphics::TBitmap; + pBitmap->Width = m_pBitmap->Width; + pBitmap->Height = m_pBitmap->Height; + pBitmap->Canvas->Draw(0, 0, m_pBitmap); + } + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[0][0]; + PBox->Canvas->Draw(0, 0, pBitmap); + pBitmap->Transparent = FALSE; + if( pBitmap != m_pBitmap ) delete pBitmap; + if( m_MouseHold ){ + PBox->Canvas->Pen->Color = clBlue; + PBox->Canvas->MoveTo(0, m_MouseYC); + PBox->Canvas->LineTo(PBox->Width, m_MouseYC); + PBox->Canvas->MoveTo(m_MouseXC, 0); + PBox->Canvas->LineTo(m_MouseXC, PBox->Height); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + m_Change = 2; + Timer->Enabled = TRUE; + UpdateFText(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TimerTimer(TObject *Sender) +{ + if( m_Change ){ + m_Change--; + if( !m_Change ){ + Timer->Enabled = FALSE; + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBG1Click(TObject *Sender) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PB1Click(TObject *Sender) +{ + TPanel *pPanel = (TPanel *)Sender; + InitCustomColor(ColorDialog); + AddCustomColor(ColorDialog, PG1->Color); + AddCustomColor(ColorDialog, PG2->Color); + AddCustomColor(ColorDialog, PG3->Color); + AddCustomColor(ColorDialog, PG4->Color); + AddCustomColor(ColorDialog, PB1->Color); + AddCustomColor(ColorDialog, PB2->Color); + AddCustomColor(ColorDialog, m_Item.m_Back.c); + + ColorDialog->Color = pPanel->Color; + NoTopMost(); + int r = ColorDialog->Execute(); + TopMost(); + if( r == TRUE ){ + pPanel->Color = ColorDialog->Color; + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormActivate(TObject *Sender) +{ + TopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormDeactivate(TObject *Sender) +{ + NoTopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UDLClick(TObject *Sender, TUDBtnType Button) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FontBtnClick(TObject *Sender) +{ + FontDialog->Font->Assign(m_Item.m_pFont); + FontDialog->Font->Color = PG1->Color; + NoTopMost(); + int r = FontDialog->Execute(); + TopMost(); + if( r == TRUE ){ + m_Item.m_pFont->Assign(FontDialog->Font); + PG1->Color = FontDialog->Font->Color; + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMClick(TObject *Sender) +{ + if( sys.m_fGetMacKey ){ + char bf[256]; + NoTopMost(); + int r = sys.m_fGetMacKey(bf, sizeof(bf)); + TopMost(); + if( r ){ + HWND hWnd; + if( SBMSG->Down ){ + Msg->SetFocus(); + hWnd = Msg->Handle; + } + else { + Memo->SetFocus(); + hWnd = Memo->Handle; + } + for( LPCSTR p = bf; *p; p++ ){ + ::PostMessage(hWnd, WM_CHAR, *p, 0); + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBCClick(TObject *Sender) +{ + if( sys.m_fColorComp ){ + UCOL col[4]; + col[0].c = PG1->Color; + col[1].c = PG2->Color; + col[2].c = PG3->Color; + col[3].c = PG4->Color; + NoTopMost(); + int r = sys.m_fColorComp(&col[0].d); + TopMost(); + if( r ){ + PG1->Color = col[0].c; + PG2->Color = col[1].c; + PG3->Color = col[2].c; + PG4->Color = col[3].c; + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLWClick(TObject *Sender) +{ + m_DisEvent++; + CBList->Items->Add(m_FText); + CBList->ItemIndex = CBList->Items->IndexOf(m_FText); + UpdateUI(); + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLDClick(TObject *Sender) +{ + m_DisEvent++; + if( CBList->ItemIndex >= 0 ){ + int n = CBList->ItemIndex; + CBList->ItemIndex = -1; + CBList->Items->Delete(n); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBListChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( CBList->ItemIndex < 0 ) return; + + m_DisEvent++; + AnsiString cs; + AnsiString as = CBList->Items->Strings[CBList->ItemIndex]; + m_FText = as; + ::Yen2CrLf(cs, as); + Memo->Text = cs; + UpdateBitmap(); + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBYWClick(TObject *Sender) +{ + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r < 0 ) r = sys.m_pStyleList->Count; + + CItem *pItem = new CItem; + pItem->Copy(&m_Item); + pItem->m_Text = CBY->Text; + char bf[64]; + sprintf(bf, "Style.%u", r); + pItem->SaveToInifile(bf, ININAME); + delete pItem; + + if( r == sys.m_pStyleList->Count ){ + CBY->Items->Add(CBY->Text); + sys.m_pStyleList->Add(CBY->Text); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBYDClick(TObject *Sender) +{ + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r >= 0 ){ + char bf[64]; + CItem *pItem = new CItem; + int i; + for( i = r; i < sys.m_pStyleList->Count - 1; i++ ){ + sprintf(bf, "Style.%u", i+1); + pItem->LoadFromInifile(bf, ININAME); + sprintf(bf, "Style.%u", i); + pItem->SaveToInifile(bf, ININAME); + MultProc(); + } + sprintf(bf, "Style.%u", i); + pItem->DeleteInifile(bf, ININAME); + delete pItem; + sys.m_pStyleList->Delete(r); + r = CBY->Items->IndexOf(CBY->Text); + if( r >= 0 ) CBY->Items->Delete(r); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( !m_DropProfile ){ + UpdateUI(); + return; + } + m_DropProfile = 0; + + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r >= 0 ){ + AnsiString as = m_Item.m_Text; + DWORD ex = m_Item.GetEx(); + int pos = m_Item.GetPos(); + CItem *pItem = new CItem; + char bf[64]; + sprintf(bf, "Style.%u", r); + pItem->LoadFromInifile(bf, ININAME); + m_Item.Copy(pItem); + delete pItem; + m_Item.m_Text = as; + m_Item.SetEx(ex); + m_Item.SetPos(pos); + UpdateDialog(&m_Item); + UpdateBitmap(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYKeyPress(TObject *Sender, char &Key) +{ + m_DropProfile = 0; + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYDropDown(TObject *Sender) +{ + m_DropProfile = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_DisEvent ) return; + + m_DisEvent++; + if( Button == mbRight ){ + CB3D->Checked = CB3D->Checked ? FALSE : TRUE; + } + else { + CB3D->Checked = TRUE; + m_MouseHold = TRUE; + int xc = m_pBitmap->Width / 2; + int yc = m_pBitmap->Height / 2; + m_MouseXC = xc; + m_MouseYC = yc; + int x = X - xc; + int y = Y - yc; + x = x * 48 / xc; + y = y * 48 / yc; + double s = -UDRot->Position * PI / 180.0; + double cosk = cos(s); + double sink = sin(s); + short xx = x * cosk + y * sink; + short yy = -x * sink + y * cosk; + UDX->Position = SHORT(xx); + UDY->Position = SHORT(yy); + Screen->Cursor = crSizeAll; + } + m_DisEvent--; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_MouseHold ){ + X = X - m_MouseXC; + Y = Y - m_MouseYC; + double s = -UDRot->Position * PI / 180.0; + double cosk = cos(s); + double sink = sin(s); + short x = X * cosk + Y * sink; + short y = -X * sink + Y * cosk; + short UX = UDX->Position; + short UY = UDY->Position; + m_DisEvent++; + UDX->Position = short(x); + UDY->Position = short(y); + m_DisEvent--; + if( (UX != UDX->Position) || (UY != UDY->Position) ){ + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_MouseHold ){ + m_MouseHold = 0; + PBox->Invalidate(); + } + Screen->Cursor = crDefault; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UD3D(int a) +{ + m_DisEvent++; + int x = UDX->Position; + int y = UDY->Position; + int xs = (x >= 0) ? 1 : -1; + int ys = (y >= 0) ? 1 : -1; + x = ABS(x); + y = ABS(y); + if( x == y ){ + int ad; + if( x < 4 ){ + ad = 1; + } + else if( x < 12 ){ + ad = 2; + } + else { + ad = 4; + } + ad *= a; + x += ad; + y += ad; + if( x < 2 ) x = 2; + if( y < 2 ) y = 2; + if( x > 48 ) x = 48; + if( y > 48 ) y = 48; + } + else { + if( x < y ) x = y; + x &= 0xfffffffc; + y = x; + } + x *= xs; y *= ys; + UDX->Position = SHORT(x); + UDY->Position = SHORT(y); + m_DisEvent--; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SB3DIClick(TObject *Sender) +{ + UD3D((Sender == SB3DI) ? 1 : -1); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMSGClick(TObject *Sender) +{ + Msg->Visible = SBMSG->Down; + if( SBMSG->Down ){ + Msg->Text = sys.m_Msg; + Msg->Modified = FALSE; + Msg->SelLength = 0; + Msg->SetFocus(); + } + else { + if( Msg->Modified ){ + sys.m_Msg = Msg->Text; + Msg->Modified = FALSE; + } + Memo->SetFocus(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MsgDblClick(TObject *Sender) +{ + AnsiString as; + AnsiString cs; + + m_DisEvent++; + if( Msg->Lines->Count ){ + int e = Msg->SelStart; + LPCSTR p = Msg->Text.c_str(); + int n = 0; + for( int i = 0; i < e; i++, p++ ){ + if( *p == '\n' ) n++; + } + if( n > Msg->Lines->Count ) n = Msg->Lines->Count - 1; + as = Msg->Lines->Strings[n]; + } + m_FText = as; + ::Yen2CrLf(cs, as); + Memo->Text = cs; + m_DisEvent--; + SBMSG->Down = FALSE; + SBMSGClick(NULL); + MultProc(); + UpdateFText(); + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoStartDrag(TObject *Sender, + TDragObject *&DragObject) +{ + if( !SBMSG->Down ){ + SBMSG->Down = TRUE; + SBMSGClick(NULL); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTextDlgBox::MsgDragDrop(TObject *Sender, TObject *Source, + int X, int Y) +{ + Msg->Lines->Add(m_FText); +} +//--------------------------------------------------------------------------- + +void __fastcall TTextDlgBox::MsgDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept) +{ + if( Source == Memo ) Accept = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_MemoX = X; + m_MemoY = Y; + m_MemoDown = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_MemoDown == 1 ){ + X -= m_MemoX; + Y -= m_MemoY; + if( (X*X)+(Y*Y) > 64 ){ + m_MemoDown = 2; + Memo->BeginDrag(TRUE); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_MemoDown = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FontBtnMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + BYTE cset; + UINT cp = ::GetACP(); + switch(cp){ + case 932: + cset = SHIFTJIS_CHARSET; + break; + case 949: + cset = HANGEUL_CHARSET; + break; + case 950: + cset = CHINESEBIG5_CHARSET; + break; + case 936: + cset = 134; // 簡略 + break; + default: + cset = DEFAULT_CHARSET; + break; + } + int charset = m_Item.m_pFont->Charset; + m_Item.m_pFont->Charset = BYTE((charset != ANSI_CHARSET) ? ANSI_CHARSET : cset); + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateFontBtnHint(void) +{ + AnsiString as = sys.m_MsgEng ? "Choose font" : "フォントの選択"; + if( m_Item.m_pFont ){ + as += " ["; + as += m_Item.m_pFont->Name; + TFontStyles ts = m_Item.m_pFont->Style; + DWORD d = FontStyle2Code(ts); + AddStyle(as, m_Item.m_pFont->Charset, d); + as += "]"; + SBB->Down = d & FSBOLD; + SBI->Down = d & FSITALIC; + if( m_pCodeView ) m_pCodeView->Execute(Handle, m_Item.m_pFont); + } + FontBtn->Hint = as; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SetSBF(int n) +{ + if( !sys.m_pFontList ) return; + + TSpeedButton* _tt[]={SBF1, SBF2, SBF3, SBF4, SBF5, NULL}; + + TSpeedButton* pButton = _tt[n]; + AnsiString es = sys.m_MsgEng ? "Registration = Right button" : "登録=右ボタン"; + AnsiString fs = sys.m_pFontList->Strings[n]; + int undef = fs.IsEmpty(); + if( undef ) fs = sys.m_MsgEng ? "Load registered font" : "登録フォントの読み出し"; + char bf[256]; + sprintf(bf, "%s (%s)", fs.c_str(), es.c_str()); + pButton->Hint = bf; + pButton->Font->Color = undef ? clGrayText : clBlack; +} +//--------------------------------------------------------------------------- +int __fastcall TTextDlgBox::GetSBFIndex(TObject *Sender) +{ + TSpeedButton* _tt[]={SBF1, SBF2, SBF3, SBF4, SBF5, NULL}; + + for( int i = 0; _tt[i]; i++ ){ + if( Sender == _tt[i] ) return i; + } + return 0; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBFClick(TObject *Sender) +{ + if( !sys.m_pFontList ) return; + int N = GetSBFIndex(Sender); + if( sys.m_pFontList->Strings[N].IsEmpty() ) return; + + FontDialog->Font->Assign(m_Item.m_pFont); + + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, ININAME); + TMemIniFile *pIniFile = new TMemIniFile(fname); + { + char bf[32]; + sprintf(bf, "Font.%u", N); + int ht = m_Item.m_pFont->Height; + LoadFontFromInifile(m_Item.m_pFont, bf, pIniFile); + int hs = m_Item.m_pFont->Height; + m_Item.m_pFont->Height = ht; + int oyw = (short)pIniFile->ReadInteger(bf, "OYW", UDOYW->Position); + if( hs ) oyw = ht * oyw / hs; + UDOYW->Position = (short)oyw; + } + delete pIniFile; + + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBFMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + FontDialog->Font->Assign(m_Item.m_pFont); + FontDialog->Font->Color = clBlack; + NoTopMost(); + int r = FontDialog->Execute(); + TopMost(); + if( r == TRUE ){ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, ININAME); + TMemIniFile *pIniFile = new TMemIniFile(fname); + { + int N = GetSBFIndex(Sender); + char bf[32]; + sprintf(bf, "Font.%u", N); + SaveFontToInifile(FontDialog->Font, bf, pIniFile); + pIniFile->WriteInteger(bf, "OYW", UDOYW->Position); + pIniFile->UpdateFile(); + if( sys.m_pFontList ){ + AnsiString as = FontDialog->Font->Name; + TFontStyles ts = FontDialog->Font->Style; + DWORD d = FontStyle2Code(ts); + AddStyle(as, FontDialog->Font->Charset, d); + sys.m_pFontList->Strings[N] = as; + SetSBF(N); + } + } + delete pIniFile; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBBClick(TObject *Sender) +{ + if( !m_Item.m_pFont ) return; + + TFontStyles ts = m_Item.m_pFont->Style; + DWORD d = FontStyle2Code(ts); + d ^= FSBOLD; + ts = Code2FontStyle(d); + m_Item.m_pFont->Style = ts; + + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBIClick(TObject *Sender) +{ + if( !m_Item.m_pFont ) return; + + TFontStyles ts = m_Item.m_pFont->Style; + DWORD d = FontStyle2Code(ts); + d ^= FSITALIC; + ts = Code2FontStyle(d); + m_Item.m_pFont->Style = ts; + + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); +} +//--------------------------------------------------------------------------- + +void __fastcall TTextDlgBox::SBFDMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_Item.m_pFont == NULL ) return; + + int ad = 0; + int h = m_Item.m_pFont->Height; + if( Sender == SBFD ){ + if( Button == mbLeft ){ + if( h < -2 ) ad = 1; + } + else if( Button == mbRight ){ + if( h < -6 ) ad = 4; + } + UpdateBitmap(); + } + else { + if( Button == mbLeft ){ + ad = -1; + } + else if( Button == mbRight ){ + ad = -4; + } + } + if( ad ){ + m_Item.m_pFont->Height = h + ad; + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLClick(TObject *Sender) +{ + if( !sys.m_CodeLeft ) sys.m_CodeLeft = Left - 120; + if( !sys.m_CodeTop ) sys.m_CodeTop = Top + 80; + if( !m_pCodeView ){ + m_pCodeView = new TCodeView(this); + } + m_pCodeView->Execute((HWND)Handle, m_Item.m_pFont); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnCodeViewClose(TMessage Message) +{ + if( Message.LParam == int(m_pCodeView) ){ + TCodeView *pView = m_pCodeView; + m_pCodeView = NULL; + delete pView; + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnCodeInsert(TMessage Message) +{ + switch(Message.WParam){ + case 0xfffffff0: + case 0xfffffff1: + case 0xfffffff2: + case 0xfffffff3: + case 0xfffffff4: + case 0xfffffff5: + case 0xfffffff6: + case 0xfffffff7: + if( m_Item.m_pFont != NULL ){ + TFont *pFont = m_Item.m_pFont; + int dfs = 0; + switch(Message.WParam & 7){ + case 0: + pFont->Name = "Webdings"; + pFont->Charset = 2; + break; + case 1: + pFont->Name = "Wingdings"; + pFont->Charset = 2; + break; + case 2: + pFont->Name = "Symbol"; + pFont->Charset = 2; + break; + case 3: + pFont->Name = "Arial"; + pFont->Charset = ANSI_CHARSET; + dfs = FSBOLD; + break; + case 4: + pFont->Name = sys.m_MsgEng ? "MS UI Gothic" : "MS Pゴシック"; + pFont->Charset = SHIFTJIS_CHARSET; + dfs = FSBOLD; + break; + case 5: + pFont->Name = "DotumChe"; + pFont->Charset = HANGEUL_CHARSET; + if( !sys.m_tFontFam[fmHL] && sys.m_tFontFam[fmJOHAB] ){ + pFont->Charset = JOHAB_CHARSET; + } + dfs = FSBOLD; + break; + case 6: + pFont->Name = "SimHei"; + pFont->Charset = 134; + dfs = FSBOLD; + break; + case 7: + pFont->Name = "PMingLiU"; + pFont->Charset = CHINESEBIG5_CHARSET; + dfs = FSBOLD; + break; + } + TFontStyles fs; + fs = Code2FontStyle(dfs); + pFont->Style = fs; + m_Item.UpdateFont(); + UpdateMemoFont(m_Item.m_pFont->Charset); + UpdateBitmap(); + } + break; + case 0xfffffffe: + ::SetWindowPos(m_pCodeView->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +// m_pCodeView->Visible = FALSE; + FontBtnClick(NULL); + ::SetWindowPos(m_pCodeView->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +// m_pCodeView->Visible = TRUE; + break; + case 0xffffffff: + Memo->Clear(); + UpdateBitmap(); + break; + default: + if( Message.WParam ){ + HWND hWnd; + Memo->SetFocus(); + hWnd = Memo->Handle; + char bf[16]; + if( Message.WParam & 0x00ff0000 ){ + wsprintf(bf, "\\$%04x", Message.WParam & 0x00ffff); + } + else if( Message.WParam & 0x00ff00 ){ + bf[0] = BYTE(Message.WParam >> 8); + bf[1] = BYTE(Message.WParam); + bf[2] = 0; + } + else if( (Message.WParam == 0x0d) || (Message.WParam == 0x0a) ){ + bf[0] = 0x0d; bf[1] = 0; + } + else if( (Message.WParam != '%') && ((Message.WParam >= 0x20) && (Message.WParam <= 0x7f)) ){ + bf[0] = (char)Message.WParam; bf[1] = 0; + } + else { + wsprintf(bf, "\\x%02x", Message.WParam); + } + for( LPCSTR p = bf; *p; p++ ){ + ::PostMessage(hWnd, WM_CHAR, *p & 0x00ff, 0); + } + } + break; + } +} +//--------------------------------------------------------------------------- + diff --git a/CItems/TEXTBOX/TextDlg.dfm b/CItems/TEXTBOX/TextDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..8c3f6788e2aac703e47cb2680015488fc19d2ae6 GIT binary patch literal 11799 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 literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/TextDlg.h b/CItems/TEXTBOX/TextDlg.h new file mode 100644 index 0000000..db34e85 --- /dev/null +++ b/CItems/TEXTBOX/TextDlg.h @@ -0,0 +1,192 @@ +//---------------------------------------------------------------------------- +#ifndef TextDlgH +#define TextDlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "ComLib.h" +#include +#include +#include "CodeVw.h" +//---------------------------------------------------------------------------- +class TTextDlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TButton *FontBtn; + TMemo *Memo; + TGroupBox *GBG; + TSpeedButton *SBM; + TSpeedButton *SBG1; + TSpeedButton *SBG2; + TSpeedButton *SBG3; + TSpeedButton *SBG4; + TPanel *PG1; + TPanel *PG2; + TPanel *PG3; + TPanel *PG4; + TSpeedButton *SBC; + TGroupBox *GBS; + TSpeedButton *SBS1; + TSpeedButton *SBS2; + TSpeedButton *SBS3; + TSpeedButton *SBS4; + TPanel *PB1; + TPanel *PB2; + TPanel *PB3; + TUpDown *UDL; + TGroupBox *GB3D; + TCheckBox *CB3D; + TUpDown *UDY; + TUpDown *UDX; + TSpeedButton *SB3DI; + TSpeedButton *SB3DD; + TLabel *L1; + TLabel *LY; + TLabel *LX; + TGroupBox *GBA; + TSpeedButton *SBA1; + TSpeedButton *SBA2; + TSpeedButton *SBA3; + TCheckBox *CBFixed; + TCheckBox *CBZero; + TComboBox *CBList; + TSpeedButton *SBLW; + TSpeedButton *SBLD; + TGroupBox *GBY; + TComboBox *CBY; + TLabel *L2; + TSpeedButton *SBYW; + TSpeedButton *SBYD; + TPaintBox *PBox; + TFontDialog *FontDialog; + TColorDialog *ColorDialog; + TTimer *Timer; + TSpeedButton *SBFD; + TSpeedButton *SBFI; + TSpeedButton *SBA4; + TMemo *Msg; + TSpeedButton *SBMSG; + TLabel *L33; + TComboBox *CBOYW; + TUpDown *UDOYW; + TLabel *L34; + TComboBox *CBRot; + TUpDown *UDRot; + TSpeedButton *SBF1; + TSpeedButton *SBF2; + TSpeedButton *SBF3; + TSpeedButton *SBF4; + TSpeedButton *SBF5; + TSpeedButton *SBB; + TSpeedButton *SBI; + TSpeedButton *SBL; + void __fastcall FormDestroy(TObject *Sender); + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall MemoChange(TObject *Sender); + void __fastcall TimerTimer(TObject *Sender); + void __fastcall SBG1Click(TObject *Sender); + void __fastcall PB1Click(TObject *Sender); + void __fastcall FormActivate(TObject *Sender); + void __fastcall FormDeactivate(TObject *Sender); + void __fastcall UDLClick(TObject *Sender, TUDBtnType Button); + void __fastcall FontBtnClick(TObject *Sender); + void __fastcall SBMClick(TObject *Sender); + void __fastcall SBCClick(TObject *Sender); + void __fastcall SBLWClick(TObject *Sender); + void __fastcall SBLDClick(TObject *Sender); + void __fastcall CBListChange(TObject *Sender); + void __fastcall SBYWClick(TObject *Sender); + void __fastcall SBYDClick(TObject *Sender); + void __fastcall CBYChange(TObject *Sender); + void __fastcall CBYKeyPress(TObject *Sender, char &Key); + void __fastcall CBYDropDown(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall SB3DIClick(TObject *Sender); + void __fastcall SBMSGClick(TObject *Sender); + void __fastcall MsgDblClick(TObject *Sender); + void __fastcall MemoStartDrag(TObject *Sender, + TDragObject *&DragObject); + void __fastcall MsgDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + void __fastcall MsgDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + void __fastcall MemoMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall MemoMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall MemoMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxMouseMove(TObject *Sender, TShiftState Shift, int X, + int Y); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall FontBtnMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBFClick(TObject *Sender); + void __fastcall SBFMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBBClick(TObject *Sender); + void __fastcall SBIClick(TObject *Sender); + void __fastcall SBFDMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBLClick(TObject *Sender); +private: + int m_DisEvent; + int m_DropProfile; + Graphics::TBitmap *m_pBitmap; + CItem m_Item; + int m_Change; + AnsiString m_FText; + int m_MouseXC, m_MouseYC, m_MouseHold; + int m_MemoX, m_MemoY, m_MemoDown; + + void __fastcall TopMost(void); + void __fastcall NoTopMost(void); + void __fastcall UpdateMemoFont(BYTE charset); + void __fastcall UpdateFText(void); + void __fastcall UpdateUI(void); + void __fastcall UpdateItem(CItem *pItem); + void __fastcall UpdateDialog(CItem *pItem); + void __fastcall UpdateBitmap(void); + void __fastcall UD3D(int a); + void __fastcall UpdateFontBtnHint(void); + int __fastcall GetSBFIndex(TObject *Sender); + void __fastcall SetSBF(int n); + + TCodeView *m_pCodeView; +public: +#if UseHWND + virtual __fastcall TTextDlgBox(HWND hWnd); +#else + virtual __fastcall TTextDlgBox(TComponent* AOwner); +#endif + + int __fastcall Execute(CItem *pItem); + +protected: + void __fastcall OnCodeViewClose(TMessage Message); + void __fastcall OnCodeInsert(TMessage Message); +BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(WM_FORMCLOSE, TMessage, OnCodeViewClose) + MESSAGE_HANDLER(WM_CODEINSERT, TMessage, OnCodeInsert) +END_MESSAGE_MAP(TForm) +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TTextDlgBox *TextDlgBox; +//---------------------------------------------------------------------------- +#endif + diff --git a/CItems/TEXTBOX/res/SB3DD.bmp b/CItems/TEXTBOX/res/SB3DD.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1c74fe6a4e3759ecbc319c7f83a2c8b0399e485a GIT binary patch literal 246 zcmZuqu?@f=3`?a-S$jtB=-ywL%F1cEs%x-GKphI$j$$WV_bYK8$O#;YP4;25!G8pY zW@{l}lwxL38a|%5vjTA00@XYkT1u!^MMbcqbP;7*sB0|JUtWIZ=X~y)`{#ch?+Zs& literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SB3DI.bmp b/CItems/TEXTBOX/res/SB3DI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c162a1f25dbdeb966d95d590e6c23d9c0f2a39f2 GIT binary patch literal 246 zcmZuqITC;{2*ep@Xnlt7u=g)i+VV7BWgB-PbRpRzY(lR4ld1=D0>{KAdj_7oA|wpm vOTe%a5l{vrw~RptV6g>yXGuDQbrw|`Gc_t1jr3*NU03IIzu)(~p5Ood=GRA6 literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBA1.bmp b/CItems/TEXTBOX/res/SBA1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..732f99bcf9e86f7e43f9af714e273bf8543a5f03 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT rF%W`;fJ8YI0ENK-mCp|2mNURrLWEEh1BIa4;Tlj)gUG`r5$ekUHr6~s literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBA2.bmp b/CItems/TEXTBOX/res/SBA2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..74ba1fb9e16fac13616763ee43e5417cb05fa89e GIT binary patch literal 246 zcmZupK@Na02&;+7u0F$ec=s=!+?A*8RbE+vjYMM^g|=kJ`5EnS&{5I}owE9e9|@EWcy>J$ literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBA3.bmp b/CItems/TEXTBOX/res/SBA3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..768947d6fb38562c449aa53f93401f15d9529856 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT rF%W`;fJ8YI0ENK-#xE~G2i+Oka8Z|Nq}X=EG>HJrH{VOff+@ literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBC.bmp b/CItems/TEXTBOX/res/SBC.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3f96f657fe67b267f46ef3d858641a56351a1e5f GIT binary patch literal 246 zcmZvUu?>JQ3a{)VMo3qH; zi_-Hi&}3Q401~UzTEQ%$KZ(c^SDL9QpTL6X&ayrfx*;ggMLXP{G`r3Ip61hD?6PhL>mAA literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBG2.bmp b/CItems/TEXTBOX/res/SBG2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a737fbe26a131cf64a1f657caa827f37fda036ac GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT YF%W`;fJ8YI%$#}m?(W_1-qD)|0BBrzR{#J2 literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBG3.bmp b/CItems/TEXTBOX/res/SBG3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3d99ffbcc88173b906f10b0b159c492867a812b6 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT YF%W`;fJ8YIydwa1699J!fSEV|05?N<%>V!Z literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBG4.bmp b/CItems/TEXTBOX/res/SBG4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8cb6c5ef32a327697f6977ebb3189a5f4a525fa5 GIT binary patch literal 246 zcmZvRu?>JQ3z5 zi{$=iXjrBcfFnw44P?>%OYck=Jf2|ZP$}jr5Ch5JtY$h6sy9+KjX<(;qNzC!H8XH$ LK=I+l0=x4CK^}Oh literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBS1.bmp b/CItems/TEXTBOX/res/SBS1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..593f6fd4c50d22a02ed2e7a2ded5100e242a396c GIT binary patch literal 246 zcmZvT%ME}q3`2v&0F1#L+*yaJw{B5&n@+_wyd)q#!maHnc9wOQz=q9mIyuPbL2>;P z5(`TSLm8#_j$5GqMb#$AvlWuQXe@FKUbA}xR>p{Nuic)j$86u8qE6Az?DT;Hhv`-^ literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBS2.bmp b/CItems/TEXTBOX/res/SBS2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3e9baf8d7069b41337877151e0a3baabaf62175d GIT binary patch literal 246 zcmZvSu?>JQ3Ye8pg_X#e|G-Y?Xo@xSkU}vu+f9) z{%0f#W9-0Lt=0+^H2 J=OAj``vYM7O9=n~ literal 0 HcmV?d00001 diff --git a/CItems/TEXTBOX/res/SBS4.bmp b/CItems/TEXTBOX/res/SBS4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b6e587b41e128ae5ed660dad081092ac90b5e919 GIT binary patch literal 246 zcmZvTu?@p83 +#pragma hdrstop + +#include "About.h" +#include "ComLib.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TAboutDlg *AboutDlg; +//--------------------------------------------------------------------- +#if UseHWND +__fastcall TAboutDlg::TAboutDlg(HWND hWnd) + : TForm(hWnd) +#else +__fastcall TAboutDlg::TAboutDlg(TComponent* AOwner) + : TForm(AOwner) +#endif +{ + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Caption = TTL; + } + else { + Caption = TTLJ; + } + LVer->Caption = VER" "AUT; + HICON hIcon = ::LoadIcon(HInstance, (LPCSTR)8000); + TIcon *pIcon = new TIcon; + pIcon->Handle = hIcon; + Image->Picture->Icon = pIcon; +} +//--------------------------------------------------------------------- + + \ No newline at end of file diff --git a/CItems/TextArt/About.dfm b/CItems/TextArt/About.dfm new file mode 100644 index 0000000000000000000000000000000000000000..aaa1fccf810c4dc040d3bc2e069eba74038e8dfa GIT binary patch literal 484 zcmX|;!BWC75Qam5wop{`;!&PJxp{^nf*|eC2uDrn0-1?PCk-QB;aPkjAHu6A?^@Dg z4w?M3-|YVT=eLeXr|UnF-uNE1o1Z0wNYHQBNGFmT-Qz3g_^6CwsmnK|GLcF73%OmX zVo;%e=U_Wg+GCWfvN|J2^}tI=G;o;L<+Esik*{yZGoo&sG(S_@k{+Mz8HLgEHb7M z@XB}w%EWx~z5oCK literal 0 HcmV?d00001 diff --git a/CItems/TextArt/About.h b/CItems/TextArt/About.h new file mode 100644 index 0000000..21c19b6 --- /dev/null +++ b/CItems/TextArt/About.h @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------------- +#ifndef OCRH +#define OCRH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ComLib.h" +//---------------------------------------------------------------------------- +class TAboutDlg : public TForm +{ +__published: + TButton *OKBtn; + TLabel *LVer; + TImage *Image; +private: +public: +#if UseHWND + virtual __fastcall TAboutDlg(HWND hWnd); +#else + virtual __fastcall TAboutDlg(TComponent* AOwner); +#endif +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TAboutDlg *AboutDlg; +//---------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/CItems/TextArt/CodeVw.cpp b/CItems/TextArt/CodeVw.cpp new file mode 100644 index 0000000..00ba601 --- /dev/null +++ b/CItems/TextArt/CodeVw.cpp @@ -0,0 +1,479 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "CodeVw.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +//TCodeView *CodeView; +//--------------------------------------------------------------------------- +__fastcall TCodeView::TCodeView(TComponent* Owner) + : TForm(Owner) +{ + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + +// Caption = "Character code list"; + SBClose->Caption = "Close"; + SBOut->Caption = "EUDC"; + SBEdit->Caption = "Edit"; + SBClear->Caption = "Clear"; + + SBFont->Hint = "Choose font"; + SBClear->Font->Size = 10; + SBOut->Font->Size = 10; + SBEdit->Font->Size = 10; + } + SBA->Hint = "Webdings"; + SBB->Hint = "Wingdings"; + SBC->Hint = "Symbol"; + SBUS->Hint = "English(ANSI)"; + SBJA->Hint = sys.m_MsgEng ? "Japanese(Shift-JIS)" : "日本語(シフトJIS)"; + SBHL->Hint = sys.m_MsgEng ? "Korean(Hangul)" : "韓国語(ハングル)"; + SBBY->Hint = sys.m_MsgEng ? "Chinese(GB2312)" : "中国語(簡体)"; + SBBV->Hint = sys.m_MsgEng ? "Chinese(BIG5)" : "中国語(繁体)"; + SBOut->Hint = "EUDC(End-user-defined-characters)"; + m_hWnd = NULL; + m_pFont = NULL; + m_Base = 0; + m_MouseDown = 0; + CheckFontCharset(); + SBJA->Enabled = sys.m_tFontFam[fmJA]; + SBHL->Enabled = sys.m_tFontFam[fmHL] || sys.m_tFontFam[fmJOHAB]; + SBBV->Enabled = sys.m_tFontFam[fmBV]; + SBBY->Enabled = sys.m_tFontFam[fmBY]; + + UpdateXW(); + int YW = GetSystemMetrics(SM_CYFULLSCREEN); + Left = sys.m_CodeLeft; + Top = sys.m_CodeTop; + if( Left < 0 ) Left = 0; + if( Top + Height > YW ) Top = YW - Height; + SBEdit->Enabled = sys.m_fEudc; + ShowHint = sys.m_WinNT; +} +//--------------------------------------------------------------------------- +WORD __fastcall TCodeView::GetEUDC(int y, int x) +{ +const WORD _tOut[]={0xf040, 0xf050, 0xf060, 0xf070, + 0xf080, 0xf090, 0xf0a0, 0xf0b0, + 0xf0c0, 0xf0d0, 0xf0e0, 0xf0f0, + 0xf140, 0xf150, 0xf160, 0xf170, +}; +const WORD _tOutHL[]={0xc9a0, 0xc9b0, 0xc9c0, 0xc9d0, + 0xc9e0, 0xc9f0, 0xfea0, 0xfeb0, + 0xfec0, 0xfed0, 0xfee0, 0xfef0, + 0, 0, 0, 0, +}; +const WORD _tOutBV[]={0xfa40, 0xfa50, 0xfa60, 0xfa70, + 0xfaa0, 0xfab0, 0xfac0, 0xfad0, + 0xfae0, 0xfaf0, 0xfb40, 0xfb50, + 0xfb60, 0xfb70, 0xfba0, 0xfbb0, +}; +const WORD _tOutBY[]={0xaaa0, 0xaab0, 0xaac0, 0xaad0, + 0xaae0, 0xaaf0, 0xaba0, 0xabb0, + 0xabc0, 0xabd0, 0xabe0, 0xabf0, + 0xaca0, 0xacb0, 0xacc0, 0xacd0, +}; + int c; + switch(m_pFont->Charset){ + case SHIFTJIS_CHARSET: + c = _tOut[y] + x; + if( (c==0xf07f)||(c==0xf0fd)||(c==0xf0fe)||(c==0xf0ff)||(c==0xf17f) ) c = 0; + break; + case HANGEUL_CHARSET: + c = _tOutHL[y]; + if( c ){ + c += x; + if( (c==0xc9a0)||(c==0xfea0)||(c==0xc9ff)||(c==0xfeff) ) c = 0; + } + break; + case CHINESEBIG5_CHARSET: // 台湾 + c = _tOutBV[y] + x; + if( (c==0xfa7f)||(c==0xfaa0)||(c==0xfaff)||(c==0xfb7f)||(c==0xfba0) ) c = 0; + break; + case 134: // 中国語簡略 + c = _tOutBY[y] + x; + if( (c==0xaaa0)||(c==0xaaff)||(c==0xaba0)||(c==0xabff)||(c==0xaca0) ) c = 0; + break; + default: + c = 0; + break; + } + return WORD(c); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::UpdateTitle(void) +{ + AnsiString as = sys.m_MsgEng ? "Character code list" : "文字コード表"; + as += " ["; + as += m_pFont->Name; + AddStyle(as, m_pFont->Charset, 0); + as += "]"; + Caption = as; +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::UpdateXW(void) +{ + if( SBOut->Down || m_Base ){ + m_XW = PBox->Width / 17; + m_XW--; + m_YW1 = m_YW = PBox->Height / 17; + m_XW1 = PBox->Width - (m_XW * 16); + SBEdit->Visible = SBOut->Down; + UDMB->Visible = m_Base ? TRUE : FALSE; + } + else { + m_XW1 = m_XW = PBox->Width / 17; + m_YW1 = m_YW = PBox->Height / 17; + SBEdit->Visible = FALSE; + UDMB->Visible = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SetPBoxFont(TCanvas *pCanvas) +{ + pCanvas->Font = m_pFont; + pCanvas->Font->Height = -(m_YW-5); + TFontStyles fs; + fs = Code2FontStyle(0); + pCanvas->Font->Style = fs; +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::DrawChar(TCanvas *pCanvas, int c, BOOL f) +{ + + int x = c % 16; + int y = c / 16; + char bf[32]; + LPSTR t = bf; + if( SBOut->Down ){ + c = GetEUDC(y, x); + } + else if( c ){ + c += m_Base; + } + if( !c ) return; + if( c & 0x00ff00 ) *t++ = BYTE(c>>8); + *t++ = BYTE(c); + *t = 0; + pCanvas->Font->Color = f ? clWhite : clBlack; + int fw = pCanvas->TextWidth(bf); + int fh = pCanvas->TextHeight(bf); + int xx = m_XW1 + x * m_XW + (m_XW-fw)/2; + int yy = m_YW1 + y * m_YW + (m_YW-fh)/2; + ::SetBkMode(pCanvas->Handle, TRANSPARENT); + pCanvas->TextOut(xx, yy, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::DrawCursor(TCanvas *pCanvas, int c, BOOL f) +{ + TRect rc; + + int x = c % 16; + int y = c / 16; + rc.Left = 1 + m_XW1 + x * m_XW; + rc.Top = 1 + m_YW1 + y * m_YW; + rc.Right = rc.Left + m_XW - 1; + rc.Bottom = rc.Top + m_YW - 1; + TColor col; + if( f ){ + col = clBlue; + } + else if( (!SBOut->Down && !m_Base) && m_tPfx[c] ){ + col = clGray; + } + else { + col = clWhite; + } + pCanvas->Pen->Color = col; + pCanvas->Brush->Color = col; + pCanvas->FillRect(rc); + DrawChar(pCanvas, c, f); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::PBoxPaint(TObject *Sender) +{ + if( !m_pFont ) return; + + CWaitCursor w; + Graphics::TBitmap *pBmp = new Graphics::TBitmap; + pBmp->Width = PBox->Width; + pBmp->Height = PBox->Height; + TCanvas *pCanvas = pBmp->Canvas; + BOOL eud = SBOut->Down; + if( !m_Base && !eud ) memset(m_tPfx, 0, sizeof(m_tPfx)); + SetPBoxFont(pCanvas); + if( !eud ) SetMBCP(m_pFont->Charset); + int x, y, xx, yy, fw, fh; + char bf[16]; + int c = 0; + for( y = 0; y < 16; y++ ){ + for( x = 0; x < 16; x++ ){ + if( eud ){ + DrawChar(pCanvas, c, FALSE); + } + else { + if( !m_Base && (_mbsbtype((const unsigned char *)&c, 0) == _MBC_LEAD) ){ + m_tPfx[c] = TRUE; + DrawCursor(pCanvas, c, FALSE); + } + else { + DrawChar(pCanvas, c, FALSE); + } + } + c++; + } + } + pCanvas->Font = Font; + pCanvas->Pen->Color = clBlack; + ::SetBkMode(pCanvas->Handle, TRANSPARENT); + for( y = 0; y < 16; y++ ){ + wsprintf(bf, "%X", y); + fw = pCanvas->TextWidth(bf); + fh = pCanvas->TextHeight(bf); + xx = m_XW1 + y*m_XW + (m_XW-fw)/2; + yy = (m_YW1-fh)/2; + pCanvas->TextOut(xx, yy, bf); + + if( eud ){ + c = GetEUDC(y, 1) & 0xfff0; + if( c ){ + wsprintf(bf, "%04x", c); + } + else { + bf[0] = 0; + } + } + else if( m_Base ){ + wsprintf(bf, "%04x", y*16 + m_Base); + } + else { + wsprintf(bf, "%02X", y*16); + } + fw = pCanvas->TextWidth(bf); + fh = pCanvas->TextHeight(bf); + xx = (m_XW1-fw)/2; + yy = m_YW1 + y*m_YW + (m_YW-fh)/2; + pCanvas->TextOut(xx, yy, bf); + + pCanvas->Pen->Width = y ? 1 : 2; + pCanvas->MoveTo(0, m_YW1 + y*m_YW); + pCanvas->LineTo(PBox->Width, m_YW1 + y*m_YW); + pCanvas->MoveTo(m_XW1 + y*m_XW, 0); + pCanvas->LineTo(m_XW1 + y*m_XW, PBox->Height); + } + PBox->Canvas->Draw(0, 0, pBmp); + delete pBmp; + m_pfxCount = 0; + for( x = 0; x < 256; x++ ){ + if( m_tPfx[x] ){ + m_tPfxIdx[m_pfxCount] = x; + m_pfxCount++; + } + } + if( m_pfxCount != UDMB->Max ) UDMB->Max = short(m_pfxCount - 1); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::ReqClose(void) +{ + sys.m_CodeLeft = Left; + sys.m_CodeTop = Top; + if( SBOut->Visible ) sys.m_CodeOut = SBOut->Down; + ::PostMessage(m_hWnd, WM_FORMCLOSE, 0, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::FormClose(TObject *Sender, TCloseAction &Action) +{ + if( Action == caHide ) ReqClose(); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::Execute(HWND hWnd, TFont *pFont) +{ + int f = Visible; + if( f && SBOut->Visible ) sys.m_CodeOut = SBOut->Down; + m_hWnd = hWnd; + m_pFont = pFont; + m_Base = 0; + SBOut->Visible = GetEUDC(0, 1) ? TRUE : FALSE; + SBOut->Down = SBOut->Visible && sys.m_CodeOut; + UpdateXW(); + UpdateTitle(); + Visible = TRUE; + if( f ) PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBCloseClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button == mbRight) && (m_Base || SBOut->Down) ){ + if( m_Base ){ + m_Base = 0; + } + else { + SBOut->Down = FALSE; + } + UpdateXW(); PBoxPaint(NULL); + return; + } + if( Button != mbLeft ) return; + + X -= m_XW1; + Y -= m_YW1; + if( X < 0 ) return; + if( Y < 0 ) return; + X /= m_XW; + Y /= m_YW; + if( X >= 16 ) X = 15; + if( Y >= 16 ) Y = 15; + int code = (Y * 16) + X; + m_MouseDown = code + 1; + TCanvas *pCanvas = PBox->Canvas; + SetPBoxFont(pCanvas); + DrawCursor(pCanvas, code, TRUE); + if( SBOut->Down ){ + code = GetEUDC(Y, X); + if( !code ) return; + } + else { + if( m_Base ){ + code |= m_Base | 0x00010000; +// PBoxPaint(NULL); + } + else if( m_tPfx[code] ){ + for( int i = 0; i < m_pfxCount; i++ ){ + if( m_tPfxIdx[i] == code ){ + UDMB->Position = short(i); + break; + } + } + m_Base = (code << 8); + UpdateXW(); PBoxPaint(NULL); + m_MouseDown = FALSE; + return; + } + } + ::PostMessage(m_hWnd, WM_CODEINSERT, code, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_MouseDown ) return; + + m_MouseDown--; + TCanvas *pCanvas = PBox->Canvas; + SetPBoxFont(pCanvas); + DrawCursor(pCanvas, m_MouseDown, FALSE); + m_MouseDown = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBClearClick(TObject *Sender) +{ + ::PostMessage(m_hWnd, WM_CODEINSERT, 0xffffffff, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBFontClick(TObject *Sender) +{ + ::PostMessage(m_hWnd, WM_CODEINSERT, 0xfffffffe, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBOutClick(TObject *Sender) +{ + m_Base = 0; + UpdateXW(); + PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBEditClick(TObject *Sender) +{ + LPCSTR pName = "EUDCEDIT.EXE"; + if( sys.m_Eudc.IsEmpty() ){ + char dir[MAX_PATH]; + char bf[512]; + if( ::GetSystemDirectory(dir, sizeof(dir)) ){ + wsprintf(bf, "%s\\%s", dir, pName); + if( IsFile(bf) ) sys.m_Eudc = bf; + } + if( sys.m_Eudc.IsEmpty() && ::GetWindowsDirectory(dir, sizeof(dir)) ){ + wsprintf(bf, "%s\\%s", dir, pName); + if( IsFile(bf) ) sys.m_Eudc = bf; + } + if( sys.m_Eudc.IsEmpty() ){ + wsprintf(bf, "%c:\\Program Files\\Accessories\\%s", dir[0], pName); + if( IsFile(bf) ) sys.m_Eudc = bf; + } + if( sys.m_Eudc.IsEmpty() ) sys.m_Eudc = pName; + } + if( ::WinExec(sys.m_Eudc.c_str(), SW_SHOWDEFAULT) > 31 ){ + ReqClose(); + } + else { + SBEdit->Enabled = FALSE; + sys.m_fEudc = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBAClick(TObject *Sender) +{ + DWORD dw = 0xfffffff2; + if( Sender == SBA ){ + dw = 0xfffffff0; + } + else if( Sender == SBB ){ + dw = 0xfffffff1; + } + ::PostMessage(m_hWnd, WM_CODEINSERT, dw, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::SBUSClick(TObject *Sender) +{ + DWORD sw; + if( Sender == SBJA ){ + sw = 0xfffffff4; + } + else if( Sender == SBHL ){ + sw = 0xfffffff5; + } + else if( Sender == SBBY ){ + sw = 0xfffffff6; + } + else if( Sender == SBBV ){ + sw = 0xfffffff7; + } + else { + sw = 0xfffffff3; + } + ::PostMessage(m_hWnd, WM_CODEINSERT, sw, DWORD(this)); +} +//--------------------------------------------------------------------------- +void __fastcall TCodeView::UDMBClick(TObject *Sender, TUDBtnType Button) +{ + m_Base = m_tPfxIdx[UDMB->Position] << 8; + UpdateXW(); PBoxPaint(NULL); +} +//--------------------------------------------------------------------------- +int CALLBACK EnumFontFamExProc(ENUMLOGFONT FAR* lpelf, NEWTEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam) +{ // TCodeView *pView = (TCodeView*)lParam; switch(lpelf->elfLogFont.lfCharSet){ case SHIFTJIS_CHARSET: sys.m_tFontFam[fmJA] = TRUE; break; case HANGEUL_CHARSET: sys.m_tFontFam[fmHL] = TRUE; break; case JOHAB_CHARSET: sys.m_tFontFam[fmJOHAB] = TRUE; break; case CHINESEBIG5_CHARSET: // 台湾 sys.m_tFontFam[fmBV] = TRUE; break; case 134: // 中国語簡略 sys.m_tFontFam[fmBY] = TRUE; break; default: break; } int r = FALSE; for( int i = 0; i < fmEND; i++ ){ if( !sys.m_tFontFam[i] ) r = TRUE; } return r; } //--------------------------------------------------------------------------- +void __fastcall TCodeView::CheckFontCharset(void) +{ + if( sys.m_fFontFam ) return; + + sys.m_fFontFam = TRUE; + memset(sys.m_tFontFam, 0, sizeof(sys.m_tFontFam)); + LOGFONT logfont; + memset(&logfont, 0, sizeof(logfont)); + logfont.lfCharSet = DEFAULT_CHARSET; + HDC hDC = ::CreateDC("DISPLAY", NULL, NULL, NULL); + ::EnumFontFamiliesEx(hDC, &logfont, (int (_stdcall *)())EnumFontFamExProc, LPARAM(this), 0); + ::DeleteDC(hDC); +} +//--------------------------------------------------------------------------- + diff --git a/CItems/TextArt/CodeVw.dfm b/CItems/TextArt/CodeVw.dfm new file mode 100644 index 0000000000000000000000000000000000000000..8d98b33c9e26b493c608244addec1217f973f41c GIT binary patch literal 2906 zcmd6pJ&)5!7{|xs#E#=|EES@oLR1LpTAJ9KC0Xsp5q1(GkPdG=n~WG{EZboh3IuUS zu?V4+5HvJ=02)L=ak~1dqq(ne(iKR2fMZ^~-WRfBIfO_vn(=u4&+~hpd3pY;gTVEc zTZ2w(2re&OwE+lvE0?XnWf2-+v{l>dRMyaDrvDD~fWdbd(}-;aXgjmzgi?hcEjj9jcaU*Jp{rR->^kWI4Z63~SquKR4|39nMX2SQ_!CV@fsl!MF>b)@G`%5^i zk|n}sD}s4&Rp0TZicPnV4O+cP2;1UKKep;u6E=-IG(y`@D*-Eyy`2|jIO|e%o;@DS zR)hgvi`LJbDB5d_nhWQ;qWJd+#kunF*xymk^@XJvD2fj!p%^R*g%R{Zibz$q z5&%m7Ay8EZuepjW=nu4Nli)Emt0CcqNm13Q+C)2AuG# zN`SfrYTxxThu%y6w0Ah zO!Z^aE+_cFqtc>jiI1`ifEn~-AyMfsuNRNYAs^s{y*+qFU&j;z+e?J`P*kpFV;Z$t og75QUA|$mQOR@M2!2wQlfK$9dP^~gd!q_TbYD*X_?j`^}1N^s+$N&HU literal 0 HcmV?d00001 diff --git a/CItems/TextArt/CodeVw.h b/CItems/TextArt/CodeVw.h new file mode 100644 index 0000000..7808ed5 --- /dev/null +++ b/CItems/TextArt/CodeVw.h @@ -0,0 +1,81 @@ +//--------------------------------------------------------------------------- +#ifndef CodeVwH +#define CodeVwH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +#include "ComLib.h" +#include +#define WM_FORMCLOSE (WM_USER+410) +#define WM_CODEINSERT (WM_USER+411) +//--------------------------------------------------------------------------- +class TCodeView : public TForm +{ +__published: // IDE 管理のコンポーネント + TPanel *Panel; + TPaintBox *PBox; + TSpeedButton *SBClose; + TSpeedButton *SBClear; + TSpeedButton *SBFont; + TSpeedButton *SBOut; + TSpeedButton *SBEdit; + TSpeedButton *SBA; + TSpeedButton *SBB; + TSpeedButton *SBC; + TSpeedButton *SBUS; + TSpeedButton *SBJA; + TSpeedButton *SBHL; + TSpeedButton *SBBY; + TSpeedButton *SBBV; + TUpDown *UDMB; + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall SBCloseClick(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBClearClick(TObject *Sender); + void __fastcall SBFontClick(TObject *Sender); + + void __fastcall SBOutClick(TObject *Sender); + void __fastcall SBEditClick(TObject *Sender); + void __fastcall SBAClick(TObject *Sender); + + void __fastcall SBUSClick(TObject *Sender); + void __fastcall UDMBClick(TObject *Sender, TUDBtnType Button); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); +private: // ユーザー宣言 + HWND m_hWnd; + TFont *m_pFont; + int m_XW1; + int m_YW1; + int m_XW; + int m_YW; + int m_MouseDown; + int m_Base; + BOOL m_tPfx[256]; + int m_pfxCount; + int m_tPfxIdx[256]; + void __fastcall UpdateTitle(void); + void __fastcall ReqClose(void); + void __fastcall UpdateXW(void); + void __fastcall SetPBoxFont(TCanvas *pCanvas); + void __fastcall DrawChar(TCanvas *pCanvas, int c, BOOL f); + void __fastcall DrawCursor(TCanvas *pCanvas, int c, BOOL f); + WORD __fastcall GetEUDC(int y, int x); + void __fastcall CheckFontCharset(void); + +public: // ユーザー宣言 + __fastcall TCodeView(TComponent* Owner); + + void __fastcall Execute(HWND hWnd, TFont *pFont); +}; +//--------------------------------------------------------------------------- +//extern PACKAGE TCodeView *CodeView; +//--------------------------------------------------------------------------- +#endif diff --git a/CItems/TextArt/Comlib.cpp b/CItems/TextArt/Comlib.cpp new file mode 100644 index 0000000..ec5f2eb --- /dev/null +++ b/CItems/TextArt/Comlib.cpp @@ -0,0 +1,3366 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "TextDlg.h" +SYS sys; +//--------------------------------------------------------------------------- +void __fastcall InitSys(HINSTANCE hinst) +{ + sys.m_hInstance = hinst; + sys.m_dwVersion = 0; + sys.m_WinNT = 0; + sys.m_CodePage = 0; + sys.m_MsgEng = 0; + sys.m_BitPixel = 0; + sys.m_fLoadImageMenu = 0; + sys.m_fPasteImage = 0; + sys.m_fGetMacKey = 0; + sys.m_fConvMac = 0; + sys.m_fMultProc = 0; + sys.m_fColorComp = 0; + sys.m_fAdjCol = 0; + sys.m_fClip = 0; + sys.m_DefStgSize = 0; + sys.m_pDefStg = NULL; + sys.m_pTextList = NULL; + sys.m_pStyleList = NULL; + sys.m_BgnDir[0] = 0; + sys.m_pFontList = NULL; + sys.m_pBitmapTemp = NULL; + sys.m_DefaultPage = 0; + sys.m_SBMListState = 0; + + sys.m_MaskC1.c = clYellow; + sys.m_MaskC2.c = clBlack; + + sys.m_CodeLeft = 0; + sys.m_CodeTop = 0; + sys.m_CodeOut = 0; + + sys.m_fFontFam = FALSE; + memset(sys.m_tFontFam, 0, sizeof(sys.m_tFontFam)); + + sys.m_dwVersion = ::GetVersion(); + sys.m_WinNT = (sys.m_dwVersion < 0x80000000) ? TRUE : FALSE; + sys.m_CodePage = ::GetACP(); // Get codepage + + HDC hdcScreen = ::CreateDC("DISPLAY", NULL, NULL, NULL); + sys.m_BitPixel = ::GetDeviceCaps(hdcScreen, BITSPIXEL); + ::DeleteDC(hdcScreen); + + char bf[512]; + ::GetModuleFileName(hinst, bf, sizeof(bf)); + ::SetDirName(sys.m_BgnDir, bf); + + if( sys.m_BitPixel < 24 ){ + sys.m_pBitmapTemp = new Graphics::TBitmap; + sys.m_pBitmapTemp->Width = 1; + sys.m_pBitmapTemp->Height = 1; + } + + sys.m_fEudc = TRUE; + sys.m_Eudc = ""; +} +// +//--------------------------------------------------------------------------- +//void mcmFunc(DWORD index, FARPROC pFunc) +// +//MMSSTV calls this function at the first time, if the function was exported. +//You can use following functions which are in the MMSSTV. +// +// index : Index of the function. +// pFunc : Address of the function. +// +//indexes and functions are as follows. +// +// 0 : HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 1 : HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +// pName is a pathname of the image (BMP, JPG, WMF) +// +// 2 : HBITMAP (__cdecl *mmLoadHistImage)(void); +// +// 3 : int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +// pName is a filename of the image (BMP, JPG) +// pFolder is a folder name (if it is NULL, MMSSTV uses a default) +// +// 4 : int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +// pName is a pathname of the image (BMP, JPG) +// +// 5 : HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +// sw - 0 : Invoke image-clipper (xw and yw are the size of the bitmap) +// sw - 1 : no image-clipper (xw and yw will be ignored) +// +// 6 : int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +// Invoke macro dialog box and can choose keyword +// +// 7 : int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +// Convert macro keyword (pSrc) to the text (pDest) +// +// 8 : HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +// Create 24bit DIB +// +// 9 : void (__cdecl *mmMultProc)(void); +// 10 : void (__cdecl *mmMultProcA)(void); +// Do decoding and encoding with the DSP in MMSSTV +// +// 11 : int (__cdecl *mmColorComp)(LPDWORD pCol); +// Invoke color components dialog and can choose a color component +// +extern "C" __declspec(dllexport) +void mcmFunc(DWORD index, FARPROC pFunc) +{ + switch(index){ + case 0: + sys.m_fLoadImageMenu = (mmLoadImageMenu)pFunc; + break; + case 5: + sys.m_fPasteImage = (mmPasteImage)pFunc; + break; + case 6: + sys.m_fGetMacKey = (mmGetMacKey)pFunc; + break; + case 7: + sys.m_fConvMac = (mmConvMac)pFunc; + break; + case 9: + sys.m_fMultProc = (mmMultProc)pFunc; + break; + case 11: + sys.m_fColorComp = (mmColorComp)pFunc; + break; + case 14: + sys.m_fAdjCol = (mmAdjCol)pFunc; + break; + case 15: + sys.m_fClip = (mmClip)pFunc; + break; + default: + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall MultProc(void) +{ + if( sys.m_fMultProc ) sys.m_fMultProc(); +} +//--------------------------------------------------------------------------- +char __fastcall LastC(LPCSTR p) +{ + char c = 0; + + if( *p ){ + c = *(p + strlen(p) - 1); + } + return c; +} +//--------------------------------------------------------------------------- +void __fastcall SetCurDir(LPSTR t, int size) +{ + if( !::GetCurrentDirectory(size-1, t) ){ + *t = 0; + } + else { + if( LastC(t) != '\\' ){ + strcat(t, "\\"); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall SetDirName(LPSTR t, LPCSTR pName) +{ + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + strncpy(t, Dir.c_str(), 128); +} +//--------------------------------------------------------------------------- +int __fastcall IsFile(LPCSTR pName) +{ + WIN32_FIND_DATA fdata; + HANDLE hFind = ::FindFirstFile(pName, &fdata); + if( hFind != INVALID_HANDLE_VALUE ){ + FindClose(hFind); + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall SetMBCP(BYTE charset) +{ + UINT cp; + switch(charset){ + case SHIFTJIS_CHARSET: + cp = 932; + break; + case HANGEUL_CHARSET: + cp = 949; + break; + case JOHAB_CHARSET: + cp = 1361; + break; + case CHINESEBIG5_CHARSET: // + cp = 950; + break; + case 134: // 簡略 + cp = 936; + break; + case ANSI_CHARSET: + case SYMBOL_CHARSET: + cp = 1252; + break; + default: + cp = _MB_CP_ANSI; + break; + } + if( cp != _MB_CP_ANSI ){ + CPINFO info; + if( GetCPInfo(cp, &info) != TRUE ){ + cp = _MB_CP_ANSI; + } + } + _setmbcp(cp); +} +///---------------------------------------------------------------- +void __fastcall Yen2CrLf(AnsiString &ws, AnsiString cs) +{ + _setmbcp(_MB_CP_ANSI); + ws = ""; + LPCSTR p; + int f; + int dlm = 0; + + p = cs.c_str(); + if( *p == 0x22 ){ + p++; + dlm++; + } + for( f = 0; *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == '\\' ){ + switch(*(p+1)){ + case 'r': + ws += "\r"; + p++; + break; + case 'n': + ws += "\n"; + p++; + break; + case 't': + ws += "\t"; + p++; + break; + case '\\': + ws += "\\"; + p++; + break; + default: + p++; + ws += *p; + break; + } + } + else if( !dlm || (*p!=0x22) || *(p+1) ){ + ws += *p; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall CrLf2Yen(AnsiString &ws, AnsiString cs) +{ + _setmbcp(_MB_CP_ANSI); + ws = "\x22"; + LPCSTR p; + int f = 0; + + for( p = cs.c_str(); *p; p++ ){ + if( f ){ + ws += *p; + f = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == 0x0d ){ + ws += "\\r"; + } + else if( *p == 0x0a ){ + ws += "\\n"; + } + else if( *p == '\t' ){ + ws += "\\t"; + } + else if( *p == '\\' ){ + ws += "\\\\"; + } + else { + ws += *p; + } + } + ws += "\x22"; +} +///---------------------------------------------------------------- +/// 文字列を数値に変換する +/// +int htoin(LPCSTR sp, int n) +{ + int d = 0; + + for( ; *sp && n; sp++, n-- ){ + d = d * 16; + d += *sp & 0x0f; + if( *sp >= 'A' ) d += 9; + } + return d; + +} +//--------------------------------------------------------------------------- +int __fastcall GetActiveIndex(TPageControl *pp) +{ + int i; + for( i = 0; i < pp->PageCount; i++ ){ + if( pp->ActivePage == pp->Pages[i] ) return i; + } + return 0; +} +//--------------------------------------------------------------------------- +void __fastcall LoadStringsFromIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TMemIniFile *pIniFile = new TMemIniFile(fname); + int count = pIniFile->ReadInteger(pSect, "Count", 0); + int i; + AnsiString as; + for( i = 0; i < count; i++ ){ + char bf[32]; + sprintf(bf, "Text%u", i); + as = pIniFile->ReadString(pSect, bf, ""); + if( !as.IsEmpty() ){ + pList->Add(as.c_str()); + } + } + if( msg ){ + as = pIniFile->ReadString(pSect, "MSG", ""); + ::Yen2CrLf(sys.m_Msg, as); + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall SaveStringsToIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TMemIniFile *pIniFile = new TMemIniFile(fname); + pIniFile->WriteInteger(pSect, "Count", pList->Count); + int i; + for( i = 0; i < pList->Count; i++ ){ + char bf[32]; + sprintf(bf, "Text%u", i); + pIniFile->WriteString(pSect, bf, pList->Strings[i]); + } + if( msg ){ + AnsiString as; + ::CrLf2Yen(as, sys.m_Msg); + pIniFile->WriteString(pSect, "MSG", as); + } + pIniFile->UpdateFile(); + delete pIniFile; +} +//--------------------------------------------------------------------- +void __fastcall InitCustomColor(TColorDialog *tp) +{ + tp->CustomColors->Text = ""; +} +//--------------------------------------------------------------------- +void __fastcall AddCustomColor(TColorDialog *tp, TColor col) +{ + char bf[256]; + + sprintf(bf, "Color%c=%06lX", tp->CustomColors->Count + 'A', DWORD(col) & 0x00ffffff); + tp->CustomColors->Add(bf); +} +//--------------------------------------------------------------------- +LPSTR __fastcall ZeroConv(LPCSTR p, BYTE charset) +{ + LPSTR bp = new char[(strlen(p)*2) + 1]; + LPSTR t = bp; + int f = 0; + for( ; *p; p++ ){ + if( f ){ + *t++ = *p; + f = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + *t++ = *p; + f = 1; + } + else if( *p == '0' ){ + switch(charset){ + case SHIFTJIS_CHARSET: + *t++ = 0x83; + *t++ = 0xd3; + break; + case HANGEUL_CHARSET: + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case CHINESEBIG5_CHARSET: // 台湾 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 134: // 中国語簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + switch(sys.m_CodePage){ + case 949: // HANGEUL + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case 950: // CHINESEBIG5 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 936: // CHINESE 簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + *t++ = 'リ'; + break; + } + break; + } + } + else { + *t++ = *p; + } + } + *t = 0; + return bp; +} +#if 1 +//--------------------------------------------------------------------------- +void __fastcall ExecPB(LPCSTR pName) +{ + char bf[512]; + + MultProc(); + strcpy(bf, "mspaint.exe"); + if( pName != NULL ){ + wsprintf(&bf[strlen(bf)], " \x22%s\x22", pName); + } + if( ::WinExec(bf, SW_SHOWDEFAULT) <= 31 ){ + strcpy(bf, "PBRUSH.EXE"); + if( pName != NULL ){ + wsprintf(&bf[strlen(bf)], " \x22%s\x22", pName); + } + ::WinExec(bf, SW_SHOWDEFAULT); + } +} +//--------------------------------------------------------------------------- +HWND __fastcall IsPB(void) +{ + return FindWindow("MSPaintApp", NULL); +} +#endif +//--------------------------------------------------------------------------- +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = xw; + pBitmap->Height = yw; + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall FillBitmap(Graphics::TBitmap *pDest, UCOL ucol) +{ + TRect rc; + rc.Left = rc.Top = 0; + rc.Right = pDest->Width; + rc.Bottom = pDest->Height; + pDest->Canvas->Brush->Color = ucol.c; + pDest->Canvas->FillRect(rc); +} +//--------------------------------------------------------------------------- +BOOL __fastcall IsSameBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc) +{ + int xw = pSrc->Width; + int yw = pSrc->Height; + if( pDest->Width != xw ) return FALSE; + if( pDest->Height != yw ) return FALSE; + int x, y; + for( y = 0; y < yw; y++ ){ + LPBYTE p = (LPBYTE)pSrc->ScanLine[y]; + LPBYTE t = (LPBYTE)pDest->ScanLine[y]; + for( x = 0; x < xw; x++ ){ + if( *p++ != *t++ ) return FALSE; + if( *p++ != *t++ ) return FALSE; + if( *p++ != *t++ ) return FALSE; + } + } + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall FillBitmap(Graphics::TBitmap *pDest, TColor col) +{ + UCOL c; + c.c = col; + FillBitmap(pDest, c); +} +//--------------------------------------------------------------------------- +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc) +{ + pDest->Width = pSrc->Width; + pDest->Height = pSrc->Height; + pDest->Palette = NULL; + pDest->Canvas->Draw(0, 0, pSrc); +} +//--------------------------------------------------------------------------- +void __fastcall CopyBitmap(Graphics::TBitmap *pBitmap) +{ + int DataHandle; + HPALETTE APalette; + unsigned short MyFormat; + pBitmap->SaveToClipboardFormat(MyFormat, DataHandle, APalette); + Clipboard()->SetAsHandle(MyFormat,DataHandle); +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspect(int &sx, int &sy, int bx, int by) +{ + double ass = double(sx) / double(sy); + double asb = double(bx) / double(by); + if( asb < ass ){ // ソースの方が横長 + sx = (double(sy) * asb) + 0.5; + } + else { + sy = (double(sx) / asb) + 0.5; + } +} +//--------------------------------------------------------------------------- +//伸縮コピー +void __fastcall StretchCopy(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc, int mode) +{ + TRect tc; + tc.Left = tc.Top = 0; + tc.Right = pDest->Width; tc.Bottom = pDest->Height; + int Sop = ::SetStretchBltMode(pDest->Canvas->Handle, mode); + pDest->Canvas->StretchDraw(tc, pSrc); + ::SetStretchBltMode(pDest->Canvas->Handle, Sop); +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspectCopy(Graphics::TBitmap *pDest, int xm, int ym, Graphics::TBitmap *pSrc, int mode) +{ + if( (xm < pSrc->Width) || (ym < pSrc->Height) ){ + KeepAspect(xm, ym, pSrc->Width, pSrc->Height); + pDest->Width = xm; + pDest->Height = ym; + pDest->Palette = NULL; + TRect tc; + tc.Left = tc.Top = 0; + tc.Right = xm; tc.Bottom = ym; + int Sop = ::SetStretchBltMode(pDest->Canvas->Handle, mode); + pDest->Canvas->StretchDraw(tc, pSrc); + ::SetStretchBltMode(pDest->Canvas->Handle, Sop); + } + else { + CopyBitmap(pDest, pSrc); + } +} +#if 0 +//--------------------------------------------------------------------------- +//サイズ変更 +Graphics::TBitmap* __fastcall ChangeSize(Graphics::TBitmap *pSrc, int xw, int yw, int dir) +{ + int XW = xw; + int YW = yw; + if( dir ){ // 縮小 + XW /= 4; YW /= 4; + } + Graphics::TBitmap *pDest = CreateBitmap(XW, YW); + StretchCopy(pDest, pSrc, HALFTONE); + delete pSrc; + return pDest; +} +#endif +//--------------------------------------------------------------------------- +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap) +{ + if( pBitmap == NULL ) return; + + if( (pBitmap->Width != pBox->Width)||(pBitmap->Height != pBox->Height) ){ + TRect rc; + rc.Left = 0; rc.Right = pBox->Width; + rc.Top = 0, rc.Bottom = pBox->Height; + int Sop = ::SetStretchBltMode(pBox->Canvas->Handle, HALFTONE); + pBox->Canvas->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(pBox->Canvas->Handle, Sop); + } + else { + pBox->Canvas->Draw(0, 0, pBitmap); + } +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetUniqueColor(UCOL ucol) +{ + ucol.d = ucol.d & 0x00f0f0f0; + UCOL c = ucol; + DWORD r; + + while(!c.d || (c.d == ucol.d)){ +#if (RANDMAX >= 0x00ffffff) + c.d = rand() & 0x00f0f0f0; +#else + r = rand(); r = r << 4; + c.b.r = (BYTE)(r & 0x00f0); r = r >> 4; + c.b.g = (BYTE)(r & 0x00f0); r = r >> 4; + c.b.b = (BYTE)(r & 0x00f0); +#endif + } + if( sys.m_pBitmapTemp ){ + sys.m_pBitmapTemp->Canvas->Pixels[0][0] = c.c; + c.c = sys.m_pBitmapTemp->Canvas->Pixels[0][0]; + } + return c; +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetGrade2(UCOL s[2], int x, int xw) +{ + if( x < 0 ) x = 0; + if( x > xw ) x = xw; + UCOL r; + int c = s[0].b.b + ((int(s[1].b.b) - int(s[0].b.b)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.b = BYTE(c); + c = s[0].b.g + ((int(s[1].b.g) - int(s[0].b.g)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.g = BYTE(c); + c = s[0].b.r + ((int(s[1].b.r) - int(s[0].b.r)) * x / xw); + if( c < 0 ) c = 0; + if( c > 255 ) c = 255; + r.b.r = BYTE(c); + return r; +} +//--------------------------------------------------------------------------- +UCOL __fastcall GetGrade4(UCOL s[4], int x, int xw) +{ + int xw3 = xw/3; + if( x < xw3 ){ + return GetGrade2(s, x, xw3); + } + x -= xw3; + if( x < xw3 ){ + return GetGrade2(&s[1], x, xw3); + } + x -= xw3; + return GetGrade2(&s[2], x, xw3); +} +//--------------------------------------------------------------------------- +void __fastcall WriteString(TStream *ps, AnsiString &as) +{ + int len = as.Length(); + ps->Write(&len, sizeof(len)); + if( len ){ + ps->Write(as.c_str(), len); + } +} +void __fastcall ReadString(TStream *ps, AnsiString &as) +{ + as = ""; + int len; + ps->Read(&len, sizeof(len)); + if( len ){ + LPSTR p = new char[len+1]; + ps->Read(p, len); + p[len] = 0; + as = p; + delete p; + } +} +//--------------------------------------------------------------------------- +int FontStyle2Code(TFontStyles style) +{ + int code = 0; + + TFontStyles fa; + TFontStyles fb; + + fa << fsBold; + fb << fsBold; + fa *= style; + if( fa == fb ) code |= FSBOLD; + + fa >> fsBold; + fb >> fsBold; + fa << fsItalic; + fb << fsItalic; + fa *= style; + if( fa == fb ) code |= FSITALIC; + + fa >> fsItalic; + fb >> fsItalic; + fa << fsUnderline; + fb << fsUnderline; + fa *= style; + if( fa == fb ) code |= FSUNDERLINE; + + fa >> fsUnderline; + fb >> fsUnderline; + fa << fsStrikeOut; + fb << fsStrikeOut; + fa *= style; + if( fa == fb ) code |= FSSTRIKEOUT; + + return code; +} + +TFontStyles Code2FontStyle(int code) +{ + TFontStyles fs; + + if( code & FSBOLD ) fs << fsBold; + if( code & FSITALIC ) fs << fsItalic; + if( code & FSUNDERLINE ) fs << fsUnderline; + if( code & FSSTRIKEOUT ) fs << fsStrikeOut; + return fs; +} +//--------------------------------------------------------------------------- +void __fastcall WriteFont(TStream *ps, TFont *pFont) +{ + int d; + if( pFont != NULL ){ + d = 1; + ps->Write(&d, sizeof(d)); + WriteString(ps, pFont->Name); + d = pFont->Charset; + ps->Write(&d, sizeof(d)); + d = pFont->Height; + ps->Write(&d, sizeof(d)); + TFontStyles ts = pFont->Style; + d = FontStyle2Code(ts); + ps->Write(&d, sizeof(d)); + } + else { + d = 0; + ps->Write(&d, sizeof(d)); + } +} +//--------------------------------------------------------------------------- +TFont* __fastcall ReadFont(TStream *ps) +{ + TFont *pFont = NULL; + int d; + ps->Read(&d, sizeof(d)); + if( d == 1 ){ + pFont = new TFont; + AnsiString as; + ReadString(ps, as); + pFont->Name = as; + ps->Read(&d, sizeof(d)); + pFont->Charset = BYTE(d); + ps->Read(&d, sizeof(d)); + pFont->Height = d; + ps->Read(&d, sizeof(d)); + TFontStyles ts = Code2FontStyle(d); + pFont->Style = ts; + } + return pFont; +} +//--------------------------------------------------------------------------- +//CBitStreamクラス +///--------------------------------------------------------- +const BYTE _btt[]={0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; +///--------------------------------------------------------- +DWORD CBitStream::GetData(int n) +{ + const BYTE *pData; + DWORD d = 0; + for( int i = 0; i < n; i++, m_BitCount++ ){ + d = d << 1; + pData = &m_pBase[m_BitCount / 8]; + if( *pData & _btt[m_BitCount % 8] ) d |= 1; + } + return d; +} +///--------------------------------------------------------- +void CBitStream::GetText(LPSTR p, int n) +{ + for( int i = 0; i < n; i++, p++ ){ + *p = (char)GetData(8); + } + *p = 0; +} +///--------------------------------------------------------- +void CBitStream::PutData(DWORD d, int n) +{ + BYTE *pData; + DWORD mask = 1; + int i; + for( i = 1; i < n; i++ ) mask = mask << 1; + for( i = 0; i < n; i++, m_BitCount++, mask = mask >> 1 ){ + pData = &m_pBase[m_BitCount / 8]; + if( !(m_BitCount % 8) ) *pData = 0; + if( d & mask ) *pData |= _btt[m_BitCount % 8]; + } +} +///--------------------------------------------------------- +void CBitStream::PutText(LPCSTR p, int n) +{ + int i; + for( i = 0; (i < n) && *p; i++, p++ ){ + PutData(*p, 8); + } + for( ; i < n; i++ ) PutData(0, 8); +} +///--------------------------------------------------------- +BYTE CBitStream::GetSum(void) +{ + int n = (m_BitCount + 7) / 8; + BYTE sum = 0; + BYTE *pData = m_pBase; + for( int i = 0; i < n; i++, pData++ ){ + sum += *pData; + } + return sum; +} +///--------------------------------------------------------- +/// pBase : バッファのポインタ +/// n : チェックサムコードの位置(1 〜 ) +BOOL CheckSum(const void *pBase, int n) +{ + const BYTE *p = (const BYTE *)pBase; + n--; + BYTE sum = 0; + for( int i = 0; i < n; i++, p++ ){ + sum += *p; + } + return sum == *p; +} +///------------------------------------------------------ +/// +///CWaitCursor クラス +/// +CWaitCursor::CWaitCursor() +{ + sv = Screen->Cursor; + Screen->Cursor = crHourGlass; +} + +CWaitCursor::CWaitCursor(BOOL sw) +{ + sv = Screen->Cursor; + if( sw ){ + Screen->Cursor = crHourGlass; + } +} + +CWaitCursor::~CWaitCursor() +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Delete(void) +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Wait(void) +{ + Screen->Cursor = crHourGlass; +} +// +// +//--------------------------------------------------------------------------- +// CItem class +// +__fastcall CItem::CItem(void) +{ + m_pMemStream = NULL; + + m_Ver = 5; + m_Align = 0; + m_Grade = 0; + m_Shadow = 2; + m_Line = 1; + m_Zero = 0; + m_3d = 0x00000404; + m_Text = "de %m"; + m_pFont = NULL; + m_ColG[0].d = 255; + m_ColG[1].d = 16711935; + m_ColG[2].d = 65535; + m_ColG[3].d = 16776960; + m_ColB[0].c = clBlack; + m_ColB[1].c = clWhite; + m_ColB[2].c = clBlue; + m_ColB[3].c = clRed; + + m_ColF[0].d = RGB(255,0,0); + m_ColF[1].d = RGB(255,255,0); + m_ColF[2].d = RGB(0,255,0); + m_ColF[3].d = RGB(0,255,255); + m_ColF[4].d = RGB(0,0,255); + m_ColF[5].d = RGB(255,0,255); + + m_OrgXW = -1; + m_OrgYW = -1; + m_BmpXW = -1; + m_BmpYW = -1; + m_Draft = 0; + m_Pos = 0; + m_Ex = 0; + m_OYW = 0; + m_OYWS = 0; + m_Rot = 0; + m_Filter = 0; + + // Init as default + m_sperspect.ver = 3; + m_sperspect.flag = 1; + m_sperspect.ax = 3.0; m_sperspect.ay = 3.0; + m_sperspect.px = m_sperspect.py = m_sperspect.pz = 0.0; + m_sperspect.rz = -180; m_sperspect.rx = m_sperspect.ry = 0; + m_sperspect.v = 10; m_sperspect.s = 1.5; + m_sperspect.r = 0.0; + m_SC = 0; + + m_pMaskBmp = NULL; +} +//--------------------------------------------------------------------------- +__fastcall CItem::~CItem() +{ + if( m_pFont != NULL ) delete m_pFont; + if( m_pMemStream != NULL ) delete m_pMemStream; + if( m_pMaskBmp != NULL ) delete m_pMaskBmp; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::LoadDefault(void) +{ + if( sys.m_pDefStg != NULL ) return; + + CItem *pItem = new CItem; + pItem->LoadFromInifile("Default", ININAME, FALSE); + LPCBYTE p = pItem->CreateStorage(&sys.m_DefStgSize); + sys.m_pDefStg = new BYTE[sys.m_DefStgSize]; + memcpy(sys.m_pDefStg, p, sys.m_DefStgSize); + pItem->DeleteStorage(p); + delete pItem; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::UpdateDefault(void) +{ + if( sys.m_pDefStg != NULL ){ + delete sys.m_pDefStg; + sys.m_pDefStg = NULL; + } + LPCBYTE p = CreateStorage(&sys.m_DefStgSize); + sys.m_pDefStg = new BYTE[sys.m_DefStgSize]; + memcpy(sys.m_pDefStg, p, sys.m_DefStgSize); + DeleteStorage(p); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Create(LPCBYTE ps, DWORD size) +{ + if( (ps == NULL) || !size ){ + if( sys.m_pDefStg == NULL ) LoadDefault(); + ps = sys.m_pDefStg; + size = sys.m_DefStgSize; + } + + m_OYWS = 0; + TMemoryStream *pMem = new TMemoryStream; + pMem->Clear(); + pMem->Write(ps, size); + pMem->Seek(soFromBeginning, 0); + int ver; + pMem->Read(&ver, sizeof(ver)); + if( ver <= m_Ver ){ + pMem->Read(&m_BmpXW, sizeof(m_BmpXW)); + pMem->Read(&m_BmpYW, sizeof(m_BmpYW)); + if( ver <= 1 ){ + m_BmpXW = m_BmpYW = -1; + } + pMem->Read(&m_OrgXW, sizeof(m_OrgXW)); + pMem->Read(&m_OrgYW, sizeof(m_OrgYW)); + pMem->Read(&m_Align, sizeof(m_Align)); + pMem->Read(&m_Grade, sizeof(m_Grade)); + pMem->Read(&m_Shadow, sizeof(m_Shadow)); + pMem->Read(&m_Line, sizeof(m_Line)); + pMem->Read(&m_Zero, sizeof(m_Zero)); + pMem->Read(&m_3d, sizeof(m_3d)); + pMem->Read(&m_ColG, sizeof(m_ColG)); + pMem->Read(&m_ColB, sizeof(m_ColB)); + if( ver >= 5 ){ + pMem->Read(&m_ColF, sizeof(m_ColF)); + } + pMem->Read(&m_OYW, sizeof(m_OYW)); + pMem->Read(&m_Rot, sizeof(m_Rot)); + if( ver >= 4 ){ + pMem->Read(&m_Filter, sizeof(m_Filter)); + } + ReadString(pMem, m_Text); + if( m_pFont != NULL ) delete m_pFont; + m_pFont = ReadFont(pMem); + UpdateFont(); + pMem->Read(&m_SC, sizeof(m_SC)); + pMem->Read(&m_sperspect, sizeof(m_sperspect)); + if( m_pMaskBmp ){ + delete m_pMaskBmp; + m_pMaskBmp = NULL; + } + if( ver >= 3 ){ + int fBmp; + pMem->Read(&fBmp, sizeof(fBmp)); + if( fBmp ){ + m_pMaskBmp = new Graphics::TBitmap; + m_pMaskBmp->LoadFromStream(pMem); + } + } + } + delete pMem; +} +//--------------------------------------------------------------------------- +LPCBYTE __fastcall CItem::CreateStorage(LPDWORD pSize) +{ + ASSERT(pSize); + + if( m_pMemStream != NULL ) delete m_pMemStream; + m_pMemStream = new TMemoryStream; + m_pMemStream->Clear(); + m_Ver = 5; + m_pMemStream->Write(&m_Ver, sizeof(m_Ver)); + m_pMemStream->Write(&m_BmpXW, sizeof(m_BmpXW)); + m_pMemStream->Write(&m_BmpYW, sizeof(m_BmpYW)); + m_pMemStream->Write(&m_OrgXW, sizeof(m_OrgXW)); + m_pMemStream->Write(&m_OrgYW, sizeof(m_OrgYW)); + m_pMemStream->Write(&m_Align, sizeof(m_Align)); + m_pMemStream->Write(&m_Grade, sizeof(m_Grade)); + m_pMemStream->Write(&m_Shadow, sizeof(m_Shadow)); + m_pMemStream->Write(&m_Line, sizeof(m_Line)); + m_pMemStream->Write(&m_Zero, sizeof(m_Zero)); + m_pMemStream->Write(&m_3d, sizeof(m_3d)); + m_pMemStream->Write(&m_ColG, sizeof(m_ColG)); + m_pMemStream->Write(&m_ColB, sizeof(m_ColB)); + m_pMemStream->Write(&m_ColF, sizeof(m_ColF)); + int oyw = GetTrueOYW(); + m_pMemStream->Write(&oyw, sizeof(oyw)); + m_pMemStream->Write(&m_Rot, sizeof(m_Rot)); + m_pMemStream->Write(&m_Filter, sizeof(m_Filter)); + WriteString(m_pMemStream, m_Text); + WriteFont(m_pMemStream, m_pFont); + m_pMemStream->Write(&m_SC, sizeof(m_SC)); + m_pMemStream->Write(&m_sperspect, sizeof(m_sperspect)); + int fBmp = m_pMaskBmp != NULL; + m_pMemStream->Write(&fBmp, sizeof(fBmp)); + if( fBmp ) m_pMaskBmp->SaveToStream(m_pMemStream); + + *pSize = m_pMemStream->Position; + return (LPCBYTE)m_pMemStream->Memory; +} +//--------------------------------------------------------------------------- +void __fastcall SaveMaskToIniFile(Graphics::TBitmap *pBitmap, LPCSTR pSect, TMemIniFile *pIniFile) +{ + if( pBitmap ){ + int xw = pBitmap->Width; + int yw = pBitmap->Height; + pIniFile->WriteInteger(pSect, "M.Size", (yw << 16) + xw); + + LPBYTE bp = new BYTE[xw*yw*3+1]; + LPBYTE wp = bp; + int x, y; + for( y = 0; y < yw; y++ ){ + LPBYTE p = (LPBYTE)pBitmap->ScanLine[y]; + for( x = 0; x < xw; x++ ){ + *wp++ = *p++; + *wp++ = *p++; + *wp++ = *p++; + } + } + int bsize = xw * yw * 3 * 8; + int csize = (bsize + 6) / 7; + char *sp = new char[csize + 1]; + LPSTR t = sp; + CBitStream cb(bp); + BYTE c; + for( x = 0; x < csize; x++ ){ + c = (BYTE)(cb.GetData(7) + 0x30); + if( c >= 0x70 ) c += (BYTE)0x30; + *t++ = c; + } + *t = 0; + pIniFile->WriteString(pSect, "M.Data", sp); + delete sp; + delete bp; + } + else { + pIniFile->WriteInteger(pSect, "M.Size", 0); + pIniFile->WriteString(pSect, "M.Data", ""); + } +} +//--------------------------------------------------------------------------- +Graphics::TBitmap *__fastcall LoadMaskFromIniFile(LPCSTR pSect, TMemIniFile *pIniFile) +{ + Graphics::TBitmap *pBitmap = NULL; + int xw = pIniFile->ReadInteger(pSect, "M.Size", 0); + if( xw ){ + AnsiString as = pIniFile->ReadString(pSect, "M.Data", ""); + int yw = xw >> 16; + xw &= 0x0000ffff; + + int x, y; + int bsize = xw * yw * 3 * 8; + int csize = (bsize + 6) / 7; + LPBYTE bp = new BYTE[xw*yw*3+1]; + CBitStream cb(bp); + LPCSTR p = as.c_str(); + BYTE c; + for( x = 0; (x < csize) && *p; x++, p++ ){ + c = BYTE(*p - 0x30); + if( c >= 0x40 ) c -= (BYTE)0x30; + cb.PutData(c, 7); + } + pBitmap = CreateBitmap(xw, yw); + LPBYTE sp = bp; + for( y = 0; y < yw; y++ ){ + LPBYTE wp = (LPBYTE)pBitmap->ScanLine[y]; + for( x = 0; x < xw; x++ ){ + *wp++ = *sp++; + *wp++ = *sp++; + *wp++ = *sp++; + } + } + delete bp; + } + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall LoadFontFromInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile) +{ + if( pFont == NULL ) return; + + pFont->Name = pIniFile->ReadString(pSect, "FontName", pFont->Name); + pFont->Charset = (BYTE)pIniFile->ReadInteger(pSect, "FontSet", pFont->Charset); + pFont->Height = pIniFile->ReadInteger(pSect, "FontSize", pFont->Height); + TFontStyles ts = pFont->Style; + DWORD d = FontStyle2Code(ts); + d = pIniFile->ReadInteger(pSect, "FontStyle", d); + ts = Code2FontStyle(d); + pFont->Style = ts; +} +//--------------------------------------------------------------------------- +void __fastcall SaveFontToInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile) +{ + if( pFont == NULL ) return; + + pIniFile->WriteString(pSect, "FontName", pFont->Name); + pIniFile->WriteInteger(pSect, "FontSet", pFont->Charset); + pIniFile->WriteInteger(pSect, "FontSize", pFont->Height); + TFontStyles ts = pFont->Style; + DWORD d = FontStyle2Code(ts); + pIniFile->WriteInteger(pSect, "FontStyle", d); +} +//--------------------------------------------------------------------------- +void __fastcall SavePerToInifile(LPCSTR pSect, SPERSPECT *pPer, int sc, TMemIniFile *pIniFile) +{ + pIniFile->WriteInteger(pSect, "P.Flag", pPer->flag); + pIniFile->WriteInteger(pSect, "P.AX", pPer->ax * 1000); + pIniFile->WriteInteger(pSect, "P.AY", pPer->ay * 1000); + pIniFile->WriteInteger(pSect, "P.PX", pPer->px * 1000); + pIniFile->WriteInteger(pSect, "P.PY", pPer->py * 1000); + pIniFile->WriteInteger(pSect, "P.PZ", pPer->pz * 1000); + pIniFile->WriteInteger(pSect, "P.RX", pPer->rx * 1000); + pIniFile->WriteInteger(pSect, "P.RY", pPer->ry * 1000); + pIniFile->WriteInteger(pSect, "P.RZ", pPer->rz * 1000); + pIniFile->WriteInteger(pSect, "P.S", pPer->s * 1000); + pIniFile->WriteInteger(pSect, "P.R", pPer->r * 1000); + pIniFile->WriteInteger(pSect, "P.SC", sc); +} +//--------------------------------------------------------------------------- +void __fastcall LoadPerFromInifile(LPCSTR pSect, SPERSPECT *pPer, int &sc, TMemIniFile *pIniFile) +{ + pPer->flag = pIniFile->ReadInteger(pSect, "P.Flag", pPer->flag); + pPer->ax = pIniFile->ReadInteger(pSect, "P.AX", pPer->ax * 1000)/1000.0; + pPer->ay = pIniFile->ReadInteger(pSect, "P.AY", pPer->ay * 1000)/1000.0; + pPer->px = pIniFile->ReadInteger(pSect, "P.PX", pPer->px * 1000)/1000.0; + pPer->py = pIniFile->ReadInteger(pSect, "P.PY", pPer->py * 1000)/1000.0; + pPer->pz = pIniFile->ReadInteger(pSect, "P.PZ", pPer->pz * 1000)/1000.0; + pPer->rx = pIniFile->ReadInteger(pSect, "P.RX", pPer->rx * 1000)/1000.0; + pPer->ry = pIniFile->ReadInteger(pSect, "P.RY", pPer->ry * 1000)/1000.0; + pPer->rz = pIniFile->ReadInteger(pSect, "P.RZ", pPer->rz * 1000)/1000.0; + pPer->s = pIniFile->ReadInteger(pSect, "P.S", pPer->s * 1000)/1000.0; + pPer->r = pIniFile->ReadInteger(pSect, "P.R", pPer->r * 1000)/1000.0; + sc = pIniFile->ReadInteger(pSect, "P.SC", sc); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::LoadFromInifile(LPCSTR pSect, LPCSTR pName, BOOL fMask) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + TMemIniFile *pIniFile = new TMemIniFile(fname); + MultProc(); + m_Align = pIniFile->ReadInteger(pSect, "Align", m_Align); + m_Grade = pIniFile->ReadInteger(pSect, "Grade", m_Grade); + m_Shadow = pIniFile->ReadInteger(pSect, "Shadow", m_Shadow); + m_Line = pIniFile->ReadInteger(pSect, "Line", m_Line); + m_Zero = pIniFile->ReadInteger(pSect, "Zero", 0); + m_3d = pIniFile->ReadInteger(pSect, "3D", m_3d); + m_OYW = pIniFile->ReadInteger(pSect, "OYW", m_OYW); + m_Rot = pIniFile->ReadInteger(pSect, "Rot", m_Rot); + m_Filter = pIniFile->ReadInteger(pSect, "Filter", m_Filter); + int i; + for( i = 0; i < 4; i++ ){ + char bf[32]; + sprintf(bf, "ColG%u", i); + m_ColG[i].d = pIniFile->ReadInteger(pSect, bf, m_ColG[i].d); + sprintf(bf, "ColB%u", i); + m_ColB[i].d = pIniFile->ReadInteger(pSect, bf, m_ColB[i].d); + } + m_OrgXW = m_OrgYW = -1; + m_BmpXW = m_BmpYW = -1; + AnsiString as, cs; + ::CrLf2Yen(cs, m_Text); + as = pIniFile->ReadString(pSect, "Text", cs); + ::Yen2CrLf(m_Text, as); + + if( pIniFile->ReadInteger(pSect, "Font", 0) ){ + if( m_pFont != NULL ) delete m_pFont; + m_pFont = new TFont; + LoadFontFromInifile(m_pFont, pSect, pIniFile); + UpdateFont(); + } + LoadPerFromInifile(pSect, &m_sperspect, m_SC, pIniFile); + + if( fMask ){ + if( m_pMaskBmp ) delete m_pMaskBmp; + m_pMaskBmp = LoadMaskFromIniFile(pSect, pIniFile); + } + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SaveToInifile(LPCSTR pSect, LPCSTR pName, BOOL fMask) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + + TMemIniFile *pIniFile = new TMemIniFile(fname); + MultProc(); + try { + pIniFile->WriteInteger(pSect, "Align", m_Align); + pIniFile->WriteInteger(pSect, "Grade", m_Grade); + pIniFile->WriteInteger(pSect, "Shadow", m_Shadow); + pIniFile->WriteInteger(pSect, "Line", m_Line); + pIniFile->WriteInteger(pSect, "Zero", m_Zero); + pIniFile->WriteInteger(pSect, "3D", m_3d); + pIniFile->WriteInteger(pSect, "OYW", GetTrueOYW()); + pIniFile->WriteInteger(pSect, "Rot", m_Rot); + pIniFile->WriteInteger(pSect, "Filter", m_Filter); + int i; + for( i = 0; i < 4; i++ ){ + char bf[32]; + sprintf(bf, "ColG%u", i); + pIniFile->WriteInteger(pSect, bf, m_ColG[i].d); + sprintf(bf, "ColB%u", i); + pIniFile->WriteInteger(pSect, bf, m_ColB[i].d); + } + pIniFile->WriteInteger(pSect, "Width", m_BmpXW); + pIniFile->WriteInteger(pSect, "Height", m_BmpYW); + AnsiString cs; + ::CrLf2Yen(cs, m_Text); + pIniFile->WriteString(pSect, "Text", cs); + + pIniFile->WriteInteger(pSect, "Font", m_pFont != NULL ? 1 : 0); + if( m_pFont != NULL ){ + SaveFontToInifile(m_pFont, pSect, pIniFile); + } + SavePerToInifile(pSect, &m_sperspect, m_SC, pIniFile); + if( fMask ){ + SaveMaskToIniFile(m_pMaskBmp, pSect, pIniFile); + } + } + catch(...){ + } + pIniFile->UpdateFile(); + delete pIniFile; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteInifile(LPCSTR pSect, LPCSTR pName) +{ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, pName); + + TMemIniFile *pIniFile = new TMemIniFile(fname); + MultProc(); + try { + pIniFile->EraseSection(pSect); + } + catch(...){ + } + pIniFile->UpdateFile(); + delete pIniFile; +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetItemType(void) +{ + DWORD type = 0x00010002; // Active text as Overlay + switch(m_Align){ + case 1: + type |= 0x00400000; // align center + break; + case 2: + type |= 0x00100000; // aling right-top + break; + case 3: + type |= m_Pos << 20; + type |= 0x00000010; + break; + default: + break; + } + return type; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetPos(DWORD pos, DWORD size, DWORD tsize) +{ + int x = pos & 0x0000ffff; + int y = pos >> 16; + if( x & 0x00008000 ) x |= 0xffff8000; + if( y & 0x00008000 ) y |= 0xffff8000; + int xw = size & 0x0000ffff; + int yw = size >> 16; + int txw = tsize & 0x0000ffff; + int tyw = tsize >> 16; + + int xr = x + xw; + int yb = y + yw; + m_Pos = 0; + if( xr > (txw * 7/8) ){ + m_Pos |= 1; + } + else if( x > (txw / 8) ){ + m_Pos |= 4; + } + if( yb > (tyw * 6/8) ){ + m_Pos |= 2; + } + else if( y > (tyw * 2 / 8) ){ + m_Pos |= 8; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DeleteStorage(LPCBYTE pStorage) +{ + if( m_pMemStream != NULL ){ + ASSERT(pStorage == (LPCBYTE)m_pMemStream->Memory); + delete m_pMemStream; + m_pMemStream = NULL; + } +} +//--------------------------------------------------------------------------- +int __fastcall CItem::GetTrueOYW(void) +{ + int oyw = int((SHORT)m_OYW); + if( m_OYWS ){ + int fwh = m_OYWS >> 16; + int fwl = m_OYWS & 0x0000ffff; + if( fwl ) oyw = oyw * fwh / fwl; + } + return oyw; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Copy(CItem *sp) +{ + ASSERT(sp); + + DWORD size; + LPCBYTE ps = sp->CreateStorage(&size); + Create(ps, size); + sp->DeleteStorage(ps); + m_Back = sp->m_Back; + m_OrgXW = m_OrgYW = -1; +// m_TextXW = m_TextYW = -1; + m_Pos = sp->m_Pos; + m_Ex = sp->m_Ex; +} +//--------------------------------------------------------------------------- +DWORD __fastcall CItem::GetOrgSize(void) +{ + if(m_OrgXW >= 0){ + DWORD w = m_OrgXW; + DWORD h = m_OrgYW; + return (h << 16) + w; + } + else { + return (128 << 16) + 160; + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetFontSize(Graphics::TBitmap *pDest) +{ + ASSERT(m_OrgXW > 0); + ASSERT(m_OrgYW > 0); + if( (m_OrgXW <= 0) || (m_OrgYW <= 0) ) return; + + int size = m_pFont->Height; + if( m_OrgXW < pDest->Width ){ + size = size * pDest->Width / m_OrgXW; + if( size == m_pFont->Height ) size--; + } + else if( m_OrgYW < pDest->Height ){ + size = size * pDest->Height / m_OrgYW; + if( size == m_pFont->Height ) size--; + } + else if( m_OrgXW > pDest->Width ){ + size = size * pDest->Width / m_OrgXW; + if( size == m_pFont->Height ) size++; + } + else if( m_OrgYW > pDest->Height ){ + size = size * pDest->Height / m_OrgYW; + if( size == m_pFont->Height ) size++; + } + if( !size ) size = -1; + m_pFont->Height = size; +} +//--------------------------------------------------------------------------- +static int __fastcall TextWidth(TCanvas *pCanvas, LPCSTR p) +{ + char bf[8]; + + int w = 0; + while(*p){ + if( (_mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD) && *(p+1) ){ + bf[0] = *p++; bf[1] = *p++; bf[2] = 0; + } + else { + bf[0] = *p++; bf[1] = 0; + } + w += pCanvas->TextWidth(bf); + } + return w; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::GetMaxWH(int &W, int &H, Graphics::TBitmap *pDest, LPCSTR pText) +{ + TCanvas *pCanvas = pDest->Canvas; + int lf = 1; + int n = 0; + W = H = 0; + char bf[1024]; + int w, h; + LPSTR t; + for( t = bf; 1; pText++ ){ + if( *pText != 0x0d ){ + if( (*pText == 0x0a) || !*pText ){ + if( lf && *pText ){ + n++; + } + *t = 0; + if( bf[0] ){ + if( m_Grade == 4 ){ + w = TextWidth(pCanvas, bf); + h = pCanvas->TextHeight(bf); + } + else { + DWORD wh = ::GetTabbedTextExtent(pCanvas->Handle, bf, strlen(bf), 0, NULL); + w = wh & 0x0000ffff; h = wh >> 16; + } + if( H < h ) H = h; + if( W < w ) W = w; + } + if( !*pText ) break; + lf = 1; + t = bf; + } + else { + if( lf ){ + lf = 0; + n++; + } + *t++ = *pText; + } + } + } + return n; +} +//--------------------------------------------------------------------------- +UINT __fastcall CItem::GetPosFormat(void) +{ + UINT wFormat; + switch(m_Align){ + case 1: + wFormat = DT_CENTER; + break; + case 2: + wFormat = DT_RIGHT; + break; + case 3: + if( m_Pos & 4 ){ + wFormat = DT_CENTER; + } + else { + wFormat = (m_Pos & 1) ? DT_RIGHT : DT_LEFT; + } + break; + default: + wFormat = DT_LEFT; + break; + } + return wFormat; +} +//--------------------------------------------------------------------------- +UINT __fastcall CItem::GetDrawFormat(void) +{ + UINT wFormat = DT_NOPREFIX|DT_NOCLIP|DT_EXPANDTABS; + if( m_Rot ){ + wFormat |= DT_LEFT; + } + else { + wFormat |= GetPosFormat(); + } + return wFormat; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::GetFont(LOGFONT *pLogfont) +{ + memset(pLogfont, 0, sizeof(LOGFONT)); + pLogfont->lfHeight = m_pFont->Height; + pLogfont->lfWidth = 0; + pLogfont->lfEscapement = m_Rot * 10; + pLogfont->lfOrientation = m_Rot * 10; + TFontStyles ts = m_pFont->Style; + int fsw = FontStyle2Code(ts); + pLogfont->lfWeight = fsw & FSBOLD ? 700 : 400; + pLogfont->lfItalic = BYTE(fsw & FSITALIC ? TRUE : FALSE); + pLogfont->lfUnderline = BYTE(fsw & FSUNDERLINE ? TRUE : FALSE); + pLogfont->lfStrikeOut = BYTE(fsw & FSSTRIKEOUT ? TRUE : FALSE); + pLogfont->lfCharSet = m_pFont->Charset; + pLogfont->lfOutPrecision = OUT_CHARACTER_PRECIS; + pLogfont->lfClipPrecision = CLIP_DEFAULT_PRECIS; + pLogfont->lfQuality = NONANTIALIASED_QUALITY; + pLogfont->lfPitchAndFamily = DEFAULT_PITCH; + strcpy(pLogfont->lfFaceName, m_pFont->Name.c_str()); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::SetFont(LOGFONT *pLogfont) +{ + if( m_pFont == NULL ) m_pFont = new TFont; + m_pFont->Name = pLogfont->lfFaceName; + m_pFont->Charset = pLogfont->lfCharSet; + if( pLogfont->lfHeight ){ + m_pFont->Height = pLogfont->lfHeight; + } + else { + m_pFont->Size = pLogfont->lfWidth; + } + DWORD d = 0; + if( pLogfont->lfWeight > 600 ) d |= FSBOLD; + if( pLogfont->lfItalic ) d |= FSITALIC; + if( pLogfont->lfUnderline ) d |= FSUNDERLINE; + if( pLogfont->lfStrikeOut ) d |= FSSTRIKEOUT; + m_fsCode = d; + TFontStyles ts = Code2FontStyle(d); + m_pFont->Style = ts; + m_Rot = pLogfont->lfEscapement / 10; +} +//--------------------------------------------------------------------------- +static TColor __fastcall GetIndexColor(int index) +{ + index++; + UCOL c; + c.d = 0; + c.b.r = BYTE(index & 1 ? 255 : 0); + c.b.g = BYTE(index & 2 ? 255 : 0); + c.b.b = BYTE(index & 4 ? 255 : 0); + return c.c; +} +//--------------------------------------------------------------------------- +static int __fastcall GetColorIndex(UCOL c) +{ + int n = 0; + if( c.b.r >= 0x80 ) n |= 1; + if( c.b.g >= 0x80 ) n |= 2; + if( c.b.b >= 0x80 ) n |= 4; + n--; + if( (n < 0) || (n >= 6) ) n = 0; + return n; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawText(RECT rc, Graphics::TBitmap *pDest, LPCSTR pText, UCOL ucol) +{ + if( m_Rot || (m_Ex & DISFONTSMOOTHING) || (m_Grade==4) ){ + LOGFONT lf; +#if 1 + GetFont(&lf); +#else + memset(&lf, 0, sizeof(lf)); + lf.lfHeight = m_pFont->Height; + lf.lfWidth = 0; + lf.lfEscapement = m_Rot * 10; + lf.lfOrientation = m_Rot * 10; + TFontStyles ts = m_pFont->Style; + int fsw = FontStyle2Code(ts); + lf.lfWeight = fsw & FSBOLD ? 700 : 400; + lf.lfItalic = BYTE(fsw & FSITALIC ? TRUE : FALSE); + lf.lfUnderline = BYTE(fsw & FSUNDERLINE ? TRUE : FALSE); + lf.lfStrikeOut = BYTE(fsw & FSSTRIKEOUT ? TRUE : FALSE); + lf.lfCharSet = m_pFont->Charset; + lf.lfOutPrecision = OUT_CHARACTER_PRECIS; + lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf.lfQuality = NONANTIALIASED_QUALITY; + lf.lfPitchAndFamily = DEFAULT_PITCH; + strcpy(lf.lfFaceName, m_pFont->Name.c_str()); +#endif + pDest->Canvas->Font->Handle = CreateFontIndirect(&lf); + } + else { + pDest->Canvas->Font = m_pFont; + } + pDest->Canvas->Font->Color = ucol.c; + + int nc = 0; + if( m_OYWC || m_Rot || (m_Grade == 4) ){ + TStringList *pList = new TStringList; + pList->Text = pText; + UINT wFormat = GetPosFormat(); + int xw = rc.right - rc.left; + for( int i = 0; i < pList->Count; i++ ){ + RECT trc; + trc = rc; + int txw = pDest->Canvas->TextWidth(pList->Strings[i].c_str()); + if( m_Rot ){ // 回転時の位置補正 + int x; + switch(wFormat){ + case DT_CENTER: + x = (xw - txw)/2; + trc.left += x * m_CosX; + trc.right += x * m_CosX; + trc.top -= x * m_SinX; + break; + case DT_RIGHT: + x = xw - txw; + trc.left += x * m_CosX; + trc.right += x * m_CosX; + trc.top -= x * m_SinX; + break; + } + } + DrawText_(trc, pDest, pList->Strings[i].c_str(), nc); + if( m_Rot ){ + rc.left += (m_FW + m_OYWC) * m_SinX; + rc.right += (m_FW + m_OYWC) * m_SinX; + rc.top += (m_FW + m_OYWC) * m_CosX; + } + else { + rc.top += (m_FW + m_OYWC); + } + } + delete pList; + } + else { + DrawText_(rc, pDest, pText, nc); + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawText_(RECT rc, Graphics::TBitmap *pDest, LPCSTR pText, int &nc) +{ + TCanvas *pCanvas = pDest->Canvas; + HDC hdc = pCanvas->Handle; + ::SetBkMode(hdc, TRANSPARENT); + if( (m_Grade == 4) && (m_pMaskBmp == NULL) ){ + double x = rc.left; + double y = rc.top; + char bf[32]; + int fw = TextWidth(pCanvas, pText); + if( !m_Rot ){ + int pos = GetPosFormat(); + switch(pos){ + case DT_CENTER: + fw = ((rc.right-rc.left)-fw)/2; + x += fw; + break; + case DT_RIGHT: + fw = ((rc.right-rc.left)-fw); + x += fw; + break; + } + } + while(*pText){ + if( (_mbsbtype((const unsigned char *)pText, 0) == _MBC_LEAD) && *(pText+1) ){ + bf[0] = *pText++; bf[1] = *pText++; bf[2] = 0; + } + else { + bf[0] = *pText++; bf[1] = 0; + } + pCanvas->Font->Color = GetIndexColor(nc); + fw = pCanvas->TextWidth(bf); +// rc.left = x; rc.top = y; + pCanvas->TextOut(x, y, bf); + if( m_Rot ){ + x += fw * m_CosX; + y -= fw * m_SinX; + } + else { + x += fw; + } + if( (bf[0] != ' ') && strcmp(bf, " ") ){ + nc++; + if( nc >= AN(m_ColF) ) nc = 0; + } + } + } + else if( m_Row >= 2 ){ + ::DrawText(hdc, pText, strlen(pText), &rc, GetDrawFormat()); + } + else { + pCanvas->TextOut(rc.left, rc.top, pText); + } +} +#if 0 +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawTrans(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc, LPBYTE pTbl) +{ + int xw = pSrc->Width; + int yw = pSrc->Height; + LPBYTE sp, tp; + int x, y; + for( y = 0; y < yw; y++ ){ + sp = (LPBYTE)pSrc->ScanLine[y]; + tp = (LPBYTE)pDest->ScanLine[y]; + for( x = 0; x < xw; x++, pTbl++ ){ + if( *pTbl ){ + *tp++ = *sp++; + *tp++ = *sp++; + *tp++ = *sp++; + } + else { + tp += 3; + sp += 3; + } + } + } +} +#endif +//--------------------------------------------------------------------------- +void __fastcall CItem::CreateTable(Graphics::TBitmap *pDest) +{ + int XW = pDest->Width; + int YW = pDest->Height; + m_XW = XW; + m_YW = YW; + + LPBYTE pTbl = new BYTE[XW*YW]; + memset(pTbl, 0, XW*YW); + LPBYTE wp = pTbl; + int x, y; + + LPBYTE *pAdr = new BYTE*[YW]; + BYTE br = m_cBack.b.r; + BYTE bg = m_cBack.b.g; + BYTE bb = m_cBack.b.b; + if( m_Grade != 4 ){ + for( y = 0; y < YW; y++ ){ + LPBYTE p = (LPBYTE)pDest->ScanLine[y]; + pAdr[y] = p; + for( x = 0; x < XW; x++, wp++, p+=3 ){ + if( (bb != *p) || (bg != *(p+1)) || (br != *(p+2)) ){ + *wp = 0x80; + } + } + } + } + else { + UCOL c; + c.d = 0; + for( y = 0; y < YW; y++ ){ + LPBYTE p = (LPBYTE)pDest->ScanLine[y]; + pAdr[y] = p; + for( x = 0; x < XW; x++, wp++ ){ + c.b.b = *p++; + c.b.g = *p++; + c.b.r = *p++; + if( (bb != c.b.b) || (bg != c.b.g) || (br != c.b.r) ){ + *wp = BYTE(0x80 + GetColorIndex(c)); + } + } + } + } + m_pAdr = pAdr; + m_pTbl = pTbl; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::EditDialog(HWND hWnd) +{ + TTextDlgBox *pBox = new TTextDlgBox(NULL); + if( pBox == NULL ) return FALSE; + + int r = pBox->Execute(this); + delete pBox; + if( r == TRUE ) UpdateDefault(); + return r; +} +//--------------------------------------------------------------------------- +int __fastcall CItem::FontDialog(HWND hWnd) +{ + if( m_pFont == NULL ) m_pFont = new TFont; + TFontDialog *pDlg = new TFontDialog(NULL); + if( pDlg == NULL ) return FALSE; + + ASSERT(m_pFont); + pDlg->Font->Assign(m_pFont); + int hOrg = pDlg->Font->Height; + int h = hOrg / 4; + pDlg->Font->Height = h; + pDlg->Font->Color = m_ColG[0].c; + MultProc(); + int r = pDlg->Execute(); + MultProc(); + if( r == TRUE ){ + m_pFont->Assign(pDlg->Font); + if( h != m_pFont->Height ){ + hOrg = m_pFont->Height * 4; + } + m_pFont->Height = hOrg; + m_ColG[0].c = pDlg->Font->Color; + UpdateFont(); + UpdateDefault(); + } + delete pDlg; + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::UpdateFont(void) +{ + if( m_pFont == NULL ) return; + + TFontStyles ts = m_pFont->Style; + m_fsCode = FontStyle2Code(ts); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Draw3D(UCOL cl[2]) +{ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + if( m_Rot ){ + int x = xm * m_CosX + ym * m_SinX; + int y = -xm * m_SinX + ym * m_CosX; + xm = x; + ym = y; + } + + int max = ABS(xm) > ABS(ym) ? ABS(xm) : ABS(ym); + int ax, ay; + ax = ay = 32768; + for( int i = max; i > 0; i-- ){ + int x = xm * i / max; + int y = ym * i / max; + if( (ax != x) || (ay != y) ){ + DrawColorMask(x, y, GetGrade2(cl, i, max)); + ax = x; ay = y; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall CItem::DrawColorMask(int X, int Y, UCOL col) +{ + ASSERT(m_pTbl); ASSERT(m_pAdr); + + int xw = m_XW; + int yw = m_YW; + int x, y, xx, yy; + LPBYTE pTbl = m_pTbl; + LPBYTE *pAdr = m_pAdr; + LPBYTE wp; + yy = Y; + for( y = 0; y < yw; y++, yy++ ){ + if( yy < 0 ){ + pTbl += xw; + continue; + } + else if( yy >= yw ){ + break; + } + wp = (LPBYTE)pAdr[yy] + (X*3); + xx = X; + for( x = 0; x < xw; x++, xx++, pTbl++ ){ + if( *pTbl && (xx>=0) && (xx= 0; i-- ){ + DrawColorMask(i+1, i+1, m_ColB[0]); + } + } + } + break; + case 2: + { + ASSERT(m_pTbl); ASSERT(m_pAdr); + if( m_3d & 0x00010000 ){ + Draw3D(&m_ColB[1]); + } + int f; + int x, y; + for( y = 0; y < yw; y++ ){ + wp = &m_pTbl[y*xw]; + p = m_pAdr[y]; + f = 0; + for( x = 0; x < xw; x++, wp++, p+=3 ){ + if( *wp ){ + if( !m_Grade ){ + *p++ = m_ColG[0].b.b; + *p++ = m_ColG[0].b.g; + *p = m_ColG[0].b.r; + p -= 2; + } + f = m_Line; + } + else if( f ){ + f--; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + p -= 2; + *wp = BYTE((m_Line >= 2) ? 2 : (f ? 2 : 0)); + } + } + f = 0; + wp--; + p -= 3; + x--; + for( ; x >= 0; x--, wp--, p-=3 ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + p -= 2; + *wp = BYTE((m_Line >= 2) ? 2 : (f ? 2 : 0)); + } + } + + } + int ax = 0; + for( x = 0; x < xw; x++, ax+=3 ){ + wp = &m_pTbl[x]; + f = 0; + for( y = 0; y < yw; y++, wp += xw ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + p = m_pAdr[y]; + p += ax; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + *wp = BYTE((m_Line >= 2) ? 2 : (f ? 2 : 0)); + } + } + f = 0; + y--; + wp -= xw; + for( ; y >= 0; y--, wp -= xw ){ + if( *wp ){ + f = m_Line; + } + else if( f ){ + f--; + p = m_pAdr[y]; + p += ax; + *p++ = m_ColB[0].b.b; + *p++ = m_ColB[0].b.g; + *p = m_ColB[0].b.r; + } + } + } + } + break; + case 3: + { + if( m_3d & 0x00010000 ){ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + Draw3D(&m_ColB[1]); + DrawColorMask((xm & 0x80) ? 1 : -1, (ym & 0x80) ? 1 : -1, m_ColB[0]); + } + else { + for( int i = m_Line - 1; i >= 0; i-- ){ + DrawColorMask(i+1, i+1, m_ColB[0]); + } + DrawColorMask(-1, -1, m_ColB[1]); + } + } + break; + default: + break; + } + + MultProc(); + int x, y; + RECT mc = m_rc; + int bw = mc.right - mc.left + 1; + int bh = mc.bottom - mc.top + 1; + int bd = sqrt(bw*bw + bh*bh); + UCOL c; + int ao = mc.left * 3; + int yy = mc.top; + + int Grade = m_Grade; + int maskxw, maskyw; + LPBYTE sp; + if( m_pMaskBmp ){ + maskxw = m_pMaskBmp->Width; + maskyw = m_pMaskBmp->Height; + Grade = 5; + } + for( y = 0; y < bh; y++, yy++ ){ + p = m_pAdr[yy] + ao; + wp = &m_pTbl[yy*xw] + mc.left; + if( Grade == 5 ){ + sp = (LPBYTE)m_pMaskBmp->ScanLine[y % maskyw]; + } + for( x = 0; x < bw; x++, wp++ ){ + if( *wp & 0x80 ){ + switch(Grade){ + case 0: + c = m_ColG[0]; + break; + case 1: + c = GetGrade4(m_ColG, x, bw); + break; + case 2: + c = GetGrade4(m_ColG, y, bh); + break; + case 3: + c = GetGrade4(m_ColG, sqrt(x*x + y*y), bd); + break; + case 4: + c = m_ColF[*wp & 0x07]; + break; + case 5: + { + LPBYTE s = sp + ((x % maskxw) * 3); + c.b.b = *s++; + c.b.g = *s++; + c.b.r = *s; + } + break; + } + *p++ = c.b.b; + *p++ = c.b.g; + *p++ = c.b.r; + } + else { + p += 3; + } + } + } + + if( m_pAdr != NULL ) delete m_pAdr; + if( m_pTbl != NULL ) delete m_pTbl; + + return pDest; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::AdjustMinimized(Graphics::TBitmap *pSrc) +{ + int xw = pSrc->Width; + int yw = pSrc->Height; + int x, y; + RECT rc; + rc.left = xw; rc.right = 0; + rc.top = yw; rc.bottom = 0; + BYTE br = m_cBack.b.r; + BYTE bg = m_cBack.b.g; + BYTE bb = m_cBack.b.b; + for( y = 0; y < xw; y++ ){ + LPBYTE p = (LPBYTE)pSrc->ScanLine[y]; + for( x = 0; x < yw; x++, p+=3 ){ + if( (bb != *p) || (bg != *(p+1)) || (br != *(p+2)) ){ + if( rc.left > x ) rc.left = x; + if( rc.right < x ) rc.right = x; + if( rc.top > y ) rc.top = y; + if( rc.bottom < y ) rc.bottom = y; + } + } + } + xw = rc.right - rc.left + 1; + yw = rc.bottom - rc.top + 1; + if( xw <= 0 ) xw = 1; + if( yw <= 0 ) yw = 1; + Graphics::TBitmap *pbmp = CreateBitmap(xw, yw); + pbmp->Canvas->Draw(-rc.left, -rc.top, pSrc); + delete pSrc; + return pbmp; +} +// +// +//--------------------------------------------------------------------------- +// Matrix +// +// n[] = l[] * m[] +// +static void __fastcall Matrix(double l[4][4], double m[4][4], double n[4][4]) +{ + int i, j, k; + double d; + + for( i = 0; i < 4; i++ ){ + for( j = 0; j < 4; j++ ){ + for( k = 0, d = 0.0; k < 4; k++ ) d += l[i][k] * m[k][j]; + n[i][j] = d; + } + } +} +static void __fastcall Matrix(double l[3][3], double m[3][3], double n[3][3]) +{ + int i, j, k; + double d; + + for( i = 0; i < 3; i++ ){ + for( j = 0; j < 3; j++ ){ + for( k = 0, d = 0.0; k < 3; k++ ) d += l[i][k] * m[k][j]; + n[i][j] = d; + } + } +} +//--------------------------------------------------------------------------- +// Perspect +// +void __fastcall SetMatrix(double k[3][3], LPCSPERSPECT pPar, int xs, int ys) +{ + double l[4][4]; double m[4][4]; double n[4][4]; + double k1, k2, k3, k4, k5, k6, k7, k8, k9; + double u, v, w; + + u = pPar->rx * PI / 180; + v = pPar->ry * PI / 180; + w = pPar->rz * PI / 180; + memset(l, 0, sizeof(l)); memset(m, 0, sizeof(m)); + l[0][0] = 1.0/xs; l[1][1] = -1.0/xs; l[2][2] = 1.0; l[3][3] = 1.0; + m[0][0] = pPar->ax; m[1][1] = pPar->ay; m[2][2] = 1.0; m[3][3] = 1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = 1.0; l[1][1] = 1.0; l[2][2] = 1.0; + l[3][0] = pPar->px; l[3][1] = pPar->py; l[3][2] = pPar->pz; l[3][3] = 1.0; + Matrix(n, l, m); + memset(n, 0, sizeof(n)); + n[0][0] = cos(w); n[0][1] = sin(w); + n[1][0] = -n[0][1]; n[1][1] = n[0][0]; + n[2][2] = 1.0; n[3][3] = 1.0; + Matrix(m, n, l); + memset(m, 0, sizeof(m)); + m[0][0] = 1.0; m[1][1] = cos(u); m[1][2] = sin(u); + m[2][1] = -m[1][2]; m[2][2] = m[1][1]; m[3][3] = 1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = cos(v); l[0][2] = sin(v); l[1][1] = 1.0; + l[2][0] = -l[0][2]; l[2][2] = l[0][0]; l[3][3] = 1.0; + Matrix(n, l, m); + memset(n, 0, sizeof(n)); + n[0][0] = 1.0; n[1][1] = 1.0; n[2][2] = -1.0; n[3][2] = -pPar->v; n[3][3] = 1.0; + Matrix(m, n, l); + memset(m, 0, sizeof(m)); + m[0][0] = 1.0; m[1][1] = 1.0; m[2][2] = 1/pPar->s; m[2][3] = m[2][2]; + m[3][2] = -1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = xs; l[1][1] = -xs; l[2][2] = 1.0; l[3][3] = 1.0; + Matrix(n, l, m); + + k1 = m[0][3]; k2 = m[1][3]; k3 = m[3][3]; + k4 = m[0][0]; k5 = m[1][0]; k6 = m[3][0]; + k7 = m[0][1]; k8 = m[1][1]; k9 = m[3][1]; + + k[0][0] = k7*k2 - k8*k1; k[0][1] = k5*k1 - k4*k2; k[0][2] = k4*k8 - k7*k5; + k[1][0] = k8*k3 - k9*k2; k[2][0] = k9*k1 - k7*k5; k[1][1] = k6*k2 - k5*k3; + k[2][1] = k4*k3 - k6*k1; k[1][2] = k5*k9 - k8*k6; k[2][2] = k7*k6 - k4*k9; + + if( pPar->r != 0.0 ){ // simple rotation + double r = pPar->r * PI / 180.0; + double m[3][3]; + double z[3][3]; + memset(m, 0, sizeof(m)); + m[0][0] = cos(r); m[0][1] = sin(r); + m[1][0] = -m[0][1]; m[1][1] = m[0][0]; + m[2][2] = 1.0; + Matrix(k, m, z); + memcpy(k, z, sizeof(z)); + } +} +#define TMAX 400 +//--------------------------------------------------------------------------- +// Create mapping table +LPCDOUBLE __fastcall MapTable(int wave, int xs, int ys, double ks) +{ +#define VMAX 32767.0 +#define VMIN (1.0/VMAX) + LPDOUBLE pTbl, dp; + double d; + switch(wave){ + case 6: + { + double ky = 0.5 * PI / ys; + dp = pTbl = new double[ys*2]; + for( int y = -ys; y < ys; y++, dp++ ){ + d = cos(y * ky); + if( ABS(d) >= VMIN ){ + d = 1.0 * ks / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + } + } + break; + case 9: + { + dp = pTbl = new double[xs*2]; + double kd = xs * xs; + for( int x = -xs; x < xs; x++, dp++ ){ + d = kd - x * x; + if( d >= 0 ){ + d = sqrt(d); + *dp = (d > VMIN) ? xs * ks / d : VMAX; + } + else { + *dp = 1.0; + } + } + } + break; + case 14: + { + dp = pTbl = new double[ys*2]; + double kd = ys * ys; + for( int y = -ys; y < ys; y++, dp++ ){ + d = kd - y * y; + if( d >= 0 ){ + d = sqrt(d); + *dp = (d > VMIN) ? ys / d : VMAX; + } + else { + *dp = 1.0; + } + } + } + break; + case 10: + case 11: + { + dp = pTbl = new double[xs*2]; + double kd = xs * xs; + double kc = xs * 0.25; + for( int x = -xs; x < xs; x++, dp++ ){ + d = kd - x * x; + if( d >= 0 ){ + *dp = sqrt(d) * 0.5 * ks - kc; + if( wave == 10 ) *dp = -*dp; + } + else { + *dp = 1.0; + } + } + } + break; + case 7: + case 8: + case 12: + case 13: + case 15: + case 25: + pTbl = NULL; + break; + case 16: + { + dp = pTbl = new double[ys*2]; + double kc = ks * PI /(4 * ys); + double d; + for( int y = -ys; y < ys; y++, dp++ ){ + d = fabs(sin((y + ys)*kc)); + *dp = d > VMIN ? 1.0 / d : VMAX; + } + } + break; + case 17: + { + dp = pTbl = new double[ys*2]; + double kc = ks * PI /(4 * ys); + double d; + for( int y = ys-1; y >= -ys; y--, dp++ ){ + d = fabs(sin((y + ys)*kc)); + *dp = d > VMIN ? 1.0 / d : VMAX; + } + } + break; + case 22: + { + dp = pTbl = new double[ys*2]; + double kc = PI * ks/ (ys * ys); + double d; + for( int y = -ys; y < ys; y++, dp++ ){ + d = y * y * kc + (PI/4); + *dp = ABS(d) >= VMIN ? (1.0 / d) : VMAX; + } + } + break; + case 28: + case 29: + { + dp = pTbl = new double[xs*2]; + double kd = xs * xs; + double kc = ks*0.5 + 0.05; + for( int x = -xs; x < xs; x++, dp++ ){ + d = kd - x * x; + if( d >= 0 ){ + d = sqrt(d); + *dp = (d > VMIN) ? xs * kc / d : VMAX; + } + else { + *dp = 1.0; + } + } + } + break; + case 36: + { + dp = pTbl = new double[xs*2]; + double kx = PI * 0.5 / xs; + double ky = ys * ks * 0.125; + double ko = ks * ys * 0.1875; + for( int x = -xs; x < xs; x++, dp++ ){ + *dp = ky * ((xs-x) * kx) - ko; + } + } + break; + case 38: + { + dp = pTbl = new double[ys*2]; + double ky = PI * 0.5 / ys; + double kx = xs * ks * 0.25; + double ko = ks * xs * 0.375; + for( int y = -ys; y < ys; y++, dp++ ){ + *dp = kx * ((ys-y) * ky) - ko; + } + } + break; + default: + { + double kx = PI / xs; + double ky = ys * ks/ 8; + dp = pTbl = new double[xs*2]; + for( int x = -xs; x < xs; x++, dp++ ){ + switch(wave){ + case 1: + *dp = ky * sin(x * kx); + break; + case 2: + *dp = ky * sin(-x * kx); + break; + case 3: + *dp = ky * sin(x * kx + PI/2); + break; + case 4: + *dp = ky * sin(-x * kx - PI/2); + break; + case 5: + d = cos(x * kx * 0.5); + if( ABS(d) >= VMIN ){ + d = 1.0 * ks/ d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 18: + d = ABS(x) * kx + (PI/2) * ks; + if( ABS(d) >= VMIN ){ + d = PI / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 19: + case 34: + case 35: + d = fabs(sin(x * kx)) + 0.25 * ks; + if( ABS(d) >= VMIN ){ + d = 1.0 / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 20: + case 30: + case 32: + d = (x+xs) * kx * 0.5 + (PI/2) * ks; + if( ABS(d) >= VMIN ){ + d = PI / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 21: + case 31: + case 33: + d = (xs-x) * kx * 0.5 + (PI/2) * ks; + if( ABS(d) >= VMIN ){ + d = PI / d; + } + else { + d = VMAX; + } + *dp = d * 0.8; + break; + case 23: + d = x * x * kx * kx + (PI * ks); + *dp = ABS(d) >= VMIN ? (PI * 2.0 / d) : VMAX; + break; + case 24: + case 26: + case 27: + d = (xs-ABS(x)) * kx + (PI/2) * ks; + *dp = ABS(d) >= VMIN ? (PI * 0.8 / d) : VMAX; + break; + case 37: + *dp = ky * (ABS(x) * kx * 0.5); + break; + default: + break; + } + } + } + break; + } + return pTbl; +} +//--------------------------------------------------------------------------- +void __fastcall CItem::Perspect(void) +{ + if( (m_XW <= 2) && (m_YW <= 2) ) return; + + LPCSPERSPECT pPar = &m_sperspect; + + LPBYTE pDest = new BYTE[m_XW*m_YW]; + LPBYTE pSrc = m_pTbl; +#if MeasureAccuracy + QueryPerformanceCounter(&m_liPOldPer); +#endif + int wave = pPar->flag; + int bw = m_YW; + int bh = m_XW; + int i, j, m, n; + double x, y, w, p, q; + double k[3][3]; + int xs = bw / 2; + int ys = bh / 2; + SetMatrix(k, pPar, xs, ys); + + LPCDOUBLE pTbl = NULL; + double ks = 1.0 + (double(m_SC) * 0.05); + if( wave ) pTbl = MapTable(wave, xs, ys, ks); + double kc, kc3, kx, kc7; + switch(wave){ + case 7: + case 8: + kc7 = ((wave == 7) ? 0.6 : 0.8)*double(ys)/double(xs); + kx = xs * ((wave == 7) ? 4.0 * ks : 2.994) / PI; + kc3 = ys/3; + if( wave == 8 ){ + kc7 *= ks; + kc3 *= ks; + } + break; + case 13: + if( m_SC >= (88-30) ) m_SC = 88-30; + if( m_SC <= -30 ) m_SC = -29; + kc = 30 + m_SC; + kc3 = 1.0/tan(kc*PI/180); + kx = 1.0/cos(kc*PI/180); + kc7 = 1.0/sin(kc*PI/180); + break; + case 14: + kc3 = ys * 7 /8; + break; + case 15: + kc3 = ks + 0.75; + break; + case 25: + kc7 = 0.6*double(ys)/double(xs); + kx = xs * (4.0 * ks) / PI; + kc3 = ys/3; + break; + case 26: + case 27: + case 34: + case 35: + kc3 = (ABS(ks) > VMIN) ? (1.0 / ks) : VMAX; + break; + case 28: + case 29: + kc3 = (ABS(ks) > VMIN) ? (ks) : VMAX; + break; + case 30: + case 31: + case 32: + case 33: + kc3 = (ABS(ks) > VMIN) ? (0.8 / ks) : VMAX; + break; + } + kc = double(xs)/double(ys); +#if MeasureAccuracy + if( QueryPerformanceCounter(&m_liPCurPer) ){ + m_dlDiffPer1 = m_liPCurPer.QuadPart - m_liPOldPer.QuadPart; + m_liPOldPer = m_liPCurPer; + } +#endif + LPBYTE tp = pDest; + for( i = -ys; i < ys; i++ ){ + for( j = -xs; j < xs; j++ ){ + w = k[0][0] * j + k[0][1] * i + k[0][2]; + x = k[1][0] * j + k[1][1] * i + k[1][2]; + y = k[2][0] * j + k[2][1] * i + k[2][2]; + if( w ){ + x = x / w; + y = y / w; + } + else { + x = y = 10000.0; + } + switch(wave){ + case 1: + case 2: + case 3: + case 4: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y += pTbl[m]; + break; + case 5: + ASSERT(pTbl); +// x *= 0.8; + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 6: + ASSERT(pTbl); + y *= 0.8; + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x *= pTbl[m]; + break; + case 7: + case 8: + if( wave == 7 ){ + y -= ys; + } + x *= kc7; + y *= kc7; + q = -y * kc; + w = (y||x) ? atan2(x, q) : 0.0; + p = sqrt(q * q + x * x); + x = w * kx; + if( p >= kc3 ){ + if( wave == 8 ){ + x += xs; + if( x < 0 ) x += 2*xs; + x = fmod(x, 2*xs-1); + x -= xs; + } + p = (p - kc3) * 3; + y = (-(p) + ys); + } + else { + y = ys; + } + break; + case 9: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 10: + case 11: + case 36: + case 37: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y += pTbl[m]; + break; + case 12: + x *= 0.8; + p = (y+ys)*0.5; + w = xs * xs - x * x; + if( w >= 0 ){ + w = sqrt(w) * ks/2.0 - xs*0.25; + y -= w; + } + else { + y = ys; + } + + w = ys * ys - p * p; + if( w > 0 ){ + w = ys / sqrt(w); + x *= w; + } + else { + x = xs; + } + break; + case 13: + x += xs / 3; + y += ys / 3; + x *= 0.75; + y *= 0.75; + if( (y >= 0) && (x >= 0) ){ // C + y = y * 2 - ys; + x = x * 2 - xs; + } + else if( (-y*kc3 >= -x) ){ // A + x = (x - y*kc3) * 2 - xs; + y = y * kc7 * 3 + ys; + } + else { // B + y = (y - x/kc3) * 2 - ys; + x = x * kx * 3 * kc + xs; + } +// m = int(y); n = int(x); +// if( (n ==(-xs+1))||(n==(xs-1))||(m==(-ys+1))||(m==(ys-1)) ){ +// x = xs-1; y = ys-1; +// } + break; + case 14: + y += kc3; + w = (x||y) ? atan2(x, y*kc) : 0.0; + p = fabs(ks + cos(w)); + p = (p > VMIN) ? 1.0 / p : VMAX; + y *= p; + ASSERT(pTbl); + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x *= p * pTbl[m]; + break; + case 15: + x *= 1.7; y *= 1.7; + p = fabs(x); q = fabs(y); + w = (x||y) ? atan2(p, q*kc) : 0.0; + p = 1 + sin(w * kc3); + p = (p > VMIN) ? 1.0 / p : VMAX; + x *= p; + y *= p; + break; + case 16: + case 17: + case 22: + ASSERT(pTbl); + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x *= pTbl[m]; + break; + case 18: + case 19: + case 20: + case 21: + case 23: + case 24: + ASSERT(pTbl); + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + break; + case 25: + y += ys; + x *= kc7; + y *= kc7; + q = y * kc; + w = (y||x) ? atan2(x, q) : 0.0; + p = sqrt(q * q + x * x); + x = w * kx; + if( p >= kc3 ){ + p = (p - kc3) * 3; + y = p - ys; + } + else { + y = -ys; + } + break; + case 26: + case 28: + case 30: + case 31: + case 34: + ASSERT(pTbl); + if( y < 0 ){ + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + } + else { + y *= kc3; + } + break; + case 27: + case 29: + case 32: + case 33: + case 35: + ASSERT(pTbl); + if( y > 0 ){ + m = x + xs; + if( m >= bw ) m = bw-1; + if( m < 0 ) m = 0; + y *= pTbl[m]; + } + else { + y *= kc3; + } + break; + case 38: + ASSERT(pTbl); + m = y + ys; + if( m >= bh ) m = bh-1; + if( m < 0 ) m = 0; + x += pTbl[m]; + break; + default: + break; + } + if( y > 0 ){ m = int(y); } else { m = int(y-1); } + if( x > 0 ){ n = int(x); } else { n = int(x-1); } +#if 0 + double q = y - m; + double p = x - n; + double pp = 1.0 - p; + double qq = 1.0 - q; + if( (m >= -ys) && (m < ys-1) && (n >= -xs) && (n < xs-1) ){ + LPBYTE sp1 = &pSrc[((m+ys)*bw) + n + xs]; + LPBYTE sp2 = &pSrc[((m+ys+1)*bw) + n + xs]; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + int b = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + *tp++ = b >= 0x40 ? 0x80 : 0; + } + else { + *tp++ = *sp1; + } + } + else { + *tp++ = 0; + } +#else + if( (m >= -ys) && (m < ys-1) && (n >= -xs) && (n < xs-1) ){ + *tp++ = pSrc[((m+ys)*bw) + n + xs]; + } + else { + *tp++ = 0; + } +#endif + } + } + if( pTbl ) delete pTbl; +#if MeasureAccuracy + if( QueryPerformanceCounter(&m_liPCurPer) ){ + m_dlDiffPer2 = m_liPCurPer.QuadPart - m_liPOldPer.QuadPart; + m_liPOldPer = m_liPCurPer; + } +#endif + { + LPBYTE sp = pDest; + RECT mc; + mc.left = m_XW; mc.right = 0; + mc.top = m_YW; mc.bottom = 0; + int x, y; + for( y = 0; y < m_YW; y++ ){ + for( x = 0; x < m_XW; x++, sp++ ){ + if( *sp ){ + if( mc.left > x ) mc.left = x; + if( mc.right < x ) mc.right = x; + if( mc.top > y ) mc.top = y; + if( mc.bottom < y ) mc.bottom = y; + } + } + } + m_rc = mc; + } + if( m_Filter & 0x30000 ){ + MFilter(pDest); + } + else { + delete m_pTbl; + m_pTbl = pDest; + } +} +//--------------------------------------------------------------------------- +// メディアンフィルタ +void __fastcall CItem::MFilter(LPBYTE pSrc) +{ + int XW = m_XW; + int YW = m_YW; + int x, y; + LPBYTE sp, tp, rp; + RECT mc = m_rc; + if( !mc.left ) mc.left++; + if( !mc.top ) mc.top++; + LPBYTE pDest = m_pTbl; + memset(pDest, 0, XW*YW); + int n; + int count = m_Filter & 0x00ff; + int sw = (m_Filter >> 16) - 1; + for( int i = 0; i <= count; i++ ){ + if( i ){ + if( pSrc != m_pTbl ){ + pDest = pSrc; + pSrc = m_pTbl; + } + else { + pSrc = pDest; + pDest = m_pTbl; + } + memset(pDest, 0, XW*YW); + } + if( m_Grade == 4 ){ + LPBYTE zp; + if( sw ){ + for( y = mc.top; y <= mc.bottom; y++ ){ + sp = &pSrc[y*XW+mc.left]; + tp = &pDest[y*XW+mc.left]; + for( x = mc.left; x <= mc.right; x++, sp++, tp++ ){ + n = 0; + rp = sp - 1; + if( *rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + rp = sp - XW - 1; + if( *rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + rp = sp + XW - 1; + if( *rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + if( n >= 5 ){ + *tp = *zp; + } + } + } + } + else { + for( y = mc.top; y <= mc.bottom; y++ ){ + sp = &pSrc[y*XW+mc.left]; + tp = &pDest[y*XW+mc.left]; + for( x = mc.left; x <= mc.right; x++, sp++, tp++ ){ + n = 0; + rp = sp - 1; + if( *rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + if( *++rp ){ n++; zp = rp;} + rp = sp - XW; + if( *rp ){ n++; zp = rp;} + rp = sp + XW; + if( *rp ){ n++; zp = rp;} + if( n >= 3 ) *tp = *zp; + } + } + } + } + else { + if( sw ){ + for( y = mc.top; y <= mc.bottom; y++ ){ + sp = &pSrc[y*XW+mc.left]; + tp = &pDest[y*XW+mc.left]; + for( x = mc.left; x <= mc.right; x++, sp++, tp++ ){ + n = 0; + rp = sp - 1; + if( *rp++ ) n++; + if( *rp++ ) n++; + if( *rp ) n++; + rp = sp - XW - 1; + if( *rp++ ) n++; + if( *rp++ ) n++; + if( *rp ) n++; + rp = sp + XW - 1; + if( *rp++ ) n++; + if( *rp++ ) n++; + if( *rp ) n++; + if( n >= 5 ){ + *tp = 0x80; + } + } + } + } + else { + for( y = mc.top; y <= mc.bottom; y++ ){ + sp = &pSrc[y*XW+mc.left]; + tp = &pDest[y*XW+mc.left]; + for( x = mc.left; x <= mc.right; x++, sp++, tp++ ){ + n = 0; + rp = sp - 1; + if( *rp++ ) n++; + if( *rp++ ) n++; + if( *rp ) n++; + if( *(sp-XW) ) n++; + if( *(sp+XW) ) n++; + if( n >= 3 ) *tp = 0x80; + } + } + } + } + } + if( pDest == m_pTbl ){ + delete pSrc; + } + else { + delete m_pTbl; + m_pTbl = pDest; + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall CItem::ConvChar(LPSTR pStr) +{ + char bf[8192]; + LPCSTR p; + LPSTR t = bf; + for( p = pStr; *p; p++ ){ + if( (_mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD) && *(p+1) ){ + *t++ = *p++; + *t++ = *p; + } + else if( (*p == '\\') && (*(p+1)=='x') ){ + p+=2; + *t++ = (char)htoin(p, 2); + p++; + } + else if( (*p == '\\') && (*(p+1)=='$') ){ + p+=2; + *t++ = (char)htoin(p, 2); + p+=2; + *t++ = (char)htoin(p, 2); + p++; + } + else if( (*p == '\t') && (m_Align) ){ + *t++ = ' '; + } + else { + *t++ = *p; + } + } + *t = 0; + strcpy(pStr, bf); +} +//--------------------------------------------------------------------------- +void __fastcall AddStyle(AnsiString &as, BYTE charset, DWORD style) +{ + switch(charset){ + case ANSI_CHARSET: + as += sys.m_MsgEng ? "/ANSI" : "/欧文"; + break; + case SHIFTJIS_CHARSET: + as += sys.m_MsgEng ? "/Japanese" : "/日本語"; + break; + case HANGEUL_CHARSET: + as += sys.m_MsgEng ? "/Korean(Hangul)" : "/ハングル"; + break; + case JOHAB_CHARSET: + as += sys.m_MsgEng ? "/Korean(Johab)" : "/ハングル(Johab)"; + break; + case CHINESEBIG5_CHARSET: // 台湾 + as += sys.m_MsgEng ? "/Chinese(BIG5)" : "/中国語(繁体)"; + break; + case 134: // 中国語簡略 + as += sys.m_MsgEng ? "/Chinese(GB2312)" : "/中国語(簡体)"; + break; + case SYMBOL_CHARSET: + as += sys.m_MsgEng ? "/Symbol" : "/シンボル"; + break; + default: + break; + } + if( style & FSBOLD ) as += sys.m_MsgEng ? "/Bold" : "/太字"; + if( style & FSITALIC ) as += sys.m_MsgEng ? "/Italic" : "/斜体"; + if( style & FSUNDERLINE ) as += sys.m_MsgEng ? "/UnderLine" : "/下線"; + if( style & FSSTRIKEOUT ) as += sys.m_MsgEng ? "/StrikeOut" : "/取消し線"; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CItem::Draw(Graphics::TBitmap *pDest, LPCSTR pText) +{ + if( (pText == NULL) || !*pText ) return pDest; + + CWaitCursor w(!m_Draft); + + m_Back.c = pDest->Canvas->Pixels[0][0]; + m_Back.d &= 0x00ffffff; + m_cBack = m_Back; + if( m_pFont == NULL ){ + m_pFont = new TFont(); + m_pFont->Assign(pDest->Canvas->Font); + m_pFont->Size = 18*6; + UpdateFont(); + } + else if( m_OrgXW >= 0 ){ + SetFontSize(pDest); + } + SetMBCP(m_pFont->Charset); + + AnsiString as = pText; + ConvChar(as.c_str()); + pText = as.c_str(); + + LPCSTR pOrgText = pText; + if( m_Zero ){ + pText = ZeroConv(pText, m_pFont->Charset); + } + + pDest->Canvas->Font = m_pFont; + m_FW = pDest->Canvas->TextHeight(pText); + if( !m_FW ) m_FW++; + m_OYWC = int((short)m_OYW); + if( m_OYW ){ + if( m_OYWS ){ + m_OYWS &= 0x0000ffff; + m_OYWS |= m_FW << 16; + int oyw = m_OYWS & 0x0000ffff; + if( oyw ) m_OYWC = m_OYWC * m_FW / oyw; + } + else { // 最初のフォントサイズの設定 + m_OYWS = (m_FW << 16) | m_FW; + } + } + int xw, yw; + int n = GetMaxWH(xw, yw, pDest, pText); + m_Row = n; + m_FW = yw; + if( m_OYWC && n ){ + yw = (yw + m_OYWC) * (n - 1) + yw; + if( yw < m_FW ) yw = m_FW; + } + else { + yw *= n; + } + if( m_fsCode & FSITALIC ){ +// xw += yw / 12; + xw += m_FW / 4; + } + if( !yw ) yw = 2; + if( !xw ) xw = 2; + + if( m_Shadow && (m_cBack.d == m_ColB[0].d) ){ + m_cBack = GetUniqueColor(m_cBack); + } + if( m_Grade == 4 ){ + while(1){ + int f = TRUE; + for( int i = 0; i < AN(m_ColF); i++ ){ + if( m_cBack.c == GetIndexColor(i) ){ + f = FALSE; + break; + } + } + if( f ){ + break; + } + else { + m_cBack = GetUniqueColor(m_cBack); + } + } + } + else if( m_cBack.d == m_ColG[0].d ){ + m_cBack = GetUniqueColor(m_cBack); + } + + MultProc(); + + RECT rc; + rc.left = rc.top = 0; + rc.right = xw; + rc.bottom = yw; + + if( m_Rot ){ + if( ABS(m_Rot - 90) < 10 ) rc.right += m_FW/6; + if( ABS(m_Rot - 180) < 10 ) rc.right += m_FW/6; + if( ABS(m_Rot - 270) < 10 ) rc.right += m_FW/6; +// rc.right += m_FW/2; +// rc.bottom += m_FW/2; + double s = 2 * PI * m_Rot / 360; + m_CosX = cos(s); + m_SinX = sin(s); + int xc = rc.right/2; + int yc = rc.bottom/2; + POINT N[5]; + N[0].x = -xc; + N[0].y = -yc; + N[1].x = xc; + N[1].y = -yc; + N[2].x = xc; + N[2].y = yc; + N[3].x = -xc; + N[3].y = yc; + N[4].x = rc.left - xc; + N[4].y = rc.top - yc; + int i; + for( i = 0; i < 5; i++ ){ + int x = N[i].x * m_CosX + N[i].y * m_SinX; + int y = -N[i].x * m_SinX + N[i].y * m_CosX; + N[i].x = x + xc; N[i].y = y + yc; + } + int x1, x2, y1, y2; + x1 = x2 = N[0].x; y1 = y2 = N[0].y; + for( i = 1; i < 4; i++ ){ + if( x1 > N[i].x ) x1 = N[i].x; + if( x2 < N[i].x ) x2 = N[i].x; + if( y1 > N[i].y ) y1 = N[i].y; + if( y2 < N[i].y ) y2 = N[i].y; + } + int xo = N[4].x - x1; + int yo = N[4].y - y1; + if( ABS(m_Rot - 90) < 10 ) yo += m_FW/12; + if( ABS(m_Rot - 180) < 10 ) xo += m_FW/12; +// if( ABS(m_Rot - 270) < 10 ) yo += m_FW/12; + rc.left += xo; rc.right += xo; + rc.top += yo; rc.bottom += yo; + xw = x2 - x1 + 1; yw = y2 - y1 + 1; + } + + if( m_3d & 0x00010000 ){ + int xm = m_3d & 0x00ff; + int ym = (m_3d >> 8) & 0x00ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + if( m_Rot ){ + int x = xm * m_CosX + ym * m_SinX; + int y = -xm * m_SinX + ym * m_CosX; + xm = x; + ym = y; + } + if( xm < 0 ){ + rc.left -= xm; + rc.right -= xm; + } + if( ym < 0 ){ + rc.top -= ym; + rc.bottom -= ym; + } + xw += ABS(xm); + yw += ABS(ym); + } + + switch(m_Shadow){ + case 1: + xw += m_Line; + yw += m_Line; + break; + case 2: + rc.left += m_Line; + rc.right += m_Line; + rc.top += m_Line; + rc.bottom += m_Line; + xw += m_Line*2; + yw += m_Line*2; + break; + case 3: + xw += m_Line*2; + yw += m_Line*2; + break; + } + + if( m_fsCode & FSITALIC ){ // イタリックの場合の位置補正 + int oxw = 0; + int oyw = 0; + switch(GetPosFormat()){ + case DT_CENTER: + oxw = m_FW / 8; + if( m_Rot ){ + oxw *= m_CosX; + } + break; + case DT_RIGHT: + oxw = m_FW / 4; + if( m_Rot ){ + oxw *= m_CosX; + oyw = -(m_FW / 4) * m_SinX; + } + break; + default: + break; + } + rc.left -= oxw; + rc.right -= oxw; + rc.top -= oyw; + rc.bottom -= oyw; + } + + if( xw & 1 ) xw++; + if( yw & 1 ) yw++; + Graphics::TBitmap *pBmp = pDest; + if( !m_Draft ){ + if( xw > yw ){ + rc.top += (xw - yw)/2; + rc.bottom += (xw - yw)/2; + yw = xw; + } + else { + rc.left += (yw - xw)/2; + rc.right += (yw - xw)/2; + xw = yw; + } + } + if( (pDest->Width != xw) || (pDest->Height != yw) ){ + pBmp = CreateBitmap(xw, yw); + FillBitmap(pBmp, m_cBack); + } + else if( m_Back.d != m_cBack.d ){ + FillBitmap(pBmp, m_cBack); + } + + MultProc(); + UCOL col = m_ColG[0]; + if( m_Draft && (col.d == m_Back.d) ) col.d = col.d ^ 0x00ffffff; + DrawText(rc, pBmp, pText, col); + Graphics::TBitmap *pNew = pBmp; + if( m_Draft ){ + if( m_BmpXW < 0 ){ + double sc = m_sperspect.s * 3.0 / m_sperspect.v; + xw *= sc; + yw *= sc; + } + else { + xw = m_BmpXW; + yw = m_BmpYW; + } + pNew = CreateBitmap(xw, yw); + StretchCopy(pNew, pBmp, HALFTONE); + if( pDest != pBmp ) delete pBmp; + pBmp = pNew; + } + else if( !m_Draft ){ + CreateTable(pBmp); + +#if MeasureAccuracy + QueryPerformanceCounter(&m_liPOld); +#endif + Perspect(); +#if MeasureAccuracy + if( QueryPerformanceCounter(&m_liPCur) ){ + m_dlDiff1 = m_liPCur.QuadPart - m_liPOld.QuadPart; + m_liPOld = m_liPCur; + } +#endif + pNew = DrawExt(pBmp); +#if MeasureAccuracy + if( QueryPerformanceCounter(&m_liPCur) ){ + m_dlDiff2 = m_liPCur.QuadPart - m_liPOld.QuadPart; + m_liPOld = m_liPCur; + } +#endif + pNew = AdjustMinimized(pNew); + xw = pNew->Width; + yw = pNew->Height; +#if MeasureAccuracy + if( QueryPerformanceCounter(&m_liPCur) ){ + m_dlDiff3 = m_liPCur.QuadPart - m_liPOld.QuadPart; + m_liPOld = m_liPCur; + } +#endif + m_BmpXW = xw; + m_BmpYW = yw; + } + m_OrgXW = xw; + m_OrgYW = yw; + if( pBmp != pDest ) delete pDest; + pDest = pNew; + if( pOrgText != pText ) delete pText; + + // set transparent color to (0,0) for overlay + LPBYTE p = (LPBYTE)pDest->ScanLine[0]; + ASSERT(p); + *p++ = m_cBack.b.b; + *p++ = m_cBack.b.g; + *p = m_cBack.b.r; + + MultProc(); + return pDest; +} + + + \ No newline at end of file diff --git a/CItems/TextArt/Comlib.h b/CItems/TextArt/Comlib.h new file mode 100644 index 0000000..aeec450 --- /dev/null +++ b/CItems/TextArt/Comlib.h @@ -0,0 +1,329 @@ +#ifndef ComLibH +#define ComLibH +#include +#include +#include +#include +#include +#include +#include +#include + +#define MeasureAccuracy FALSE + +#define NDEBUG // Remove this symbol, if you would like to do debug +#include +#define ASSERT(c) assert(c) + +#define AN(c) (sizeof(c)/sizeof(c[0])) +#define ABS(c) (((c)<0)?(-(c)):(c)) +#define PI 3.1415926535897932384626433832795 + +typedef const BYTE* LPCBYTE; +typedef double* LPDOUBLE; +typedef const double* LPCDOUBLE; +typedef union { + struct { + BYTE r; + BYTE g; + BYTE b; + BYTE s; + }b; + DWORD d; + TColor c; +}UCOL; + +#define VER "TextArt Version 1.06" +#define AUT "(C) JE3HHT 2002-2003." +#define TTL "MMSSTV custom item" +#define TTLJ "MMSSTV カスタムアイテム" // Japanese code + +#define ININAME "TextArt.ini" +#define USERMASK "TextArt.bmp" + +#define FSBOLD 1 +#define FSITALIC 2 +#define FSUNDERLINE 4 +#define FSSTRIKEOUT 8 + +#define DISFONTSMOOTHING 0x00000001 + +// These prototypes are the functions in the MMSSTV. +// ---- Refer to the comment of the mcmFunc() --- +/*0*/typedef HBITMAP (__cdecl *mmLoadImageMenu)(int sw, int xw, int yw); +/*1*/typedef HBITMAP (__cdecl *mmLoadImage)(LPCSTR pName); +/*2*/typedef HBITMAP (__cdecl *mmLoadHistImage)(void); +/*3*/typedef int (__cdecl *mmSaveImageMenu)(HBITMAP hb, LPCSTR pName, LPCSTR pFolder); +/*4*/typedef int (__cdecl *mmSaveImage)(HBITMAP hb, LPCSTR pName); +/*5*/typedef HBITMAP (__cdecl *mmPasteImage)(int sw, int xw, int yw); +/*6*/typedef int (__cdecl *mmGetMacKey)(LPSTR pDest, int cbDest); +/*7*/typedef int (__cdecl *mmConvMac)(LPSTR pDest, LPCSTR pSrc, int cbDest); +/*8*/typedef HBITMAP (__cdecl *mmCreateDIB)(int xw, int yw); +/*9*/typedef void (__cdecl *mmMultProc)(void); +/*10*/typedef void (__cdecl *mmMultProcA)(void); +/*11*/typedef int (__cdecl *mmColorComp)(LPDWORD pCol); +/*12*/typedef HBITMAP (__cdecl *mmLoadRxImage)(void); +/*13*/typedef void (__cdecl *mmView)(HBITMAP hb); +/*14*/typedef int (__cdecl *mmAdjCol)(HBITMAP hb); +/*15*/typedef int (__cdecl *mmClip)(HBITMAP hbDest, HBITMAP hbSrc); + +void __fastcall InitSys(HINSTANCE hinst); +void __fastcall MultProc(void); +char __fastcall LastC(LPCSTR p); +void __fastcall SetCurDir(LPSTR t, int size); +void __fastcall SetDirName(LPSTR t, LPCSTR pName); +void __fastcall Yen2CrLf(AnsiString &ws, AnsiString cs); +void __fastcall CrLf2Yen(AnsiString &ws, AnsiString cs); +int __fastcall GetActiveIndex(TPageControl *pp); +void __fastcall LoadStringsFromIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg); +void __fastcall SaveStringsToIniFile(TStrings *pList, LPCSTR pSect, LPCSTR pName, int msg); +void __fastcall InitCustomColor(TColorDialog *tp); +void __fastcall AddCustomColor(TColorDialog *tp, TColor col); +Graphics::TBitmap * __fastcall CreateBitmap(int xw, int yw); +BOOL __fastcall IsSameBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc); +void __fastcall FillBitmap(Graphics::TBitmap *pDest, UCOL ucol); +void __fastcall FillBitmap(Graphics::TBitmap *pDest, TColor col); +void __fastcall CopyBitmap(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc); +void __fastcall CopyBitmap(Graphics::TBitmap *pBitmap); +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap); +void __fastcall StretchCopy(Graphics::TBitmap *pDest, Graphics::TBitmap *pSrc, int mode); + +int __fastcall IsFile(LPCSTR pName); +void __fastcall SetMBCP(BYTE charset); +void __fastcall AddStyle(AnsiString &as, BYTE charset, DWORD style); +void __fastcall LoadFontFromInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile); +void __fastcall SaveFontToInifile(TFont *pFont, LPCSTR pSect, TMemIniFile *pIniFile); + +void __fastcall ExecPB(LPCSTR pName); +HWND __fastcall IsPB(void); + +int FontStyle2Code(TFontStyles style); +TFontStyles Code2FontStyle(int code); + +//--------------------------------------------------------------------------- +//CBitStreamクラス +class CBitStream { +private: + BYTE *m_pBase; + int m_BitCount; + int m_Alloc; +public: + CBitStream(void *pData){ SetData(pData); }; + CBitStream(){ SetData(NULL); }; + void SetData(void *pData){ + m_pBase = (BYTE *)pData; + m_BitCount = 0; + m_Alloc = FALSE; + }; + DWORD GetData(int n); + void GetText(LPSTR p, int n); + void Skip(int n){ m_BitCount += n;}; + + void PutData(DWORD d, int n); + void PutText(LPCSTR p, int n); + BYTE GetSum(void); +}; + +//--------------------------------------------------------------------------- +//CItemクラス +typedef struct { // Do not change the format + int ver; + int flag; + double ax; + double ay; + double px; + double py; + double pz; + double rz; + double rx; + double ry; + double v; + double s; + double r; +}SPERSPECT; +typedef SPERSPECT* LPSPERSPECT; +typedef const SPERSPECT* LPCSPERSPECT; + +class CItem +{ +public: + int m_Ver; + int m_Align; + int m_Grade; + int m_Shadow; + int m_Line; + int m_Zero; + DWORD m_3d; + AnsiString m_Text; + TFont *m_pFont; + UCOL m_ColG[4]; + UCOL m_ColB[4]; + UCOL m_ColF[6]; + UCOL m_Back; + int m_OrgXW; + int m_OrgYW; + int m_BmpXW; + int m_BmpYW; + int m_OYW; + DWORD m_OYWS; + int m_Rot; + int m_Filter; + + int m_SC; + SPERSPECT m_sperspect; + + Graphics::TBitmap *m_pMaskBmp; // ビットマップマスク +#if MeasureAccuracy + LARGE_INTEGER m_liPCur, m_liPOld; + DWORDLONG m_dlDiff1, m_dlDiff2, m_dlDiff3; + LARGE_INTEGER m_liPCurPer, m_liPOldPer; + DWORDLONG m_dlDiffPer1, m_dlDiffPer2; +#endif +private: + UCOL m_cBack; + int m_Draft; + int m_fsCode; + int m_Pos; + DWORD m_Ex; + int m_FW; + double m_SinX; + double m_CosX; + int m_OYWC; + int m_Row; + TMemoryStream *m_pMemStream; + + + // 3D展開用のワーク + int m_XW, m_YW; + LPBYTE m_pTbl; + LPBYTE *m_pAdr; + RECT m_rc; +private: + void __fastcall LoadDefault(void); + void __fastcall UpdateDefault(void); + void __fastcall SetFontSize(Graphics::TBitmap *pDest); + int __fastcall GetMaxWH(int &W, int &H, Graphics::TBitmap *pDest, LPCSTR pText); + UINT __fastcall GetPosFormat(void); + UINT __fastcall GetDrawFormat(void); + void __fastcall DrawText(RECT rc, Graphics::TBitmap *pDest, LPCSTR pText, UCOL ucol); + void __fastcall DrawText_(RECT rc, Graphics::TBitmap *pDest, LPCSTR pText, int &nc); + void __fastcall CreateTable(Graphics::TBitmap *pDest); + Graphics::TBitmap* __fastcall DrawExt(Graphics::TBitmap *pDest); + Graphics::TBitmap* __fastcall AdjustMinimized(Graphics::TBitmap *pSrc); + void __fastcall Draw3D(UCOL cl[2]); + void __fastcall DrawColorMask(int X, int Y, UCOL col); + + void __fastcall Perspect(void); + void __fastcall MFilter(LPBYTE pSrc); + void __fastcall ConvChar(LPSTR pStr); + +protected: +public: + __fastcall CItem(void); + __fastcall ~CItem(); + void __fastcall Create(LPCBYTE ps, DWORD size); + DWORD __fastcall GetItemType(void); + LPCBYTE __fastcall CreateStorage(LPDWORD psize); + void __fastcall DeleteStorage(LPCBYTE pStorage); + void __fastcall Copy(CItem *sp); + int __fastcall EditDialog(HWND hWnd); + int __fastcall FontDialog(HWND hWnd); + DWORD __fastcall GetOrgSize(void); + void __fastcall SetPos(DWORD pos, DWORD size, DWORD tsize); + inline LPCSTR __fastcall GetText(void){ + return m_Text.c_str(); + }; + inline void __fastcall SetDraft(int draft){ + m_Draft = draft; + }; + void __fastcall UpdateFont(void); + void __fastcall LoadFromInifile(LPCSTR pSect, LPCSTR pName, BOOL fMask); + void __fastcall SaveToInifile(LPCSTR pSect, LPCSTR pName, BOOL fMask); + void __fastcall DeleteInifile(LPCSTR pSect, LPCSTR pName); + Graphics::TBitmap* __fastcall Draw(Graphics::TBitmap *pDest, LPCSTR pText); + inline void __fastcall SetEx(DWORD ex){ m_Ex = ex;}; + inline DWORD __fastcall GetEx(void){return m_Ex;}; + inline void __fastcall SetPos(int pos){ m_Pos = pos;}; + inline DWORD __fastcall GetPos(void){return m_Pos;}; + int __fastcall GetTrueOYW(void); + + void __fastcall GetFont(LOGFONT *pLogfont); + void __fastcall SetFont(LOGFONT *pLogfont); + +#if MeasureAccuracy + int __fastcall Get1stXW(){return m_XW;}; + int __fastcall Get1stYW(){return m_YW;}; +#endif +}; + +class CWaitCursor +{ +private: + TCursor sv; +public: + CWaitCursor(BOOL sw); + CWaitCursor(); + ~CWaitCursor(); + void Delete(void); + void Wait(void); +}; + +typedef struct { + AnsiString m_Name; + int m_Height; + BYTE m_Charset; + DWORD m_Style; +}FONTDATA; + +enum { + fmJA, + fmHL, + fmJOHAB, + fmBV, + fmBY, + fmEND, +}; +typedef struct { + HINSTANCE m_hInstance; + + DWORD m_dwVersion; + int m_WinNT; + UINT m_CodePage; + int m_MsgEng; + int m_BitPixel; + mmLoadImageMenu m_fLoadImageMenu; + mmPasteImage m_fPasteImage; + mmGetMacKey m_fGetMacKey; + mmConvMac m_fConvMac; + mmMultProc m_fMultProc; + mmColorComp m_fColorComp; + mmAdjCol m_fAdjCol; + mmClip m_fClip; + DWORD m_DefStgSize; + LPBYTE m_pDefStg; + TStringList *m_pTextList; + TStringList *m_pStyleList; + char m_BgnDir[512]; + + AnsiString m_Msg; + TStringList *m_pFontList; + + Graphics::TBitmap *m_pBitmapTemp; + int m_DefaultPage; + int m_SBMListState; + + UCOL m_MaskC1; + UCOL m_MaskC2; + + int m_CodeLeft; + int m_CodeTop; + int m_CodeOut; + + BOOL m_fEudc; + AnsiString m_Eudc; + + BOOL m_fFontFam; + BOOL m_tFontFam[fmEND]; +}SYS; +extern SYS sys; +#endif diff --git a/CItems/TextArt/Item.ico b/CItems/TextArt/Item.ico new file mode 100644 index 0000000000000000000000000000000000000000..0e2c0b21d241fb851b72cfb4e378e1bb69dc67ea GIT binary patch literal 766 zcmc(d%?ZOW426}_V<0{C>|@91XkH^Huc84wNLL6L)K3ZdH}ud#B}>-R6SC|?q(MWt ziOcIEa%X>F0efPNT=60it}YQ0CdO&Q6Jk+R6~e|PW*%Xvr*Qp263LAWX#)tq$3@ND zCK=KZTkd=<{2AxGOHrs{{=pL?w;S_ukr>_nbz6> literal 0 HcmV?d00001 diff --git a/CItems/TextArt/TextArt.bmp b/CItems/TextArt/TextArt.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1c489a941a100de87e7f95131bb16e6d54d67332 GIT binary patch literal 221238 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 MNCA-o|49n`FAF`^Jpcdz literal 0 HcmV?d00001 diff --git a/CItems/TextArt/TextArt.bpr b/CItems/TextArt/TextArt.bpr new file mode 100644 index 0000000..dd2c607 --- /dev/null +++ b/CItems/TextArt/TextArt.bpr @@ -0,0 +1,182 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE セクション +# --------------------------------------------------------------------------- +# プロジェクトメイクファイルの以下のセクションは、IDE によって管理されます。 +# このセクションを変更する場合は、できるだけ IDE を使用するようにして +# ください。 +# --------------------------------------------------------------------------- + +VERSION = BCB.03 +# --------------------------------------------------------------------------- +PROJECT = TextArt.dll +OBJFILES = TextArt.obj Comlib.obj About.obj TextDlg.obj CodeVw.obj +RESFILES = textart.res +DEFFILE = +RESDEPEN = $(RESFILES) About.dfm TextDlg.dfm CodeVw.dfm +LIBFILES = +LIBRARIES = vclx35.lib VCL35.lib +SPARELIBS = VCL35.lib vclx35.lib +PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ + QRPT35.bpi TEEUI35.bpi VCLSMP35.bpi TEEDB35.bpi TEE35.bpi ibsmp35.bpi \ + NMFAST35.bpi INETDB35.bpi INET35.bpi +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +# --------------------------------------------------------------------------- +CFLAG1 = -WD -O2 -Hc -w -Ve -d -k- -vi -c -b- -w-par -w-inl -Vx +CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm +CFLAG3 = -Tkh30000 -ff +PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$L- -$D- -v -JPHN -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn /d_RTLDLL +LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gn +IFLAGS = +# --------------------------------------------------------------------------- +ALLOBJ = c0d32.obj sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1041 +CodePage=932 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=2 +Item0=_RTLDLL +Item1=_RTLDLL;USEPACKAGES + +[HistoryLists\hlHostApplication] +Count=1 +Item0=D:\Mmsstv\Mmsstv.exe + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication=D:\Mmsstv\Mmsstv.exe + +!endif + +# --------------------------------------------------------------------------- +# MAKE セクション +# --------------------------------------------------------------------------- +# IDE はプロジェクトファイルのこのセクションは使用していません。 +# コマンドラインの MAKE ユーティリティを使用してビルドするためのものです。 +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- + \ No newline at end of file diff --git a/CItems/TextArt/TextArt.cpp b/CItems/TextArt/TextArt.cpp new file mode 100644 index 0000000..826ed25 --- /dev/null +++ b/CItems/TextArt/TextArt.cpp @@ -0,0 +1,217 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +#include "ComLib.h" +#include "About.h" +//--------------------------------------------------------------------------- +USEUNIT("Comlib.cpp"); +USEFORM("About.cpp", AboutDlg); +USERC("textart.rc"); +USEFORM("TextDlg.cpp", TextDlgBox); +USEFORM("CodeVw.cpp", CodeView); +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + switch(reason){ + case DLL_PROCESS_ATTACH: + { + InitSys(hinst); + + _setmbcp(_MB_CP_ANSI); + HWND hMM = ::FindWindow("TMmsstv", NULL); + if( hMM != NULL ) Application->Handle = hMM; + } + break; + case DLL_PROCESS_DETACH: + sys.m_fMultProc = NULL; + if( sys.m_pDefStg != NULL ){ + CItem *pItem = new CItem; + pItem->Create(NULL, 0); + pItem->SaveToInifile("Default", ININAME, FALSE); + delete pItem; + delete sys.m_pDefStg; + sys.m_pDefStg = NULL; + } + if( sys.m_pTextList != NULL ){ + SaveStringsToIniFile(sys.m_pTextList, "Strings", ININAME, TRUE); + delete sys.m_pTextList; + sys.m_pTextList = NULL; + } + if( sys.m_pStyleList != NULL ){ + SaveStringsToIniFile(sys.m_pStyleList, "Styles", ININAME, FALSE); + delete sys.m_pStyleList; + sys.m_pStyleList = NULL; + } + if( sys.m_pFontList != NULL ){ + delete sys.m_pFontList; + sys.m_pFontList = NULL; + } + if( sys.m_pBitmapTemp != NULL ){ + delete sys.m_pBitmapTemp; + sys.m_pBitmapTemp = NULL; + } + break; + } + return 1; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmLanguage(DWORD lang) +{ + sys.m_MsgEng = lang; +} +//--------------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmAboutDialog(HWND hWnd) +{ + TAboutDlg *pBox = new TAboutDlg(NULL); + pBox->ShowModal(); + delete pBox; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HANDLE mcmCreateObject(LPCBYTE pStorage, DWORD Size) +{ + CItem *pItem = new CItem; + ASSERT(pItem); + if( pItem != NULL ) pItem->Create(pStorage, Size); + return (HANDLE)pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetItemType(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetItemType(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCBYTE mcmCreateStorage(HANDLE hObj, LPDWORD pSize) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->CreateStorage(pSize); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteStorage(HANDLE hObj, LPCBYTE pStorage) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->DeleteStorage(pStorage); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmDeleteObject(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + if( pItem != NULL ) delete pItem; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmEdit(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + int r = pItem->EditDialog(hWnd); + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmFont(HANDLE hObj, HWND hWnd) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + int r = pItem->FontDialog(hWnd); + ::SetForegroundWindow(hWnd); + return r; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +DWORD mcmGetOrgSize(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetOrgSize(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmPos(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + pItem->SetPos(pos, size, tsize); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +LPCSTR mcmGetUserText(HANDLE hObj) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + return pItem->GetText(); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateText(HANDLE hObj, HBITMAP hDest, LPCSTR pText) +{ + ASSERT(hObj); + ASSERT(hDest); + CItem *pItem = (CItem *)hObj; + + // Draw object to hDest + Graphics::TBitmap *pDest = new Graphics::TBitmap; + pDest->Handle = hDest; + pDest = pItem->Draw(pDest, pText); + + HBITMAP hb = pDest->ReleaseHandle(); + delete pDest; + return (hb != hDest) ? hb : NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +HBITMAP mcmUpdateImage(HANDLE hObj, HBITMAP hDest, HBITMAP hSrc) +{ + ASSERT(0); // This function should not be called + return NULL; +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetDraft(HANDLE hObj, DWORD draft) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetDraft(draft); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetEx(HANDLE hObj, DWORD ex) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetEx(ex); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmGetFont(HANDLE hObj, LOGFONT *pLogfont) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->GetFont(pLogfont); +} +//--------------------------------------------------------------------- +extern "C" __declspec(dllexport) +void mcmSetFont(HANDLE hObj, LOGFONT *pLogfont) +{ + ASSERT(hObj); + CItem *pItem = (CItem *)hObj; + + pItem->SetFont(pLogfont); +} + diff --git a/CItems/TextArt/TextArt.rc b/CItems/TextArt/TextArt.rc new file mode 100644 index 0000000..6dfcdc1 --- /dev/null +++ b/CItems/TextArt/TextArt.rc @@ -0,0 +1,4 @@ +#include "res.h" + +ID_ICON ICON DISCARDABLE "Item.ico" +ID_BUILTIN BITMAP DISCARDABLE "res\P.bmp" diff --git a/CItems/TextArt/TextDlg.cpp b/CItems/TextArt/TextDlg.cpp new file mode 100644 index 0000000..949bb7e --- /dev/null +++ b/CItems/TextArt/TextDlg.cpp @@ -0,0 +1,3438 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "res.h" +#include "TextDlg.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TTextDlgBox *TextDlgBox; +//--------------------------------------------------------------------- +__fastcall TTextDlgBox::TTextDlgBox(TComponent* AOwner) + : TForm(AOwner) +{ + MultProc(); + m_DisEvent = 1; + m_pBitmap = NULL; + m_pMaskBmp = NULL; + m_Change = 0; + m_DropProfile = 0; + m_FText = ""; + m_MemoDown = 0; + m_MouseHold = 0; + if( sys.m_MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + + Caption = VER" "TTL; + TabChar->Caption = "Set text and colors"; + TabMask->Caption = "Bitmap Mask"; + TabPer->Caption = "Deformations"; + CancelBtn->Caption = "Cancel"; + CancelBtn2->Caption = "Cancel"; + CancelBtn3->Caption = "Cancel"; + FontBtn->Caption = "Font"; + SBM->Caption = "Mac"; + SBL->Caption = "Code"; + GBG->Caption = "Gradation"; + GBS->Caption = "Shadow"; + GBA->Caption = "Misc"; + CBZero->Caption = "Slash zero"; + SBLD->Caption = "Del"; + SBLW->Caption = "Add"; + GBY->Caption = "Style profiles"; + L1->Caption = "Align"; + L2->Caption = "Style name"; + L33->Caption = "V.space"; + L34->Caption = "Rot."; + SBYD->Caption = "Del"; + SBYW->Caption = "Add"; + CBY->Text = "Untitled"; + + SBM->Hint = "Insert macro-keyword"; + SBL->Hint = "Character code list"; + SBC->Hint = "Choose color's component"; + SBLD->Hint = "Delete the text in the list"; + SBLW->Hint = "Add current text into the list"; + SBYD->Hint = "Delete the style in the profiles"; + SBYW->Hint = "Add current style into the profiles"; + SB3DD->Hint = "Make the shadow shorter"; + SB3DI->Hint = "Make the shadow longer"; + SBA1->Hint = "Left"; + SBA2->Hint = "Center"; + SBA3->Hint = "Right"; + SBA4->Hint = "Auto"; +// FontBtn->Hint = "Choose font"; + SBFD->Hint = "Make the font smaller"; + SBFI->Hint = "Make the font bigger"; + SBB->Hint = "Bold"; + SBI->Hint = "Italic"; + SBMSG->Hint = "Show messages list"; + Msg->Hint = "Copy the message to the text box with double click"; + SBGRev->Hint = "Reverses color's order"; + SBGRot->Hint = "Rotates color's order"; + SBGA->Hint = "Default combination"; + SBGRand->Hint = "Random combination"; + DefBtn->Caption = "Default"; + L51->Caption = "Rot.X"; + L52->Caption = "Rot.Y"; + L53->Caption = "Rot.Z"; + L54->Caption = "Move.Z"; + L55->Caption = "Move.Y"; + L56->Caption = "Move.X"; + L57->Caption = "ViewP."; + L58->Caption = "Scale.X"; + L59->Caption = "Scale.Y"; + L60->Caption = "Rot"; + L61->Caption = "Deformation rate"; + DefBtn->Hint = "Return to the default"; + SBR->Hint = "Return to the default"; + + L80->Caption = "Bitmap mask"; + CBBMask->Caption = "Enable bitmap mask"; + GB1->Caption = "Mask"; + GB2->Caption = "Built-in mask"; + GB3->Caption = "Edit mask"; + SBMLoad->Hint = "Load mask from file"; + SBMPaste->Hint = "Paste mask from the clipboard"; + SBMCopy->Hint = "Copy mask to the clipboard"; + SBMRot->Hint = "Rotates right"; + SBMMir->Hint = "Right and left turning over"; + SBAdjCol->Hint = "Adjusts mask image"; + SBClip->Hint = "Clipper"; + SBInvCol->Hint = "Inverts mask color"; + SBRotCol->Hint = "Rotates mask color"; + SBPtn->Hint = "Make random pattern"; + SBMEdit->Hint = "Edit mask"; + + GB4->Caption = "User definition mask"; + L90->Caption = "Drag&&Drop for registration"; + SBMList->Hint = "User definition mask"; + + GB5->Caption = "Filter"; + } + else { + Caption = VER" "TTLJ; + CBY->Text = "無題"; + } + SBFD->Glyph->Assign(SB3DD->Glyph); + SBFI->Glyph->Assign(SB3DI->Glyph); + MultProc(); + if( sys.m_pTextList == NULL ){ + sys.m_pTextList = new TStringList; + LoadStringsFromIniFile(sys.m_pTextList, "Strings", ININAME, TRUE); + MultProc(); + if(!sys.m_pTextList->Count){ + sys.m_pTextList->Add("%c\\r\\nde %m"); + sys.m_pTextList->Add("CQSSTV"); + sys.m_pTextList->Add("Best 73"); + } + } + ASSERT(sys.m_pTextList); + CBList->Items->Assign(sys.m_pTextList); + if( sys.m_pStyleList == NULL ){ + sys.m_pStyleList = new TStringList; + LoadStringsFromIniFile(sys.m_pStyleList, "Styles", ININAME, FALSE); + MultProc(); + } + CBY->Items->Assign(sys.m_pStyleList); + CBY->Sorted = TRUE; + int i; + if( sys.m_pFontList == NULL ){ + sys.m_pFontList = new TStringList; + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, ININAME); + TMemIniFile *pIniFile = new TMemIniFile(fname); + for( i = 0; i < 5; i++ ){ + char bf[32]; + sprintf(bf, "Font.%u", i); + AnsiString as = pIniFile->ReadString(bf, "FontName", ""); + if( !as.IsEmpty() ){ + BYTE charset = (BYTE)pIniFile->ReadInteger(bf, "FontSet", 0); + DWORD style = pIniFile->ReadInteger(bf, "FontStyle", 0); + AddStyle(as, charset, style); + } + sys.m_pFontList->Add(as); + } + delete pIniFile; + } + for( i = 0; i < 5; i++ ) SetSBF(i); + ShowHint = sys.m_WinNT; + MultProc(); + m_XC = -1; + + for( i = 0; i < AN(m_DirTB); i++ ){ + m_DirTB[i] = 1; + } + HBITMAP hb = ::LoadBitmap(sys.m_hInstance, MAKEINTRESOURCE(ID_BUILTIN)); + m_pBuiltInBmp = new Graphics::TBitmap; + m_pBuiltInBmp->Handle = hb; + + m_pMaskBak = NULL; + m_pCustomBmp = NULL; + m_pMListBmp = NULL; + m_pMLSrcBmp = NULL; + m_MLIndex = -1; + + PC1->Color = sys.m_MaskC1.c; + PC2->Color = sys.m_MaskC2.c; + m_MaskMouseCapture = FALSE; + m_MaskXW = m_MaskYW = 32; + m_MaskX = m_MaskY = 0; + m_pCodeView = NULL; + m_hClipNext = ::SetClipboardViewer(Handle); +#if UseDraft + m_Draft = 0; +#endif + m_ExecPB = 0; + srand(::GetTickCount()); + +#if 0 // 組み込みマスクビットマップの作成 +#define CUSTOMMAX 16 + Graphics::TBitmap *pBmp = CreateBitmap(32*CUSTOMMAX, 32); + Graphics::TBitmap *pSrc; + char name[256]; + for( i = 0; i < CUSTOMMAX; i++ ){ + wsprintf(name, "%sres\\P%u.bmp", sys.m_BgnDir, i+1); + FILE *fp = fopen(name, "rb"); + if( fp != NULL ){ + fclose(fp); + pSrc = new Graphics::TBitmap; + pSrc->LoadFromFile(name); + pBmp->Canvas->Draw(i*32, 0, pSrc); + delete pSrc; + } + } + wsprintf(name, "%sres\\P.bmp", sys.m_BgnDir); + pBmp->SaveToFile(name); + delete pBmp; +#endif +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormDestroy(TObject *Sender) +{ + Timer->Enabled = FALSE; + ::ChangeClipboardChain(Handle, m_hClipNext); + if( m_pBitmap != NULL ) delete m_pBitmap; + if( m_pMaskBmp != NULL ) delete m_pMaskBmp; + if( m_pMLSrcBmp != NULL ) delete m_pMLSrcBmp; + if( m_pCustomBmp != NULL ) delete m_pCustomBmp; + DeleteMaskSrc(); + if( m_pBuiltInBmp != NULL ) delete m_pBuiltInBmp; + if( m_pMaskBak ) delete m_pMaskBak; + MultProc(); + if( m_pMListBmp != NULL ){ + if( m_pMListBmp->Modified ){ + char name[256]; + wsprintf(name, "%s"USERMASK, sys.m_BgnDir); + try { + m_pMListBmp->SaveToFile(name); + } + catch(...){ + } + } + delete m_pMListBmp; + } + if( m_pCodeView ) delete m_pCodeView; + + ASSERT(sys.m_pTextList); + sys.m_pTextList->Assign(CBList->Items); + sys.m_MaskC1.c = PC1->Color; + sys.m_MaskC2.c = PC2->Color; + if( m_ExecPB ) QuitPB(FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TopMost(void) +{ +#if UseHWND + ::SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::NoTopMost(void) +{ +#if UseHWND + ::SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateUI(void) +{ + m_DisEvent++; + int f; + if( CBBMask->Checked ){ + SBG1->Visible = FALSE; + SBG2->Visible = FALSE; + SBG3->Visible = FALSE; + SBG4->Visible = FALSE; + SBG5->Visible = FALSE; + PG1->Visible = FALSE; + PG2->Visible = FALSE; + PG3->Visible = FALSE; + PG4->Visible = FALSE; + PG5->Visible = FALSE; + PG6->Visible = FALSE; + SBC->Visible = FALSE; + SBGA->Visible = FALSE; + SBGRand->Visible = FALSE; + SBGRot->Visible = FALSE; + SBGRev->Visible = FALSE; + L80->Visible = TRUE; + } + else { + SBG1->Visible = TRUE; + SBG2->Visible = TRUE; + SBG3->Visible = TRUE; + SBG4->Visible = TRUE; + SBG5->Visible = TRUE; + PG1->Visible = TRUE; + L80->Visible = FALSE; + int f = SBG1->Down ? FALSE : TRUE; + int f2 = SBG5->Down; + PG2->Visible = f; + PG3->Visible = f; + PG4->Visible = f; + SBC->Visible = f && !f2 && sys.m_fColorComp; + PG5->Visible = f2; + PG6->Visible = f2; + SBGA->Visible = f2; + SBGRand->Visible = f2; + SBGRot->Visible = f; + SBGRev->Visible = f; + } + f = !SBS1->Down; + if( !f ) CB3D->Checked = FALSE; + CB3D->Enabled = f; + PB1->Visible = f && (!SBS2->Down || !CB3D->Checked); + PB2->Visible = f && (SBS4->Down || CB3D->Checked); + PB3->Visible = f && CB3D->Checked; + UDL->Enabled = f && (SBS3->Down || !CB3D->Checked); + SBLW->Enabled = (!m_FText.IsEmpty() && CBList->Items->IndexOf(m_FText) < 0) ? TRUE : FALSE; + SBLD->Enabled = CBList->ItemIndex >= 0 ? TRUE : FALSE; + SBYW->Enabled = !CBY->Text.IsEmpty(); + SBYD->Enabled = !CBY->Text.IsEmpty() && (sys.m_pStyleList->IndexOf(CBY->Text) >= 0); + UDX->Enabled = CB3D->Checked; + UDY->Enabled = CB3D->Checked; + SB3DI->Enabled = CB3D->Checked; + SB3DD->Enabled = CB3D->Checked; + if( ShowHint ){ + char bf[32]; + sprintf(bf, "W = %d", UDL->Position); + UDL->Hint = bf; + sprintf(bf, "3D(Y) = %d", UDY->Position); + UDY->Hint = bf; + sprintf(bf, "3D(X) = %d", UDX->Position); + UDX->Hint = bf; + } + Msg->Visible = SBMSG->Down; + CBMSize->Enabled = CBBMask->Checked; + SBAdjCol->Visible = sys.m_fAdjCol != NULL; + SBClip->Visible = sys.m_fClip != NULL; + f = m_pMaskBmp != NULL; + SBMCopy->Enabled = f; + SBMRot->Enabled = f; + SBMMir->Enabled = f; + SBInvCol->Enabled = f; + SBRotCol->Enabled = f; + SBAdjCol->Enabled = f; + SBClip->Enabled = f; + + f = SBMList->Down; + GB1->Visible = !f; + GB4->Visible = f; + + f = !SB->Down; + TBSC->Enabled = f; + SBR->Enabled = f; + + TBF->Enabled = !SBFN->Down; + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateMemoFont(BYTE charset) +{ + switch(charset){ + case SHIFTJIS_CHARSET: + case HANGEUL_CHARSET: + case JOHAB_CHARSET: + case CHINESEBIG5_CHARSET: // + case 134: // 簡略 + break; + default: + charset = Font->Charset; + break; + } + m_DisEvent++; + if( Memo->Font->Charset != charset ){ + Memo->Font->Charset = charset; + } + m_DisEvent--; + UpdateFontBtnHint(); +} +//--------------------------------------------------------------------- +int __fastcall TTextDlgBox::Execute(CItem *pItem) +{ + MultProc(); + m_Item.Copy(pItem); + + if( (sys.m_DefaultPage >= 0) && (sys.m_DefaultPage < Page->PageCount) ){ + Page->ActivePage = Page->Pages[sys.m_DefaultPage]; + } + + UpdateDialog(&m_Item); + UpdateBitmap(); + UpdateSBSrc(); + m_DisEvent = 0; + SBMList->Down = sys.m_SBMListState; + if( SBMList->Down ) SBMListClick(NULL); + MultProc(); + int r = ShowModal(); + sys.m_DefaultPage = GetActiveIndex(Page); + sys.m_SBMListState = SBMList->Down; + if( Msg->Modified ) sys.m_Msg = Msg->Text; + if( r == IDOK ){ + MultProc(); +#if UseDraft + if( m_Draft ){ + m_Draft = 0; + UpdateItem(&m_Item); + } +#endif + pItem->Copy(&m_Item); + pItem->m_OrgXW = -1; + MultProc(); + return TRUE; + } + else { + MultProc(); + return FALSE; + } +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateFText(void) +{ + AnsiString as; + if( Memo->Text.IsEmpty() ){ + m_FText = ""; + } + else { + ::CrLf2Yen(as, Memo->Text); + LPSTR p = as.c_str(); + if( *p ){ + *(p+strlen(p)-1) = 0; + m_FText = p+1; + } + } + m_DisEvent++; + CBList->ItemIndex = CBList->Items->IndexOf(m_FText); + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateItem(CItem *pItem) +{ + UpdateUI(); + if( SBG1->Down ){ + pItem->m_Grade = 0; + } + else if( SBG2->Down ){ + pItem->m_Grade = 1; + } + else if( SBG3->Down ){ + pItem->m_Grade = 2; + } + else if( SBG4->Down ){ + pItem->m_Grade = 3; + } + else { + pItem->m_Grade = 4; + } + if( SBS1->Down ){ + pItem->m_Shadow = 0; + } + else if( SBS2->Down ){ + pItem->m_Shadow = 1; + } + else if( SBS3->Down ){ + pItem->m_Shadow = 2; + } + else { + pItem->m_Shadow = 3; + } + if( SBA1->Down ){ + pItem->m_Align = 0; + } + else if( SBA2->Down ){ + pItem->m_Align = 1; + } + else if( SBA3->Down ){ + pItem->m_Align = 2; + } + else { + pItem->m_Align = 3; + } + pItem->m_ColB[0].c = PB1->Color; + pItem->m_ColB[1].c = PB2->Color; + pItem->m_ColB[2].c = PB3->Color; + if( pItem->m_Grade == 4 ){ + pItem->m_ColF[0].c = PG1->Color; + pItem->m_ColF[1].c = PG2->Color; + pItem->m_ColF[2].c = PG3->Color; + pItem->m_ColF[3].c = PG4->Color; + pItem->m_ColF[4].c = PG5->Color; + pItem->m_ColF[5].c = PG6->Color; + } + else { + pItem->m_ColG[0].c = PG1->Color; + pItem->m_ColG[1].c = PG2->Color; + pItem->m_ColG[2].c = PG3->Color; + pItem->m_ColG[3].c = PG4->Color; + } + pItem->m_Line = UDL->Position; + pItem->m_Zero = CBZero->Checked; + pItem->m_Text = Memo->Text.c_str(); + pItem->m_3d = (CB3D->Enabled && CB3D->Checked) ? 0x00010000 : 0; + pItem->m_3d |= ((UDY->Position << 8)&0x0000ff00); + pItem->m_3d |= (UDX->Position & 0x000000ff); + pItem->m_OYW = UDOYW->Position & 0x0000ffff; + pItem->m_OYWS = 0; + pItem->m_Rot = UDRot->Position; + + LPSPERSPECT psp = &pItem->m_sperspect; + psp->ax = double(TBAX->Position)/20.0; + psp->ay = double(TBAY->Position)/20.0; + psp->px = double(TBPX->Position)/20.0; + psp->py = double(TBPY->Position)/20.0; + psp->pz = double(TBPZ->Position)/20.0; + psp->rx = TBRX->Position; + psp->ry = TBRY->Position; + psp->rz = TBRZ->Position; + psp->s = double(TBS->Position)/10.0; + psp->r = TBR->Position; + UpdateWaveBtn(1); + psp->flag = m_Wave; + pItem->m_SC = TBSC->Position; + + pItem->m_Filter = 0; + if( SBFA->Down ){ + pItem->m_Filter = 0x10000; + } + else if( SBFB->Down ){ + pItem->m_Filter = 0x20000; + } + pItem->m_Filter |= TBF->Position; + +#if UseDraft + if( m_Draft ){ + psp->s *= 2; + pItem->m_OYW = (UDOYW->Position/2) & 0x0000ffff; + } + pItem->m_pFont->Height = m_Draft ? m_FontHeight / 2 : m_FontHeight; +#else + pItem->m_pFont->Height = m_FontHeight; +#endif + pItem->UpdateFont(); + +#if 0 + static int count = 0; + char bf[256]; + wsprintf(bf, "%u - %u", m_Draft, count++ ); + Caption = bf; +#endif +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateDialog(CItem *pItem) +{ + m_DisEvent++; + switch(pItem->m_Grade){ + case 1: + SBG2->Down = TRUE; + break; + case 2: + SBG3->Down = TRUE; + break; + case 3: + SBG4->Down = TRUE; + break; + case 4: + SBG5->Down = TRUE; + break; + default: + SBG1->Down = TRUE; + break; + } + switch(pItem->m_Shadow){ + case 1: + SBS2->Down = TRUE; + break; + case 2: + SBS3->Down = TRUE; + break; + case 3: + SBS4->Down = TRUE; + break; + default: + SBS1->Down = TRUE; + break; + } + switch(pItem->m_Align){ + case 1: + SBA2->Down = TRUE; + break; + case 2: + SBA3->Down = TRUE; + break; + case 3: + SBA4->Down = TRUE; + break; + default: + SBA1->Down = TRUE; + break; + } + PB1->Color = pItem->m_ColB[0].c; + PB2->Color = pItem->m_ColB[1].c; + PB3->Color = pItem->m_ColB[2].c; + if( SBG5->Down ){ + PG1->Color = pItem->m_ColF[0].c; + PG2->Color = pItem->m_ColF[1].c; + PG3->Color = pItem->m_ColF[2].c; + PG4->Color = pItem->m_ColF[3].c; + PG5->Color = pItem->m_ColF[4].c; + PG6->Color = pItem->m_ColF[5].c; + } + else { + PG1->Color = pItem->m_ColG[0].c; + PG2->Color = pItem->m_ColG[1].c; + PG3->Color = pItem->m_ColG[2].c; + PG4->Color = pItem->m_ColG[3].c; + } + UDL->Position = SHORT(pItem->m_Line); + CBZero->Checked = pItem->m_Zero; + CB3D->Checked = pItem->m_3d & 0x00010000; + int xm = pItem->m_3d & 0x000000ff; + int ym = (pItem->m_3d >> 8) & 0x000000ff; + if( xm & 0x0080 ) xm |= 0xffffff80; + if( ym & 0x0080 ) ym |= 0xffffff80; + UDY->Position = SHORT(ym); + UDX->Position = SHORT(xm); + if( pItem->m_pFont != NULL ){ + m_FontHeight = pItem->m_pFont->Height; + UpdateMemoFont(pItem->m_pFont->Charset); + UpdateFontBtnHint(); + } + Memo->Text = pItem->m_Text.c_str(); + + UDOYW->Position = (SHORT)pItem->GetTrueOYW(); + UDRot->Position = (SHORT)pItem->m_Rot; + switch(pItem->m_Filter & 0x30000){ + case 0x10000: + SBFA->Down = TRUE; + break; + case 0x20000: + SBFB->Down = TRUE; + break; + default: + SBFN->Down = TRUE; + break; + } + TBF->Position = pItem->m_Filter & 0x00ff; + UpdateFText(); + + + LPSPERSPECT psp = &pItem->m_sperspect; + TBAX->Position = psp->ax * 20.0 + 0.5; + TBAY->Position = psp->ay * 20.0 + 0.5; + TBPX->Position = psp->px * 20.0; + TBPY->Position = psp->py * 20.0; + TBPZ->Position = psp->pz * 20.0; + TBRX->Position = psp->rx; + TBRY->Position = psp->ry; + TBRZ->Position = psp->rz; + TBS->Position = psp->s * 10.0 + 0.5; + TBR->Position = psp->r; + m_Wave = psp->flag; + UpdateWaveBtn(0); + TBSC->Position = (SHORT)pItem->m_SC; + UpdateHint(); + UpdateTB(); + + CBBMask->Checked = pItem->m_pMaskBmp != NULL; + if( pItem->m_pMaskBmp ){ + if( m_pMaskBmp ) delete m_pMaskBmp; + m_MaskXW = pItem->m_pMaskBmp->Width; + m_MaskYW = pItem->m_pMaskBmp->Height; + m_MaskX = m_MaskY = 0; + m_pMaskBmp = CreateBitmap(m_MaskXW, m_MaskYW); + m_pMaskBmp->Canvas->Draw(0, 0, pItem->m_pMaskBmp); + UpdateCBMSize(); + UpdateSBSrc(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateHint(void) +{ + if( sys.m_WinNT ){ + char bf[128]; + wsprintf(bf, "VP: %d", TBS->Position); + TBS->Hint = bf; + wsprintf(bf, "SX: %d", TBAX->Position); + TBAX->Hint = bf; + wsprintf(bf, "SY: %d", TBAY->Position); + TBAY->Hint = bf; + wsprintf(bf, "PX: %d", TBPX->Position); + TBPX->Hint = bf; + wsprintf(bf, "PY: %d", TBPY->Position); + TBPY->Hint = bf; + wsprintf(bf, "PZ: %d", TBPZ->Position); + TBPZ->Hint = bf; + wsprintf(bf, "RX: %d", TBRX->Position); + TBRX->Hint = bf; + wsprintf(bf, "RY: %d", TBRY->Position); + TBRY->Hint = bf; + wsprintf(bf, "RZ: %d", TBRZ->Position); + TBRZ->Hint = bf; + wsprintf(bf, "R: %d", TBR->Position); + TBR->Hint = bf; + wsprintf(bf, "%d", TBSC->Position); + TBSC->Hint = bf; + wsprintf(bf, "Level:%d", TBF->Position + 1); + TBF->Hint = bf; + } +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateWaveBtn(int dir) +{ + TSpeedButton *tbl[]={ + SB, SBZ1, SBZ2, SBZ3, SBZ4, SBZ5, SBZ6, SBZ7, + SBZ8, SBZ9, SBZ10, SBZ11, SBZ12, SBZ13, SBZ14, + SBZ15, SBZ16, SBZ17, SBZ18, SBZ19, SBZ20, SBZ21, + SBZ22, SBZ23, SBZ24, SBZ25, SBZ26, SBZ27, SBZ28, + SBZ29, SBZ30, SBZ31, SBZ32, SBZ33, SBZ34, SBZ35, + SBZ36, SBZ37, SBZ38, + NULL, + }; + if( dir ){ + for( int i = 0; tbl[i] != NULL; i++ ){ + if( tbl[i]->Down ){ + m_Wave = i; + break; + } + } + } + else { + if( m_Wave >= (AN(tbl)-1) ) m_Wave = 0; + tbl[m_Wave]->Down = TRUE; + } +} +//--------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateBitmap(void) +{ + MultProc(); + m_Change = 0; + UpdateItem(&m_Item); + char bf[1024]; + sys.m_fConvMac(bf, m_Item.GetText(), sizeof(bf)-1); + MultProc(); + if( m_pBitmap == NULL ){ + int xw = m_Item.m_OrgXW; + int yw = m_Item.m_OrgYW; + if( (xw < 0)||(yw < 0) ){ + xw = 160; + yw = 128; + } + m_pBitmap = CreateBitmap(xw, yw); + } + FillBitmap(m_pBitmap, m_Item.m_Back); + MultProc(); +#if MeasureAccuracy + LARGE_INTEGER liFreq; + + QueryPerformanceFrequency(&liFreq); + m_pBitmap = m_Item.Draw(m_pBitmap, bf); + int t1 = int(m_Item.m_dlDiff1 * 100000 / liFreq.QuadPart); + int t2 = int(m_Item.m_dlDiff2 * 100000 / liFreq.QuadPart); + int t3 = int(m_Item.m_dlDiff3 * 100000 / liFreq.QuadPart); + int t4 = t1 + t2 + t3; + int t1p = int(m_Item.m_dlDiffPer1 * 100000 / liFreq.QuadPart); + int t2p = int(m_Item.m_dlDiffPer2 * 100000 / liFreq.QuadPart); + int xw = m_Item.Get1stXW(); + int yw = m_Item.Get1stYW(); + sprintf(bf, "%ux%u, %u.%02u + %u.%02u + %u.%02u = %u.%02u (%u.%02u + %u.%02u)", + xw, yw, + t1 / 100, t1 % 100, + t2 / 100, t2 % 100, + t3 / 100, t3 % 100, + t4 / 100, t4 % 100, + t1p / 100, t1p % 100, + t2p / 100, t2p % 100 + ); + Caption = bf; +#else + m_pBitmap = m_Item.Draw(m_pBitmap, bf); +#endif +#if 1 + PBoxPaint(NULL); +#else + if( Page->ActivePage == TabChar ){ + PBox->Invalidate(); + } + else { + PBoxPer->Invalidate(); + } +#endif + UpdateHint(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FillPBox(TPaintBox *pBox) +{ + TRect rc; + rc.Left = 0; + rc.Top = 0; + rc.Right = pBox->Width; + rc.Bottom = pBox->Height; + pBox->Canvas->Brush->Color = clBtnFace; + pBox->Canvas->FillRect(rc); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxPaint(TObject *Sender) +{ + if( !IsWindowVisible(Handle) ) return; + if( m_pBitmap == NULL ) return; + + Graphics::TBitmap *pBitmap = m_pBitmap; + if( sys.m_BitPixel == 16 ){ + pBitmap = new Graphics::TBitmap; + pBitmap->Width = m_pBitmap->Width; + pBitmap->Height = m_pBitmap->Height; + pBitmap->Canvas->Draw(0, 0, m_pBitmap); + } + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[0][0]; + if( Page->ActivePage == TabChar ){ + FillPBox(PBox); + PBox->Canvas->Draw(0, 0, pBitmap); + } + else if( Page->ActivePage == TabMask ){ + FillPBox(PBoxMask); + PBoxMask->Canvas->Draw(0, 0, pBitmap); + } + else { + FillPBox(PBoxPer); + PBoxPer->Canvas->Draw(0, 0, pBitmap); + } + pBitmap->Transparent = FALSE; + if( pBitmap != m_pBitmap ) delete pBitmap; + if( m_MouseHold ){ + PBox->Canvas->Pen->Color = clBlue; + PBox->Canvas->MoveTo(0, m_MouseYC); + PBox->Canvas->LineTo(PBox->Width, m_MouseYC); + PBox->Canvas->MoveTo(m_MouseXC, 0); + PBox->Canvas->LineTo(m_MouseXC, PBox->Height); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + m_Change = 2; + Timer->Enabled = TRUE; + UpdateFText(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TimerTimer(TObject *Sender) +{ + if( m_Change ){ + m_Change--; + if( !m_Change ){ + Timer->Enabled = m_ExecPB ? TRUE : FALSE; +#if UseDraft + m_Draft = 0; +#endif + UpdateBitmap(); + } + } +#if UseDraft + if( m_Draft ){ + Timer->Enabled = FALSE; + m_Draft = 0; + UpdateBitmap(); + } +#endif + + if( m_ExecPB ){ + if( !m_ExecPBCount || (m_ExecPBCount < 0) ){ + if( !m_ExecPBCount ) m_ExecPBCount = 4; // 2[s] Interval + CheckPBFinished(); + } + if( m_ExecPBCount > 0 ){ + m_ExecPBCount--; + } + else { + m_ExecPBCount++; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBGClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PB1Click(TObject *Sender) +{ + TPanel *pPanel = (TPanel *)Sender; + InitCustomColor(ColorDialog); + AddCustomColor(ColorDialog, PG1->Color); + AddCustomColor(ColorDialog, PG2->Color); + AddCustomColor(ColorDialog, PG3->Color); + AddCustomColor(ColorDialog, PG4->Color); + AddCustomColor(ColorDialog, PB1->Color); + AddCustomColor(ColorDialog, PB2->Color); + AddCustomColor(ColorDialog, m_Item.m_Back.c); + if( SBG5->Down ){ + AddCustomColor(ColorDialog, PG5->Color); + AddCustomColor(ColorDialog, PG6->Color); + } + + ColorDialog->Color = pPanel->Color; + NoTopMost(); + int r = ColorDialog->Execute(); + TopMost(); + if( r == TRUE ){ + pPanel->Color = ColorDialog->Color; + if( (pPanel == PC1) || (pPanel == PC2) ){ + UpdateCustom(); PBoxCS->Invalidate(); + } + else { + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormActivate(TObject *Sender) +{ + TopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormDeactivate(TObject *Sender) +{ + NoTopMost(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FontBtnClick(TObject *Sender) +{ + FontDialog->Font->Assign(m_Item.m_pFont); + int hOrg = m_FontHeight; + int h = hOrg / 4; + FontDialog->Font->Height = h; + FontDialog->Font->Color = PG1->Color; + NoTopMost(); + int r = FontDialog->Execute(); + TopMost(); + if( r == TRUE ){ + m_Item.m_pFont->Assign(FontDialog->Font); + if( h != m_Item.m_pFont->Height ){ + hOrg = m_Item.m_pFont->Height * 4; + } + m_Item.m_pFont->Height = hOrg; + m_FontHeight = hOrg; + PG1->Color = FontDialog->Font->Color; + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMClick(TObject *Sender) +{ + if( sys.m_fGetMacKey ){ + char bf[256]; + NoTopMost(); + int r = sys.m_fGetMacKey(bf, sizeof(bf)); + TopMost(); + if( r ){ + HWND hWnd; + if( SBMSG->Down ){ + Msg->SetFocus(); + hWnd = Msg->Handle; + } + else { + Memo->SetFocus(); + hWnd = Memo->Handle; + } + for( LPCSTR p = bf; *p; p++ ){ + ::PostMessage(hWnd, WM_CHAR, *p, 0); + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBCClick(TObject *Sender) +{ + if( sys.m_fColorComp ){ + UCOL col[4]; + col[0].c = PG1->Color; + col[1].c = PG2->Color; + col[2].c = PG3->Color; + col[3].c = PG4->Color; + NoTopMost(); + int r = sys.m_fColorComp(&col[0].d); + TopMost(); + if( r ){ + PG1->Color = col[0].c; + PG2->Color = col[1].c; + PG3->Color = col[2].c; + PG4->Color = col[3].c; + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLWClick(TObject *Sender) +{ + m_DisEvent++; + CBList->Items->Add(m_FText); + CBList->ItemIndex = CBList->Items->IndexOf(m_FText); + UpdateUI(); + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLDClick(TObject *Sender) +{ + m_DisEvent++; + if( CBList->ItemIndex >= 0 ){ + int n = CBList->ItemIndex; + CBList->ItemIndex = -1; + CBList->Items->Delete(n); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBListChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( CBList->ItemIndex < 0 ) return; + + m_DisEvent++; + AnsiString cs; + AnsiString as = CBList->Items->Strings[CBList->ItemIndex]; + m_FText = as; + ::Yen2CrLf(cs, as); + Memo->Text = cs; + UpdateBitmap(); + m_DisEvent--; + Memo->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBYWClick(TObject *Sender) +{ + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r < 0 ) r = sys.m_pStyleList->Count; + + CItem *pItem = new CItem; + pItem->Copy(&m_Item); + pItem->m_Text = CBY->Text; + char bf[64]; + sprintf(bf, "Style.%u", r); + pItem->SaveToInifile(bf, ININAME, TRUE); + delete pItem; + + if( r == sys.m_pStyleList->Count ){ + CBY->Items->Add(CBY->Text); + sys.m_pStyleList->Add(CBY->Text); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBYDClick(TObject *Sender) +{ + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r >= 0 ){ + char bf[64]; + CItem *pItem = new CItem; + int i; + for( i = r; i < sys.m_pStyleList->Count - 1; i++ ){ + sprintf(bf, "Style.%u", i+1); + pItem->LoadFromInifile(bf, ININAME, TRUE); + sprintf(bf, "Style.%u", i); + pItem->SaveToInifile(bf, ININAME, TRUE); + MultProc(); + } + sprintf(bf, "Style.%u", i); + pItem->DeleteInifile(bf, ININAME); + delete pItem; + sys.m_pStyleList->Delete(r); + r = CBY->Items->IndexOf(CBY->Text); + if( r >= 0 ) CBY->Items->Delete(r); + UpdateUI(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( !m_DropProfile ){ + UpdateUI(); + return; + } + m_DropProfile = 0; + + m_DisEvent++; + int r = sys.m_pStyleList->IndexOf(CBY->Text); + if( r >= 0 ){ + AnsiString as = m_Item.m_Text; + DWORD ex = m_Item.GetEx(); + int pos = m_Item.GetPos(); + CItem *pItem = new CItem; + char bf[64]; + sprintf(bf, "Style.%u", r); + pItem->LoadFromInifile(bf, ININAME, TRUE); + m_Item.Copy(pItem); + delete pItem; + m_Item.m_Text = as; + m_Item.SetEx(ex); + m_Item.SetPos(pos); + UpdateDialog(&m_Item); + UpdateBitmap(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYKeyPress(TObject *Sender, char &Key) +{ + m_DropProfile = 0; + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBYDropDown(TObject *Sender) +{ + m_DropProfile = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_DisEvent ) return; + + m_DisEvent++; + if( Button == mbRight ){ + CB3D->Checked = CB3D->Checked ? FALSE : TRUE; + } + else { + CB3D->Checked = TRUE; + m_MouseHold = TRUE; + int xc = m_pBitmap->Width / 2; + int yc = m_pBitmap->Height / 2; + m_MouseXC = xc; + m_MouseYC = yc; + int x = X - xc; + int y = Y - yc; + x = x * 48 / xc; + y = y * 48 / yc; + double s = -UDRot->Position * PI / 180.0; + double cosk = cos(s); + double sink = sin(s); + short xx = x * cosk + y * sink; + short yy = -x * sink + y * cosk; + UDX->Position = SHORT(xx); + UDY->Position = SHORT(yy); + Screen->Cursor = crSizeAll; + } + m_DisEvent--; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_MouseHold ){ + X = X - m_MouseXC; + Y = Y - m_MouseYC; + double s = -UDRot->Position * PI / 180.0; + double cosk = cos(s); + double sink = sin(s); + short x = X * cosk + Y * sink; + short y = -X * sink + Y * cosk; + short UX = UDX->Position; + short UY = UDY->Position; + m_DisEvent++; + UDX->Position = short(x); + UDY->Position = short(y); + m_DisEvent--; + if( (UX != UDX->Position) || (UY != UDY->Position) ){ +#if UseDraft + m_Draft = TRUE; + Timer->Enabled = TRUE; +#endif + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_MouseHold ){ + m_MouseHold = 0; + PBox->Invalidate(); + } + Screen->Cursor = crDefault; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UDLClick(TObject *Sender, TUDBtnType Button) +{ + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UD3D(int a) +{ + m_DisEvent++; + int x = UDX->Position; + int y = UDY->Position; + int xs = (x >= 0) ? 1 : -1; + int ys = (y >= 0) ? 1 : -1; + x = ABS(x); + y = ABS(y); + if( x == y ){ + int ad; + if( x < 4 ){ + ad = 1; + } + else if( x < 12 ){ + ad = 2; + } + else { + ad = 4; + } + ad *= a; + x += ad; + y += ad; + if( x < 2 ) x = 2; + if( y < 2 ) y = 2; + if( x > 48 ) x = 48; + if( y > 48 ) y = 48; + } + else { + if( x < y ) x = y; + x &= 0xfffffffc; + y = x; + } + x *= xs; y *= ys; + UDX->Position = SHORT(x); + UDY->Position = SHORT(y); + m_DisEvent--; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SB3DIClick(TObject *Sender) +{ + UD3D((Sender == SB3DI) ? 1 : -1); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMSGClick(TObject *Sender) +{ + Msg->Visible = SBMSG->Down; + if( SBMSG->Down ){ + Msg->Text = sys.m_Msg; + Msg->Modified = FALSE; + Msg->SelLength = 0; + Msg->SetFocus(); + } + else { + if( Msg->Modified ){ + sys.m_Msg = Msg->Text; + Msg->Modified = FALSE; + } + Memo->SetFocus(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MsgDblClick(TObject *Sender) +{ + AnsiString as; + AnsiString cs; + + m_DisEvent++; + if( Msg->Lines->Count ){ + int e = Msg->SelStart; + LPCSTR p = Msg->Text.c_str(); + int n = 0; + for( int i = 0; i < e; i++, p++ ){ + if( *p == '\n' ) n++; + } + if( n > Msg->Lines->Count ) n = Msg->Lines->Count - 1; + as = Msg->Lines->Strings[n]; + } + m_FText = as; + ::Yen2CrLf(cs, as); + Memo->Text = cs; + m_DisEvent--; + SBMSG->Down = FALSE; + SBMSGClick(NULL); + MultProc(); + UpdateFText(); + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoStartDrag(TObject *Sender, + TDragObject *&DragObject) +{ + if( !SBMSG->Down ){ + SBMSG->Down = TRUE; + SBMSGClick(NULL); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTextDlgBox::MsgDragDrop(TObject *Sender, TObject *Source, + int X, int Y) +{ + Msg->Lines->Add(m_FText); +} +//--------------------------------------------------------------------------- + +void __fastcall TTextDlgBox::MsgDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept) +{ + if( Source == Memo ) Accept = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_MemoX = X; + m_MemoY = Y; + m_MemoDown = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_MemoDown == 1 ){ + X -= m_MemoX; + Y -= m_MemoY; + if( (X*X)+(Y*Y) > 64 ){ + m_MemoDown = 2; + Memo->BeginDrag(TRUE); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::MemoMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_MemoDown = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FontBtnMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + BYTE cset; + UINT cp = ::GetACP(); + switch(cp){ + case 932: + cset = SHIFTJIS_CHARSET; + break; + case 949: + cset = HANGEUL_CHARSET; + break; + case 950: + cset = CHINESEBIG5_CHARSET; + break; + case 936: + cset = 134; // 簡略 + break; + default: + cset = DEFAULT_CHARSET; + break; + } + int charset = m_Item.m_pFont->Charset; + m_Item.m_pFont->Charset = BYTE((charset != ANSI_CHARSET) ? ANSI_CHARSET : cset); + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateFontBtnHint(void) +{ + AnsiString as = sys.m_MsgEng ? "Choose font" : "フォントの選択"; + if( m_Item.m_pFont ){ + as += " ["; + as += m_Item.m_pFont->Name; + TFontStyles ts = m_Item.m_pFont->Style; + DWORD d = FontStyle2Code(ts); + AddStyle(as, m_Item.m_pFont->Charset, d); + as += "]"; + SBB->Down = d & FSBOLD; + SBI->Down = d & FSITALIC; + if( m_pCodeView ) m_pCodeView->Execute(Handle, m_Item.m_pFont); + } + FontBtn->Hint = as; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SetSBF(int n) +{ + if( !sys.m_pFontList ) return; + + TSpeedButton* _tt[]={SBF1, SBF2, SBF3, SBF4, SBF5, NULL}; + + TSpeedButton* pButton = _tt[n]; + AnsiString es = sys.m_MsgEng ? "Registration = Right button" : "登録=右ボタン"; + AnsiString fs = sys.m_pFontList->Strings[n]; + int undef = fs.IsEmpty(); + if( undef ) fs = sys.m_MsgEng ? "Load registered font" : "登録フォントの読み出し"; + char bf[256]; + sprintf(bf, "%s (%s)", fs.c_str(), es.c_str()); + pButton->Hint = bf; + pButton->Font->Color = undef ? clGrayText : clBlack; +} +//--------------------------------------------------------------------------- +int __fastcall TTextDlgBox::GetSBFIndex(TObject *Sender) +{ + TSpeedButton* _tt[]={SBF1, SBF2, SBF3, SBF4, SBF5, NULL}; + + for( int i = 0; _tt[i]; i++ ){ + if( Sender == _tt[i] ) return i; + } + return 0; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBFClick(TObject *Sender) +{ + if( !sys.m_pFontList ) return; + int N = GetSBFIndex(Sender); + if( sys.m_pFontList->Strings[N].IsEmpty() ) return; + + FontDialog->Font->Assign(m_Item.m_pFont); + + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, ININAME); + TMemIniFile *pIniFile = new TMemIniFile(fname); + { + char bf[32]; + sprintf(bf, "Font.%u", N); + int ht = m_Item.m_pFont->Height; + LoadFontFromInifile(m_Item.m_pFont, bf, pIniFile); + int hs = m_Item.m_pFont->Height; + m_Item.m_pFont->Height = ht; + m_FontHeight = ht; + int oyw = (short)pIniFile->ReadInteger(bf, "OYW", UDOYW->Position); + if( hs ) oyw = ht * oyw / hs; + UDOYW->Position = (short)oyw; + } + delete pIniFile; + + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBFMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + FontDialog->Font->Assign(m_Item.m_pFont); + FontDialog->Font->Color = clBlack; + NoTopMost(); + int r = FontDialog->Execute(); + TopMost(); + if( r == TRUE ){ + char fname[512]; + sprintf(fname, "%s%s", sys.m_BgnDir, ININAME); + TMemIniFile *pIniFile = new TMemIniFile(fname); + { + int N = GetSBFIndex(Sender); + char bf[32]; + sprintf(bf, "Font.%u", N); + SaveFontToInifile(FontDialog->Font, bf, pIniFile); + pIniFile->WriteInteger(bf, "OYW", UDOYW->Position); + pIniFile->UpdateFile(); + if( sys.m_pFontList ){ + AnsiString as = FontDialog->Font->Name; + TFontStyles ts = FontDialog->Font->Style; + DWORD d = FontStyle2Code(ts); + AddStyle(as, FontDialog->Font->Charset, d); + sys.m_pFontList->Strings[N] = as; + SetSBF(N); + } + } + delete pIniFile; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBBClick(TObject *Sender) +{ + if( !m_Item.m_pFont ) return; + + TFontStyles ts = m_Item.m_pFont->Style; + DWORD d = FontStyle2Code(ts); + d ^= FSBOLD; + ts = Code2FontStyle(d); + m_Item.m_pFont->Style = ts; + + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBIClick(TObject *Sender) +{ + if( !m_Item.m_pFont ) return; + + TFontStyles ts = m_Item.m_pFont->Style; + DWORD d = FontStyle2Code(ts); + d ^= FSITALIC; + ts = Code2FontStyle(d); + m_Item.m_pFont->Style = ts; + + m_Item.UpdateFont(); + if( m_Item.m_pFont != NULL ){ + UpdateMemoFont(m_Item.m_pFont->Charset); + } + UpdateBitmap(); +} +//--------------------------------------------------------------------------- + +void __fastcall TTextDlgBox::SBFDMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_Item.m_pFont == NULL ) return; + + int ad = 0; + int h = m_FontHeight; + if( Sender == SBFD ){ + if( Button == mbLeft ){ + if( h < -2 ) ad = 1; + } + else if( Button == mbRight ){ + if( h < -6 ) ad = 4; + } + } + else { + if( Button == mbLeft ){ + ad = -1; + } + else if( Button == mbRight ){ + ad = -4; + } + } + if( ad ){ + m_FontHeight = h + ad; + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::DefBtnClick(TObject *Sender) +{ + m_DisEvent++; + TBAX->Position = 60; + TBAY->Position = 60; + TBPX->Position = 0; + TBPY->Position = 0; + TBPZ->Position = 0; + TBRX->Position = 0; + TBRY->Position = 0; + TBRZ->Position = -180; + TBR->Position = 0; + TBS->Position = 15; + TBSC->Position = 0; + m_DisEvent--; + UpdateTB(); + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBRClick(TObject *Sender) +{ + if( TBSC->Position ){ + m_DisEvent++; + TBSC->Position = 0; + m_DisEvent--; + SBGClick(NULL); + } + TBSC->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxPerMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_pBitmap == NULL ) return; + + m_SCX = double(m_pBitmap->Width) / double(PBoxPer->Width); + m_SCY = double(m_pBitmap->Height) / double(PBoxPer->Height); + X = X * m_SCX; + Y = Y * m_SCY; + + m_XC = m_pBitmap->Width / 2; + m_YC = m_pBitmap->Height / 2; + int x = X - m_XC; + int y = m_YC - Y; + if( x || y ){ + m_Deg = atan2(y, x); + } + else { + m_Deg = 0; + } + m_Dist = sqrt(x * x + y * y); + m_SDeg = TBR->Position; + m_SDistX = TBAX->Position; + m_SDistY = TBAY->Position; + Screen->Cursor = crSizeAll; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxPerMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_XC > 0 ){ + X = X * m_SCX; + Y = Y * m_SCY; + + int x = X - m_XC; + int y = m_YC - Y; + double Deg; + if( x || y ){ + Deg = atan2(y, x); + } + else { + Deg = 0; + } + Deg = (m_Deg - Deg) * 180.0 / PI; + Deg += m_SDeg; + if( Deg < -180 ) Deg += 360.0; + if( Deg > 180 ) Deg -= 360.0; + TBR->Position = SHORT(Deg); + + double Dist = sqrt(x * x + y * y); + Dist = (Dist - m_Dist)/2; + int d = Dist + m_SDistX; + if( d > 201 ) d = 201; + if( d < 2 ) d = 2; + TBAX->Position = d; + d = Dist + m_SDistY; + if( d > 201 ) d = 201; + if( d < 2 ) d = 2; + TBAY->Position = d; + + UpdateTB(); +#if UseDraft + m_Draft = TRUE; + Timer->Enabled = TRUE; +#endif + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxPerMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_XC = -1; + Screen->Cursor = crDefault; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TBSCChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( m_Item.m_SC != TBSC->Position ){ + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +static void __fastcall UpdateDefTB(TTrackBar *pBar, int f, int def, int &dir) +{ + if( f ){ + pBar->Position = pBar->Position + (pBar->PageSize * dir); + if( pBar->Position == pBar->Max ){ + dir = -1; + } + else if( pBar->Position == pBar->Min ){ + dir = 1; + } + } + else { + pBar->Position = def; + } + pBar->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::LDefMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button != mbLeft) && (Button != mbRight) ) return; + BOOL f = (Button != mbLeft); + + TLabel *_tt[]={L57, L58, L59, L56, L55, L54, L51, L52, L53, L60}; + + int i; + for( i = 0; i < AN(_tt); i++ ){ + if( _tt[i] == (TLabel *)Sender ) break; + } + m_DisEvent++; + switch(i){ + case 0: + UpdateDefTB(TBS, f, 15, m_DirTB[0]); + break; + case 1: + UpdateDefTB(TBAX, f, 60, m_DirTB[1]); + break; + case 2: + UpdateDefTB(TBAY, f, 60, m_DirTB[2]); + break; + case 3: + UpdateDefTB(TBPX, f, 0, m_DirTB[3]); + break; + case 4: + UpdateDefTB(TBPY, f, 0, m_DirTB[4]); + break; + case 5: + UpdateDefTB(TBPZ, f, 0, m_DirTB[5]); + break; + case 6: + UpdateDefTB(TBRX, f, 0, m_DirTB[6]); + break; + case 7: + UpdateDefTB(TBRY, f, 0, m_DirTB[7]); + break; + case 8: + UpdateDefTB(TBRZ, f, -180, m_DirTB[8]); + break; + case 9: + UpdateDefTB(TBR, f, 0, m_DirTB[9]); + break; + } + m_DisEvent--; + UpdateTB(); + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateTB(void) +{ + m_SBar[0] = TBS->Position; + m_SBar[1] = TBAX->Position; + m_SBar[2] = TBAY->Position; + m_SBar[3] = TBPX->Position; + m_SBar[4] = TBPY->Position; + m_SBar[5] = TBPZ->Position; + m_SBar[6] = TBRX->Position; + m_SBar[7] = TBRY->Position; + m_SBar[8] = TBRZ->Position; + m_SBar[9] = TBR->Position; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::TBSChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + TTrackBar *_tt[]={TBS, TBAX, TBAY, TBPX, TBPY, TBPZ, TBRX, TBRY, TBRZ, TBR}; + TTrackBar *pBar = (TTrackBar *)Sender; + + int i; + for( i = 0; i < AN(_tt); i++ ){ + if( _tt[i] == pBar ) break; + } + if( m_SBar[i] != pBar->Position ){ + m_SBar[i] = pBar->Position; + UpdateBitmap(); + } +} +//--------------------------------------------------------------------- +void __fastcall MakeBitmapPtn(Graphics::TBitmap *pBmp, int hw, int sw, UCOL col1, UCOL col2) +{ + hw /= 3; + CWaitCursor wait; + TCanvas *pCanvas = pBmp->Canvas; + int x, y, f, v; + for( y = 0; y < pBmp->Height; y++ ){ + for( x = 0; x < pBmp->Width; x++ ){ + f = x / hw; + switch(sw){ + case 0: + if( (y/2) & 1 ){ + v = (x/2) & 1; + } + else { + v = !((x/2) & 1); + } + break; + case 1: + if( (y/4) & 1 ){ + v = (x/2) & 1; + } + else { + v = !((x/2) & 1); + } + break; + case 2: + if( (y/2) & 1 ){ + v = (x/4) & 1; + } + else { + v = !((x/4) & 1); + } + break; + case 3: + if( (y/4) & 1 ){ + v = (x/4) & 1; + } + else { + v = !((x/4) & 1); + } + break; + case 4: + switch(f){ + case 0: + v = (y/2) & 1; + break; + case 1: + v = (y/4) & 1; + break; + default: + v = (y/8) & 1; + break; + } + break; + case 5: + switch(f){ + case 0: + v = (x/2) & 1; + break; + case 1: + v = (x/4) & 1; + break; + default: + v = (x/8) & 1; + break; + } + break; + case 6: + switch(f){ + case 0: + v = ((y+x)/2) & 1; + break; + case 1: + v = ((y+x)/4) & 1; + break; + default: + v = ((y+x)/8) & 1; + break; + } + break; + case 7: + switch(f){ + case 0: + v = ((x-y+1024)/2) & 1; + break; + case 1: + v = ((x-y+1024)/4) & 1; + break; + default: + v = ((x-y+1024)/8) & 1; + break; + } + break; + } + pCanvas->Pixels[x][y] = v ? col1.c : col2.c; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBBMaskClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + if( CBBMask->Checked ){ + if( !m_pMaskBmp ){ + if( m_pMaskBak ){ + m_pMaskBmp = m_pMaskBak; + m_pMaskBak = NULL; + UpdateMaskSrc(TRUE); + } + else { + m_pMaskBmp = CreateBitmap(PBoxSrc->Width, PBoxSrc->Height); + UCOL c1, c2; + c1.c = PC1->Color; c2.c = PC2->Color; + MakeBitmapPtn(m_pMaskBmp, PBoxSrc->Width, 0, c1, c2); + m_MaskX = m_MaskY = 0; m_MaskXW = m_MaskYW = 8; + } + UpdateItemMask(); + } + } + else { + if( m_pMaskBmp ){ + delete m_pMaskBmp; + m_pMaskBmp = NULL; + } + if( m_Item.m_pMaskBmp ){ + if( m_pMaskBak ) delete m_pMaskBak; + m_pMaskBak = m_Item.m_pMaskBmp; + m_Item.m_pMaskBmp = NULL; + } + } + PBoxSrcPaint(NULL); + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::L80Click(TObject *Sender) +{ + Page->ActivePage = TabMask; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::DrawMaskCursor(int x1, int y1, int x2, int y2) +{ + x1 -= SBH->Position; + x2 -= SBH->Position; + y1 -= SBV->Position; + y2 -= SBV->Position; + TCanvas *tp = PBoxSrc->Canvas; + tp->Pen->Width = 1; + tp->Pen->Style = psSolid; + tp->MoveTo(x1, y1); + int rop = ::SetROP2(tp->Handle, R2_NOT); + tp->LineTo(x2, y1); + tp->LineTo(x2, y2); + tp->LineTo(x1, y2); + tp->LineTo(x1, y1); + ::SetROP2(tp->Handle, rop); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::DrawMaskCursor(void) +{ + DrawMaskCursor(m_MaskX, m_MaskY, m_MaskX+m_MaskXW, m_MaskY+m_MaskYW); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxSrcPaint(TObject *Sender) +{ + if( (Sender != SBV) && (Sender != SBH) ) FillPBox(PBoxSrc); + if( m_pMaskBmp ){ + PBoxSrc->Canvas->Draw(-SBH->Position, -SBV->Position, m_pMaskBmp); + DrawMaskCursor(); + } +} +//--------------------------------------------------------------------------- +static void __fastcall DrawBmpPBoxBtn(TCanvas *pCanvas, int x, int y, int w, BOOL sw) +{ + pCanvas->Pen->Style = psSolid; + pCanvas->Pen->Width = 1; + pCanvas->Pen->Color = sw ? clBlack : clWhite; + w++; + pCanvas->MoveTo(x+w, y); + pCanvas->LineTo(x, y); + pCanvas->LineTo(x, y+w); + pCanvas->LineTo(x+1, y+w); + pCanvas->Pen->Color = sw ? clWhite : clBlack; + pCanvas->LineTo(x+w, y+w); + pCanvas->LineTo(x+w, y); +} +//--------------------------------------------------------------------------- +static void __fastcall DrawBmpPBox(TCanvas *pCanvas, int x, int y, Graphics::TBitmap *pBmp) +{ + pCanvas->Draw(x+1, y+1, pBmp); + DrawBmpPBoxBtn(pCanvas, x, y, pBmp->Width, FALSE); +} +//--------------------------------------------------------------------------- +static int __fastcall GetIndex(int w, int m, int x, int y) +{ + if( ((x % w) < 1) || ((x % w) >= (w-1)) ) return -1; + if( ((y % w) < 1) || ((y % w) >= (w-1)) ) return -1; + x /= w; + y /= w; + int n = (y * 8) + x; + if( n >= m ) n = m-1; + return n; +} +//--------------------------------------------------------------------------- +static void __fastcall DrawBmpPBox(TCanvas *pCanvas, int s, int w, int ws, int x, int y, Graphics::TBitmap *pBmp) +{ + TRect src, drc; + + src.Left = ((y*8)+x)*ws; + src.Right = src.Left + w; + src.Top = 0; src.Bottom = w; + drc.Left = 1 + x*s; + drc.Right = drc.Left + w; + drc.Top = 1 + y*s; + drc.Bottom = drc.Top + w; + pCanvas->CopyRect(drc, pBmp->Canvas, src); + DrawBmpPBoxBtn(pCanvas, x*s, y*s, w, FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxBMPaint(TObject *Sender) +{ + int x, y; + for( y = 0; y < 2; y++ ){ + for( x = 0; x < 8; x++ ){ + DrawBmpPBox(PBoxBM->Canvas, 33, 30, 32, x, y, m_pBuiltInBmp); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxBMMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + m_MIndex = GetIndex(33, 16, X, Y); + if( m_MIndex >= 0 ){ + DrawBmpPBoxBtn(PBoxBM->Canvas, 33*(m_MIndex%8), 33*(m_MIndex/8), 30, TRUE); + Graphics::TBitmap *pBmp = CreateBitmap(32, 32); + pBmp->Canvas->Draw(-m_MIndex*32, 0, m_pBuiltInBmp); + if( !m_pMaskBmp ) m_pMaskBmp = CreateBitmap(32, 32); + if( !IsSameBitmap(pBmp, m_pMaskBmp) ){ + delete m_pMaskBmp; + m_pMaskBmp = pBmp; + UpdateMaskSrc(TRUE); + } + else { + delete pBmp; + } + CBMSize->SetFocus(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxBMMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button == mbLeft) && (m_MIndex >= 0) ){ + DrawBmpPBoxBtn(PBoxBM->Canvas, 33*(m_MIndex%8), 33*(m_MIndex/8), 30, FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateCustom(void) +{ + if( !m_pCustomBmp ) m_pCustomBmp = CreateBitmap(16*8, 16); + Graphics::TBitmap *pBmp = CreateBitmap(16, 16); + int i; + for( i = 0; i < 8; i++ ){ + UCOL c1, c2; + c1.c = PC1->Color; c2.c = PC2->Color; + MakeBitmapPtn(pBmp, PBoxSrc->Width, i, c1, c2); + m_pCustomBmp->Canvas->Draw(i*16, 0, pBmp); + } + delete pBmp; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxCSPaint(TObject *Sender) +{ + if( !m_pCustomBmp ){ + UpdateCustom(); + if( !m_pCustomBmp ) return; + } + MultProc(); + int x; + for( x = 0; x < 8; x++ ){ + DrawBmpPBox(PBoxCS->Canvas, 18, 16, 16, x, 0, m_pCustomBmp); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxCSMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + m_MIndex = GetIndex(18, 8, X, Y); + if( m_MIndex >= 0 ){ + DrawBmpPBoxBtn(PBoxCS->Canvas, 18*(m_MIndex%8), 0, 16, TRUE); + + Graphics::TBitmap *pBmp = CreateBitmap(PBoxSrc->Width, PBoxSrc->Height); + UCOL c1, c2; + c1.c = PC1->Color; c2.c = PC2->Color; + MakeBitmapPtn(pBmp, PBoxSrc->Width, m_MIndex, c1, c2); + if( m_pMaskBmp ) delete m_pMaskBmp; + DeleteMaskSrc(); + m_pMaskBmp = pBmp; + m_MaskX = m_MaskY = 0; m_MaskXW = m_MaskYW = 8; + UpdateMaskSrc(FALSE); + CBMSize->SetFocus(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxCSMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button == mbLeft) && (m_MIndex >= 0) ){ + DrawBmpPBoxBtn(PBoxCS->Canvas, 18*(m_MIndex%8), 0, 16, FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateItemMask(void) +{ + m_DisEvent++; + CBBMask->Checked = TRUE; + UpdateCBMSize(); + + if( m_pMaskBak ){ + delete m_pMaskBak; + m_pMaskBak = NULL; + } + if( m_Item.m_pMaskBmp ) delete m_Item.m_pMaskBmp; + m_Item.m_pMaskBmp = CreateBitmap(m_MaskXW, m_MaskYW); + m_Item.m_pMaskBmp->Canvas->Draw(-m_MaskX, -m_MaskY, m_pMaskBmp); + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxSrcMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_pMaskBmp ) return; + + if( Button == mbLeft ){ + X += SBH->Position; Y += SBV->Position; + DrawMaskCursor(); + m_MaskAX = m_MaskX = X; + m_MaskAY = m_MaskY = Y; + m_MaskAXW = m_MaskXW; m_MaskAYW = m_MaskYW; + DrawMaskCursor(); + UpdateItemMask(); + UpdateBitmap(); + m_MaskMouseCapture = 1; + } + else if( Button == mbRight ){ + if( (m_MaskXW > 32) || (m_MaskYW > 32) ){ + Graphics::TBitmap *pSrc = CreateBitmap(m_MaskXW, m_MaskYW); + pSrc->Canvas->Draw(-m_MaskX, -m_MaskY, m_pMaskBmp); + + delete m_pMaskBmp; + m_pMaskBmp = CreateBitmap(32, 32); + StretchCopy(m_pMaskBmp, pSrc, HALFTONE); + delete pSrc; + + m_MaskX = m_MaskY = 0; + m_MaskXW = m_MaskYW = 32; + DeleteMaskSrc(); + } + else { + m_MaskX = m_MaskY = 0; + } + SBH->Position = 0; SBV->Position = 0; + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); + } + CBMSize->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxSrcMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_MaskMouseCapture ){ + X += SBH->Position; Y += SBV->Position; + if( m_MaskMouseCapture == 1 ){ + m_MaskMouseCapture++; + DrawMaskCursor(); + } + else { + DrawMaskCursor(m_MaskX, m_MaskY, m_MaskAX, m_MaskAY); + } + m_MaskAX = X; m_MaskAY = Y; + DrawMaskCursor(m_MaskX, m_MaskY, m_MaskAX, m_MaskAY); + X = ABS(m_MaskX-m_MaskAX); Y = ABS(m_MaskY-m_MaskAY); + if( (X != m_MaskAXW)||(Y != m_MaskAYW) ){ + m_MaskAXW = X; m_MaskAYW = Y; + UpdateCBMSize(X, Y); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxSrcMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( m_MaskMouseCapture ){ + X += SBH->Position; Y += SBV->Position; + if( m_MaskMouseCapture != 1 ){ + DrawMaskCursor(m_MaskX, m_MaskY, m_MaskAX, m_MaskAY); + if( (ABS(X-m_MaskX) >= 2) && (ABS(Y-m_MaskY) >= 2) ){ + m_MaskXW = ABS(X-m_MaskX); + m_MaskYW = ABS(Y-m_MaskY); + if( X < m_MaskX ) m_MaskX = X; + if( Y < m_MaskY ) m_MaskY = Y; + UpdateItemMask(); + UpdateBitmap(); + } + DrawMaskCursor(); + } + m_MaskMouseCapture = 0; + UpdateCBMSize(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateSBSrc(void) +{ + SBH->Position = 0; SBV->Position = 0; + int hmax, vmax; + if( m_pMaskBmp ){ + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + hmax = xw - PBoxSrc->ClientWidth; + vmax = yw - PBoxSrc->ClientHeight; + } + else { + hmax = vmax = -1; + } + SBH->Max = (hmax > 0) ? hmax : 0; + SBV->Max = (vmax > 0) ? vmax : 0; + SBH->Enabled = (hmax > 0) ? TRUE : FALSE; + SBV->Enabled = (vmax > 0) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateMaskSrc(BOOL sw) +{ + DeleteMaskSrc(); + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + if( sw ){ + m_MaskX = m_MaskY = 0; + if( ((xw <= 32) && (yw <= 32)) ){ + m_MaskXW = xw; m_MaskYW = yw; + } + } + else { + if( m_MaskX >= xw ) m_MaskX = 0; + if( m_MaskY >= yw ) m_MaskY = 0; + } + UpdateSBSrc(); + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateMaskSrc(HBITMAP hb) +{ + if( hb != NULL ){ + Graphics::TBitmap *pBmp = new Graphics::TBitmap; + pBmp->Handle = hb; + if( m_pMaskBmp ) delete m_pMaskBmp; + m_pMaskBmp = CreateBitmap(pBmp->Width, pBmp->Height); + m_pMaskBmp->Canvas->Draw(0, 0, pBmp); + delete pBmp; + UpdateMaskSrc(FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMLoadClick(TObject *Sender) +{ + if( !sys.m_fLoadImageMenu ) return; + UpdateMaskSrc(sys.m_fLoadImageMenu(1, PBoxSrc->Width, PBoxSrc->Height)); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMPasteClick(TObject *Sender) +{ + if( !sys.m_fPasteImage ) return; + UpdateMaskSrc(sys.m_fPasteImage(1, PBoxSrc->Width, PBoxSrc->Height)); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMCopyClick(TObject *Sender) +{ + if( !m_pMaskBmp ) return; + CopyBitmap(m_pMaskBmp); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBClipClick(TObject *Sender) +{ + if( !sys.m_fClip ) return; + + Graphics::TBitmap *pBmp = CreateBitmap(PBoxSrc->Width, PBoxSrc->Height); + if( sys.m_fClip(pBmp->Handle, m_pMaskBmp->Handle) ){ + delete m_pMaskBmp; + m_pMaskBmp = pBmp; + UpdateMaskSrc(FALSE); + } + else { + delete pBmp; + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateCBMSize(void) +{ + UpdateCBMSize(m_MaskXW, m_MaskYW); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::UpdateCBMSize(int xw, int yw) +{ + m_DisEvent++; + int f = TRUE; + if( xw == yw ){ + switch(xw){ + case 8: + CBMSize->ItemIndex = 0; + break; + case 16: + CBMSize->ItemIndex = 1; + break; + case 24: + CBMSize->ItemIndex = 2; + break; + case 32: + CBMSize->ItemIndex = 3; + break; + default: + f = FALSE; + break; + } + } + else { + f = FALSE; + } + if( f ){ + if( CBMSize->Items->Count > 4 ) CBMSize->Items->Delete(4); + } + else { + char bf[256]; + wsprintf(bf, "%ux%u", xw, yw); + if( CBMSize->Items->Count > 4 ){ + CBMSize->Items->Strings[4] = bf; + } + else { + CBMSize->Items->Add(bf); + } + CBMSize->ItemIndex = 4; + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CBMSizeChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + switch(CBMSize->ItemIndex){ + case 0: + m_MaskXW = m_MaskYW = 8; + break; + case 1: + m_MaskXW = m_MaskYW = 16; + break; + case 2: + m_MaskXW = m_MaskYW = 24; + break; + case 3: + m_MaskXW = m_MaskYW = 32; + break; + } + if( m_pMaskBmp ){ + if( (m_MaskXW > m_pMaskBmp->Width) || (m_MaskYW > m_pMaskBmp->Height) ){ + Graphics::TBitmap *pBmp = CreateBitmap(m_MaskXW, m_MaskYW); + int x, y; + y = 0; + while(y < m_MaskYW){ + x = 0; + while(x < m_MaskXW){ + pBmp->Canvas->Draw(x, y, m_pMaskBmp); + x += m_pMaskBmp->Width; + } + y += m_pMaskBmp->Height; + } + delete m_pMaskBmp; + m_pMaskBmp = pBmp; + } + } + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if( Page->ActivePage == TabMask ){ + TShiftState sf1, sf2; + sf1 << ssShift; + sf2 << ssShift; + sf1 *= Shift; + int sft = (sf1 == sf2); + int MaskXW = m_MaskXW; + int MaskYW = m_MaskYW; + int MaskX = m_MaskX; + int MaskY = m_MaskY; + switch(Key){ + case VK_LEFT: + if( sft ){ + if( m_MaskXW > 4 ) m_MaskXW--; + } + else { + if( m_MaskX ) m_MaskX--; + } + Key = 0; + break; + case VK_RIGHT: + if( sft ){ + m_MaskXW++; + } + else { + m_MaskX++; + } + Key = 0; + break; + case VK_UP: + if( sft ){ + if( m_MaskYW > 4 ) m_MaskYW--; + } + else { + if( m_MaskY ) m_MaskY--; + } + Key = 0; + break; + case VK_DOWN: + if( sft ){ + m_MaskYW++; + } + else { + m_MaskY++; + } + Key = 0; + break; + } + if( (MaskX!=m_MaskX)||(MaskY!=m_MaskY)||(MaskXW!=m_MaskXW)||(MaskYW!=m_MaskYW) ){ + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnDrawClipboard(TMessage Message) +{ + SBMPaste->Enabled = ::IsClipboardFormatAvailable(CF_BITMAP); + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_DRAWCLIPBOARD, Message.WParam, Message.LParam); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnChangeCbChain(TMessage Message) +{ + if( (HWND)Message.WParam == m_hClipNext ){ + m_hClipNext = (HWND)Message.LParam; + } + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_CHANGECBCHAIN, Message.WParam, Message.LParam); + Message.Result = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMRotMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_pMaskBmp ) return; + if( (Button != mbLeft) && (Button != mbRight) ) return; + + BOOL f = (Button == mbLeft); + CWaitCursor w; + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + Graphics::TBitmap *pBmp = CreateBitmap(yw, xw); + int x, y; + BYTE *sp, *tp; + for( y = 0; y < yw; y++ ){ + sp = (BYTE *)m_pMaskBmp->ScanLine[y]; + for( x = 0; x < xw; x++ ){ + if( f ){ + tp = (BYTE *)pBmp->ScanLine[x]; + tp += ((yw - y - 1) * 3); + } + else { + tp = (BYTE *)pBmp->ScanLine[xw - x - 1]; + tp += (y * 3); + } + *tp++ = *sp++; + *tp++ = *sp++; + *tp = *sp++; + } + } + delete m_pMaskBmp; + m_pMaskBmp = pBmp; + UpdateMaskSrc(FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMMirMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_pMaskBmp ) return; + if( (Button != mbLeft) && (Button != mbRight) ) return; + + CWaitCursor w; + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + Graphics::TBitmap *pBmp = CreateBitmap(xw, yw); + int x, y; + BYTE *sp, *tp; + for( y = 0; y < yw; y++ ){ + if( Button == mbLeft ){ + sp = (BYTE *)m_pMaskBmp->ScanLine[y]; + tp = (BYTE *)pBmp->ScanLine[y]; + tp += ((xw - 1) * 3); + for( x = 0; x < xw; x++ ){ + *tp++ = *sp++; + *tp++ = *sp++; + *tp = *sp++; + tp -= 5; + } + } + else { + sp = (BYTE *)m_pMaskBmp->ScanLine[y]; + tp = (BYTE *)pBmp->ScanLine[yw - y - 1]; + for( x = 0; x < xw; x++ ){ + *tp++ = *sp++; + *tp++ = *sp++; + *tp++ = *sp++; + } + } + } + delete m_pMaskBmp; + m_pMaskBmp = pBmp; + UpdateMaskSrc(FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBAdjColClick(TObject *Sender) +{ + if( !m_pMaskBmp ) return; + if( !sys.m_fAdjCol ) return; + + if( sys.m_fAdjCol(m_pMaskBmp->Handle) ){ + DeleteMaskSrc(); + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::DeleteMaskSrc(void) +{ + if( m_pMaskBmpSrc ){ + delete m_pMaskBmpSrc; + m_pMaskBmpSrc = NULL; + } + m_RotCol = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBInvColClick(TObject *Sender) +{ + if( !m_pMaskBmp ) return; + + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + int x, y; + for( y = 0; y < yw; y++ ){ + LPBYTE p = (LPBYTE)m_pMaskBmp->ScanLine[y]; + for( x = 0; x < xw; x++ ){ + *p = BYTE(~*p); p++; + *p = BYTE(~*p); p++; + *p = BYTE(~*p); p++; + } + } + DeleteMaskSrc(); + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); + +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBRotColMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_pMaskBmp ) return; + + int f = 0; + if( Button == mbLeft ){ + f = 1; + } + else if( Button == mbRight ){ + f = -1; + } + if( f ){ + CWaitCursor w; + if( !m_pMaskBmpSrc ){ + m_pMaskBmpSrc = CreateBitmap(m_pMaskBmp->Width, m_pMaskBmp->Height); + m_pMaskBmpSrc->Canvas->Draw(0, 0, m_pMaskBmp); + m_RotCol = 0; + } + m_RotCol += f; + if( m_RotCol >= 16 ) m_RotCol = 0; + if( m_RotCol < 0 ) m_RotCol = 15; + if( !m_RotCol ){ + m_pMaskBmp->Canvas->Draw(0, 0, m_pMaskBmpSrc); + } + else { + double ad = m_RotCol * 6.283185307179586476925286766559 / 16.0; + int x, y; + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + int R, G, B; + double Y, RY, BY, S, H; + UCOL c; + for( y = 0; y < yw; y++ ){ + LPBYTE sp = (LPBYTE)m_pMaskBmpSrc->ScanLine[y]; + LPBYTE wp = (LPBYTE)m_pMaskBmp->ScanLine[y]; + for( x = 0; x < xw; x++ ){ + c.b.b = *sp++; + c.b.g = *sp++; + c.b.r = *sp++; + + Y = 0.3 * c.b.r + 0.59 * c.b.g + 0.11 * c.b.b; + RY = 0.7 * c.b.r - 0.59 * c.b.g - 0.11 * c.b.b; + BY = -0.3 * c.b.r - 0.59 * c.b.g + 0.89 * c.b.b; + + S = sqrt(RY*RY + BY*BY); + if( BY ){ + H = atan2(RY, BY); + H += ad; + RY = S * sin(H); + BY = S * cos(H); + + R = Y + RY; + G = Y - 0.3 * RY / 0.59 - 0.11 * BY / 0.59; + B = Y + BY; + if( R > 255 ) R = 255; + if( R < 0 ) R = 0; + if( G > 255 ) G = 255; + if( G < 0 ) G = 0; + if( B > 255 ) B = 255; + if( B < 0 ) B = 0; + } + else { + R = c.b.r; G = c.b.g; B = c.b.b; + } + + *wp++ = (BYTE)B; + *wp++ = (BYTE)G; + *wp++ = (BYTE)R; + } + } + } + UpdateItemMask(); + PBoxSrcPaint(NULL); + UpdateBitmap(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMListClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + if( SBMList->Down ){ + if( m_pMLSrcBmp ) delete m_pMLSrcBmp; + m_pMLSrcBmp = CreateBitmap(32, 32); + FillBitmap(m_pMLSrcBmp, clBlack); + if( m_Item.m_pMaskBmp ){ + int x, y; + int xw = m_Item.m_pMaskBmp->Width; + int yw = m_Item.m_pMaskBmp->Height; + for( y = 0; y < 32; y += yw){ + for( x = 0; x < 32; x += xw){ + m_pMLSrcBmp->Canvas->Draw(x, y, m_Item.m_pMaskBmp); + } + } + } + } + else { + if( m_pMLSrcBmp ) delete m_pMLSrcBmp; + m_pMLSrcBmp = NULL; + } + UpdateUI(); +} +//--------------------------------------------------------------------------- +int __fastcall TTextDlgBox::GetMLIndex(int x, int y) +{ + return GetIndex(35, 9*8, x, y); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMListPaint(TObject *Sender) +{ + Graphics::TBitmap *pBmp; + if( !m_pMListBmp ){ + char name[256]; + wsprintf(name, "%s"USERMASK, sys.m_BgnDir); + FILE *fp = fopen(name, "rb"); + if( fp != NULL ){ + fclose(fp); + pBmp = new Graphics::TBitmap; + try { + pBmp->LoadFromFile(name); + } + catch(...){ + } + if( pBmp->Width < (32*72) ) pBmp->Width = 32*72; + if( pBmp->Height < 32 ) pBmp->Height = 32; + + if( pBmp->PixelFormat != pf24bit ){ + m_pMListBmp = CreateBitmap(pBmp->Width, pBmp->Height); + m_pMListBmp->Canvas->Draw(0, 0, pBmp); + delete pBmp; + } + else { + m_pMListBmp = pBmp; + } + } + else { + m_pMListBmp = CreateBitmap(32*72, 32); + FillBitmap(m_pMListBmp, clBlack); + } + m_pMListBmp->Modified = FALSE; + } + MultProc(); + int x, y; + for( y = 0; y < 9; y++ ){ + for( x = 0; x < 8; x++ ){ + DrawBmpPBox(PBoxMList->Canvas, 35, 32, 32, x, y, m_pMListBmp); + } + } +} +//--------------------------------------------------------------------------- +int __fastcall TTextDlgBox::IsMList(int n) +{ + int yw = m_pMListBmp->Height; + int x, y; + for( y = 0; y < yw; y++ ){ + LPBYTE p = (LPBYTE)m_pMListBmp->ScanLine[y]; + p += (n * 32) * 3; + for( x = 0; x < 32; x++ ){ + if( *p++ ) return TRUE; + if( *p++ ) return TRUE; + if( *p++ ) return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMListMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_pMListBmp ) return; + m_MLIndex = GetMLIndex(X, Y); + if( (m_MLIndex >= 0) && IsMList(m_MLIndex) ){ + if( Button == mbLeft ){ + DrawBmpPBoxBtn(PBoxMList->Canvas, (m_MLIndex%8)*35, (m_MLIndex/8)*35, 32, TRUE); + Graphics::TBitmap *pBmp = CreateBitmap(32, 32); + pBmp->Canvas->Draw(-m_MLIndex*32, 0, m_pMListBmp); + if( !m_pMaskBmp ) m_pMaskBmp = CreateBitmap(32, 32); + if( !IsSameBitmap(pBmp, m_pMaskBmp) ){ + delete m_pMaskBmp; + m_pMaskBmp = pBmp; + UpdateMaskSrc(TRUE); + } + else { + delete pBmp; + } + ::Sleep(100); + DrawBmpPBoxBtn(PBoxMList->Canvas, (m_MLIndex%8)*35, (m_MLIndex/8)*35, 32, FALSE); + PBoxMList->BeginDrag(FALSE); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMLSrcPaint(TObject *Sender) +{ + FillPBox(PBoxMLSrc); + if( m_pMLSrcBmp ){ + DrawBmpPBox(PBoxMLSrc->Canvas, 0, 0, m_pMLSrcBmp); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMListDragDrop(TObject *Sender, + TObject *Source, int X, int Y) +{ + if( Source == PBoxMLSrc ){ + int n = GetMLIndex(X, Y); + if( n >= 0 ){ + m_pMListBmp->Canvas->Draw(n*32, 0, m_pMLSrcBmp); + m_pMListBmp->Modified = TRUE; + PBoxMListPaint(NULL); + } + } + else if( Source == PBoxMList ){ + X = GetMLIndex(X, Y); + if( (X >= 0) && (X != m_MLIndex) ){ + Graphics::TBitmap *pBmp = CreateBitmap(32, 32); + Graphics::TBitmap *pBmp2 = CreateBitmap(32, 32); + pBmp->Canvas->Draw(-m_MLIndex*32, 0, m_pMListBmp); + pBmp2->Canvas->Draw(-X*32, 0, m_pMListBmp); + m_pMListBmp->Canvas->Draw(X*32, 0, pBmp); + m_pMListBmp->Canvas->Draw(m_MLIndex*32, 0, pBmp2); + delete pBmp; + delete pBmp2; + m_pMListBmp->Modified = TRUE; + PBoxMListPaint(NULL); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMListDragOver(TObject *Sender, + TObject *Source, int X, int Y, TDragState State, bool &Accept) +{ + Accept = FALSE; + if( Source == PBoxMLSrc ){ + if( GetMLIndex(X, Y) >= 0 ){ + Accept = TRUE; + } + } + else if( Source == PBoxMList ){ + X = GetMLIndex(X, Y); + if( (X >= 0) && (X != m_MLIndex) ){ + Accept = TRUE; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMLSrcMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( !m_pMLSrcBmp ) return; + + if( Button == mbLeft ){ + DrawBmpPBoxBtn(PBoxMLSrc->Canvas, 0, 0, 32, TRUE); + if( m_Item.m_pMaskBmp ){ + if( !IsSameBitmap(m_pMLSrcBmp, m_Item.m_pMaskBmp) ){ + CopyBitmap(m_pMaskBmp, m_pMLSrcBmp); + UpdateMaskSrc(TRUE); + } + } + ::Sleep(100); + DrawBmpPBoxBtn(PBoxMLSrc->Canvas, 0, 0, 32, FALSE); + PBoxMLSrc->BeginDrag(FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMLSrcDragOver(TObject *Sender, + TObject *Source, int X, int Y, TDragState State, bool &Accept) +{ + Accept = (Source == PBoxMList) && (m_MLIndex >= 0); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PBoxMLSrcDragDrop(TObject *Sender, + TObject *Source, int X, int Y) +{ + if( (Source == PBoxMList) && (m_MLIndex >= 0) ){ + m_pMLSrcBmp->Canvas->Draw(-m_MLIndex*32, 0, m_pMListBmp); + Graphics::TBitmap *pBmp = CreateBitmap(32, 32); + FillBitmap(pBmp, clBlack); + m_pMListBmp->Canvas->Draw(m_MLIndex*32, 0, pBmp); + delete pBmp; + m_pMListBmp->Modified = TRUE; + PBoxMListPaint(NULL); + PBoxMLSrcPaint(NULL); + } +} +#if 0 +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::DrawCrack(TCanvas *pCanvas, int xw, int yw, double &x, double &y, double &dir) +{ +#if 0 + if( !(rand() % 32) ){ + double xs = x; + double ys = y; + double ds = dir + 90; + for( int i = 0; i < 8; i++ ){ + DrawCrack(pCanvas, xw, yw, xs, ys, ds); + } + } +#endif + + double d = dir * 3.1415926535 / 180.0; + + UCOL c; + double d1 = d + 0.78539816339744830961566084581988; + double d2 = d - 0.78539816339744830961566084581988; + int xx, yy; + xx = cos(d1); yy = sin(d1); + c.c = pCanvas->Pixels[x+xx][y+yy]; + c.b.b /= 2; c.b.r /= 2; c.b.g /= 2; + pCanvas->Pixels[x+xx][y+yy] = c.c; + + xx = cos(d2); yy = sin(d2); + c.c = pCanvas->Pixels[x+xx][y+yy]; + c.b.b /= 2; c.b.r /= 2; c.b.g /= 2; + pCanvas->Pixels[x+xx][y+yy] = c.c; + + pCanvas->Pixels[x][y] = clBlack; + + x += cos(d); + y += sin(d); + if( !(rand() % 2) ) dir += (15 - (rand() % 30)); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::CreateCrack(void) +{ + TCanvas *pCanvas = m_pMaskBmp->Canvas; + int xw = m_pMaskBmp->Width; + int yw = m_pMaskBmp->Height; + int max = sqrt(xw*xw + yw*yw); + for( int i = 0; i < max/16; i++ ){ + double x = rand() % xw; + double y = rand() % yw; + double deg = rand() % 360; + for( int j = 0; j < max; j++ ){ + DrawCrack(pCanvas, xw, yw, x, y, deg); + } + } + UpdateMaskSrc(FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMEditClick(TObject *Sender) +{ + char name[256]; + wsprintf(name, "%s$TextArt.bmp", sys.m_BgnDir); +// m_MaskTempName = name; + Graphics::TBitmap *pBmp; + if( !m_pMaskBmp ){ + pBmp = CreateBitmap(32, 32); + FillBitmap(pBmp, clBlack); + pBmp->SaveToFile(name); + delete pBmp; + } + else { + m_pMaskBmp->SaveToFile(name); + } + ExecPB(name); +} +#endif +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBMEditClick(TObject *Sender) +{ + CWaitCursor w; + + m_ExecPBCount = 0; + m_ExecPB = FALSE; + Timer->Enabled = FALSE; + QuitPB(TRUE); + + char name[256]; + wsprintf(name, "%sTextArt$.bmp", sys.m_BgnDir); + m_MaskTempName = name; + Graphics::TBitmap *pBmp; + if( !m_pMaskBmp ){ + pBmp = CreateBitmap(32, 32); + FillBitmap(pBmp, clBlack); + pBmp->SaveToFile(name); + delete pBmp; + } + else { + m_pMaskBmp->SaveToFile(name); + } + ExecPB(name); + for( int i = 0; i < 100; i++ ){ + ::Sleep(100); + if( IsPB() ){ + m_ExecPB = 1; + Timer->Enabled = TRUE; + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnActivateApp(TMessage Message) +{ + if( m_ExecPB ){ + m_ExecPBCount = -6; // 3[s] continued check + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::QuitPB(BOOL fWait) +{ + HWND hWndA = NULL; + while(1){ + HWND hWnd = IsPB(); + if( (hWnd != NULL) && (hWnd != hWndA) ){ + hWndA = hWnd; + ::PostMessage(hWnd, WM_QUIT, 0, 0); + if( fWait ){ + for( int i = 0; i < 30; i++ ){ + ::Sleep(100); + MultProc(); + if( IsPB() != hWnd ) break; + } + } + else { + break; + } + } + else { + break; + } + } +} +//--------------------------------------------------------------------------- +BOOL __fastcall TTextDlgBox::CheckPBFinished(void) +{ + if( !m_ExecPB ) return FALSE; + + if( !IsPB() ){ // ペイントブラシの終了を検出 + m_ExecPB = FALSE; + Timer->Enabled = FALSE; + LoadEditedMask(); + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::LoadEditedMask(void) +{ + Graphics::TBitmap *pBmp = new Graphics::TBitmap; + try { + pBmp->LoadFromFile(m_MaskTempName); + } + catch(...){ + } + BOOL f = FALSE; + if( !m_pMaskBmp ){ + f = TRUE; + m_pMaskBmp = CreateBitmap(32, 32); + FillBitmap(m_pMaskBmp, clBlack); + } + if( !IsSameBitmap(pBmp, m_pMaskBmp) ){ + CopyBitmap(m_pMaskBmp, pBmp); + UpdateMaskSrc(FALSE); + } + else if( f ){ + delete m_pMaskBmp; + m_pMaskBmp = NULL; + } + delete pBmp; + ::DeleteFile(m_MaskTempName.c_str()); +} +//--------------------------------------------------------------------------- +static void __fastcall DrawPtn(TCanvas *pCanvas, int X, int Y, int xw, int yw, int w, int max, BOOL sw) +{ + const COLORREF tt[]={ + RGB(0,0,255), RGB(0,255,0), RGB(0,255,255), RGB(255,0,0), + RGB(255,0,255), RGB(255,255,0), RGB(255,0,0), RGB(255,255,0) + }; + int x, y, i; + UCOL c; + POINT P[10]; + if( sw == 3 ) w+=4; + for( i = 0; i < max; i++ ){ + x = X + (rand() % xw); + y = Y + (rand() % yw); + c.d = tt[rand()%AN(tt)]; + pCanvas->Pen->Color = (w < 3) ? c.c : clBlack; + pCanvas->Brush->Color = c.c; + switch(sw){ + case 0: + pCanvas->Ellipse(x-w, y-w, x+w, y+w); + break; + case 1: + pCanvas->Rectangle(x-w, y-w, x+w, y+w); + break; + case 2: + P[0].x = x-w/3; + P[0].y = y-w; + P[1].x = x-w; + P[1].y = y; + P[2].x = x-w/3; + P[2].y = y+w; + P[3].x = x+w/3; + P[3].y = y+w; + P[4].x = x+w; + P[4].y = y; + P[5].x = x+w/3; + P[5].y = y-w; + pCanvas->Polygon(P, 5); + break; + case 3: + P[0].x = x; + P[0].y = y-w; + P[1].x = x-w/3; + P[1].y = y-w/3; + P[2].x = x-w; + P[2].y = y-w/3; + P[3].x = x-w/2; + P[3].y = y+w/4; + P[4].x = x-w*2/3; + P[4].y = y+w; + P[5].x = x; + P[5].y = y+w/2; + P[6].x = x+w*2/3; + P[6].y = y+w; + P[7].x = x+w/2; + P[7].y = y+w/4; + P[8].x = x+w; + P[8].y = y-w/3; + P[9].x = x+w/3; + P[9].y = y-w/3; + pCanvas->Polygon(P, 9); + break; + } + } +} +//--------------------------------------------------------------------------- +static void __fastcall SetBrushColor(COLORREF ttm[4], int sw) +{ + if( sw ){ + const COLORREF ttc[][4]={ + {RGB(0,0,255), RGB(255,255,0), RGB(255,0,0), RGB(0,255,0),}, + {RGB(0,0,255), RGB(255,255,0), RGB(255,0,0), RGB(0,255,255),}, + {RGB(0,0,0), RGB(255,255,0), RGB(255,0,0), RGB(0,255,0),}, + {RGB(0,0,0), RGB(255,255,0), RGB(255,0,0), RGB(0,255,255),}, + {RGB(255,0,0), RGB(0,255,255), RGB(0,0,0), RGB(0,255,0),}, + {RGB(255,255,0), RGB(0,255,255), RGB(255,0,0), RGB(0,0,255),}, + }; + + static int N = 0; + memcpy(ttm, ttc[N], sizeof(COLORREF)*4); + N++; + if( N >= AN(ttc) ) N = 0; + } + else { + const COLORREF tt[]={ + RGB(0,255,0), RGB(0,255,255), RGB(255,0,0), + RGB(255,0,255), RGB(255,255,0), RGB(255,0,0), RGB(255,255,0), + RGB(255,255,255) + }; + COLORREF c = 0; + for( int i = 0; i < 4; i++ ){ + while(1){ + ttm[i] = tt[rand() % AN(tt)]; + if( c != ttm[i] ) break; + } + c = ttm[i]; + } + } +} +//--------------------------------------------------------------------------- +static UCOL __fastcall GetGradeColor(UCOL c, int sw) +{ + switch(sw%4){ + case 1: + case 2: + c.b.r = (BYTE)(c.b.r * 2 / 3); + c.b.g = (BYTE)(c.b.g * 2 / 3); + c.b.b = (BYTE)(c.b.b * 2 / 3); + break; + case 3: + c.b.r = (BYTE)(c.b.r / 2); + c.b.g = (BYTE)(c.b.g / 2); + c.b.b = (BYTE)(c.b.b / 2); + break; + } + return c; +} +//--------------------------------------------------------------------------- +static void __fastcall DrawBrush(TCanvas *pCanvas, COLORREF ttm[4], int X, int Y, int xw, int yw, int sw) +{ + int x, y, v, w; + UCOL c; + for( y = Y; y < Y+yw; y++ ){ + for( x = X; x < X+xw; x++ ){ + switch(sw){ + case 0: + case 4: + v = (y/4); + w = y; + break; + case 1: + case 5: + v = (x/4); + w = x; + break; + case 2: + case 6: + v = (x+y)/4; + w = x + y; + break; + case 3: + case 7: + v = (x-y+1024)/4; + w = x-y+1024; + break; + } + c.d = ttm[v % 4]; + if( sw < 4 ) c = GetGradeColor(c, w); + pCanvas->Pixels[x][y] = c.c; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBPtnMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( (Button != mbLeft) && (Button != mbRight) ) return; + + CWaitCursor w; + + int xw = PBoxSrc->Width; + int yw = PBoxSrc->Height; + + Graphics::TBitmap *pBmp = CreateBitmap(xw, yw); + if( m_pMaskBmp ){ + int x, y; + for( y = 0; y < yw; y += m_pMaskBmp->Height){ + for( x = 0; x < xw; x += m_pMaskBmp->Width ){ + pBmp->Canvas->Draw(x, y, m_pMaskBmp); + } + } + } + else { + FillBitmap(pBmp, clBlack); + } + + xw = (xw*10+5)/30; + yw = (yw*10+5)/20; + int sw = (Button != mbLeft) ? 1 : 0; + TCanvas *pCanvas = pBmp->Canvas; + int max = xw * yw; + int sww = sw * 2; + DrawPtn(pCanvas, 0, 0, xw, yw, 2, max/16, sww); + DrawPtn(pCanvas, 0, 0, xw, yw, 3, max/16, sww); + DrawPtn(pCanvas, 0, 0, xw, yw, 4, max/256, sww); + DrawPtn(pCanvas, 0, 0, xw, yw, 5, max/1024, sww); + + DrawPtn(pCanvas, 0, yw, xw, yw, 2, max/16, 1+sww); + DrawPtn(pCanvas, 0, yw, xw, yw, 3, max/16, 1+sww); + DrawPtn(pCanvas, 0, yw, xw, yw, 4, max/256, 1+sww); + DrawPtn(pCanvas, 0, yw, xw, yw, 5, max/1024, 1+sww); + + COLORREF ttm[4]; + SetBrushColor(ttm, sw); + sww *= 2; + DrawBrush(pCanvas, ttm, xw, 0, xw, yw, 0 + sww); + DrawBrush(pCanvas, ttm, xw, yw, xw, yw, 1 + sww); + DrawBrush(pCanvas, ttm, xw+xw, 0, xw, yw, 2 + sww); + DrawBrush(pCanvas, ttm, xw+xw, yw, xw, yw, 3 + sww); + + if( m_pMaskBmp ) delete m_pMaskBmp; + m_pMaskBmp = pBmp; + m_MaskXW = m_MaskYW = 32; + UpdateMaskSrc(FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBG1Click(TObject *Sender) +{ + CItem *pItem = &m_Item; + if( SBG1->Down ){ + pItem->m_Grade = 0; + } + else if( SBG2->Down ){ + pItem->m_Grade = 1; + } + else if( SBG3->Down ){ + pItem->m_Grade = 2; + } + else if( SBG4->Down ){ + pItem->m_Grade = 3; + } + else { + pItem->m_Grade = 4; + } + UpdateDialog(&m_Item); + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +TPanel* __fastcall TTextDlgBox::GetPG(int index) +{ + TPanel *_tt[]={PG1, PG2, PG3, PG4, PG5, PG6}; + return _tt[index % 6]; +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBGRevClick(TObject *Sender) +{ + TColor c[6]; + int m = SBG5->Down ? 6 : 4; + int i; + for( i = 0; i < m; i++ ) c[i] = GetPG(i)->Color; + for( i = 0; i < m; i++ ) GetPG(m-i-1)->Color = c[i]; + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBGRotClick(TObject *Sender) +{ + int i; + int m = SBG5->Down ? 5 : 3; + TColor c = GetPG(0)->Color; + for( i = 0; i < m; i++ ) GetPG(i)->Color = GetPG(i+1)->Color; + GetPG(i)->Color = c; + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBGRandClick(TObject *Sender) +{ + UCOL c[6]; + UCOL cc; + int i, j, f, n; + + cc.d = 0; + for( i = 0; i < 6; i++ ){ + do { + n = rand() % 7; + n++; + if( (n==7) && (rand()&7) ) n = (rand()%6)+1; + cc.b.r = BYTE(n & 1 ? 255 : 0); + cc.b.g = BYTE(n & 2 ? 255 : 0); + cc.b.b = BYTE(n & 4 ? 255 : 0); + f = FALSE; + for( j = 0; j < i; j++ ){ + if( cc.d == c[j].d ){ + f = TRUE; + break; + } + } + } while (f); + c[i] = cc; + GetPG(i)->Color = cc.c; + } + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBGAClick(TObject *Sender) +{ + const COLORREF tt[]={ + RGB(255,0,0), RGB(255,255,0), RGB(0,255,0), RGB(0,255,255), RGB(0,0,255), RGB(255,0,255), + }; + + int i; + const COLORREF *p = tt; + for( i = 0; i < 6; i++, p++ ){ + GetPG(i)->Color = TColor(*p); + } + SBGClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::SBLClick(TObject *Sender) +{ + if( !sys.m_CodeLeft ) sys.m_CodeLeft = Left - 120; + if( !sys.m_CodeTop ) sys.m_CodeTop = Top + 110; + if( !m_pCodeView ){ + m_pCodeView = new TCodeView(this); + } + m_pCodeView->Execute((HWND)Handle, m_Item.m_pFont); +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnCodeViewClose(TMessage Message) +{ + if( Message.LParam == int(m_pCodeView) ){ + TCodeView *pView = m_pCodeView; + m_pCodeView = NULL; + delete pView; + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::OnCodeInsert(TMessage Message) +{ + if( Message.LParam != int(m_pCodeView) ) return; + + switch(Message.WParam){ + case 0xfffffff0: + case 0xfffffff1: + case 0xfffffff2: + case 0xfffffff3: + case 0xfffffff4: + case 0xfffffff5: + case 0xfffffff6: + case 0xfffffff7: + if( m_Item.m_pFont != NULL ){ + TFont *pFont = m_Item.m_pFont; + int dfs = 0; + switch(Message.WParam & 7){ + case 0: + pFont->Name = "Webdings"; + pFont->Charset = 2; + break; + case 1: + pFont->Name = "Wingdings"; + pFont->Charset = 2; + break; + case 2: + pFont->Name = "Symbol"; + pFont->Charset = 2; + break; + case 3: + pFont->Name = "Arial"; + pFont->Charset = ANSI_CHARSET; + dfs = FSBOLD; + break; + case 4: + pFont->Name = sys.m_MsgEng ? "MS UI Gothic" : "MS Pゴシック"; + pFont->Charset = SHIFTJIS_CHARSET; + dfs = FSBOLD; + break; + case 5: + pFont->Name = "DotumChe"; + pFont->Charset = HANGEUL_CHARSET; + if( !sys.m_tFontFam[fmHL] && sys.m_tFontFam[fmJOHAB] ){ + pFont->Charset = JOHAB_CHARSET; + } + dfs = FSBOLD; + break; + case 6: + pFont->Name = "SimHei"; + pFont->Charset = 134; + dfs = FSBOLD; + break; + case 7: + pFont->Name = "PMingLiU"; + pFont->Charset = CHINESEBIG5_CHARSET; + dfs = FSBOLD; + break; + } + TFontStyles fs; + fs = Code2FontStyle(dfs); + pFont->Style = fs; + m_Item.UpdateFont(); + UpdateMemoFont(m_Item.m_pFont->Charset); + UpdateBitmap(); + } + break; + case 0xfffffffe: + ::SetWindowPos(m_pCodeView->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +// m_pCodeView->Visible = FALSE; + FontBtnClick(NULL); + ::SetWindowPos(m_pCodeView->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); +// m_pCodeView->Visible = TRUE; + break; + case 0xffffffff: + Memo->Clear(); + SBGClick(NULL); + break; + default: + if( Message.WParam ){ + if( Page->ActivePage != TabChar ) Page->ActivePage = TabChar; + HWND hWnd; + Memo->SetFocus(); + hWnd = Memo->Handle; + char bf[16]; + if( Message.WParam & 0x00ff0000 ){ + wsprintf(bf, "\\$%04x", Message.WParam & 0x00ffff); + } + else if( Message.WParam & 0x00ff00 ){ + bf[0] = BYTE(Message.WParam >> 8); + bf[1] = BYTE(Message.WParam); + bf[2] = 0; + } + else if( (Message.WParam == 0x0d) || (Message.WParam == 0x0a) ){ + bf[0] = 0x0d; bf[1] = 0; + } + else if( (Message.WParam != '%') && ((Message.WParam >= 0x20) && (Message.WParam <= 0x7f)) ){ + bf[0] = (char)Message.WParam; bf[1] = 0; + } + else { + wsprintf(bf, "\\x%02x", Message.WParam); + } + for( LPCSTR p = bf; *p; p++ ){ + ::PostMessage(hWnd, WM_CHAR, *p & 0x00ff, 0); + } + } + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextDlgBox::PageChange(TObject *Sender) +{ + if( !m_pCodeView ) return; + + m_pCodeView->Visible = (Page->ActivePage == TabChar) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- + + \ No newline at end of file diff --git a/CItems/TextArt/TextDlg.dfm b/CItems/TextArt/TextDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..4ba4b34fcfb353f0fe1f0906502c5f6f2fee4050 GIT binary patch literal 38450 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 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/TextDlg.h b/CItems/TextArt/TextDlg.h new file mode 100644 index 0000000..acc271a --- /dev/null +++ b/CItems/TextArt/TextDlg.h @@ -0,0 +1,468 @@ +//---------------------------------------------------------------------------- +#ifndef TextDlgH +#define TextDlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "ComLib.h" +#include +#include +#include "CodeVw.h" +//---------------------------------------------------------------------------- +#define UseDraft FALSE +//---------------------------------------------------------------------------- +class TTextDlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TButton *FontBtn; + TMemo *Memo; + TGroupBox *GBG; + TSpeedButton *SBM; + TSpeedButton *SBG1; + TSpeedButton *SBG2; + TSpeedButton *SBG3; + TSpeedButton *SBG4; + TSpeedButton *SBG5; + TPanel *PG1; + TPanel *PG2; + TPanel *PG3; + TPanel *PG4; + TPanel *PG5; + TPanel *PG6; + TSpeedButton *SBGRev; + TSpeedButton *SBGRand; + TSpeedButton *SBGRot; + TSpeedButton *SBGA; + TSpeedButton *SBC; + TGroupBox *GBS; + TSpeedButton *SBS1; + TSpeedButton *SBS2; + TSpeedButton *SBS3; + TSpeedButton *SBS4; + TPanel *PB1; + TPanel *PB2; + TPanel *PB3; + TUpDown *UDL; + TGroupBox *GB3D; + TCheckBox *CB3D; + TUpDown *UDY; + TUpDown *UDX; + TSpeedButton *SB3DI; + TSpeedButton *SB3DD; + TLabel *L1; + TLabel *LY; + TLabel *LX; + TGroupBox *GBA; + TSpeedButton *SBA1; + TSpeedButton *SBA2; + TSpeedButton *SBA3; + TCheckBox *CBZero; + TComboBox *CBList; + TSpeedButton *SBLW; + TSpeedButton *SBLD; + TGroupBox *GBY; + TComboBox *CBY; + TLabel *L2; + TSpeedButton *SBYW; + TSpeedButton *SBYD; + TPaintBox *PBox; + TFontDialog *FontDialog; + TColorDialog *ColorDialog; + TTimer *Timer; + TSpeedButton *SBFD; + TSpeedButton *SBFI; + TSpeedButton *SBA4; + TMemo *Msg; + TSpeedButton *SBMSG; + TLabel *L33; + TComboBox *CBOYW; + TUpDown *UDOYW; + TLabel *L34; + TComboBox *CBRot; + TUpDown *UDRot; + TSpeedButton *SBF1; + TSpeedButton *SBF2; + TSpeedButton *SBF3; + TSpeedButton *SBF4; + TSpeedButton *SBF5; + TSpeedButton *SBB; + TSpeedButton *SBI; + TPageControl *Page; + TTabSheet *TabChar; + TTabSheet *TabPer; + + + TTrackBar *TBAX; + TTrackBar *TBAY; + TTrackBar *TBRX; + TTrackBar *TBRY; + TTrackBar *TBRZ; + TTrackBar *TBS; + TTrackBar *TBPX; + TTrackBar *TBPY; + TTrackBar *TBPZ; + TLabel *L51; + TLabel *L52; + TLabel *L53; + TLabel *L54; + TLabel *L55; + TLabel *L56; + TLabel *L57; + TLabel *L58; + TLabel *L59; + TButton *DefBtn; + TTrackBar *TBR; + TLabel *L60; + TPanel *Panel; + TSpeedButton *SB; + TSpeedButton *SBZ1; + TSpeedButton *SBZ2; + TSpeedButton *SBZ3; + TSpeedButton *SBZ4; + TSpeedButton *SBZ5; + TSpeedButton *SBZ6; + TSpeedButton *SBZ7; + TSpeedButton *SBZ8; + TSpeedButton *SBZ9; + TSpeedButton *SBZ10; + TSpeedButton *SBZ11; + TSpeedButton *SBZ12; + TSpeedButton *SBZ13; + TSpeedButton *SBZ14; + TPaintBox *PBoxPer; + TSpeedButton *SBZ15; + TSpeedButton *SBZ16; + TSpeedButton *SBZ17; + TButton *OKBtn2; + TButton *CancelBtn2; + TTabSheet *TabMask; + TCheckBox *CBBMask; + TLabel *L80; + TGroupBox *GB1; + TPaintBox *PBoxMask; + TButton *OKBtn3; + TButton *CancelBtn3; + TGroupBox *GB2; + TGroupBox *GB3; + TPanel *PM; + TPaintBox *PBoxSrc; + TSpeedButton *SBMLoad; + TPanel *PC1; + TPanel *PC2; + TComboBox *CBMSize; + TSpeedButton *SBMPaste; + TSpeedButton *SBMRot; + TSpeedButton *SBMMir; + TSpeedButton *SBAdjCol; + TSpeedButton *SBMCopy; + TSpeedButton *SBRotCol; + TScrollBar *SBH; + TScrollBar *SBV; + TGroupBox *GB4; + TPaintBox *PBoxMList; + TSpeedButton *SBMList; + TPaintBox *PBoxMLSrc; + TLabel *L90; + TPaintBox *PBoxBM; + TPaintBox *PBoxCS; + TSpeedButton *SBInvCol; + TSpeedButton *SBMEdit; + TSpeedButton *SBPtn; + TSpeedButton *SBZ18; + TSpeedButton *SBZ19; + TLabel *L61; + TSpeedButton *SBR; + TSpeedButton *SBZ20; + TSpeedButton *SBZ21; + TSpeedButton *SBZ22; + TScrollBar *TBSC; + TSpeedButton *SBZ23; + TSpeedButton *SBZ24; + TSpeedButton *SBZ25; + TSpeedButton *SBZ26; + TSpeedButton *SBZ27; + TSpeedButton *SBZ28; + TSpeedButton *SBZ29; + TSpeedButton *SBZ30; + TSpeedButton *SBZ31; + TSpeedButton *SBZ32; + TSpeedButton *SBZ33; + TSpeedButton *SBZ34; + TSpeedButton *SBZ35; + TSpeedButton *SBZ36; + TSpeedButton *SBZ37; + TSpeedButton *SBZ38; + TGroupBox *GB5; + TSpeedButton *SBFN; + TSpeedButton *SBFA; + TSpeedButton *SBFB; + TScrollBar *TBF; + TSpeedButton *SBClip; + TSpeedButton *SBL; + void __fastcall FormDestroy(TObject *Sender); + void __fastcall PBoxPaint(TObject *Sender); + void __fastcall MemoChange(TObject *Sender); + void __fastcall TimerTimer(TObject *Sender); + void __fastcall SBGClick(TObject *Sender); + void __fastcall PB1Click(TObject *Sender); + void __fastcall FormActivate(TObject *Sender); + void __fastcall FormDeactivate(TObject *Sender); + void __fastcall FontBtnClick(TObject *Sender); + void __fastcall SBMClick(TObject *Sender); + void __fastcall SBCClick(TObject *Sender); + void __fastcall SBLWClick(TObject *Sender); + void __fastcall SBLDClick(TObject *Sender); + void __fastcall CBListChange(TObject *Sender); + void __fastcall SBYWClick(TObject *Sender); + void __fastcall SBYDClick(TObject *Sender); + void __fastcall CBYChange(TObject *Sender); + void __fastcall CBYKeyPress(TObject *Sender, char &Key); + void __fastcall CBYDropDown(TObject *Sender); + void __fastcall PBoxMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall SB3DIClick(TObject *Sender); + void __fastcall SBMSGClick(TObject *Sender); + void __fastcall MsgDblClick(TObject *Sender); + void __fastcall MemoStartDrag(TObject *Sender, + TDragObject *&DragObject); + void __fastcall MsgDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + void __fastcall MsgDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + void __fastcall MemoMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall MemoMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall MemoMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxMouseMove(TObject *Sender, TShiftState Shift, int X, + int Y); + void __fastcall PBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall FontBtnMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBFClick(TObject *Sender); + void __fastcall SBFMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBBClick(TObject *Sender); + void __fastcall SBIClick(TObject *Sender); + void __fastcall SBFDMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall DefBtnClick(TObject *Sender); + + void __fastcall SBRClick(TObject *Sender); + void __fastcall PBoxPerMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxPerMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxPerMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall TBSChange(TObject *Sender); + + void __fastcall CBBMaskClick(TObject *Sender); + + void __fastcall L80Click(TObject *Sender); + void __fastcall PBoxSrcPaint(TObject *Sender); + void __fastcall PBoxSrcMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxSrcMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxSrcMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBMLoadClick(TObject *Sender); + + void __fastcall CBMSizeChange(TObject *Sender); + void __fastcall SBMPasteClick(TObject *Sender); + void __fastcall FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall SBAdjColClick(TObject *Sender); + void __fastcall SBMCopyClick(TObject *Sender); + void __fastcall SBRotColMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + + + void __fastcall SBMListClick(TObject *Sender); + void __fastcall PBoxMListPaint(TObject *Sender); + void __fastcall PBoxMListMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxMLSrcPaint(TObject *Sender); + void __fastcall PBoxMListDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + void __fastcall PBoxMListDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + + void __fastcall PBoxMLSrcMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxMLSrcDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + void __fastcall PBoxMLSrcDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + void __fastcall SBMMirMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBMRotMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall PBoxBMPaint(TObject *Sender); + void __fastcall PBoxBMMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxBMMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxCSPaint(TObject *Sender); + void __fastcall PBoxCSMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxCSMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBInvColClick(TObject *Sender); + void __fastcall SBMEditClick(TObject *Sender); + + void __fastcall SBPtnMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall LDefMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall TBSCChange(TObject *Sender); + + void __fastcall UDLClick(TObject *Sender, TUDBtnType Button); + + + void __fastcall SBClipClick(TObject *Sender); + + void __fastcall SBG1Click(TObject *Sender); + void __fastcall SBGRevClick(TObject *Sender); + + void __fastcall SBGRandClick(TObject *Sender); + void __fastcall SBGRotClick(TObject *Sender); + void __fastcall SBGAClick(TObject *Sender); + + + void __fastcall SBLClick(TObject *Sender); + void __fastcall PageChange(TObject *Sender); +private: + int m_DisEvent; + int m_DropProfile; + Graphics::TBitmap *m_pBitmap; + CItem m_Item; + int m_Change; + AnsiString m_FText; + int m_MouseXC, m_MouseYC, m_MouseHold; + int m_MemoX, m_MemoY, m_MemoDown; + + void __fastcall TopMost(void); + void __fastcall NoTopMost(void); + void __fastcall UpdateMemoFont(BYTE charset); + void __fastcall UpdateFText(void); + void __fastcall UpdateUI(void); + void __fastcall UpdateItem(CItem *pItem); + void __fastcall UpdateDialog(CItem *pItem); + void __fastcall UpdateBitmap(void); + void __fastcall UD3D(int a); + void __fastcall UpdateFontBtnHint(void); + int __fastcall GetSBFIndex(TObject *Sender); + void __fastcall SetSBF(int n); + + int m_XC, m_YC; + double m_SCX, m_SCY; + double m_Deg, m_SDeg; + double m_Dist, m_SDistX, m_SDistY; + + int m_Wave; + void __fastcall UpdateWaveBtn(int dir); + void __fastcall UpdateHint(void); + void __fastcall FillPBox(TPaintBox *pBox); + +#if UseDraft + int m_Draft; +#endif + int m_FontHeight; + + int m_DirTB[10]; + void __fastcall UpdateTB(void); + int m_SBar[10]; + + Graphics::TBitmap *m_pBuiltInBmp; + + Graphics::TBitmap *m_pMaskBak; + Graphics::TBitmap *m_pMaskBmpSrc; + Graphics::TBitmap *m_pMaskBmp; + int m_MaskMouseCapture; + int m_MaskX, m_MaskY, m_MaskXW, m_MaskYW; + int m_MaskAX, m_MaskAY, m_MaskAXW, m_MaskAYW; + void __fastcall DrawMaskCursor(int x1, int y1, int x2, int y2); + void __fastcall DrawMaskCursor(void); + void __fastcall UpdateSBSrc(void); + void __fastcall UpdateMaskSrc(BOOL sw); + void __fastcall UpdateMaskSrc(HBITMAP hb); + void __fastcall UpdateItemMask(void); + + int m_MIndex; + + Graphics::TBitmap *m_pCustomBmp; + void __fastcall UpdateCustom(void); + + void __fastcall UpdateCBMSize(int xw, int yw); + void __fastcall UpdateCBMSize(void); + + void __fastcall DeleteMaskSrc(void); + int m_RotCol; + + Graphics::TBitmap *m_pMListBmp; + Graphics::TBitmap *m_pMLSrcBmp; + int m_MLIndex; + int __fastcall IsMList(int n); + int __fastcall GetMLIndex(int x, int y); + +// void __fastcall DrawCrack(TCanvas *pCanvas, int xw, int yw, double &x, double &y, double &dir); +// void __fastcall CreateCrack(void); + + int m_ExecPB; + int m_ExecPBCount; + AnsiString m_MaskTempName; + BOOL __fastcall CheckPBFinished(void); + void __fastcall LoadEditedMask(void); + void __fastcall QuitPB(BOOL fWait); + + TPanel* __fastcall GetPG(int index); + + TCodeView* m_pCodeView; + + HWND m_hClipNext; +public: + virtual __fastcall TTextDlgBox(TComponent* AOwner); + + int __fastcall Execute(CItem *pItem); + +protected: + void __fastcall OnDrawClipboard(TMessage Message); + void __fastcall OnChangeCbChain(TMessage Message); + void __fastcall OnActivateApp(TMessage Message); + void __fastcall OnCodeViewClose(TMessage Message); + void __fastcall OnCodeInsert(TMessage Message); +BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(WM_DRAWCLIPBOARD, TMessage, OnDrawClipboard) + MESSAGE_HANDLER(WM_CHANGECBCHAIN, TMessage, OnChangeCbChain) + MESSAGE_HANDLER(WM_ACTIVATEAPP, TMessage, OnActivateApp) + MESSAGE_HANDLER(WM_FORMCLOSE, TMessage, OnCodeViewClose) + MESSAGE_HANDLER(WM_CODEINSERT, TMessage, OnCodeInsert) +END_MESSAGE_MAP(TForm) +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TTextDlgBox *TextDlgBox; +//---------------------------------------------------------------------------- +#endif + + \ No newline at end of file diff --git a/CItems/TextArt/res.h b/CItems/TextArt/res.h new file mode 100644 index 0000000..a059e79 --- /dev/null +++ b/CItems/TextArt/res.h @@ -0,0 +1,3 @@ +#define ID_ICON 8000 +#define ID_BUILTIN 8001 + diff --git a/CItems/TextArt/res/P.bmp b/CItems/TextArt/res/P.bmp new file mode 100644 index 0000000000000000000000000000000000000000..09744435a1e664e9d4089d5840d164ca11f6d768 GIT binary patch literal 49206 zcmb@tXH-*Z_y5g3_srbm*y}ib9D6Td!-9$w>Ai+PNbj9MdVtUa0Rkih5)u*!z4zX$ zfFg=YM+8Ao>^jPMGXHnai{Fb`YgpfP<(!?Jvv_gNXYXt8eQwyEYc}|Qf9Le;p}&v5 zGBEf<|M4G#-G84M7&QOC_5Zivl4{YCdXBu2D65I87_y?t1i2l-sz#o&F;3egP&6rZyN{a)op=;l-K`qQx5>$Ki8(3+Eem4>j|iMu88^g_Gy#gXgF{7NL(^ zvge#KW{(H8m`6WCynx4Nz<08^Nz~ru9+{b(--sNZ`P;S)}>h2 zi7jfyW=&%Any72l5!V`H%^M}Qb#ayj(Pnv(rWNU~fg(FSA@>pJNi1m+gMWl4JwV~_`N0Of-Rml=^TGZDw4h-I?QQ^lh(zom zk-7=QE+U}^3QLhnv+W&f;jpG;l{}}a*bfIYbFhS#r=9T9ourM&p$KK1y-q#ID!JaZceaP^rvH4XLorDRb1cmX# zBr%Q_!jm$X*>A6 zqrD&AbgsTjp8Mq6Jb5Ly&0BXr{`u>y7jH9x58{>Agu!QynnzdICD)^CyvkQx=&>M9 zDuf~S6V*auI_w#xZoEckUW+rg=@wS$h)*-TZ0bXebfrXjhi1cQTqk-mO!^p`J`YKF zHv8-5gptiqYL0zal{YoZMmxf0=R5O? z?6V&*gcbIA+V|-1%?VL5jK9OaA7cGn z^Et%P9Qj{8RWBOyW{Wc(WF^m4=k+TSY!3aV=FyuoQo}KDxV0I=#@yxdIkQ81Ar{x7 zi72kWx5d$YR)>D3I$MT<91QLQ28%#meprtP)E@y#s!2DP0}LJk|Car*5!?CPZTsV0 zzZxVR`IF;!@#$8Bq!TBDhIGKmEm0f4qEPIf9R82m;)iyc1z`Vc$3OKKheySPMg+5Y zLP1DjZhm!nWn^erTzF(`urM=OR+CrQR9Kp?$*w6XmBq%#2trybEAkYIJcUvoFG-iA zXw#HD76%Lh8(+HY;^2gbz;G~3yeNS}2_leLF$rl~NL3rKEZ=N~m3ruG~bZ-%M`UMs4|-)w7e{vV~Z;317VtSG}FwxCveH zw;QH^di&$i$+@}ZkFJ7RjHrvJ8c!&D-uU2s&z;AM z%d54wpLz=FaFRMgN@K99Ehx1yy5gQCDJ8V9KSbTc&1j0%Hic)laMZ2zjK010!SJMZ z|F}BOhKl-F(Jgw;J!aM|dd8YFa)Z{7NM3Ojj+@bMpM^J=5WB9Ed(Ob>uMoSeLT9Z*r*H5k zuk*%D!xx>B-(L$``V-N&7t?<-VDtc{XCJET67$|w&I7NMWe3r$m2%EbF=rUuXDgin z<*wRFo|wgqnT9>S8anEdzHA;p<(j$RmGj&^cN$u`3@e?tSKhNq8FW&P`skjbN?$oB zraiM49W$3aa$h-UUs$Bh-AbLaQ!Y9w7VYKp7b6}vXL(k{-Yky3u19@Sl3h!JWlQ|6 zx>&Q?h-*b*S4zW73S-PmVy$u#t&7r}OEeyZD%Z?ZD`m2|MrM(#w9nJn7w5TESHt@H z7$r3bb*_758}&6%{1GU9yH>FLB0W*oL8Q!cInNo)MJ9Wh!+XURyrwf(5V(~LO(qP} zg(WQzNmDq|1Rg&@CO@K5CNbDachBC^N{t_Uh(Q|+VBBNUhY5skGP#dL?xRue67ZR# zgluQeW)!qlSCShX6Ut!GT%ceIlZr%x6XV0ERP=woH88qz)*l1)fcsc^JKX{~8{WJW zmK=NZ+(}PwHvyl0!ti)#T!ct2X&dMQA$>2IU)}oiPQxq4Hf}Edc;vy;M{d|zYRe02 zNWTq+pM4a6t&@4Q*l%MkdV99}S0(=I+iAaz#~L@0e=CM;sKfpEKy>wSisfp)Pb=d{ z0r;DG-0ptP(Q(n`3e@fv>b_p?sZQ3hPR5bD0;5*){-KbwwZuIww1XYY&88G7lMtFsk;zy4HC)RsKmDo@vNKvbA zWSf7&h@bd@55L-zTV#)up1x$E4-l?6fj3iT?FPcc*0~CsJ)^pOMFU__w;Qv_nIbi{ z_c(pY2E|XX@y3ui_yo zYdR>f_*VKIy!H__svk)$vybdVME7D!pTz{%fFMbiBwcun+=QSsjjHux=2}%RhRSav zIVI*n1ve}MzY8h37S--<^ZV9hjOUkU50+bs*Ph-3o{q&pJlc~)l@Xj|xX)yXFc+aDIo%a0_ z?&Fb0#6}^Z`zHW^x~+|T9`G~(ybOA=M*!B*|2_f!E&HCG@jn{GU)YyqygOs>X2rDw zX~%v{T(`kH83i0RDE7Pc0Ax6OeOt%>3|PUwfQ0_~pZXVP=OTUew>ct|!!OFo&rFjg zM1)22IK`UG%p^&%Dx!$v` z5H5qMk|bxQriBZ_Xe0(4L5dN}Hj%0};wv^2tGAG9HWRAWA&b``ivI^K+DWS4j;Szk z$@t1$v(CTh8%W_gRQYCV%Xg^i?@`rX`4)Ty&ixiz_#Lcdn?6!tsf$UedCd}-na0-9{C7qlc?c|tYcZ(zlw;=6y>(R0RZo){6O76eDgDT=ZbQ0)r}UT ztiP}4|3zYISmk3$+fsV>i-g8We_nF+@Z9jyD=ThJWX)u9`*TIli{P9tYP@c6epS=? z02Eh^PiiE~nmNjr0C|J3?2aiTotM`m)V6Ul8e_9tgsKLb#;F z{KXC4(RFC$?E@~6ptxp&w3(P#Nlt0N#}uNX3gP1Fqkd9iYM(&W8m4JJOldcZopP2g z_-Nihvflb?UVAH+^}-hXMJxe4QWres&%hZgt|@bli8G$^MX+>M|KPwgUpU7-K0|A@ zjJR(i7&=XDG3NAJiN>sA9{DJjeH9BHDbw__Px!o7uDL6&S&LSw)3&LzdfiHxv6n7f z4S#qgmUxd$x{pEJC6EVjgkc{@l@B;hEXsFsZt?|p z>x#7c1Sc|#fBdR31nsZWDOZ*z>uL)%*>VRD8w#6d>R{@CggEKeJs^Y-^Ub>S?5LGi;v%^a+dRD5gDp|KRxe&Lx8 z_K|FlZ(1lnb<%z<@cFt1wXKV>zn^nF&+F?B>Ym35ro%B;ha)dlBYv*I?{1~-X(Inx zhx@4*vZVq4Q#*ZsC*x2b>v&&~J_;Nj3O(0CKU|0Zy$<)ASN4ow>9T!HqoH@mFCUCdQeE67r(-Toqh496Ery82_NN# zVSCWy{E`Q4nUzkgdPi=fk9bevTp+i?viV(f?Mq=$?v0@Qo21N386$XX))mPhB5jr) z(hJI%VRrx-DfcLnVQTrj$WeGOFx#48%#|~I+lz@{t8xLkDTY0ks{rO7==pEDV?$eN%4&BAQ-SR z_`P%bd`-7;Ma!kCcEHIXwLIzHvY*{hjJ)vlX9J1p@12HQiuV|Z&TXr5y;}W^LDaEz zs&5T~G(o^N1F_Ljsi|>678m%Z{?b^nI3m)^*~Qn>3x`A{gax-(m0`i&A`Vk0OQym7 zb7aXRBsMWJCOb{ZB$AnUJj}y`j=|9IgqTp__{hlo#H2=^*524uUtX@2$=d7cGt(61 zh2>gRcD5#eE3JBaQ2q9xh8^st&4G2>*-hJ+4d0QJrFg` zG%SDejm(F}WQ=|W@>+(?xtYSMhv@@L+4r8g2dje%8y>vx<#mM73H=@Xj%nX?G#1d9{XTeN+&Y0$t$|fFRlg@T?Nk-FBCL4Bs8$s3Um&#?NAQ(CSG?^(x= z>t!1^;gB$GD!gYOKLypkaZPy&QYEq~@AUv!hsyU7;p z;-{=dk3ov(Uh=0diQ^8jBQ{Y(=JGj9=^Uu=vsdo>!$FicxzBWv2Eu^v>R8a&fDfg{yK(-GB z_KxsIoB%3l7ZeElW!)knqB8`;}e>2F@AFFZ|nG#Wb8&+6|9tgk}pG_Kj{4w=bT z88KJWRWd6tSu(KMikd3;I{~(I-{fe zd7+&loa*L|+_3QWsF= zzzytUa`T!>CF^agc{tpC|6U)CigR>#+WzxS2nHrmNPXat*`UpK$;``$gfe)++~>RMoMpoP5!l}V#>0>9s}X*ShzChgYUh;su%qe7qm zwUB-&1pT)P@qIaLeFD~@yRJX&pzUiV@8RG6i0cAuWJ8Bg(u1~~BgiO=s3tG< zv~yyoF*fO>EB&||^q3Rms2%u_4fMF5z$B#lW?0u{dZv*(^PD&1JWgtx&=fYgR`wTA z4t!L7c^}v}ZY!xi?VE7SfxgcPhX_+ZQd*q@We&(-ysYsCnD0bYI|SuB1mxS1GAz;3 z3)ieY0usH1Ii8dVCkPP|ssqRM!cw35#tnH!boxYhxpNB7n!Eeaqa9HU4^)sXEC3L?HDn8n%wv%l9Y8x+5?Gi^+L!_UnP8p)?8|QA1k_tkWG_?U0`g% zO;Ulic9tjZKthv^nYoS$O(=f8vor62KKU4$o5}~JaTb645bW(F^mIa*oFiSoX#LZ+5GTtab?Q<}`JgU!p|x_drl4HJ zYn6*I*9=P|*u9a=!B}1ypQNu20n>LA@V*|GPvh-xHmXvm+UnO<<`>Ba07nDIoFap} zfWa_8O^X5S4W5ad|1JCV-)qfwRb{h*-wo3JPCWKIzWA#_BJTW4CTM1}0c+#;eB*7rT3`Tl?xa?1BbRN)AcBMrVoA$){WcJbMMW* zd;Iz>OqiyxZF0x^hKnk zI;^M^Eh+^?l%IkrNf~{DjE*Q>o2_`xO}65bzUq;>Y$uv&IjCt&x zJm(}D^O4RY)vLaG_J-egikWbYn+7E>{4MFCd;F|x{H%xMsa517m&7NwqG`L>88hKS z%Lx5mU{Zfg8`Y9?=1bS?H~yu-aZazjVqVXG7tPXD(S0+?IHc$=Xz5$$oFymS6R(0r zZrfW*)q=m~0l93!h+1?Mo9C&VaZQ`FOPjrwJZUPK)Q1wiOk&4x#!opZR~+TbTA^`% ztVzAf@qQQi{i5WNTM0%a@k5wN?OV0oH0(mo#HN+~xxR zdZkO9!nq>ZB2RQRH{!CIZ=?!3olZZl4K&iS&K0tab%E#d7)Cz+B~WZJ3Red~RjV_z zgyC5PVm+B&Lm^ke(3L1m9vYiRp;dr9m4zj0e^@RaSAfB0VF@L^@GJ}=50BRohl*a>YSg+G^6q-vPlNo^ zJ*;CxyfY8uOvfc=dj8)PoN5m^+{@8Ngj4N-2O3FxnuvRv=!fcP2g)!%))RkeCjUOb zJ<-QL(tzF7PW{zOH-Tw*jIna-#?dq`YZ9{=g8Uj zVWXeCY2lviOlXwGha6`L4>@n`bMA)MWhcTluYikg^h<8|qo*#qllWjtlp9{)3J>(= zYE0Y%u6uJXdvk91gtaRL?zt9BxF1#Gs^56 zJ|=~=J4N-l_5$kU0b+22Eg|2SSL&d99K_DQA?xw2eJQG3ipqP$Pz~VOIX80d;mxTV zN+uZPb0PSQtDXsG!<(VBGIy7R3+WTVFpX8|G&f@q=T~@ZxuFEO+p$t#{8xKb2@}f$ zIe8f$hg~>Lx?$WF7coVkcs?Au%?I9|}22TKk-Zg_>Kz|UP#P}3)@!zr^ z`c+`OPknt$=Q;x>`qoqD^R0jUFMj_9aT52#)t}0@ZzXRwh`qY4&f=GLtkv9!uPXnk ze^+ho?bg=n!oo;CKQ1DoyS^?XF_A?gGRY*RG&w#dDmh-97!{io6PGEK>stWg(9qV3 zik^msy7IE>qN0+lEFqJrh!aP#*d&M_*3VlIK;e*xG!#ZaWfUkiTl{l2Lv))U*&F?J z+fju(&_#M}hUfi&FZ+#FyA@He4NO9;H$ik;pn2={ z$6)O`ux0}!Ycn)^y{~#5Nb$9s>}#jwZ{6hobx)^j??*O0`_nf35={5##aidUEG1eV znm2~c7?AY7Hu%%unb)ST{FGIXKm~D86-!vvZDGxv!SDVo_2@eQQ0BGaMB3oO*?{~} za9qoFV~(CL|F?lsfH+PBE(hT#FhTBHG2LN zRQ+64M@&w;t91F6XiDFW^;5t0k}Z0tF8ZV{!c?n%@he>z?rvosJ=(---GeI76Lx0}dQ%DbKV^RZt-);RpzpuUJJZQL(ak)5 zH|$a^WnWv+(GKdLJ)BbyW3JwdINQ!R*d26C|Lx;s%gHpm(fAufAt&1d|7a%v+(Ow? z4Be>TP?&^O!s?fWlR)g_FT4luP>m~?hSh+Mccl7v?kNN31GU#VDj#h#L|ST$iaF&U z>8q@ke*uIKXDpI(59!lr8_s#pz%wwRF(cJWbti5H$o}|7^BIu80(cMK!`oKD^ce48 z6(X|4#*a)+AMmC~JOeWw$!T^Ni4`Q;kEJv=b#O)oc;JFTfnpb|z>BM~r)#az5-WJT z1vuE$Gr$2VFt+jV2}<=065DyB?EN{&q&{18vOQL2>K7h0N>FP_+*n`%ATXC{8t*_&`CH8jV zM?&g-E8of_cLU{Pd~Ci$Orw|PE-~@}CC1kUc=B*WL+rxXfPS)+xc!7&~fW^gNPpfJXSLpBR zapr)B(Gi5{MK8mnPDl5G&YyfF^SO)N*TOPc-~0N9wuRgD(<9h@)mfZ>%f5eijN!VX z6I&y1TvhHih&#VuY`9yu-GFa(u*-5+57zWq5(L;|kn`(?WdCz7t{;s1r~VqLOb>7& zixnjhh=f8_vaGwYB`z!yi$GC`WSLYJ5g8dH2u)8&N)sm}ghvMA@cIxC9~KrJD$G@@ zTPi9-89}+S)C^IqkV=l`1y$v0CE>!<7*Q0H6UPny-b?+RN5%%QcC&xZE=;i={#)Vs z-+E_$@2lO0EZ7Xo+leaPg(=lXfen7TO@6xXL7HzpGXCQ%|DR`uK6Y${=IYnKf9{vH z1FGBRpS2mRTJMp*!6SVWNcEkEvVZY&Qfa@D656ty-Kb@NI=p0npWPXn-6byQ;;CDs3VLYjzCWD9 zp|UP$Qk#dU2^3S~9ovFX4jyn7fs;C^X`R&6dOiPfq6&<-$}6J$EK-fn=;y0DWAnO< z=)LC{{nvTJ7lUq}z|>!34_piEIfJRYLT^7$Z2ZwNV?VgyJgLbLTWi4^unxKFnYQYX zsBa29_mr>bD?)y%SNf)aclzI_e(JYAneX*77cX21pS&DCdr?0K6nyV$_{`<72`A-( zbH=lMxMt(v`$n8$y(}eT=Yo43B;(-B=RV52L5(j7+4ne=v&`B>OztB$#XW4!YeP5GK{^W_b3P9nh`8B&ordQRoo3teZa_^;x~Rt7xm#e^`P1h zsR8+xyeg;IA?#8^X#tzkA&pLid+7^4jf%uCPaiCIHuNi!hZIsh|J#yc{f&;fojV!~ z^#Yq-bU1s|?)W~Eqven$y)2y1cQ)fYn#Lo&3PJ+hPw%(h`-9JgQ+`(rVJ7Eg4059+ z?$+360Ac{R81NF=;&`n706=`bcLw;k?8aXg+wAH*vr%(#V}-?!9X}Wdul~{qH+#6z zKxp(+p@D%@Pny0ol=UA2dNvm@`KjQa`iq4jiIHL9T((TCpJj-T;_?Ps+iQwT_x<+! z*I#}0+nztZ{^si=hmOa_h@}!~a%_T-$w?4~hcW^wNSKJvYA-9uOHHiRWmRS8q(ns| zM22LgOCxzKHieK7Db();HhQS_+6vCzqL;636Ii>^NBcidl^*GTgWX5F!CSN5EAx9# z^*RsbW*_x7KkXK4Az%wgz0*hA zIsOUBOV?H2{|Ep#-~sC|m>z||${)OFeelK_7TkCLtv;h$XJo$RlG#Nfb!ZtV?VPoR zh0ZPk_vc?29J{jH!p=J;xqlu=&g&+HWh9aHw4%!4U|mO;u0ved!^`Z9Ea;=C2lndupVA4}^FO)~B5nZ1wILOQdtGDU z^8Nrt4^>vD4AM4t39~k_<6z}WeZp@i zo(5|^m`0AB47%eef9;U=&Qh|XPuJa&=D=x-Slv@*&0D9~dl=n{yJE&N_MTh%ePrQ0 zv+@;OH7=-`5p}Hw)-GWSCJ2?!84a(zb<^gF{T2yBzPStNqE{Drtx(;vk9z)A`~#P? z8C&^`x#Z#5h~X-!ceTW&HO;#r(XL){tD?$$aM=I-tCZE}@#T$>*yM`|p=V-(P8H)% z6=055(@!;U&gF+*&X2sN4Zc_$W1bs%O((pp<^D~6ZO9cB|GbiYAv^SvH1MR7dsY{0 z%wWA`^WN}7)^LG9N?L1l)NN|u3juc}l)uX7&GR`=_^de=>lqR`R#cn|hxYT?k6D4E zoS<zmaL=)x_*k=UFGZ^9_nq_$kwEnc)9~b<8 zwoN^8f&KIEX5ZNePuj)p^~=8Qp|e6ISsrv;cNS!MnSeW>F8u!9dxJq>^JCz^=<^F> zEB-0z625JV?AT~C|Lw}tPWkz|h7x9Hse zGr&IAA91xe^5~$z@NSs(ScZQSZU0D$-J=8xhq!9$?YFF1z_<3PX;{N4mxPnf%u~1o zTTv&f=@qs26SCutYwgM{`Qy{{Qo{fxw&k`C_^bWR8|B;gFx|j8daB_q)=3ca2rBiu zume*!D+U05_p6%%-3bqdk%ebidaV~b{kpX$FF6;MJm5%6bD>HdNvZafbX#1C8#m9` z+T*N=jSndVL<+m%^8^Tc>V-4s@|hzHQX!ekMpQ+({JNt zJNmyPcmNAAs^Yd(d+K&q9BX-VE7rc1A4JOWZ zzvOf^%ivoV2^u)^P0l~{uhgll3vz_a01lNTkBi|^nNDrKZie#l?cS#1;!%BGKd8+^Cq52-A)hGGu^+g`P>~%hxZ`?D!byNP&UAfLvrRV=T z_tY(5)pmWU$49-@SEG*w-+L>+bxZxmMW$!Ip8T7AR2#jNe}@Ke<_@s-Cvc8^K*24X zmZN^CYF)ek6j%X(&%hchqtA+veT$GCTehHW2WDRY`o6%&wNKs=jTUIN6QfvK|ElCR zu<#bp4-4IYvf|FKw!~yYBbww*@0;!eOP_!b`jS!aq+?JCQQi@l*~`o6rlobqHH=s> zvLY*oB6E8payt@=dPB4wg1p z)<{*flj3VgNeylx<%XzCM)sgU(-T|J?W|e==f4K!zVIt}1uuJtDtnJD|9~ucjV@WG z)PBO2z4lN}+9i$HCXG1B#ypg>R?=Z-Ms`!pg+GFpc)m!P4_VQWhgc&EvEVcB7ZET-M@)$066`c7Dp8HY{e{{(_wP=Zy z^E9S)NjmVJUir*Nafe#B8r1ThSpODYz6>p1xs^EVl`-q9UGUXBV>AHn$~pbNaWnqD zTjqjE;$&x7102UrD>10~8G|4bgd?G9IV1E3`q^MH~!jo~4 zR}&L%WQlB*5jQg;PGv+IriGr#jyK5_TV+O=X~Qg3!KP}Si6;13cErW(NaIY=Sp@DC zg7^*_^cM{GB__TgDWU@hA1Bk6^uptx;V?^R+&mt?0QI?7Rh{GOIsk**#~>$Ah({RI zC=xacg-@Z8(>P3%QriUfc?E_&_eCuGz*oFsPkoUKAioJN*VV~q=PAoyj=Sx0Q=Y%U z-g6Q4hh^wq_xLj=f;~2p8!m}P7m#P^N=2eJ%Ze0uSW|cA-kU@9cXq|Zx`%}VD@%F0 zL>AR740EVB?!s(=@q8UL7=KZpb$t2!`Sr_{S*86_rgH=1(BrgQZ`-ij=9`{l4wM?QFvAY9jsILjSFayt^3m-!i|i`)R+m6Mt>Q{#JwgwViXQKjP%wbdirvg2-%C*1G{-N}c&gU?a( z9OdJfnzz{ckN&Oi;kVz=@4k+h`>c8WIScs2oOof8(sT-A>&h8^;wY{yU-~h(-xoTOi}uBv#vS%V|X$s zOJWPcFr^h9oK$yesxwvLNYBvo-yWUh7t?BZ)d~_A4PnGzHnpP0XuUbEb6p8r|s@TIUi_U>;Iut$K)-w1W}JrvkKB`9+r1&m*dqBef3+Q4OvH z^|`QGyWm>;vL!yP$bwO3=PW*f)ZEa{@PjJdP%0DUXaKX`P0$Lm4c&8N{}0d`7n`+m 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 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P10.bmp b/CItems/TextArt/res/P10.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3edddfdc716244f3d757a6ef15f269752a142bee GIT binary patch literal 3126 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 Q=>aM4qR0QCbUkMM9}<_X;{X5v literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P11.bmp b/CItems/TextArt/res/P11.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4e9fa0951c3d56e8d83da7259fc4daf179a9107b GIT binary patch literal 3126 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 T!)Rf=*ZwoS`oDTj+sWRTGaWHgcg|&a`k&#} ze+DXvtKR$nzgXySq51zvhW}9vr?R#FS8Fpr`A;qJQ)`?4dojo#duYD%gw@uA*4vN# z4`P_LWh%AAUlpqT4`c{jxt`(De}>Edi|6$G_h)$78%!%)W zwbD5*bEuWhahXG{bdJj$YNc~r=1?o0<1&Y8=^R%+8cqLr>kC}zmRjPt(k->baiv>o uiQ`JQ)Dj;}|M=TWxXNv6iBl_`<1&X@=^U3i)Jo^L%%N5~$7K$!(?0-SQ?`!) literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P13.bmp b/CItems/TextArt/res/P13.bmp new file mode 100644 index 0000000000000000000000000000000000000000..33bbfa84572528b131a2b86db22a9f5426e8c88d GIT binary patch literal 3126 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 UeBSsdPtiFzfAj8#H;!)q7YE|U)c^nh literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P15.bmp b/CItems/TextArt/res/P15.bmp new file mode 100644 index 0000000000000000000000000000000000000000..848eb5bd7948c93dae9bf11cbbda6248df372b7b GIT binary patch literal 3126 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 P%J+Z?Y@)y;KD7ORbpNmF literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P16.bmp b/CItems/TextArt/res/P16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..498c237e1b710e16ff8f9ab4bdf87c3d2e980e69 GIT binary patch literal 3126 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 A^8f$< literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P2.bmp b/CItems/TextArt/res/P2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b342a86d3efa72c56dbe5ce2ee379f5163e5693f GIT binary patch literal 3126 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 J>w&fM{{w!0#jOAU literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P3.bmp b/CItems/TextArt/res/P3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..87df07661ac7d3663d9315051579f5527cc3e9cf GIT binary patch literal 3126 zcmXX|X;4#H7N)1GYi6paf6UbMRCiBTJ6hfJg0wwuqbNpM!X8345=cl0VF@6spr9Zi zNDu-7352YW1jxb;g3zLZ0s=zV2_zvKFJvK*AZTmb#k`uHTi-qPUcIVw?z!K2=X_ov zXaC~zzjYS0-+}vI|KA_Dd;K<>fBD^_S^-3((LHAbTD~49e;3Z&g_daH_W=ZB zD}rZ^6j;L=jSgO-b;Pb$xNduRyM@}O$$jFWD-H>QrElYe;jHBtFg3m&Bicp^ zY(X4z5Ze;Wu|k=fUUW62LgiOw3~sU^MGkc9KDp=6J#Q+MzXke7iEWqYE4~a(bmy-z zJqJjs4I$Z#Xt(A+JIEL?lf|p)z2?)Ioo-2ToWOwQYGGVsK%Lf`p#_f$0#d2*sn#I` zJ7FAq7;hKG-bZuy;T*v2`V$z#jN&?inU-Lt4N|@cV;its08y`tm8oK7>Knbf>`pa~ zHANOK_*IQTN{92t4!vm;SBfXYxq3+P6qdh<(AS#y?;*$t_j#@4BmWzHy(C06DDom0EFGCOT)Qd7mK zjWzowtKUN4&u9MZ%o%x;`sg6G&mPmY6HvPt(P$(#n~7q}_2I*C0e}@4eX3V5A~U2` zi(nh5;(Y?ga+JjOxid^@(noRD5~Zg27UT6HTmGmMdV7G#n&ZvCtDbP+TeYY2`zhU4 zYX1(Q4Ip-!NbM%P6r@-U;_R&_SiU~G)gB|;31;csZw#L409jQDhBJEm?f zt=*1cEP;tc@|1}knu6y}&+K+w&1CtgrSypz$y*L%&Ev#stVo4x(Z=`h;w47E+Szcv zCProfYZWg9+%gBx-yRF7RsH+svv0B4$!}6{c3Q- z2ApSznj1YP+URQ%XYnIQ?so~2Gg)y}>ze!5dIXpd&k;%aA4Cbzn{cz@`Y400D#r}C*<@}$kcIUp|waJt5g zEbuCLiL2ETgit|mR@Dn)Gl_DoecETF8;Z4S1#uA*RjF)dyn{CMwBY|s*5pG9tbe~5E zT!|eg;``mn^7F|LKE9Iw1BsW@{+3XuPn7Rs>eVFi8kRc`9{6O6)aS;~Kf`K1IG1;v zB2Sds!4?!)qa?L#hc}yXA|SD6FG9RY;OIj*8mjCNR%twj>o}P(e1bA|GXBMhYtyH) zXO1TK|2~PE z&sjy?8^4e@`%~KU^}1v7FSUdeYjHK^lc_U5QpbNxTe+C0L)5F| z_}_ZCbns^hHQy)LySZp%2Xm)s?UjSZkbQv9BWX6 z$)ije2&$l}75WQ@P_bYBvzGqIOdkT=W5k}BJrEkGg0{Tq&MRfRK6%Q}^36}q-TcF+ zSjY`|DDCIm9(`t)I-_^}_T$a?wnd6`4%f8mU-KfaV?U%`3n^21SLiO%48GO2E4BIr z!Fa=jL%8r-`0{Q2_+C6$618K9UnzfL-&s>STx{>{W9I4AcP>Evgtw-QQUIn!fNI`P9A*n+f z*J(ua=U~j`h$elE{1r*!IF|U(HRaJ6#%6Z+T49%hHn7kywWUckTP>il1ch$d z#BYMdUs=bv~D<*TCc>+Q4GyUa%r_ek|i zltwkWLUC0Hpzbf6%jo-)f7$8mfgpx5T4F;qZTd1-0@xaF<_ajM(KQQx1rKAmOI0H_ z?(`e(7(nY$FdiwG!-|IIYwR&)Ugvbhh?+hHHp9u>7S$J5vc5sm{nKP_n1-XU8uw_) i$B?@&U&cgo)JX$xi6Rr^{-S5q+-2sPSA#03ZvDSD#2;w@ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P4.bmp b/CItems/TextArt/res/P4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0868ca3baad86a8dfd6fdd3579c44fb88b10d738 GIT binary patch literal 3126 zcmXX|cTm$?7JmEx{=NHV|Js?|+4pAmi3mtX5Tpo*Jc=S99VrS@lui-?L;?W<2_Xp~ zz4zWo4}=m*5D=sV0R_Yc>Qm6a%sFSiTjrZP_sqH9jlALi=O6xO{+|4^C;tBb z_|p$RdXUHdzy8PIkIWmmrW?L7Hk>eqjMXBejmQ{HcZ9kt!q69EK;Ibaj}!Dn^Wag6 z(R4ZSmY8}=LeCU2ZVPC)_~aBeF_}$Cdml;Q{94Jq2)!-|gWJHV2(^ka>B@`|V!f6CL=%aDAblzD7D%L3V4oMVqgb zXDdY65_zsxUo!4!m{|d@?8Em?a38*rKDub9XT;-AxX-7fpFWNrz8YL#>u}6A&rUb! zRHbZsI%_nUhKVO5t}r@-`F-I!%CFBRtG~QPe|3w_0gVe7J9jJ3+_LX(wHq+HTxPf1 z0sv;ftvNZSZ%%_uf&v{WZH$u3h{LxqiGg)DLF#jC>;x&Hfc;x+WJU5^_b8B{A5$6`*Izt1Wc^BOmjRN`h zG+e;c|AK0~Fw*)9rtxPo$Oqr#MQ`#Y)_E}-FO%yo(I5FR>-;zkew^+bGGwBtH$goR zYo}$YjPYh$>V&?~vG8d3b??e{#~Akxp(|MRC_rBAr>OUqRsWk%=f&*|AvAi^+XBd~ zex6K)1XEjsDBvI_IGETPNNDmSg8guf-lP^E6*fzaPO}iQ^r$2q`np0Dv#?a~<#hPu z&4ApH--ihr?C?P}dW$Q(1?B%yKlawQ`tv(N`S1t^G)Rny;ld->ouLfS@63$$FbX7q z)Dp<*2*Ea7B!Moop}{u7Z5i#hoS7+8l-cLOd%JT0aQOU~jboHyhkQ{;FDCpa{=mhd zZtua)i~aB`sKH2P?+sGdHFB3X8SYEy@L>&vbCL11u4o107QyxW=PLQW# zWXTvs3QC^ZD^KDX@-3@P3k%Jjrg*c{C+!Kfo2r1XT;~x+ZmuBUV=%}tB|Ub{RHQ8Ml^wb>WZR^(ZuPWai}|St!{U!&vM~0BAippFa3*w|=u(zD*f`RjX@f9C$qgoX(vsvsMLM>0{(@rVtqg z0IYL>Ak(GkO{vzIEa6Nl$9m(r6Xpg~-+{F+C$|2VjepxH{>x7JUsWSN zy3T42zRm8t=Pj-o)7MEO@O%o`HvMDYOj~dAddENa2fWPEYoGUO=DzJaflm{_y!wMtGt%`&}woWJt?N@n z1c=7~`QQX58B1mkhS5=Bs*Wr2_Hb=?s0`}I@Al`xFY~)E>F^Op_D8Ng__U%@M$eXW zQ|4_Cj`v_Mx4>3?ky4l@<=o-Ze-+bi%b1yFQRT)_?d)N_-T7$sWB+@Aed-#rOy{Yn z$ui<~4J<<17BU78({+V#Ixh*~0bH0D8}U4BXX{rs1EDz_5rRZR<qV9^D7)qbOCe4keoAJrx!>JR@tSR;g#4@LHD*HsrQjebB#_tSr)Uq+c7=Md3goMT zT$X?WrJz7zYk&k2%!h_>AORd$sA4cqflsz^au&ua7p#R#GlgsOWe!u`7(aQAo$=CC zwKofTG21*TDWvs=GeCZnhKrn<3o>w!3Kr@qilQS>*5Nz$Bv=Xd^Gu3c{MjDas`H{X zU7|F3lbbJj6o&*27zOzbHeXmWmoA&~4;HImEmfVpYX9WseFY>ZI|B>mN;N-oQhVPt z2i`oyyn2J5c7Uh&xpraUhPu=)$fgmm434}|fdi=ZUi3z9ev{AcDQV+Xr(?5a z?Vx#iuUaTZp)CBj1DNb)EmY8Vza((Loit#kpr?*P~BChvaeRyu0%(llXz zgamn2jEL}5N^E(!`JSj>gQB<@yuK*;aH0;Mw8YJS;p{p2L|Qt;DeNs2Ng+pb-@XJ} z-$6My2R#0Hf8=nrZ%bFZcP^6H>#4d@@xlYsKE!c|Tsj^$DoVucbd5OAC@aPabNSYX zPPc3g5H0Vb1^S09TDn$V=J{>T%z?eAuidNk$v^7}{`zO2<#%WgvxuJN>2bZJ5XHIe*`shGPCfSzSf4rvbm}q& zmh04wvR+ca)>I9RGbVC(cUV`K0V5qmy#FPwNvNJ^G$IB&nu5k94PX*HfF&$c=&F_a8jAU!3nmW@JR>;+#C0|NVb|{KN15Re#Lze`WeV z|J}d;-G5|8nfmwoZ7CEL^<;3k*Y2L@R7%sT>aE3Hc2$R6`~#w)63?eHnhokHXpBOLPb87^ER^jWs| zBH4S_1-y0mcAUT-2=BOvO$goc65CF2?a$Yz#wPl2=FU^}5=y?OsU-w_N6_;av0!rz z+3e*NrM=g0j5_QyO)W8hXebhSY6KpJ0waO&Gg%ujgOAkUSUeGqMh9cDiIU1krR5WT z>zTi3s<`--8JY^}!()@(;mGr%lG(C~>HNa+Q1D54)pT*u(}KuPH5Dy)?{!>h^ZySRaCRphUj| z=s<`b9PcE^9!ZV%-cQ2l5XtxZ@T40}dZDBbYjHw%H2<%%|L=O}3YV^W@6GwcGk){R zGEYMOOG{6i+M%KCo7xTtZFY5ayIhNgylpBwnzE%ydm^_fvR^RrGlKjSYwq&mUpfAQ z6pk7Gh+?)`ZVyJ5742&%@WUVal~J#1qfe~xb4~pg44j0llYn)Qfof*lm4dPL&aO59 zcx@>ghP$y~KHAzg2wW-@JL(r#t_qzelD@$8drDa`SQ0T-KOR9KAvi zPm(<&9_WOi_fYx(CQ=}}PcZvl@FR$wgXC9K{>6*^T2k3pTQG?MYczM50gmru$RUiS zaD2~Wdp|VX<+wTTbuA&#x({4Ie9Mq`%L8n}&}R%8ZN4*Vx1HO)X$N>@1CDdOyAEhC z&$<5iabIUwS9M);b!}}lR(CsITpcSYDblO}mrPca-d2J^Hc~*>)aVtpTz(N(U1yb* z>Y9NhnydT~vbaPpF4c6!YleW*N+Z@#Qe4SJ>m$vHBEJO%14Oc`J@@9A*Y(O{pL4tC zT+TNh*PO#WXR|GY^irID3?W|-WCej2J;1ydm~wk2z2KBBZ?G{YXE{H*(3A&T_hM@~ zz^V=Um*R&+6@p7TuZ`)C*NVw9LbRbr>-Bb^n3oPXW;E z_{3cp-_-)=hIyu|XQHyN>8FZz%8946HWsVy5!jTA?qc*l zjP5vG>(RPFO`FBJw5+9dH7)BY%YP(WX-PfEvrkRE?9TOmVWbO6I>Loxj7yXJAtN4P z!YRxS{_XAziS01d`p9T+#2hIp7%wk-UJ!g9Fh_#suq8bRNCQm`)eTi$D)&^Qhr-%3 zi5?I6-vmQ1E$gjBwv0ZlA*iPU{|Y6hadIAn=22n}K&DV~K@r-U8d?>0+7KswWQ7B; z5Teur2I?D{TH50jTS`ksl#nmT<*HVx`-@7; zhhF5+4IX*GU0vFg#4S}yNz8#}JgBLEWGNT<#--o5jQCIU&C`H!7BS8N_|voTUN`#1 zvaV$P((wPRTfZpk56$>lSHAh+$&R)rCvZ#%`wW|=_%zAxQp6_|`KTzFBla!vfEQ9M z+gVjJB#6fW8 zLtD8wr^m_XdRy#~T{5ZoG0jH}l-fIkwH4&ec5E zrp>k5mh5b(Z;Ur3ipr{*;%4=2y`ibIs;agsnn<)iOtkhT+wZg`y4#xD6LF^gc6~e+ zPc$Y&prw28q#Xb-*KST^`J^vjYQ37*DCnnW1M=<(s6WMfpfn(kz{p^kjR(BOF@_s_XHVMwjCQ zjJ`+V_ZYDR`raYPyA0cN-qkiVsM-if@5{<5%I@P*n&ggY{sdu;+_q;AAN1w9mjvO2 zSJS+7z>69Cec{+`2wqjqL``wG*FDS7i!Duoe5o%i|1Bi-=L-+R@{^D}6cmR8{6MUx ztVk~_48F(@zlsE>!scu^FdYnz1+C|nc<27T>Y%zHNzV?ct^UNeq%=+bm zcx{UUJ(SSloIKp)VSa*unV)}#YY-u2;2G?wh>sB<`$adC^14>k3O5!N_vh2s`waYI%=EBc|`J*Th@ zvHCtY^pTZzS#g(*BlHi0^avF$7_)&i`R5zXD>KiD<0P%EM-L8#SH$*Ec%fh~RQ%!3_ wZDVa&zMt%EEe%Rcc}Za;XjB%+C1JcMR9;h9Sz8v3)z&mcYfB6AD~b#M32Uk8qyPW_ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P6.bmp b/CItems/TextArt/res/P6.bmp new file mode 100644 index 0000000000000000000000000000000000000000..79203ab2c0c0e7dbcbb1fb3e3fe6353f3737a4e8 GIT binary patch literal 3126 zcmXYwc~BDu+Q#X(J3F;?>rq85f8BAqP1KIUpAa2}gj0Bm}|{ z&Ok^YgmB-tVqJD!TeoUGYwNo0r>=f=%et$zvulJH6F^@Bdl;!(OLta(#g=D1%^N3?9R1ZrGaABr=pBjMn#ix=u!e#QW2XH7Zx9x0tNHrm3*Z{rEkz% z%~(b;noja8PBogFtJSh17EMwk<(AXBJM~g&`8&Vz0j4J~`79Ef3NOLsQwrmAQ}w;= zk%=+IB?N7Q1`r?JY%#Rith-l#PvMrPLcxdpj>e~_AP7ZFAvZKGA{zx8UzzjFkIya5 z81)U&;1otV)8iT0d-kX8tvT0(4MRdmG_o8FtVGO~nY0iR>gu<5OW3q2_t@s@5&#gP zYd6A+3kyg%2pR@K!QxU9OPKUnP=cshLa$&!FmSF^sBhIN>r_p8ErCYO$jx**2R_@~ zym#~Rom*D~QUR8T`_S(wgI{K~_fy%7htHmF?`++_d*j^pI*w`rs5j*hj>Ff7o?!VfWq9jl*N}$JalJeEJ&y@MQ+%)a{Y*=W7v_3hNeC3J1JbredA-qYR`rxyk zgT5c`Km0*-TvS^5{y?Hn1n#{k*1^H;`X67vV5repYh;lXDF1}WT7ff7S!sl006G3Z zXP?i`jiwi`EZ_fl`1bc_Z+++c*bDsfPt$z`-_FL}90&E*hEpJib{#p>^#>059?8vz z=v%bqYFI4g{WwA(i0OwM1b{Stry%blbTKH)$MlITk_XP~frVoCB~V~#B0x?oR_=eN!V*DpuE4zPSE}x;i|L zdNdYxGMeB^7)i?31SRtVVa*>CJI`ilgAms2qHZ9Fn;;*tcaOW_mCA6}_Ssu6!_Ix- zYi=j%o4tF_raj$iDMZf?Td;s0&Za!sW;F_v-{$=0r=MOt-y4?ydexQ#p+qE;{Ym|4 zIjSh63P|jZ$Mr>IH2W7=0B7o<0eyq5OIPN;d4k~bVluNbusFVm=dd*YacBL){PgnF zuxGG-q6>A=88_dS#3meq7MS1#Y9NReN@+`lT4K+t zfZ-id-}Q5T?zQ9AA)s@CH!^uTB!pK+8SQ9YcG#C)wkfxD-aW9jFgovPcw1SeBDbxX zx9G8suC4sx{@4HXdLJwlsJO?1(m+SR(2uCdP!0;n!^P1d$TlfrZ4>R911j`@<(({3 zJD^@$Jz~p2WA*jgQES_pXLQ|VUvb;!W(OR0tHGof*H)AY2z)h%TSZqIb$dU*dG+R> zD@H$;36fk_8>KQ~Yt)iJAO zX5Q_%I=btix;JZTCI z0Gu;C=aD$TS=fBSn~?XFCew7??{v`IZ=?FN6gAEE~rq5{e%6nQb`OP zMj)UAW-bQ0x7$>zl1fP&3F?>V7gO8~z_)_o+Fu>XIt6(K$a9@&)4lt@tB-^TqM*(=OkJg{WbZuACG#gpL1F4VfH5_>E&pv#uRgqi9V42r7)gC) z2m`gZO)FK2hWk6WJ&w&W`-Sn5kuFPtnB4oQFT5owxFJyVdtr75vDUf;BV7p3nTW^O zLh`I+YR$`C`gfZN-+BPkmf#d^PFiOXVvJHbqmXS?(>55Q9dYGiHPRs%9kkT9Xd3Gk zEAF8UkMnmEZlzk1Qd!)7%Mh&%3#<+h?o>r7q8W`ezFb?b94zJ4cIrx>E#qEagm^zg zdhZl@ud~|5Sjk-_SXT*b0)d{y;XFlxRcVDy46P?mPTJK?s>WtbTT6{uuW{Kdb#>JM zd~W-vJ^%OoNunO8x}X8oB$w;?Ssb=dr*qo}w)zYA&gZ_^K&=_h4$8tjswhW&tYwr= zALEM_<$@(4x4%3ApO9I27DmZ!?P={F?w;M83j%xqNc7J`q#N|jFba~^D`2ixAo@|| zvlR-5u&{!48cU91mLs`5mjUt38qwC2`QWR&7S6jH9Wj?We7$=LcQ=hBCy_N6Ff%b< z3Z@S*7dIAb^mRsyu76?}1}#ZQi4BhrLZFc*b5kY8RYMqU6@tw6>IEJfHZ+$T!}fMKz+v zj;5v#LyLWz7OiZ!x0^2!QIzTeX;r$h%b!;_w|>Xkvmsa2G8yENcHxur z)YrRc@8@Xm)!ZMhz?>~*yvo8{MU)@?e=>BDp^Br#A#`JF_0Z(-^y+kBDUrV|(~aA@ zEIlzmAdyJ&boFbL_1PqTD6YhxD+%avfx6s`N-L8gA{7^H42iG1viCMnH%79rZ*|Ie z@J1PpuOP*#LqEUw3C}^!8%^Td*&;E;&}%k!wN|R7sypSvEwQ-C7!#3P#^g0r>o{yi zfucG@tct=>!>f(K>b7Wwwz^XCWK(>_cHqmwV^23gj}}T>>&;H5i&_w^)mNcvQKDrY z&5dEqlZbLebrsG&=@iOEO0C-dxT)izmZ6mtuO+UE0YK5eq4*r4sgrhLSg<`ktdB8tOg6*(W?lC(1>!Vc0|avwrytU;&txL+2K(?S>m$Ll_ll$_BjND3S_4AIf{Z z6Z5wR=P$Gde>0oBZKWuLN(mXeOPXbpQ;+j(qm48!u+BVVqp?d-8oCit8=-JXA>`UMh`R=E_cu^oL{Spej!2Z duYm0n5>AXXvt^}_sV)ULJ2NoAKj4)A{{uVPfad@J literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/P7.bmp b/CItems/TextArt/res/P7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ccd6cc8ea397eb8376c33d0456cab7faa1b13a40 GIT binary patch literal 3126 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 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBA1.bmp b/CItems/TextArt/res/SBA1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..732f99bcf9e86f7e43f9af714e273bf8543a5f03 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT rF%W`;fJ8YI0ENK-mCp|2mNURrLWEEh1BIa4;Tlj)gUG`r5$ekUHr6~s literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBA2.bmp b/CItems/TextArt/res/SBA2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..74ba1fb9e16fac13616763ee43e5417cb05fa89e GIT binary patch literal 246 zcmZupK@Na02&;+7u0F$ec=s=!+?A*8RbE+vjYMM^g|=kJ`5EnS&{5I}owE9e9|@EWcy>J$ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBA3.bmp b/CItems/TextArt/res/SBA3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..768947d6fb38562c449aa53f93401f15d9529856 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT rF%W`;fJ8YI0ENK-#xE~G2i+Oka8Z|Nq}X=EG>HJrH{VOff+@ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBAdj.bmp b/CItems/TextArt/res/SBAdj.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f2fbf4d7d0ef1b74588c73568c851f0370571f9e GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT zF%W`;fJ8YI6u=nlr~*LcV8A(Z!m3p~XAS^qE-1YKO0VLAh_6}zr9t9QZBX;!hQh3Y IiWe{d0Gg^wEC2ui literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBC.bmp b/CItems/TextArt/res/SBC.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3f96f657fe67b267f46ef3d858641a56351a1e5f GIT binary patch literal 246 zcmZvUu?>JQ3a{)VMo3qH; zi_-Hi&}3Q401~UzTEQ%$KZ(cwKxB%sR>VM BMR@=K literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBCopy.bmp b/CItems/TextArt/res/SBCopy.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3ebde5b569b518feeed1c10ab12298ab27f6102f GIT binary patch literal 246 zcmZvVK?=h#3bn*Q*72dA#Jr6T8Ft z!<(ciTIiL~c-h)%C{O9V<6c-?G4mJX_z0>0*cC9|=@0iIauku|xxmQdCuh|Xd0V|V V(^^JOs%s_Zi6waa#U77eyaB-@S^SDL9QpTL6X&ayrfx*;ggMLXP{G`r3Ip61hD?6PhL>mAA literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBG2.bmp b/CItems/TextArt/res/SBG2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a737fbe26a131cf64a1f657caa827f37fda036ac GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT YF%W`;fJ8YI%$#}m?(W_1-qD)|0BBrzR{#J2 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBG3.bmp b/CItems/TextArt/res/SBG3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3d99ffbcc88173b906f10b0b159c492867a812b6 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`!+`?_fHX+rKNvCm{|{mT YF%W`;fJ8YIydwa1699J!fSEV|05?N<%>V!Z literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBG4.bmp b/CItems/TextArt/res/SBG4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8cb6c5ef32a327697f6977ebb3189a5f4a525fa5 GIT binary patch literal 246 zcmZvRu?>JQ3z5 zi{$=iXjrBcfFnw44P?>%OYck=Jf2|ZP$}jr5Ch5JtY$h6sy9+KjX<(;qNzC!H8XH$ LK=I+l0=x4CK^}Oh literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBG5.bmp b/CItems/TextArt/res/SBG5.bmp new file mode 100644 index 0000000000000000000000000000000000000000..860b0e1e3ae84fc23794ab24daead46ae0017f77 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)H6J0PV2#N1HK$iN7e&;gT}#Q*>Q84e^cFzjEzz)*jHfx*XtfuR(HfoumL N4H8QLVvsyY9RN9&5HkP( literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBGB.bmp b/CItems/TextArt/res/SBGB.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8415c9c4bd87dafda9347e651b1d38de72defd33 GIT binary patch literal 106 zcmZ?r&0>H6J0PV2#N1HK$iN7e&;gT}#Q*>Q84e^cFzjEzz>s)=fguly(b*t*kU9Wh C4iUNl literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBGRand.bmp b/CItems/TextArt/res/SBGRand.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7c87138e32862cb44e2439389b5f0b720ee4796e GIT binary patch literal 106 zcmZ?r&0>H6J0PV2#N1HK$iN7e&;gT}#Q*>Q84e^cFzjEzz)*dFfuSCVL3Aw;=Rt8H KkOs+v)Byl$q7ohe literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBGRev.bmp b/CItems/TextArt/res/SBGRev.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1b05185bdf30a87063b688cc74aa047e18e80a6b GIT binary patch literal 102 zcmZ?rO=ExnJ0PV2#9UC!$iN7e0Exi>6OaMIAn^bHe}?-97#QXQF$jQY5dR+tJ1~F& Hhz9Wi8YU2r literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBGRot.bmp b/CItems/TextArt/res/SBGRot.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d7e9a1d53b7eeeee661364be5297fb3e028ffcb6 GIT binary patch literal 102 zcmZ?rO=ExnJ0PV2#9UC!$iN7e0Exi>6OaMIAn^bHe}=yY7#My6u>g=?*}%Y13&izM L3>0Gce*l631Xd4| literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBInvCol.bmp b/CItems/TextArt/res/SBInvCol.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a49bdc970eec9b9776e6db153f416270510dd8c3 GIT binary patch literal 246 zcma(~F%p0v42yRTc*o!~e22T=aqh^-J9tH3<%(%5P7W55v<G_&4SVINSDc^t+Gs E4S%IYivR!s literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBLoad.bmp b/CItems/TextArt/res/SBLoad.bmp new file mode 100644 index 0000000000000000000000000000000000000000..46855afad71d4d68f9d0da10f156bfbb083ec8cd GIT binary patch literal 246 zcmZ`yF%p0v46CPi9T@N#j^6nLcmLvKSAGUhVsc@?v~|=#lU~xoe%$1^APZ`KYoN)3 zWc)=)G)&0_jFw6%Pz}0W>Rme&j#?o30mg_}gf?ImiK8|wp}G;X8=+O3j2XauXaF>3 Q-#_gKeMxbevaqRU4{=dKQ~&?~ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBMIR.bmp b/CItems/TextArt/res/SBMIR.bmp new file mode 100644 index 0000000000000000000000000000000000000000..640b2516939e119e7e4640cdcac3eed834c80ad4 GIT binary patch literal 246 zcmZuqu?>JQ3=0wma0Yj<^Ghb?p4I~@@d^`Dq+mCpV!&Vo wH^E#`1C+;8AMg0OJG>2h`t15tRnpSUWIB{Ndm-Xdv06qhb8;8v_&`Sf0yigCRR910 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBPaste.bmp b/CItems/TextArt/res/SBPaste.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8ff5a9f9d1b16ece17dbec3506e66baf70a09190 GIT binary patch literal 246 zcmZvVF%H8Z3`Jcv5<`|AqX+1aIYR2xyD(H`MRE?5BXB6xl|GwDS^B}>{{9B9udfVz zNO$6P#6>1Iit|6hF|(ABU`naAlFjITrFW|cj6#8QvpIqbcQHf}?~(dcNnjE$8Ez6DC-!2Fnmb-ShE#1=SrIvMH^ zs(uNJjUhBci4tSPZ7B6hDV89|o{*gm+(ZEvZqeLuO;7L7e{bK2Q?IH?4}8>2_8Fvu K)H;P z5(`TSLm8#_j$5GqMb#$AvlWuQXe@FKUbA}xR>p{Nuic)j$86u8qE6Az?DT;Hhv`-^ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBS2.bmp b/CItems/TextArt/res/SBS2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3e9baf8d7069b41337877151e0a3baabaf62175d GIT binary patch literal 246 zcmZvSu?>JQ3Ye8pg_X#e|G-Y?Xo@xSkU}vu+f9) z{%0f#W9-0Lt=0+^H2 J=OAj``vYM7O9=n~ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBS4.bmp b/CItems/TextArt/res/SBS4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b6e587b41e128ae5ed660dad081092ac90b5e919 GIT binary patch literal 246 zcmZvTu?@p83~;)mK8FEr=ktd`3NC#$=%sL#o6{-Dh_OgOXDD8 z3AE^+ka(zC4W)!CW=4?9m7KkT93LSONN~lg#SmJd%o?WaOlh9&>(=`2Z{FX<$TId6 Kp#;+Z@#XeARwf)*1$A|r;I^`!s7@~G!=$sbCG+eP%wlFxmz}8D)xUkeww7YDt6lU G7H>bZMQ0HJ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ10.bmp b/CItems/TextArt/res/SBZ10.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9649fd2c164390749ea38943b10afd415ff39924 GIT binary patch literal 246 zcmbVFu?@f=40EMQY*o+b9o_p2Q&~BUQ@9`_Yw9Gl2Q$hs&yu}v&kBhcWa yFUubjHdIr{v@kQO2O}C|xFh&{M3Px0wao!)7~HjU0i7E4TU+iIfg3;WcST-Z7H1Iv literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ12.bmp b/CItems/TextArt/res/SBZ12.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2ccf9f37d16afd5e33498d2751d7016114d974f2 GIT binary patch literal 246 zcmZ8au?@f=3`?a--J+h+JG%FmOl9RXPT_)#U8!+El^Td`Y$Tu8BQZDV!0uxgSs7$v zz|7)>1Xpqn0zyhD1>A$iE3I{f#pxCxePbK7X{Av23d0-&V=`<8gK6W#pVd($UX=|} LN0CHFvRV5AwDMfn literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ13.bmp b/CItems/TextArt/res/SBZ13.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ad31dc6645605e39a2bd0c9b5a182bc352058b61 GIT binary patch literal 246 zcmb77u?@f=3`?a--J+h+JG%E5re@_dPT_)#tkl79Kuv5Xu@vs73Gu=%@SNOaA3+{U zSs5oJD9M=yMJuHgcm#cv^d23E7b}Pv7JwynpqkQ?)AhIWp4K?$$2@1kas6fsAF&-^ A9{>OV literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ14.bmp b/CItems/TextArt/res/SBZ14.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cc8b5a8d1a8921c8751293e4bc4dda7ffa8a172d GIT binary patch literal 246 zcma)#u@QhU2u1PEyL6soIETHvSV^1FGD;>$X&WD4tR?*a3IBloxFzC3Hn6^!WOgGv z2MsTNIHcqp0#iyU1vR64O7B(yp0yxV6-ls4Yn9?`L{(i(TN>(ZjK6AgWMUsP>{G79 IAv^ZP10zgoX8-^I literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ15.bmp b/CItems/TextArt/res/SBZ15.bmp new file mode 100644 index 0000000000000000000000000000000000000000..03ab1d49424c41c27fe8ffec4b6b51d0e95989b8 GIT binary patch literal 246 zcmYj~yA8uI3`EaB0Cq;k$QNBBO(=lpqkPS}W|0K3u)KB6wZ`^0XvFNvWNd)y~x3Xe&AcxH)5%8SpYY5W7#l RdOhZl=4JTr-n>8my8)Y~V|4%k literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ16.bmp b/CItems/TextArt/res/SBZ16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9d7f6aed086f05ee2625857399522d57ba4268b3 GIT binary patch literal 246 zcmZWhu?>JQ3=0xcH^dp-!Okz8$lB9-3KuZ47TakTNE5rZ)9%M(Q734_tbHb%6%=8> z$U-4OTPZ<6T&>m$X3*5u8gCdJS^)2r;j{9sy1wj-{PbfjUhadnknk%XkP#r3K?x(I GJLL;|pkuoL literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ17.bmp b/CItems/TextArt/res/SBZ17.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dcf68958ca40ec40043c8bbd9bd62db9a3e0d5bd GIT binary patch literal 246 zcmZXNu?@f=3wR^ zHDqRSLxPr40#K|{YXv>%Z0X%M431k6MQtvs`3WYYk#AyKn@ zUUqaC5J_UCWD3R@G%NyUu9!SNV(AlVfEEIGQwk_q0S#8dd&eKwy?R%Bg1Bk=uD{T4 BU!ed1 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ19.bmp b/CItems/TextArt/res/SBZ19.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6f1e125b1979da40cec824eed21fb264e540eefb GIT binary patch literal 246 zcmah>u?@f=3`?aBOsHq{j_!S@v&WppDO`||HFcnDl`yem#Ua<-WZ+>t$>ZZDdk@g{ yPnbjqj7Fs;A*B=s-b>uWk$f?t=nCM9B-LyQRuyJ7nr+|6Xwb literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ2.bmp b/CItems/TextArt/res/SBZ2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..027803b5746431d4b51c1caeffe9fe664725cdd3 GIT binary patch literal 246 zcmb7-F%Ez*2t_e5VIv;HbGUmKCS7~99)%NhbglmvOSCDX-;N#M Foj0>ZXAuAZ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ20.bmp b/CItems/TextArt/res/SBZ20.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1155a26eac321e93dc33ddcc47268c69e4b5daff GIT binary patch literal 246 zcmaKkI}UJbnsg3@Dn4tuX-y`{(EM3lDpcEK1E;=p{e1H0{)8V+oQOXs9H3JV2mc1$v7faEV? t5+P7RrX?V%%E0rBdpLqGTBPJQ3=0xNr-(DSgPnJnGjdi>=>-{Ci=74uA>7(->}K0988~1oxFjc;qp;9F zLBrB)7!*&?q}Ga}$Ccjs0&y5Y&JQvWEi9~Qqia(~BMx^F4|jkw@yhexvsbup4JnZ} G2I>vCWLt#* literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ24.bmp b/CItems/TextArt/res/SBZ24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d28a43a971b38ffb44a5ba5205c0911d52828ef7 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)v# zZ$cBLdpDE_-AXAGP2XCJ1bHz+_7AWolpnbOvF2la literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ27.bmp b/CItems/TextArt/res/SBZ27.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4d0fc309d351492875d7b5463b8189bb5f170182 GIT binary patch literal 246 zcmaity$ygM6oj9N1r>1&=dgDj>njS}0UONa9Kn+z5Zpa}NLIL>}B`V|@Ss literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ28.bmp b/CItems/TextArt/res/SBZ28.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d478ce171532cde9f5363f3c9d6bed26f0e4900d GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)+VJe83k6Q@qdQqX&PV!O$PTuFMb;=Z x_={+~RP6#|fl95FqQ#fi+yS0PP??6sM5x*9#vquYE@ml**!@>I7c-q1!3(K3W+eas literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ3.bmp b/CItems/TextArt/res/SBZ3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9389526c9210b47e0ff6cae9f3287564301adf88 GIT binary patch literal 246 zcmb77u?>JQ3^Ni^w~8~kgPmVG!P?V$N-xORH8@FO$BpeImYU-n2wb$C+$I;S9#q$m zH;ai03$=z(*`l>Zw?Mt1Y8}aEE6P2Q!V7!@WI-yBp5>zuHXD9B|02LM$UUwWyZHd| C)@Km_ literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ30.bmp b/CItems/TextArt/res/SBZ30.bmp new file mode 100644 index 0000000000000000000000000000000000000000..35291d84aa5d706e231a36d9d7ec881b80b4a54c GIT binary patch literal 246 zcmb7+yA6Oa3`C7Yk&-c(gPwJ$U1qFIL`j>xvr{1&F1e3YBi;z^Q3UnbWIZj_ex@? literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ31.bmp b/CItems/TextArt/res/SBZ31.bmp new file mode 100644 index 0000000000000000000000000000000000000000..08a4d423d6f9a8db1a9615a6ad3877d652085083 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)JQ5Ce@wk&-c(gPwJ$zhtaTl#(`_KhRO(#OLTOeYXA5&_S$tc|2*(B9dRA qaTzfJ^2DK9D@D(%-u=QHkHGmU6_2Gx!q!Td&Ws<)zbN;5_p2LdI%1~) literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ33.bmp b/CItems/TextArt/res/SBZ33.bmp new file mode 100644 index 0000000000000000000000000000000000000000..99bfa24fd9a72213461cff29a848d18016a872ac GIT binary patch literal 246 zcmb7-D-wV(3`D~WqLO294m{UEujE)gQ6#p!q*WaZo9t(@BFFhy$A#^18(eJ7LaARu q6Q$G*B|=%Pm7?WZYmp!mC*+=>agkdlxn~L|mG1uE`3uVQ?tTIHjARc0 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ34.bmp b/CItems/TextArt/res/SBZ34.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ff209655b1fbae6ff86e77257ceac865dd55763e GIT binary patch literal 246 zcma(~u?@g52%}PmOi|D19o_p*XOEnfQ*r@gS87PdMykO!!blwFEdv*AC%2c2tQjEn vOPE9m45M-+A+0qAo-OV%k*ruzbON3wswMhghgsYftyW-N6?`FO@JQ3OD5Zi3s?7MlLmK>AqVMXOC$m?dQr|avZvsB#+Gh@fS2cUMI#5qhta~+VJeqAi&9e>{Fa&J+0S<%wW1P*cgF= zzlg*`sSAt+vQi2`i)*d90~{Yg`+q4#rd-`99|y(|OczYFPxTq7Nl-jyg~c+x{<{G5 CPhbfE literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ38.bmp b/CItems/TextArt/res/SBZ38.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7defb99ad1fca63f55f7bbfd66fc4edf0a091e40 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)lG;vi&t2LOi|UJC#K literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ4.bmp b/CItems/TextArt/res/SBZ4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fa2e3924ae9f676f11ed93a7b46a3ec883483ea8 GIT binary patch literal 246 zcmbV_u?@u_3`Flsk?2sy$Qu4)qcI8-P^Kl%_K(u%@ZA}o!29=9;D>E+{qv*6 zgX$V`XK^E;RBISYtJWHB!SvFc)0m;&G!LsD0KVD~&>Q z2+tWDq?FJQ3Lr5M}y@JGJxSIi!8632>7_Sq;i zTk@X$=-^U{fsB+|E7ZoAE@P-7cv>RmoJ2wfvG;}mh@2F?2WO#RpJ~45 LWENw`@2tBYh#zJn literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/SBZ9.bmp b/CItems/TextArt/res/SBZ9.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0349de0aa47cea46e449045400b34ca9099ddc76 GIT binary patch literal 246 zcma)#u?@f=3VU#hYYo(3+M_wup>XvJ!d!?F16icQ05Dt>A}N@ymHwA87i1gk-=4Mi E1)&XYfdBvi literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/Z.bmp b/CItems/TextArt/res/Z.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d5157c8ed5f82defbaafec00a9c2211758348d86 GIT binary patch literal 18486 zcmeH_+m%#15JQ^`_#^}(AOODjAtyp3Gf=l?gjT)mb7rP#9$xpJDa%``vYXFeKYh8} z)+c;F;{R{&E|>TC`|k4LreB`Ux#9Qw+4VxZ+P+qf0`F5`?6+vd*YNM$#YxsP|4^rS z_^jlC1CxQ@qF}1u()SKc!-EgoI}C#s9N@=~3;yFe*SE}pxS!U+FPUnmJMww=9e9)B z%zRbmI*C)iOZ|Ay$*<$Gh<~PlC$Y*T8axW@b*E|96?Xp&g7jR)JEEoTp znzswjp10?&e|@!st89&o{NN1k^e#u^WFr*;p{aBxYun{WC#mgR0M_KFXL$3}GZpSd zXmo-fEI7jAs9w**mn21h|1ty^7=Hblp#~uP40j~-aD=V8@W>S%m4!!@gJl3p7UlI~ zpLEww&18)cw#x+YVjUV(VOxN#}})+1y32_`upx6={ zEWx-W!DF#Y33nnaG(Oqc9co#e>CR9W6yo0@C57E+7ze}!OH?hp(C#)dO_C`lZAZfqSH_aKEW?73f~_dUJ6F6;ez4l zALN&huP4Ie?89)8$5#mwnS*aW4T^hn4fw73JY*h&3ML8ga<**g!o3B$aKVlhEEJ!S zUw<>{Mx6da)9>P>YFg%4!7KnD=8~l>z~r2cWFUFAC`pNBcnDz*M0fdCdRH)zr(W;yJIqd|=bYeoo)oddynycA zRd+nRI10-HSp!hiPyjo@Z-%okM;&GeM}g-yf8}x>we+$8!29Bx;Zixx)0i_k7<470 z=&*bXkPdSjq5_~(!uU!-QHla|ilQ8bWOpjN0#%e2Zvh~LOHqglrJ+#mXr6sO_>4&!W3{z<8HA z9F~vyjT#qyph*DCFc4|>Zg{sKb#6B15rp3HuMrt zSNCN;Vb;q`U?*0NWk?=u*2^4-8Yu@-5kOd&>tzlA=)P$2SU)XmSiED&92GrN;a-Hv z_j!`|Vs%sT6z$01>#e(5FpDl+Ixwv+lR7ZDypUaDR&WF{^`=*Y3Js^9@$gQ91$O|Um z>!NCgY<}hXbBoQJcF%R^i*wrCw9_-0mBD-H)`#FchAXca6=Hc=ef>1o!c+tXdQgUK bfR!1FA>k2@eA;rJB>)$g()(Y0-52-?s!UON literal 0 HcmV?d00001 diff --git a/CItems/TextArt/res/temp.bmp b/CItems/TextArt/res/temp.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d0d6efaef849e1ac798067f6f0c1e96dd81fe8f2 GIT binary patch literal 2518 zcmbW3ziSjh6vyXCV3h;+Qbn*3#KJP5#g!5k&PMzf{1fJ2afCDn7tlZFI*SNNueE=J zRaoJ=6zk{v-puXZ84I24&D)zFZ$9t)X6ADK_Q%6u;=OR04w!(w153>^54;3xQdOUunHxdr|2== zSZpctu_{Z%qn8xo9`UuwrnJU2pTF8R%~nw$m+~h4q|bwN`_u9$@jOn`vjRWs7tmrtzimUu$Iq!UzQ?v-<=B>C8H7zV2kj`yX|)R zZA*R?y7C(>zwq(h4u?AI)xGcZ+Yr$KU*&x5v%>dmVUwIs=*=esu>E&^ZH`?(=R0P2 z><0ZnT?m|olmnd)@pZS#hMnJWer>HmKl%|l>ldV7<~tww9JKI-YRq>>;Uva0`Bi>N z1Rv9{ZW`@Bt`~A9bsa<>Dkw1K&cc`uWg0cEy$R zaZTCacHpyn$n|@-h;u7>Ly@Vv|Mj#p{U99phWzI9L9gvU_{RCw-IA}DgZ&rc6{*D! zP7$#1-E|_~<3kP8ukV`_*Ai}x28`=MbsD?LtP2zAH|8t)q2d1h!p&&s7niaE;E`VY z=QnODT`=^0Y|`Z$F z%=?04sNx1b9&L~I4R?sGSC{;x%x4oT+eUqFy>Y$TOpnk{Cz6(vR8MBL^VOX%kTsFe zcK1mt@pp((em9CWKHXB3z26VA>-wdE&t%4%4yNg66APdB2Buj)Y{hhvi@uG*BXB<- z#E(O}zwiD19qX5)%Vv6I`;Y0KUqzd{cp+33wK(6X*FkMWS~}mUjovMw9lKw=|6l%p N!M{So4L|&!eghu{(~1B9 literal 0 HcmV?d00001 diff --git a/CItems/TextArt/textart.res b/CItems/TextArt/textart.res new file mode 100644 index 0000000000000000000000000000000000000000..ea95db9e45181549d0212424463d8c8992719e97 GIT binary patch literal 50084 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 literal 0 HcmV?d00001 diff --git a/COPYING.LESSER.txt b/COPYING.LESSER.txt new file mode 100644 index 0000000..02bbb60 --- /dev/null +++ b/COPYING.LESSER.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/COPYING.txt b/COPYING.txt new file mode 100644 index 0000000..20d40b6 --- /dev/null +++ b/COPYING.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/ClockAdj.cpp b/ClockAdj.cpp new file mode 100644 index 0000000..45150c7 --- /dev/null +++ b/ClockAdj.cpp @@ -0,0 +1,478 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ClockAdj.h" +#include "Main.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TClockAdjDlg *ClockAdjDlg; +static int s_Gain = 0x0108; +//--------------------------------------------------------------------- +__fastcall TClockAdjDlg::TClockAdjDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + EntryAlignControl(); + + pBitmap = new Graphics::TBitmap(); + if( sys.m_Palette ) pBitmap->PixelFormat = pf16bit; + pBitmap->Width = PaintBox->Width; + pBitmap->Height = PaintBox->Height; + + + pDem = NULL; + pTick = NULL; + m_agcMax = 8192; + m_agcMin = 0; + m_agcSumMax = 8192 * AGCAVG; + m_Point = 0; + m_Samp = 11025; + m_rBase = 0; + m_MaxP = 0; + m_MaxD = 0; +} +//--------------------------------------------------------------------- +__fastcall TClockAdjDlg::~TClockAdjDlg() +{ + if( pTick != NULL ){ + delete pTick; + pTick = NULL; + } + pDem = NULL; + pBitmap->Palette = NULL; + delete pBitmap; + pBitmap = NULL; +} +//--------------------------------------------------------------------------- +// サイズ変更コントロールの登録 +void __fastcall TClockAdjDlg::EntryAlignControl(void) +{ + RECT rc; + rc.left = 0; + rc.top = 0; + rc.right = ClientWidth-1; + rc.bottom = ClientHeight-1; + + AlignList.EntryControl(OKBtn, &rc, OKBtn->Font); + AlignList.EntryControl(CancelBtn, &rc, CancelBtn->Font); + AlignList.EntryControl(Panel, &rc, NULL); + AlignList.EntryControl(TBGAIN, &rc, NULL); + AlignList.EntryControl(SBAGC, &rc, SBAGC->Font); + AlignList.EntryControl(MarkFreq, &rc, MarkFreq->Font); + AlignList.EntryControl(UDMark, &rc, NULL); + AlignList.EntryControl(Label2, &rc, Label2->Font); + AlignList.EntryControl(LPPM, &rc, LPPM->Font); + AlignList.EntryControl(EditClock, &rc, EditClock->Font); + AlignList.EntryControl(UDSamp, &rc, NULL); + AlignList.EntryControl(Label1, &rc, Label1->Font); + +// int CX = ::GetSystemMetrics(SM_CXFULLSCREEN); +// int CY = ::GetSystemMetrics(SM_CYFULLSCREEN); + int CX = ::GetSystemMetrics(SM_CXSCREEN); + int CY = ::GetSystemMetrics(SM_CYSCREEN); + if( (CX < Width)||(CY < Height) ){ + Top = 0; + Left = 0; + Width = CX; + Height = CY; + } +#if 0 + else { + Top = 0; + Left = 0; + Width = 600; + Height = 400; + } +#endif + FormCenter(this, CX, CY); + if( Owner != NULL ){ + WindowState = ((TForm *)Owner)->WindowState; + } + m_rBase = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::FormResize(TObject *Sender) +{ + CWaitCursor tw; + AlignList.NewAlign(this); + if( pBitmap != NULL ){ + delete pBitmap; + } + pBitmap = new Graphics::TBitmap(); + if( sys.m_Palette ) pBitmap->PixelFormat = pf16bit; + pBitmap->Width = PaintBox->Width; + pBitmap->Height = PaintBox->Height; + + TRect rc; + int XL = 0; + int XR = pBitmap->Width - 1; + int YT = 0; + int YB = pBitmap->Height - 1; + rc.Left = XL; + rc.Right = XR; + rc.Top = YT; + rc.Bottom = YB+1; + TCanvas *cp = pBitmap->Canvas; + cp->Brush->Color = clBlack; + cp->FillRect(rc); + + m_CursorX = XR - 20; + + cp->Font->Name = Font->Name; + cp->Font->Charset = Font->Charset; + cp->Font->Color = clWhite; + cp->Font->Size = 10; + int FH = cp->TextHeight("A"); + int Y = 5; + if( MsgEng ){ + Caption = "Calibrating the Sound Card with a Time Standard Broadcast Station"; +// "Adjust Sampling Frequency using an off-air time signal"; +// Caption = "Adjust Sampling freq. (Recive WWV tick sound on Mark freq.)"; + CancelBtn->Caption = "Cancel"; + + cp->TextOut(10, Y, "1) Receive standard radio wave (e.g., WWV, BPM)."); Y+=FH; + cp->TextOut(10, Y, "2) Tune into the tick sound."); Y+=FH; + cp->TextOut(10, Y, "3) Continue listening to the sound for a while. You have a vertical line."); Y+=FH; + cp->TextOut(10, Y, "4) Click the lower point of the line."); Y+=FH; + cp->TextOut(10, Y, "5) Click the upper point of the line."); Y+=FH; + Y+=FH; + cp->TextOut(10, Y, "You could use FAX broadcasting instead of WWV or JJY, but be sure it has"); Y+=FH; + cp->TextOut(10, Y, "exact timing."); + } + else { + cp->TextOut(10, Y, "1.BPMをAMまたはSSBで受信し、この画面の下にあるToneに1000Hzまたは"); Y+=FH; + cp->TextOut(10, Y, " 1600Hzを設定します."); Y+=FH; + cp->TextOut(10, Y, "2.SSBの場合は1秒チック音がToneに重なるように受信周波数を調整します."); Y+=FH; + cp->TextOut(10, Y, "3.しばらく受信して縦または斜めの帯線が表示されるのを待ちます(数分)."); Y+=FH; + cp->TextOut(10, Y, "4.表示された帯線の下の端点をクリックします."); Y+=FH; + cp->TextOut(10, Y, "5.更に同じ帯線の上の端点をクリックするとクロック値が自動的に"); Y+=FH; + cp->TextOut(10, Y, " 設定されます.(2点間の距離が長いほうが正確です)"); Y+=FH; + cp->TextOut(10, Y, "傾斜が非常に大きい場合、上記の手続きをもう一度繰り返して下さい."); Y+=FH+FH; + cp->TextOut(10, Y, "BPMの代わりに、JMH,JMGなどのFAX放送の0.5秒毎のデッドセクタを利用しても"); Y+=FH; + cp->TextOut(10, Y, "OKのようです."); Y+=FH; + cp->TextOut(10, Y, "左クリック - 調整の開始"); Y+=FH; + cp->TextOut(10, Y, "右クリック - 垂直カーソル移動"); + } +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::UpdateTB(void) +{ + TBGAIN->Enabled = !SBAGC->Down; + LG->Font->Color = SBAGC->Down ? clGrayText : clBlack; +} +//--------------------------------------------------------------------- +void __fastcall TClockAdjDlg::UpdatePPM(void) +{ + double dd = ((m_Samp - SampBase) * 1000000.0 / SampBase); + + char bf[64]; + sprintf(bf, "%d ppm", int(dd+0.5)); + LPPM->Caption = bf; +} +//--------------------------------------------------------------------- +int __fastcall TClockAdjDlg::Execute(TSound *p, double &Samp) +{ + pSound = p; + pDem = &p->SSTVDEM; + pTick = new CTICK; + pDem->pTick = pTick; + m_Samp = Samp; + pTick->m_Samp = int(Samp+0.5); + InitColorTable(clBlack, clWhite); + char bf[128]; + sprintf(bf, "%.2lf", m_Samp); + EditClock->Text = bf; + pTick->Init(); + pDem->m_Tick = 1; + m_DisEvent++; + UDMark->Position = 1000; + pDem->SetTickFreq(1000); + TBGAIN->Position = s_Gain & 0x00ff; + SBAGC->Down = s_Gain & 0xff00 ? 1 : 0; + UpdateTB(); + m_DisEvent--; + UpdatePPM(); + Mmsstv->PBoxG->Invalidate(); + int r = ShowModal(); + pDem->m_Tick = 0; + pDem->pTick = NULL; + InitColorTable(sys.m_ColorLow, sys.m_ColorHigh); + s_Gain = (s_Gain & 0x00ff) | (SBAGC->Down ? 0x0100 : 0); + delete pTick; + pTick = NULL; + pDem->SetTickFreq(0); + Mmsstv->PBoxG->Invalidate(); + if( r == IDOK ){ + Samp = m_Samp; + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------- +void __fastcall TClockAdjDlg::TimerTimer(TObject *Sender) +{ + if( pBitmap == NULL ) return; + if( pDem == NULL ) return; + if( pTick == NULL ) return; + + int *p = pTick->GetData(); + if( p == NULL ) return; + + TCanvas *tp = pBitmap->Canvas; + + int mx = -MAXINT; + int mi = MAXINT; + int x, xx, d; + double k1 = 16384.0/double(m_agcMax - m_agcMin); + double k2; + if( SBAGC->Down ){ + k2 = 128.0 / 16384.0; + } + else { + k2 = (128.0 * (s_Gain & 0x00ff)) / (4096 * 16); + } + int ax = -1; + for( xx = 0; xx < pTick->m_Samp; xx++ ){ + int xv = xx + m_rBase; + x = fmod(xv, m_Samp); + x = x * pBitmap->Width / m_Samp; + if( ax != x ){ + ax = x; + if( !x ){ + if( m_MaxD ){ + tp->Pixels[m_MaxP][0] = clRed; + } + m_MaxD = 0; + m_MaxP = 0; + TRect rc; + rc.Left = 0; + rc.Right = pBitmap->Width - 1; + rc.Top = 0; + rc.Bottom = pBitmap->Height - 2; + TRect src(rc); + src.Bottom--; + rc.Top++; + tp->CopyRect(rc, tp, src); + } + d = p[xx]; + if( m_MaxD < d ){ + m_MaxD = d; + m_MaxP = x; + } + if( mx < d ) mx = d; + if( mi > d ) mi = d; + if( SBAGC->Down ){ + d -= m_agcMin; + if( m_agcMax > 0 ) d = double(d) * k1; + } + d = double(d) * k2; + + if( d >= 128 ) d = 127; + if( d <= 0 ) d = 0; + tp->Pixels[x][0] = TColor(ColorTable[127-d]); + } + } + m_rBase += pTick->m_Samp; +#if 0 + for( x = 0; x < XR; x++){ + xx = (x * pTick->m_Samp)/pBitmap->Width; + d = p[xx]; + if( mx < d ) mx = d; + if( mi > d ) mi = d; + if( SBAGC->Down ){ + d -= m_agcMin; + if( m_agcMax > 0 ) d = double(d) * k1; + } + d = double(d) * k2; + + if( d >= 128 ) d = 127; + if( d <= 0 ) d = 0; + tp->Pixels[x][0] = TColor(ColorTable[127-d]); + } +#endif + m_agcSumMax -= m_agcMax; + m_agcSumMax += mx; + if( m_agcSumMax < (4096*AGCAVG) ) m_agcSumMax = (4096*AGCAVG); + m_agcMax = m_agcSumMax / AGCAVG; + m_agcMin = mi; + if( m_agcMin > 2048 ) m_agcMin = 2048; + m_PointY++; + PaintBox->Canvas->Draw(0, 0, (TGraphic*)pBitmap); + PaintCursor(); +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::DrawMessage(LPCSTR p) +{ + int xr = PaintBox->Canvas->TextWidth(p); + int xl = (PaintBox->Width - xr)/2; + xr += xl; + int FH = PaintBox->Canvas->TextHeight(p); + int VC = PaintBox->Height - FH; + PaintBox->Canvas->Pen->Color = clWhite; + PaintBox->Canvas->Brush->Color = clBlack; + PaintBox->Canvas->RoundRect(xl-10, VC-FH, xr+10, VC+FH, 10, 10); + PaintBox->Canvas->Font->Color = clWhite; + PaintBox->Canvas->TextOut(xl, VC-FH/2, p); +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::PaintCursor(void) +{ + PaintBox->Canvas->Pen->Color = clLime; + PaintBox->Canvas->Pen->Style = psDot; + PaintBox->Canvas->MoveTo(m_CursorX, 0); + int rop = ::SetROP2(PaintBox->Canvas->Handle, R2_MASKPENNOT); + PaintBox->Canvas->LineTo(m_CursorX, pBitmap->Height - 1); + ::SetROP2(PaintBox->Canvas->Handle, rop); + if( m_Point ){ + PaintBox->Canvas->Pen->Color = clYellow; + PaintBox->Canvas->Pen->Style = psSolid; + PaintBox->Canvas->MoveTo(m_PointX, m_PointY); + ::SetROP2(PaintBox->Canvas->Handle, R2_MASKPENNOT); + PaintBox->Canvas->LineTo(m_PointX2, m_PointY2); + ::SetROP2(PaintBox->Canvas->Handle, rop); + char bf[256]; + if( MsgEng ){ + sprintf( bf, "OK : Left button, Cancel : Right button Clock=%.2lf", GetPointSamp()); + } + else { + sprintf( bf, "決定 : 左ボタン, 中止 : 右ボタン Clock=%.2lf", GetPointSamp()); + } + DrawMessage(bf); + if( PaintBox->Cursor != crCross ) PaintBox->Cursor = crCross; + } + else { + if( PaintBox->Cursor != crDefault ) PaintBox->Cursor = crDefault; + } +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::PaintBoxPaint(TObject *Sender) +{ + PaintBox->Canvas->Draw(0, 0, (TGraphic*)pBitmap); + PaintCursor(); +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::PaintBoxMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + if( m_Point ){ + m_Point = 0; + if( m_PointY2 != m_PointY ){ + m_Samp = GetPointSamp(); + ModalResult = mrOk; + } + } + else { + m_PointX2 = m_PointX = X; + m_PointY2 = m_PointY = Y; + m_Point = 1; + } + } + else if( m_Point ){ + m_Point = 0; + } + else { + m_CursorX = X; + } + PaintBox->Canvas->Draw(0, 0, (TGraphic*)pBitmap); + PaintCursor(); +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::MarkFreqChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + int dd; + if( sscanf(AnsiString(MarkFreq->Text).c_str(), "%lu", &dd ) == 1){ //ja7ude 0428 + if( (dd >= 300) && (dd <= 2700) ){ + m_DisEvent++; + UDMark->Position = SHORT(dd); + pDem->SetTickFreq(dd); + Mmsstv->PBoxG->Invalidate(); + m_DisEvent--; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::TBGAINChange(TObject *Sender) +{ + s_Gain = (s_Gain & 0xff00) | TBGAIN->Position; +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::UDMarkClick(TObject *Sender, TUDBtnType Button) +{ + if( m_DisEvent ) return; + + pDem->SetTickFreq(UDMark->Position); + Mmsstv->PBoxG->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::SBAGCClick(TObject *Sender) +{ + UpdateTB(); +} +//--------------------------------------------------------------------------- +double __fastcall TClockAdjDlg::GetPointSamp(void) +{ + if( m_PointY == m_PointY2 ) return m_Samp; + double d = (m_PointX2 - m_PointX); + d = d * m_Samp / pBitmap->Width; + d /= (m_PointY - m_PointY2); + d += m_Samp; + d = NormalSampFreq(d, 100); + return d; +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::PaintBoxMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_Point ){ + m_PointX2 = X; + m_PointY2 = Y; + PaintBox->Canvas->Draw(0, 0, (TGraphic*)pBitmap); + PaintCursor(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TClockAdjDlg::UDSampClick(TObject *Sender, + TUDBtnType Button) +{ + if( Button == btNext ){ + m_Samp += 0.02; + } + else { + m_Samp -= 0.02; + } + m_Samp = NormalSampFreq(m_Samp, 50); + m_rBase += (1.0 - (m_Samp / pTick->m_Samp)) * pTick->m_Samp; + char bf[128]; + sprintf(bf, "%.2lf", m_Samp); + EditClock->Text = bf; + UpdatePPM(); +} +//--------------------------------------------------------------------------- + diff --git a/ClockAdj.dfm b/ClockAdj.dfm new file mode 100644 index 0000000000000000000000000000000000000000..bc23c8f78dfac5a7993689a5b345803a48b098a2 GIT binary patch literal 2219 zcmcgtJB;H*7@pX%$9A%JyW5>kh%`u?#I2l#Lx(_u#MxwXo5W%5g%W1t*~IK*#%FtP zvmo(k(KVcefC8wgXpkr=XsBtZp+Yo(5G`gr6Fd7rh>GU-JpBLP|NJJifbR@kXRp<{ z*BSJHz5byAfIsfqb>AUua@-2u=#Xjc+`2lzN2&TJP<<9D1Ue{6Lq<0r0|300eVRSY zKF>bp-$nLWHuHZX5vKMx@29u{o&;?$21BrseSh{|#`qt9eDuiv!TZs@1?mn7F->=I zIGv^H{R#)n_pgRQI#U;l<}kuyXii8wrCl_^^)937mNP?ff>XHe?e@F=y}tLFv)kJD zc6>`-3nj>v2$~$%#F<1;el^8zgywkDOOZRaSzKJ2X5YOd$Z5%EzNya$t)5%PE z-SY8b8LYAabbo*jG0}x=iu@{-JiY2G6-}f-xuq{1-zXBUYoaFLqV~3|&M%@mEA=O? zs#ksPbg5k(jK@Q%`{eu~nj+4d+pEmZ{9MKDf zwZ+aaZRqh89UwO)isQA1zpPfadHeT5uaF>sZ$0$8Sob};BFD{&8vy4_E1Rw z_rL&v{<1#q9v>j-?qAYfw{Z7`!rjNqGAQmI?BFAGLQ=CfWC0?)o%u$o7(O}_qoDBN zDXg0gq7$5ts6=>P5l#FL2)g{!ERZ%eZss&2oHyRiKFKa%DJ!f>p7b%Im}o)@7)3G> zkdwm6Vi||JQ_)%^oKmPE!iTBWX8G)jiH62u;)Qfd@RC^yl2~CWz~oT8587;D6blI` z5~nQlrp6`Uiv^&8h~%%DONZ`$ z5T<4>1OrH)wnVDSVH*_1ya9J8IwUwSV1JHtzSGx-;Us1WJ4ze<;ZEbZyT(37flJAm zxe8yc<`kuC&8EG52k=}tY<|e{Tntfs+>P;lS>w%1Q|_#QIUesB49#%f36tE3e{rGg zrz+%2FJ+M-J*YN0)o@bfTu-MMUMt|`eyyM4d9vlDoR6nTMXzo@W7}MA3&}P0YV)p; z&k8ASo8mUNtE>5?n%}9M(s*`F-;eoY(MGZEw|lMrNQU`=4723paT%sML<^;1<{3G` zbaJMg>sM{%cU@YOUgslo5Ovro)eky(KoaEOQZCm^5VMseY!dSK2bTF)hapv;s^s|U zL(Ak3ON{57%M{BPvn0$PW%XxuRZ-paXS^2?4HBayw3@_UGTJ$>JT#AFXPt@8dbyy9 z&BCdh!hy=W!h!6a6%agcJ-1WxWzNL0CZy4)DUKf?qJ9VX|Kbc<;v. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef ClockAdjH +#define ClockAdjH +//---------------------------------------------------------------------------- +//ja7ude 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Comlib.h" +#include "sound.h" +//---------------------------------------------------------------------------- +#define AGCAVG 4 +//---------------------------------------------------------------------------- +class TClockAdjDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TPanel *Panel; + TPaintBox *PaintBox; + TEdit *EditClock; + TLabel *Label1; + TTimer *Timer; + TComboBox *MarkFreq; + TLabel *Label2; + TLabel *LPPM; + TTrackBar *TBGAIN; + TUpDown *UDMark; + TSpeedButton *SBAGC; + TLabel *LG; + TUpDown *UDSamp; + void __fastcall TimerTimer(TObject *Sender); + void __fastcall PaintBoxPaint(TObject *Sender); + void __fastcall PaintBoxMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall MarkFreqChange(TObject *Sender); + void __fastcall TBGAINChange(TObject *Sender); + + void __fastcall UDMarkClick(TObject *Sender, TUDBtnType Button); + void __fastcall SBAGCClick(TObject *Sender); + void __fastcall PaintBoxMouseMove(TObject *Sender, TShiftState Shift, int X, + int Y); + + void __fastcall FormResize(TObject *Sender); + void __fastcall UDSampClick(TObject *Sender, TUDBtnType Button); +private: + CAlignList AlignList; + void __fastcall EntryAlignControl(void); + + Graphics::TBitmap *pBitmap; + TSound *pSound; + CSSTVDEM *pDem; + CTICK *pTick; + + int m_DisEvent; + double m_Samp; + + int m_agcMin; + int m_agcMax; + int m_agcSumMax; + + void __fastcall UpdateTB(void); + void __fastcall UpdatePPM(void); + void __fastcall PaintCursor(void); + int m_CursorX; + + void __fastcall DrawMessage(LPCSTR p); + double __fastcall GetPointSamp(void); + int m_Point; + int m_PointX; + int m_PointY; + int m_PointX2; + int m_PointY2; + + int m_MaxP; + double m_MaxD; + + int m_rBase; + AnsiString m_Help; +public: + virtual __fastcall TClockAdjDlg(TComponent* AOwner); + __fastcall TClockAdjDlg::~TClockAdjDlg(); + + int __fastcall Execute(TSound *p, double &Samp); +}; +//---------------------------------------------------------------------------- +//extern TClockAdjDlg *ClockAdjDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/ColorBar.cpp b/ColorBar.cpp new file mode 100644 index 0000000..b435b83 --- /dev/null +++ b/ColorBar.cpp @@ -0,0 +1,258 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ColorBar.h" +#include "Main.h" +#include "ColorSet.h" +#include "BitMask.h" +#include "PicRect.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TColorBarDlg::TColorBarDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Color bar"; + CancelBtn->Caption = "Cancel"; + RGType->Caption = "Affects"; + RGType->Items->Strings[0] = "Mono tone"; + RGType->Items->Strings[1] = "Two tones"; + RGType->Items->Strings[2] = "Colors"; + RGType->Items->Strings[3] = "Bitmap"; + RGType->Items->Strings[4] = "Sound"; + CBColVert->Caption = "Vertical gradation"; + LLine->Caption = "Line"; + SelBtn->Caption = "Components"; + BitBtn->Caption = "Bitmap"; + GB2->Caption = "Musical scale (1-8)"; + } + pBitmap = NULL; + pItem = NULL; +} +//--------------------------------------------------------------------- +__fastcall TColorBarDlg::~TColorBarDlg() +{ + if( pBitmap != NULL ){ + delete pBitmap; + } +} +//--------------------------------------------------------------------- +void __fastcall TColorBarDlg::UpdateUI(void) +{ + switch(RGType->ItemIndex){ + case 3: + PC1->Visible = FALSE; + PC2->Visible = FALSE; + PC3->Visible = FALSE; + PC4->Visible = FALSE; + SelBtn->Enabled = FALSE; + BitBtn->Enabled = TRUE; + CBColVert->Enabled = FALSE; + LineCnt->Enabled = TRUE; + LLine->Enabled = TRUE; + Sound->Enabled = FALSE; + break; + case 4: + PC1->Visible = FALSE; + PC2->Visible = FALSE; + PC3->Visible = FALSE; + PC4->Visible = FALSE; + SelBtn->Enabled = FALSE; + BitBtn->Enabled = FALSE; + CBColVert->Enabled = FALSE; + LineCnt->Enabled = FALSE; + LLine->Enabled = FALSE; + Sound->Enabled = TRUE; + break; + default: + PC1->Visible = TRUE; + PC2->Visible = RGType->ItemIndex >= 1 ? TRUE : FALSE; + PC3->Visible = RGType->ItemIndex >= 2 ? TRUE : FALSE; + PC4->Visible = RGType->ItemIndex >= 2 ? TRUE : FALSE; + CBColVert->Enabled = PC2->Visible; + SelBtn->Enabled = RGType->ItemIndex >= 2 ? TRUE : FALSE; + BitBtn->Enabled = FALSE; + LineCnt->Enabled = TRUE; + LLine->Enabled = TRUE; + Sound->Enabled = FALSE; + break; + } +} +//--------------------------------------------------------------------- +int __fastcall TColorBarDlg::Execute(CDrawTitle *p) +{ + pItem = p; + RGType->ItemIndex = pItem->m_Type; + PC1->Color = pItem->m_Col1; + PC2->Color = pItem->m_Col2; + PC3->Color = pItem->m_Col3; + PC4->Color = pItem->m_Col4; + LineCnt->Text = pItem->m_Y2 - pItem->m_Y1 + 1; + CBColVert->Checked = pItem->m_ColVert; + Sound->Text = pItem->m_Sound; + if( pItem->pBitmap != NULL ){ + pBitmap = DupeBitmap(pItem->pBitmap, -1); + } + UpdateUI(); + if( ShowModal() == IDOK ){ + pItem->m_Type = RGType->ItemIndex; + pItem->m_Col1 = PC1->Color; + pItem->m_Col2 = PC2->Color; + pItem->m_Col3 = PC3->Color; + pItem->m_Col4 = PC4->Color; + pItem->m_ColVert = CBColVert->Checked; + pItem->m_Sound = Sound->Text; + int d; + if( pItem->m_Type == 4 ){ + d = strlen(pItem->m_Sound.c_str()) - 1; + if( d < 3 ) d = 3; + pItem->m_Y2 = pItem->m_Y1 + d; + } + else if( sscanf(AnsiString(LineCnt->Text).c_str(), "%u", &d) == 1 ){ //ja7ude 0428 + if( (d >= 1) && (d <= 256) ){ + pItem->m_Y2 = pItem->m_Y1 + d - 1; + if( pItem->m_Y2 > 255 ){ + d = pItem->m_Y2 - 255; + pItem->m_Y1 -= d; + pItem->m_Y2 -= d; + } + } + } + if( (RGType->ItemIndex == 3) && (pBitmap != NULL) ){ + if( pItem->pBitmap == NULL ){ + pItem->pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pItem->pBitmap); + } + pItem->pBitmap->Width = pBitmap->Width; + pItem->pBitmap->Height = pBitmap->Height; + pItem->pBitmap->Canvas->Draw(0, 0, pBitmap); + } + else if( pItem->pBitmap != NULL ){ + delete pItem->pBitmap; + pItem->pBitmap = NULL; + } + return TRUE; + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TColorBarDlg::PCClick(TObject *Sender) +{ + TPanel *tp = (TPanel *)Sender; + TColorDialog *pDialog = Mmsstv->ColorDialog; + InitCustomColor(pDialog); + AddCustomColor(pDialog, PC1->Color); + AddCustomColor(pDialog, PC2->Color); + AddCustomColor(pDialog, PC3->Color); + AddCustomColor(pDialog, PC4->Color); + pDialog->Color = tp->Color; + SetDisPaint(); + if( pDialog->Execute() == TRUE ){ + tp->Color = pDialog->Color; + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- + +void __fastcall TColorBarDlg::RGTypeClick(TObject *Sender) +{ + UpdateUI(); +} +//--------------------------------------------------------------------------- + +void __fastcall TColorBarDlg::SelBtnClick(TObject *Sender) +{ + TColorSetDlg *pBox = new TColorSetDlg(this); + TColor col[4]; + col[0] = PC1->Color; + col[1] = PC2->Color; + col[2] = PC3->Color; + col[3] = PC4->Color; + if( pBox->Execute(col) == TRUE ){ + PC1->Color = col[0]; + PC2->Color = col[1]; + PC3->Color = col[2]; + PC4->Color = col[3]; + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TColorBarDlg::BitBtnClick(TObject *Sender) +{ + TOpenDialog *pDialog = Mmsstv->OpenDialog; + pDialog->Options >> ofCreatePrompt; + pDialog->Options << ofFileMustExist; + if( MsgEng ){ + pDialog->Title = "Load picture from file"; + } + else { + pDialog->Title = "画像のロード"; + } + pDialog->Filter = GetPicFilter(); + pDialog->FileName = ""; + pDialog->DefaultExt = "jpg"; + pDialog->InitialDir = BitmapDir; + SetDisPaint(); + NormalWindow(this); + if( Mmsstv->OpenDialogExecute(TRUE) == TRUE ){ + SetDirName(BitmapDir, AnsiString(pDialog->FileName).c_str()); //ja7ude 0428 + TPicRectDlg *pBox = new TPicRectDlg(this); + if( ::LoadImage(pBox->pBitmap, AnsiString(pDialog->FileName).c_str()) == TRUE ){ //ja7ude 0428 + Graphics::TBitmap *pBmp = new Graphics::TBitmap(); + AdjustBitmapFormat(pBmp); + pBmp->Width = pBox->pBitmap->Width < 320 ? pBox->pBitmap->Width : 320; + int H = 16; + int d; + if( sscanf(AnsiString(LineCnt->Text).c_str(), "%u", &d) == 1 ){ //ja7ude 0428 + if( (d >= 1) && (d <= 256) ){ + H = d; + } + } + pBmp->Height = pBox->pBitmap->Height < H ? pBox->pBitmap->Height : H; + if( pBox->Execute(pBmp) == TRUE ){ + if( pBitmap == NULL ){ + pBitmap = new Graphics::TBitmap(); + } + AdjustBitmapFormat(pBitmap); + pBitmap->Width = 320; + pBitmap->Height = H; + int x, y; + for( y = 0; y < pBitmap->Height; y += pBmp->Height){ + for( x = 0; x < pBitmap->Width; x += pBmp->Width){ + pBitmap->Canvas->Draw(x, y, pBmp); + } + } + } + delete pBmp; + } + delete pBox; + } + ResDisPaint(); + TopWindow(this); +} +//--------------------------------------------------------------------------- + diff --git a/ColorBar.dfm b/ColorBar.dfm new file mode 100644 index 0000000000000000000000000000000000000000..61e62497781c487f75597b7f12bc9c67402c2465 GIT binary patch literal 1596 zcmai!yKmD#9LLXga*pj5C=x?is6av>0cz8#bgkW{uh3YrRR$!$iLZ&Na~Ihc(GCoa zd8mj=)LQE_?B<2ojeC#X)z|>2_eWpfS;;EK5>JSX&U_RJbzZQ`7YkivQAWUbG(`ZuR0;jO`RmY}H;Xc<_BA8y%nwIAyDjqXt z=St@MoN+^&ova$urp#XVB#C`>_o{kV~DU<6A+ zEm&lPNT>n|I`N&JLh(qO7=g- zoiW$iEFC@{yBR2`ajKDP7X06S^BGBZ+UhQTs3O;leA z%}AOWHh2kn%no0OY9HST!Y)Yc45YO`zSVv5Ca44(!E$(WE(H&Qr`bRm0LhFFQ^*!( z)VOI8Rd^qZ7uM3#bUDS!8#@mdhR%&#oY+@m1?0_X+o5@bbg<3Z#uT2252ll%1~V1m H-2uRF4;tpU literal 0 HcmV?d00001 diff --git a/ColorBar.h b/ColorBar.h new file mode 100644 index 0000000..f5760ae --- /dev/null +++ b/ColorBar.h @@ -0,0 +1,71 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef OCBH +#define OCBH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "Draw.h" +//---------------------------------------------------------------------------- +class TColorBarDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TRadioGroup *RGType; + TPanel *PC1; + TPanel *PC2; + TPanel *PC3; + TPanel *PC4; + TButton *SelBtn; + TLabel *LLine; + TComboBox *LineCnt; + TButton *BitBtn; + TCheckBox *CBColVert; + TGroupBox *GB2; + TEdit *Sound; + void __fastcall PCClick(TObject *Sender); + void __fastcall RGTypeClick(TObject *Sender); + void __fastcall SelBtnClick(TObject *Sender); + void __fastcall BitBtnClick(TObject *Sender); + +private: + void __fastcall UpdateUI(void); + Graphics::TBitmap *pBitmap; + CDrawTitle *pItem; +public: + virtual __fastcall TColorBarDlg(TComponent* AOwner); + __fastcall TColorBarDlg::~TColorBarDlg(); + + int __fastcall TColorBarDlg::Execute(CDrawTitle *pItem); +}; +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +#endif diff --git a/ColorSet.cpp b/ColorSet.cpp new file mode 100644 index 0000000..ba8ae2f --- /dev/null +++ b/ColorSet.cpp @@ -0,0 +1,125 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "ColorSet.h" +#include "Main.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TColorSetDlg::TColorSetDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Color components"; + CancelBtn->Caption = "Cancel"; + } +} +//--------------------------------------------------------------------- +TPanel *__fastcall TColorSetDlg::GetItem(int n, int x) +{ + TPanel *_tb[]={ + PC11, PC12, PC13, PC14, + PC21, PC22, PC23, PC24, + PC31, PC32, PC33, PC34, + PC41, PC42, PC43, PC44, + PC51, PC52, PC53, PC54, + PC61, PC62, PC63, PC64, + PC71, PC72, PC73, PC74, + PC81, PC82, PC83, PC84, + }; + return _tb[n * 4 + x]; +} +//--------------------------------------------------------------------- +int __fastcall TColorSetDlg::Execute(TColor *pcol) +{ + int i, x, f; + int n = 0; + int pos = -1; + for( i = 0; i < 8; i++ ){ + f = 0; + for( x = 0; x < 4; x++, n++ ){ + GetItem(i, x)->Color = sys.m_ColorSet[n]; + if( pcol[x] != sys.m_ColorSet[n] ) f++; + } + if( !f ){ + pos = i; + } + } + RGSet->ItemIndex = pos; + if( ShowModal() == IDOK ){ + n = 0; + for( i = 0; i < 8; i++ ){ + for( x = 0; x < 4; x++, n++ ){ + sys.m_ColorSet[n] = GetItem(i, x)->Color; + } + } + if( RGSet->ItemIndex >= 0 ){ + for( x = 0; x < 4; x++ ){ + pcol[x] = GetItem(RGSet->ItemIndex, x)->Color; + } + return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TColorSetDlg::PCClick(TObject *Sender) +{ + int i, x, pos; + pos = -1; + for( i = 0; (i < 8) && (pos < 0); i++ ){ + for(x = 0; x < 4; x++ ){ + if( Sender == GetItem(i, x) ){ + pos = i; + break; + } + } + } + TColorDialog *pDialog = Mmsstv->ColorDialog; + InitCustomColor(pDialog); + + TPanel *pPanel[4]; + for( i = 0; i < 4; i++ ){ + pPanel[i] = GetItem(pos, i); + AddCustomColor(pDialog, pPanel[i]->Color); + } + + pDialog->Color = ((TPanel *)Sender)->Color; + SetDisPaint(); + if( pDialog->Execute() == TRUE ){ + ((TPanel *)Sender)->Color = pDialog->Color; + if( (pPanel[0]->Color == pPanel[1]->Color) && (pPanel[2]->Color == pPanel[3]->Color) ){ + if( YesNoMB( MsgEng ? "Change to two colors gradation?" : "2色のグラデーションに変更しますか?" ) == IDYES ){ + pPanel[1]->Color = GetCol(pPanel[0]->Color, pPanel[3]->Color, 2, 4); + pPanel[2]->Color = GetCol(pPanel[0]->Color, pPanel[3]->Color, 3, 4); + } + } + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- + diff --git a/ColorSet.dfm b/ColorSet.dfm new file mode 100644 index 0000000000000000000000000000000000000000..f6e32f986f79f2caa9d8d272a78c82810fbb6a29 GIT binary patch literal 2873 zcmajeJ8#oa7{>8)?BqDH(^Br`Qd(d~y`-194k=X&F^Q#a2sb%NER0X;oJeKO!h{5D zd6{C`MrMsNBLzl->q%e>W%w;WqX6oPu+DG^S$bP z$#+$xl7`fksNu7$!6T_8c%Is?vIBVC1&~S1Fcn@ zuWhaCINRepJKDpr^P^8No`~$zjM?K2jM|n}k?mj*>7w&cwSuTF`{|9r3x2R$J6hgg z>=-Y)LEMzl-vj3V86dJ3i^qfVAKxE-{zgU^CnGpxj$aR2q1s5)pqH<2q(?K_!LUaw znArsLD;w`%w)w=Sme2e58agf3>2tvs1YZ<@>>Lkl5j0z. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef ColorSetH +#define ColorSetH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TColorSetDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TRadioGroup *RGSet; + TPanel *PC11; + TPanel *PC12; + TPanel *PC13; + TPanel *PC14; + TPanel *PC21; + TPanel *PC22; + TPanel *PC23; + TPanel *PC24; + TPanel *PC31; + TPanel *PC32; + TPanel *PC33; + TPanel *PC34; + TPanel *PC41; + TPanel *PC42; + TPanel *PC43; + TPanel *PC44; + TPanel *PC51; + TPanel *PC52; + TPanel *PC53; + TPanel *PC54; + TPanel *PC61; + TPanel *PC62; + TPanel *PC63; + TPanel *PC64; + TPanel *PC71; + TPanel *PC72; + TPanel *PC73; + TPanel *PC74; + TPanel *PC81; + TPanel *PC82; + TPanel *PC83; + TPanel *PC84; + void __fastcall PCClick(TObject *Sender); +private: + TPanel *__fastcall GetItem(int n, int x); + +public: + virtual __fastcall TColorSetDlg(TComponent* AOwner); + + int __fastcall Execute(TColor *pcol); +}; +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +#endif diff --git a/ComLib.cpp b/ComLib.cpp new file mode 100644 index 0000000..0f216f4 --- /dev/null +++ b/ComLib.cpp @@ -0,0 +1,3848 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include //ja7ude 0521 +#pragma hdrstop + +#include "ComLib.h" +#include "PicRect.h" +#include "LogFile.h" +#include "sstv.h" +#include "jhandle.h" +#include "main.h" +//--------------------------------------------------------------------------- +//#define SYSMB 1 // MessageBox 0-Application, 1-System +// +char BgnDir[256]; // 起動ディレクトリ + +char HistDir[256]; +char StockDir[256]; + +char BitmapDir[256]; // ビットマップロード・セーブ +char SBitmapDir[256]; // ビットマップロード・セーブ +char MMLogDir[256]; // MMLOGファイルのディレクトリ +char ExtLogDir[256]; // エクスポートファイルのディレクトリ +char RecDir[256]; // 録音ファイルのディレクトリ +char TemplateDir[256]; // ビットマップロード・セーブ + +AnsiString JanHelp; + +double SampFreq = 11025.0; // サンプリング周波数 +double SampBase = 11025.0; +int DemOver = 1; +int SampType = 0; +int SampSize = 2048; + +double FFTSamp = 11025.0; +int FFTSampType = 0; +int FFT_SIZE=2048; + +SYSSET sys; +LCID lcid; // ロケール情報 +DWORD ColorTable[128]; +int DisPaint; +int MsgEng; +//HPALETTE UsrPal; +int WinNT; +int WinVista; + +CExecPB g_ExecPB; + +const int SampTable[]={11025, 8000, 6000, 12000, 16000, 18000, 22050, 24000, 44100, 48000}; + +//--------------------------------------------------------------------------- +void __fastcall SetDisPaint(void) +{ + DisPaint++; +} +void __fastcall ResDisPaint(void) +{ + if( DisPaint ) DisPaint--; +} +//--------------------------------------------------------------------------- +void ShowHelp(int index) +{ + if( !JanHelp.IsEmpty() ){ + HWND hd; + if( Screen->ActiveForm != NULL ){ + hd = Screen->ActiveForm->Handle; + } + else { + hd = Application->MainForm->Handle; + } + char bf[256]; + sprintf(bf, "%s%s", BgnDir, JanHelp.c_str()); + if( !strcmpi(GetEXT(JanHelp.c_str()), "HLP") ){ + if( index != -1 ){ + ::WinHelp(hd, bf, HELP_CONTEXT, index); + } + else { + ::WinHelp(hd, bf, HELP_FINDER, 0); + } + } + else { + ::ShellExecute(hd, "open", bf, NULL, NULL, SW_SHOWDEFAULT); + } + } +} +//--------------------------------------------------------------------------- +void InitSampType(void) +{ + + if( SampFreq >= 46000.0 ){ + SampType = 9; + SampBase = 48000.0; + SampSize = (48000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq * 0.25; + FFTSampType = 2; // X4 over sampling + FFT_SIZE = 2048; + } + else if( SampFreq >= 43000.0 ){ + SampType = 8; + SampBase = 44100.0; + SampSize = (44100*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq * 0.25; + FFTSampType = 2; // X4 over sampling + FFT_SIZE = 2048; + } + else if( SampFreq >= 23000.0 ){ + SampType = 7; + SampBase = 24000.0; + SampSize = (24000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq * 0.5; + FFTSampType = 1; // X2 over sampling + FFT_SIZE = 2048; + } + else if( SampFreq >= 20000.0 ){ + SampType = 6; + SampBase = 22050.0; + SampSize = (22050*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq * 0.5; + FFTSampType = 1; // X2 over sampling + FFT_SIZE = 2048; + } + else if( SampFreq >= 17000.0 ){ + SampType = 5; + SampBase = 18000.0; + SampSize = (18000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq * 0.5; + FFTSampType = 1; // X2 over sampling + FFT_SIZE = 2048; + } + else if( SampFreq >= 15000.0 ){ + SampType = 4; + SampBase = 16000.0; + SampSize = (16000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq; + FFTSampType = 0; + FFT_SIZE = 2048; + } + else if( SampFreq >= 11600.0 ){ + SampType = 3; + SampBase = 12000.0; + SampSize = (12000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq; + FFTSampType = 0; + FFT_SIZE = 2048; + } + else if( SampFreq >= 10000.0 ){ + SampType = 0; + SampBase = 11025.0; + SampSize = 2048; + DemOver = 0; + FFTSamp = SampFreq; + FFTSampType = 0; + FFT_SIZE = 2048; + } + else if( SampFreq >= 7000.0 ){ + SampType = 1; + SampBase = 8000.0; + SampSize = (8000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq; + FFTSampType = 0; + FFT_SIZE = 1024; + } + else if( SampFreq >= 5000.0 ){ + SampType = 2; + SampBase = 6000.0; + SampSize = (6000*2048)/11025; + DemOver = 0; + FFTSamp = SampFreq; + FFTSampType = 0; + FFT_SIZE = 1024; + } + if( SampSize & 1 ) SampSize++; + if( SampSize > 8192 ) SampSize = 8192; +} +//--------------------------------------------------------------------------- +double NormalSampFreq(double d, double m) +{ + d = double(int((d * m) + 0.5)/m); + return d; +} +//--------------------------------------------------------------------------- +int IsFile(LPCSTR pName) +{ + FILE *fp; + fp = fopen(pName, "rb"); + if( fp != NULL ){ + fclose(fp); + return 1; + } + else { + return 0; + } +} +//--------------------------------------------------------------------------- +int SetTimeOffsetInfo(int &Hour, int &Min) +{ + TIME_ZONE_INFORMATION tz; + + int off; + switch(GetTimeZoneInformation(&tz)){ + case TIME_ZONE_ID_STANDARD: + off = tz.StandardBias; + break; + case TIME_ZONE_ID_DAYLIGHT: + off = tz.DaylightBias; + break; + default: + return FALSE; + } + if( off >= 0 ){ + Hour = -(off / 60); + Min = (off % 60); + } + else { + off = -off; + Hour = off / 60; + Min = off % 60; + } + return TRUE; +} +//--------------------------------------------------------------------------- +void AddjustOffset(SYSTEMTIME *tp) +{ + if( sys.m_TimeOffset || sys.m_TimeOffsetMin ){ +//typedef struct _SYSTEMTIME { /* st */ +// WORD wYear; +// WORD wMonth; +// WORD wDayOfWeek; +// WORD wDay; +// WORD wHour; +// WORD wMinute; +// WORD wSecond; +// WORD wMilliseconds; +//} SYSTEMTIME; + + + LPCSTR mt; + int Hour = tp->wHour; + int Min = tp->wMinute; + Min += sys.m_TimeOffsetMin; + if( Min >= 60 ){ + Hour++; + Min -= 60; + } + else if( Min < 0 ){ + Hour--; + Min += 60; + } + tp->wMinute = WORD(Min); + Hour += sys.m_TimeOffset; + if( Hour >= 24 ){ + tp->wHour = WORD(Hour - 24); + tp->wDay++; + if( tp->wYear % 4 ){ + mt = MONN; + } + else { + mt = MONU; + } + if( tp->wDay > mt[tp->wMonth] ){ + tp->wDay = 1; + tp->wMonth++; + if( tp->wMonth > 12 ){ + tp->wMonth = 1; + tp->wYear++; + } + } + } + else if( Hour < 0 ){ + tp->wHour = WORD(Hour + 24); + tp->wDay--; + if( tp->wDay < 1 ){ + tp->wMonth--; + if( tp->wMonth < 1 ){ + tp->wMonth = 12; + tp->wYear--; + } + if( tp->wYear % 4 ){ + tp->wDay = MONN[tp->wMonth]; + } + else { + tp->wDay = MONU[tp->wMonth]; + } + } + } + else { + tp->wHour = WORD(Hour); + } + } +} +//--------------------------------------------------------------------------- +void GetUTC(SYSTEMTIME *tp) +{ + ::GetSystemTime(tp); + AddjustOffset(tp); +} +//--------------------------------------------------------------------------- +void GetLocal(SYSTEMTIME *tp) +{ + ::GetLocalTime(tp); + AddjustOffset(tp); +} +//--------------------------------------------------------------------------- +LPSTR StrDupe(LPCSTR s) +{ + LPSTR p = new char[strlen(s)+1]; + strcpy(p, s); + return p; +} +//--------------------------------------------------------------------------- +void InitColorTable(TColor cl, TColor ch) +{ + int br = (ch & 0x000000ff); + int bg = (ch & 0x0000ff00) >> 8; + int bb = (ch & 0x00ff0000) >> 16; + int er = (cl & 0x000000ff); + int eg = (cl & 0x0000ff00) >> 8; + int eb = (cl & 0x00ff0000) >> 16; + + int brw = er - br + 1; + int bgw = eg - bg + 1; + int bbw = eb - bb + 1; + int r, g, b; + + ColorTable[0] = DWORD( br | (bg<<8) | (bb<<16) ); + int i; + for( i = 1; i < 127; i++ ){ + r = (br + (i * brw/128)) & 0x000000ff; + g = (bg + (i * bgw/128)) & 0x000000ff; + b = (bb + (i * bbw/128)) & 0x000000ff; + ColorTable[i] = DWORD( r | (g<<8) | (b<<16) ); + } + ColorTable[127] = DWORD( er | (eg<<8) | (eb<<16) ); +} + +#if 0 +const DEFKEYTBL KEYTBL[]={ + { VK_F1, "F1" }, + { VK_F2, "F2" }, + { VK_F3, "F3" }, + { VK_F4, "F4" }, + { VK_F5, "F5" }, + { VK_F6, "F6" }, + { VK_F7, "F7" }, + { VK_F8, "F8" }, + { VK_F9, "F9" }, + { VK_F10, "F10" }, + { VK_F11, "F11" }, + { VK_F12, "F12" }, + + { VK_LEFT, "←"}, + { VK_RIGHT, "→"}, + { VK_UP, "↑"}, + { VK_DOWN, "↓"}, + { VK_PRIOR, "PageUp"}, + { VK_NEXT, "PageDown"}, + { VK_HOME, "Home" }, + { VK_END, "End" }, + { VK_INSERT, "Insert" }, + { VK_DELETE, "Delete" }, + { VK_HELP, "Help" }, + { VK_ESCAPE, "ESC" }, + + + { VK_F1 | 0x400, "Shift+F1" }, + { VK_F2 | 0x400, "Shift+F2" }, + { VK_F3 | 0x400, "Shift+F3" }, + { VK_F4 | 0x400, "Shift+F4" }, + { VK_F5 | 0x400, "Shift+F5" }, + { VK_F6 | 0x400, "Shift+F6" }, + { VK_F7 | 0x400, "Shift+F7" }, + { VK_F8 | 0x400, "Shift+F8" }, + { VK_F9 | 0x400, "Shift+F9" }, + { VK_F10 | 0x400, "Shift+F10" }, + { VK_F11 | 0x400, "Shift+F11" }, + { VK_F12 | 0x400, "Shift+F12" }, + + { VK_LEFT | 0x400, "Shift+←"}, + { VK_RIGHT | 0x400, "Shift+→"}, + { VK_UP | 0x400, "Shift+↑"}, + { VK_DOWN | 0x400, "Shift+↓"}, + { VK_PRIOR | 0x400, "Shift+PageUp"}, + { VK_NEXT | 0x400, "Shift+PageDown"}, + { VK_HOME | 0x400, "Shift+Home" }, + { VK_END | 0x400, "Shift+End" }, + { VK_INSERT | 0x400, "Shift+Insert" }, + { VK_DELETE | 0x400, "Shift+Delete" }, + { VK_HELP | 0x400, "Shift+Help" }, + { VK_ESCAPE | 0x400, "Shift+ESC" }, + + { VK_F1 | 0x100, "Ctrl+F1" }, + { VK_F2 | 0x100, "Ctrl+F2" }, + { VK_F3 | 0x100, "Ctrl+F3" }, + { VK_F4 | 0x100, "Ctrl+F4" }, + { VK_F5 | 0x100, "Ctrl+F5" }, + { VK_F6 | 0x100, "Ctrl+F6" }, + { VK_F7 | 0x100, "Ctrl+F7" }, + { VK_F8 | 0x100, "Ctrl+F8" }, + { VK_F9 | 0x100, "Ctrl+F9" }, + { VK_F10 | 0x100, "Ctrl+F10" }, + { VK_F11 | 0x100, "Ctrl+F11" }, + { VK_F12 | 0x100, "Ctrl+F12" }, + { '1' | 0x100, "Ctrl+1" }, + { '2' | 0x100, "Ctrl+2" }, + { '3' | 0x100, "Ctrl+3" }, + { '4' | 0x100, "Ctrl+4" }, + { '5' | 0x100, "Ctrl+5" }, + { '6' | 0x100, "Ctrl+6" }, + { '7' | 0x100, "Ctrl+7" }, + { '8' | 0x100, "Ctrl+8" }, + { '9' | 0x100, "Ctrl+9" }, + { '0' | 0x100, "Ctrl+0" }, + { 'A' | 0x100, "Ctrl+A" }, + { 'B' | 0x100, "Ctrl+B" }, + { 'C' | 0x100, "Ctrl+C" }, + { 'D' | 0x100, "Ctrl+D" }, + { 'E' | 0x100, "Ctrl+E" }, + { 'F' | 0x100, "Ctrl+F" }, + { 'G' | 0x100, "Ctrl+G" }, +// { 'H' | 0x100, "Ctrl+H" }, +// { 'I' | 0x100, "Ctrl+I" }, + { 'K' | 0x100, "Ctrl+K" }, + { 'L' | 0x100, "Ctrl+L" }, +// { 'M' | 0x100, "Ctrl+M" }, + { 'N' | 0x100, "Ctrl+N" }, + { 'O' | 0x100, "Ctrl+O" }, + { 'P' | 0x100, "Ctrl+P" }, + { 'Q' | 0x100, "Ctrl+Q" }, + { 'R' | 0x100, "Ctrl+R" }, + { 'S' | 0x100, "Ctrl+S" }, + { 'T' | 0x100, "Ctrl+T" }, + { 'U' | 0x100, "Ctrl+U" }, + { 'V' | 0x100, "Ctrl+V" }, + { 'W' | 0x100, "Ctrl+W" }, + { 'X' | 0x100, "Ctrl+X" }, + { 'Y' | 0x100, "Ctrl+Y" }, + { 'Z' | 0x100, "Ctrl+Z" }, + + { VK_LEFT | 0x100, "Ctrl+←"}, + { VK_RIGHT | 0x100, "Ctrl+→"}, + { VK_UP | 0x100, "Ctrl+↑"}, + { VK_DOWN | 0x100, "Ctrl+↓"}, + { VK_PRIOR | 0x100, "Ctrl+PageUp"}, + { VK_NEXT | 0x100, "Ctrl+PageDown"}, + { VK_HOME | 0x100, "Ctrl+Home" }, + { VK_END | 0x100, "Ctrl+End" }, + { VK_INSERT | 0x100, "Ctrl+Insert" }, + { VK_DELETE | 0x100, "Ctrl+Delete" }, + { VK_HELP | 0x100, "Ctrl+Help" }, + { VK_ESCAPE | 0x100, "Ctrl+ESC" }, + + { VK_F1 | 0x200, "Alt+F1" }, + { VK_F2 | 0x200, "Alt+F2" }, + { VK_F3 | 0x200, "Alt+F3" }, + { VK_F4 | 0x200, "Alt+F4" }, + { VK_F5 | 0x200, "Alt+F5" }, + { VK_F6 | 0x200, "Alt+F6" }, + { VK_F7 | 0x200, "Alt+F7" }, + { VK_F8 | 0x200, "Alt+F8" }, + { VK_F9 | 0x200, "Alt+F9" }, + { VK_F10 | 0x200, "Alt+F10" }, + { VK_F11 | 0x200, "Alt+F11" }, + { VK_F12 | 0x200, "Alt+F12" }, + { '1' | 0x200, "Alt+1" }, + { '2' | 0x200, "Alt+2" }, + { '3' | 0x200, "Alt+3" }, + { '4' | 0x200, "Alt+4" }, + { '5' | 0x200, "Alt+5" }, + { '6' | 0x200, "Alt+6" }, + { '7' | 0x200, "Alt+7" }, + { '8' | 0x200, "Alt+8" }, + { '9' | 0x200, "Alt+9" }, + { '0' | 0x200, "Alt+0" }, + { 'A' | 0x200, "Alt+A" }, + { 'B' | 0x200, "Alt+B" }, + { 'C' | 0x200, "Alt+C" }, + { 'D' | 0x200, "Alt+D" }, + { 'E' | 0x200, "Alt+E" }, + { 'F' | 0x200, "Alt+F" }, + { 'G' | 0x200, "Alt+G" }, + { 'H' | 0x200, "Alt+H" }, + { 'I' | 0x200, "Alt+I" }, + { 'K' | 0x200, "Alt+K" }, + { 'L' | 0x200, "Alt+L" }, + { 'M' | 0x200, "Alt+M" }, + { 'N' | 0x200, "Alt+N" }, + { 'O' | 0x200, "Alt+O" }, + { 'P' | 0x200, "Alt+P" }, + { 'Q' | 0x200, "Alt+Q" }, + { 'R' | 0x200, "Alt+R" }, + { 'S' | 0x200, "Alt+S" }, + { 'T' | 0x200, "Alt+T" }, + { 'U' | 0x200, "Alt+U" }, + { 'V' | 0x200, "Alt+V" }, + { 'W' | 0x200, "Alt+W" }, + { 'X' | 0x200, "Alt+X" }, + { 'Y' | 0x200, "Alt+Y" }, + { 'Z' | 0x200, "Alt+Z" }, + + { VK_LEFT | 0x200, "Alt+←"}, + { VK_RIGHT | 0x200, "Alt+→"}, + { VK_UP | 0x200, "Alt+↑"}, + { VK_DOWN | 0x200, "Alt+↓"}, + { VK_PRIOR | 0x200, "Alt+PageUp"}, + { VK_NEXT | 0x200, "Alt+PageDown"}, + { VK_HOME | 0x200, "Alt+Home" }, + { VK_END | 0x200, "Alt+End" }, + { VK_INSERT | 0x200, "Alt+Insert" }, + { VK_DELETE | 0x200, "Alt+Delete" }, + { VK_HELP | 0x200, "Alt+Help" }, + { VK_ESCAPE | 0x200, "Alt+ESC" }, + { 0, "" }, +}; +//--------------------------------------------------------------------------- +LPCSTR ToDXKey(LPCSTR s) +{ + if( MsgEng && *s ){ + LPSTR p; + static char bf[32]; + strcpy(bf, s); + if( (p = strstr(bf, "←"))!=NULL ){ + strcpy(p, "ArrowLeft"); + return bf; + } + else if( (p = strstr(bf, "→"))!=NULL ){ + strcpy(p, "ArrowRight"); + return bf; + } + else if( (p = strstr(bf, "↓"))!=NULL ){ + strcpy(p, "ArrowDown"); + return bf; + } + else if( (p = strstr(bf, "↑"))!=NULL ){ + strcpy(p, "ArrowUp"); + return bf; + } + } + return s; +} +//--------------------------------------------------------------------------- +LPCSTR ToJAKey(LPCSTR s) +{ + if( MsgEng && *s ){ + LPSTR p; + static char bf[32]; + strcpy(bf, s); + if( (p = strstr(bf, "ArrowLeft"))!=NULL ){ + strcpy(p, "←"); + return bf; + } + else if( (p = strstr(bf, "ArrowRight"))!=NULL ){ + strcpy(p, "→"); + return bf; + } + else if( (p = strstr(bf, "ArrowDown"))!=NULL ){ + strcpy(p, "↓"); + return bf; + } + else if( (p = strstr(bf, "ArrowUp"))!=NULL ){ + strcpy(p, "↑"); + return bf; + } + } + return s; +} +//--------------------------------------------------------------------------- +LPCSTR GetKeyName(WORD Key) +{ + int i; + for( i = 0; KEYTBL[i].Key; i++ ){ + if( Key == KEYTBL[i].Key ){ + break; + } + } + return ToDXKey(KEYTBL[i].pName); +} +//--------------------------------------------------------------------------- +WORD GetKeyCode(LPCSTR pName) +{ + LPCSTR p = ToJAKey(pName); + int i; + for( i = 0; KEYTBL[i].Key; i++ ){ + if( !strcmp(p, KEYTBL[i].pName) ) break; + } + return KEYTBL[i].Key; +} +#endif + +//--------------------------------------------------------------------------- +int SetTBValue(double d, double dmax, int imax) +{ + if( d ){ + int dd = int(sqrt(d * dmax * dmax / imax) + 0.5); + if( dd > imax ) dd = imax; + return dd; + } + else { + return 0; + } +} + +double GetTBValue(int d, double dmax, int imax) +{ + return (d * d) * imax/ (dmax * dmax); +} + +LPUSTR jstrupr(LPUSTR s) +{ + LPUSTR p = s; + int kf; + + for( kf = 0; *p; p++ ){ + if( kf ){ + kf = 0; + } + else if( _mbsbtype((unsigned char *)p, 0) == _MBC_LEAD ){ + kf = 1; + } + else { + *p = (unsigned char)toupper(*p); + } + } + return s; +} +/*#$% +=============================================================== + 時刻を調整する +--------------------------------------------------------------- + t : 時刻(UTC) + c : 時差コード +--------------------------------------------------------------- + ローカルタイム +--------------------------------------------------------------- + A-Z + a-z +30min +=============================================================== +*/ +WORD AdjustRolTimeUTC(WORD tim, char c) +{ + const char tdf[]={ +/* A B C D E F G H I J K L M N O P Q R S T U V W X Y Z */ + 1,2,3,4,5,6,7,8,9,9,10,11,12,23,22,21,20,19,18,17,16,15,14,13,12,0 + }; + int cc; + + cc = toupper(c); + if( (cc >= 'A')&&(cc <= 'Z') ){ + // JST to UTC +#if 0 + if( tim >= (9*60*30) ){ + tim -= WORD(9 * 60 * 30); + } + else { + tim += WORD(15 * 60 * 30); + } +#endif + tim /= WORD(30); + tim += WORD(tdf[cc-'A'] * 60); + if( c >= 'a' ) tim += WORD(30); + while( tim >= (24 * 60) ){ + tim -= WORD(24 * 60); + } + tim *= WORD(30); + if( !tim ) tim++; + } + else { + tim = 0; + } + return tim; +} +///---------------------------------------------------------------- +/// ウィンドウをクライアントセンターにする +void FormCenter(TForm *tp, int XW, int YW) +{ + int top = (YW - tp->Height)/2; + int left = (XW - tp->Width)/2; + if( top < 0 ) top = 0; + if( left < 0 ) left = 0; + tp->Top = top; + tp->Left = left; +} +/*#$% +======================================================== + 最後の文字コードを返す +-------------------------------------------------------- + p : 文字列のポインタ +-------------------------------------------------------- + 文字コード +-------------------------------------------------------- +======================================================== +*/ +char *lastp(char *p) +{ + if( *p ){ + for( ; *p; p++ ); + p--; + return(p); + } + else { + return(p); + } +} +/*#$% +======================================================== + 末尾のスペースとTABを取る +-------------------------------------------------------- + s : 文字列のポインタ +-------------------------------------------------------- + 文字列のポインタ +-------------------------------------------------------- +======================================================== +*/ +char *clipsp(char *s) +{ + char *p; + + if( *s ){ + for( p = lastp(s); p >= s; p-- ){ + if( (*p == ' ')||(*p == 0x09) ){ + *p = 0; + } + else { + break; + } + } + } + return(s); +} +//--------------------------------------------------------------------------- +LPCSTR _strdmcpy(LPSTR t, LPCSTR p, char c) +{ + for( ; *p && (*p != c); p++, t++ ) *t = *p; + *t = 0; + if( *p == c ) p++; + return(p); +} +const char *StrDlmCpy(char *t, const char *p, char Dlm, int len) +{ + const char _tt1[]="[{(「<"; + const char _tt2[]="]})」>"; + const char *pp; + int r = FALSE; + + char Key; + if( (pp = strchr(_tt2, Dlm))!=NULL ){ + Key = _tt1[pp - _tt2]; + } + else { + Key = 0; + } + int f, k; + for( f = k = 0; *p; p++ ){ + if( k ){ // 漢字2バイト目 + k = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + } + else if( *p == Key ){ + f++; + } + else if( *p == Dlm ){ + if( f ){ + f--; + } + else { + r = TRUE; + p++; + break; + } + } + if( len ){ + *t++ = *p; + len--; + } + } + *t = 0; + return (r == TRUE) ? p : NULL; +} + +const char *StrDlmCpyK(char *t, const char *p, char Dlm, int len) +{ + const char _tt1[]="[{(「<"; + const char _tt2[]="]})」>"; + const char *pp; + int r = FALSE; + + char Key; + if( (pp = strchr(_tt2, Dlm))!=NULL ){ + Key = _tt1[pp - _tt2]; + } + else { + Key = 0; + } + int f, k; + for( f = k = 0; *p; p++ ){ + if( k ){ // 漢字2バイト目 + k = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + } + else if( (pp = strchr(_tt1, *p))!=NULL ){ + Key = _tt2[pp - _tt1]; + f++; + } + else if( f && (*p == Key) ){ + f--; + Key = 0; + } + else if( *p == Dlm ){ + if( !f ){ + r = TRUE; + p++; + break; + } + } + if( len ){ + *t++ = *p; + len--; + } + } + *t = 0; + return (r == TRUE) ? p : NULL; +} +//--------------------------------------------------------------------------- +void StrCopy(LPSTR t, LPCSTR s, int n) +{ + for( ; *s && n; n--, s++, t++){ + *t = *s; + } + *t = 0; +} +//--------------------------------------------------------------------------- +char LastC(LPCSTR p) +{ + char c = 0; + + if( *p ){ + c = *(p + strlen(p) - 1); + } + return c; +} + +/*#$% +======================================================== + 拡張子を得る +-------------------------------------------------------- + p : 文字列のポインタ +-------------------------------------------------------- + 文字コード +-------------------------------------------------------- +======================================================== +*/ +LPCSTR GetEXT(LPCSTR Fname) +{ + if( *Fname ){ + LPCSTR p = Fname + (strlen(Fname) - 1); + for( ; p > Fname; p-- ){ + if( *p == '.' ) return p+1; + } + } + return ""; +} + +void SetEXT(LPSTR pName, LPSTR pExt) +{ + if( *pName ){ + LPSTR p; + + for( p = &pName[strlen(pName)-1]; p >= pName; p-- ){ + if( *p == '.' ){ + strcpy(p, pExt); + return; + } + } + strcat(pName, pExt); + } +} + +BOOL __fastcall CheckEXT(LPCSTR pName, LPCSTR pExt) +{ + return !strcmpi(GetEXT(pName), pExt); +} + +void SetCurDir(LPSTR t, int size) +{ + if( !::GetCurrentDirectory(size-1, t) ){ + *t = 0; + } + else { + if( LastC(t) != '\\' ){ + strcat(t, "\\"); + } + } +} + +void SetDirName(LPSTR t, LPCSTR pName) +{ + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + strncpy(t, Dir.c_str(), 128); +} + +LPCSTR StrDbl(double d) +{ + static char bf[64]; + LPSTR p; + + sprintf(bf, "%lf", d); + for( p = &bf[strlen(bf)-1]; p >= bf; p-- ){ + if( (*p == '0')&&(*(p-1)!='.') ){ + *p = 0; + } + else { + break; + } + } + return bf; +} + +LPCSTR StrDblE(double d) +{ + static char bf[32]; + + sprintf(bf, "%le", d); + return bf; +} + +double ReadDoubleIniFile(TMemIniFile *p, LPCSTR c1, LPCSTR c2, double d) +{ + AnsiString cs = StrDblE(d); + AnsiString rs = p->ReadString(c1, c2, cs); + if( sscanf(rs.c_str(), "%lf", &d) != 1 ) d = 0.0; + return d; +} + +void WriteDoubleIniFile(TMemIniFile *p, LPCSTR c1, LPCSTR c2, double d) +{ + AnsiString cs = StrDblE(d); + p->WriteString(c1, c2, cs); +} + +///---------------------------------------------------------------- +/// CR/LFを削除 +/// +void ClipLF(LPSTR sp) +{ + for( ; *sp; sp++ ){ + if( (*sp == LF)||(*sp == CR) ){ + *sp = 0; + break; + } + } +} +///---------------------------------------------------------------- +/// コメントを削除(スペースおよびTABも削除) +/// +void DeleteComment(LPSTR bf) +{ + LPSTR sp, tp; + + for( sp = tp = bf; *sp; sp++ ){ + if( (*sp == ';')||(*sp == CR)||(*sp == LF) ){ + break; + } + else if( (*sp!=' ')&&(*sp!=TAB) ){ + *tp++ = *sp; + } + } + *tp = 0; +} + +LPSTR FillSpace(LPSTR s, int n) +{ + LPSTR p = s; + int i = 0; + for( ; *p && (i < n); i++, p++ ); + for( ; i < n; i++, p++ ){ + *p = ' '; + } + *p = 0; + return s; +} +///---------------------------------------------------------------- +/// ホワイトスペースのスキップ +/// +LPSTR SkipSpace(LPSTR sp) +{ + for( ; *sp; sp++ ){ + if( (*sp != ' ')&&(*sp != TAB) ) break; + } + return sp; +} + +LPCSTR SkipSpace(LPCSTR sp) +{ + for( ; *sp; sp++ ){ + if( (*sp != ' ')&&(*sp != TAB) ) break; + } + return sp; +} + +///---------------------------------------------------------------- +/// デリミッタ分解を行う +/// +LPSTR StrDlm(LPSTR &t, LPSTR p) +{ + return StrDlm(t, p, ','); +} + +///---------------------------------------------------------------- +/// デリミッタ分解を行う +/// +LPSTR StrDlm(LPSTR &t, LPSTR p, char c) +{ + int f, k; + LPSTR d1=NULL; + LPSTR d2=NULL; + + t = p; + f = k = 0; + while(*p){ + if( k ){ // 漢字2バイト目 + k = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + } + else if( *p == 0x22 ){ + if( !f ){ + if( d1 == NULL ) d1 = p+1; + f++; + } + else { + d2 = p; + f--; + } + } + else if( !f && (*p == c) ){ + *p = 0; + p++; + break; + } + p++; + } + + if( (d1!=NULL)&&(d2!=NULL) ){ + if( ((t+1)==d1) && ( ((p-2)==d2)||((p-1)==d2) ) ){ + t = d1; + *d2 = 0; + } + } + return(p); +} + +///---------------------------------------------------------------- +/// +void ChgString(LPSTR t, char a, char b) +{ + for( ; *t; t++ ){ + if( *t == a ) *t = b; + } +} + +///---------------------------------------------------------------- +/// +void DelChar(LPSTR t, char a) +{ + for( ; *t; t++ ){ + if( *t == a ){ + strcpy(t, t+1); + t--; + } + } +} + +//--------------------------------------------------------------------------- +BOOL __fastcall ATOI(int &d, LPCSTR s) +{ + LPCSTR p = SkipSpace(s); + if( *p == '-' ) p++; + while(*p){ + if( !isdigit(*p++) ) return FALSE; + } + if( sscanf(s, "%d", &d) != 1 ) return FALSE; + return TRUE; +} + +/*#$% +======================================================== + デシマルアスキーを数値に変換する +-------------------------------------------------------- + p : 文字列のポインタ + n : 変換桁数 +-------------------------------------------------------- + 数値 +-------------------------------------------------------- +======================================================== +*/ +int atoin(const char *p, int n) +{ + int d; + + for( d = 0; *p && n; p++, n-- ){ + d *= 10; + d += (*p & 0x0f); + } + return(d); +} +/*#$% +======================================================== + 16進アスキーを数値に変換する +-------------------------------------------------------- + p : 文字列のポインタ + n : 変換桁数 +-------------------------------------------------------- + 数値 +-------------------------------------------------------- +======================================================== +*/ +int htoin(const char *p, int n) +{ + if( *p == 'x' ) return 0; + int d; + + for( d = 0; *p && n; p++, n-- ){ + d = d << 4; + d += (*p & 0x0f); + if( *p >= 'A' ) d += 9; + } + return(d); +} +//--------------------------------------------------------------------------- +int InvMenu(TMenuItem *pItem) +{ + pItem->Checked = pItem->Checked ? FALSE : TRUE; + return pItem->Checked; +} +//--------------------------------------------------------------------------- +void AdjustBitmapFormat(Graphics::TBitmap *pBitmap) +{ + if( sys.m_UseB24 ){ + pBitmap->PixelFormat = pf24bit; + } + else { + if( sys.m_Palette ) pBitmap->PixelFormat = pf24bit; + } +} +//--------------------------------------------------------------------------- +Graphics::TBitmap *Bitmap24bit(Graphics::TBitmap *pBitmap) +{ + if( pBitmap->PixelFormat != pf24bit ){ + Graphics::TBitmap *pBmp = DupeBitmap(pBitmap, pf24bit); + delete pBitmap; + pBitmap = pBmp; + } + return pBitmap; +} +//--------------------------------------------------------------------------- +int SaveBitmap24(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + int r; + + if( pBitmap->PixelFormat != pf24bit ){ + Graphics::TBitmap *pBmp = DupeBitmap(pBitmap, pf24bit); + r = SaveBitmap(pBmp, pName); + delete pBmp; + } + else { + r = SaveBitmap(pBitmap, pName); + } + return r; +} +//--------------------------------------------------------------------------- +int SaveBitmap(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + CWaitCursor wait; + try { + pBitmap->SaveToFile(pName); + } + catch(...){ + ErrorFWrite(pName); + return FALSE; + } + return TRUE; +} +//--------------------------------------------------------------------------- +int LoadBitmap(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + if( pBitmap == NULL ) return FALSE; + + CWaitCursor wait; + try { + pBitmap->LoadFromFile(pName); + } + catch(...){ + ErrorMB( "Could not load from '%s'", pName ); + return FALSE; + } + return TRUE; +} +//--------------------------------------------------------------------- +void FillBitmap(Graphics::TBitmap *pBitmap, TColor col) +{ + TRect rc; + rc.Top = 0; + rc.Left = 0; + rc.Right = pBitmap->Width; + rc.Bottom = pBitmap->Height; + pBitmap->Canvas->Brush->Style = bsSolid; + pBitmap->Canvas->Brush->Color = col; + pBitmap->Canvas->FillRect(rc); +} +//--------------------------------------------------------------------------- +int SaveJPEG(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + CWaitCursor wait; + int r = TRUE; + int YW = pBitmap->Height; + int XW = pBitmap->Width; + + image_buffer = new BYTE[YW * XW * 3]; + image_height = YW; + image_width = XW; + int f24 = ((pBitmap->PixelFormat == pf24bit) && (pBitmap->Palette==NULL)) ? 1 : 0; + BYTE *bp = image_buffer; + int x, y; + if( f24 ){ + for( y = 0; y < YW; y++ ){ + BYTE *s = (BYTE *)pBitmap->ScanLine[y]; + for( x = 0; x < XW; x++ ){ + *bp++ = *(s + 2); + *bp++ = *(s + 1); + *bp++ = *s; + s += 3; + } + } + } + else { + COLD c; + for( y = 0; y < YW; y++ ){ + for( x = 0; x < XW; x++ ){ + c.c = pBitmap->Canvas->Pixels[x][y]; + *bp++ = c.b.r; + *bp++ = c.b.g; + *bp++ = c.b.b; + } + } + } + if( !write_JPEG_file(pName, sys.m_JPEGQuality) ){ + ErrorFWrite(pName); + r = FALSE; + } + delete image_buffer; + image_buffer = NULL; + return r; +} +//--------------------------------------------------------------------- +int SaveImage(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + LPCSTR pExt = GetEXT(pName); + if( !strcmpi(pExt, "BMP") ){ + return SaveBitmap24(pBitmap, pName); + } + else if( !strcmpi(pExt, "JPG") ){ + return SaveJPEG(pBitmap, pName); + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +static Graphics::TBitmap *pBitmapLoad; +static int JpegPlane; +void SetJPEGSize(int height, int width, int plane) +{ + if( pBitmapLoad == NULL ) return; + pBitmapLoad->Height = height; + pBitmapLoad->Width = width; + JpegPlane = plane; +} + +void SetJPEGImage(BYTE *p, int line) +{ + if( pBitmapLoad == NULL ) return; + if( !line ) return; + if( !(line & 0x007f) ) MultProcA(); + + int x; + + BYTE *t = (BYTE *)pBitmapLoad->ScanLine[line-1]; + if( JpegPlane == 1 ){ + for( x = 0; x < pBitmapLoad->Width; x++ ){ + *t++ = *p; + *t++ = *p; + *t++ = *p++; + } + } + else if( JpegPlane >= 3 ){ + for( x = 0; x < pBitmapLoad->Width; x++ ){ + *t++ = *(p+2); + *t++ = *(p+1); + *t++ = *p; + p+=3; + } + } +} +//--------------------------------------------------------------------------- +int LoadJPEG(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + if( pBitmap == NULL ) return FALSE; + + CWaitCursor wait; + pBitmapLoad = pBitmap; + pBitmapLoad->PixelFormat = pf24bit; + pBitmapLoad->Palette = NULL; + return read_JPEG_file(pName) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +int LoadWMF(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + if( pBitmap == NULL ) return FALSE; + + CWaitCursor wait; + + int r = FALSE; + TMetafile *pMeta = new TMetafile; + try { + pMeta->Enhanced = FALSE; + pMeta->LoadFromFile(pName); + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = pMeta->Width; + pBitmap->Height = pMeta->Height; + if( pMeta->Transparent ) FillBitmap(pBitmap, clBtnFace); + pBitmap->Canvas->Draw(0, 0, pMeta); + r = TRUE; + } + catch(...){ + ErrorMB( "Could not load from '%s'", pName ); + } + delete pMeta; + return r; +} +//--------------------------------------------------------------------- +int IsPic(LPCSTR pExt) +{ + return (!strcmpi(pExt, "BMP") || !strcmpi(pExt, "JPG") || !strcmpi(pExt, "WMF")); +} + +LPCSTR GetPicFilter(void) +{ + return MsgEng ? "Picture files(*.jpg;*.bmp;*.wmf)|*.jpg;*.bmp;*.wmf" : "画像ファイル(*.jpg;*.bmp;*.wmf)|*.jpg;*.bmp;*.wmf"; +} +LPCSTR GetTempMFilter(void) +{ + return MsgEng ? "Templates(*.mtm)|*.mtm" : "テンプレート(*.mtm)|*.mtm"; +} +LPCSTR GetTempIFilter(void) +{ + return MsgEng ? "Template items(*.mti)|*.mti" : "テンプレートアイテム(*.mti)|*.mti"; +} +LPCSTR GetTempFilter(void) +{ + return MsgEng ? "Templates(*.mtm)|*.mtm|Template items(*.mti)|*.mti" : "テンプレート(*.mtm)|*.mtm|テンプレートアイテム(*.mti)|*.mti"; +} +LPCSTR GetLibFilter(void) +{ + return MsgEng ? "Custom items(*.dll)|*.dll" : "カスタムアイテム(*.dll)|*.dll"; +} +//--------------------------------------------------------------------- +int LoadImage(Graphics::TBitmap *pBitmap, LPCSTR pName) +{ + LPCSTR pExt = GetEXT(pName); + if( !strcmpi(pExt, "BMP") ){ + return LoadBitmap(pBitmap, pName); + } + else if( !strcmpi(pExt, "JPG") ){ + return LoadJPEG(pBitmap, pName); + } + else if( !strcmpi(pExt, "WMF") ){ + return LoadWMF(pBitmap, pName); + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------- +void InitCustomColor(TColorDialog *tp) +{ + tp->CustomColors->Text = ""; +} +//--------------------------------------------------------------------- +void AddCustomColor(TColorDialog *tp, TColor col) +{ + char bf[256]; + + sprintf(bf, "Color%c=%06lX", tp->CustomColors->Count + 'A', DWORD(col) & 0x00ffffff); + tp->CustomColors->Add(bf); +} +///---------------------------------------------------------------- +HWND GetMBHandle(int &flag) +{ + HWND hd; + if( Screen->ActiveForm != NULL ){ + hd = Screen->ActiveForm->Handle; + } + else { + hd = NULL; + } + flag = MB_SETFOREGROUND; + flag |= MB_TOPMOST; + flag |= (hd == NULL) ? MB_TASKMODAL : MB_APPLMODAL; + return hd; +} +static int MsgBoxFlag = 0; +///---------------------------------------------------------------- +/// メッセージの表示 +/// +///---------------------------------------------------------------- +/// メッセージの表示 +/// +void InfoMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + SetDisPaint(); + flag |= (MB_OK | MB_ICONINFORMATION); +// Application->NormalizeTopMosts(); + ::MessageBox(hd, bf, "MMSSTV", flag); +// Application->RestoreTopMosts(); + ResDisPaint(); + MsgBoxFlag--; +} +///---------------------------------------------------------------- +/// エラーメッセージの表示 +/// +void ErrorMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + SetDisPaint(); + flag |= (MB_OK | MB_ICONEXCLAMATION); +// Application->NormalizeTopMosts(); + ::MessageBox(hd, bf, MsgEng ? "Error":"エラー", flag); +// Application->RestoreTopMosts(); + ResDisPaint(); + MsgBoxFlag--; +} + +///---------------------------------------------------------------- +/// 警告メッセージの表示 +/// +void WarningMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + SetDisPaint(); + flag |= (MB_OK | MB_ICONEXCLAMATION); +// Application->NormalizeTopMosts(); + ::MessageBox(hd, bf, MsgEng?"Warning":"警告", flag); +// Application->RestoreTopMosts(); + ResDisPaint(); + MsgBoxFlag--; +} + +///---------------------------------------------------------------- +/// 実行選択メッセージの表示 +/// +int YesNoMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return IDNO; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + SetDisPaint(); +// if( Screen->ActiveForm != NULL ) NormalWindow(Screen->ActiveForm); + flag |= (MB_YESNO | MB_ICONQUESTION); +// Application->NormalizeTopMosts(); + int r = ::MessageBox(hd, bf, "MMSSTV", flag); +// Application->RestoreTopMosts(); + ResDisPaint(); + MsgBoxFlag--; + return r; +} + +///---------------------------------------------------------------- +/// 実行選択メッセージの表示 +/// +int YesNoCancelMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return IDCANCEL; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + SetDisPaint(); + flag |= (MB_YESNOCANCEL | MB_ICONQUESTION); +// Application->NormalizeTopMosts(); + int r = ::MessageBox(hd, bf, "MMSSTV", flag); +// Application->RestoreTopMosts(); + ResDisPaint(); + MsgBoxFlag--; + return r; +} +///---------------------------------------------------------------- +/// 実行選択メッセージの表示 +/// +int OkCancelMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return IDCANCEL; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + SetDisPaint(); + flag |= (MB_OKCANCEL | MB_ICONQUESTION); +// Application->NormalizeTopMosts(); + int r = ::MessageBox(hd, bf, "MMSSTV", flag); +// Application->RestoreTopMosts(); + ResDisPaint(); + MsgBoxFlag--; + return r; +} +///---------------------------------------------------------------- +/// +void ErrorFWrite(LPCSTR pName) +{ + DWORD dw = ::GetFileAttributes(pName); + if( (dw != 0xffffffff) && (dw & FILE_ATTRIBUTE_READONLY) ){ + ErrorMB(MsgEng ? "'%s' is read-only (fail to update)." : "'%s'が 読み取り専用 に設定されているため更新に失敗しました.", pName); + } + else { + ErrorMB(MsgEng ? "Could not update '%s'" : "'%s' の更新に失敗しました.", pName ); + } +} +///---------------------------------------------------------------- +/// +int RemoveL2(LPSTR t, LPSTR ss, LPCSTR pKey, int size) +{ + char c; + int k; + LPCSTR pp; + LPSTR s; + const char _tt1[]="[{(「<"; + const char _tt2[]="]})」>"; + + int len = strlen(pKey); + char ac = ';'; + for( k = 0, s = ss; *s; s++ ){ + if( k ){ // 漢字2バイト目 + k = 0; + ac = 0x1e; + } + else if( _mbsbtype((const unsigned char *)s, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + if( (len >= 2) && (strchr(" ,./;:*\t[{(「<]})」>", ac)!=NULL) && (!strnicmp(s, pKey, len)) ){ + pp = s + len; + if( (pp = strchr(_tt1, *pp))!=NULL ){ + c = _tt2[pp - _tt1]; + if( *(s+len+1) ){ + StrDlmCpy(t, s+len+1, c, size); + if( *t ){ + strcpy((ac == ' ')?(s-1):s, s+len+2+strlen(t)); + return TRUE; + } + } + } + } + } + else if( (strchr(" ,./;:*\t\x1e[{(「<]})」>", ac)!=NULL) && (!strnicmp(s, pKey, len)) ){ + pp = s + len; + if( (pp = strchr(_tt1, *pp))!=NULL ){ + c = _tt2[pp - _tt1]; + if( *(s+len+1) ){ + StrDlmCpy(t, s+len+1, c, size); + if( *t ){ + strcpy((ac == ' ')?(s-1):s, s+len+2+strlen(t)); + return TRUE; + } + } + } + ac = *s; + } + else { + ac = *s; + } + } + return FALSE; +} + +void AddL2(LPSTR t, LPCSTR pKey, LPCSTR s, UCHAR c1, UCHAR c2, int size) +{ + if( *s ){ + int len = strlen(t); + int lenkey = strlen(pKey); + int lenData = strlen(s); + if( (len + lenkey + lenData + 2) < size ){ + t += len; + if( len ) *t++ = ' '; + if( *pKey ){ + strcpy(t, pKey); + t += lenkey; + } + *t++ = c1; + strcpy(t, s); + t += lenData; + *t++ = c2; + *t = 0; + } + } +} +///---------------------------------------------------------------- +/// 数字が含まれるかどうか調べる +/// +int IsNumbs(LPCSTR p) +{ + for( ; *p; p++ ){ + if( isdigit(*p) ) return 1; + } + return 0; +} +///---------------------------------------------------------------- +/// 数字が含まれるかどうか調べる +/// +int IsAlphas(LPCSTR p) +{ + for( ; *p; p++ ){ + if( isalpha(*p) ) return 1; + } + return 0; +} +///---------------------------------------------------------------- +/// RSTかどうか調べる +/// +int IsRST(LPCSTR p) +{ + if( strlen(p) < 3 ) return 0; + if( (*p < '1') || (*p > '5') ) return 0; + p++; + if( (*p < '1') || (*p > '9') ) return 0; + p++; + if( (*p < '1') || (*p > '9') ) return 0; + return 1; +} +///---------------------------------------------------------------- +int IsCallChar(char c) +{ + if( !isalpha(c) && !isdigit(c) && (c != '/') ) return 0; + if( islower(c) ) return 0; + return 1; +} +///---------------------------------------------------------------- +/// コールサインかどうか調べる +/// +int IsCall(LPCSTR p) +{ + int l = strlen(p); + if( l > 16 ) return 0; + if( l < 3 ) return 0; + if( isdigit(*p) ){ // 先頭が数字 + if( l <= 3 ) return 0; // 3文字以下の時NG + if( isdigit(*(p+1)) ) return 0; // 2文字目が数字の時NG + } + if( isdigit(LastC(p)) ){ // 最後が数字 + if( l <= 4 ) return 0; // 4文字以下の時NG +// if( !strchr(p, '/')==NULL ) return0; // /が含まれていない時NG +// if( p[l-2] != '/' ) return 0; // 最後の1つ前が/以外の時NG + } + int i; + for( i = 0; i < l-1; i++, p++ ){ + if( isdigit(*p) ) return 1; // 数字が含まれていればOK + } + return 0; +} +/*#$% +====================================================== + JAとDXの区別をする +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ + 1 : JA + 0 : DX (JD1 INCLUDEED) +------------------------------------------------------ +====================================================== +*/ +int IsJA(const char *s) +{ + if( (!memcmp(s, "8J1R", 4) && (strlen(s) == 5))||(strstr(s, "/JD1")!=NULL) ){ + return(0); + } + else if( strchr(s, '/') ){ + char bf[MLCALL+1]; + StrCopy(bf, s, MLCALL); + char *p; + char *t; + for( p = bf; *p; ){ + p = StrDlm(t, p, '/'); + if( *t ){ + if( (strlen(t) >= 2) && isdigit((unsigned char)LastC(t)) ){ + if( *t == 'J' ){ + t++; + if( *t == 'D' ) return(0); + if( (*t >= 'A')&&(*t <= 'S' ) ) return(1); + } + else if( *t == '7' ){ + t++; + if( (*t >= 'J')&&(*t <= 'N' ) ) return(1); + } + else if( *t == '8' ){ + t++; + if( (*t >= 'J')&&(*t <= 'N' ) ) return(1); + } + else { + return 0; + } + } + } + } + } + if( *s == 'J' ){ + s++; + if( *s == 'D' ) return(0); + if( (*s >= 'A')&&(*s <= 'S' ) ) return(1); + } + else if( *s == '7' ){ + s++; + if( (*s >= 'J')&&(*s <= 'N' ) ) return(1); + } + else if( *s == '8' ){ + s++; + if( (*s >= 'J')&&(*s <= 'N' ) ) return(1); + } + return(0); +} +/*#$% +====================================================== + コールサインをクリップする +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ + クリップコールのポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR ClipCall(LPCSTR s) +{ + static char bf[MLCALL+1]; + LPCSTR p1, p2; + + if( (p1=strchr(s, '/'))!=NULL ){ + if( (p2=strchr(p1+1, '/'))!=NULL ){ /* 3分割 */ + if( (int(strlen(p2+1)) < int((p2 - p1)+1)) || (!IsCall(p2+1)) ){ /* 最後より途中が長い */ + if( ((p2-p1) < (p1-s))||(!IsCall(p1+1)) ){ /* 途中より最初が長い */ + StrCopy(bf, s, MLCALL); + *strchr(bf, '/') = 0; + return(bf); + } + else { + strcpy(bf, p1+1); + *strchr(bf, '/') = 0; + return(bf); + } + } + else if( int(strlen(p2+1)) < int((p1 - s)+1) ){ /* 最後より最初が長い */ + StrCopy(bf, s, MLCALL); + *strchr(bf, '/') = 0; + return(bf); + } + else { + return(p2+1); + } + } + else { /* 2分割 */ + if( (int(strlen(p1+1)) < int((p1 - s)+1)) || (!IsCall(p1+1)) ){ + StrCopy(bf, s, MLCALL); + *strchr(bf, '/') = 0; + return(bf); + } + else { + return(p1+1); + } + } + } + else { + return(s); + } +} + +/*#$% +====================================================== + ポータブル表記を調べる +------------------------------------------------------ + p : コールサイン文字列のポインタ +------------------------------------------------------ + 数値のポインタ +------------------------------------------------------ +====================================================== +*/ +static LPSTR chkptb(LPSTR p) +{ + if( *p ){ + p = lastp(p); + if( isdigit(*p) && ((*(p-1))=='/') ){ + return(p); + } + } + return(NULL); +} + +/*#$% +====================================================== + ポータブル表記の入れ替え +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ +------------------------------------------------------ + 元の文字列を破壊する +====================================================== +*/ +void chgptb(LPSTR s) +{ + LPSTR p, t; + + if( (p = chkptb(s))!=NULL ){ + t = p; + for( p--; p > s; p-- ){ + if( isdigit(*p) ){ + *p = *t; + t--; + *t = 0; + break; + } + } + } +} + +/*#$% +====================================================== + コールサインからカントリの元をクリップする +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ + カントリのポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR ClipCC(LPCSTR s) +{ + static char bf[MLCALL+1]; + LPSTR p, t; + + StrCopy(bf, s, MLCALL); + chgptb(bf); /* ポータブル表記の入れ替え */ + for( p = bf; *p; ){ + if( *p ){ + p = StrDlm(t, p, '/'); + if( (strlen(t) > 1) && (isdigit(*t) || isdigit(LastC(t))) ) return(t); + } + } + for( p = bf; *p; ){ + if( *p ){ + p = StrDlm(t, p, '/'); + if( (strlen(t) > 1) && (*t!='Q') && strcmp(t, "MM") ) return(t); + } + } + return ClipCall(s); +} + +///---------------------------------------------------------------- +/// 文字列変換 +/// +void Yen2CrLf(AnsiString &ws, AnsiString cs) +{ + ws = ""; + LPCSTR p; + int f; + int dlm = 0; + + p = cs.c_str(); + if( *p == 0x22 ){ + p++; + dlm++; + } + for( f = 0; *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == '\\' ){ + switch(*(p+1)){ + case 'r': + ws += "\r"; + p++; + break; + case 'n': + ws += "\n"; + p++; + break; + case 't': + ws += "\t"; + p++; + break; + case '\\': + ws += "\\"; + p++; + break; + default: + p++; + ws += *p; + break; + } + } + else if( !dlm || (*p!=0x22) || *(p+1) ){ + ws += *p; + } + } +} + +void CrLf2Yen(AnsiString &ws, AnsiString cs) +{ + ws = "\x22"; + LPCSTR p; + int f = 0; + + for( p = cs.c_str(); *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == 0x0d ){ + ws += "\\r"; + } + else if( *p == 0x0a ){ + ws += "\\n"; + } + else if( *p == TAB ){ + ws += "\\t"; + } + else if( *p == '\\' ){ + ws += "\\\\"; + } + else { + ws += *p; + } + } + ws += "\x22"; +} + + +//--------------------------------------------------------------------------- +// コンボBOXに文字列を設定する +void SetComboBox(TComboBox *pCombo, LPCSTR pList) +{ + pCombo->Clear(); + LPSTR s = strdup(pList); + LPSTR p = s; + LPSTR t; + while(*p){ + p = StrDlm(t, p); + clipsp(t); + t = SkipSpace(t); + if( *t ) pCombo->Items->Add(t); + } + free(s); +} + +//--------------------------------------------------------------------------- +// コンボBOXに文字列を設定する +void GetComboBox(AnsiString &as, TComboBox *pCombo) +{ + as = ""; + int i; + for( i = 0; i < pCombo->Items->Count; i++ ){ + if( i ) as += ','; + as += pCombo->Items->Strings[i]; + } +} + +//--------------------------------------------------------------------------- +void ExecPB(LPCSTR pName) +{ + char bf[512]; + + MultProc(); + strcpy(bf, "mspaint.exe"); + if( pName != NULL ){ + sprintf(lastp(bf)+1, " \x22%s\x22", pName); + } + if( ::WinExec(bf, SW_SHOWDEFAULT) <= 31 ){ + strcpy(bf, "PBRUSH.EXE"); + if( pName != NULL ){ + sprintf(lastp(bf)+1, " \x22%s\x22", pName); + } + ::WinExec(bf, SW_SHOWDEFAULT); + } +} +//--------------------------------------------------------------------------- +int FontStyle2Code(TFontStyles style) +{ + int code = 0; + + TFontStyles fa; + TFontStyles fb; + + fa << fsBold; + fb << fsBold; + fa *= style; + if( fa == fb ) code |= FSBOLD; + + fa >> fsBold; + fb >> fsBold; + fa << fsItalic; + fb << fsItalic; + fa *= style; + if( fa == fb ) code |= FSITALIC; + + fa >> fsItalic; + fb >> fsItalic; + fa << fsUnderline; + fb << fsUnderline; + fa *= style; + if( fa == fb ) code |= FSUNDERLINE; + + fa >> fsUnderline; + fb >> fsUnderline; + fa << fsStrikeOut; + fb << fsStrikeOut; + fa *= style; + if( fa == fb ) code |= FSSTRIKEOUT; + + return code; +} + +TFontStyles Code2FontStyle(int code) +{ + TFontStyles fs; + + if( code & FSBOLD ) fs << fsBold; + if( code & FSITALIC ) fs << fsItalic; + if( code & FSUNDERLINE ) fs << fsUnderline; + if( code & FSSTRIKEOUT ) fs << fsStrikeOut; + return fs; +} + +//--------------------------------------------------------------------------- +void TopWindow(TForm *tp) +{ + if( tp->FormStyle == fsStayOnTop ){ + ::SetWindowPos(tp->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + } +} +void NormalWindow(TForm *tp) +{ + if( tp->FormStyle == fsStayOnTop ){ + ::SetWindowPos(tp->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + } +} +///--------------------------------------------------------- +/// テキスト文字列ストリーマー +int __fastcall CTextString::LoadText(LPSTR tp, int len) +{ + char c; + int n = 0; + if( !(*rp) ) return FALSE; + while(*rp){ + c = *rp++; + if( c == LF ){ + *tp = 0; + return TRUE; + } + else if( (c != CR)&&(c != 0x1a) ){ + if( n < (len-1) ){ + *tp++ = c; + n++; + } + } + } + *tp = 0; + return TRUE; +} +///---------------------------------------------------------------- +/// CAlignクラス +void CAlign::InitControl(TControl *p, TControl *pB, TFont *pF /*= NULL*/) +{ + tp = p; + OTop = p->Top; + OLeft = p->Left; + OWidth = p->Width; + OHeight = p->Height; + if( pF != NULL ){ + fp = pF; + OFontHeight = pF->Height; + } + + BTop = pB->Top; + BLeft = pB->Left; + BWidth = pB->ClientWidth; + BHeight = pB->ClientHeight; +} + +void CAlign::InitControl(TControl *p, RECT *rp, TFont *pF /*= NULL*/) +{ + tp = p; + OTop = p->Top; + OLeft = p->Left; + OWidth = p->Width; + OHeight = p->Height; + if( pF != NULL ){ + fp = pF; + OFontHeight = pF->Height; + } + + BTop = rp->top; + BLeft = rp->left; + BWidth = rp->right - rp->left + 1; + BHeight = rp->bottom - rp->top + 1; +} + +void CAlign::NewAlign(TControl *pB) +{ + double Sx = double(pB->ClientWidth)/double(BWidth); + double Sy = double(pB->ClientHeight)/double(BHeight); + tp->SetBounds(int(OLeft * Sx), int(OTop * Sy), int(OWidth * Sx), int(OHeight * Sy)); + if( fp != NULL ){ + if( Sx > Sy ) Sx = Sy; + fp->Height = int(OFontHeight * Sx) - sys.m_FontAdjSize; + m_FontAdj = Sx; + } + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } + else if( tp->ClassNameIs("TLabel") ){ + TLabel *lp = ((TLabel *)tp); + if( lp->Alignment == taRightJustify ){ + lp->AutoSize = FALSE; + lp->AutoSize = TRUE; + } + } +} + +void CAlign::NewAlign(TControl *pB, double hx) +{ + double Sx = double(pB->ClientWidth)/double(BWidth); + double Sy = double(pB->ClientHeight)/double(BHeight); + Sy *= hx; + tp->SetBounds(int(OLeft * Sx), int(OTop * Sy), int(OWidth * Sx), int(OHeight * Sy)); + if( fp != NULL ){ + if( Sx > Sy ) Sx = Sy; + fp->Height = int(OFontHeight * Sx) - sys.m_FontAdjSize; + m_FontAdj = Sx; + } + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } +} + +void CAlign::NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs) +{ + if( fp != NULL ){ + fp->Name = FontName; + fp->Charset = Charset; + fp->Style = fs; + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } + } +} + +void CAlign::NewFixAlign(TControl *pB, int XR) +{ + double Sx = double(pB->ClientWidth - XR) / double(BWidth - XR); + + tp->SetBounds(XR + (OLeft - XR) * Sx, OTop, OWidth * Sx, OHeight); + if( fp != NULL ){ + fp->Height = int(OFontHeight * (Sx < 1.0 ? Sx : 1.0)) - sys.m_FontAdjSize; + m_FontAdj = Sx; + } + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } +} + +void CAlign::Resume(void) +{ + if( tp != NULL ){ + tp->Top = OTop; + tp->Left = OLeft; + tp->Width = OWidth; + tp->Height = OHeight; + if( fp != NULL ){ + fp->Height = OFontHeight; + } + } +} +///---------------------------------------------------------------- +/// CAlignListクラス +CAlignList::CAlignList(void) +{ + Max = 0; + Cnt = 0; + AlignList = NULL; +} + +CAlignList::~CAlignList(){ + if( AlignList != NULL ){ + for( int i = 0; i < Cnt; i++ ){ + delete AlignList[i]; + } + delete AlignList; + AlignList = NULL; + } +} + +void CAlignList::Alloc(void) +{ + if( Cnt >= Max ){ + Max = Max ? Max * 2 : 16; + CAlign **np = (CAlign **)new BYTE[sizeof(CAlign*) * Max]; + if( AlignList != NULL ){ + for( int i = 0; i < Cnt; i++ ){ + np[i] = AlignList[i]; + } + delete AlignList; + } + AlignList = np; + } + AlignList[Cnt] = new CAlign; +} +void CAlignList::EntryControl(TControl *tp, TControl *pB, TFont *pF /*= NULL*/) +{ + Alloc(); + AlignList[Cnt]->InitControl(tp, pB, pF); + Cnt++; +} + +void CAlignList::EntryControl(TControl *tp, RECT *rp, TFont *pF /*= NULL*/){ + Alloc(); + AlignList[Cnt]->InitControl(tp, rp, pF); + Cnt++; +} + +void CAlignList::EntryControl(TControl *tp, int XW, int YW, TFont *pF /*= NULL*/){ + RECT rc; + rc.left = rc.top = 0; + rc.right = XW; rc.bottom = YW; + Alloc(); + AlignList[Cnt]->InitControl(tp, &rc, pF); + Cnt++; +} + +void CAlignList::NewAlign(TControl *pB) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + AlignList[i]->NewAlign(pB); + } +} + +double CAlignList::GetFontAdj(TControl *pB) +{ + for( int i = 0; i < Cnt; i++ ){ + if( AlignList[i]->GetControl() == pB ){ + return AlignList[i]->GetFontAdj(); + } + } + return 1.0; +} + +void CAlignList::NewAlign(TControl *pB, TControl *pS, double hx) +{ + for( int i = 0; i < Cnt; i++ ){ + if( AlignList[i]->GetControl() == pS ){ + AlignList[i]->NewAlign(pB, hx); + break; + } + } +} +void CAlignList::NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + AlignList[i]->NewFont(FontName, Charset, fs); + } +} + +void CAlignList::NewFixAlign(TControl *pB, int XR) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + AlignList[i]->NewFixAlign(pB, XR); + } +} + +void CAlignList::Resume(TControl *pB) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + if( pB == NULL ){ + AlignList[i]->Resume(); + } + else if( pB == AlignList[i]->GetControl() ){ + AlignList[i]->Resume(); + break; + } + } +} + +///---------------------------------------------------------------- +/// CAlignGridクラス +void CAlignGrid::InitGrid(TStringGrid *p) +{ + BWidth = p->Width; + BHeight = p->Height; + BRowHeight = p->DefaultRowHeight; + Max = p->ColCount; + bp = new int[Max]; + for( int i = 0; i < Max; i++ ){ + bp[i] = p->ColWidths[i]; + } +} + +void CAlignGrid::NewAlign(TStringGrid *p) +{ + double Sx = double(p->Width)/double(BWidth); + double Sy = double(p->Height)/double(BHeight); + p->DefaultRowHeight = int(BRowHeight * Sy); + for( int i = 0; (i < Max) && (i < p->ColCount); i++ ){ + p->ColWidths[i] = int(bp[i] * Sx); + } +} + + +///------------------------------------------------------ +/// +///CWebRef クラス +/// +void MakeCommand(LPSTR t, LPCSTR s, LPCSTR p) +{ + for( ;*s; s++ ){ + if( *s == '%' ){ + s++; + if( *s == '%' ){ + *t++ = '%'; + } + else if( (p != NULL) && (*s == '1') ){ + strcpy(t, p); + t += strlen(t); + p = NULL; + } + } + else { + *t++ = *s; + } + } + *t = 0; + if( p != NULL ){ + *t++ = ' '; + strcpy(t, p); + } +} + +CWebRef::CWebRef() +{ + HTML = ""; + + HKEY hkey=NULL; /* オープン キーのハンドル */ + + char bf[512], name[512]; + ULONG namelen, len; + if( !RegOpenKeyEx(HKEY_CLASSES_ROOT, "http", 0, KEY_READ, &hkey) ){ + if( !RegOpenKeyEx(hkey, "shell", 0, KEY_READ, &hkey) ){ + if( !RegOpenKeyEx(hkey, "open", 0, KEY_READ, &hkey) ){ + if( !RegOpenKeyEx(hkey, "command", 0, KEY_READ, &hkey) ){ + namelen = sizeof(name); + len = sizeof(bf); + if( !::RegEnumValue(hkey, 0, name, &namelen, NULL, + NULL, (LPBYTE)bf, &len) ){ + HTML = bf; + } + } + } + } + } + ::RegCloseKey(hkey); +} + +void CWebRef::ShowHTML(LPCSTR url) +{ + char cmd[1024]; + MakeCommand(cmd, HTML.c_str(), url); + ::WinExec(cmd, SW_SHOWDEFAULT); +} + + +///------------------------------------------------------ +/// +///CWaitCursor クラス +/// +CWaitCursor::CWaitCursor() +{ + sv = Screen->Cursor; + Screen->Cursor = crHourGlass; +} + +CWaitCursor::~CWaitCursor() +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Delete(void) +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Wait(void) +{ + Screen->Cursor = crHourGlass; +} + +///------------------------------------------------------- +/// CRecentMenuクラス + +CRecentMenu::CRecentMenu() +{ + InsPos = 0; + Max = RECMENUMAX; + int i; + for( i = 0; i < RECMENUMAX; i++ ){ + Caption[i] = ""; + Items[i] = NULL; + } + Items[i] = NULL; +} +void CRecentMenu::Init(int pos, TMenuItem *pmenu, int max) +{ + InsPos = pos; + pMenu = pmenu; + Max = max; +} +void CRecentMenu::Init(TMenuItem *pi, TMenuItem *pmenu, int max) +{ + Init(pmenu->IndexOf(pi), pmenu, max); +} +int CRecentMenu::GetCount(void) +{ + int i, n; + for( i = n = 0; i < RECMENUMAX; i++, n++ ){ + if( Caption[i].IsEmpty() ) break; + } + return n; +} +LPCSTR CRecentMenu::GetItemText(int n) +{ + if( (n >= 0) && (n < RECMENUMAX) ){ + return Caption[n].c_str(); + } + else { + return NULL; + } +} +void CRecentMenu::SetItemText(int n, LPCSTR p) +{ + if( (n >= 0) && (n < RECMENUMAX) ){ + Caption[n] = p; + } +} +int CRecentMenu::IsAdd(LPCSTR pNew) +{ + return strcmp(Caption[0].c_str(), pNew); +} +void CRecentMenu::Add(LPCSTR pNew) +{ + if( !IsAdd(pNew) ) return; + int i; + for( i = 1; i < RECMENUMAX; i++ ){ + if( !strcmp(pNew, Caption[i].c_str()) ){ + for( ; i < (RECMENUMAX - 1); i++ ){ + Caption[i] = Caption[i+1]; + } + Caption[i] = ""; + break; + } + } + for( i = RECMENUMAX - 1; i > 0; i-- ){ + Caption[i] = Caption[i-1]; + } + Caption[0] = pNew; +} +void CRecentMenu::Delete(LPCSTR pName) +{ + int i; + for( i = 0; i < RECMENUMAX; i++ ){ + if( !strcmp(pName, Caption[i].c_str()) ){ + for( ; i < (RECMENUMAX - 1); i++ ){ + Caption[i] = Caption[i+1]; + } + Caption[i] = ""; + break; + } + } +} +void CRecentMenu::ExtFilter(LPCSTR pExt) +{ + int i, j; + + for( i = 0; i < RECMENUMAX; i++ ){ + if( (!Caption[i].IsEmpty()) && strcmpi(GetEXT(Caption[i].c_str()), pExt) ){ + for( j = i; j < (RECMENUMAX - 1); j++ ){ + Caption[j] = Caption[j+1]; + } + Caption[j] = ""; + i--; + } + } +} +void CRecentMenu::Clear(void) +{ + Delete(); + for( int i = 0; i < RECMENUMAX; i++ ){ + Caption[i] = ""; + } +} +void CRecentMenu::Insert(TObject *op, Classes::TNotifyEvent pEvent) +{ + int n = GetCount(); + int i; + int pos = InsPos; + if( n > Max ) n = Max; + char bf[256]; + for( i = 0; i < n; i++, pos++ ){ + Items[i] = new TMenuItem((TComponent *)op); + sprintf(bf, "&%d %s", (i + 1) % 10, Caption[i].c_str()); + Items[i]->Caption = bf; + Items[i]->OnClick = pEvent; + pMenu->Insert(pos, Items[i]); + } + if( n ){ + Items[i] = new TMenuItem((TComponent *)op); + Items[i]->Caption = "-"; + Items[i]->OnClick = NULL; + pMenu->Insert(pos, Items[n]); + } +} +void CRecentMenu::Delete(void) +{ + for( int i = 0; i < RECMENUMAX+1; i++ ){ + if( Items[i] != NULL ){ + pMenu->Delete(InsPos); + Items[i] = NULL; + } + } +} +int CRecentMenu::FindItem(TMenuItem *mp) +{ + for( int i = 0; i < RECMENUMAX; i++ ){ + if( Items[i] == mp ){ + return i; + } + } + return -1; +} +LPCSTR CRecentMenu::FindItemText(TMenuItem *mp) +{ + return GetItemText(FindItem(mp)); +} + +///------------------------------------------------------- +/// CBitmapHistクラス +int CBitmapHist::Open(void) +{ + Close(); + char bf[256]; + sprintf(bf, "%s"HISTNAME, HistDir); + FILE *fp = fopen(bf, "rb"); + if( fp == NULL ){ + if( (fp = fopen(bf, "wb"))!=NULL ){ + m_Head.m_Max = sys.m_HistMax; + fwrite(&m_Head, 1, sizeof(m_Head), fp); + fwrite(&m_File, 1, sizeof(m_File), fp); + fclose(fp); + m_FileName = bf; + return TRUE; + } + else { + ErrorFWrite(bf); + return FALSE; + } + } + else { + fread(&m_Head, 1, sizeof(m_Head), fp); + fread(&m_File, 1, sizeof(m_File), fp); + fclose(fp); + m_FileName = bf; + ChangeMax(sys.m_HistMax); + return TRUE; + } +} +void CBitmapHist::Close(void) +{ + if( !m_FileName.IsEmpty() ){ + if( !OverWrite() ){ + ErrorFWrite(m_FileName.c_str()); + } + m_FileName = ""; + } +} + +int CBitmapHist::OverWrite(void) +{ + int r = FALSE; + if( !m_FileName.IsEmpty() ){ + FILE *fp; + if( (fp = fopen(m_FileName.c_str(), "wb"))!=NULL ){ + fwrite(&m_Head, 1, sizeof(m_Head), fp); + fwrite(&m_File, 1, sizeof(m_File), fp); + fclose(fp); + r = TRUE; + } + } + return r; +} + +void CBitmapHist::ChangeMax(int max) +{ + if( m_Head.m_Max == max ) return; + + CWaitCursor wait; + int i, s, t; + HEADFH sFile[HISTMAX]; + memset(sFile, 0, sizeof(sFile)); + char sname[256]; + char tname[256]; + s = m_Head.m_wPnt - 1; + t = max - 1; + for( i = 0; i < m_Head.m_Cnt; i++, s--, t-- ){ + if( s < 0 ) s += m_Head.m_Max; + if( t < 0 ) t += max; + sprintf(sname, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, s + 1); + sprintf(tname, m_UseJPEG ? "%sHist%d.$pg" : "%sHist%d.$mp", HistDir, t + 1); + if( i >= max ){ + unlink(sname); + } + else { + rename(sname, tname); + sFile[t] = m_File[s]; + } + } + t = max - 1; + for( i = 0; i < max; i++, t-- ){ + if( t < 0 ) t += max; + sprintf(sname, m_UseJPEG ? "%sHist%d.$pg" : "%sHist%d.$mp", HistDir, t + 1); + sprintf(tname, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, t + 1); + rename(sname, tname); + } + memcpy(m_File, sFile, sizeof(m_File)); + if( m_Head.m_Cnt >= max ) m_Head.m_Cnt = max; + m_Head.m_wPnt = 0; + m_Head.m_Max = max; +} + +int CBitmapHist::Read(Graphics::TBitmap *pBitmap, int slot) +{ + char bf[256]; + sprintf(bf, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, slot + 1); + + int r = FALSE; + FILE *fp; + if( (fp = fopen(bf, "rb"))!=NULL ){ + fclose(fp); + m_CurRead = slot; + if( m_UseJPEG ){ + LoadJPEG(pBitmap, bf); + } + else { + LoadBitmap(pBitmap, bf); + } + r = TRUE; + } + else { + FillBitmap(pBitmap, clWhite); + } + return r; +} + +void CBitmapHist::Write(Graphics::TBitmap *pBitmap, int slot) +{ + char bf[256]; + sprintf(bf, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, slot + 1); + + try { + if( m_UseJPEG ){ + SaveJPEG(pBitmap, bf); + } + else { + pBitmap->SaveToFile(bf); + } + m_File[slot].m_Flag |= 1; + } + catch(...){ + ErrorFWrite(bf); + } +} + +void CBitmapHist::Add(Graphics::TBitmap *pBitmap, SYSTEMTIME *pTime, int mode) +{ + m_CurRead = m_Head.m_wPnt; + memcpy(&m_File[m_Head.m_wPnt].m_UTC, pTime, sizeof(SYSTEMTIME)); + mode++; + m_File[m_Head.m_wPnt].m_Flag = mode << 16; + Write(pBitmap, m_Head.m_wPnt); + m_Head.m_wPnt++; + if( m_Head.m_wPnt >= m_Head.m_Max ){ + m_Head.m_wPnt = 0; + } + if( m_Head.m_Cnt < m_Head.m_Max ){ + m_Head.m_Cnt++; + } + m_CurAdd = 1; + OverWrite(); +} + +void CBitmapHist::Update(Graphics::TBitmap *pBitmap) +{ + int n = m_Head.m_wPnt - 1; + if( n < 0 ) n += m_Head.m_Max; + Write(pBitmap, n); +} + +//--------------------------------------------------------------------------- +void CBitmapHist::Delete(int n) +{ + if( !m_Head.m_Cnt ) return; + + CWaitCursor wait; + char tname[256]; + char sname[256]; + int max = m_Head.m_Cnt - n - 1; // Copy count + int i, s, t; + t = m_Head.m_wPnt - n - 1; + if( t < 0 ) t += m_Head.m_Max; + if( m_Head.m_Cnt == 1 ){ + sprintf(tname, "%sHist%d.bmp", HistDir, t + 1); + unlink(tname); + m_Head.m_Cnt--; + memset(&m_File[t], 0, sizeof(HEADFH)); + return; + } + for( i = 0; i < max; i++ ){ + s = t - 1; + if( s < 0 ) s += m_Head.m_Max; + sprintf(sname, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, s + 1); + sprintf(tname, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, t + 1); + if( !i ){ + unlink(tname); + } + MoveFile(sname, tname); + m_File[t] = m_File[s]; + t--; + if( t < 0 ) t = m_Head.m_Max - 1; + } + memset(&m_File[t], 0, sizeof(HEADFH)); + m_Head.m_Cnt--; +} + +//--------------------------------------------------------------------------- +void CBitmapHist::DeleteAll(void) +{ + if( !m_Head.m_Cnt ) return; + + CWaitCursor wait; + char tname[256]; + char sname[256]; + for( int i = 0; i < m_Head.m_Max; i++ ){ + sprintf(sname, "%sHist%d.bmp", HistDir, i + 1); + sprintf(tname, "%sHist%d.jpg", HistDir, i + 1); + unlink(sname); + unlink(tname); + } + memset(&m_File, 0, sizeof(m_File)); + m_Head.m_Cnt = 0; + m_Head.m_wPnt = 0; + m_CurAdd = 0; + m_CurRead = 0; +} + +//--------------------------------------------------------------------------- +void CBitmapHist::MoveDir(LPCSTR pNewDir) +{ + if( !strcmp(pNewDir, HistDir) ) return; + + CWaitCursor wait; + char tname[256]; + char sname[256]; + sprintf(tname, "%s"HISTNAME, pNewDir); + FILE *fp = fopen(tname, "wb"); + if( fp == NULL ){ + strcpy(sname, pNewDir); + if( *lastp(sname) == '\\' ) *lastp(sname) = 0; + mkdir(sname); + fp = fopen(tname, "wb"); + } + if( fp == NULL ){ + ErrorMB( MsgEng ? "'%s' does not exsit" : "フォルダ '%s' が存在しません", pNewDir ); + return; + } + else { + fclose(fp); + } + Close(); + sprintf(sname, "%s"HISTNAME, HistDir); + if( CopyFile(sname, tname, FALSE) == FALSE ){ + if( YesNoMB( MsgEng ? "Fail to copy the files. Memory to change to the folder?" : "ファイルのコピーに失敗しました. このフォルダへの変更を記憶しますか?" ) == IDYES ){ + strcpy(HistDir, pNewDir); + } + Open(); + return; + } + unlink(sname); + int i; + for( i = 0; i < m_Head.m_Max; i++ ){ + sprintf(sname, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, i + 1); + sprintf(tname, m_UseJPEG ? "%sHist%d.jpg" : "%sHist%d.bmp", pNewDir, i + 1); + CopyFile(sname, tname, FALSE); + unlink(sname); + } + if( *lastp(HistDir) == '\\' ) *lastp(HistDir) = 0; + _rmdir(HistDir); + strcpy(HistDir, pNewDir); + Open(); +} + +//--------------------------------------------------------------------------- +void CBitmapHist::ChangeFormat(int sw) +{ + if( m_UseJPEG == sw ) return; + if( !m_Head.m_Cnt ){ + m_UseJPEG = sw; + return; + } + CWaitCursor wait; + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + + FILE *fp; + char tname[256]; + char sname[256]; + int i; + for( i = 0; i < m_Head.m_Max; i++ ){ + sprintf(sname, sw ? "%sHist%d.bmp" : "%sHist%d.jpg", HistDir, i + 1); + sprintf(tname, sw ? "%sHist%d.jpg" : "%sHist%d.bmp", HistDir, i + 1); + if( (fp = fopen(sname, "rb")) != NULL ){ + fclose(fp); + if( sw ){ + LoadBitmap(pBitmap, sname); + SaveJPEG(pBitmap, tname); + } + else { + LoadJPEG(pBitmap, sname); + SaveBitmap(pBitmap, tname); + } + unlink(sname); + } + } + delete pBitmap; + m_UseJPEG = sw; +} +///------------------------------------------------------- +/// CExecPBクラス +//--------------------------------------------------------------------------- +HWND __fastcall IsPB(void) +{ + return FindWindow("MSPaintApp", NULL); +} +//--------------------------------------------------------------------------- +void __fastcall QuitPB(BOOL fWait) +{ + HWND hWndA = NULL; + while(1){ + HWND hWnd = IsPB(); + if( (hWnd != NULL) && (hWnd != hWndA) ){ + hWndA = hWnd; + ::PostMessage(hWnd, WM_QUIT, 0, 0); + if( fWait ){ + for( int i = 0; i < 30; i++ ){ + ::Sleep(100); + MultProc(); + if( IsPB() != hWnd ) break; + } + } + else { + break; + } + } + else { + break; + } + } +} + +//--------------------------------------------------------------------------- +__fastcall CExecPB::CExecPB() +{ + m_Flag = FALSE; + m_hWndMsg = NULL; + m_dwCount = 0; +} + +//--------------------------------------------------------------------------- +__fastcall CExecPB::~CExecPB() +{ + Cancel(); +} + +//--------------------------------------------------------------------------- +BOOL __fastcall CExecPB::Timer(void) +{ + if( !m_Flag ) return TRUE; + + if( (m_dwCount & 1) && !IsPB() ){ + m_Flag = FALSE; + if( m_hWndMsg && m_uMsg ){ + ::PostMessage(m_hWndMsg, m_uMsg, 0, m_dwID); + } + return TRUE; + } + m_dwCount++; + return FALSE; +} +//--------------------------------------------------------------------------- +BOOL __fastcall CExecPB::Exec(LPCSTR pName, HWND hWnd, UINT uMsg, DWORD dwID) +{ + CWaitCursor w; + + m_Flag = FALSE; + QuitPB(TRUE); + + m_Name = pName; + WIN32_FIND_DATA FileData; + HANDLE hFind = ::FindFirstFile(pName, &FileData); + if( hFind ) ::FindClose(hFind); + m_nFileSizeLow = FileData.nFileSizeLow; + m_ftLastWriteTime = FileData.ftLastWriteTime; + + m_hWndMsg = hWnd; + m_uMsg = uMsg; + m_dwID = dwID; + + ExecPB(pName); + for( int i = 0; i < 100; i++ ){ + ::Sleep(100); + if( IsPB() ){ + m_Flag = TRUE; + return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------------- +BOOL __fastcall CExecPB::Exec(Graphics::TBitmap *pBitmap, HWND hWnd, UINT uMsg, DWORD dwID) +{ + char name[256]; + sprintf(name, "%sTemp$.bmp", BgnDir); + try { + pBitmap->SaveToFile(name); + return Exec(name, hWnd, uMsg, dwID); + } + catch(...){ + return FALSE; + } +} +//--------------------------------------------------------------------------- +BOOL __fastcall CExecPB::IsChanged(void) +{ + WIN32_FIND_DATA FileData; + HANDLE hFind = ::FindFirstFile(m_Name.c_str(), &FileData); + if( !hFind ) return FALSE; + ::FindClose(hFind); + + if( FileData.nFileSizeLow != m_nFileSizeLow ) return TRUE; + return memcmp(&FileData.ftLastWriteTime, &m_ftLastWriteTime, sizeof(FILETIME)); +} +//--------------------------------------------------------------------------- +BOOL __fastcall CExecPB::LoadBitmap(Graphics::TBitmap *pBitmap, BOOL sw) +{ + BOOL r = FALSE; + + if( IsChanged() ){ +#if 1 + TPicRectDlg *pBox = new TPicRectDlg(Mmsstv); + try + { + pBox->pBitmap->LoadFromFile(m_Name); + if( sw ){ + ::CopyBitmap(pBitmap, pBox->pBitmap); + r = TRUE; + } + else if( pBox->Copy(pBitmap) == TRUE ){ + r = TRUE; + } + } + catch (...) + { + } + delete pBox; +#else + Graphics::TBitmap *pBmp = new Graphics::TBitmap; + try { + pBmp->LoadFromFile(m_Name); + if( sw ){ + ::CopyBitmap(pBitmap, pBmp); + } + else { + ::StretchCopyBitmapHW(pBitmap, pBmp); + } + r = TRUE; + } + catch(...){ + } + delete pBmp; +#endif + } + ::DeleteFile(m_Name.c_str()); + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CExecPB::Cancel(void) +{ + if( m_Flag ){ + m_Flag = FALSE; + QuitPB(FALSE); + } +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CreateBitmap(int xw, int yw, int fmt) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + if( fmt == -1 ){ + AdjustBitmapFormat(pBitmap); + } + else { + pBitmap->PixelFormat = TPixelFormat(fmt); + } + pBitmap->Width = xw; + pBitmap->Height = yw; + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall StretchCopyBitmap(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc) +{ + if( (pTer->Width != pSrc->Width)||(pTer->Height != pSrc->Height) ){ + Graphics::TBitmap *pbmp = pTer; + if( pTer->PixelFormat != pf24bit ){ + pbmp = CreateBitmap(pTer->Width, pTer->Height, pf24bit); + } + pbmp->Palette = NULL; + StretchCopy(pbmp, NULL, pSrc, NULL); + if( pbmp != pTer ){ + pTer->Palette = NULL; + pTer->Canvas->Draw(0, 0, pbmp); + delete pbmp; + } + } + else { + pTer->Palette = NULL; + pTer->Canvas->Draw(0, 0, pSrc); + } +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspect(int &sx, int &sy, int bx, int by) +{ + double ass = double(sx) / double(sy); + double asb = double(bx) / double(by); + if( asb < ass ){ // ソースの方が横長 + sx = (double(sy) * asb) + 0.5; + } + else { + sy = (double(sx) / asb) + 0.5; + } +} +//--------------------------------------------------------------------------- +//アスペクト比を保持する +void __fastcall KeepAspectDraw(TCanvas *tp, int sx, int sy, Graphics::TBitmap *pBitmap) +{ + KeepAspect(sx, sy, pBitmap->Width, pBitmap->Height); + TRect tc; + tc.Left = 0; tc.Top = 0; + tc.Right = sx; tc.Bottom = sy; + int Sop = ::SetStretchBltMode(tp->Handle, HALFTONE); + tp->StretchDraw(tc, pBitmap); + ::SetStretchBltMode(tp->Handle, Sop); +} +//--------------------------------------------------------------------------- +//アスペクト比を保持して最大範囲を伸縮コピーする +void __fastcall StretchCopyBitmapHW(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc) +{ + if( (pTer->Width != pSrc->Width)||(pTer->Height != pSrc->Height) ){ + Graphics::TBitmap *pbmp = pTer; + if( pTer->PixelFormat != pf24bit ){ + pbmp = CreateBitmap(pTer->Width, pTer->Height, pf24bit); + } + TRect sc; + sc.Left = 0; sc.Top = 0; + double ass = double(pSrc->Width) / double(pSrc->Height); + double ast = double(pTer->Width) / double(pTer->Height); + if( ast < ass ){ // ソースの方が横長 + sc.Bottom = pSrc->Height; + sc.Right = double(pSrc->Height) * ast; + } + else { + sc.Right = pSrc->Width; + sc.Bottom = double(pSrc->Width) / ast; + } + int w; + if( sc.Right < pSrc->Width ){ + w = (pSrc->Width - sc.Right) / 2; + sc.Left += w; + sc.Right += w; + } + if( sc.Bottom < pSrc->Height ){ + w = (pSrc->Height - sc.Bottom) / 2; + sc.Top += w; + sc.Bottom += w; + } + if( sc.Right >= pSrc->Width + 1 ) sc.Right = pSrc->Width; + if( sc.Bottom >= pSrc->Height + 1 ) sc.Bottom = pSrc->Height; + pbmp->Palette = NULL; + StretchCopy(pbmp, NULL, pSrc, &sc); + if( pbmp != pTer ){ + pTer->Palette = NULL; + pTer->Canvas->Draw(0, 0, pbmp); + delete pbmp; + } + } + else { + pTer->Palette = NULL; + pTer->Canvas->Draw(0, 0, pSrc); + } +} +//--------------------------------------------------------------------------- +Graphics::TBitmap *__fastcall DupeBitmap(Graphics::TBitmap *pSrc, int fmt) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + if( fmt == -1 ){ + AdjustBitmapFormat(pBitmap); + } + else { + pBitmap->PixelFormat = TPixelFormat(fmt); + } + pBitmap->Height = pSrc->Height; + pBitmap->Width = pSrc->Width; + pBitmap->Palette = NULL; + pBitmap->Canvas->Draw(0, 0, pSrc); + return pBitmap; +} +//--------------------------------------------------------------------------- +Graphics::TBitmap *__fastcall RemakeBitmap(Graphics::TBitmap *pBitmap, int fmt) +{ + int w, h; + if( pBitmap != NULL ){ + w = pBitmap->Width; + h = pBitmap->Height; + delete pBitmap; + } + else { + w = 320; + h = 256; + } + pBitmap = CreateBitmap(w, h, fmt); + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall CopyBitmap(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc) +{ + if( (pTer->Width != pSrc->Width)||(pTer->Height != pSrc->Height) ){ + pTer->Width = pSrc->Width; + pTer->Height = pSrc->Height; + } + pTer->Palette = NULL; + pTer->Canvas->Draw(0, 0, pSrc); +} +//--------------------------------------------------------------------------- +// APIの伸縮コピー +void __fastcall StretchCopy(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc, int mode) +{ + TRect rc; + rc.Left = 0; rc.Top = 0; + rc.Right = pTer->Width; + rc.Bottom = pTer->Height; + int Sop = ::SetStretchBltMode(pTer->Canvas->Handle, mode); //ja7ude 0521 + pTer->Palette = NULL; + pTer->Canvas->StretchDraw(rc, pSrc); + ::SetStretchBltMode(pTer->Canvas->Handle, Sop); //ja7ude 0521 +} +//--------------------------------------------------------------------------- +// 高度な伸縮コピー +void __fastcall StretchCopy(Graphics::TBitmap *pBitmap, TRect *tc, Graphics::TBitmap *pbmp, TRect *rp) +{ + if( pBitmap == NULL ) return; + CWaitCursor wait; + + Graphics::TBitmap *psrc; + + if( pbmp->PixelFormat != pf24bit ){ + psrc = DupeBitmap(pbmp, pf24bit); + } + else { + psrc = pbmp; + } +// DecBitmap(pBitmap, tc, psrc, rp); + int top = 0; + int left = 0; + int w = pBitmap->Width; + int h = pBitmap->Height; + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = w; + pBitmap->Height = h; + if( tc != NULL ){ + w = tc->Right - tc->Left; + h = tc->Bottom - tc->Top; + left = tc->Left; + top = tc->Top; + } + + double zy; + double zx; + int sw, sh; + int xss, yss, xoff, yoff; + if( rp != NULL ){ + sh = rp->Bottom - rp->Top; + sw = rp->Right - rp->Left; + yoff = rp->Top; + xoff = rp->Left; + } + else { + sh = psrc->Height; + sw = psrc->Width; + yoff = xoff = 0; + } + xss = sw / 2; + yss = sh / 2; + zy = double(h)/double(sh); + zx = double(w)/double(sw); + + if( (sw > w) && (sh > h) ){ + MultProc(); + TRect RC, TC; + if( tc != NULL ){ + TC = *tc; + } + else { + TC.Left = 0; TC.Right = pBitmap->Width; + TC.Top = 0; TC.Bottom = pBitmap->Height; + } + if( rp != NULL ){ + RC = *rp; + } + else { + RC.Left = 0; RC.Top = 0; + RC.Right = pbmp->Width; RC.Bottom = pbmp->Height; + } + int Sop = ::SetStretchBltMode(pBitmap->Canvas->Handle, HALFTONE); + pBitmap->Palette = NULL; + pBitmap->Canvas->CopyRect(TC, pbmp->Canvas, RC); + ::SetStretchBltMode(pBitmap->Canvas->Handle, Sop); + if( psrc != pbmp ) delete psrc; + return; + } + + MultProc(); + int xs = w / 2; + int ys = h / 2; + int i, j, m, n; + int r, g, b; + double x, y, p, q, pp, qq; + BYTE *tp, *ssp1, *ssp2, *sp1, *sp2; + for( i = -ys; i < ys; i++ ){ + tp = (BYTE *)pBitmap->ScanLine[i+ys+top]; + if( left ) tp += left * 3; + y = double(i)/zy; + if( y > 0 ){ + m = int(y); + } + else { + m = int(y-1); + } + q = y - double(m); + if( int(q) == 1 ){ + q = 0; m++; + } + qq = 1.0 - q; + if( m < -yss ) m = -yss; + if( (m + yss + 1) >= psrc->Height ) m = psrc->Height - yss - 1; + ssp1 = (BYTE *)psrc->ScanLine[yoff + m + yss]; + ssp2 = (BYTE *)psrc->ScanLine[yoff + m + 1 + yss]; + if( (m + yss + 1) >= psrc->Height ) ssp2 = ssp1; + if( xoff ) ssp1 += xoff * 3; + if( xoff ) ssp2 += xoff * 3; + for( j = -xs; j < xs; j++ ){ + x = double(j)/zx; + if( x > 0 ){ + n = int(x); + } + else { + n = int(x-1); + } + p = x - double(n); + if( int(p) == 1 ){ + p = 0; n++; + } + if( n < -xss ) n = -xss; + if( (n + xss + 1) >= psrc->Width ) n = psrc->Width - xss - 1; + + sp1 = ssp1 + (n + xss) * 3; + sp2 = ssp2 + (n + xss) * 3; + pp = 1.0 - p; + if( (n + xss + 1) >= psrc->Width ){ + r = (int)(qq*(pp*(*sp1)) + + q * (pp*(*sp2)) ); + sp1++; sp2++; + g = (int)(qq*(pp*(*sp1)) + + q * (pp*(*sp2)) ); + sp1++; sp2++; + b = (int)(qq*(pp*(*sp1)) + + q * (pp*(*sp2)) ); + } + else { + r = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + sp1++; sp2++; + g = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + sp1++; sp2++; + b = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); + } + LimitRGB(r, g, b); + *tp++ = BYTE(r); + *tp++ = BYTE(g); + *tp++ = BYTE(b); + } + MultProc(); + } + if( psrc != pbmp ) delete psrc; +} +//--------------------------------------------------------------------------- +void __fastcall SetGroupEnabled(TGroupBox *gp) +{ + int enb = gp->Enabled; + TControl *tp; + int i; + for( i = 0; i < gp->ControlCount; i++ ){ + tp = gp->Controls[i]; + if( tp != NULL ){ + tp->Enabled = enb; + if( tp->ClassNameIs("TGroupBox") ){ + SetGroupEnabled((TGroupBox *)tp); + } + } + } + gp->Font->Color = gp->Enabled ? clBlack : clGrayText; + for( i = 0; i < gp->ControlCount; i++ ){ + tp = gp->Controls[i]; + if( tp != NULL ){ + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } + } + } +} +//--------------------------------------------------------------------------- +int __fastcall Limit256(int d) +{ + if( d < 0 ) d = 0; + if( d > 255 ) d = 255; + return d; +} +//--------------------------------------------------------------------------- +void __fastcall LimitRGB(int &R, int &G, int &B) +{ + R = Limit256(R); + G = Limit256(G); + B = Limit256(B); +} +//--------------------------------------------------------------------------- +void __fastcall YCtoRGB(int &R, int &G, int &B, int Y, int RY, int BY) +{ + Y = Y - 16; + R = 1.164457*Y + 1.596128*RY; + G = 1.164457*Y - 0.813022*RY - 0.391786*BY; + B = 1.164457*Y + 2.017364*BY; + LimitRGB(R, G, B); +} +//--------------------------------------------------------------------------- +TColor __fastcall YCtoTColor(int Y, int RY, int BY) +{ + int R, G, B; + YCtoRGB(R, G, B, Y, RY, BY); + return TColor((B << 16) + (G << 8) + R); +} +//--------------------------------------------------------------------------- +int __fastcall ColorToFreq(int d) +{ + d = d * (2300 - 1500) / 256; + return d + 1500; +} +//--------------------------------------------------------------------------- +int __fastcall ColorToFreqNarrow(int d) +{ + d = d * NARROW_BW / 256; + return d + NARROW_LOW; +} +//--------------------------------------------------------------------------- +void __fastcall MultProc(void) +{ + Mmsstv->MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall MultProcA(void) +{ + if( Mmsstv->pSound->IsBusy() ) Mmsstv->MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap) +{ + if( (pBox->Height >= 256) && ((pBitmap->Width != pBox->Width)||(pBitmap->Height != pBox->Height)) ){ + TRect rc; + rc.Left = 0; rc.Right = pBox->Width; + rc.Top = 0; rc.Bottom = pBox->Height; + int Sop = ::SetStretchBltMode(pBox->Canvas->Handle, HALFTONE); + pBox->Canvas->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(pBox->Canvas->Handle, Sop); + } + else { + pBox->Canvas->Draw(0, 0, pBitmap); + } +} +//--------------------------------------------------------------------------- +void __fastcall ReSizeBitmap(Graphics::TBitmap *pBitmap, int w, int h) +{ + if( (pBitmap->Width != w) || (pBitmap->Height != h) ){ + Graphics::TBitmap *pbmp = CreateBitmap(w, h, pf24bit); + ::StretchCopy(pbmp, NULL, pBitmap, NULL); + pBitmap->Width = w; + pBitmap->Height = h; + pBitmap->Canvas->Draw(0, 0, pbmp); + delete pbmp; + } +} +//--------------------------------------------------------------------------- +// メディアンフィルタ +static int _cmp(const void *s, const void *t) +{ + return *((BYTE *)s) - *((BYTE *)t); +} +Graphics::TBitmap *__fastcall MFilter(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc, int sw) +{ + CWaitCursor wait; + Graphics::TBitmap *pBitmapS; + if( pSrc->PixelFormat != pf24bit ){ + pBitmapS = DupeBitmap(pSrc, pf24bit); + } + else { + pBitmapS = pSrc; + } + int XW = pBitmapS->Width; + int YW = pBitmapS->Height; + if( pTer == NULL ){ + pTer = new Graphics::TBitmap(); + } + pTer->PixelFormat = pf24bit; + pTer->Width = XW; + pTer->Height = YW; + + + MultProc(); + BYTE *bp = new BYTE[XW * YW * 3]; + int x, y; + BYTE *tp = bp; + BYTE *sp; + for( y = 0; y < YW; y++ ){ + sp = (BYTE*)pBitmapS->ScanLine[y]; + for( x = 0; x < XW; x++ ){ + *tp++ = *sp++; + *tp++ = *sp++; + *tp++ = *sp++; + } + } + int xw = XW * 3; // 960 + int xwm = (XW - 1) * 3; + BYTE List[9]; + if( sw ){ + for( y = 1; y < (YW - 1); y++ ){ + sp = &bp[y*xw+3]; + tp = (BYTE*)pTer->ScanLine[y] + 3; + for( x = 1; x < xwm; x++, sp++, tp++ ){ + List[0] = *sp; + List[1] = *(sp+3); + List[2] = *(sp-3); + List[3] = *(sp-xw); + List[4] = *(sp-xw+3); + List[5] = *(sp-xw-3); + List[6] = *(sp+xw); + List[7] = *(sp+xw+3); + List[8] = *(sp+xw-3); + qsort(List, 9, 1, _cmp); +// *tp = List[5]; + *tp = List[4]; + } + MultProcA(); + } + } + else { + for( y = 1; y < (YW - 1); y++ ){ + sp = &bp[y*xw+3]; + tp = (BYTE*)pTer->ScanLine[y] + 3; + for( x = 1; x < xwm; x++, sp++, tp++ ){ + List[0] = *sp; + List[1] = *(sp+3); + List[2] = *(sp-3); + List[3] = *(sp-xw); + List[4] = *(sp+xw); + qsort(List, 5, 1, _cmp); +// *tp = List[3]; + *tp = List[2]; + } + MultProcA(); + } + } + MultProc(); + delete bp; + if( pSrc != pBitmapS ) delete pBitmapS; + return pTer; +} + +void __fastcall CopyAutoSize(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc) +{ + if( (pSrc->Width == pTer->Width) && ((pSrc->Height == 240)||(pSrc->Height == 480)) ){ + switch(sys.m_Way240){ + case 0: + StretchCopyBitmap(pTer, pSrc); + break; + case 1: + StretchCopyBitmapHW(pTer, pSrc); + break; + case 2: + FillBitmap(pTer, sys.m_PicClipColor); + pTer->Canvas->Draw(0, 0, pSrc); + break; + default: + FillBitmap(pTer, sys.m_PicClipColor); + pTer->Canvas->Draw(0, 16, pSrc); + break; + } + } + else { + StretchCopyBitmapHW(pTer, pSrc); + } +} +//--------------------------------------------------------------------------- +void __fastcall GetRY(int &Y, int &RY, int &BY, TColor col) +{ + BYTE *p = (BYTE *)&col; + double R = *p++; + double G = *p++; + double B = *p; +#if 0 + Y = 16.0 + (.003906 * ((65.738 * R) + (129.057 * G) + (25.064 * B))); + RY = 128.0 + (.003906 * ((112.439 * R) + (-94.154 * G) + (-18.285 * B))); + BY = 128.0 + (.003906 * ((-37.945 * R) + (-74.494 * G) + (112.439 * B))); +#else + Y = 16.0 + (0.256773*R + 0.504097*G + 0.097900*B); + RY = 128.0 + (0.439187*R - 0.367766*G - 0.071421*B); + BY = 128.0 + (-0.148213*R - 0.290974*G + 0.439187*B); +#endif + LimitRGB(Y, RY, BY); +} +//--------------------------------------------------------------------------- +void __fastcall DownColor(Graphics::TBitmap *pbmp, TColor bcol, int lm) +{ + CWaitCursor w; + + int lm2 = lm * 3; + int SY, SR, SB; + int TY, TR, TB; + TColor tcol; + GetRY(SY, SR, SB, bcol); + int x, y; + for( y = 0; y < pbmp->Height; y++ ){ + MultProc(); + for( x = 0; x < pbmp->Width; x++ ){ + tcol = pbmp->Canvas->Pixels[x][y]; + if( bcol != tcol ){ + GetRY(TY, TR, TB, tcol); + if( (ABS(SY - TY) <= lm2)&& + (ABS(SR - TR) <= lm)&& + (ABS(SB - TB) <= lm) + ){ + pbmp->Canvas->Pixels[x][y] = bcol; + } + } + } + } +} +//--------------------------------------------------------------------------- +void KeyEvent(const short *p) +{ + for( ; *p; p++ ){ + keybd_event(BYTE(*p), 0, *p&0x8000 ? KEYEVENTF_KEYUP : 0, 0); + MultProc(); + } +} +//--------------------------------------------------------------------------- +void __fastcall SetThumbnailSize(TRect &rc, int sw) +{ + switch(sw){ + case 0: + rc.Right = 50; + rc.Bottom = 40; + break; + case 1: + rc.Right = 64; + rc.Bottom = 51; + break; + case 2: + rc.Right = 80; + rc.Bottom = 64; + break; + default: + rc.Right = 100; + rc.Bottom = 80; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall NormalRect(long *x1, long *y1, long *x2, long *y2) //ja7ude 0521 +{ + if( *x1 > *x2 ){ + int d = *x1; + *x1 = *x2; + *x2 = d; + } + if( *y1 > *y2 ){ + int d = *y1; + *y1 = *y2; + *y2 = d; + } +} +void __fastcall NormalRect(int &x1, int &y1, int &x2, int &y2) //ja7ude 0521 +{ + if( x1 > x2 ){ + int d = x1; + x1 = x2; + x2 = d; + } + if( y1 > y2 ){ + int d = y1; + y1 = y2; + y2 = d; + } +} +//--------------------------------------------------------------------------- +void __fastcall NormalRect(TRect *rc) +{ + NormalRect(&(rc->Left), &(rc->Top), &(rc->Right), &(rc->Bottom)); //ja7ude 0521 +} +//--------------------------------------------------------------------------- +int __fastcall GetActiveIndex(TPageControl *pp) +{ + int i; + for( i = 0; i < pp->PageCount; i++ ){ + if( pp->ActivePage == pp->Pages[i] ) return i; + } + return 0; +} +//--------------------------------------------------------------------------- +void __fastcall SetMBCP(void) +{ + _setmbcp(_MB_CP_ANSI); +} +//--------------------------------------------------------------------------- +static int CodeErr = 0; +//--------------------------------------------------------------------------- +void __fastcall ClearCodeErr(void) +{ + CodeErr = 0; +} +//--------------------------------------------------------------------------- +void __fastcall SetMBCP(BYTE charset) +{ + UINT cp; + switch(charset){ + case SHIFTJIS_CHARSET: + cp = 932; + break; + case HANGEUL_CHARSET: + cp = 949; + break; + case CHINESEBIG5_CHARSET: // + cp = 950; + break; + case 134: // 簡略 + cp = 936; + break; + default: + cp = _MB_CP_ANSI; + break; + } + if( cp != _MB_CP_ANSI ){ + CPINFO info; + if( GetCPInfo(cp, &info) != TRUE ){ + if( !CodeErr ){ + CodeErr++; + InfoMB("CodePage %d is not supported on your PC.", cp); + } + cp = _MB_CP_ANSI; + } + } + _setmbcp(cp); +} +//--------------------------------------------------------------------------- +void __fastcall MoveParent(TWinControl *pNew, TWinControl *pOld, TWinControl *pCtr) +{ + pOld->RemoveControl(pCtr); + pNew->InsertControl(pCtr); + pCtr->Parent = pNew; +} +//--------------------------------------------------------------------------- +BYTE __fastcall InvFontCharset(BYTE charset) +{ + BYTE cset; + UINT cp = ::GetACP(); + switch(cp){ + case 932: + cset = SHIFTJIS_CHARSET; + break; + case 949: + cset = HANGEUL_CHARSET; + break; + case 950: + cset = CHINESEBIG5_CHARSET; + break; + case 936: + cset = 134; // 簡略 + break; + default: + cset = DEFAULT_CHARSET; + break; + } + return BYTE((charset != ANSI_CHARSET) ? ANSI_CHARSET : cset); +} +//--------------------------------------------------------------------------- +void __fastcall InvFontCharset(TFont *pFont) +{ + pFont->Charset = InvFontCharset(pFont->Charset); +} +//--------------------------------------------------------------------------- + + diff --git a/ComLib.h b/ComLib.h new file mode 100644 index 0000000..1d89b85 --- /dev/null +++ b/ComLib.h @@ -0,0 +1,801 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +#ifndef ComLibH +#define ComLibH +#include +#include //JA7UDE 0428 +#include +#include +#include +#include +#include +#include +#include + +#define DEBUG FALSE +#define DEBUGFSKID FALSE +#define VARITEST FALSE +#define SHOWAFCFQ FALSE + +#if DEBUG +#include +#define ASSERT(c) assert(c) +#else +#define ASSERT(c) +#endif + +/* +1.12 JASTAコンテスト 重複チェックの修正 +*/ +#define VERBETA "A" +#define VERID "Ver 1.13" +#define VERTTL2 "MMSSTV "VERID VERBETA +#define VERTTL VERTTL2" (C) JE3HHT 2001-2010." + +#define CLOCKMAX 48500 +#define FPAGEMAX 10 // フォルダのサムネイルのページ数 +#define CWMENUMAX 128 + +#define HISTNAME "History.bin" +#define TEMPV105 "CurTemp.bin" // V1.05までの名前 +#define TEMPV105B "CurTemp.old" +#define TEMPV106C "Current.mtm" // V1.06からの名前 +#define TEMPV106L "List.mtm" // V1.06からの名前 +//#define SHIFTL 10 +//#define MARKL 300 +//#define SPACEH 2700 + +#define FSBOLD 1 +#define FSITALIC 2 +#define FSUNDERLINE 4 +#define FSSTRIKEOUT 8 + +enum { + pgSync, + pgRX, + pgHist, + pgTX, + pgTemp, +}; + +extern LCID lcid; // ロケール情報 +extern int DisPaint; +extern int MsgEng; +extern int WinNT; +extern int WinVista; + +extern double SampFreq; // サンプリング周波数 +extern double SampBase; +extern int SampType; +extern int SampSize; +extern int DemOver; +extern const int SampTable[]; + +extern double FFTSamp; +extern int FFTSampType; +extern int FFT_SIZE; + +extern char BgnDir[256]; + +extern char HistDir[256]; +extern char StockDir[256]; +extern char BitmapDir[256]; +extern char SBitmapDir[256]; +extern char TemplateDir[256]; + +extern char MMLogDir[256]; +extern char ExtLogDir[256]; +extern char RecDir[256]; // 録音ファイルのディレクトリ + +//extern HPALETTE UsrPal; + +extern AnsiString JanHelp; + +extern const char MONN[]; +extern const char MONU[]; + +#ifndef LPCUSTR +typedef const unsigned char * LPCUSTR; +typedef unsigned char * LPUSTR; +#endif + +extern DWORD ColorTable[128]; + +#pragma option -a- // パックの指示 +typedef union { + struct { + BYTE r; + BYTE g; + BYTE b; + BYTE d; + }b; + TColor c; + DWORD d; +}COLD; +#pragma option -a. // パック解除の指示 + +#define ABS(c) (((c)<0)?(-(c)):(c)) +#define AN(p) (int)(sizeof(p)/sizeof(*(p))) +#define CR 0x0d +#define LF 0x0a +#define TAB '\t' + +typedef struct { + AnsiString Name; + double VCOGain; + int loopOrder; + double loopFC; + int OutOrder; + double OutFC; + + int Type; + int crossType; + double crossSmooz; + int crossOutOrder; + double crossOutFC; + + double DemOff; + double DemWhite; + double DemBlack; + int DemCalibration; + double Dem17[17]; + + int Differentiator; + double DiffLevel; +}PRODEM; + +typedef struct { + AnsiString m_Name; + BYTE m_Charset; + int m_Height; + DWORD m_Style; +}FONTDATA; + +//#define MSGLISTMAX 64 +typedef struct { + int m_Priority; + + int m_SoundPriority; + AnsiString m_SoundDevice; + int m_SoundStereo; + int m_StereoTX; + AnsiString m_SoundMMW; + + AnsiString m_Call; + + int m_FontAdjSize; + int m_WindowState; + + int m_ExtMode[8]; + AnsiString m_ExtCmd[8]; + AnsiString m_ExtName[8]; + + AnsiString m_TxRxName; + int m_TxRxLock; + int m_RTSonRX; + + int m_lmsbpf; + int m_echo; + + int m_AutoTimeOffset; + int m_TimeOffset; + int m_TimeOffsetMin; + int m_LogLink; + + AnsiString m_LogName; + + int m_SoundFifoRX; + int m_SoundFifoTX; + + int m_Palette; + int m_BitPixel; + + TColor m_ColorLow; + TColor m_ColorHigh; + TColor m_ColorFFTB; + TColor m_ColorFFT; + TColor m_ColorFFTStg; + TColor m_ColorFFTSync; + TColor m_ColorFFTFreq; + + AnsiString m_WinFontName; + BYTE m_WinFontCharset; + int m_WinFontStyle; + + int m_FFTType; + int m_FFTGain; + int m_FFTResp; + int m_FFTStg; + int m_FFTWidth; + int m_FFTAGC; + int m_FFTPriority; + double m_SampFreq; + double m_TxSampOff; + + int m_StayOnTop; + int m_MemWindow; + + int m_HelpNotePad; + int m_TuneTXTime; + int m_TuneSat; + + int m_TestDem; + double m_DemOff; + double m_DemWhite; + double m_DemBlack; + int m_DemCalibration; + double m_Dem17[17]; + + int m_PicClipType; + int m_PicClipRatio; + int m_PicClipMode; + int m_PicClipView; + TColor m_PicClipColor; + int m_HistMax; + + int m_Way240; + int m_AutoMargin; + + int m_UseRxBuff; + int m_AutoStop; + int m_AutoSync; + int m_CWID; + int m_CWIDFreq; + AnsiString m_CWIDText; + int m_CWIDSpeed; + int m_CWIDWPM; + AnsiString m_MMVID; + AnsiString m_CWText; + + int m_nCWMenu; + AnsiString m_CWMenu[CWMENUMAX]; + + int m_VOX; + AnsiString m_VOXSound; + + int m_TXFSKID; + + int m_UseJPEG; + int m_JPEGQuality; + + int m_RxViewTop; + int m_RxViewLeft; + int m_RxViewWidth; + int m_RxViewHeight; + + int m_SyncViewTop; + int m_SyncViewLeft; + int m_SyncViewWidth; + int m_SyncViewHeight; + + int m_HistViewTB; + int m_HistViewTop; + int m_HistViewLeft; + int m_HistViewWidth; + int m_HistViewHeight; + int m_HistViewSize; + + int m_PreViewTop; + int m_PreViewLeft; + int m_PreViewWidth; + int m_PreViewHeight; + + int m_CtrBtnTop; + int m_CtrBtnLeft; + int m_CtrBtnWidth; + int m_CtrBtnHeight; + + int m_FileViewFlag[8]; + int m_FileViewSize[8]; + int m_FileViewMode[8]; + int m_FileViewTop[8]; + int m_FileViewLeft[8]; + int m_FileViewWidth[8]; + int m_FileViewHeight[8]; + int m_FileViewMaxPage[8]; + int m_FileViewCurPage[8]; + int m_FileViewFMPage[8][FPAGEMAX]; + AnsiString m_FileViewFolder[8][FPAGEMAX]; + AnsiString m_FileViewName[8][10]; + int m_FileViewKeep; + int m_FileViewShowSize; + + int m_DivMode; + int m_StockViewTop; + int m_StockViewLeft; + int m_StockViewWidth; + int m_StockViewHeight; + + int m_WaterViewTop; + int m_WaterViewLeft; + int m_WaterViewWidth; + int m_WaterViewHeight; + + int m_LogViewTop; + int m_LogViewLeft; + int m_LogViewWidth; + int m_LogViewHeight; + + TColor m_ColText[6]; + TColor m_ColBar[4]; + AnsiString m_AutoSaveDir; + TColor m_ColorSet[32]; + + int m_FixedTxMode; + AnsiString m_TextList[16]; + + int m_TextGrade; + int m_TextShadow; + int m_TextZero; + int m_TextRot; + int m_TextVert; + int m_TextVertH; + int m_TextStack; + + int m_PicShape; + int m_PicAdjust; + int m_PicLineStyle; + TColor m_PicLineColor; + + int m_PicSelRTM; + int m_PicSelSmooz; + TColor m_PicSelCurCol; + + int m_Sharp2D; + int m_Differentiator; + double m_DiffLevelP; + double m_DiffLevelM; + + TColor m_ColorRXB; + int m_HDDSize; + + int m_ShowSizeRX; + int m_ShowSizeHist; + int m_ShowSizeTX; + int m_ShowSizeTemp; + int m_ShowSizeStock; + + int m_Repeater; + int m_RepSenseLvl; // トーン検出感度 + AnsiString m_RepAnsCW; + int m_RepTimeA; // トーン検出時間 + int m_RepTimeB; // トーン検出からAnsCW出力までの時間 + int m_RepTimeC; // 受信待機のタイムアウト + int m_RepTimeD; // リプレイ送信の遅延時間 + + int m_RepBeacon; + int m_RepBeaconMode; + AnsiString m_RepTempTX; + AnsiString m_RepTempBeacon; + int m_RepBottomAdj; + int m_RepQuietnessTime; + int m_RepBeaconFilter; + AnsiString m_RepFolder; + + int m_UseB24; + AnsiString m_Msg; + int m_DisFontSmooth; + + int m_TempDelay; + FONTDATA m_RegFont[4]; + + int m_Temp24; + + int m_MaskUserPage; + TColor m_MaskCol1; + TColor m_MaskCol2; + + int m_bCQ100; +}SYSSET; + +extern SYSSET sys; + +///--------------------------------------------------------- +/// テキスト文字列ストリーマー +class CTextString +{ +private: + LPCSTR rp; +public: + inline __fastcall CTextString(LPCSTR p){ + rp = p; + }; + inline __fastcall CTextString(AnsiString &As){ + rp = As.c_str(); + }; + int __fastcall LoadText(LPSTR tp, int len); +}; +///--------------------------------------------------------- +/// コントロールのアラインの管理クラス +class CAlign +{ +private: + int BTop, BLeft; + int BWidth, BHeight; + int OTop, OLeft; + int OWidth, OHeight; + int OFontHeight; + double m_FontAdj; + + TControl *tp; + TFont *fp; +public: + inline CAlign(void){ + tp = NULL; + fp = NULL; + m_FontAdj = 1.0; + }; + inline ~CAlign(){ + }; + void InitControl(TControl *p, TControl *pB, TFont *pF = NULL); + void InitControl(TControl *p, RECT *rp, TFont *pF = NULL); + void NewAlign(TControl *pB); + inline double GetFontAdj(void){return fabs(m_FontAdj);}; + inline TControl *GetControl(void){return tp;}; + void NewAlign(TControl *pB, double hx); + void NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs); + void NewFixAlign(TControl *pB, int XR); + void Resume(void); +}; + +///--------------------------------------------------------- +/// コントロールのアラインの管理クラス +class CAlignList +{ +private: + int Max; + int Cnt; + CAlign **AlignList; + void Alloc(void); +public: + CAlignList(void); + ~CAlignList(); + void EntryControl(TControl *tp, TControl *pB, TFont *pF = NULL); + void EntryControl(TControl *tp, RECT *rp, TFont *pF = NULL); + void EntryControl(TControl *tp, int XW, int YW, TFont *pF = NULL); + void NewAlign(TControl *pB); + double GetFontAdj(TControl *pB); + void NewAlign(TControl *pB, TControl *pS, double hx); + void NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs); + void NewFixAlign(TControl *pB, int XR); + void Resume(TControl *pB); +}; + +class CAlignGrid +{ +private: + int BWidth; + int BHeight; + int BRowHeight; + + int Max; + int *bp; +public: + inline CAlignGrid(void){ + Max = 0; + bp = NULL; + }; + inline ~CAlignGrid(){ + if( bp != NULL ){ + delete bp; + } + }; + void InitGrid(TStringGrid *p); + void NewAlign(TStringGrid *p); +}; + +class CWebRef +{ +private: + AnsiString HTML; +public: + CWebRef(); + inline bool IsHTML(void){ + return !HTML.IsEmpty(); + }; + void ShowHTML(LPCSTR url); +}; + +class CWaitCursor +{ +private: + TCursor sv; +public: + CWaitCursor(); + ~CWaitCursor(); + void Delete(void); + void Wait(void); +}; + +///------------------------------------------------------- +/// CRecentMenuクラス +#define RECMENUMAX 4 // 処理できる最大の数 +class CRecentMenu +{ +private: +public: + int InsPos; // メニュー挿入位置の番号 + int Max; // 処理する数 + AnsiString Caption[RECMENUMAX]; + TMenuItem *pMenu; + TMenuItem *Items[RECMENUMAX+1]; + +public: + CRecentMenu(); + void Init(int pos, TMenuItem *pmenu, int max); + void Init(TMenuItem *pi, TMenuItem *pmenu, int max); + int GetCount(void); + LPCSTR GetItemText(int n); + void SetItemText(int n, LPCSTR p); + int IsAdd(LPCSTR pNew); + void Add(LPCSTR pNew); + void ExtFilter(LPCSTR pExt); + void Clear(void); + void Insert(TObject *op, Classes::TNotifyEvent pEvent); + void Delete(void); + void Delete(LPCSTR pName); + int FindItem(TMenuItem *mp); + LPCSTR FindItemText(TMenuItem *mp); +}; + +///------------------------------------------------------- +/// CBitmapHistクラス +#define HISTMAX 256 +typedef struct { + int m_Ver; + int m_Max; + int m_Cnt; + int m_wPnt; +}HEADBH; +typedef struct { + int m_Flag; + SYSTEMTIME m_UTC; +}HEADFH; +class CBitmapHist +{ +public: + HEADBH m_Head; + HEADFH m_File[256]; + AnsiString m_FileName; + int m_CurAdd; + int m_CurRead; + int m_UseJPEG; +private: + +public: + CBitmapHist(){ + m_CurAdd = 0; + m_CurRead = 0; + m_FileName = ""; + m_UseJPEG = 0; + + m_Head.m_Ver = 0; + m_Head.m_Max = 64; + m_Head.m_Cnt = 0; + m_Head.m_wPnt = 0; + }; + ~CBitmapHist(){ + Close(); + }; + int Open(void); + void Close(void); + int OverWrite(void); + int Read(Graphics::TBitmap *pBitmap, int slot); + void Write(Graphics::TBitmap *pBitmap, int slot); + void Add(Graphics::TBitmap *pBitmap, SYSTEMTIME *pTime, int mode); + void ClearAddFlag(void){m_CurAdd = 0;}; + void Update(Graphics::TBitmap *pBitmap); + int IsAddFlag(void){return m_CurAdd;}; + void ChangeMax(int max); + void MoveDir(LPCSTR pNewDir); + void Delete(int n); + void DeleteAll(void); + void ChangeFormat(int sw); +}; + +///------------------------------------------------------- +/// CExecPBクラス +class CExecPB +{ +private: + int m_Flag; + DWORD m_dwCount; + DWORD m_dwID; // ID値 + UINT m_uMsg; // メッセージ値 + HWND m_hWndMsg; // メッセージの送信先 + + AnsiString m_Name; + DWORD m_nFileSizeLow; + FILETIME m_ftLastWriteTime; +public: + __fastcall CExecPB(); + __fastcall ~CExecPB(); + + BOOL __fastcall Timer(void); + void __fastcall Cancel(void); + BOOL __fastcall Exec(LPCSTR pName, HWND hWnd, UINT uMsg, DWORD nID); + BOOL __fastcall Exec(Graphics::TBitmap *pBitmap, HWND hWnd, UINT uMsg, DWORD nID); + BOOL __fastcall IsChanged(void); + BOOL __fastcall LoadBitmap(Graphics::TBitmap *pBitmap, BOOL sw); +}; + +void __fastcall SetDisPaint(void); +void __fastcall ResDisPaint(void); + +void ShowHelp(int index); +void InitSampType(void); +double NormalSampFreq(double d, double m); +int IsFile(LPCSTR pName); + +void GetUTC(SYSTEMTIME *tp); +void GetLocal(SYSTEMTIME *tp); +LPSTR StrDupe(LPCSTR s); + +void InitColorTable(TColor cl, TColor ch); +LPCSTR GetKeyName(WORD Key); +WORD GetKeyCode(LPCSTR pName); +LPCSTR ToDXKey(LPCSTR s); +LPCSTR ToJAKey(LPCSTR s); + +//int InputMB(LPCSTR pMsg, LPCSTR pTitle, AnsiString &as); + +int SetTBValue(double d, double dmax, int imax); +double GetTBValue(int d, double dmax, int imax); +LPUSTR jstrupr(LPUSTR s); +inline LPSTR jstrupr(LPSTR s){return (LPSTR)jstrupr(LPUSTR(s));}; + +int SetTimeOffsetInfo(int &Hour, int &Min); +WORD AdjustRolTimeUTC(WORD tim, char c); +void FormCenter(TForm *tp, int XW, int YW); +char *lastp(char *p); +char *clipsp(char *s); +LPCSTR _strdmcpy(LPSTR t, LPCSTR p, char c); +const char *StrDlmCpy(char *t, const char *p, char Dlm, int len); +const char *StrDlmCpyK(char *t, const char *p, char Dlm, int len); +void StrCopy(LPSTR t, LPCSTR s, int n); +char LastC(LPCSTR p); +LPCSTR GetEXT(LPCSTR Fname); +void SetEXT(LPSTR pName, LPSTR pExt); +BOOL __fastcall CheckEXT(LPCSTR pName, LPCSTR pExt); +void SetCurDir(LPSTR t, int size); +void SetDirName(LPSTR t, LPCSTR pName); +LPCSTR StrDbl(double d); +LPCSTR StrDblE(double d); +double ReadDoubleIniFile(TMemIniFile *p, LPCSTR c1, LPCSTR c2, double d); +void WriteDoubleIniFile(TMemIniFile *p, LPCSTR c1, LPCSTR c2, double d); +void ClipLF(LPSTR sp); +void DeleteComment(LPSTR bf); +LPSTR FillSpace(LPSTR s, int n); +LPSTR SkipSpace(LPSTR sp); +LPCSTR SkipSpace(LPCSTR sp); +LPSTR StrDlm(LPSTR &t, LPSTR p); +LPSTR StrDlm(LPSTR &t, LPSTR p, char c); +void ChgString(LPSTR t, char a, char b); +void DelChar(LPSTR t, char a); +int atoin(const char *p, int n); +int htoin(const char *p, int n); +BOOL __fastcall ATOI(int &d, LPCSTR s); + +int InvMenu(TMenuItem *pItem); +void AdjustBitmapFormat(Graphics::TBitmap *pBitmap); +Graphics::TBitmap *Bitmap24bit(Graphics::TBitmap *pBitmap); +int LoadBitmap(Graphics::TBitmap *pBitmap, LPCSTR pName); +int SaveBitmap24(Graphics::TBitmap *pBitmap, LPCSTR pName); +int SaveBitmap(Graphics::TBitmap *pBitmap, LPCSTR pName); +void FillBitmap(Graphics::TBitmap *pBitmap, TColor col); +int SaveJPEG(Graphics::TBitmap *pBitmap, LPCSTR pName); +int LoadJPEG(Graphics::TBitmap *pBitmap, LPCSTR pName); +int IsPic(LPCSTR pExt); +LPCSTR GetPicFilter(void); +LPCSTR GetTempFilter(void); +LPCSTR GetTempMFilter(void); +LPCSTR GetTempIFilter(void); +LPCSTR GetLibFilter(void); +int LoadImage(Graphics::TBitmap *pBitmap, LPCSTR pName); +int SaveImage(Graphics::TBitmap *pBitmap, LPCSTR pName); + +void InitCustomColor(TColorDialog *tp); +void AddCustomColor(TColorDialog *tp, TColor col); + +void InfoMB(LPCSTR fmt, ...); +void ErrorMB(LPCSTR fmt, ...); +void WarningMB(LPCSTR fmt, ...); +int YesNoMB(LPCSTR fmt, ...); +int YesNoCancelMB(LPCSTR fmt, ...); +int OkCancelMB(LPCSTR fmt, ...); +void ErrorFWrite(LPCSTR pName); + +int RemoveL2(LPSTR t, LPSTR ss, LPCSTR pKey, int size); +void AddL2(LPSTR t, LPCSTR pKey, LPCSTR s, UCHAR c1, UCHAR c2, int size); + +void Yen2CrLf(AnsiString &ws, AnsiString cs); +void CrLf2Yen(AnsiString &ws, AnsiString cs); + +void SetComboBox(TComboBox *pCombo, LPCSTR pList); +void GetComboBox(AnsiString &as, TComboBox *pCombo); +void ExecPB(LPCSTR pName); + +int IsNumbs(LPCSTR p); +int IsAlphas(LPCSTR p); +int IsRST(LPCSTR p); +int IsCallChar(char c); +int IsCall(LPCSTR p); +int IsJA(const char *s); +LPCSTR ClipCall(LPCSTR s); +LPCSTR ClipCC(LPCSTR s); + +/* JA7UDE 0428 +inline LPUSTR StrDlm(LPUSTR &t, LPUSTR p, char c){return (LPUSTR)StrDlm(LPSTR(t), LPSTR(p), c);}; +inline LPUSTR StrDlm(LPUSTR &t, LPUSTR p){return (LPUSTR)StrDlm(LPSTR(t), LPSTR(p));}; +inline LPUSTR StrDlm(LPUSTR &t, LPSTR p, char c){return (LPUSTR)StrDlm(LPSTR(t), p, c);}; +inline LPUSTR StrDlm(LPUSTR &t, LPSTR p){return (LPUSTR)StrDlm(LPSTR(t), p);}; +*/ + +void TopWindow(TForm *tp); +void NormalWindow(TForm *tp); + +int FontStyle2Code(TFontStyles style); +TFontStyles Code2FontStyle(int code); + +void __fastcall KeepAspect(int &sx, int &sy, int bx, int by); +void __fastcall KeepAspectDraw(TCanvas *tp, int sx, int sy, Graphics::TBitmap *pBitmap); +Graphics::TBitmap *__fastcall DupeBitmap(Graphics::TBitmap *pSrc, int fmt); +Graphics::TBitmap *__fastcall RemakeBitmap(Graphics::TBitmap *pBitmap, int fmt); +Graphics::TBitmap* __fastcall CreateBitmap(int xw, int yw, int fmt); +void __fastcall StretchCopyBitmap(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc); +void __fastcall StretchCopyBitmapHW(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc); +void __fastcall CopyBitmap(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc); +void __fastcall StretchCopy(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc, int mode); +void __fastcall StretchCopy(Graphics::TBitmap *pBitmap, TRect *tc, Graphics::TBitmap *pbmp, TRect *rp); +void __fastcall SetGroupEnabled(TGroupBox *gp); + +int __fastcall Limit256(int d); +void __fastcall LimitRGB(int &R, int &G, int &B); +void __fastcall YCtoRGB(int &R, int &G, int &B, int Y, int RY, int BY); +TColor __fastcall YCtoTColor(int Y, int RY, int BY); +int __fastcall ColorToFreq(int d); +int __fastcall ColorToFreqNarrow(int d); +void __fastcall MultProc(void); +void __fastcall MultProcA(void); + +void __fastcall DrawBitmap(TPaintBox *pBox, Graphics::TBitmap *pBitmap); +void __fastcall ReSizeBitmap(Graphics::TBitmap *pBitmap, int w, int h); +Graphics::TBitmap *__fastcall MFilter(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc, int sw); +void __fastcall CopyAutoSize(Graphics::TBitmap *pTer, Graphics::TBitmap *pSrc); +void __fastcall GetRY(int &Y, int &RY, int &BY, TColor col); +void __fastcall DownColor(Graphics::TBitmap *pbmp, TColor bcol, int lm); + +void KeyEvent(const short *p); +void __fastcall SetThumbnailSize(TRect &rc, int sw); +void __fastcall NormalRect(long *x1, long *y1, long *x2, long *y2); //ja7ude 0521 +void __fastcall NormalRect(int &x1, int &y1, int &x2, int &y2); //ja7ude 0521 +void __fastcall NormalRect(TRect *rc); +int __fastcall GetActiveIndex(TPageControl *pp); + +void __fastcall ClearCodeErr(void); +void __fastcall SetMBCP(void); +void __fastcall SetMBCP(BYTE charset); +void __fastcall MoveParent(TWinControl *pNew, TWinControl *pOld, TWinControl *pCtr); +BYTE __fastcall InvFontCharset(BYTE charset); +void __fastcall InvFontCharset(TFont *pFont); + +extern CExecPB g_ExecPB; +#endif + diff --git a/Comm.cpp b/Comm.cpp new file mode 100644 index 0000000..db7a27f --- /dev/null +++ b/Comm.cpp @@ -0,0 +1,295 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include //ja7ude 0521 +#pragma hdrstop + +#include "Comm.h" +#include "ComLib.h" + +#define WAITSTAT 0 + +#define DEFFSOUND 3 + +COMMPARA COMM; +void InitCOMMPara(void) +{ + COMM.change = 1; +} + +__fastcall CComm::CComm(void) +{ + m_CreateON = FALSE; // クリエイトフラグ + m_Command = 0; + m_fHnd = NULL; // ファイルハンドル + m_ptt = m_scan = 0; + m_pEXT = NULL; +} + +/*#$% +============================================================== + 通信回線をクローズする +-------------------------------------------------------------- +-------------------------------------------------------------- +-------------------------------------------------------------- +============================================================== +*/ +void __fastcall CComm::Close(void) +{ + if( m_CreateON == TRUE ){ + if( m_pEXT != NULL ){ + delete m_pEXT; + m_pEXT = NULL; + } + else { + ::CloseHandle(m_fHnd); + } + m_CreateON = FALSE; + } +} + +/*#$% +============================================================== + 通信回線をオープンする +-------------------------------------------------------------- +PortName : 回線の名前 +pCP : COMMPARAのポインタ(ヌルの時はデフォルトで初期化) +RBufSize : 受信バッファのサイズ(default=2048) +TBufSize : 送信バッファのサイズ(default=2048) +-------------------------------------------------------------- +TRUE/FALSE +-------------------------------------------------------------- +============================================================== +*/ +BOOL __fastcall CComm::Open(LPCTSTR PortName) +{ + if( m_CreateON == TRUE ) Close(); + m_fHnd = ::CreateFile( PortName, GENERIC_READ | GENERIC_WRITE, + 0, NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + if( m_fHnd == INVALID_HANDLE_VALUE ){ + AnsiString as = "\\\\.\\"; + as += PortName; + m_fHnd = ::CreateFile( as.c_str(), GENERIC_READ | GENERIC_WRITE, + 0, NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + } + if( m_fHnd == INVALID_HANDLE_VALUE ){ + m_pEXT = new CEXTFSK(PortName); + if( m_pEXT->IsLib() ){ + LONG para; + para = (45 << 16) | (5 << 2); + m_pEXT->Open(para); + m_CreateON = TRUE; + return TRUE; + } + else { + delete m_pEXT; + m_pEXT = NULL; + } + return FALSE; + } + // setup device buffers + if( ::SetupComm( m_fHnd, DWORD(1024), DWORD(2) ) == FALSE ){ + ::CloseHandle(m_fHnd); + return FALSE; + } + + // purge any information in the buffer + ::PurgeComm( m_fHnd, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); + + // set up for overlapped I/O + COMMTIMEOUTS TimeOut; + + TimeOut.ReadIntervalTimeout = 0xffffffff; + TimeOut.ReadTotalTimeoutMultiplier = 0; + TimeOut.ReadTotalTimeoutConstant = 0; + TimeOut.WriteTotalTimeoutMultiplier = 0; + TimeOut.WriteTotalTimeoutConstant = 20000; +// TimeOut.WriteTotalTimeoutConstant = 1; + if( !::SetCommTimeouts( m_fHnd, &TimeOut ) ){ + ::CloseHandle( m_fHnd ); + return FALSE; + } + ::GetCommState( m_fHnd, &m_dcb ); + m_dcb.BaudRate = 9600; + m_dcb.fBinary = TRUE; + m_dcb.ByteSize = 8; + m_dcb.Parity = NOPARITY; + m_dcb.StopBits = ONESTOPBIT; + m_dcb.XonChar = 0x11; // XON + m_dcb.XoffChar = 0x13; // XOFF + m_dcb.fParity = 0; + m_dcb.fOutxCtsFlow = FALSE; + m_dcb.fInX = m_dcb.fOutX = FALSE; + m_dcb.fOutxDsrFlow = FALSE; + m_dcb.EvtChar = 0x0d; + + m_dcb.fRtsControl = RTS_CONTROL_DISABLE; // 送信禁止 + m_dcb.fDtrControl = DTR_CONTROL_DISABLE; // 送信禁止 + +// m_dcb.fTXContinueOnXoff = TRUE; + m_dcb.XonLim = USHORT(1024/4); // 1/4 of RBufSize + m_dcb.XoffLim = USHORT(1024*3/4); // 3/4 of RBufSize + m_dcb.DCBlength = sizeof( DCB ); + + if( !::SetCommState( m_fHnd, &m_dcb ) ){ + ::CloseHandle( m_fHnd ); + return FALSE; + } + + // get any early notifications + if( !::SetCommMask( m_fHnd, EV_RXFLAG ) ){ + ::CloseHandle(m_fHnd); + return FALSE; + } + m_CreateON = TRUE; + return TRUE; +} +//----------------------------------------------------------------- +// PTT切り替え用 +int __fastcall CComm::PTTOpen(void) +{ + if( m_CreateON == FALSE ){ + if( !strcmpi(sys.m_TxRxName.c_str(), "NONE") ) return FALSE; + Open(sys.m_TxRxName.c_str()); + if( m_CreateON == FALSE ) return FALSE; + } + return TRUE; +} +//----------------------------------------------------------------- +// PTT切り替え用 +int __fastcall CComm::SetPTT(void) +{ + int rts = m_ptt; + if( m_pEXT != NULL ){ + if( sys.m_RTSonRX && m_scan ) rts |= 2; + m_pEXT->SetPTT(rts); + } + else { + if( sys.m_RTSonRX ){ + rts |= m_scan; + ::EscapeCommFunction(m_fHnd, m_scan ? SETBREAK : CLRBREAK); + } + ::EscapeCommFunction(m_fHnd, rts ? SETRTS : CLRRTS); + ::EscapeCommFunction(m_fHnd, m_ptt ? SETDTR : CLRDTR); + } + return rts | m_ptt; +} +//----------------------------------------------------------------- +// PTT切り替え用 +void __fastcall CComm::SetPTT(int sw) +{ + m_ptt = sw; + + if( !PTTOpen() ) return; + if( !SetPTT() && (!sys.m_TxRxLock) ) Close(); +} +//----------------------------------------------------------------- +// RX-SCAN信号 +void __fastcall CComm::SetScan(int scan) +{ + m_scan = scan; + + if( !sys.m_RTSonRX ) return; + if( !PTTOpen() ) return; + if( !SetPTT() && (!sys.m_TxRxLock) ) Close(); +} + +/******************************************************************* + EXTFSK.DLL +*******************************************************************/ +__fastcall CEXTFSK::CEXTFSK(LPCSTR pName) +{ + char Name[128]; + sprintf(Name, "%s.%s", pName, strcmpi(pName, "EXTFSK") ? "fsk" : "dll"); + + fextfskOpen = NULL; + fextfskClose = NULL; + fextfskIsTxBusy = NULL; + fextfskPutChar = NULL; + fextfskSetPTT = NULL; + + m_hLib = ::LoadLibrary(Name); + if( m_hLib != NULL ){ + fextfskOpen = (extfskOpen)GetProc("_extfskOpen"); + fextfskClose = (extfskClose)GetProc("_extfskClose"); + fextfskIsTxBusy = (extfskIsTxBusy)GetProc("_extfskIsTxBusy"); + fextfskPutChar = (extfskPutChar)GetProc("_extfskPutChar"); + fextfskSetPTT = (extfskSetPTT)GetProc("_extfskSetPTT"); + } +} + +//--------------------------------------------------------------------- +__fastcall CEXTFSK::~CEXTFSK() +{ + if( m_hLib != NULL ){ + Close(); + ::FreeLibrary(m_hLib); + m_hLib = NULL; + } +} + +//--------------------------------------------------------------------- +FARPROC CEXTFSK::GetProc(LPCSTR pName) +{ + FARPROC fn = ::GetProcAddress(m_hLib, pName+1); + if( fn == NULL ){ + fn = ::GetProcAddress(m_hLib, pName); + } + return fn; +} + +long __fastcall CEXTFSK::Open(long para) +{ + if( !m_hLib || !fextfskOpen ) return FALSE; + return fextfskOpen(para); +} + +void __fastcall CEXTFSK::Close(void) +{ + if( !m_hLib || !fextfskClose ) return; + fextfskClose(); +} + +long __fastcall CEXTFSK::IsTxBusy(void) +{ + if( !m_hLib || !fextfskIsTxBusy ) return FALSE; + return fextfskIsTxBusy(); +} + +void __fastcall CEXTFSK::PutChar(BYTE c) +{ + if( !m_hLib || !fextfskPutChar ) return; + fextfskPutChar(c); +} + +void __fastcall CEXTFSK::SetPTT(long tx) +{ + if( !m_hLib || !fextfskSetPTT ) return; + fextfskSetPTT(tx); +} + diff --git a/Comm.h b/Comm.h new file mode 100644 index 0000000..1b153dc --- /dev/null +++ b/Comm.h @@ -0,0 +1,114 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +///---------------------------------------------------------- +/// RS232C通信クラス +/// +/// (C) JE3HHT Makoto.Mori +/// +//--------------------------------------------------------------------------- +#ifndef CommH +#define CommH +#include "sstv.h" +//--------------------------------------------------------------------------- +#include //JA7UDE 0428 +//--------------------------------------------------------------------------- +#define CR 0x0d +#define LF 0x0a +#define COMM_CLOSE 1 + +typedef struct { + int change; + + int Baud; + int BitLen; + int Stop; + int Parity; +}COMMPARA; +extern COMMPARA COMM; + +typedef long (__stdcall *extfskOpen)(long para); +typedef void (__stdcall *extfskClose)(void); +typedef long (__stdcall *extfskIsTxBusy)(void); +typedef void (__stdcall *extfskPutChar)(BYTE c); +typedef void (__stdcall *extfskSetPTT)(long tx); + +class CEXTFSK +{ +private: + //HANDLE m_hLib; //ja7ude 0521 + HINSTANCE m_hLib; + extfskOpen fextfskOpen; + extfskClose fextfskClose; + extfskIsTxBusy fextfskIsTxBusy; + extfskPutChar fextfskPutChar; + extfskSetPTT fextfskSetPTT; +private: + FARPROC GetProc(LPCSTR pName); + +public: + __fastcall CEXTFSK(LPCSTR pName); + __fastcall ~CEXTFSK(); + long __fastcall IsLib(void){return m_hLib != NULL;}; + long __fastcall Open(long para); + void __fastcall Close(void); + long __fastcall IsTxBusy(void); + void __fastcall PutChar(BYTE c); + void __fastcall SetPTT(long tx); +}; + +#define COMM_TXBUFSIZE MODBUFMAX +class CComm +{ +public: + BOOL m_CreateON; // クリエイトフラグ + volatile int m_Command; + DCB m_dcb; // DCB + HANDLE m_fHnd; // ファイルハンドル + + int m_ptt; + int m_scan; + CEXTFSK *m_pEXT; +protected: +private: + int __fastcall PTTOpen(void); + +public: + __fastcall CComm(void); + __fastcall ~CComm(){ + Close(); + }; + inline BOOL __fastcall IsOpen(void){ + return m_CreateON; + }; + BOOL __fastcall Open(LPCTSTR PortName); + void __fastcall Close(void); + int __fastcall SetPTT(void); + void __fastcall SetPTT(int sw); + void __fastcall SetScan(int sw); +}; + +void InitCOMMPara(void); +#endif + + + + + + diff --git a/ConvDef.cpp b/ConvDef.cpp new file mode 100644 index 0000000..093c335 --- /dev/null +++ b/ConvDef.cpp @@ -0,0 +1,401 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ConvDef.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TConvDefDlg *ConvDefDlg; +//--------------------------------------------------------------------- +__fastcall TConvDefDlg::TConvDefDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Define Conversion"; + ConvSel->Caption = "Delimiter Type"; + ConvSel->Items->Strings[0] = "comma(,)"; + ConvSel->Items->Strings[1] = "TAB"; + ConvSel->Items->Strings[2] = "NONE"; + LConv->Caption = "Conv."; + CheckDBL->Caption = "Double"; + GrpRef->Caption = "Ref."; + SBBack->Caption = "<"; + SBNext->Caption = ">"; + CancelBtn->Caption = "Cancel"; + InitBtn->Caption = "All Del"; + UpBtn->Caption = "Up"; + DownBtn->Caption = "Down"; + InitMax->Caption = "Init Max"; + } + + Grid->RowCount = TEXTCONVMAX + 1; + m_Mode = 0; + m_Bgn = m_End = m_Cur = 0; + m_DisEvent = 0; +} +//--------------------------------------------------------------------- +void __fastcall TConvDefDlg::UpdateUI(int n) +{ + SBBack->Enabled = m_Cur > m_Bgn ? TRUE : FALSE; + SBNext->Enabled = m_Cur < m_End ? TRUE : FALSE; + UpBtn->Enabled = (n > 0) ? TRUE : FALSE; + DownBtn->Enabled = (n < TEXTCONVMAX - 1) ? TRUE : FALSE; + CheckDBL->Enabled = m_Mode && (ConvSel->ItemIndex < 2); +} +//--------------------------------------------------------------------- +void __fastcall TConvDefDlg::GridDrawCell(TObject *Sender, int Col, + int Row, TRect &Rect, TGridDrawState State) +{ + char bf[1024]; + SDMMLOG sd; + + Grid->Canvas->FillRect(Rect); + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + + if( Row ){ + Row--; + bf[0] = 0; + switch(Col){ + case 0: // Key + strcpy(bf, Conv[Row].Key.c_str()); + break; + case 1: // Size + if( !Conv[Row].Key.IsEmpty() && (Conv[Row].Key != "%EOD") ){ + sprintf(bf, "%u", Conv[Row].w); + } + break; + case 2: // Data + if( m_Mode ){ + if( !Conv[Row].Key.IsEmpty() && (Conv[Row].Key != "%EOD") ){ + Log.GetData(&sd, m_Cur); + MMLOG2Text(bf, &sd, Conv[Row].Key); + } + } + else { + strcpy(bf, m_line[Row].c_str()); + } + break; + } + Grid->Canvas->TextOut(X, Y, bf); + } + else if( MsgEng ){ + LPCSTR _tte[]={ + "Conv.","Max","Ref.", + }; + Grid->Canvas->TextOut(X, Y, _tte[Col]); + } + else { // タイトル + LPCSTR _tt[]={ + "変換式","Max","参照", + }; + Grid->Canvas->TextOut(X, Y, _tt[Col]); + } +} +//--------------------------------------------------------------------- +void __fastcall TConvDefDlg::SetupComBox(void) +{ + m_DisEvent++; + ConvText->Clear(); + int i; + for( i = 0; ConvTbl[i] != NULL; i++ ){ + ConvText->Items->Add(ConvTbl[i]); + } + m_DisEvent--; +} +//--------------------------------------------------------------------- +int __fastcall TConvDefDlg::Execute(TCONV *tp, int &delm, int &utc, int &dbl, int b, int e) +{ + m_DisEvent++; + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + Conv[i].Key = tp[i].Key; + Conv[i].w = tp[i].w; + } + m_Mode = 1; + m_Cur = m_Bgn = b; + m_End = e; + CheckUTC->Checked = utc; + ConvSel->ItemIndex = delm; + CheckDBL->Checked = dbl; + SetupComBox(); + ConvText->Text = Conv[0].Key; + UpdateUI(Grid->Row - 1); + m_DisEvent--; + if( ShowModal() == IDOK ){ + for( i = 0; i < TEXTCONVMAX; i++ ){ + tp[i].Key = Conv[i].Key; + tp[i].w = Conv[i].w; + } + delm = ConvSel->ItemIndex; + utc = CheckUTC->Checked; + dbl = CheckDBL->Checked; + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------- +int __fastcall TConvDefDlg::Execute(TCONV *tp, int &delm, int &utc, int &dbl, LPCSTR pName) +{ + m_DisEvent++; + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + Conv[i].Key = tp[i].Key; + Conv[i].w = tp[i].w; + } + m_Mode = 0; + CheckUTC->Checked = utc; + ConvSel->ItemIndex = delm; + CheckDBL->Checked = dbl; + SetupComBox(); + ConvText->Text = Conv[0].Key; + LoadText(pName); + UpdateUI(Grid->Row - 1); + UpdateLine(); + m_DisEvent--; + if( ShowModal() == IDOK ){ + for( i = 0; i < TEXTCONVMAX; i++ ){ + tp[i].Key = Conv[i].Key; + tp[i].w = Conv[i].w; + } + delm = ConvSel->ItemIndex; + utc = CheckUTC->Checked; + dbl = CheckDBL->Checked; + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------- +void __fastcall TConvDefDlg::LoadText(LPCSTR pName) +{ + FILE *fp; + char bf[2048]; + + m_Cur = m_Bgn = m_End = 0; + if( (fp = fopen(pName, "rt")) != NULL ){ + while(!feof(fp)){ + if( fgets(bf, sizeof(bf), fp) != NULL ){ + ClipLF(bf); + m_text[m_End] = bf; + m_End++; + if( m_End >= PREREADMAX ) break; + } + } + fclose(fp); + } + if( m_End ) m_End--; +} +//--------------------------------------------------------------------- +void __fastcall TConvDefDlg::UpdateLine(void) +{ + char rbf[2048]; + + StrCopy(rbf, m_text[m_Cur].c_str(), 2043); + + char bf[512]; + char dlm = ConvSel->ItemIndex ? TAB : ','; + LPSTR p, t; + + int i; + p = rbf; + for( i = 0; i < TEXTCONVMAX; i++ ){ + if( ConvSel->ItemIndex == 2 ){ + StrCopy(bf, p, Conv[i].w); + p += strlen(bf); + t = bf; + } + else { + p = StrDlm(t, p, dlm); + } + clipsp(t); + t = SkipSpace(t); + m_line[i] = t; + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::ConvTextChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + m_DisEvent++; + if( Grid->Row ){ + int Row = Grid->Row - 1; + Conv[Row].Key = ConvText->Text; + Grid->Invalidate(); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::GridSelectCell(TObject *Sender, int Col, + int Row, bool &CanSelect) +{ + if( m_DisEvent ) return; + + m_DisEvent++; + if( Row ){ + Row--; + ConvText->Text = Conv[Row].Key; + UpdateUI(Row); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::SBBackClick(TObject *Sender) +{ + if( m_Cur > m_Bgn ){ + m_Cur--; + UpdateUI(Grid->Row - 1); + if( !m_Mode ) UpdateLine(); + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::SBNextClick(TObject *Sender) +{ + if( m_Cur < m_End ){ + m_Cur++; + UpdateUI(Grid->Row - 1); + if( !m_Mode ) UpdateLine(); + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::GridGetEditText(TObject *Sender, int ACol, + int ARow, AnsiString &Value) +{ + char bf[512]; + + if( ARow ) ARow--; + bf[0] = 0; + switch(ACol){ + case 0: // Key + strcpy(bf, Conv[ARow].Key.c_str()); + break; + case 1: // Size + if( !Conv[ARow].Key.IsEmpty() && (Conv[ARow].Key != "%EOD") ){ + sprintf(bf, "%u", Conv[ARow].w); + } + break; + case 2: // Data + break; + } + Value = bf; +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::GridSetEditText(TObject *Sender, int ACol, + int ARow, const AnsiString Value) +{ + int d; + + if( ARow ) ARow--; + switch(ACol){ + case 0: // Key + Conv[ARow].Key = Value; + Grid->Invalidate(); + break; + case 1: // Size + sscanf(Value.c_str(), "%u", &d); + if( (d >= 0) && (d<=256) ){ + Conv[ARow].w = d; + if( !m_Mode ){ + UpdateLine(); + Grid->Invalidate(); + } + } + break; + case 2: // Data + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::InitBtnClick(TObject *Sender) +{ + if( YesNoMB( MsgEng ? "Delete All setup. Are you sure?":"すべての定義を消去しますか?" ) == IDYES ){ + for( int i = 0; i < TEXTCONVMAX; i++ ){ + Conv[i].Key = ""; + Conv[i].w = 0; + } + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::UpBtnClick(TObject *Sender) +{ + int n = Grid->Row - 1; + if( n ){ + TCONV td = Conv[n]; + Conv[n] = Conv[n-1]; + Conv[n-1] = td; + Grid->Row--; + UpdateUI(Grid->Row - 1); + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::DownBtnClick(TObject *Sender) +{ + int n = Grid->Row - 1; + + if( n < (TEXTCONVMAX - 1) ){ + TCONV td = Conv[n]; + Conv[n] = Conv[n+1]; + Conv[n+1] = td; + Grid->Row++; + UpdateUI(Grid->Row - 1); + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::InitMaxClick(TObject *Sender) +{ + if( YesNoMB( MsgEng ? "Delete All Length. Are you sure?":"すべての文字列長の制限を無くしますか?" ) == IDYES ){ + for( int i = 0; i < TEXTCONVMAX; i++ ){ + Conv[i].w = 0; + } + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TConvDefDlg::ConvSelClick(TObject *Sender) +{ + UpdateUI(Grid->Row-1); + if( !m_Mode ){ + UpdateLine(); + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- + diff --git a/ConvDef.dfm b/ConvDef.dfm new file mode 100644 index 0000000000000000000000000000000000000000..a0b4c0eb2568f5aa58caf14a5c3a8a574f46097b GIT binary patch literal 1998 zcmah}O>g5w7=P2ZYq9jR%V-qUeuoVS|r1zcCbUbh(*W0JDR8%hO7HUN9feFJ9)L7kFv}BNL0M)BN`2dR{Q&dU0h5Hj zqA0b(Wnar=_jB2w%ZshD>AnB=@hQy=r(+b$$`TVkz9xntE~&NTM)H30*3ob8{5XH4 zYR>g~y41!0{M-3wXZ%>n>#U{4q=jbR2hc_VSsdWo7X~;lQGM4w`ReGncpbH1NTC)O zDz_#J_{xd&-vsjE#|1dZ!F7(Z01X=W04;)_J{J6w0=$}o*HWBCc-GLiI}^qgUr*(y z$G~g!^2yzMf8G6}V9^Se6fR|<^EravKA%svxaF9FXeK6PJ)4l-%+*iiub|M&1%=Ls g{Tx`M-Z=->%fNOnf`Mn}U%&m`{FegIpr4O_0c+}hOaK4? literal 0 HcmV?d00001 diff --git a/ConvDef.h b/ConvDef.h new file mode 100644 index 0000000..30a59b9 --- /dev/null +++ b/ConvDef.h @@ -0,0 +1,104 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef ConvDefH +#define ConvDefH +//---------------------------------------------------------------------------- +// JA7UDE 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +#include "LogConv.h" +//---------------------------------------------------------------------------- +#define PREREADMAX 100 +class TConvDefDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TStringGrid *Grid; + TComboBox *ConvText; + TLabel *LConv; + TGroupBox *GrpRef; + TSpeedButton *SBBack; + TSpeedButton *SBNext; + TRadioGroup *ConvSel; + TButton *InitBtn; + TButton *UpBtn; + TButton *DownBtn; + TButton *InitMax; + TCheckBox *CheckUTC; + TCheckBox *CheckDBL;void __fastcall ConvTextChange(TObject *Sender); + void __fastcall SBBackClick(TObject *Sender); + void __fastcall SBNextClick(TObject *Sender); + + + void __fastcall InitBtnClick(TObject *Sender); + void __fastcall UpBtnClick(TObject *Sender); + void __fastcall DownBtnClick(TObject *Sender); + void __fastcall InitMaxClick(TObject *Sender); + void __fastcall ConvSelClick(TObject *Sender); + void __fastcall GridSetEditText(TObject *Sender, int ACol, int ARow, + const AnsiString Value); + void __fastcall GridSelectCell(TObject *Sender, int Col, int Row, + bool &CanSelect); + void __fastcall GridGetEditText(TObject *Sender, int ACol, int ARow, + AnsiString &Value); + void __fastcall GridDrawCell(TObject *Sender, int Col, int Row, + TRect &Rect, TGridDrawState State); +private: + TCONV Conv[TEXTCONVMAX]; + + int m_Mode; + int m_DisEvent; + + int m_Bgn; + int m_End; + int m_Cur; + + void __fastcall UpdateUI(int n); + void __fastcall SetupComBox(void); + + AnsiString m_text[PREREADMAX]; + AnsiString m_line[TEXTCONVMAX]; + + void __fastcall LoadText(LPCSTR pName); + void __fastcall UpdateLine(void); + +public: + virtual __fastcall TConvDefDlg(TComponent* AOwner); + + int __fastcall Execute(TCONV *tp, int &delm, int &utc, int &dbl, int b, int e); + int __fastcall Execute(TCONV *tp, int &delm, int &utc, int &dbl, LPCSTR pName); +}; +//---------------------------------------------------------------------------- +//extern TConvDefDlg *ConvDefDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/CtrBtn.cpp b/CtrBtn.cpp new file mode 100644 index 0000000..f0fdf2d --- /dev/null +++ b/CtrBtn.cpp @@ -0,0 +1,123 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "CtrBtn.h" +#include "Main.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +//TCtrBtnWnd *CtrBtnWnd; +//--------------------------------------------------------------------------- +__fastcall TCtrBtnWnd::TCtrBtnWnd(TComponent* Owner) + : TForm(Owner) +{ + Font->Name = sys.m_WinFontName; + Font->Charset = sys.m_WinFontCharset; + if( MsgEng ){ + SBRXStop->Caption = "Stop RX"; + SBLock->Caption = "Lock RX"; +// SBSync->Caption = "ReSync"; + SBHist->Caption = "CopyHist"; + SBTX->Caption = "TX(F9)"; + } + SBSync->Caption = Mmsstv->KRFS->Caption; + AlignView.EntryControl(SBRXStop, this, SBRXStop->Font); + AlignView.EntryControl(SBLock, this, SBLock->Font); + AlignView.EntryControl(SBSync, this, SBSync->Font); + AlignView.EntryControl(SBHist, this, SBHist->Font); + AlignView.EntryControl(SBTX, this, SBTX->Font); + SBTX->OnMouseDown = Mmsstv->SBTXMouseDown; +// Caption = ""; +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::UpdateBtn(void) +{ + if( Mmsstv->pDem->m_Sync ){ + SBRXStop->Enabled = TRUE; + SBSync->Enabled = (SSTVSET.m_Mode != smAVT) ? TRUE : FALSE; + } + else { + SBRXStop->Enabled = (Mmsstv->pDem->m_SyncMode != -1) ? FALSE : TRUE; + SBSync->Enabled = FALSE; + SBRXStop->Down = SBRXStop->Enabled; + } + SBLock->Down = Mmsstv->SBLK->Down; + SBHist->Enabled = Mmsstv->SBWHist->Enabled && !Mmsstv->pDem->m_Sync; + SBTX->Down = Mmsstv->SBTX->Down; + if( sys.m_Repeater ) SBTX->Update(); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::SBRXStopClick(TObject *Sender) +{ + Mmsstv->RxAutoPush(TRUE); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::SBHistClick(TObject *Sender) +{ + Mmsstv->SBWHistClick(NULL); + if( Mmsstv->pSound->m_Tx && !Mmsstv->SBTune->Down && Mmsstv->SBUseTemp->Down ){ + MultProc(); + Mmsstv->SBUseTemp->Down = FALSE; + Mmsstv->SBUseTempClick(NULL); + } + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::SBTXClick(TObject *Sender) +{ + Mmsstv->AdjustPage(pgTX); + Mmsstv->SBTX->Down = Mmsstv->SBTX->Down ? FALSE : TRUE; + Mmsstv->SBTXClick(NULL); + UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + Mmsstv->FormKeyDown(Sender, Key, Shift); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::FormKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + Mmsstv->FormKeyUp(Sender, Key, Shift); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::FormResize(TObject *Sender) +{ + AlignView.NewAlign(this); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::SBLockClick(TObject *Sender) +{ + Mmsstv->SBLK->Down = SBLock->Down; + Mmsstv->SBLKClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TCtrBtnWnd::SBSyncClick(TObject *Sender) +{ + Mmsstv->KRFSClick(NULL); +} +//--------------------------------------------------------------------------- + diff --git a/CtrBtn.dfm b/CtrBtn.dfm new file mode 100644 index 0000000000000000000000000000000000000000..a53a64e348d8c9bfa58d6570748a26df662e29c1 GIT binary patch literal 914 zcma)&O>fgM9EaUx#Ce+--=N&!f_CNDWR!NSFN$3{i34PbN29rR)BiWdR zMm_BukyELDZ>X5ZDr{H|7a2il1zJq&4AgONsa=+Db=Ct$1>tfYcy?_ zMuf=@iQZ47`W0AJ9!H^^s2_mc=1e|wC%#CCgnOvdZR5i(dh2#t9(sYzYMWCopdHY0 z#6mvDWFf6`qoOK5jWYH9DbXG-=~6V8JVV**>?G?~1SC^RERdfQ({hH^X@aDm4p{y$ zb0{JvQQ%VowV3xgBU+h4-59V}Bt77B26LsD-iC5{6vL93FOFh;z&w&f=LF_TF|Fp^ zVYDDL8RnI-V4}P;i@UFH{Rr3?#e{^;OiIplWT7; os. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef CtrBtnH +#define CtrBtnH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +#include "ComLib.h" +//--------------------------------------------------------------------------- +class TCtrBtnWnd : public TForm +{ +__published: // IDE 管理のコンポーネント + TSpeedButton *SBRXStop; + TSpeedButton *SBHist; + TSpeedButton *SBTX; + TSpeedButton *SBLock; + TSpeedButton *SBSync; + void __fastcall SBTXClick(TObject *Sender); + void __fastcall SBRXStopClick(TObject *Sender); + void __fastcall SBHistClick(TObject *Sender); + void __fastcall FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall FormKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall FormResize(TObject *Sender); + void __fastcall SBLockClick(TObject *Sender); + + void __fastcall SBSyncClick(TObject *Sender); + +private: // ユーザー宣言 + CAlignList AlignView; + +public: // ユーザー宣言 + __fastcall TCtrBtnWnd(TComponent* Owner); + void __fastcall UpdateBtn(void); + void __fastcall GetViewPos(int &x, int &y, int &w, int &h){ + x = Left; + y = Top; + w = ClientWidth; + h = ClientHeight; + }; + void __fastcall SetViewPos(int x, int y, int w, int h){ + Left = x; + Top = y; + ClientWidth = w; + ClientHeight = h; + }; +}; +//--------------------------------------------------------------------------- +//extern PACKAGE TCtrBtnWnd *CtrBtnWnd; +//--------------------------------------------------------------------------- +#endif + diff --git a/Draw.cpp b/Draw.cpp new file mode 100644 index 0000000..2652b9d --- /dev/null +++ b/Draw.cpp @@ -0,0 +1,5929 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "Draw.h" +#include "main.h" + +#include "LineSet.h" +#include "TextIn.h" +#include "ColorBar.h" +#include "PicSel.h" +#include "PicRect.h" +#include "MacroKey.h" +#include "ColorSet.h" +#include "ZoomView.h" +#include "PicFilte.h" + +TColor TransCol; +CDrawGroup DrawPara; +CLIBL Libl; + +LPCSTR _ShapePIC[2][7]={ + { "Rectangle", "Round Rect 1", "Round Rect 2", "Round Rect 3", "Ellipse", "Polygon", NULL }, + { "長方形", "丸長方形1", "丸長方形2", "丸長方形3", "楕円", "多角形", NULL }, +}; +LPCSTR _ShapeBOX[2][7]={ + { "Rectangle", "Round Rect 1", "Round Rect 2", "Round Rect 3", "Ellipse", "Circle", NULL }, + { "長方形", "丸長方形1", "丸長方形2", "丸長方形3", "楕円", "円", NULL }, +}; + +int SXW; +int SYW; +void __fastcall SetDrawSize(int x, int y) +{ + if( x >= 320 ) SXW = x; + if( y >= 256 ) SYW = y; +} +//--------------------------------------------------------------------------- +static CDrawText CurText; +//--------------------------------------------------------------------------- +int __fastcall IsInside(POINT &pnt, RECT &rc) +{ + if( rc.left < rc.right ){ + if( pnt.x < rc.left ) return FALSE; + if( pnt.x > rc.right ) return FALSE; + } + else { + if( pnt.x > rc.left ) return FALSE; + if( pnt.x < rc.right ) return FALSE; + } + if( rc.top > rc.bottom ){ + if( pnt.y > rc.top ) return FALSE; + if( pnt.y < rc.bottom ) return FALSE; + } + else { + if( pnt.y < rc.top ) return FALSE; + if( pnt.y > rc.bottom ) return FALSE; + } + return TRUE; +} + +int __fastcall IsNear(POINT &pnt, POINT &tpnt, int Width) +{ + RECT rc; + rc.left = tpnt.x - Width; + rc.right = tpnt.x + Width; + rc.top = tpnt.y + Width; + rc.bottom = tpnt.y - Width; + return IsInside(pnt, rc); +} + +int __fastcall IsLine(POINT &pnt, POINT &spnt, POINT &tpnt, int Width) +{ + int Xw = tpnt.x - spnt.x; + int Yw = tpnt.y - spnt.y; + double A, B; + int C; + + if( IsNear(pnt, spnt, Width)==TRUE ){ + return HT_P1; /* 始点と一致 */ + } + else if( IsNear(pnt, tpnt, Width)==TRUE ){ + return HT_P2; /* 終点と一致 */ + } + if( spnt.x > tpnt.x ){ /* X方向の入れ替え */ + POINT bpnt = spnt; + spnt = tpnt; + tpnt = bpnt; + } + if( (pnt.x >= (spnt.x-Width)) && (pnt.x <= (tpnt.x+Width)) ){ + if( Xw ){ + A = double(Yw)/double(Xw); + B = double(spnt.y) - (A * double(spnt.x)); + C = int((A * double(pnt.x)) + B); + A = A < 0.0 ? -A : A; + if( A >= 1.0 ){ + Width = int(double(Width) * A); + } + if( (pnt.y < (C+Width)) && (pnt.y >= (C-Width)) ){ + return HT_PM; + } + } + else if( spnt.y > tpnt.y ){ + if( (pnt.y < spnt.y) && (pnt.y > tpnt.y) ){ + return HT_PM; + } + } + else if( (pnt.y > spnt.y) && (pnt.y < tpnt.y) ){ + return HT_PM; + } + } + return 0; +} + +int __fastcall IsLine(POINT &pnt, POINT &spnt, POINT &tpnt) +{ + int r = IsLine(pnt, spnt, tpnt, 4); + if( (r == HT_P1)||(r == HT_P2) ) return r; + return IsLine(pnt, spnt, tpnt, 10) ? HT_PM : 0; +} + +//--------------------------------------------------------------------------- +// 実現色を返す +TColor __fastcall GetNearestColor(TColor col) +{ + if( (sys.m_BitPixel < 24) && Mmsstv->pBitmapNearest ){ + TCanvas *pCanvas = Mmsstv->pBitmapNearest->Canvas; + pCanvas->Pixels[0][0] = TColor(col); + col = pCanvas->Pixels[0][0]; + } + return col; +} +//--------------------------------------------------------------------------- +TColor __fastcall GetUniqueColor(TColor col) +{ +#if 1 + col = TColor(DWORD(col) & 0x00f0f0f0); + COLD c; + c.c = col; + DWORD r; + + while(!c.d || (c.c == col)){ + r = rand(); r = r << 4; + c.b.r = (BYTE)(r & 0x00f0); r = r >> 4; + c.b.g = (BYTE)(r & 0x00f0); r = r >> 4; + c.b.b = (BYTE)(r & 0x00f0); + } + col = GetNearestColor(c.c); + return col; +#else + col = TColor(DWORD(col) & 0x00e0e0e0); + DWORD c = DWORD(col); + + while(!c || (c == DWORD(col))){ + + c = (rand() & 0x00e0) + ((rand() & 0x00e0) << 8) + ((rand() & 0x00e0) << 16); + } + col = GetNearestColor(TColor(c)); + return col; +#endif +} +//--------------------------------------------------------------------------- +HBITMAP __cdecl mmLoadImageMenu(DWORD sw, int xw, int yw) +{ + HBITMAP hb = NULL; + + int x = xw; + int y = yw; + if( sw ){ + x = 320; y = 256; + } + Graphics::TBitmap* pBitmap = CreateBitmap(x, y, pf24bit); + if( Mmsstv->LoadBitmapMenu(pBitmap, sw) ){ + hb = pBitmap->ReleaseHandle(); + } + delete pBitmap; + return hb; +} +//--------------------------------------------------------------------------- +HBITMAP __cdecl mmLoadImage(LPCSTR pName) +{ + HBITMAP hb = NULL; + + Graphics::TBitmap* pBitmap = new Graphics::TBitmap; + pBitmap->PixelFormat = pf24bit; + if( LoadImage(pBitmap, pName) ){ + hb = pBitmap->ReleaseHandle(); + } + delete pBitmap; + return hb; +} +//--------------------------------------------------------------------------- +HBITMAP __fastcall LoadRefImage(Graphics::TBitmap *pRef) +{ + Graphics::TBitmap* pBitmap = new Graphics::TBitmap; + pBitmap->PixelFormat = pf24bit; + CopyBitmap(pBitmap, pRef); + HBITMAP hb = pBitmap->ReleaseHandle(); + delete pBitmap; + return hb; +} +//--------------------------------------------------------------------------- +HBITMAP __cdecl mmLoadHistImage(void) +{ + return LoadRefImage(Mmsstv->pBitmapHist); +} +//--------------------------------------------------------------------------- +HBITMAP __cdecl mmLoadRxImage(void) +{ + return LoadRefImage(Mmsstv->pBitmapRX); +} +//--------------------------------------------------------------------------- +int __cdecl mmSaveImageMenu(HBITMAP hb, LPCSTR pName, LPCSTR pFolder) +{ + Graphics::TBitmap* pBitmap = new Graphics::TBitmap; + pBitmap->Handle = hb; + int r = Mmsstv->SaveBitmapMenu(pBitmap, pName, pFolder); + pBitmap->ReleaseHandle(); + delete pBitmap; + return r; +} +//--------------------------------------------------------------------------- +int __cdecl mmSaveImage(HBITMAP hb, LPCSTR pName) +{ + Graphics::TBitmap* pBitmap = new Graphics::TBitmap; + pBitmap->Handle = hb; + int r = SaveImage(pBitmap, pName); + pBitmap->ReleaseHandle(); + delete pBitmap; + return r; +} +//--------------------------------------------------------------------------- +HBITMAP __cdecl mmPasteImage(int sw, int xw, int yw) +{ + HBITMAP hb = NULL; + + int x = xw; + int y = yw; + if( sw ){ + x = 16; y = 16; + } + Graphics::TBitmap* pBitmap = CreateBitmap(x, y, pf24bit); + if( Mmsstv->PasteBitmap(pBitmap, sw) ){ + hb = pBitmap->ReleaseHandle(); + } + delete pBitmap; + return hb; +} +//--------------------------------------------------------------------------- +int __cdecl mmGetMacKey(LPSTR tDest, int len) +{ + int r = FALSE; + TMacroKeyDlg *pBox = new TMacroKeyDlg(Mmsstv); + AnsiString as; + if( pBox->Execute(as) > 0 ){ + StrCopy(tDest, as.c_str(), len - 1); + r = TRUE; + } + delete pBox; + return r; +} +//--------------------------------------------------------------------------- +int __cdecl mmConvMac(LPSTR tDest, LPCSTR pKey, int len) +{ + return Mmsstv->MacroText(tDest, pKey, len-1); +} +//--------------------------------------------------------------------------- +HBITMAP __cdecl mmCreateDIB(int xw, int yw) +{ + Graphics::TBitmap* pBitmap = CreateBitmap(xw, yw, pf24bit); + HBITMAP hb = pBitmap->ReleaseHandle(); + delete pBitmap; + return hb; +} +//--------------------------------------------------------------------------- +int __cdecl mmColorComp(LPDWORD pCol) +{ + TColorSetDlg *pBox = new TColorSetDlg(Mmsstv); + int r = pBox->Execute((TColor *)pCol); + delete pBox; + return r; +} +//--------------------------------------------------------------------------- +void __cdecl mmView(HBITMAP hb) +{ + Graphics::TBitmap* pBitmap = new Graphics::TBitmap; + pBitmap->Handle = hb; + TZoomViewDlg *pBox = new TZoomViewDlg(Mmsstv); + pBox->SetInitSize(pBitmap->Width, pBitmap->Height); + pBox->Execute(pBitmap, FALSE); + delete pBox; + pBitmap->ReleaseHandle(); + delete pBitmap; +} +//--------------------------------------------------------------------------- +int __cdecl mmAdjCol(HBITMAP hb) +{ + Graphics::TBitmap* pBitmap = new Graphics::TBitmap; + pBitmap->Handle = hb; + + TPicFilterDlg *pBox = new TPicFilterDlg(Mmsstv); + int r = pBox->Execute(pBitmap); + delete pBox; + pBitmap->ReleaseHandle(); + delete pBitmap; + return r; +} +//--------------------------------------------------------------------------- +int __cdecl mmClip(HBITMAP hbDest, HBITMAP hbSrc) +{ + Graphics::TBitmap* pSrc = new Graphics::TBitmap; + pSrc->Handle = hbSrc; + Graphics::TBitmap* pDest = new Graphics::TBitmap; + pDest->Handle = hbDest; + + TPicRectDlg *pBox = new TPicRectDlg(Mmsstv); + CopyBitmap(pBox->pBitmap, pSrc); + int r = pBox->Execute(pDest); + delete pBox; + pSrc->ReleaseHandle(); + pDest->ReleaseHandle(); + delete pSrc; delete pDest; + return r; +} +// +// +// +//--------------------------------------------------------------------------- +__fastcall CDraw::CDraw() +{ + m_Ver = 0; + m_Cursor = 0; + m_CX1 = m_CY1 = 0; + m_CX2 = m_CY2 = 0; + m_LineColor = clBlack; + m_LineStyle = psSolid; + m_LineWidth = 1; + m_X1 = m_Y1 = m_X2 = m_Y2 = 0; + m_BX = m_BY = m_MF = 0; + m_BoxStyle = 0; + pc = NULL; + pBox = NULL; +} + +void __fastcall CDraw::Start(TCanvas *tp, int x, int y) +{ + pc = tp; + m_CX1 = m_X1 = x; + m_CY1 = m_Y1 = y; +} + +void __fastcall CDraw::StartMove(TCanvas *tp, int x, int y, int code) +{ + pc = tp; + m_BX = x; + m_BY = y; + m_MF = 0; + m_MC = code; + m_CX1 = m_X1; + m_CX2 = m_X2; + m_CY1 = m_Y1; + m_CY2 = m_Y2; +} + +int __fastcall CDraw::Edit(void) +{ + TLineSetDlg *pBox = new TLineSetDlg(Mmsstv); + int r = pBox->Execute(this); + delete pBox; + return r; +} + +int __fastcall CDraw::Color(void) +{ + TColorDialog *pDialog = Mmsstv->ColorDialog; + InitCustomColor(pDialog); + AddCustomColor(pDialog, m_LineColor); + pDialog->Color = m_LineColor; + SetDisPaint(); + if( pDialog->Execute() == TRUE ){ + m_LineColor = pDialog->Color; + ResDisPaint(); + return TRUE; + } + ResDisPaint(); + return FALSE; +} + +void __fastcall CDraw::SaveToStream(TStream *sp) +{ + sp->Write(&m_Command, sizeof(m_Command)); + sp->Write(&m_Ver, sizeof(m_Ver)); + sp->Write(&m_X1, sizeof(m_X1)); + sp->Write(&m_Y1, sizeof(m_Y1)); + sp->Write(&m_X2, sizeof(m_X2)); + sp->Write(&m_Y2, sizeof(m_Y2)); + sp->Write(&m_LineColor, sizeof(m_LineColor)); + sp->Write(&m_LineStyle, sizeof(m_LineStyle)); + if( m_BoxStyle ){ + DWORD bver = 0x55aa0000; + sp->Write(&bver, sizeof(bver)); + sp->Write(&m_BoxStyle, sizeof(m_BoxStyle)); + } + sp->Write(&m_LineWidth, sizeof(m_LineWidth)); +} + +int __fastcall CDraw::LoadFromStream(TCanvas *tp, TStream *sp) +{ + try { + pc = tp; + sp->Read(&m_Ver, sizeof(m_Ver)); + sp->Read(&m_X1, sizeof(m_X1)); + sp->Read(&m_Y1, sizeof(m_Y1)); + sp->Read(&m_X2, sizeof(m_X2)); + sp->Read(&m_Y2, sizeof(m_Y2)); + sp->Read(&m_LineColor, sizeof(m_LineColor)); + sp->Read(&m_LineStyle, sizeof(m_LineStyle)); + DWORD bver; + sp->Read(&bver, sizeof(bver)); + if( (bver & 0xffff0000) != 0x55aa0000 ){ + m_LineWidth = bver; + m_BoxStyle = 0; + } + else { + bver &= 0x0000ffff; + sp->Read(&m_BoxStyle, sizeof(m_BoxStyle)); + sp->Read(&m_LineWidth, sizeof(m_LineWidth)); + } +// sp->Read(&m_LineWidth, sizeof(m_LineWidth)); + return TRUE; + } + catch(...){ + return FALSE; + } +} + +void __fastcall CDraw::SaveBitmap(TStream *sp, Graphics::TBitmap *pBitmap) +{ + int xw = 0; + int yw = 0; + if( pBitmap != NULL ){ + xw = pBitmap->Width; + yw = pBitmap->Height; + } + sp->Write(&xw, sizeof(xw)); + sp->Write(&yw, sizeof(yw)); + if( xw && yw ){ + pBitmap->SaveToStream(sp); + } +} + +int __fastcall CDraw::LoadBitmap(TStream *sp, Graphics::TBitmap *pBitmap) +{ + try { + int xw; + int yw; + sp->Read(&xw, sizeof(xw)); + sp->Read(&yw, sizeof(yw)); + if( xw && yw ){ + pBitmap->LoadFromStream(sp); + } + return TRUE; + } + catch(...){ + return FALSE; + } +} + +void __fastcall CDraw::Copy(CDraw *dp) +{ + m_X1 = dp->m_X1; + m_Y1 = dp->m_Y1; + m_X2 = dp->m_X2; + m_Y2 = dp->m_Y2; + m_LineColor = dp->m_LineColor; + m_LineStyle = dp->m_LineStyle; + m_LineWidth = dp->m_LineWidth; + m_BoxStyle = dp->m_BoxStyle; + pc = dp->pc; +} + +void __fastcall CDraw::SaveString(TStream *sp, AnsiString &as) +{ + int len = strlen(as.c_str()); + sp->Write(&len, sizeof(len)); + if( len ){ + sp->Write(as.c_str(), len); + } +} + +void __fastcall CDraw::LoadString(TStream *sp, AnsiString &as) +{ + int len; + sp->Read(&len, sizeof(len)); + if( len ){ + LPSTR bp = new char[len + 1]; + sp->Read(bp, len); + bp[len] = 0; + as = bp; + delete bp; + } + else { + as = ""; + } +} + +TColor __fastcall GetCol(TColor c1, TColor c2, int x, int xw) +{ + if( xw ){ + int R1 = DWORD(c1) & 0x000000ff; + int G1 = (DWORD(c1) >> 8) & 0x000000ff; + int B1 = (DWORD(c1) >> 16) & 0x000000ff; + int R2 = DWORD(c2) & 0x000000ff; + int G2 = (DWORD(c2) >> 8) & 0x000000ff; + int B2 = (DWORD(c2) >> 16) & 0x000000ff; + if( x > xw ) x = xw; + R1 += (R2 - R1) * x / xw; + G1 += (G2 - G1) * x / xw; + B1 += (B2 - B1) * x / xw; + LimitRGB(R1, G1, B1); + return TColor((B1 << 16) + (G1 << 8) + R1); + } + else { + return c1; + } +} + +void __fastcall CDraw::Normal(void) +{ + NormalRect(m_X1, m_Y1, m_X2, m_Y2); +} + +void __fastcall CDraw::AdjustRect(void) +{ + int XW = SXW - 1; + int YW = SYW - 1; + if( m_X1 > XW ){ + m_X1 = XW - (m_X2 - m_X1); + m_X2 = XW; + } + else if( m_X2 < 0 ){ + m_X2 = m_X2 - m_X1; + m_X1 = 0; + } + if( m_Y1 > YW ){ + m_Y1 = YW - (m_Y2 - m_Y1); + m_Y2 = YW; + } + else if( m_Y2 < 0 ){ + m_Y2 = m_Y2 - m_Y1; + m_Y1 = 0; + } + +} + +//--------------------------------------------------------------------------- +__fastcall CDrawLine::CDrawLine() +{ + m_Command = CM_LINE; + m_Cursor = 0; +} + +int __fastcall CDrawLine::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + return ((m_X1 != m_X2)||(m_Y1 != m_Y2)) ? TRUE : FALSE; +} + +void __fastcall DrawSiege(TCanvas *tp, int X1, int Y1, int X2, int Y2, TColor SCol, int e) +{ + e = (e == 5) ? 4 : 3; + int x1 = X1; + int y1 = Y1; + int x2 = X2; + int y2 = Y2; + TColor col = SCol; + TColor tcol = SCol == clBlack ? clWhite : clBlack; + int i; + for( i = 0; i < e; i++ ){ + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->MoveTo(x1, y1); + tp->LineTo(x2, y2); + if( ABS(x2 - x1) > ABS(y2 - y1) ){ + y1--; y2--; + } + else { + x1--; x2--; + } + } + x1 = X1; + y1 = Y1; + x2 = X2; + y2 = Y2; + for( i = 0; i < e; i++ ){ + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->MoveTo(x1, y1); + tp->LineTo(x2, y2); + if( ABS(x2 - x1) > ABS(y2 - y1) ){ + y1++; y2++; + } + else { + x1++; x2++; + } + } +} + +void __fastcall CDrawLine::Draw(TCanvas *tp) +{ + tp->Pen->Color = m_LineColor; + if( m_LineStyle >= 5 ){ + tp->Pen->Style = psSolid; + tp->Pen->Width = 1; + DrawSiege(tp, m_X1, m_Y1, m_X2, m_Y2, m_LineColor, m_LineStyle); + } + else if( m_LineStyle >= 0 ){ + tp->Pen->Style = m_LineStyle; + tp->Pen->Width = m_LineWidth; + tp->MoveTo(m_X1, m_Y1); + tp->LineTo(m_X2, m_Y2); + } +} + +void __fastcall CDrawLine::DrawSel(TCanvas *tp, int sw) +{ + tp->Pen->Color = clBlue; + tp->Pen->Style = psDot; + tp->Pen->Width = 1; + tp->MoveTo(m_X1, m_Y1); + int rop = ::SetROP2(tp->Handle, sw ? R2_NOT : R2_COPYPEN); + tp->LineTo(m_X2, m_Y2); + ::SetROP2(tp->Handle, rop); +} + +void __fastcall CDrawLine::DrawCursor(void) +{ + pc->Pen->Style = psDot; + pc->Pen->Width = 1; + pc->MoveTo(m_CX1, m_CY1); + int Sop = ::SetROP2(pc->Handle, R2_NOT); + pc->LineTo(m_CX2, m_CY2); + ::SetROP2(pc->Handle, Sop); +} + +void __fastcall CDrawLine::Making(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + m_CX2 = x; + m_CY2 = y; + DrawCursor(); + m_Cursor = 1; +} + +int __fastcall CDrawLine::HitTest(int x, int y) +{ + POINT N; + POINT B, E; + N.x = x; N.y = y; + B.x = m_X1; B.y = m_Y1; + E.x = m_X2; E.y = m_Y2; + return IsLine(N, B, E, 5) ? HT_I : HT_NONE; +} + +void __fastcall CDrawLine::Moving(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + if( !m_MF ){ + if( m_BX != x ) m_MF = 1; + if( m_BY != y ) m_MF = 1; + } + x -= m_BX; + y -= m_BY; + m_CX1 = m_X1 + x; + m_CX2 = m_X2 + x; + m_CY1 = m_Y1 + y; + m_CY2 = m_Y2 + y; + DrawCursor(); + m_Cursor = 1; +} + +void __fastcall CDrawLine::Move(int x, int y) +{ + m_X1 = m_CX1; + m_Y1 = m_CY1; + m_X2 = m_CX2; + m_Y2 = m_CY2; +} + +//--------------------------------------------------------------------------- +__fastcall CDrawBox::CDrawBox() +{ + m_Command = CM_BOX; +} + +int __fastcall CDrawBox::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + Normal(); + return ((m_X1 != m_X2)&&(m_Y1 != m_Y2)) ? TRUE : FALSE; +} + +static void __fastcall DBox(TCanvas *tp, int cmd, int x1, int y1, int x2, int y2) +{ + int xw = ABS(x2 - x1); + int yw = ABS(y2 - y1); + switch(cmd){ + case 0: + tp->MoveTo(x1, y1); + tp->LineTo(x2, y1); + tp->LineTo(x2, y2); + tp->LineTo(x1, y2); + tp->LineTo(x1, y1); + break; + case 1: + tp->RoundRect(x1, y1, x2, y2, xw/3, yw/3); + break; + case 2: + tp->RoundRect(x1, y1, x2, y2, xw/2, yw/2); + break; + case 3: + tp->RoundRect(x1, y1, x2, y2, xw*3/4, yw*3/4); + break; + case 4: + case 5: + tp->Ellipse(x1, y1, x2, y2); + break; + } +} + +void __fastcall CDrawBox::RoundRect(TCanvas *tp, int xw, int yw) +{ + if( m_LineStyle < 0 ) return; + + if( m_LineStyle >= 5 ){ + int e = (m_LineStyle == 5) ? 4 : 3; + tp->Pen->Style = psSolid; + tp->Pen->Width = 1; + int x1 = m_X1; + int y1 = m_Y1; + int x2 = m_X2; + int y2 = m_Y2; + int xxw = xw; + int yyw = yw; + TColor col = m_LineColor; + TColor tcol = m_LineColor == clBlack ? clWhite : clBlack; +// TColor tcol = TColor(DWORD(m_LineColor) ^ 0x00ffffff); + int i; + for( i = 0; i < e; i++ ){ + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->RoundRect(x1, y1, x2, y2, xxw, yyw); + x1--; y1--; + x2++; y2++; + xxw += 2; + yyw += 2; + } + x1 = m_X1+1; + y1 = m_Y1+1; + x2 = m_X2-1; + y2 = m_Y2-1; + xxw = xw; + yyw = yw; + for( i = 1; i < e; i++ ){ + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->RoundRect(x1, y1, x2, y2, xxw, yyw); + x1++; y1++; + x2--; y2--; + xxw -= 2; + yyw -= 2; + } + } + else { + tp->Pen->Style = m_LineStyle; + tp->Pen->Width = m_LineWidth; + tp->RoundRect(m_X1, m_Y1, m_X2, m_Y2, xw, yw); + } +} + +void __fastcall CDrawBox::Draw(TCanvas *tp) +{ + tp->Pen->Color = m_LineColor; + int xw = m_X2 - m_X1; + int yw = m_Y2 - m_Y1; + HBRUSH hold = (HBRUSH)::SelectObject(tp->Handle, GetStockObject(NULL_BRUSH)); //ja7ude 0521 + switch(m_BoxStyle){ + case 0: + RoundRect(tp, 0, 0); + break; + case 1: + RoundRect(tp, xw/3, yw/3); + break; + case 2: + RoundRect(tp, xw/2, yw/2); + break; + case 3: + RoundRect(tp, xw*3/4, yw*3/4); + break; + case 4: + case 5: + RoundRect(tp, xw, yw); + break; + } + ::SelectObject(tp->Handle, hold); +} + +void __fastcall CDrawBox::DrawSel(TCanvas *tp, int sw) +{ + if( m_BoxStyle ){ + Draw(tp); + } + tp->Brush->Color = clWhite; + tp->Pen->Color = clBlue; + tp->Pen->Width = 1; + tp->Pen->Style = psDot; + tp->MoveTo(m_X1, m_Y1); + int rop = ::SetROP2(tp->Handle, sw ? R2_NOT : R2_COPYPEN); + tp->LineTo(m_X2, m_Y1); + tp->LineTo(m_X2, m_Y2); + tp->LineTo(m_X1, m_Y2); + tp->LineTo(m_X1, m_Y1); + ::SetROP2(tp->Handle, rop); +} + +void __fastcall CDrawBox::DrawCursor(void) +{ + pc->Pen->Style = psDot; + pc->Pen->Width = 1; + pc->MoveTo(m_CX1, m_CY1); + int Sop = ::SetROP2(pc->Handle, R2_NOT); + pc->LineTo(m_CX2, m_CY1); + pc->LineTo(m_CX2, m_CY2); + pc->LineTo(m_CX1, m_CY2); + pc->LineTo(m_CX1, m_CY1); + ::SetROP2(pc->Handle, Sop); +} + +void __fastcall CDrawBox::Making(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + m_CX2 = x; + m_CY2 = y; + DrawCursor(); + m_Cursor = 1; +} + +int __fastcall CDrawBox::HitTest(int x, int y) +{ + POINT N; + POINT B, E; + N.x = x; N.y = y; + B.x = m_X1; B.y = m_Y1; + E.x = m_X2; E.y = m_Y1; + int r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_LT; + case HT_P2: + return HT_RT; + default: + return HT_T; + } + } + B.x = m_X2; B.y = m_Y1; + E.x = m_X2; E.y = m_Y2; + r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_RT; + case HT_P2: + return HT_RB; + default: + return HT_R; + } + } + B.x = m_X2; B.y = m_Y2; + E.x = m_X1; E.y = m_Y2; + r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_RB; + case HT_P2: + return HT_LB; + default: + return HT_B; + } + } + B.x = m_X1; B.y = m_Y2; + E.x = m_X1; E.y = m_Y1; + r = IsLine(N, B, E, 5); + if( r ){ + switch(r){ + case HT_P1: + return HT_LB; + case HT_P2: + return HT_LT; + default: + return HT_L; + } + } + if( (x < m_X1) || (x > m_X2) ) return FALSE; + if( (y < m_Y1) || (y > m_Y2) ) return FALSE; + return HT_I; +} + +void __fastcall CDrawBox::Moving(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + if( !m_MF ){ + if( m_BX != x ) m_MF = 1; + if( m_BY != y ) m_MF = 1; + } + x -= m_BX; + y -= m_BY; + int bs = 0; + switch(m_MC){ + case HT_LT: + m_CX1 = m_X1 + x; + m_CY1 = m_Y1 + y; + if( m_BoxStyle == 5 ) bs = 3; + break; + case HT_T: + m_CY1 = m_Y1 + y; + if( m_BoxStyle == 5 ) bs = 1; + break; + case HT_RT: + m_CX2 = m_X2 + x; + m_CY1 = m_Y1 + y; + if( m_BoxStyle == 5 ) bs = 1; + break; + case HT_R: + m_CX2 = m_X2 + x; + if( m_BoxStyle == 5 ) bs = 2; + break; + case HT_RB: + m_CX2 = m_X2 + x; + m_CY2 = m_Y2 + y; + if( m_BoxStyle == 5 ) bs = 2; + break; + case HT_B: + m_CY2 = m_Y2 + y; + if( m_BoxStyle == 5 ) bs = 1; + break; + case HT_LB: + m_CX1 = m_X1 + x; + m_CY2 = m_Y2 + y; + if( m_BoxStyle == 5 ) bs = 2; + break; + case HT_L: + m_CX1 = m_X1 + x; + if( m_BoxStyle == 5 ) bs = 2; + break; + default: + m_CX1 = m_X1 + x; + m_CX2 = m_X2 + x; + m_CY1 = m_Y1 + y; + m_CY2 = m_Y2 + y; + break; + } + switch(bs){ + case 1: + m_CX2 = m_CX1 + (m_CY2 - m_CY1); + break; + case 2: + m_CY2 = m_CY1 + (m_CX2 - m_CX1); + break; + case 3: + m_CX1 = m_CX2 - (m_CY2 - m_CY1); + break; + } + DrawCursor(); + m_Cursor = 1; +} + +void __fastcall CDrawBox::Move(int x, int y) +{ + m_X1 = m_CX1; + m_Y1 = m_CY1; + m_X2 = m_CX2; + m_Y2 = m_CY2; + Normal(); + AdjustRect(); +} + +//--------------------------------------------------------------------------- +__fastcall CDrawBoxS::CDrawBoxS() +{ + m_Command = CM_BOXS; + m_LineStyle = TPenStyle(-1); +} + +void __fastcall CDrawBoxS::Draw(TCanvas *tp) +{ + tp->Brush->Color = m_LineColor; + tp->Pen->Color = m_LineColor; + tp->Pen->Style = psSolid; + tp->Pen->Style = m_LineStyle < 5 ? m_LineStyle : psSolid; + tp->Pen->Width = m_LineWidth; + if( m_BoxStyle ){ + tp->Pen->Style = m_LineStyle; + tp->Pen->Width = m_LineWidth; + DBox(tp, m_BoxStyle, m_X1, m_Y1, m_X2, m_Y2); + } + else { + TRect rc; + rc.Left = m_X1; rc.Top = m_Y1; + rc.Right = m_X2; rc.Bottom = m_Y2; + tp->FillRect(rc); + } + TColor col = m_LineColor; + m_LineColor = clWhite; + CDrawBox::Draw(tp); + m_LineColor = col; +} + +//--------------------------------------------------------------------------- +__fastcall CDrawTitle::CDrawTitle() +{ + m_Command = CM_TITLE; + m_Type = 1; + m_Col1 = sys.m_ColBar[0]; + m_Col2 = sys.m_ColBar[1]; + m_Col3 = sys.m_ColBar[2]; + m_Col4 = sys.m_ColBar[3]; + m_X1 = m_Y1 = 0; + m_X2 = 319; + m_Y2 = 15; + m_Ver = 3; + m_ColVert = 0; + m_Sound = "1356865313568888"; +// m_Sound = "5888531133865555"; +// m_Sound = "1588531133531111"; +// m_Sound = "1355135585313533"; + pBitmap = NULL; +} + +__fastcall CDrawTitle::~CDrawTitle() +{ + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } +} + +int __fastcall CDrawTitle::HitTest(int x, int y) +{ + int r = CDrawBox::HitTest(x, y); + switch(r){ + case 0: + return HT_NONE; + case HT_B: + return r; + default: + return HT_I; + } +}; + +void __fastcall CDrawTitle::Start(TCanvas *tp, int x, int y) +{ + pc = tp; + m_CY1 = m_Y1 = y; + m_CX1 = m_X1; + m_CX2 = m_X2; +} + +int __fastcall CDrawTitle::Finish(int x, int y) +{ + m_X1 = 0; + m_X2 = SXW - 1; + m_Y1 = y; + m_Y2 = y + 15; + return TRUE; +} + +void __fastcall CDrawTitle::FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off) +{ + TRect rc; + switch(sw){ + case 2: + rc.Left = m_X1; + rc.Top = m_Y1 - 16; + rc.Right = m_X2 + 1; + rc.Bottom = m_Y2 - 16; + break; + case 4: + rc.Left = m_X1; + rc.Top = m_Y1 * 240 / 256; + rc.Right = m_X2 + 1; + rc.Bottom = (m_Y2 * 240 / 256); + break; + case -1: + rc.Left = m_X1; + rc.Top = m_Y1 + off; + rc.Right = (m_X2 + 1); + rc.Bottom = m_Y2 + off; + break; + default: + rc.Left = m_X1 * sx; + rc.Top = m_Y1 * sy; + rc.Right = (m_X2 + 1) * sx; + rc.Bottom = m_Y2 * sy; + break; + } + rc.Bottom++; + tp->Brush->Color = col; + tp->Pen->Color = col; + tp->FillRect(rc); +} + +void __fastcall CDrawTitle::Draw(TCanvas *tp) +{ + m_X2 = SXW - 1; + int x, y; + int X1, X2, Y1, Y2; + int XW, YW; + tp->Pen->Style = psSolid; + switch(m_Type){ + case 0: + { + TRect rc; + rc.Top = m_Y1; + rc.Left = m_X1; + rc.Right = m_X2 + 1; + rc.Bottom = m_Y2 + 1; + tp->Brush->Style = bsSolid; + tp->Brush->Color = m_Col1; + tp->FillRect(rc); + } + break; + case 1: + if( m_ColVert ){ + for( y = m_Y1; y <= m_Y2; y++ ){ + tp->Pen->Color = GetCol(m_Col1, m_Col2, y, m_Y2); + tp->MoveTo(m_X1, y); tp->LineTo(m_X2+1, y); + } + } + else { + for( x = m_X1; x <= m_X2; x++ ){ + tp->Pen->Color = GetCol(m_Col1, m_Col2, x, m_X2); + tp->MoveTo(x, m_Y1); tp->LineTo(x, m_Y2+1); + } + } + break; + case 2: + if( m_ColVert ){ + YW = (m_Y2 - m_Y1) / 3; + Y1 = YW + m_Y1; + Y2 = YW + Y1; + for( y = m_Y1; y < Y1; y++ ){ + tp->Pen->Color = GetCol(m_Col1, m_Col2, y - m_Y1, YW); + tp->MoveTo(m_X1, y); tp->LineTo(m_X2+1, y); + } + for( ; y < Y2; y++ ){ + tp->Pen->Color = GetCol(m_Col2, m_Col3, y - Y1, YW); + tp->MoveTo(m_X1, y); tp->LineTo(m_X2+1, y); + } + for( ; y <= m_Y2; y++ ){ + tp->Pen->Color = GetCol(m_Col3, m_Col4, y - Y2, YW); + tp->MoveTo(m_X1, y); tp->LineTo(m_X2+1, y); + } + } + else { + XW = (m_X2 - m_X1) / 3; + X1 = XW + m_X1; + X2 = XW + X1; + for( x = m_X1; x < X1; x++ ){ + tp->Pen->Color = GetCol(m_Col1, m_Col2, x - m_X1, XW); + tp->MoveTo(x, m_Y1); tp->LineTo(x, m_Y2+1); + } + for( ; x < X2; x++ ){ + tp->Pen->Color = GetCol(m_Col2, m_Col3, x - X1, XW); + tp->MoveTo(x, m_Y1); tp->LineTo(x, m_Y2+1); + } + for( ; x <= m_X2; x++ ){ + tp->Pen->Color = GetCol(m_Col3, m_Col4, x - X2, XW); + tp->MoveTo(x, m_Y1); tp->LineTo(x, m_Y2+1); + } + } + break; + case 3: + if( pBitmap != NULL ){ + if( pBitmap->Height != (m_Y2 - m_Y1 + 1) ){ + TRect rc; + rc.Left = m_X1; rc.Top = m_Y1; + rc.Right = m_X2 + 1; + rc.Bottom = m_Y2 + 1; + int Sop = ::SetStretchBltMode(tp->Handle, HALFTONE); + tp->StretchDraw(rc, pBitmap); + ::SetStretchBltMode(tp->Handle, Sop); + } + else { + tp->Draw(m_X1, m_Y1, pBitmap); + } + } + break; + case 4: + { + const BYTE _ft[]={0, 29, 60, 92, 126, 162, 201, 242}; + LPCSTR p = m_Sound.c_str(); + DWORD col; + for( y = m_Y1; *p; p++, y++ ){ + if( (*p >= '1') && (*p <= '8') ){ + col = _ft[(*p & 0x0f) - 1]; + tp->Pen->Color = TColor(col + (col * 256) + (col * 65536)); + tp->MoveTo(m_X1, y); tp->LineTo(m_X2+1, y); + } + } + } + break; + } +} + +void __fastcall CDrawTitle::DrawFast(TCanvas *tp) +{ + m_X2 = SXW - 1; + TRect rc; + rc.Left = m_X1; + rc.Top = m_Y1; + rc.Right = m_X2 + 1; + rc.Bottom = m_Y2; + tp->Brush->Color = m_Col1; + tp->Pen->Color = m_Col1; + tp->FillRect(rc); +} + +void __fastcall CDrawTitle::Moving(int x, int y) +{ + if( m_Cursor ) DrawCursor(); + if( !m_MF ){ + if( m_BY != y ) m_MF = 1; + } + y -= m_BY; + int h = m_Y2 - m_Y1; + switch(m_MC){ + case HT_I: + y += m_Y1; + if( y < 0 ) y = 0; + if( y > (SYW - h) ) y = SYW - h; + m_CY1 = y; + m_CY2 = m_CY1 + h; + break; + case HT_B: + y += m_Y2; + if( y < 0 ) y = 0; + if( y > (SYW-1) ) y = SYW-1; + if( y != m_CY1 ) m_CY2 = y; + break; + } + DrawCursor(); + m_Cursor = 1; +} + +void __fastcall CDrawTitle::StartMove(TCanvas *tp, int x, int y, int code) +{ + pc = tp; + m_BY = y; + m_MF = 0; + m_MC = code; + m_CX1 = m_X1; + m_CX2 = m_X2; + m_Cursor = 0; +} + +void __fastcall CDrawTitle::Move(int x, int y) +{ + if( m_CY1 < m_CY2 ){ + m_Y1 = m_CY1; + m_Y2 = m_CY2; + } + else { + m_Y1 = m_CY2; + m_Y2 = m_CY1; + } +} + +void __fastcall CDrawTitle::Copy(CDraw *dp) +{ + CDrawBox::Copy(dp); + + CDrawTitle *sp = (CDrawTitle *)dp; + m_Type = sp->m_Type; + m_ColVert = sp->m_ColVert; + m_Col1 = sp->m_Col1; + m_Col2 = sp->m_Col2; + m_Col3 = sp->m_Col3; + m_Col4 = sp->m_Col4; + m_Sound = sp->m_Sound; + if( sp->pBitmap != NULL ){ + if( pBitmap == NULL ){ + pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + } + pBitmap->Assign(sp->pBitmap); + } + else if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } +} + +int __fastcall CDrawTitle::Edit(void) +{ + TColorBarDlg *pBox = new TColorBarDlg(Mmsstv); + int r = pBox->Execute(this); + delete pBox; + if( r == TRUE ){ + m_X2 = SXW - 1; + sys.m_ColBar[0] = m_Col1; + sys.m_ColBar[1] = m_Col2; + sys.m_ColBar[2] = m_Col3; + sys.m_ColBar[3] = m_Col4; + } + return r; +} + +void __fastcall CDrawTitle::SaveToStream(TStream *sp) +{ + m_Ver = 3; + CDrawBox::SaveToStream(sp); + + sp->Write(&m_Type, sizeof(m_Type)); + sp->Write(&m_ColVert, sizeof(m_ColVert)); + sp->Write(&m_Col1, sizeof(m_Col1)); + sp->Write(&m_Col2, sizeof(m_Col2)); + sp->Write(&m_Col3, sizeof(m_Col3)); + sp->Write(&m_Col4, sizeof(m_Col4)); + if( m_Type == 4 ) SaveString(sp, m_Sound); + if( m_Type == 3 ){ + SaveBitmap(sp, pBitmap); + } +} + +int __fastcall CDrawTitle::LoadFromStream(TCanvas *tp, TStream *sp) +{ + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) return FALSE; + + try { + if( m_Ver >= 1 ){ + sp->Read(&m_Type, sizeof(m_Type)); + if( m_Ver >= 2 ){ + sp->Read(&m_ColVert, sizeof(m_ColVert)); + } + sp->Read(&m_Col1, sizeof(m_Col1)); + sp->Read(&m_Col2, sizeof(m_Col2)); + sp->Read(&m_Col3, sizeof(m_Col3)); + sp->Read(&m_Col4, sizeof(m_Col4)); + if( (m_Ver >= 3) && (m_Type == 4) ){ + LoadString(sp, m_Sound); + } + if( m_Type == 3 ){ + if( pBitmap == NULL ){ + pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + } + LoadBitmap(sp, pBitmap); + } + } + return TRUE; + } + catch(...){ + return FALSE; + } +} +//--------------------------------------------------------------------------- +__fastcall CDrawText::CDrawText() +{ + m_Command = CM_TEXT; + + m_Grade = sys.m_TextGrade; + m_Shadow = sys.m_TextShadow; + m_Zero = sys.m_TextZero; + m_Rot = sys.m_TextRot; + m_RightAdj = 0; + m_X2 = m_Y2 = 0; + m_LineColor = clBlack; + m_LineStyle = psSolid; + m_Stack = sys.m_TextStack >> 16; + m_StackPara = sys.m_TextStack & 0x0000ffff; + m_Vert = sys.m_TextVert; + m_VertH = sys.m_TextVertH; + + m_Text = sys.m_TextList[0].c_str(); + m_Col1 = sys.m_ColText[0]; + m_Col2 = sys.m_ColText[1]; + m_Col3 = sys.m_ColText[2]; + m_Col4 = sys.m_ColText[3]; + m_ColS = sys.m_ColText[4]; + m_ColB = sys.m_ColText[5]; + + pFont = NULL; + pBitmap = NULL; + pBrushBitmap = NULL; + + m_PerSpect = 0; + m_sperspect.ax = 2.0; m_sperspect.ay = 6.0; + m_sperspect.px = 0.05; + m_sperspect.py = m_sperspect.pz = 0.0; + m_sperspect.rz = -180; m_sperspect.rx = -70; m_sperspect.ry = 0; + m_sperspect.v = 10; m_sperspect.s = 4.9; + + m_Ver = 7; +} + +//--------------------------------------------------------------------------- +__fastcall CDrawText::~CDrawText() +{ + if( pFont != NULL ){ + delete pFont; + pFont = NULL; + } + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } + if( pBrushBitmap != NULL ){ + delete pBrushBitmap; + pBrushBitmap = NULL; + } +} + +void __fastcall CDrawText::ReleaseResource(void) +{ + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } +} + +int __fastcall CDrawText::ZeroConv(BYTE charset, LPSTR s) +{ + int f = 0; + + char bf[1228]; + LPSTR t = bf; + LPSTR p = s; + for( ; *p; p++ ){ + if( *p == '0' ){ + switch(charset){ + case SHIFTJIS_CHARSET: + *t++ = 0x83; + *t++ = 0xd3; + break; + case HANGEUL_CHARSET: + *t++ = 0xa8; // 0xa9 + *t++ = 0xaa; + break; + case CHINESEBIG5_CHARSET: // 台湾 + *t++ = 0xa3; + *t++ = 0x58; + break; + case 134: // 中国語簡略 + *t++ = 0xa6; + *t++ = 0xd5; + break; + default: + if( (lcid == LANG_KOREAN) || (lcid == LANG_CHINESE) ){ + f++; + *t++ = '0'; + } + else { + *t++ = 'リ'; + } + break; + } + } + else { + *t++ = *p; + } + } + *t = 0; + StrCopy(s, bf, 1023); + return f; +} + +int __fastcall CDrawText::GetMaxWidth(int &n, LPCSTR p) +{ + n = 0; + int max = 0; + + char bf[4]; + while(*p){ + if( (_mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD) && *(p+1) ){ +// if( IsDBCSLeadByte(*(const unsigned char *)p) && *(p+1) ){ + bf[0] = *p++; + bf[1] = *p++; + bf[2] = 0; + } + else { + bf[0] = *p++; + bf[1] = 0; + } + int len = pc->TextWidth(bf); + if( max < len ){ + max = len; + } + n++; + } + return max; +} + +inline TXOut(TCanvas *cp, int x, int y, LPCSTR p){cp->TextOut(x, y, p); return 0;}; + +void __fastcall CDrawText::DrawTextVert(TCanvas *tp, int xc, int y, int fh, LPCSTR p) +{ + char bf[4]; + + int tm = ::SetBkMode(tp->Handle, TRANSPARENT); + while(*p){ + if( (_mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD) && *(p+1) ){ + bf[0] = *p++; + bf[1] = *p++; + bf[2] = 0; + } + else if( (*p == '0') && m_Zero ){ + bf[0] = 'リ'; + bf[1] = 0; + p++; + } + else { + bf[0] = *p++; + bf[1] = 0; + } + int FW = tp->TextWidth(bf); + int FH = tp->TextHeight(bf); +#if 1 + TXOut(tp, xc - (FW/2), y, bf); +#else + tp->TextOut(xc - (FW/2), y, bf); +#endif + y += (FH + fh); + } + ::SetBkMode(tp->Handle, tm); +} + +void __fastcall CDrawText::DrawTextHoriANSI(TCanvas *tp, int x, int y, LPCSTR p) +{ + char bf[4]; + + int tm = ::SetBkMode(tp->Handle, TRANSPARENT); + int FW; + double rot = m_Rot * PI/180.0; + while(*p){ + if( (_mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD) && *(p+1) ){ + bf[0] = *p++; + bf[1] = *p++; + bf[2] = 0; + } + else if( *p == '0' ){ + bf[0] = 'リ'; + bf[1] = 0; + p++; + } + else { + bf[0] = *p++; + bf[1] = 0; + } + FW = tp->TextWidth(bf); +#if 1 + TXOut(tp, x, y, bf); +#else + tp->TextOut(x, y, bf); +#endif + if( m_Rot ){ + x += FW * cos(rot); + y -= FW * sin(rot); + } + else { + x += FW; + } + } + ::SetBkMode(tp->Handle, tm); +} + +void __fastcall CDrawText::DrawText(TCanvas *cp, int x, int y, LPCSTR p, int zc) +{ + if( m_Vert ){ + DrawTextVert(cp, x, y, m_VertH, p); + } + else if( zc ){ + DrawTextHoriANSI(cp, x, y, p); + } + else { +#if 1 + TXOut(cp, x, y, p); +#else + cp->TextOut(x, y, p); +#endif +// DrawTextHoriANSI(cp, x, y, p); // test of Korean Windows + } +} + +Graphics::TBitmap * __fastcall CDrawText::DupeB(TColor col) +{ + MultProc(); + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmAuto; + Graphics::TBitmap *pBit = new Graphics::TBitmap(); +// AdjustBitmapFormat(pBit); + pBit->Assign(pBitmap); + MultProc(); + FillBitmap(pBit, col); + return pBit; +} + +Graphics::TBitmap * __fastcall CDrawText::ConvToDDB(Graphics::TBitmap *pBmp) +{ + if( (sys.m_BitPixel == 16) && (pBmp->PixelFormat == pf24bit) ){ + pBmp->Transparent = FALSE; + Graphics::TBitmap *pNew = DupeBitmap(pBmp, -1); + pNew->Canvas->Font->Assign(pBmp->Canvas->Font); + delete pBmp; + pBmp = pNew; + } + return pBmp; +} + +Graphics::TBitmap * __fastcall CDrawText::ConvToDIB(Graphics::TBitmap *pBmp) +{ + if( pBmp->PixelFormat != pf24bit ){ + pBmp->Transparent = FALSE; + Graphics::TBitmap *pNew = DupeBitmap(pBmp, pf24bit); + delete pBmp; + pBmp = pNew; + } + return pBmp; +} + +void __fastcall CDrawText::MakeBitmap(void) +{ + if( m_Text.IsEmpty() ) return; + char bf[1024]; + Mmsstv->MacroText(bf, m_Text.c_str(), sizeof(bf)-1); + int ZC = 0; + if( m_Zero ) ZC = ZeroConv(pFont->Charset, bf); + + CWaitCursor wait; + if( pBitmap != NULL ){ + delete pBitmap; + } + pc->Font->Assign(pFont); + int wx = (pFont->Size + 15)/ 16; + int x2 = m_X2; + int y2 = m_Y2; + if( m_Rot ){ + m_X1 = m_X; + m_Y1 = m_Y; + } + else { + m_X = m_X1; + m_Y = m_Y1; + } + if( m_Vert ){ + SetMBCP(pFont->Charset); + int len; + m_X2 = m_X1 + GetMaxWidth(len, bf); + m_Y2 = m_Y1 + ((pc->TextHeight(bf) + m_VertH) * len) + wx + wx; + } + else { + m_X2 = m_X1 + pc->TextWidth(bf) + wx + wx; + m_Y2 = m_Y1 + pc->TextHeight(bf) + wx; + if( ZC ) m_X2 += (pc->TextWidth("0") * ZC); + } + int xt, yt; + switch(m_Shadow){ + case 1: + xt = yt = m_LineWidth + 1; + break; + case 4: + case 5: + if( !m_Stack ){ + xt = yt = 0; + break; + } + case 6: + case 7: + xt = yt = 2; + break; + default: + xt = yt = 0; + break; + } + if( m_Vert ) xt += (m_X2-m_X1)/2; + if( m_Rot ){ + m_Y1 -= wx; + m_X1 -= wx; + m_X2 += wx; + m_Y2 += wx; + double s = 2 * PI * m_Rot / 360; + double cosk = cos(s); + double sink = sin(s); + int xc = (m_X1 + m_X2)/2; + int yc = (m_Y1 + m_Y2)/2; + POINT N[5]; + N[0].x = m_X1 - xc; + N[0].y = m_Y1 - yc; + N[1].x = m_X2 - xc; + N[1].y = m_Y1 - yc; + N[2].x = m_X2 - xc; + N[2].y = m_Y2 - yc; + N[3].x = m_X1 - xc; + N[3].y = m_Y2 - yc; + N[4].x = xt + m_X1 - xc; + N[4].y = yt + m_Y1 - yc; + int i; + for( i = 0; i < 5; i++ ){ + int x = N[i].x * cosk + N[i].y * sink; + int y = -N[i].x * sink + N[i].y * cosk; + N[i].x = x + xc; N[i].y = y + yc; + } + m_X1 = m_X2 = N[0].x; m_Y1 = m_Y2 = N[0].y; + for( i = 1; i < 4; i++ ){ + if( m_X1 > N[i].x ) m_X1 = N[i].x; + if( m_X2 < N[i].x ) m_X2 = N[i].x; + if( m_Y1 > N[i].y ) m_Y1 = N[i].y; + if( m_Y2 < N[i].y ) m_Y2 = N[i].y; + } + xt = N[4].x - m_X1; + yt = N[4].y - m_Y1; + } + switch(m_Shadow){ + case 0: + break; + case 1: + m_X2 += m_LineWidth + m_LineWidth + 2; + m_Y2 += m_LineWidth + m_LineWidth + 2; + break; + case 2: + case 3: + case 4: + case 5: + case 7: + m_X2 += wx; + m_Y2 += wx; + case 6: + m_X2 += wx + wx; + m_Y2 += wx; + break; + } + int ax, ay; + if( m_Stack ){ + ax = int(char(m_StackPara & 0x000000ff)); + ay = int(char((m_StackPara >> 8) & 0x000000ff)); + if( ax > 0 ){ + xt += ax; + } + m_X2 += ABS(ax); + if( ay > 0 ){ + yt += ay; + } + m_Y2 += ABS(ay); + ax = -ax; ay = -ay; + } + AdjustRect(); + TFontStyles ts = pFont->Style; + int fsw = FontStyle2Code(ts); + if( fsw & FSITALIC ) m_X2 += wx * 3; + int pf24 = sys.m_Temp24; + pBitmap = CreateBitmap(m_X2 - m_X1 + 1, m_Y2 - m_Y1 + 1, pf24 ? pf24bit : -1); + COLD cBack; + cBack.c = TransCol; + if( cBack.c == m_Col1 ){ + cBack.c = GetUniqueColor(m_Col1); + } + if( m_Shadow && (cBack.c == m_ColS) ){ + cBack.c = GetUniqueColor(cBack.c); + } + FillBitmap(pBitmap, cBack.c); + cBack.c = pBitmap->Canvas->Pixels[0][0]; + if( m_RightAdj ){ + if( m_Vert && y2 ){ + y2 = m_Y2 - y2; + m_Y1 -= y2; m_Y2 -= y2; + } + else if( x2 ){ + x2 = m_X2 - x2; + m_X1 -= x2; m_X2 -= x2; + } + } + MultProc(); + + if( m_Rot || sys.m_DisFontSmooth ){ + LOGFONT lf; + memset(&lf, 0, sizeof(lf)); + lf.lfHeight = pFont->Height; + lf.lfWidth = 0; + lf.lfEscapement = m_Rot * 10; + lf.lfOrientation = m_Rot * 10; + lf.lfWeight = fsw & FSBOLD ? 700 : 400; + lf.lfItalic = BYTE(fsw & FSITALIC ? TRUE : FALSE); + lf.lfUnderline = BYTE(fsw & FSUNDERLINE ? TRUE : FALSE); + lf.lfStrikeOut = BYTE(fsw & FSSTRIKEOUT ? TRUE : FALSE); + lf.lfCharSet = pFont->Charset; + lf.lfOutPrecision = OUT_CHARACTER_PRECIS; + lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf.lfQuality = BYTE(sys.m_DisFontSmooth ? NONANTIALIASED_QUALITY : PROOF_QUALITY); + lf.lfPitchAndFamily = DEFAULT_PITCH; + strcpy(lf.lfFaceName, AnsiString(pFont->Name).c_str()); //ja7ude 0521 + + pBitmap->Canvas->Font->Handle = CreateFontIndirect(&lf); + } + else { + pBitmap->Canvas->Font = pFont; + } + pBitmap->Canvas->Font->Color = m_Col1; + DrawText(pBitmap->Canvas, xt, yt, bf, ZC); + + COLD col; + int x, y; + int XW = pBitmap->Width; + int YW = pBitmap->Height; + int XL = XW; + int XR = 0; + int YT = YW; + int YB = 0; + BYTE **pY = NULL; + BYTE *bp = NULL; + BYTE *sp; + BYTE *wp; + if( m_Grade || m_Shadow ){ + bp = new BYTE[XW * YW]; + wp = bp; + if( pf24 ){ + col.d = 0; + pY = new BYTE*[YW]; + for( y = 0; y < YW; y++ ){ + sp = (BYTE *)pBitmap->ScanLine[y]; + pY[y] = sp; + for( x = 0; x < XW; x++, wp++ ){ + col.b.b = *sp++; + col.b.g = *sp++; + col.b.r = *sp++; + if( col.c != cBack.c ){ + if( XL > x ) XL = x; + if( XR < x ) XR = x; + if( YT > y ) YT = y; + if( YB < y ) YB = y; + *wp = 1; + } + else { + *wp = 0; + } + } + } + } + else { + for( y = 0; y < YW; y++ ){ + for( x = 0; x < XW; x++, wp++ ){ + if( pBitmap->Canvas->Pixels[x][y] != cBack.c ){ + if( XL > x ) XL = x; + if( XR < x ) XR = x; + if( YT > y ) YT = y; + if( YB < y ) YB = y; + *wp = 1; + } + else { + *wp = 0; + } + } + } + } + MultProc(); + } + int X1, X2, Y1, Y2; + switch(m_Grade){ + case 0: + if( m_Shadow ){ + col.c = m_Col1; + if( pf24 ){ + for( y = YT; y <= YB; y++ ){ + sp = &bp[y*XW + XL]; +// wp = (BYTE *)pBitmap->ScanLine[y] + (XL * 3); + wp = (BYTE *)pY[y] + (XL * 3); + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp++ = col.b.r; + } + else { + wp += 3; + } + } + } + } + else { + for( y = YT; y <= YB; y++ ){ + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + } + } + break; + case 1: + if( pf24 ){ + X1 = (XR - XL) / 3; + for( x = XL; x < X1+XL; x++ ){ + col.c = GetCol(m_Col1, m_Col2, x - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + } + } + } + MultProc(); + X2 = X1+X1; + for( ; x < X2+XL; x++ ){ + col.c = GetCol(m_Col2, m_Col3, x - X1 - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + } + } + } + MultProc(); + for( ; x <= XR; x++ ){ + col.c = GetCol(m_Col3, m_Col4, x - X2 - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + } + } + } + } + else { + X1 = (XR - XL) / 3; + for( x = XL; x < X1+XL; x++ ){ + col.c = GetCol(m_Col1, m_Col2, x - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + MultProc(); + X2 = X1+X1; + for( ; x < X2+XL; x++ ){ + col.c = GetCol(m_Col2, m_Col3, x - X1 - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + MultProc(); + for( ; x <= XR; x++ ){ + col.c = GetCol(m_Col3, m_Col4, x - X2 - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + } + break; + case 2: + if( pf24 ){ + Y1 = (YB - YT) / 3; + for( y = YT; y < Y1+YT; y++ ){ + col.c = GetCol(m_Col1, m_Col2, y - YT, Y1); + sp = &bp[y*XW + XL]; +// wp = (BYTE *)pBitmap->ScanLine[y] + (XL * 3); + wp = (BYTE *)pY[y] + (XL * 3); + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp++ = col.b.r; + } + else { + wp += 3; + } + } + } + MultProc(); + Y2 = Y1+Y1; + for( ; y < Y2 + YT; y++ ){ + col.c = GetCol(m_Col2, m_Col3, y - Y1 - YT, Y1); + sp = &bp[y*XW + XL]; +// wp = (BYTE *)pBitmap->ScanLine[y] + (XL * 3); + wp = (BYTE *)pY[y] + (XL * 3); + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp++ = col.b.r; + } + else { + wp += 3; + } + } + } + MultProc(); + for( ; y <= YB; y++ ){ + col.c = GetCol(m_Col3, m_Col4, y - Y2 - YT, Y1); + sp = &bp[y*XW + XL]; +// wp = (BYTE *)pBitmap->ScanLine[y] + (XL * 3); + wp = (BYTE *)pY[y] + (XL * 3); + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp++ = col.b.r; + } + else { + wp += 3; + } + } + } + } + else { + Y1 = (YB - YT) / 3; + for( y = YT; y < Y1+YT; y++ ){ + col.c = GetCol(m_Col1, m_Col2, y - YT, Y1); + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + MultProc(); + Y2 = Y1+Y1; + for( ; y < Y2 + YT; y++ ){ + col.c = GetCol(m_Col2, m_Col3, y - Y1 - YT, Y1); + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + MultProc(); + for( ; y <= YB; y++ ){ + col.c = GetCol(m_Col3, m_Col4, y - Y2 - YT, Y1); + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + } + } + } + } + break; + case 3: + if( (pBrushBitmap != NULL) && pBrushBitmap->Width && pBrushBitmap->Height ){ + if( pf24 ){ + for( y = YT; y <= YB; y++ ){ + sp = &bp[y*XW + XL]; +// wp = (BYTE *)pBitmap->ScanLine[y] + (XL * 3); + wp = (BYTE *)pY[y] + (XL * 3); + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + col.c = pBrushBitmap->Canvas->Pixels[x % pBrushBitmap->Width][y % pBrushBitmap->Height]; + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp++ = col.b.r; + } + else { + wp += 3; + } + } + } + } + else { + for( y = YT; y <= YB; y++ ){ + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = pBrushBitmap->Canvas->Pixels[x % pBrushBitmap->Width][y % pBrushBitmap->Height]; + } + } + } + } + } + break; + } + + MultProc(); + + Graphics::TBitmap *pBit; + int f, lw; + switch(m_Shadow){ + case 1: + // if( wx > 1 ) wx--; + col.c = m_ColS; + lw = m_LineWidth; +_sh1: + if( pf24 ){ + for( x = 0; x < XW; x++ ){ + f = 0; + sp = &bp[x]; + for( y = 0; y < YW; y++, sp += XW ){ + if( *sp ){ + f = lw; + } + else if( f ){ +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + *sp = 1; + f--; + } + } + f = 0; + y = YW - 1; + sp = &bp[y*XW+x]; + for( ; y > 0; y--, sp -= XW ){ + if( *sp ){ + f = lw; + } + else if( f ){ +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + *sp = 1; + f--; + } + } + } + MultProc(); + for( y = 0; y < YW; y++ ){ + f = 0; + sp = &bp[y*XW]; +// wp = (BYTE *)pBitmap->ScanLine[y]; + wp = (BYTE *)pY[y]; + for( x = 0; x < XW; x++, sp++, wp+=3 ){ + if( *sp ){ + f = lw; + } + else if( f ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + wp -= 2; + *sp = 1; + f--; + } + } + f = 0; + x = XW - 1; + sp = &bp[y*XW+x]; +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + for( ; x > 0; x--, sp--, wp-=3 ){ + if( *sp ){ + f = lw; + } + else if( f ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + wp -= 2; + f--; + } + } + } + } + else { + for( x = 0; x < XW; x++ ){ + f = 0; + sp = &bp[x]; + for( y = 0; y < YW; y++, sp += XW ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + *sp = 1; + f--; + } + } + f = 0; + y = YW - 1; + sp = &bp[y*XW+x]; + for( ; y > 0; y--, sp -= XW ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + *sp = 1; + f--; + } + } + } + MultProc(); + for( y = 0; y < YW; y++ ){ + f = 0; + sp = &bp[y*XW]; + for( x = 0; x < XW; x++, sp++ ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + *sp = 1; + f--; + } + } + f = 0; + x = XW - 1; + sp = &bp[y*XW+x]; + for( ; x > 0; x--, sp-- ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + f--; + } + } + } + } + break; + case 2: + if( pf24 ) pBitmap = ConvToDDB(pBitmap); + pBit = DupeB(cBack.c); + pBit->Canvas->Font = pBitmap->Canvas->Font; + pBit->Canvas->Font->Color = m_ColS; + DrawText(pBit->Canvas, xt+wx, yt+wx, bf, ZC); + pBit->Canvas->Draw(0, 0, pBitmap); + delete pBitmap; + pBitmap = pBit; + break; + case 3: + if( pf24 ){ + col.c = m_ColS; + for( x = 0; x < XW; x++ ){ + f = 0; + sp = &bp[x]; + for( y = 0; y < YW; y++, sp += XW ){ + if( *sp ){ + f = wx; + } + else if( f ){ +// wp = (BYTE *)pBitmap->ScanLine[y] + (x * 3); + wp = (BYTE *)pY[y] + (x * 3); + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + *sp = 1; + f--; + } + } + } + MultProc(); + for( y = 0; y < YW; y++ ){ + f = 0; + sp = &bp[y*XW]; +// wp = (BYTE *)pBitmap->ScanLine[y]; + wp = (BYTE *)pY[y]; + for( x = 0; x < XW; x++, sp++, wp+=3 ){ + if( *sp ){ + f = wx; + } + else if( f ){ + *wp++ = col.b.b; + *wp++ = col.b.g; + *wp = col.b.r; + wp -= 2; + f--; + } + } + } + } + else { + col.c = m_ColS; + for( x = 0; x < XW; x++ ){ + f = 0; + sp = &bp[x]; + for( y = 0; y < YW; y++, sp += XW ){ + if( *sp ){ + f = wx; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + *sp = 1; + f--; + } + } + } + MultProc(); + for( y = 0; y < YW; y++ ){ + f = 0; + sp = &bp[y*XW]; + for( x = 0; x < XW; x++, sp++ ){ + if( *sp ){ + f = wx; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col.c; + f--; + } + } + } + } + break; + case 4: + case 5: + case 6: + if( pf24 ) pBitmap = ConvToDDB(pBitmap); + pBit = DupeB(cBack.c); + pBit->Canvas->Font = pBitmap->Canvas->Font; + { + if( !m_Stack ){ + switch(m_Shadow){ + case 4: + ax = wx; + ay = wx*2; + break; + case 5: + ax = wx*2; + ay = wx; + break; + case 6: + ax = wx*2; + ay = wx*2; + break; + } + ax++; ay++; + } + int m = ABS(ax); + if( ABS(ax) < ABS(ay) ) m = ABS(ay); + if( m_StackPara ){ + for( f = m; f > 0; f-- ){ + col.c = GetCol(m_ColS, m_ColB, f-1, m); + pBit->Canvas->Font->Color = col.c; + ::SetBkMode(pBit->Canvas->Handle, TRANSPARENT); + DrawText(pBit->Canvas, xt+(f*ax/m), yt+(f*ay/m), bf, ZC); + } + } + MultProc(); + pBit->Canvas->Draw(0, 0, pBitmap); + delete pBitmap; + pBitmap = pBit; + } + if( (m_Shadow == 6) || m_Stack ){ + lw = 1; + switch(m_Shadow){ + case 4: + col.c = clBlack; + break; + case 5: + col.c = clWhite; + break; + case 6: + col.c = m_LineColor; + lw = m_LineWidth; + break; + } + MultProc(); + if( pf24 ) pBitmap = ConvToDIB(pBitmap); + if( pY ){ + for( y = 0; y < YW; y++ ){ + pY[y] = (BYTE *)pBitmap->ScanLine[y]; + } + } + goto _sh1; + } + break; + case 7: + if( pf24 ) pBitmap = ConvToDDB(pBitmap); + pBit = DupeB(cBack.c); + pBit->Canvas->Font = pBitmap->Canvas->Font; + pBit->Canvas->Font->Color = m_ColS; + ::SetBkMode(pBit->Canvas->Handle, TRANSPARENT); + DrawText(pBit->Canvas, xt-1, yt-1, bf, ZC); + pBit->Canvas->Font->Color = m_ColB; + ::SetBkMode(pBit->Canvas->Handle, TRANSPARENT); + DrawText(pBit->Canvas, xt+1, yt+1, bf, ZC); + pBit->Canvas->Draw(0, 0, pBitmap); + delete pBitmap; + pBitmap = pBit; + break; + } + if( bp != NULL ) delete bp; + if( pY != NULL ) delete pY; + if( m_Stack && m_StackPara && ((m_Shadow < 4) || (m_Shadow > 6)) ){ + MultProc(); + if( pf24 ) pBitmap = ConvToDDB(pBitmap); + pBit = DupeB(cBack.c); + int m = ABS(ax); + if( ABS(ax) < ABS(ay) ) m = ABS(ay); + for( f = m; f >= 0; f-- ){ + pBit->Canvas->Draw(f*ax/m, f*ay/m, pBitmap); + } + delete pBitmap; + pBitmap = pBit; + } + if( m_PerSpect ){ + MultProc(); + pBit = CreateBitmap(pBitmap->Width, pBitmap->Height, -1); + pBitmap->Transparent = FALSE; + Perspect(pBitmap, pBit, &m_sperspect, cBack.c); + delete pBitmap; + pBitmap = pBit; + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[0][0]; + } + else { + if( pf24 ) pBitmap = ConvToDDB(pBitmap); + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmAuto; + } + if( m_Vert ) SetMBCP(); +} + +#if 0 +void __fastcall CDrawText::MakeBitmap16(void) +{ + if( m_Text.IsEmpty() ) return; + char bf[1024]; + Mmsstv->MacroText(bf, m_Text.c_str(), sizeof(bf)-1); + int ZC = 0; + if( m_Zero ) ZC = ZeroConv(pFont->Charset, bf); + + CWaitCursor wait; + if( pBitmap != NULL ){ + delete pBitmap; + } + pc->Font->Assign(pFont); + int wx = (pFont->Size + 15)/ 16; + int x2 = m_X2; + int y2 = m_Y2; + if( m_Rot ){ + m_X1 = m_X; + m_Y1 = m_Y; + } + else { + m_X = m_X1; + m_Y = m_Y1; + } + if( m_Vert ){ + SetMBCP(pFont->Charset); + int len; + m_X2 = m_X1 + GetMaxWidth(len, bf); + m_Y2 = m_Y1 + ((pc->TextHeight(bf) + m_VertH) * len) + wx + wx; + } + else { + m_X2 = m_X1 + pc->TextWidth(bf) + wx + wx; + m_Y2 = m_Y1 + pc->TextHeight(bf) + wx; + if( ZC ) m_X2 += (pc->TextWidth("0") * ZC); + } + int xt, yt; + switch(m_Shadow){ + case 1: + xt = yt = m_LineWidth + 1; + break; + case 4: + case 5: + if( !m_Stack ){ + xt = yt = 0; + break; + } + case 6: + case 7: + xt = yt = 2; + break; + default: + xt = yt = 0; + break; + } + if( m_Vert ) xt += (m_X2-m_X1)/2; + if( m_Rot ){ + m_Y1 -= wx; + m_X1 -= wx; + m_X2 += wx; + m_Y2 += wx; + double s = 2 * PI * m_Rot / 360; + double cosk = cos(s); + double sink = sin(s); + int xc = (m_X1 + m_X2)/2; + int yc = (m_Y1 + m_Y2)/2; + POINT N[5]; + N[0].x = m_X1 - xc; + N[0].y = m_Y1 - yc; + N[1].x = m_X2 - xc; + N[1].y = m_Y1 - yc; + N[2].x = m_X2 - xc; + N[2].y = m_Y2 - yc; + N[3].x = m_X1 - xc; + N[3].y = m_Y2 - yc; + N[4].x = xt + m_X1 - xc; + N[4].y = yt + m_Y1 - yc; + int i; + for( i = 0; i < 5; i++ ){ + int x = N[i].x * cosk + N[i].y * sink; + int y = -N[i].x * sink + N[i].y * cosk; + N[i].x = x + xc; N[i].y = y + yc; + } + m_X1 = m_X2 = N[0].x; m_Y1 = m_Y2 = N[0].y; + for( i = 1; i < 4; i++ ){ + if( m_X1 > N[i].x ) m_X1 = N[i].x; + if( m_X2 < N[i].x ) m_X2 = N[i].x; + if( m_Y1 > N[i].y ) m_Y1 = N[i].y; + if( m_Y2 < N[i].y ) m_Y2 = N[i].y; + } + xt = N[4].x - m_X1; + yt = N[4].y - m_Y1; + } + switch(m_Shadow){ + case 0: + break; + case 1: + m_X2 += m_LineWidth + m_LineWidth + 2; + m_Y2 += m_LineWidth + m_LineWidth + 2; + break; + case 2: + case 3: + case 4: + case 5: + case 7: + m_X2 += wx; + m_Y2 += wx; + case 6: + m_X2 += wx + wx; + m_Y2 += wx; + break; + } + int ax, ay; + if( m_Stack ){ + ax = int(char(m_StackPara & 0x000000ff)); + ay = int(char((m_StackPara >> 8) & 0x000000ff)); + if( ax > 0 ){ + xt += ax; + } + m_X2 += ABS(ax); + if( ay > 0 ){ + yt += ay; + } + m_Y2 += ABS(ay); + ax = -ax; ay = -ay; + } + AdjustRect(); + TFontStyles ts = pFont->Style; + int fsw = FontStyle2Code(ts); + if( fsw & FSITALIC ) m_X2 += wx * 3; + pBitmap = CreateBitmap(m_X2 - m_X1 + 1, m_Y2 - m_Y1 + 1, -1); + TColor cBack = TransCol; + if( cBack == m_Col1 ){ + cBack = GetUniqueColor(m_Col1); + } + if( m_Shadow && (cBack == m_ColS) ){ + cBack = GetUniqueColor(cBack); + } + FillBitmap(pBitmap, cBack); + cBack = pBitmap->Canvas->Pixels[0][0]; + + if( m_RightAdj ){ + if( m_Vert && y2 ){ + y2 = m_Y2 - y2; + m_Y1 -= y2; m_Y2 -= y2; + } + else if( x2 ){ + x2 = m_X2 - x2; + m_X1 -= x2; m_X2 -= x2; + } + } + + MultProc(); + + if( m_Rot || sys.m_DisFontSmooth ){ + LOGFONT lf; + memset(&lf, 0, sizeof(lf)); + lf.lfHeight = pFont->Height; + lf.lfWidth = 0; + lf.lfEscapement = m_Rot * 10; + lf.lfOrientation = m_Rot * 10; + lf.lfWeight = fsw & FSBOLD ? 700 : 400; + lf.lfItalic = BYTE(fsw & FSITALIC ? TRUE : FALSE); + lf.lfUnderline = BYTE(fsw & FSUNDERLINE ? TRUE : FALSE); + lf.lfStrikeOut = BYTE(fsw & FSSTRIKEOUT ? TRUE : FALSE); + lf.lfCharSet = pFont->Charset; + lf.lfOutPrecision = OUT_CHARACTER_PRECIS; + lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf.lfQuality = BYTE(sys.m_DisFontSmooth ? NONANTIALIASED_QUALITY : PROOF_QUALITY); + lf.lfPitchAndFamily = DEFAULT_PITCH; + strcpy(lf.lfFaceName, pFont->Name.c_str()); + + pBitmap->Canvas->Font->Handle = CreateFontIndirect(&lf); + } + else { + pBitmap->Canvas->Font = pFont; + } + pBitmap->Canvas->Font->Color = m_Col1; + DrawText(pBitmap->Canvas, xt, yt, bf, ZC); + + TColor col; + int x, y; + int XW = pBitmap->Width; + int YW = pBitmap->Height; + int XL = XW; + int XR = 0; + int YT = YW; + int YB = 0; + BYTE *bp = NULL; + BYTE *sp; + if( m_Grade || m_Shadow ){ + bp = new BYTE[XW * YW]; + sp = bp; + for( y = 0; y < YW; y++ ){ + for( x = 0; x < XW; x++, sp++ ){ + if( pBitmap->Canvas->Pixels[x][y] != cBack ){ + if( XL > x ) XL = x; + if( XR < x ) XR = x; + if( YT > y ) YT = y; + if( YB < y ) YB = y; + *sp = 1; + } + else { + *sp = 0; + } + } + } + MultProc(); + } + int X1, X2, Y1, Y2; + switch(m_Grade){ + case 0: + if( m_Shadow ){ + for( y = YT; y <= YB; y++ ){ + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = m_Col1; + } + } + } + } + break; + case 1: + X1 = (XR - XL) / 3; + for( x = XL; x < X1+XL; x++ ){ + col = GetCol(m_Col1, m_Col2, x - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col; + } + } + } + MultProc(); + X2 = X1+X1; + for( ; x < X2+XL; x++ ){ + col = GetCol(m_Col2, m_Col3, x - X1 - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col; + } + } + } + MultProc(); + for( ; x <= XR; x++ ){ + col = GetCol(m_Col3, m_Col4, x - X2 - XL, X1); + sp = &bp[YT*XW + x]; + for( y = YT; y <= YB; y++, sp += XW ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col; + } + } + } + break; + case 2: + Y1 = (YB - YT) / 3; + for( y = YT; y < Y1+YT; y++ ){ + col = GetCol(m_Col1, m_Col2, y - YT, Y1); + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col; + } + } + } + MultProc(); + Y2 = Y1+Y1; + for( ; y < Y2 + YT; y++ ){ + col = GetCol(m_Col2, m_Col3, y - Y1 - YT, Y1); + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col; + } + } + } + MultProc(); + for( ; y <= YB; y++ ){ + col = GetCol(m_Col3, m_Col4, y - Y2 - YT, Y1); + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = col; + } + } + } + break; + case 3: + if( (pBrushBitmap != NULL) && pBrushBitmap->Width && pBrushBitmap->Height ){ + for( y = YT; y <= YB; y++ ){ + sp = &bp[y*XW + XL]; + for( x = XL; x <= XR; x++, sp++ ){ + if( *sp ){ + pBitmap->Canvas->Pixels[x][y] = pBrushBitmap->Canvas->Pixels[x % pBrushBitmap->Width][y % pBrushBitmap->Height]; + } + } + } + } + break; + } + + MultProc(); + + Graphics::TBitmap *pBit; + int f, lw; + switch(m_Shadow){ + case 1: + // if( wx > 1 ) wx--; + col = m_ColS; + lw = m_LineWidth; +_sh1: + for( x = 0; x < XW; x++ ){ + f = 0; + sp = &bp[x]; + for( y = 0; y < pBitmap->Height; y++, sp += XW ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col; + *sp = 1; + f--; + } + } + f = 0; + y = YW - 1; + sp = &bp[y*XW+x]; + for( ; y > 0; y--, sp -= XW ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col; + *sp = 1; + f--; + } + } + } + MultProc(); + for( y = 0; y < YW; y++ ){ + f = 0; + sp = &bp[y*XW]; + for( x = 0; x < XW; x++, sp++ ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col; + *sp = 1; + f--; + } + } + f = 0; + x = XW - 1; + sp = &bp[y*XW+x]; + for( ; x > 0; x--, sp-- ){ + if( *sp ){ + f = lw; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col; + f--; + } + } + } + break; + case 2: + pBit = DupeB(cBack); + pBit->Canvas->Font = pBitmap->Canvas->Font; + pBit->Canvas->Font->Color = m_ColS; + DrawText(pBit->Canvas, xt+wx, yt+wx, bf, ZC); + pBit->Canvas->Draw(0, 0, pBitmap); + delete pBitmap; + pBitmap = pBit; + break; + case 3: + col = m_ColS; + for( x = 0; x < XW; x++ ){ + f = 0; + sp = &bp[x]; + for( y = 0; y < YW; y++, sp += XW ){ + if( *sp ){ + f = wx; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col; + *sp = 1; + f--; + } + } + } + MultProc(); + for( y = 0; y < YW; y++ ){ + f = 0; + sp = &bp[y*XW]; + for( x = 0; x < XW; x++, sp++ ){ + if( *sp ){ + f = wx; + } + else if( f ){ + pBitmap->Canvas->Pixels[x][y] = col; + f--; + } + } + } + break; + case 4: + case 5: + case 6: + pBit = DupeB(cBack); + pBit->Canvas->Font = pBitmap->Canvas->Font; + { + if( !m_Stack ){ + switch(m_Shadow){ + case 4: + ax = wx; + ay = wx*2; + break; + case 5: + ax = wx*2; + ay = wx; + break; + case 6: + ax = wx*2; + ay = wx*2; + break; + } + ax++; ay++; + } + int m = ABS(ax); + if( ABS(ax) < ABS(ay) ) m = ABS(ay); + if( m_StackPara ){ + for( f = m; f > 0; f-- ){ + col = GetCol(m_ColS, m_ColB, f-1, m); + pBit->Canvas->Font->Color = col; + ::SetBkMode(pBit->Canvas->Handle, TRANSPARENT); + DrawText(pBit->Canvas, xt+(f*ax/m), yt+(f*ay/m), bf, ZC); + } + } + MultProc(); + pBit->Canvas->Draw(0, 0, pBitmap); + delete pBitmap; + pBitmap = pBit; + } + if( (m_Shadow == 6) || m_Stack ){ + lw = 1; + switch(m_Shadow){ + case 4: + col = clBlack; + break; + case 5: + col = clWhite; + break; + case 6: + col = m_LineColor; + lw = m_LineWidth; + break; + } + MultProc(); + goto _sh1; + } + break; + case 7: + pBit = DupeB(cBack); + pBit->Canvas->Font = pBitmap->Canvas->Font; + pBit->Canvas->Font->Color = m_ColS; + ::SetBkMode(pBit->Canvas->Handle, TRANSPARENT); + DrawText(pBit->Canvas, xt-1, yt-1, bf, ZC); + pBit->Canvas->Font->Color = m_ColB; + ::SetBkMode(pBit->Canvas->Handle, TRANSPARENT); + DrawText(pBit->Canvas, xt+1, yt+1, bf, ZC); + pBit->Canvas->Draw(0, 0, pBitmap); + delete pBitmap; + pBitmap = pBit; + break; + } + if( bp != NULL ) delete bp; + if( m_Stack && m_StackPara && ((m_Shadow < 4) || (m_Shadow > 6)) ){ + MultProc(); + pBit = DupeB(cBack); + int m = ABS(ax); + if( ABS(ax) < ABS(ay) ) m = ABS(ay); + for( f = m; f >= 0; f-- ){ + pBit->Canvas->Draw(f*ax/m, f*ay/m, pBitmap); + } + delete pBitmap; + pBitmap = pBit; + } + if( m_PerSpect ){ + MultProc(); + pBit = CreateBitmap(pBitmap->Width, pBitmap->Height, pBitmap->PixelFormat); + pBitmap->Transparent = FALSE; + Perspect(pBitmap, pBit, &m_sperspect, cBack); + delete pBitmap; + pBitmap = pBit; + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[0][0]; + } + else { + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmAuto; + } + if( m_Vert ) SetMBCP(); +} +#endif + +void __fastcall CDrawText::Move(int x, int y) +{ + if( (m_CX1 == m_CX2) || (m_CY1 == m_CY2) ){ + return; + } + if( m_MC != HT_I ){ + double dx = fabs(double(m_CX2 - m_CX1)/double(m_X2 - m_X1)); + double dy = fabs(double(m_CY2 - m_CY1)/double(m_Y2 - m_Y1)); + double dxx = fabs(dx - 1.0); + double dyy = fabs(dy - 1.0); + if( dxx < dyy ) dx = dy; + int sz = pFont->Size; + sz = sz * dx + 0.5; + if( sz && (sz != pFont->Size) ){ + pFont->Size = sz; + CDrawBox::Move(x, y); + MakeBitmap(); + } + } + else { + int xx = m_X1; + int yy = m_Y1; + CDrawBox::Move(x, y); + m_X += m_X1 - xx; + m_Y += m_Y1 - yy; + } +} + +int __fastcall CDrawText::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + m_X = m_X1; + m_Y = m_Y1; + pFont = new TFont(); + if( CurText.pFont != NULL ){ + pFont->Assign(CurText.pFont); + } + else { + pFont->Assign(pc->Font); + pFont->Size = 18; + } + MakeBitmap(); + return Edit(); +} + +void __fastcall CDrawText::Draw(TCanvas *tp) +{ + if( pBitmap == NULL ){ + MakeBitmap(); + if( pBitmap == NULL ) return; + } + tp->Draw(m_X1, m_Y1, pBitmap); +} + +void __fastcall CDrawText::DrawFast(TCanvas *tp) +{ +// CDrawBoxS::Draw(tp); + + if( m_Text.IsEmpty() ) return; + char bf[1024]; + Mmsstv->MacroText(bf, m_Text.c_str(), sizeof(bf)-1); + + tp->Font->Assign(pFont); + tp->Font = pFont; + tp->Font->Color = (m_Col1 != tp->Brush->Color) ? m_Col1 : TColor(m_Col1 ^ 0x00ffffff); + int tm = ::SetBkMode(tp->Handle, TRANSPARENT); + if( m_Vert ){ + DrawTextVert(tp, m_X1 + ((m_X2 - m_X1)/2), m_Y1, m_VertH, bf); + } + else { + int x = m_X1; + int y = m_Y1; + if( m_RightAdj ){ + x = m_X2 - tp->TextWidth(bf); + } + if( m_Shadow == 1 ){ + x += m_LineWidth + 1; + y += m_LineWidth + 1; + } + tp->TextOut(x, y, bf); + } + ::SetBkMode(tp->Handle, tm); +} + +int __fastcall CDrawText::Edit(void) +{ + TTextInDlg *pBox = new TTextInDlg(Mmsstv); + int r = pBox->Execute(this); + delete pBox; + if( r == TRUE ){ + if( m_Text.IsEmpty() ){ + r = FALSE; + } + else { + MakeBitmap(); + sys.m_ColText[0] = m_Col1; + sys.m_ColText[1] = m_Col2; + sys.m_ColText[2] = m_Col3; + sys.m_ColText[3] = m_Col4; + sys.m_ColText[4] = m_ColS; + sys.m_ColText[5] = m_ColB; + + sys.m_TextGrade = m_Grade; + sys.m_TextShadow = m_Shadow; + sys.m_TextZero = m_Zero; + sys.m_TextRot = m_Rot; + sys.m_TextVert = m_Vert; + sys.m_TextVertH = m_VertH; + sys.m_TextStack = (m_Stack << 16) | m_StackPara; + if( CurText.pFont == NULL ){ + CurText.pFont = new TFont; + } + CurText.pFont->Assign(pFont); + } + } + return r; +} + +void __fastcall CDrawText::UpdateFont(TFont *pf) +{ + if( pFont == NULL ){ + pFont = new TFont(); + } + pFont->Assign(pf); + MakeBitmap(); + if( CurText.pFont == NULL ){ + CurText.pFont = new TFont(); + } + CurText.pFont->Assign(pFont); +} + +void __fastcall CDrawText::SaveToStream(TStream *sp) +{ + m_Ver = 7; + CDrawBox::SaveToStream(sp); + + sp->Write(&m_Grade, sizeof(m_Grade)); + sp->Write(&m_Shadow, sizeof(m_Shadow)); + sp->Write(&m_Zero, sizeof(m_Zero)); + sp->Write(&m_Rot, sizeof(m_Rot)); + sp->Write(&m_X, sizeof(m_X)); + sp->Write(&m_Y, sizeof(m_Y)); + sp->Write(&m_RightAdj, sizeof(m_RightAdj)); + sp->Write(&m_Stack, sizeof(m_Stack)); + sp->Write(&m_StackPara, sizeof(m_StackPara)); + sp->Write(&m_PerSpect, sizeof(m_PerSpect)); + if( m_PerSpect ){ + sp->Write(&m_sperspect, sizeof(m_sperspect)); + } + sp->Write(&m_Vert, sizeof(m_Vert)); + sp->Write(&m_VertH, sizeof(m_VertH)); + + SaveString(sp, m_Text); + sp->Write(&m_Col1, sizeof(m_Col1)); + sp->Write(&m_Col2, sizeof(m_Col2)); + sp->Write(&m_Col3, sizeof(m_Col3)); + sp->Write(&m_Col4, sizeof(m_Col4)); + sp->Write(&m_ColS, sizeof(m_ColS)); + sp->Write(&m_ColB, sizeof(m_ColB)); + + AnsiString pFontName = pFont->Name; + SaveString(sp, pFontName); //ja7ude 0521 + int d = pFont->Charset; + sp->Write(&d, sizeof(d)); + d = pFont->Height; + if( d >= 0 ) d = -d; + sp->Write(&d, sizeof(d)); + TFontStyles ts = pFont->Style; + d = FontStyle2Code(ts); + sp->Write(&d, sizeof(d)); + d = 0; + sp->Write(&d, sizeof(d)); // dummy + if( m_Grade == 3 ){ + SaveBitmap(sp, pBrushBitmap); + } +} + +int __fastcall CDrawText::LoadFromStream(TCanvas *tp, TStream *sp) +{ + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) return FALSE; + + try { + sp->Read(&m_Grade, sizeof(m_Grade)); + sp->Read(&m_Shadow, sizeof(m_Shadow)); + if( m_Ver >= 1 ){ + sp->Read(&m_Zero, sizeof(m_Zero)); + } + if( m_Ver >= 2 ){ + sp->Read(&m_Rot, sizeof(m_Rot)); + sp->Read(&m_X, sizeof(m_X)); + sp->Read(&m_Y, sizeof(m_Y)); + } + else { + m_X = m_X1; m_Y = m_Y1; + } + if( m_Ver >= 4 ){ + sp->Read(&m_RightAdj, sizeof(m_RightAdj)); + } + else { + m_X2 = 0; + } + if( m_Ver >= 5 ){ + sp->Read(&m_Stack, sizeof(m_Stack)); + sp->Read(&m_StackPara, sizeof(m_StackPara)); + + sp->Read(&m_PerSpect, sizeof(m_PerSpect)); + if( m_PerSpect ){ + sp->Read(&m_sperspect, sizeof(m_sperspect)); + } + } + else { + m_Stack = 0; + m_PerSpect = 0; + } + if( m_Ver >= 6 ){ + sp->Read(&m_Vert, sizeof(m_Vert)); + sp->Read(&m_VertH, sizeof(m_VertH)); + } + else { + m_Vert = 0; m_VertH = -6; + } + LoadString(sp, m_Text); + sp->Read(&m_Col1, sizeof(m_Col1)); + sp->Read(&m_Col2, sizeof(m_Col2)); + sp->Read(&m_Col3, sizeof(m_Col3)); + sp->Read(&m_Col4, sizeof(m_Col4)); + sp->Read(&m_ColS, sizeof(m_ColS)); + if( m_Ver >= 3 ){ + sp->Read(&m_ColB, sizeof(m_ColB)); + } + if( pFont == NULL ){ + pFont = new TFont(); + } + + AnsiString as; + LoadString(sp, as); + pFont->Name = as; + int d; + sp->Read(&d, sizeof(d)); + pFont->Charset = BYTE(d); + sp->Read(&d, sizeof(d)); + if( d < 0 ){ + pFont->Height = d; + } + else { + pFont->Size = d; + } + sp->Read(&d, sizeof(d)); + TFontStyles ts = Code2FontStyle(d); + pFont->Style = ts; + sp->Read(&d, sizeof(d)); // dummy + if( m_Grade == 3 ){ + if( pBrushBitmap == NULL ){ + pBrushBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBrushBitmap); + } + LoadBitmap(sp, pBrushBitmap); + } + if( (m_Ver <= 6) && (m_Shadow == 6) && !m_Stack ){ + m_LineColor = m_ColS; + } + return TRUE; + } + catch(...){ + return FALSE; + } +} + + +void __fastcall CDrawText::Copy(CDraw *dp) +{ + Copy(dp, 1); +} + +void __fastcall CDrawText::Copy(CDraw *dp, int sw) +{ + CDrawBox::Copy(dp); + CDrawText *sp = (CDrawText *)dp; + + m_Grade = sp->m_Grade; + m_Shadow = sp->m_Shadow; + m_Zero = sp->m_Zero; + m_Rot = sp->m_Rot; + m_RightAdj = sp->m_RightAdj; + m_PerSpect = sp->m_PerSpect; + memcpy(&m_sperspect, &sp->m_sperspect, sizeof(m_sperspect)); + m_Stack = sp->m_Stack; + m_StackPara = sp->m_StackPara; + m_Vert = sp->m_Vert; + m_VertH = sp->m_VertH; + m_X = sp->m_X; + m_Y = sp->m_Y; + m_Text = sp->m_Text; + if( pFont == NULL ){ + pFont = new TFont; + } + pFont->Assign(sp->pFont); + if( sp->pBrushBitmap != NULL ){ + if( pBrushBitmap == NULL ){ + pBrushBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBrushBitmap); + } + pBrushBitmap->Assign(sp->pBrushBitmap); + } + else if( pBrushBitmap != NULL ){ + delete pBrushBitmap; + pBrushBitmap = NULL; + } + m_Col1 = sp->m_Col1; + m_Col2 = sp->m_Col2; + m_Col3 = sp->m_Col3; + m_Col4 = sp->m_Col4; + m_ColS = sp->m_ColS; + m_ColB = sp->m_ColB; + if( sw ){ + MakeBitmap(); + } + else if( pBitmap == NULL ){ + pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + } +} + +void __fastcall CDrawText::UpdateText(void) +{ + MakeBitmap(); +} + +void __fastcall CDrawText::UpdateTimeText(void) +{ + if( IsTimeMacro() ){ + MakeBitmap(); + } +} + +int __fastcall CDrawText::IsTimeMacro(void) +{ + char bf[1024]; + return Mmsstv->MacroText(bf, m_Text.c_str(), sizeof(bf)-1); +} + +//--------------------------------------------------------------------------- +__fastcall CDrawPic::CDrawPic() +{ + m_Command = CM_PIC; + m_Type = 0; + m_Shape = sys.m_PicShape; + m_Adjust = sys.m_PicAdjust; + m_TransPoint = 0; + m_Ver = 5; + pBitmap = NULL; + pLoadBitmap = NULL; + m_LineStyle = TPenStyle(sys.m_PicLineStyle); + m_LineColor = sys.m_PicLineColor; +} + +__fastcall CDrawPic::~CDrawPic() +{ + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } + if( pLoadBitmap != NULL ){ + delete pLoadBitmap; + pLoadBitmap = NULL; + } +} + +int __fastcall CDrawPic::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + Normal(); + if( !((m_X1 != m_X2) && (m_Y1 != m_Y2)) ) return FALSE; + CreateBitmap(); + StretchCopy(pBitmap, Mmsstv->pBitmapHistF, HALFTONE); + SetLoadBitmap(Mmsstv->pBitmapHistF); + return Edit(); +} + +void __fastcall CDrawPic::CreateBitmap(void) +{ + pBitmap = ::CreateBitmap(m_X2 - m_X1 - 1, m_Y2 - m_Y1 - 1, -1); +} + +int __fastcall CDrawPic::FinishR(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + Normal(); + if( !((m_X1 != m_X2) && (m_Y1 != m_Y2)) ) return FALSE; + CreateBitmap(); + return TRUE; +} + +void __fastcall CDrawPic::SetLoadBitmap(Graphics::TBitmap *pBmp) +{ + if( pLoadBitmap != NULL ) delete pLoadBitmap; + pLoadBitmap = DupeBitmap(pBmp, -1); +} + +void __fastcall CDrawPic::AdjustSize(void) +{ + ASSERT(pBitmap); + if( (m_Type == 2) && (sys.m_BitPixel == 16) ){ + pBitmap = RemakeBitmap(pBitmap, -1); + } + pBitmap->Width = m_X2 - m_X1 - 1; + pBitmap->Height = m_Y2 - m_Y1 - 1; + if( m_Type && (pLoadBitmap != NULL) ){ + if( m_Type == 2 ){ + StretchCopy(pBitmap, pLoadBitmap, COLORONCOLOR); + } + else { + StretchCopy(pBitmap, NULL, pLoadBitmap, NULL); + } + } + m_DrawPolygon.Copy(&m_Polygon); + m_DrawPolygon.XW = pBitmap->Width; + m_DrawPolygon.YW = pBitmap->Height; + m_DrawPolygon.Stretch(m_Polygon); +} + +//--------------------------------------------------------------------------- +int __fastcall CDrawPic::IsOrgSize(void) +{ + Graphics::TBitmap *pSrc = m_Type ? pLoadBitmap : Mmsstv->pBitmapHist; + if( pSrc == NULL ) return TRUE; + + if( (pBitmap->Width) != pSrc->Width ) return FALSE; + if( (pBitmap->Height) != pSrc->Height ) return FALSE; + return TRUE; +} + +//--------------------------------------------------------------------------- +void __fastcall CDrawPic::SetOrgSize(void) +{ + Graphics::TBitmap *pSrc = m_Type ? pLoadBitmap : Mmsstv->pBitmapHist; + if( pSrc == NULL ) return; + + m_X2 = m_X1 + pSrc->Width + 1; + m_Y2 = m_Y1 + pSrc->Height + 1; + AdjustSize(); +} + +//--------------------------------------------------------------------------- +void __fastcall CDrawPic::KeepAspect(void) +{ + Graphics::TBitmap *pSrc = m_Type ? pLoadBitmap : Mmsstv->pBitmapHist; + if( pSrc == NULL ) return; + + int lx = pBitmap->Width; + int ly = pBitmap->Height; + ::KeepAspect(lx, ly, pSrc->Width, pSrc->Height); + m_X2 = m_X1 + lx + 1; + m_Y2 = m_Y1 + ly + 1; + AdjustSize(); +} + +void __fastcall CDrawPic::Move(int x, int y) +{ + CDrawBox::Move(x, y); + if( (m_X1 == m_X2) || (m_Y1 == m_Y2) ){ + return; + } + if( m_MC != HT_I ){ + if( pBitmap == NULL ){ + pBitmap = new Graphics::TBitmap(); + } + else if( m_Type && (pLoadBitmap == NULL) ){ + pBitmap->Transparent = FALSE; + pLoadBitmap = DupeBitmap(pBitmap, -1); + } + AdjustBitmapFormat(pBitmap); + AdjustSize(); + } +} + +#if 0 +void __fastcall CDrawPic::RoundRect(TCanvas *tp, int xw, int yw) +{ + if( m_LineStyle < 0 ) return; + + if( m_LineStyle >= 5 ){ + int e = (m_LineStyle == 5) ? 4 : 3; + tp->Pen->Style = psSolid; + tp->Pen->Width = 1; + int x1 = m_X1; + int y1 = m_Y1; + int x2 = m_X2; + int y2 = m_Y2; + int xxw = xw; + int yyw = yw; + TColor col = m_LineColor; + TColor tcol = m_LineColor == clBlack ? clWhite : clBlack; +// TColor tcol = TColor(DWORD(m_LineColor) ^ 0x00ffffff); + int i; + for( i = 0; i < e; i++ ){ + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->RoundRect(x1, y1, x2, y2, xxw, yyw); + x1--; y1--; + x2++; y2++; + xxw += 2; + yyw += 2; + } + x1 = m_X1+1; + y1 = m_Y1+1; + x2 = m_X2-1; + y2 = m_Y2-1; + xxw = xw; + yyw = yw; + for( i = 1; i < e; i++ ){ + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->RoundRect(x1, y1, x2, y2, xxw, yyw); + x1++; y1++; + x2--; y2--; + xxw -= 2; + yyw -= 2; + } + } + else { + tp->Pen->Style = m_LineStyle; + tp->RoundRect(m_X1, m_Y1, m_X2, m_Y2, xw, yw); + } +} +#endif + +void __fastcall CDrawPic::Draw(TCanvas *tp) +{ + if( m_Type ){ + if( pBitmap == NULL ) return; + } + else { + if( pBitmap == NULL ) CreateBitmap(); + UpdateHistPic(Mmsstv->pBitmapHistF); + } + + if( m_Type == 2 ){ // オバーレイ + int x = m_TransPoint & 0x0000ffff; + int y = m_TransPoint >> 16; + if( m_TransPoint && (pLoadBitmap != NULL) ){ + x = x * pBitmap->Width / pLoadBitmap->Width; + y = y * pBitmap->Height / pLoadBitmap->Height; + } + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[x][y]; + tp->Draw(m_X1 + 1, m_Y1 + 1, pBitmap); + pBitmap->Transparent = FALSE; + } + else if( m_Shape ){ + TRect rc; + rc.Left = 0; rc.Top = 0; + rc.Right = pBitmap->Width; + rc.Bottom = pBitmap->Height; + + Graphics::TBitmap *pbmpS = DupeBitmap(pBitmap, pBitmap->PixelFormat); + MultProc(); + Graphics::TBitmap *pbmp = ::CreateBitmap(pBitmap->Width, pBitmap->Height, -1); + pbmp->Canvas->Brush->Color = tp->Brush->Color; + pbmp->Canvas->Pen->Color = tp->Brush->Color; + pbmp->Canvas->FillRect(rc); +#if 1 + TColor bcol = pbmp->Canvas->Pixels[0][0]; +#else + TColor bcol = tp->Brush->Color; +#endif + if( bcol != clBlack ){ + pbmp->Canvas->Brush->Color = clBlack; + pbmp->Canvas->Pen->Color = clBlack; + } + else { + pbmp->Canvas->Brush->Color = clYellow; + pbmp->Canvas->Pen->Color = clYellow; + } + switch(m_Shape){ + case 1: + case 2: + case 3: + case 4: + DBox(pbmp->Canvas, m_Shape, 0, 0, pBitmap->Width, pBitmap->Height); + break; + case 5: + pbmp->Canvas->Polygon((TPoint*)m_DrawPolygon.pBase, m_DrawPolygon.Cnt - 1); + break; + } + MultProc(); + pbmp->Transparent = TRUE; + pbmp->TransparentMode = tmFixed; + pbmp->TransparentColor = pbmp->Canvas->Brush->Color; + pbmpS->Canvas->Draw(0, 0, pbmp); + MultProc(); + pbmpS->Transparent = TRUE; + pbmpS->TransparentMode = tmFixed; + pbmpS->TransparentColor = bcol; + MultProc(); + tp->Draw(m_X1 + 1, m_Y1 + 1, pbmpS); + delete pbmp; + delete pbmpS; + MultProc(); +// if( (m_LineStyle >= 0) && ((m_LineColor != clWhite) || (m_LineStyle != psSolid)) ){ + if( m_LineStyle >= 0 ){ + tp->Pen->Color = m_LineColor; + tp->Pen->Style = m_LineStyle < 5 ? m_LineStyle : psSolid; + tp->Pen->Width = m_LineWidth; + tp->Brush->Style = bsClear; + switch(m_Shape){ + case 1: + RoundRect(tp, pBitmap->Width/3, pBitmap->Height/3); + break; + case 2: + RoundRect(tp, pBitmap->Width/2, pBitmap->Height/2); + break; + case 3: + RoundRect(tp, pBitmap->Width*3/4, pBitmap->Height*3/4); + break; + case 4: + RoundRect(tp, pBitmap->Width, pBitmap->Height); +// tp->Ellipse(m_X1, m_Y1, m_X2, m_Y2); + break; + case 5: + if( m_LineStyle >= 5 ){ + CPolygon Pol; + Pol.Copy(&m_DrawPolygon); + Pol.DrawOffsetSiege(tp, m_X1, m_Y1, m_LineColor, m_LineStyle); + } + else { + CPolygon Pol; + Pol.Copy(&m_DrawPolygon); + Pol.Stretch(m_X2-m_X1+1, m_Y2-m_Y1+1, Pol.XW, Pol.YW); + Pol.DrawOffset(tp, m_X1, m_Y1); + } + break; + } + tp->Brush->Style = bsSolid; + } + } + else { + tp->Draw(m_X1 + 1, m_Y1 + 1, pBitmap); + CDrawBox::Draw(tp); + } +} + +void __fastcall CDrawPic::FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off) +{ + if( pBitmap == NULL ) return; + if( m_Type == 2 ) return; + + TRect rc; + switch(sw){ + case 2: + rc.Left = m_X1; + rc.Top = m_Y1 - 16; + rc.Right = m_X2; + rc.Bottom = m_Y2 - 16; + break; + case 4: + rc.Left = m_X1; + rc.Top = m_Y1 * 240 / 256; + rc.Right = m_X2; + rc.Bottom = (m_Y2 * 240 / 256); + break; + case -1: + rc.Left = m_X1; + rc.Top = m_Y1 + off; + rc.Right = (m_X2 + 1); + rc.Bottom = m_Y2 + off; + break; + default: + rc.Left = m_X1 * sx; + rc.Top = m_Y1 * sy; + rc.Right = m_X2 * sx; + rc.Bottom = m_Y2 * sy; + break; + } + if( m_LineStyle == 5 ){ + rc.Top -= 2; + rc.Left -= 2; + rc.Right += 2; + rc.Bottom += 2; + } + else if( m_LineStyle == 6 ){ + rc.Top--; + rc.Left--; + } + else if( m_LineStyle < 0 ){ + rc.Top++; + rc.Left++; + } + tp->Brush->Color = col; + tp->Pen->Color = col; + switch(m_Shape){ + case 0: + tp->FillRect(rc); + break; + case 1: + tp->RoundRect(rc.Left, rc.Top, rc.Right, rc.Bottom, pBitmap->Width/3, pBitmap->Height/3); + break; + case 2: + tp->RoundRect(rc.Left, rc.Top, rc.Right, rc.Bottom, pBitmap->Width/2, pBitmap->Height/2); + break; + case 3: + tp->RoundRect(rc.Left, rc.Top, rc.Right, rc.Bottom, pBitmap->Width*3/4, pBitmap->Height*3/4); + break; + case 4: + tp->Ellipse(rc.Left, rc.Top, rc.Right, rc.Bottom); + break; + case 5: + { + CPolygon Pol; + Pol.Copy(&m_DrawPolygon); + Pol.Stretch(rc.Right-rc.Left, rc.Bottom-rc.Top, m_X2-m_X1, m_Y2-m_Y1); + Pol.DrawOffset(tp, rc.Left+1, rc.Top+1); + } + break; + } +} + +void __fastcall CDrawPic::UpdateHistPic(Graphics::TBitmap *pBmp) +{ + if( pBitmap == NULL ) return; + if( m_Type ) return; + + TRect rc; + rc.Left = 0; rc.Top = 0; + rc.Right = pBitmap->Width; + rc.Bottom = pBitmap->Height; + int Sop = ::SetStretchBltMode(pBitmap->Canvas->Handle, HALFTONE); + if( m_Adjust && (m_Shape != 5) ){ + int x; + int y = pBmp->Height - 1; + TColor col = pBmp->Canvas->Pixels[0][y]; + for( ; y >= 0; y-- ){ + if( pBmp->Canvas->Pixels[0][y] == col ){ + for( x = 1; x < pBmp->Width; x++ ){ + if( pBmp->Canvas->Pixels[x][y] != col ) break; + } + if( x != pBmp->Width ) break; + } + else { + break; + } + } + if( y == (pBmp->Height - 1) ){ + pBitmap->Canvas->StretchDraw(rc, (TGraphic*)pBmp); + } + else if( y ){ + TRect sc; + sc.Left = 0; sc.Top = 0; + sc.Right = pBmp->Width; + sc.Bottom = y + 1; + pBitmap->Canvas->CopyRect(rc, pBmp->Canvas, sc); + } + else { + FillBitmap(pBitmap, col); + } + } + else { + pBitmap->Canvas->StretchDraw(rc, (TGraphic*)pBmp); + } + ::SetStretchBltMode(pBitmap->Canvas->Handle, Sop); +} + +void __fastcall CDrawPic::SaveToStream(TStream *sp) +{ + m_Ver = 5; + CDrawBox::SaveToStream(sp); + + sp->Write(&m_Type, sizeof(m_Type)); + sp->Write(&m_Shape, sizeof(m_Shape)); + sp->Write(&m_Adjust, sizeof(m_Adjust)); + sp->Write(&m_TransPoint, sizeof(m_TransPoint)); + if( m_Type ){ + SaveBitmap(sp, pBitmap); + } + if( m_Shape == 5 ){ + m_Polygon.SaveToStream(sp); + } +} + +int __fastcall CDrawPic::LoadFromStream(TCanvas *tp, TStream *sp) +{ + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) return FALSE; + + try { + if( pLoadBitmap != NULL ){ + delete pLoadBitmap; + pLoadBitmap = NULL; + } + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } + CreateBitmap(); + if( m_Ver >= 1 ){ + sp->Read(&m_Type, sizeof(m_Type)); + if( m_Ver >= 2 ){ + sp->Read(&m_Shape, sizeof(m_Shape)); + } + if( m_Ver >= 4 ){ + sp->Read(&m_Adjust, sizeof(m_Adjust)); + } + if( m_Ver >= 5 ){ + sp->Read(&m_TransPoint, sizeof(m_TransPoint)); + } + if( m_Type ){ + LoadBitmap(sp, pBitmap); + if( (m_Type == 2) && (sys.m_BitPixel == 16) ){ + Graphics::TBitmap *pbmp = DupeBitmap(pBitmap, -1); + delete pBitmap; + pBitmap = pbmp; + } + } + if( m_Shape == 5 ){ + m_Polygon.LoadFromStream(sp); + m_DrawPolygon.Copy(&m_Polygon); + m_DrawPolygon.XW = pBitmap->Width; + m_DrawPolygon.YW = pBitmap->Height; + m_DrawPolygon.Stretch(m_Polygon); + } + } + return TRUE; + } + catch(...){ + return FALSE; + } +} + +void __fastcall CDrawPic::Copy(CDraw *dp) +{ + CDrawBox::Copy(dp); + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } + if( pLoadBitmap != NULL ){ + delete pLoadBitmap; + pLoadBitmap = NULL; + } + CreateBitmap(); + CDrawPic *sp = (CDrawPic *)dp; + m_Type = sp->m_Type; + m_Shape = sp->m_Shape; + m_Adjust = sp->m_Adjust; + m_TransPoint = sp->m_TransPoint; + if( m_Type && (sp->pBitmap != NULL) ){ + pBitmap->Assign(sp->pBitmap); + } + m_Polygon.Copy(&sp->m_Polygon); + m_DrawPolygon.Copy(&m_Polygon); + m_DrawPolygon.XW = pBitmap->Width; + m_DrawPolygon.YW = pBitmap->Height; + m_DrawPolygon.Stretch(m_Polygon); +} + +int __fastcall CDrawPic::Edit(void) +{ + TPicSelDlg *pBox = new TPicSelDlg(Mmsstv); + int r = pBox->Execute(this); + if( r == TRUE ){ + if( m_Shape != 5 ){ + sys.m_PicShape = m_Shape; + sys.m_PicAdjust = m_Adjust; + sys.m_PicLineStyle = m_LineStyle; + sys.m_PicLineColor = m_LineColor; + } + } + delete pBox; + return r; +} +/// +/// +//--------------------------------------------------------------------------- +__fastcall CDrawOle::CDrawOle() +{ + m_Command = CM_OLE; + m_Ver = 1; + m_Trans = 1; + m_Stretch = 0; + pContainer = NULL; + m_LineStyle = TPenStyle(-1); + m_LineColor = clWhite; + m_X1 = 0; m_Y1 = 0; + m_X2 = m_OrgXW = 160; m_Y2 = m_OrgYW = 128; + pOleView = NULL; +} +//--------------------------------------------------------------------------- +__fastcall CDrawOle::~CDrawOle() +{ + if( pContainer != NULL ){ + delete pContainer; + pContainer = NULL; + } + if( pOleView != NULL ){ + delete pOleView; + } +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + Normal(); + if( !((m_X1 != m_X2) && (m_Y1 != m_Y2)) ) return FALSE; + return Edit(); +} + +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall CDrawOle::MakeBitmap(void) +{ + if( pContainer == NULL ) return NULL; + + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + if( m_Stretch ){ + pContainer->SizeMode = smAutoSize; + pBitmap->Width = pContainer->ClientWidth; + pBitmap->Height = pContainer->ClientHeight; + } + else { + pBitmap->Width = m_X2 - m_X1; + pBitmap->Height = m_Y2 - m_Y1; + pContainer->ClientWidth = ABS(m_X2 - m_X1); + pContainer->ClientHeight = ABS(m_Y2 - m_Y1); + } + pBitmap->Transparent = FALSE; + pContainer->PaintTo(pBitmap->Canvas->Handle, 0, 0); + if( m_Stretch ){ + pContainer->SizeMode = smStretch; + Graphics::TBitmap *pBmp = CreateBitmap(m_X2 - m_X1, m_Y2 - m_Y1, -1); + TRect rc; + rc.Left = 0; rc.Right = pBmp->Width; + rc.Top = 0; rc.Bottom = pBmp->Height; + ::SetStretchBltMode(pBmp->Canvas->Handle, m_Trans ? COLORONCOLOR : HALFTONE); + pBmp->Canvas->StretchDraw(rc, pBitmap); + delete pBitmap; + pBitmap = pBmp; + } + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::Draw(TCanvas *tp) +{ + if( pContainer == NULL ) return; + + Graphics::TBitmap *pBitmap = MakeBitmap(); + if( m_Trans ){ + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[0][0]; + } + tp->Draw(m_X1, m_Y1, pBitmap); + delete pBitmap; + CDrawBox::Draw(tp); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::SaveToStream(TStream *sp) +{ + m_Ver = 1; + CDrawBox::SaveToStream(sp); + + sp->Write(&m_Trans, sizeof(m_Trans)); + sp->Write(&m_Stretch, sizeof(m_Stretch)); + pContainer->SaveToStream(sp); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::LoadFromStream(TCanvas *tp, TStream *sp) +{ + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) return FALSE; + + sp->Read(&m_Trans, sizeof(m_Trans)); + sp->Read(&m_Stretch, sizeof(m_Stretch)); + try { + MakeItem(); + pContainer->LoadFromStream(sp); + if( pContainer->Linked ) pContainer->UpdateObject(); + GetOrgSize(); + return TRUE; + } + catch(...){ + return FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::Copy(CDraw *dp) +{ + CDrawOle *sp = (CDrawOle *)dp; + if( sp->pContainer == NULL ) return; + + CDrawBox::Copy(dp); + m_Trans = sp->m_Trans; + m_Stretch = sp->m_Stretch; + m_OrgXW = sp->m_OrgXW; + m_OrgYW = sp->m_OrgYW; + TMemoryStream *tm = new TMemoryStream; + tm->Seek(0, soFromBeginning); + sp->pContainer->SaveToStream(tm); + MakeItem(); + tm->Seek(0, soFromBeginning); + pContainer->LoadFromStream(tm); + delete tm; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::GetOrgSize(void) +{ + pContainer->SizeMode = smAutoSize; + m_OrgXW = pContainer->ClientWidth; + m_OrgYW = pContainer->ClientHeight; + pContainer->SizeMode = smStretch; + if( m_OrgXW <= 0 ) m_OrgXW = 16; + if( m_OrgYW <= 0 ) m_OrgYW = 16; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::SetInitSize(void) +{ + int lx = 256; + int ly = 200; + if( lx > m_OrgXW ) lx = m_OrgXW; + if( ly > m_OrgYW ) ly = m_OrgYW; + ::KeepAspect(lx, ly, m_OrgXW, m_OrgYW); + if( m_X1 < 0 ){ + m_X1 = (Mmsstv->DrawMain.m_SX - lx) / 2; + m_Y1 = (Mmsstv->DrawMain.m_SY - ly) / 2; + } + m_X2 = m_X1 + lx; + m_Y2 = m_Y1 + ly; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::MakeItem(void) +{ + if( pContainer != NULL ){ + delete pContainer; + pContainer = NULL; + } + pContainer = new TOleContainer(Mmsstv); + pContainer->Visible = FALSE; + pContainer->Caption = "MMSSTV"; + pContainer->Parent = Mmsstv->PanelTemp; + pContainer->TabStop = FALSE; + pContainer->Left = 0; + pContainer->Top = 0; + pContainer->ClientWidth = 256; + pContainer->ClientHeight = 200; + pContainer->BorderStyle = bsNone; + pContainer->SizeMode = smStretch; + pContainer->AllowInPlace = FALSE; + pContainer->AutoActivate = aaManual; + pContainer->AllowActiveDoc = FALSE; + pContainer->AutoVerbMenu = FALSE; + pContainer->OldStreamFormat = FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::SyncVerb(void) +{ + while(pContainer->State == osOpen){ + Application->ProcessMessages(); + if( !Mmsstv->Timer->Enabled ) return; + MultProc(); + ::Sleep(1); + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::ViewVerb(int sw) +{ + if( sw ){ + if( pOleView == NULL ){ + pOleView = new TForm(Mmsstv); + pOleView->AutoScroll = FALSE; + pOleView->Scaled = FALSE; + } + pOleView->SetBounds(-m_OrgXW, -m_OrgYW, m_OrgXW, m_OrgYW); + pContainer->Parent = pOleView; + pContainer->Visible = TRUE; + pOleView->Visible = TRUE; + } + else if( pOleView != NULL ){ + pOleView->Visible = FALSE; + pContainer->Visible = FALSE; + pContainer->Parent = Mmsstv->PanelTemp; + delete pOleView; + pOleView = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::MakeError(void) +{ + delete pContainer; + pContainer = NULL; + InfoMB( "Can not handle the object." ); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::Edit(void) +{ + SetDisPaint(); + int First = FALSE; + CWaitCursor w; + if( pContainer == NULL ){ + First = TRUE; + MakeItem(); + MultProc(); + if( pContainer->InsertObjectDialog() != TRUE ){ + MultProc(); + ResDisPaint(); + return FALSE; + } + } + MultProc(); + try { + if( !First || !pContainer->Linked ){ + pContainer->AllowInPlace = FALSE; + ViewVerb(1); + pContainer->DoVerb(ovShow); + SyncVerb(); + ViewVerb(0); + } + GetOrgSize(); + if( First ){ + SetInitSize(); + } + } + catch(...){ + ViewVerb(0); + if( First ){ + MakeError(); + } + } + ResDisPaint(); + return (pContainer != NULL) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::LoadFromFile(int x, int y, LPCSTR pName) +{ + int r = TRUE; + CWaitCursor w; + + MakeItem(); + m_X1 = x; + m_Y1 = y; + try { + MultProc(); + pContainer->CreateObjectFromFile(pName, FALSE); + MultProc(); + GetOrgSize(); + SetInitSize(); + } + catch(...){ + MakeError(); + r = FALSE; + } + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::LoadFromBitmap(int x, int y, Graphics::TBitmap *pBmp) +{ + CWaitCursor w; + + char name[256]; + sprintf(name, "%sTEMP.bmp", BgnDir); + if( SaveBitmap24(pBmp, name) == TRUE ){ + LoadFromFile(x, y, name); + } + unlink(name); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::Paste(void) +{ + int r = TRUE; + MakeItem(); + try { + pContainer->Paste(); + GetOrgSize(); + SetInitSize(); + } + catch(...){ + MakeError(); + r = FALSE; + } + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::DoPrimary(void) +{ + if( pContainer != NULL ){ + SetDisPaint(); + try { + ViewVerb(1); + pContainer->DoVerb(ovPrimary); + SyncVerb(); + ViewVerb(0); + GetOrgSize(); + } + catch(...){ + ViewVerb(0); + } + ResDisPaint(); + } +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::ObjectProperties(void) +{ + SetDisPaint(); + int r = FALSE; + try { + ViewVerb(1); + r = pContainer->ObjectPropertiesDialog(); + ViewVerb(0); + } + catch(...){ + ViewVerb(0); + } + ResDisPaint(); + return r; +} +//--------------------------------------------------------------------------- +int __fastcall CDrawOle::IsOrgSize(void) +{ + if( (m_X2 - m_X1) != m_OrgXW ) return FALSE; + if( (m_Y2 - m_Y1) != m_OrgYW ) return FALSE; + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::SetOrgSize(void) +{ + m_X2 = m_X1 + m_OrgXW; + m_Y2 = m_Y1 + m_OrgYW; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawOle::KeepAspect(void) +{ + int lx = m_X2 - m_X1; + int ly = m_Y2 - m_Y1; + ::KeepAspect(lx, ly, m_OrgXW, m_OrgYW); + m_X2 = m_X1 + lx + 1; + m_Y2 = m_Y1 + ly + 1; +} +//*************************************************************************** +//DrawLibクラス +//--------------------------------------------------------------------------- +__fastcall CDrawLib::CDrawLib() +{ + m_Command = CM_LIB; + m_Ver = 1; + m_Type = 0; + m_Name = ""; + hLib = NULL; + hObj = NULL; + pBitmap = NULL; + m_LineStyle = TPenStyle(-1); + m_LineColor = clWhite; + m_X1 = 0; m_Y1 = 0; + m_X2 = m_OrgXW = 160; m_Y2 = m_OrgYW = 128; + m_Text = ""; + Delete(); +} +//--------------------------------------------------------------------------- +__fastcall CDrawLib::~CDrawLib() +{ + Delete(); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::Delete(void) +{ + if( hObj != NULL ){ + if( hLib && fDeleteObject ) fDeleteObject(hObj); + hObj = NULL; + } + hLib = NULL; + if( pBitmap != NULL ){ + delete pBitmap; + pBitmap = NULL; + } + + fFunc=NULL; + fLanguage=NULL; + fAboutDialog = NULL; + fGetItemType = NULL; + fCreateObject = NULL; + fCreateStorage = NULL; + fDeleteStorage = NULL; + fDeleteObject = NULL; + fEdit = NULL; + fFont = NULL; + fGetOrgSize = NULL; + fPos = NULL; + fGetUserText = NULL; + fUpdateText = NULL; + fUpdateImage = NULL; + fSetDraft = NULL; + fSetEx = NULL; + fGetFont = NULL; + fSetFont = NULL; + m_Type = 0; +} +//--------------------------------------------------------------------------- +FARPROC __fastcall CDrawLib::GetProc(LPCSTR pName) +{ + FARPROC fp = ::GetProcAddress(hLib, pName); + if( fp != NULL ) return fp; + fp = ::GetProcAddress(hLib, pName+1); + return fp; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::LoadLib(int emsg) +{ + hLib = NULL; + if( m_Name.IsEmpty() ) return; + LPCSTR pName = m_Name.c_str(); + hLib = (HINSTANCE)Libl.LoadLibrary(pName); + if( hLib != NULL ){ + fGetItemType = (mcmGetItemType)GetProc("_mcmGetItemType"); + fCreateObject = (mcmCreateObject)GetProc("_mcmCreateObject"); + fDeleteObject = (mcmDeleteObject)GetProc("_mcmDeleteObject"); + if( !fGetItemType || !fCreateObject || !fDeleteObject ){ + Libl.DeleteLibrary(hLib); + hLib = NULL; + if( emsg ) InfoMB( "Can not invoke %s as MMSSTV's custom item.", pName); + return; + } + fFunc = (mcmFunc)GetProc("_mcmFunc"); + fLanguage = (mcmLanguage)GetProc("_mcmLanguage"); + fAboutDialog = (mcmAboutDialog)GetProc("_mcmAboutDialog"); + fCreateStorage = (mcmCreateStorage)GetProc("_mcmCreateStorage"); + fDeleteStorage = (mcmDeleteStorage)GetProc("_mcmDeleteStorage"); + fEdit = (mcmEdit)GetProc("_mcmEdit"); + fFont = (mcmEdit)GetProc("_mcmFont"); + fGetOrgSize = (mcmGetOrgSize)GetProc("_mcmGetOrgSize"); + fPos = (mcmPos)GetProc("_mcmPos"); + fGetUserText = (mcmGetUserText)GetProc("_mcmGetUserText"); + fUpdateText = (mcmUpdateText)GetProc("_mcmUpdateText"); + fUpdateImage = (mcmUpdateImage)GetProc("_mcmUpdateImage"); + fSetDraft = (mcmSetDraft)GetProc("_mcmSetDraft"); + fSetEx = (mcmSetEx)GetProc("_mcmSetEx"); + fGetFont = (mcmGetFont)GetProc("_mcmGetFont"); + fSetFont = (mcmSetFont)GetProc("_mcmSetFont"); + if( fFunc ){ + fFunc(0, (FARPROC)mmLoadImageMenu); + fFunc(1, (FARPROC)mmLoadImage); + fFunc(2, (FARPROC)mmLoadHistImage); + fFunc(3, (FARPROC)mmSaveImageMenu); + fFunc(4, (FARPROC)mmSaveImage); + fFunc(5, (FARPROC)mmPasteImage); + fFunc(6, (FARPROC)mmGetMacKey); + fFunc(7, (FARPROC)mmConvMac); + fFunc(8, (FARPROC)mmCreateDIB); + fFunc(9, (FARPROC)MultProcA); + fFunc(10, (FARPROC)MultProc); + fFunc(11, (FARPROC)mmColorComp); + fFunc(12, (FARPROC)mmLoadRxImage); + fFunc(13, (FARPROC)mmView); + fFunc(14, (FARPROC)mmAdjCol); + fFunc(15, (FARPROC)mmClip); + } + if( fLanguage ) fLanguage(MsgEng); + } + else if( emsg ){ + InfoMB( "Can not load '%s'", pName); + } +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::MakeR(LPCSTR pName) +{ + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + ::_splitpath( pName, drive, dir, name, ext ); + m_Name = drive; + m_Name += dir; + if( !strcmpi(m_Name.c_str(), BgnDir) ){ + m_Name = name; + m_Name += ext; + } + else { + m_Name = pName; + } + if( m_Name.IsEmpty() ) return FALSE; + LoadLib(TRUE); + if( hLib == NULL ) return FALSE; + hObj = fCreateObject(NULL, 0); + if( hObj == NULL ){ + InfoMB( "Fail to create the object from '%s'", m_Name.c_str()); + return FALSE; + } + Pos(); + m_Type = fGetItemType(hObj); + if( m_Type & 3 ) Update(); + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::Finish(int x, int y) +{ + m_X2 = x; + m_Y2 = y; + Normal(); + if( !((m_X1 != m_X2) && (m_Y1 != m_Y2)) ) return FALSE; + TOpenDialog *pDialog = Mmsstv->OpenDialog; + pDialog->Options >> ofCreatePrompt; + pDialog->Options << ofFileMustExist; + pDialog->Title = Mmsstv->KTCI->Caption; + pDialog->Filter = GetLibFilter(); + pDialog->FileName = ""; + pDialog->DefaultExt = "dll"; + pDialog->InitialDir = BgnDir; + SetDisPaint(); + if( Mmsstv->OpenDialogExecute(FALSE) == TRUE ){ + ResDisPaint(); + if( MakeR(AnsiString(pDialog->FileName).c_str()) ){ //ja7ude 0521 + return Edit(); + } + else { + return FALSE; + } + } + ResDisPaint(); + return FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::Move(int x, int y) +{ + CDrawBox::Move(x, y); + if( (m_X1 == m_X2) || (m_Y1 == m_Y2) ){ + return; + } + if( (m_MC != HT_I) || (m_Type & 0x00000010) ){ + Update(); + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::SwapHandle(HBITMAP hb) +{ + if( hb ){ + pBitmap->ReleaseHandle(); + pBitmap->Handle = hb; + int x2 = m_X2; + int y2 = m_Y2; + m_X2 = m_X1 + pBitmap->Width; + m_Y2 = m_Y1 + pBitmap->Height; + Pos(); + m_Type = fGetItemType(hObj); + if( m_Type & 0x00400000 ){ // X中央 + int xw = (m_X2 - x2)/2; + m_X1 -= xw; m_X2 -= xw; + } + else if( m_Type & 0x00100000 ){ // 右詰 + int xw = m_X2 - x2; + m_X1 -= xw; m_X2 -= xw; + } + if( m_Type & 0x00800000 ){ // Y中央 + int yw = (m_Y2 - y2)/2; + m_Y1 -= yw; m_Y2 -= yw; + } + else if( m_Type & 0x00200000 ){ // 下詰 + int yw = m_Y2 - y2; + m_Y1 -= yw; m_Y2 -= yw; + } + AdjustRect(); + Pos(); + } + if( fGetOrgSize ){ + ULONG size = fGetOrgSize(hObj); + m_OrgXW = size & 0x0000ffff; + m_OrgYW = size >> 16; + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::Pos(void) +{ + if( !fPos ) return; + + DWORD pos = m_X1 + (m_Y1 << 16); + DWORD size = (m_X2 - m_X1) + ((m_Y2 - m_Y1) << 16); + DWORD tsize = SXW + (SYW << 16); + fPos(hObj, pos, size, tsize); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::Update(void) +{ + if( !hLib ) return; + if( !hObj ) return; + + switch(m_Type & 3){ + case 0: + if( !fUpdateImage ) return; + + SetBitmapSize(); + Pos(); + SwapHandle(fUpdateImage(hObj, pBitmap->Handle, NULL)); + break; + case 1: + UpdatePic(Mmsstv->pBitmapHistF); + break; + default: + UpdateText(); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::SetBitmapSize(void) +{ + if( pBitmap == NULL ){ + pBitmap = new Graphics::TBitmap; + } + pBitmap->PixelFormat = pf24bit; + pBitmap->Width = m_X2 - m_X1; + pBitmap->Height = m_Y2 - m_Y1; + FillBitmap(pBitmap, TransCol); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::DrawFast(TCanvas *tp) +{ + if( hLib && hObj ){ + if( fSetDraft ) fSetDraft(hObj, 1); + Draw(tp); + if( fSetDraft ) fSetDraft(hObj, 0); + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::Draw(TCanvas *tp) +{ + if( !hLib || !hObj ){ + SetBitmapSize(); + pBitmap->Canvas->Font->Color = clRed; + pBitmap->Canvas->TextOut(1, 1, m_Name); + m_Type = 0; + } + if( pBitmap == NULL ){ + Update(); + if( pBitmap == NULL ) return; + } + + ASSERT(pBitmap); + + Graphics::TBitmap *pbmp = pBitmap; + if( sys.m_BitPixel == 16 ){ + pbmp = DupeBitmap(pBitmap, -1); + } + + if( m_Type & 0x00010000 ){ + pbmp->Transparent = TRUE; + pbmp->TransparentMode = tmFixed; + pbmp->TransparentColor = pbmp->Canvas->Pixels[0][0]; + } + + tp->Draw(m_X1, m_Y1, pbmp); + pbmp->Transparent = FALSE; + if( pbmp != pBitmap ) delete pbmp; + CDrawBox::Draw(tp); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::Edit(int sw) +{ + int r; + if( hLib ){ + if( !hObj ) return FALSE; + + if( fLanguage ) fLanguage(MsgEng); + SetDisPaint(); + MultProc(); + if( sw ){ + r = fFont(hObj, Screen->ActiveForm->Handle); + } + else { + r = fEdit(hObj, Screen->ActiveForm->Handle); + } + MultProc(); + ResDisPaint(); + if( r ){ + Pos(); + m_Type = fGetItemType(hObj); + Update(); + } + } + else { + r = Finish(m_X2, m_Y2); + } + return r; +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::Edit(void) +{ + if( !fEdit ) return FALSE; + return Edit(0); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::Font(void) +{ + if( !fFont ) return Edit(); + return Edit(1); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::ObjectProperties(void) +{ + if( hLib ){ + if( !fAboutDialog ) return; + + if( fLanguage ) fLanguage(MsgEng); + fAboutDialog(Screen->ActiveForm->Handle); + } + else { + InfoMB( "Could not load '%s', the item is inactive.", m_Name.c_str()); + } +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::SaveToStream(TStream *sp) +{ + m_Ver = 1; + CDrawBox::SaveToStream(sp); + + SaveString(sp, m_Name); + ULONG size = 0; + const BYTE *p = NULL; + if( fCreateStorage ) p = fCreateStorage(hObj, &size); + if( p == NULL ) size = 0; + sp->Write(&size, sizeof(size)); + if( size ) sp->Write(p, size); + if( fDeleteStorage ) fDeleteStorage(hObj, p); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::LoadFromStream(TCanvas *tp, TStream *sp) +{ + Delete(); + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) return FALSE; + + LoadString(sp, m_Name); + ULONG size = 0; + BYTE *p = NULL; + sp->Read(&size, sizeof(size)); + if( size ){ + p = new BYTE[size]; + sp->Read(p, size); + } + LoadLib(FALSE); + if( hLib && fCreateObject ){ + hObj = fCreateObject(p, size); + if( hObj != NULL ){ + Pos(); + m_Type = fGetItemType(hObj); + } + } + if( p != NULL ) delete p; + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::Copy(CDraw *dp) +{ + CDrawLib *sp = (CDrawLib *)dp; + + TMemoryStream *tm = new TMemoryStream; + tm->Seek(0, soFromBeginning); + sp->SaveToStream(tm); + tm->Seek(0, soFromBeginning); + int cmd; + tm->Read(&cmd, sizeof(cmd)); + if( cmd == CM_LIB ){ + LoadFromStream(Mmsstv->pBitmapTemp->Canvas, tm); + } + delete tm; +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::IsOrgSize(void) +{ + if( !hLib ) return TRUE; + + if( m_OrgXW != (m_X2 - m_X1) ) return FALSE; + if( m_OrgYW != (m_Y2 - m_Y1) ) return FALSE; + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::SetOrgSize(void) +{ + if( !hLib ) return; + + m_X2 = m_X1 + m_OrgXW; + m_Y2 = m_Y1 + m_OrgYW; + Update(); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::KeepAspect(void) +{ + if( !hLib ) return; + + int lx = m_X2 - m_X1; + int ly = m_Y2 - m_Y1; + ::KeepAspect(lx, ly, m_OrgXW, m_OrgYW); + m_X2 = m_X1 + lx + 1; + m_Y2 = m_Y1 + ly + 1; + Update(); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::UpdatePic(Graphics::TBitmap *pBmp) +{ + if( !(m_Type & 1) ) return; + if( !hLib ) return; + if( !hObj ) return; + if( !fUpdateImage ) return; + + SetBitmapSize(); + Pos(); + Graphics::TBitmap *ps = (pBmp->PixelFormat != pf24bit) ? DupeBitmap(pBmp, pf24bit) : pBmp; + SwapHandle(fUpdateImage(hObj, pBitmap->Handle, ps->Handle)); + if( ps != pBmp ) delete ps; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::UpdateText(int f) +{ + if( !(m_Type & 2) ) return; + if( !hLib ) return; + if( !hObj ) return; + if( !fGetUserText ) return; + if( !fUpdateText ) return; + + if( fSetEx ) fSetEx(hObj, sys.m_DisFontSmooth); + + char bf[1024]; + LPCSTR pText = fGetUserText(hObj); + if( Mmsstv->MacroText(bf, pText, sizeof(bf)-1) || f ){ + SetBitmapSize(); + Pos(); + SwapHandle(fUpdateText(hObj, pBitmap->Handle, bf)); + } + m_Text = pText; +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::UpdateText(void) +{ + UpdateText(1); +} +//--------------------------------------------------------------------------- +void __fastcall CDrawLib::UpdateTimeText(void) +{ + UpdateText(0); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::IsTimeMacro(void) +{ + char bf[1024]; + return Mmsstv->MacroText(bf, m_Text.c_str(), sizeof(bf)-1); +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::GetFont(LOGFONT *pLogfont) +{ + if( !hLib || !hObj || !fGetFont ) return FALSE; + fGetFont(hObj, pLogfont); + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall CDrawLib::SetFont(LOGFONT *pLogfont) +{ + if( !hLib || !hObj || !fGetFont ) return FALSE; + fSetFont(hObj, pLogfont); + Update(); + return TRUE; +} +//*************************************************************************** +//DrawGroupクラス +//--------------------------------------------------------------------------- +__fastcall CDrawGroup::CDrawGroup() +{ + m_Command = CM_GROUP; + m_Cnt = 0; + m_Max = 0; + m_TransX = 319; + m_TransY = 255; + m_TransCol = TColor(0x00f8f8f8); + m_SX = 320; + m_SY = 256; + m_Ver = 2; + pBase = NULL; + pSel = NULL; +} + +__fastcall CDrawGroup::~CDrawGroup() +{ + Free(); +} + +void __fastcall CDrawGroup::Free(void) +{ + if( pBase != NULL ){ + delete pBase; + pBase = NULL; + } + m_Cnt = m_Max = 0; +} + +void __fastcall CDrawGroup::FreeItem(void) +{ + if( pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + if( pBase[i]->m_Command == CM_GROUP ){ + ((CDrawGroup *)(pBase[i]))->FreeItem(); + } + delete pBase[i]; + } + delete pBase; + pBase = NULL; + m_Cnt = m_Max = 0; + pSel = NULL; + m_TransX = 319; + m_TransY = 255; + m_TransCol = TColor(0x00f8f8f8); +} + +void __fastcall CDrawGroup::ReleaseResource(void) +{ + if( pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->ReleaseResource(); + } +} + +void __fastcall CDrawGroup::UpdatePic(Graphics::TBitmap *pBmp) +{ + if( pBase == NULL ) return; + + TransCol = m_TransCol; + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->UpdatePic(pBmp); + } +} + +void __fastcall CDrawGroup::AddItem(CDraw *dp) +{ + if( m_Cnt >= m_Max ){ + m_Max = m_Max ? m_Max * 2 : 16; + CDraw **np = new CDraw*[m_Max]; + if( pBase != NULL ){ + memcpy(np, pBase, sizeof(CDraw*)*m_Cnt); + delete pBase; + } + pBase = np; + } + pBase[m_Cnt] = dp; + m_Cnt++; +} + +void __fastcall CDrawGroup::DeleteItem(CDraw *dp) +{ + if( pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + if( pBase[i] == dp ){ + delete pBase[i]; + for( ; i < (m_Cnt - 1); i++ ){ + pBase[i] = pBase[i+1]; + } + pBase[i] = NULL; + m_Cnt--; + return; + } + } +} + +void __fastcall CDrawGroup::ReleaseItem(CDraw *dp) +{ + if( pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + if( pBase[i] == dp ){ + for( ; i < (m_Cnt - 1); i++ ){ + pBase[i] = pBase[i+1]; + } + pBase[i] = NULL; + m_Cnt--; + return; + } + } +} + +CDraw * __fastcall CDrawGroup::AddItemCopy(CDraw *dp) +{ + CDraw *pItem = MakeItem(dp->m_Command); + pItem->Copy(dp); + AddItem(pItem); + return pItem; +} + +void __fastcall CDrawGroup::FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off) +{ + if( pBase == NULL ) return; + + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->FillPic(tp, col, sw, sx, sy, off); + } +} + +void __fastcall CDrawGroup::Draw(TCanvas *tp) +{ + if( pBase == NULL ) return; + + TransCol = m_TransCol; + SetDrawSize(m_SX, m_SY); + for( int i = 0; i < m_Cnt; i++ ){ + tp->Brush->Color = m_TransCol; + pBase[i]->Draw(tp); + } +} + +void __fastcall CDrawGroup::DrawFast(TCanvas *tp) +{ + if( pBase == NULL ) return; + + TransCol = m_TransCol; + SetDrawSize(m_SX, m_SY); + for( int i = 0; i < m_Cnt; i++ ){ + tp->Brush->Color = m_TransCol; + pBase[i]->DrawFast(tp); + } +} + +void __fastcall CDrawGroup::DrawNotSel(TCanvas *tp) +{ + if( pBase == NULL ) return; + + TransCol = m_TransCol; + SetDrawSize(m_SX, m_SY); + for( int i = 0; i < m_Cnt; i++ ){ + if( (pBase[i] != pSel) || + (pBase[i]->m_Command == CM_TEXT) || + (pBase[i]->m_Command == CM_PIC) || + (pBase[i]->m_Command == CM_BOXS) || + (pBase[i]->m_Command == CM_OLE) || + (pBase[i]->m_Command == CM_LIB) || + (pBase[i]->m_Command == CM_GROUP) + ){ + tp->Brush->Color = m_TransCol; + pBase[i]->Draw(tp); + } + } +} + +CDraw* __fastcall CDrawGroup::SelectItem(int X, int Y) +{ + if( pBase == NULL ) return NULL; + + for( int i = m_Cnt - 1; i >= 0; i-- ){ + if( (m_Hit = pBase[i]->HitTest(X, Y)) != 0 ){ + return pBase[i]; + } + } + return NULL; +} + +CDraw* __fastcall CDrawGroup::MakeItem(int cmd) +{ + TransCol = m_TransCol; + CDraw *pItem = NULL; + switch(cmd){ + case CM_LINE: + pItem = new CDrawLine; + break; + case CM_BOX: + pItem = new CDrawBox; + break; + case CM_BOXS: + pItem = new CDrawBoxS; + break; + case CM_TEXT: + pItem = new CDrawText; + break; + case CM_PIC: + pItem = new CDrawPic; + break; + case CM_TITLE: + pItem = new CDrawTitle; + break; + case CM_OLE: + pItem = new CDrawOle; + break; + case CM_LIB: + pItem = new CDrawLib; + break; + case CM_GROUP: + pItem = new CDrawGroup; + break; + } + return pItem; +} + +void __fastcall CDrawGroup::SaveToStream(TStream *sp) +{ + m_Ver = 2; + CDrawBox::SaveToStream(sp); + + sp->Write(&m_TransX, sizeof(m_TransX)); + sp->Write(&m_TransY, sizeof(m_TransY)); + sp->Write(&m_TransCol, sizeof(m_TransCol)); + sp->Write(&m_SX, sizeof(m_SX)); + sp->Write(&m_SY, sizeof(m_SY)); + sp->Write(&m_Cnt, sizeof(m_Cnt)); + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->SaveToStream(sp); + } +} + +int __fastcall CDrawGroup::LoadFromStream(TCanvas *tp, TStream *sp) +{ + FreeItem(); + MultProc(); + try { + int cnt, cmd; + sp->Read(&cmd, sizeof(cmd)); + if( cmd != CM_GROUP ){ + goto _err; + } + + if( CDrawBox::LoadFromStream(tp, sp) == FALSE ) goto _err; + if( m_Ver >= 1 ){ + sp->Read(&m_TransX, sizeof(m_TransX)); + sp->Read(&m_TransY, sizeof(m_TransY)); + sp->Read(&m_TransCol, sizeof(m_TransCol)); + } + if( m_Ver >= 2 ){ + sp->Read(&m_SX, sizeof(m_SX)); + sp->Read(&m_SY, sizeof(m_SY)); + } + SetDrawSize(m_SX, m_SY); + pSel = NULL; + sp->Read(&cnt, sizeof(cnt)); + for( int i = 0; i < cnt; i++ ){ + MultProcA(); + sp->Read(&cmd, sizeof(cmd)); + CDraw *pItem = MakeItem(cmd); + if( pItem != NULL ){ + if( pItem->LoadFromStream(tp, sp) == FALSE ){ + delete pItem; + goto _err; + } + AddItem(pItem); + } + else { + goto _err; + } + } + if( !m_Cnt ) m_TransCol = TColor(0x00f8f8f8); + m_Ver = 2; + return TRUE; + } + catch(...){ + } +_err:; + FreeItem(); + m_Ver = 1; + return FALSE; +} + +void __fastcall CDrawGroup::Copy(CDraw *dp) +{ + FreeItem(); + + CDrawGroup *sp = (CDrawGroup *)dp; + SetDrawSize(sp->m_SX, sp->m_SY); + m_TransX = sp->m_TransX; + m_TransY = sp->m_TransY; + m_TransCol = sp->m_TransCol; + m_SX = sp->m_SX; + m_SY = sp->m_SY; + for( int i = 0; i < sp->m_Cnt; i++ ){ + AddItemCopy(sp->pBase[i]); + } +} + +void __fastcall CDrawGroup::UpdateText(void) +{ + CWaitCursor w; + + TransCol = m_TransCol; + SetDrawSize(m_SX, m_SY); + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->UpdateText(); + } +} + +void __fastcall CDrawGroup::UpdateTimeText(void) +{ + TransCol = m_TransCol; + SetDrawSize(m_SX, m_SY); + for( int i = 0; i < m_Cnt; i++ ){ + pBase[i]->UpdateTimeText(); + } +} + +int __fastcall CDrawGroup::IsMacro(LPCSTR pKey) +{ + LPCSTR pText; + for( int i = 0; i < m_Cnt; i++ ){ + pText = pBase[i]->GetText(); + if( pText != NULL ){ + if( strstr(pText, pKey) != NULL ) return 1; + } +#if 0 + if( pBase[i]->m_Command == CM_TEXT ){ + LPCSTR p = ((CDrawText *)pBase[i])->m_Text.c_str(); + if( strstr(p, pKey) != NULL ) return 1; + } +#endif + } + return 0; +} + +int __fastcall CDrawGroup::IsTimeMacro(void) +{ + for( int i = 0; i < m_Cnt; i++ ){ + if( pBase[i]->IsTimeMacro() ) return 1; + } + return 0; +} + +void __fastcall CDrawGroup::BackItem(CDraw *pItem) +{ + int i, k; + for( i = m_Cnt - 1; i >= 0; i-- ){ + if( pBase[i] == pItem ){ + for( k = i; k > 0; k-- ){ + pBase[k] = pBase[k-1]; + } + pBase[0] = pItem; + break; + } + } +} + +void __fastcall CDrawGroup::FrontItem(CDraw *pItem) +{ + int i, k; + for( i = 0; i < m_Cnt; i++ ){ + if( pBase[i] == pItem ){ + for( k = i; k < m_Cnt - 1; k++ ){ + pBase[k] = pBase[k+1]; + } + pBase[k] = pItem; + break; + } + } +} + +int __fastcall CDrawGroup::UpItem(int n) +{ + if( n ){ + CDraw *pItem = pBase[n-1]; + pBase[n-1] = pBase[n]; + pBase[n] = pItem; + return TRUE; + } + return FALSE; +} + +int __fastcall CDrawGroup::DownItem(int n) +{ + if( n < (m_Cnt - 1) ){ + CDraw *pItem = pBase[n+1]; + pBase[n+1] = pBase[n]; + pBase[n] = pItem; + return TRUE; + } + return FALSE; +} +//-------------------------------------------------------------------------- +void __fastcall DrawTrans(TCanvas *tp, int x, int y) +{ + int rop = ::SetROP2(tp->Handle, R2_NOT); + tp->MoveTo(x - 5, y - 5); + tp->LineTo(x + 5, y - 5); + tp->LineTo(x + 5, y + 5); + tp->LineTo(x - 5, y + 5); + tp->LineTo(x - 5, y - 5); + tp->MoveTo(x - 5, y - 5); + tp->LineTo(x + 5, y + 5); + tp->MoveTo(x - 5, y + 5); + tp->LineTo(x + 5, y - 5); + ::SetROP2(tp->Handle, rop); +} +//-------------------------------------------------------------------------- +void __fastcall CDrawGroup::DrawTrans(TCanvas *tp) +{ + ::DrawTrans(tp, m_TransX, m_TransY); +} +//-------------------------------------------------------------------------- +void __fastcall CDrawGroup::AdjustTransPoint(void) +{ + MultProc(); + int i; + int f = 0; + int XW = 320; + int YW = 256; + for( i = 0; i < m_Cnt; i++ ){ + if( pBase[i]->HitTest(m_TransX, m_TransY) ){ + for( m_TransX = XW-1; m_TransX >= 0; m_TransX -= 5 ){ + for( m_TransY = YW-1; m_TransY >= 0; m_TransY-- ){ + f = 0; + for( i = 0; i < m_Cnt; i++ ){ + if( pBase[i]->HitTest(m_TransX, m_TransY) ){ + f++; + break; + } + } + if( !f ) return; + } + MultProc(); + } + break; + } + } + if( f ){ + for( i = 0; i < m_Cnt; i++ ){ + if( pBase[i]->m_Command == CM_PIC ){ + CDrawPic *pPic = (CDrawPic *)pBase[i]; + if( pPic->m_Type == 2 ){ + m_TransX = pPic->m_X1 + (pPic->m_TransPoint & 0x0000ffff) + 1; + m_TransY = pPic->m_Y1 + (pPic->m_TransPoint >> 16) + 1; + if( m_TransX < 0 ) m_TransX = 0; + if( m_TransY < 0 ) m_TransY = 0; + if( m_TransX >= XW ) m_TransX = XW-1; + if( m_TransY >= YW ) m_TransY = YW-1; + return; + } + } + } + m_TransX = XW-1; + m_TransY = YW-1; + } +} +//-------------------------------------------------------------------------- +void __fastcall CDrawGroup::AdjustTransColor(Graphics::TBitmap *pBmp) +{ + TColor org = m_TransCol; +// m_TransCol = clWhite; + m_TransCol = GetUniqueColor(m_TransCol); + if( !m_Cnt ) return; + + CWaitCursor wait; + + int XW = pBmp->Width; + int YW = pBmp->Height; + int i, y, x, f; + for( i = 0; i < 512; i++ ){ + f = 0; + for( y = 0; y < YW; y++ ){ + for( x = 0; x < XW; x++ ){ + if( pBmp->Canvas->Pixels[x][y] == m_TransCol ){ + f++; + break; + } + } + if( f ) break; + } + if( !f ) break; + m_TransCol = GetUniqueColor(m_TransCol); + MultProc(); + } + if( org != m_TransCol ){ + UpdateText(); + } +} + +//-------------------------------------------------------------------------- +void __fastcall CDrawGroup::GetColorBarPos(int &Y1, int &Y2) +{ + int H = Y2; + int i; + for( i = 0; i < m_Cnt; i++ ){ + CDraw *pItem = pBase[i]; + if( pItem->m_Command == CM_TITLE ){ + if( pItem->m_Y2 < 20 ){ + Y1 = pItem->m_Y2; + } + else if( pItem->m_Y1 >= (H - 20) ){ + Y2 = pItem->m_Y1; + } + } + } + if( Y1 < 0 ) Y1 = 0; + if( Y2 > H ) Y2 = H; +} +//-------------------------------------------------------------------------- +CDraw* __fastcall CDrawGroup::GetLastItem(void) +{ + return m_Cnt ? pBase[m_Cnt-1]: NULL; +} +//-------------------------------------------------------------------------- +int __fastcall CDrawGroup::IsConvBitmap(CDraw *pItem) +{ + if( pItem == NULL ) return FALSE; + + switch(pItem->m_Command){ + case CM_PIC: + { + CDrawPic *pPic = (CDrawPic *)pItem; + return pPic->m_Type != 1 ? TRUE : FALSE; + } + case CM_TEXT: + { + CDrawText *pText = (CDrawText *)pItem; + if( pText->pBitmap == NULL ) return FALSE; + } + return TRUE; + case CM_OLE: + return TRUE; + case CM_LIB: + return TRUE; + } + return FALSE; +} +//-------------------------------------------------------------------------- +CDrawPic* __fastcall CDrawGroup::MakePic(int x, int y, Graphics::TBitmap *pBitmap, int ov) +{ + CDrawPic *pPic = new CDrawPic; + pPic->Start(Mmsstv->PBoxTemp->Canvas, x, y); + if( pPic->FinishR(x + pBitmap->Width + 1, y + pBitmap->Height + 1) ){ + pPic->m_Type = ov ? 2 : 1; + pPic->m_Shape = 0; + pPic->m_LineStyle = TPenStyle(-1); + pBitmap->Transparent = FALSE; + pPic->pBitmap->Canvas->Draw(0, 0, pBitmap); + return pPic; + } + return NULL; +} +//-------------------------------------------------------------------------- +void __fastcall CDrawGroup::ConvBitmap(CDraw *pItem) +{ + if( pItem == NULL ) return; + + int i; + for( i = 0; i < m_Cnt; i++ ){ + if( pBase[i] == pItem ){ + switch(pItem->m_Command){ + case CM_PIC: + { + CDrawPic *pPic = (CDrawPic *)pItem; + pPic->m_Type = 1; + } + break; + case CM_TEXT: + { + CDrawText *pText = (CDrawText *)pItem; + if( pText->pBitmap == NULL ) return; + pSel = MakePic(pText->m_X1 - 1, pText->m_Y1 - 1, pText->pBitmap, 1); + if( pSel != NULL ){ + pBase[i] = pSel; + delete pText; + } + } + break; + case CM_OLE: + { + CDrawOle *pOle = (CDrawOle *)pItem; + Graphics::TBitmap *pBitmap = pOle->MakeBitmap(); + pSel = MakePic(pOle->m_X1 - 1, pOle->m_Y1 - 1, pBitmap, pOle->m_Trans); + if( pSel != NULL ){ + pBase[i] = pSel; + delete pOle; + } + delete pBitmap; + } + break; + case CM_LIB: + { + CDrawLib *pLib = (CDrawLib *)pItem; + if( pLib->pBitmap == NULL ) return; + pSel = MakePic(pLib->m_X1 - 1, pLib->m_Y1 - 1, pLib->pBitmap, pLib->m_Type & 0x00010000); + if( pSel != NULL ){ + pBase[i] = pSel; + delete pLib; + } + } + break; + } + break; + } + } +} +//************************************************************************** +// +//--------------------------------------------------------------------------- +// ファイルからロード +int __fastcall LoadTemplate(CDrawGroup *pItem, LPCSTR pName, TCanvas *tp) +{ + int r = FALSE; + try { + TFileStream *sp = new TFileStream(pName, fmOpenRead); + r = pItem->LoadFromStream((tp != NULL) ? tp : Mmsstv->PBoxTemp->Canvas, sp); + delete sp; + r = TRUE; + } + catch(...){ + } + if( r == FALSE ){ + if( IsFile(pName) ){ + ErrorMB( MsgEng ? "The template file (%s) is not a correct format":"テンプレート(%s)は正しいファイル形式ではありません.", pName); + unlink(pName); + } + } + MultProc(); + return r; +} +//--------------------------------------------------------------------------- +// ファイルへのセーブ +int __fastcall SaveTemplate(CDrawGroup *pItem, LPCSTR pName) +{ + int r = FALSE; + try { + TFileStream *sp = new TFileStream(pName, fmCreate); + pItem->SaveToStream(sp); + delete sp; + r = TRUE; + } + catch(...){ + if( IsFile(pName) && (GetFileAttributes(pName) & FILE_ATTRIBUTE_READONLY) ){ + ErrorMB("'%s' is read-only.", pName); + } + else { + ErrorMB( MsgEng ? "Cannot update '%s":"'%s'を更新できません.", pName); + } + } + MultProc(); + return r; +} +//************************************************************************** +// +//-------------------------------------------------------------------------- +void __fastcall CPolygon::Free(void) +{ + if( pBase != NULL ){ + delete pBase; + pBase = NULL; + } +} + +void __fastcall CPolygon::AddPoint(int X, int Y) +{ + if( Cnt ){ + if( (pBase[Cnt-1].x == X) && (pBase[Cnt-1].y == Y) ) return; + } + if( Cnt >= Max ){ + int max = Max ? Max * 2 : 4; + POINT *pNew = new POINT[max]; + if( pBase != NULL ){ + memcpy(pNew, pBase, Cnt * sizeof(POINT)); + delete pBase; + } + pBase = pNew; + Max = max; + } + pBase[Cnt].x = X; + pBase[Cnt].y = Y; + Cnt++; +} + +void __fastcall CPolygon::SaveToStream(TStream *sp) +{ + int id = 0x55aa2233; + sp->Write(&id, sizeof(id)); + sp->Write(&Cnt, sizeof(Cnt)); + sp->Write(&XW, sizeof(XW)); + sp->Write(&YW, sizeof(YW)); + int i; + POINT *p = pBase; + for( i = 0; i < Cnt; i++, p++ ){ + sp->Write(p, sizeof(POINT)); + } +} + +int __fastcall CPolygon::LoadFromStream(TStream *sp) +{ + sp->Read(&Cnt, sizeof(Cnt)); + if( Cnt == 0x55aa2233 ){ + sp->Read(&Cnt, sizeof(Cnt)); + sp->Read(&XW, sizeof(XW)); + sp->Read(&YW, sizeof(YW)); + } + else { + XW = 256; + YW = 200; + } + if( pBase != NULL ){ + delete pBase; + } + Max = Cnt; + if( Cnt ){ + pBase = new POINT[Max]; + POINT *p = pBase; + for( Cnt = 0; Cnt < Max; Cnt++, p++ ){ + sp->Read(p, sizeof(POINT)); + if( XW != 320 ) p->x = p->x * 320 / XW; + if( YW != 256 ) p->y = p->y * 256 / XW; + } + } + XW = 320; + YW = 256; + return TRUE; +} + +void __fastcall CPolygon::Draw(TCanvas *tp, int loop) +{ + if( !Cnt ) return; + + tp->Brush->Color = clWhite; + tp->Pen->Color = sys.m_PicSelCurCol; +// tp->Pen->Color = clBlue; + tp->Pen->Width = 2; + tp->Pen->Style = psSolid; +// int rop = ::SetROP2(tp->Handle, R2_MERGEPENNOT); + for( int i = 0; i < Cnt; i++ ){ + if( i ){ + tp->LineTo(pBase[i].x, pBase[i].y); + } + else { + tp->MoveTo(pBase[i].x, pBase[i].y); + } + } + if( loop ){ + tp->LineTo(pBase[0].x, pBase[0].y); + } +// ::SetROP2(tp->Handle, rop); +} + +void __fastcall CPolygon::Copy(CPolygon *p) +{ + if( pBase != NULL ){ + delete pBase; + } + Max = Cnt = p->Cnt; + pBase = new POINT[Max]; + memcpy(pBase, p->pBase, sizeof(POINT) * Cnt); + XW = p->XW; + YW = p->YW; +} + +void __fastcall CPolygon::GetCenter(int &xc, int &yc) +{ + if( Cnt < 3 ){ + xc = XW/2; + yc = YW/2; + } + else { + int X, Y; + int XL = 640; + int YT = 496; + int XR = 0; + int YB = 0; + int i; + for( i = 0; i < Cnt; i++ ){ + X = pBase[i].x; + Y = pBase[i].y; + if( XL > X ) XL = X; + if( XR < X ) XR = X; + if( YT > Y ) YT = Y; + if( YB < Y ) YB = Y; + } + xc = (XR + XL)/2; + yc = (YB + YT)/2; + } +} + +void __fastcall CPolygon::DrawOffset(TCanvas *tp, int x, int y) +{ + POINT *pTemp = new POINT[Cnt]; + for( int i = 0; i < Cnt; i++ ){ + pTemp[i].x = pBase[i].x + x; + pTemp[i].y = pBase[i].y + y; + } + tp->Polygon(pTemp, Cnt-1); + delete pTemp; +} + +void __fastcall CPolygon::DrawOffsetSiege(TCanvas *tp, int x, int y, TColor SCol, int e) +{ + if( Cnt < 3 ) return; + int XC, YC; + GetCenter(XC, YC); + + e = e == 5 ? 4 : 3; + int i, j; + POINT *pTemp = new POINT[Cnt]; + tp->Pen->Style = psSolid; + tp->Pen->Width = 1; + tp->Brush->Style = bsClear; + TColor col = SCol; + TColor tcol = SCol == clBlack ? clWhite : clBlack; + double deg, r, xx, yy; + for( i = 0; i < e; i++ ){ + for( j = 0; j < Cnt; j++ ){ +#if 0 + if( pBase[j].x > XC ){ + pTemp[j].x = x + pBase[j].x + i; + } + else { + pTemp[j].x = x + pBase[j].x - i; + } + if( pBase[j].y > YC ){ + pTemp[j].y = y + pBase[j].y + i; + } + else { + pTemp[j].y = y + pBase[j].y - i; + } +#else + xx = pBase[j].x - XC; + yy = YC - pBase[j].y; + if( xx > 0 ){ + deg = atan(double(yy)/double(xx)); + r = sqrt(xx * xx + yy * yy); + } + else if( xx < 0 ){ + deg = atan(double(yy)/double(xx)); + deg += PI; + r = sqrt(xx * xx + yy * yy); + } + else { + deg = yy < 0 ? -PI/2 : PI/2; + r = ABS(yy); + } + r += i; + pTemp[j].x = x + XC + r * cos(deg) + 0.5; + pTemp[j].y = y + YC - r * sin(deg) + 0.5; +#endif + } + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->Polygon(pTemp, Cnt - 1); + } + for( i = 1; i < e; i++ ){ + for( j = 0; j < Cnt; j++ ){ +#if 0 + if( pBase[j].x > XC ){ + pTemp[j].x = x + pBase[j].x - i; + } + else { + pTemp[j].x = x + pBase[j].x + i; + } + if( pBase[j].y > YC ){ + pTemp[j].y = y + pBase[j].y - i; + } + else { + pTemp[j].y = y + pBase[j].y + i; + } +#else + xx = pBase[j].x - XC; + yy = YC - pBase[j].y; + if( xx > 0 ){ + deg = atan(double(yy)/double(xx)); + r = sqrt(xx * xx + yy * yy); + } + else if( xx < 0 ){ + deg = atan(double(yy)/double(xx)); + deg += PI; + r = sqrt(xx * xx + yy * yy); + } + else { + deg = yy < 0 ? -PI/2 : PI/2; + r = ABS(yy); + } + r -= i; + pTemp[j].x = x + XC + r * cos(deg) + 0.5; + pTemp[j].y = y + YC - r * sin(deg) + 0.5; +#endif + } + tp->Pen->Color = GetCol(col, tcol, i, e); + tp->Polygon(pTemp, Cnt - 1); + } + delete pTemp; + tp->Brush->Style = bsSolid; +} + +void __fastcall CPolygon::Stretch(int xw, int yw, int oxw, int oyw) +{ + if( (xw == oxw) && (oxw == oyw) ) return; + + double sx = double(xw)/double(oxw); + double sy = double(yw)/double(oyw); + for( int i = 0; i < Cnt; i++ ){ + pBase[i].x *= sx; + pBase[i].y *= sy; + } +} + +void __fastcall CPolygon::Stretch(CPolygon &pol) +{ + Stretch(XW, YW, pol.XW, pol.YW); +} + +//--------------------------------------------------------------------------- +// 透視変換 +static void __fastcall Matrix(double l[4][4], double m[4][4], double n[4][4]) +{ + int i, j, k; + double d; + + for( i = 0; i < 4; i++ ){ + for( j = 0; j < 4; j++ ){ + for( k = 0, d = 0.0; k < 4; k++ ) d += l[i][k] * m[k][j]; + n[i][j] = d; + } + } +} + +void __fastcall PerspectPara(double k[9], const SPERSPECT *pPar, int xs, int ys) +{ + double l[4][4]; double m[4][4]; double n[4][4]; + double k1, k2, k3, k4, k5, k6, k7, k8, k9; + double u, v, w; + + u = pPar->rx * PI / 180; + v = pPar->ry * PI / 180; + w = pPar->rz * PI / 180; + memset(l, 0, sizeof(l)); memset(m, 0, sizeof(m)); + l[0][0] = 1.0/xs; l[1][1] = -1.0/xs; l[2][2] = 1.0; l[3][3] = 1.0; + m[0][0] = pPar->ax; m[1][1] = pPar->ay; m[2][2] = 1.0; m[3][3] = 1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = 1.0; l[1][1] = 1.0; l[2][2] = 1.0; + l[3][0] = pPar->px; l[3][1] = pPar->py; l[3][2] = pPar->pz; l[3][3] = 1.0; + Matrix(n, l, m); + memset(n, 0, sizeof(n)); + n[0][0] = cos(w); n[0][1] = sin(w); + n[1][0] = -n[0][1]; n[1][1] = n[0][0]; + n[2][2] = 1.0; n[3][3] = 1.0; + Matrix(m, n, l); + memset(m, 0, sizeof(m)); + m[0][0] = 1.0; m[1][1] = cos(u); m[1][2] = sin(u); + m[2][1] = -m[1][2]; m[2][2] = m[1][1]; m[3][3] = 1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = cos(v); l[0][2] = sin(v); l[1][1] = 1.0; + l[2][0] = -l[0][2]; l[2][2] = l[0][0]; l[3][3] = 1.0; + Matrix(n, l, m); + memset(n, 0, sizeof(n)); + n[0][0] = 1.0; n[1][1] = 1.0; n[2][2] = -1.0; n[3][2] = -pPar->v; n[3][3] = 1.0; + Matrix(m, n, l); + memset(m, 0, sizeof(m)); + m[0][0] = 1.0; m[1][1] = 1.0; m[2][2] = 1/pPar->s; m[2][3] = m[2][2]; + m[3][2] = -1.0; + Matrix(l, m, n); + memset(l, 0, sizeof(l)); + l[0][0] = xs; l[1][1] = -xs; l[2][2] = 1.0; l[3][3] = 1.0; + Matrix(n, l, m); + + k1 = m[0][3]; k2 = m[1][3]; k3 = m[3][3]; + k4 = m[0][0]; k5 = m[1][0]; k6 = m[3][0]; + k7 = m[0][1]; k8 = m[1][1]; k9 = m[3][1]; + + k[0] = k7*k2 - k8*k1; k[1] = k5*k1 - k4*k2; k[2] = k4*k8 - k7*k5; + k[3] = k8*k3 - k9*k2; k[6] = k9*k1 - k7*k5; k[4] = k6*k2 - k5*k3; + k[7] = k4*k3 - k6*k1; k[5] = k5*k9 - k8*k6; k[8] = k7*k6 - k4*k9; +} + +void __fastcall Perspect(Graphics::TBitmap *pSrc, Graphics::TBitmap *pTer, const SPERSPECT *pPar, TColor back) +{ + if( (pSrc->Width < 2) || (pSrc->Height < 2) ){ + CopyBitmap(pTer, pSrc); + } + else { + Graphics::TBitmap *pS = DupeBitmap(pSrc, pf24bit); + Graphics::TBitmap *pT = new Graphics::TBitmap; + pT->PixelFormat = pf24bit; + pT->Width = pTer->Width; + pT->Height = pTer->Height; + if( pT->Width & 1 ) pT->Width--; + if( pT->Height & 1 ) pT->Height--; + int i, j, m, n; + double x, y, w, p, q; + double k[9]; + int xs = pT->Width / 2; + int ys = pT->Height / 2; + PerspectPara(k, pPar, xs, ys); + BYTE *sp1, *sp2; + BYTE *tp; + sp1 = (BYTE *)pS->ScanLine[0]; + BYTE br = *sp1++; + BYTE bg = *sp1++; + BYTE bb = *sp1; + int r, g, b; + for( i = -ys; i < ys; i++ ){ + tp = (BYTE *)pT->ScanLine[i+ys]; + for( j = -xs; j < xs; j++ ){ + w = k[0] * j + k[1] * i + k[2]; + x = k[3] * j + k[4] * i + k[5]; + y = k[6] * j + k[7] * i + k[8]; + x = x / w; + y = y / w; + if( y > 0 ){ m = int(y); } else { m = int(y-1); } + if( x > 0 ){ n = int(x); } else { n = int(x-1); } + q = y - m; + p = x - n; + double pp = 1.0 - p; + double qq = 1.0 - q; + if( (m >= -ys) && (m < ys-1) && (n >= -xs) && (n < xs-1) ){ + sp1 = (BYTE *)pS->ScanLine[m+ys] + (n+xs)*3; + sp2 = (BYTE *)pS->ScanLine[m+ys+1] + (n+xs)*3; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + r = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); +// if( ABS(r-br) < 16 ) r = br; + } + else { + r = *sp1; + } + sp1++; sp2++; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + g = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); +// if( ABS(g-bg) < 16 ) g = bg; + } + else { + g = *sp1; + } + sp1++; sp2++; + if( (*sp1 != *sp2) || (*sp1 != *(sp1+3)) || (*sp1 != *(sp2+3)) ){ + b = (int)(qq*(pp*(*sp1) + p*(*(sp1+3))) + + q * (pp*(*sp2) + p*(*(sp2+3)))); +// if( ABS(b-bb) < 16 ) b = bb; + } + else { + b = *sp1; + } + if( r < 0 ) r = 0; + if( r > 255 ) r = 255; + if( g < 0 ) g = 0; + if( g > 255 ) g = 255; + if( b < 0 ) b = 0; + if( b > 255 ) b = 255; + *tp++ = BYTE(r); + *tp++ = BYTE(g); + *tp++ = BYTE(b); + } + else { + *tp++ = br; + *tp++ = bg; + *tp++ = bb; + } + } + } + pTer->Width = pT->Width; + pTer->Height = pT->Height; + pTer->Palette = NULL; + pTer->Canvas->Draw(0, 0, pT); + delete pT; + delete pS; + } +} +// +// +//*************************************************************************** +//CLIBLクラス +//*************************************************************************** +// +// +//--------------------------------------------------------------------------- +void __fastcall CLIBL::Alloc(void) +{ + int am = m_AMax ? (m_AMax * 2) : 16; + LIBD *pN = new LIBD[am]; + if( m_pBase != NULL ){ + memcpy(pN, m_pBase, sizeof(LIBD)*m_Count); + delete m_pBase; + } + m_pBase = pN; + m_AMax = am; +} +//--------------------------------------------------------------------------- +void __fastcall CLIBL::Delete(void) +{ + if( m_pBase != NULL ){ + LIBD *cp = m_pBase; + for( int i = 0; i < m_Count; i++, cp++ ){ + delete cp->pName; + ::FreeLibrary(cp->hLib); + } + delete m_pBase; + } + m_pBase = NULL; + m_AMax = 0; + m_Count = 0; +} +//--------------------------------------------------------------------------- +void __fastcall CLIBL::Add(LPCSTR pName, HANDLE hLib) +{ + if( m_Count >= m_AMax ) Alloc(); + LIBD *cp = &m_pBase[m_Count]; + cp->pName = StrDupe(pName); + cp->hLib = (HINSTANCE)hLib; + m_Count++; +} +//--------------------------------------------------------------------------- +HANDLE __fastcall CLIBL::LoadLibrary(LPCSTR pName) +{ + LIBD *cp = m_pBase; + for( int i = 0; i < m_Count; i++, cp++ ){ + if( !strcmpi(cp->pName, pName) ){ + if( cp->hLib == NULL ){ + cp->hLib = ::LoadLibrary(pName); + } + return cp->hLib; + } + } + HANDLE hLib = ::LoadLibrary(pName); + if( hLib != NULL ) Add(pName, hLib); + return hLib; +} +//--------------------------------------------------------------------------- +void __fastcall CLIBL::DeleteLibrary(HANDLE hLib) +{ + if( hLib == NULL ) return; + + LIBD *cp = m_pBase; + for( int i = 0; i < m_Count; i++, cp++ ){ + if( cp->hLib == hLib ){ + ::FreeLibrary((HINSTANCE)hLib); + cp->hLib = NULL; + break; + } + } +} + +#if 0 +//--------------------------------------------------------------------------- +__fastcall CGrid::CGrid() +{ + m_Flag = 0; + m_Intval = 16; +} +//--------------------------------------------------------------------------- +void __fastcall CGrid::Draw(TCanvas *tp, int xw, int yw) +{ + if( !m_Flag ) return; + + int x, y, xx, yy; + + tp->Pen->Width = 1; + int rop = ::SetROP2(tp->Handle, R2_NOT); + for( x = 0; x < xw; x += m_Intval ){ + xx = x * 320 / xw; + tp->MoveTo(xx, 0); + tp->LineTo(xx, yw-1); + } + for( y = 0; y < yw; y += m_Intval ){ + yy = y * 256 / yw; + tp->MoveTo(0, yy); + tp->LineTo(xw-1, yy); + } + ::SetROP2(tp->Handle, rop); +} +//--------------------------------------------------------------------------- +void __fastcall CGrid::Align(int &x1, int &y1, int &x2, int &y2) +{ + if( !m_Flag ) return; + + int xw = x2 - x1; + int yw = y2 - y1; + x1 = int((double(x1) / m_Intval) + 0.5) * m_Intval; + x2 = x1 + xw; + y1 = int((double(y1) / m_Intval) + 0.5) * m_Intval; + y2 = y1 + yw; +} +//--------------------------------------------------------------------------- +void __fastcall CGrid::Align(CDraw *pItem) +{ + Align(pItem->m_X1, pItem->m_Y1, pItem->m_X2, pItem->m_Y2); +} +#endif + +#pragma package(smart_init) + diff --git a/Draw.h b/Draw.h new file mode 100644 index 0000000..17f4d22 --- /dev/null +++ b/Draw.h @@ -0,0 +1,605 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef DrawH +#define DrawH +#include +//--------------------------------------------------------------------------- +extern LPCSTR _ShapePIC[2][7]; +extern LPCSTR _ShapeBOX[2][7]; + +#define TEXT24BIT FALSE + + +#define POINT TPoint + +TColor __fastcall GetNearestColor(TColor col); +void __fastcall DrawTrans(TCanvas *tp, int x, int y); +//--------------------------------------------------------------------------- +// CLIBLクラス +typedef struct { + LPCSTR pName; + //HANDLE hLib; + HINSTANCE hLib; //ja7ude 0521 +}LIBD; + +class CLIBL { +public: + int m_AMax; + int m_Count; + LIBD *m_pBase; +private: + void __fastcall Alloc(void); + void __fastcall Add(LPCSTR pName, HANDLE hLib); +public: + CLIBL(){ + m_pBase = NULL; + Delete(); + }; + ~CLIBL(){ + Delete(); + }; + void __fastcall Delete(void); + HANDLE __fastcall LoadLibrary(LPCSTR pName); + void __fastcall DeleteLibrary(HANDLE hLib); +}; +//--------------------------------------------------------------------------- +typedef struct { + double ax; + double ay; + double px; + double py; + double pz; + double rz; + double rx; + double ry; + double v; + double s; +}SPERSPECT; +void __fastcall Perspect(Graphics::TBitmap *pSrc, Graphics::TBitmap *pTer, const SPERSPECT *pPar, TColor back); + +enum { + CM_SELECT, + CM_GROUP, + CM_LINE, + CM_BOX, + CM_TEXT, + CM_PIC, + CM_BOXS, + CM_TITLE, + CM_OLE, + CM_LIB, + + CM_TLIST=0x8000, +}; + +enum { + HT_NONE, + HT_P1, // line + HT_P2, // line + HT_PM, // line + HT_LT, // box + HT_RT, + HT_LB, + HT_RB, + HT_L, + HT_T, + HT_R, + HT_B, + HT_I, +}; + +class CDraw +{ +public: + int m_Command; + int m_Ver; + int m_X1, m_Y1; + int m_X2, m_Y2; + TColor m_LineColor; + TPenStyle m_LineStyle; + int m_LineWidth; + int m_BoxStyle; + +public: + int m_Cursor; + int m_CX1, m_CY1; + int m_CX2, m_CY2; + int m_BX, m_BY; + int m_MF; + int m_MC; +public: + TCanvas *pc; + TPaintBox *pBox; + +public: + __fastcall CDraw(); + virtual __fastcall ~CDraw(){}; + virtual void __fastcall Start(TCanvas *tp, int X, int Y); + virtual int __fastcall Finish(int X, int Y){return FALSE;}; + virtual void __fastcall Draw(TCanvas *tp){}; + virtual void __fastcall DrawFast(TCanvas *tp){Draw(tp);}; + virtual void __fastcall DrawSel(TCanvas *tp, int sw){}; + virtual void __fastcall FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off){}; + virtual void __fastcall Making(int X, int Y){}; + virtual void __fastcall UpdatePic(Graphics::TBitmap *pBmp){}; + virtual int __fastcall HitTest(int x, int y){return FALSE;}; + virtual void __fastcall StartMove(TCanvas *tp, int X, int Y, int code); + virtual void __fastcall Moving(int X, int Y){}; + virtual void __fastcall Move(int X, int Y){}; + virtual int __fastcall IsMove(void){return m_MF;}; + virtual int __fastcall Edit(void); + virtual int __fastcall Color(void); + virtual void __fastcall SaveToStream(TStream *sp); + virtual int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + virtual void __fastcall Copy(CDraw *dp); + virtual void __fastcall SaveString(TStream *sp, AnsiString &as); + virtual void __fastcall LoadString(TStream *sp, AnsiString &as); + virtual void __fastcall UpdateText(void){}; + virtual void __fastcall UpdateTimeText(void){}; + virtual int __fastcall IsTimeMacro(void){return 0;}; +// TColor GetCol(TColor c1, TColor c2, int x, int xw); + void __fastcall Normal(void); + void __fastcall SaveBitmap(TStream *sp, Graphics::TBitmap *pBitmap); + int __fastcall LoadBitmap(TStream *sp, Graphics::TBitmap *pBitmap); + void __fastcall AdjustRect(void); + virtual void __fastcall ReleaseResource(void){}; + virtual int __fastcall IsOrgSize(void){return TRUE;}; + virtual void __fastcall SetOrgSize(void){}; + virtual void __fastcall KeepAspect(void){}; + virtual LPCSTR __fastcall GetText(void){return NULL;}; +}; + +class CDrawLine : public CDraw +{ +private: + void __fastcall DrawCursor(void); + +protected: +public: + __fastcall CDrawLine(); + virtual __fastcall ~CDrawLine(){}; + virtual int __fastcall Finish(int X, int Y); + virtual void __fastcall Draw(TCanvas *tp); + virtual void __fastcall DrawSel(TCanvas *tp, int sw); + virtual void __fastcall Making(int X, int Y); + virtual int __fastcall HitTest(int x, int y); + virtual void __fastcall Moving(int X, int Y); + virtual void __fastcall Move(int X, int Y); +}; + +class CDrawBox : public CDraw +{ +private: +protected: + void __fastcall DrawCursor(void); + void __fastcall RoundRect(TCanvas *tp, int xw, int yw); +public: + __fastcall CDrawBox(); + virtual __fastcall ~CDrawBox(){}; + + virtual int __fastcall Finish(int X, int Y); + virtual void __fastcall Draw(TCanvas *tp); + virtual void __fastcall DrawSel(TCanvas *tp, int sw); + virtual void __fastcall Making(int X, int Y); + virtual int __fastcall HitTest(int X, int Y); + virtual void __fastcall Moving(int X, int Y); + virtual void __fastcall Move(int X, int Y); +}; + +class CDrawBoxS : public CDrawBox +{ +private: + +protected: +public: + __fastcall CDrawBoxS(); + virtual __fastcall ~CDrawBoxS(){}; + + virtual void __fastcall Draw(TCanvas *tp); +}; + +class CDrawTitle : public CDrawBox +{ +private: +public: + int m_Type; + int m_ColVert; + TColor m_Col1; + TColor m_Col2; + TColor m_Col3; + TColor m_Col4; + AnsiString m_Sound; + Graphics::TBitmap *pBitmap; + +protected: +public: + __fastcall CDrawTitle(); + __fastcall ~CDrawTitle(); + +// virtual int HitTest(int x, int y){return CDrawBox::HitTest(x, y) ? HT_I : HT_NONE;}; + int __fastcall HitTest(int x, int y); + void __fastcall Start(TCanvas *tp, int X, int Y); + int __fastcall Finish(int X, int Y); + void __fastcall FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off); + void __fastcall Draw(TCanvas *tp); + void __fastcall DrawFast(TCanvas *tp); + void __fastcall StartMove(TCanvas *tp, int X, int Y, int code); + void __fastcall Moving(int X, int Y); + void __fastcall Move(int X, int Y); + int __fastcall Edit(void); + int __fastcall Color(void){return Edit();}; + void __fastcall Copy(CDraw *dp); + + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); +}; + +class CDrawText : public CDrawBoxS +{ +public: + int m_Grade; + int m_Shadow; + int m_Zero; + int m_Rot; + int m_RightAdj; + int m_PerSpect; + int m_Stack; + int m_StackPara; + int m_Vert; + int m_VertH; + SPERSPECT m_sperspect; + AnsiString m_Text; + TFont *pFont; + TColor m_Col1; + TColor m_Col2; + TColor m_Col3; + TColor m_Col4; + TColor m_ColS; + TColor m_ColB; + Graphics::TBitmap *pBitmap; + Graphics::TBitmap *pBrushBitmap; + int m_X; + int m_Y; +private: + Graphics::TBitmap * __fastcall ConvToDDB(Graphics::TBitmap *pBmp); + Graphics::TBitmap * __fastcall ConvToDIB(Graphics::TBitmap *pBmp); + Graphics::TBitmap * __fastcall DupeB(TColor col); + + void __fastcall MakeBitmap(); + int __fastcall ZeroConv(BYTE charset, LPSTR p); + int __fastcall GetMaxWidth(int &n, LPCSTR p); + void __fastcall DrawTextVert(TCanvas *tp, int xc, int y, int fh, LPCSTR p); + void __fastcall DrawTextHoriANSI(TCanvas *tp, int xc, int y, LPCSTR p); + void __fastcall DrawText(TCanvas *cp, int x, int y, LPCSTR p, int zc); +protected: +public: + __fastcall CDrawText(); + __fastcall ~CDrawText(); + +// virtual int HitTest(int x, int y){return CDrawBox::HitTest(x, y) ? HT_I : HT_NONE;}; + int __fastcall Finish(int X, int Y); + void __fastcall Move(int X, int Y); + void __fastcall Draw(TCanvas *tp); + void __fastcall DrawFast(TCanvas *tp); + int __fastcall Edit(void); + int __fastcall Color(void){return Edit();}; + void __fastcall UpdateFont(TFont *pf); + + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + void __fastcall Copy(CDraw *dp); + void __fastcall Copy(CDraw *dp, int sw); + void __fastcall UpdateText(void); + void __fastcall UpdateTimeText(void); + int __fastcall IsTimeMacro(void); + void __fastcall ReleaseResource(void); + LPCSTR __fastcall GetText(void){return m_Text.c_str();}; +}; + +class CPolygon +{ +public: + int XW; + int YW; + int Max; // 最大点数 + int Cnt; // 現在の登録点数 + POINT *pBase; // ポイントの配列のポインタ +public: + __fastcall CPolygon(){ + Max = Cnt = 0; + pBase = NULL; + XW = 320; + YW = 256; + }; + __fastcall ~CPolygon(){ + Free(); + }; + void __fastcall Free(void); + void __fastcall AddPoint(int X, int Y); + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TStream *sp); + void __fastcall Draw(TCanvas *tp, int loop); + void __fastcall DrawOffset(TCanvas *tp, int x, int y); + void __fastcall DrawOffsetSiege(TCanvas *tp, int x, int y, TColor SCol, int e); + void __fastcall GetCenter(int &xc, int &yc); + void __fastcall Copy(CPolygon *p); + void __fastcall Stretch(int xw, int yw, int oxw, int oyw); + void __fastcall Stretch(CPolygon &pol); + void __fastcall Clear(void){ + Cnt = 0; + }; +}; + +class CDrawPic : public CDrawBox +{ +private: +public: + int m_Type; + int m_Shape; + int m_Adjust; + int m_TransPoint; + CPolygon m_Polygon; + CPolygon m_DrawPolygon; + Graphics::TBitmap *pBitmap; + Graphics::TBitmap *pLoadBitmap; +private: + void __fastcall CreateBitmap(void); + void __fastcall AdjustSize(void); + void __fastcall UpdateHistPic(Graphics::TBitmap *pBmp); + +protected: + void __fastcall DrawCursor(void); +public: + __fastcall CDrawPic(); + __fastcall ~CDrawPic(); + + int __fastcall Finish(int X, int Y); + int __fastcall FinishR(int X, int Y); + int __fastcall Color(void){return Edit();}; + void __fastcall Move(int X, int Y); + void __fastcall Draw(TCanvas *tp); + void __fastcall FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off); + void __fastcall SetLoadBitmap(Graphics::TBitmap *pBmp); + + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + void __fastcall Copy(CDraw *dp); + + int __fastcall Edit(void); + int __fastcall IsOrgSize(void); + void __fastcall SetOrgSize(void); + void __fastcall KeepAspect(void); +}; + +class CDrawOle : public CDrawBox +{ +public: + int m_Trans; + int m_Stretch; + TOleContainer *pContainer; + int m_OrgXW; + int m_OrgYW; +private: + void __fastcall GetOrgSize(void); + void __fastcall SetInitSize(void); + void __fastcall MakeItem(void); + void __fastcall MakeError(void); + void __fastcall SyncVerb(void); + void __fastcall ViewVerb(int sw); + TForm *pOleView; + +public: + __fastcall CDrawOle(); + __fastcall ~CDrawOle(); + + int __fastcall Finish(int X, int Y); + int __fastcall Color(void){return Edit();}; + Graphics::TBitmap* __fastcall MakeBitmap(void); + void __fastcall Draw(TCanvas *tp); + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + void __fastcall Copy(CDraw *dp); + int __fastcall Edit(void); + int __fastcall LoadFromFile(int x, int y, LPCSTR pName); + void __fastcall LoadFromBitmap(int x, int y, Graphics::TBitmap *pBmp); + int __fastcall Paste(void); + void __fastcall DoPrimary(void); + int __fastcall ObjectProperties(void); + int __fastcall IsOrgSize(void); + void __fastcall SetOrgSize(void); + void __fastcall KeepAspect(void); +}; + +#define DISFONTSMOOTHING 0x00000001 +typedef void (__cdecl *mcmFunc)(DWORD func, FARPROC pFunc); +typedef void (__cdecl *mcmLanguage)(DWORD lang); +typedef void (__cdecl *mcmAboutDialog)(HWND hWnd); +typedef HANDLE (__cdecl *mcmCreateObject)(const BYTE *pStorage, DWORD Size); +typedef const BYTE* (__cdecl *mcmCreateStorage)(HANDLE hObj, LPDWORD pSize); +typedef void (__cdecl *mcmDeleteStorage)(HANDLE hObj, const BYTE *pStorage); +typedef void (__cdecl *mcmDeleteObject)(HANDLE hObj); +typedef DWORD (__cdecl *mcmGetItemType)(HANDLE hObj); +typedef DWORD (__cdecl *mcmEdit)(HANDLE hObj, HWND hWnd); +typedef ULONG (__cdecl *mcmGetOrgSize)(HANDLE hObj); +typedef void (__cdecl *mcmPos)(HANDLE hObj, DWORD pos, DWORD size, DWORD tsize); +typedef LPCSTR (__cdecl *mcmGetUserText)(HANDLE hObj); +typedef HBITMAP (__cdecl *mcmUpdateText)(HANDLE hObj, HBITMAP hDest, LPCSTR pText); +typedef HBITMAP (__cdecl *mcmUpdateImage)(HANDLE hObj, HBITMAP hDest, HBITMAP hSrc); +typedef void (__cdecl *mcmSetDraft)(HANDLE hObj, DWORD sw); +typedef void (__cdecl *mcmSetEx)(HANDLE hObj, DWORD ex); +typedef void (__cdecl *mcmGetFont)(HANDLE hObj, LOGFONT *pLogfont); +typedef void (__cdecl *mcmSetFont)(HANDLE hObj, LOGFONT *pLogfont); +class CDrawLib : public CDrawBox +{ +public: + int m_Type; // 0:Static, 1-Text, 2-Image + AnsiString m_Name; // Name of custom item + HINSTANCE hLib; //ja7ude 0521 + HANDLE hObj; + Graphics::TBitmap *pBitmap; + int m_OrgXW; + int m_OrgYW; +private: + mcmFunc fFunc; + mcmLanguage fLanguage; + mcmAboutDialog fAboutDialog; + mcmGetItemType fGetItemType; + mcmCreateObject fCreateObject; + mcmCreateStorage fCreateStorage; + mcmDeleteStorage fDeleteStorage; + mcmDeleteObject fDeleteObject; + mcmEdit fEdit; + mcmEdit fFont; + mcmGetOrgSize fGetOrgSize; + mcmPos fPos; + mcmGetUserText fGetUserText; + mcmUpdateText fUpdateText; + mcmUpdateImage fUpdateImage; + mcmSetDraft fSetDraft; + mcmSetEx fSetEx; + mcmGetFont fGetFont; + mcmSetFont fSetFont; + AnsiString m_Text; + + FARPROC __fastcall GetProc(LPCSTR pName); + void __fastcall Delete(void); + void __fastcall LoadLib(int emsg); + void __fastcall SetBitmapSize(void); + void __fastcall UpdateText(int f); + void __fastcall SwapHandle(HBITMAP hb); + void __fastcall Pos(void); + void __fastcall Update(void); + int __fastcall Edit(int sw); +public: + __fastcall CDrawLib(); + __fastcall ~CDrawLib(); + + int __fastcall MakeR(LPCSTR pName); + int __fastcall Finish(int X, int Y); + int __fastcall Color(void){return Edit();}; + void __fastcall Move(int X, int Y); + void __fastcall Draw(TCanvas *tp); + void __fastcall DrawFast(TCanvas *tp); + void __fastcall SaveToStream(TStream *sp); + int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + void __fastcall Copy(CDraw *dp); + int __fastcall Edit(void); + int __fastcall Font(void); + void __fastcall ObjectProperties(void); + void __fastcall UpdatePic(Graphics::TBitmap *pBmp); + void __fastcall UpdateText(void); + void __fastcall UpdateTimeText(void); + int __fastcall IsOrgSize(void); + void __fastcall SetOrgSize(void); + void __fastcall KeepAspect(void); + LPCSTR __fastcall GetItemText(void){ + if( !hLib || !hObj || !fGetUserText ) return "???"; + return fGetUserText(hObj); + }; + int __fastcall IsTimeMacro(void); + LPCSTR __fastcall GetText(void){return m_Text.c_str();}; + + int __fastcall GetFont(LOGFONT *pLogfont); + int __fastcall SetFont(LOGFONT *pLogfont); +}; + +class CDrawGroup : public CDrawBox +{ +public: + int m_Max; + int m_Cnt; + int m_TransX, m_TransY; + int m_SX, m_SY; + TColor m_TransCol; + CDraw **pBase; + CDraw *pSel; +public: + int m_Hit; +protected: +public: + __fastcall CDrawGroup(); + __fastcall ~CDrawGroup(); + void __fastcall Free(void); + void __fastcall FreeItem(void); + void __fastcall AddItem(CDraw *dp); + void __fastcall DeleteItem(CDraw *dp); + void __fastcall ReleaseItem(CDraw *dp); + void __fastcall UpdatePic(Graphics::TBitmap *pBmp); + void __fastcall FillPic(TCanvas *tp, TColor col, int sw, double sx, double sy, int off); + void __fastcall Draw(TCanvas *tp); + void __fastcall DrawFast(TCanvas *tp); + void __fastcall DrawNotSel(TCanvas *tp); + CDraw* __fastcall SelectItem(int X, int Y); + int __fastcall HitTest(int x, int y){return CDrawBox::HitTest(x, y) ? HT_I : HT_NONE;}; + + CDraw * __fastcall MakeItem(int cmd); + CDraw * __fastcall AddItemCopy(CDraw *dp); + virtual void __fastcall SaveToStream(TStream *sp); + virtual int __fastcall LoadFromStream(TCanvas *tp, TStream *sp); + + virtual void __fastcall Copy(CDraw *dp); + void __fastcall UpdateText(void); + void __fastcall UpdateTimeText(void); + int __fastcall IsTimeMacro(void); + + void __fastcall BackItem(CDraw *pItem); + void __fastcall FrontItem(CDraw *pItem); + int __fastcall UpItem(int n); + int __fastcall DownItem(int n); + void __fastcall DrawTrans(TCanvas *tp); + + int __fastcall IsMacro(LPCSTR pKey); + void __fastcall AdjustTransPoint(void); + void __fastcall AdjustTransColor(Graphics::TBitmap *pBmp); + void __fastcall ReleaseResource(void); + void __fastcall GetColorBarPos(int &Y1, int &Y2); + CDraw * __fastcall GetLastItem(void); + + int __fastcall IsConvBitmap(CDraw *pItem); + void __fastcall ConvBitmap(CDraw *pItem); + CDrawPic* __fastcall MakePic(int x, int y, Graphics::TBitmap *pBitmap, int ov); +}; + + +#if 0 +//--------------------------------------------------------------------------- +class CGrid { +public: + int m_Flag; + int m_Intval; +public: + __fastcall CGrid(); + void __fastcall Draw(TCanvas *tp, int xw, int yw); + void __fastcall Align(int &x1, int &y1, int &x2, int &y2); + void __fastcall Align(CDraw *pItem); +}; +#endif + +//--------------------------------------------------------------------------- +int __fastcall LoadTemplate(CDrawGroup *pItem, LPCSTR pName, TCanvas *tp); +int __fastcall SaveTemplate(CDrawGroup *pItem, LPCSTR pName); + +void __fastcall SetDrawSize(int x, int y); +TColor __fastcall GetCol(TColor c1, TColor c2, int x, int xw); + +extern CDrawGroup DrawPara; +#endif + diff --git a/EMMSSTV.TXT b/EMMSSTV.TXT new file mode 100644 index 0000000..6275efd --- /dev/null +++ b/EMMSSTV.TXT @@ -0,0 +1,784 @@ +Basic operations of MMSSTV + +Version 1.08 - July 12, 2002 by JE3HHT Makoto Mori +Translated into English by JA7UDE Nobuyuki Oba + +======== +Preface +======== + +This program is for transmitting and receiving SSTV using a PC soundcard. I was making a utility to adjust the soundcard clock for PSK31 programs. However, I have changed my mind, and the utility has eventually become an SSTV program. + +I thought that I should have made at least one SSTV QSO with this MMSSTV and then declared it as the release version 1.0. However, I am very busy on my own business and will have no time for amateur radio. In addition, there seem to be some people already using this program. At this time, I have decided to release this version as 1.00. + +======================== +Uninstall MMSSTV +======================== + +MMSSTV does not add anything to the Windows registry. +Delete the entire directory where MMSSTV is installed. + + +======== +System requirement +======== + +OS: Windows 95, 98, 98SE, ME, NT, 2000 +Soundcard: 16-bit 11025Hz or 22050Hz +Video adaptor: 256 or more colors (16- or 24-bit video adaptor is +recommended) +RAM: 32MB or more + +I managed to run MMSSTV on my old PC with a Pentium 100MHz, but I strongly recommend a faster CPU. + +The operation speed of MMSSTV is highly dependent on the performance of the video adaptor. In other words, even if two PCs have the same CPU, they should give different performance in accordance with the equipped video adaptor. In particular, the 256-color video adaptor is likely to consume more CPU power for the pallet calculation. For this reason, a 16- or 24-bit color adaptor is strongly recommended. +If a 256-color video adaptor is used, the displayed colors are affected by the performance of the pallet calculation. + +To save the CPU power, try the following steps. + - Increase the FIFO size of the soundcard. + (select Option, select the Misc tab, and increase the value + in the sound FIFO size) + - Disable the RxBPF + (select Option, select the RX tab, and check RxBPF OFF) + - Choose RX buffer FILE or turn it off + (select Option, select the RX tab, and check NONE or FILE + in the RX buffer pane) + - Turn the TX BPF off + (select Option, select TX tab, and uncheck Tx BPF) + +In default, the Loopback is turned off. When it is turned on, MMSSTV performs TX and RX in parallel and increases the CPU load. Make sure you turn it off if your PC cannot afford to run them in parallel. + + +--- IMPORTANT NOTICE --- +The RX buffer temporarily stores the receiving or just received image to get it back to the RX window after adjusting the slant and phase. The buffer stores 270-second sound data, and therefore it would cause page swapping if the RAM is selected or if the physical memory size of your PC is not sufficient to keep the data on the memory. If you have intermittent halts during the receive operation, please select FILE or turn it off. + +The size of the receive buffer is BIG; probably bigger than you expect. If you do not use the automatic slant adjustment function, you should not have any operation difficulties without the receive buffer. + + +======== +PC and radio hookup +======== + +You can use the same interface of MMTTY. +Refer to the MMTTY help. + +======== +PTT +======== + +You can use the same interface of MMTTY. +Refer to the MMTTY help. + + +======== +SSTV modes +======== + +MMSSTV supports the following SSTV modes. + +Mode Duration (sec) Size Method +Robot B/W 8 8 160x120 Mono tone +Robot B/W 12 12 160x120 Mono tone +Robot 24 24 160x120 Color differentiation +Robot 36 36 320x240 Color differentiation +Robot 72 72 320x240 Color differentiation +AVT 90 90 320x240 RGB (no synchronization pulse involved) +Scottie 1 110 320x256 RGB +Scottie 2 71 320x256 RGB +Scottie DX 269 320x256 RGB +Martin 1 114 320x256 RGB +Martin 2 58 320x256 RGB +SC2-180 182 320x256 RGB +SC2-120 122 320x256 RGB +SC2-60 62 320x256 RGB +PD50 50 320x256 Color differentiation +PD90 90 320x256 Color differentiation +PD120 126 640x496 Color differentiation +PD160 161 512x400 Color differentiation +PD180 187 640x496 Color differentiation +PD240 248 640x496 Color differentiation +PD290 289 800x616 Color differentiation +P3 203 640x496 RGB +P5 305 640x496 RGB +P7 406 640x496 RGB + +As far as I know, all the domestic SSTV QSOs in JA are made in the Scottie 1 mode. In US, Scottie 1 and 2 are commonly used. In EU, Martin 1 and 2 are commonly used. + +The following modes are in the experimental phase. + +MP73 73 320x256 Color differentiation +MP115 115 320x256 Color differentiation +MP140 140 320x256 Color differentiation +MP175 175 320x256 Color differentiation +MR73 73 320x256 Color differentiation +MR90 90 320x256 Color differentiation +MR115 115 320x256 Color differentiation +MR140 140 320x256 Color differentiation +MR175 175 320x256 Color differentiation +ML180 180 640x496 Color differentiation +ML240 240 640x496 Color differentiation +ML280 280 640x496 Color differentiation +ML320 320 640x496 Color differentiation + +MP mode: It is based on the color difference scheme that the PD mode uses. This mode should be useful for reducing multi-path distortion and jitter. The scan time for each pixel is longer than the other modes, but the color information along the vertical axis is compressed. + +MR/ML mode: It is based on the color difference scheme that the Robot 24/72 mode uses. This mode is aimed for offering good resolution in good condx. The color information along the horizontal axis is compressed. + +These modes are not new to SSTV actually, but I have added them by way of trial. In particular, I have considered good trade-off between the transmission time, picture size, and quality. As a new trial, the VIS signal is expanded to 16 bits. + + +======== +SSTV operating frequencies +======== + +In JA, the most active frequency is 7.033 MHz LSB. The common frequencies in the world are: 14.230, 21.340, and 28.680 MHz USB. I have noticed that these frequencies are crowded nowadays. I recommend you make QSY after you once made a contact at these call frequencies to avoid unexpected QRM. + + +======== +Receive SSTV +======== + +(1) Tone frequency + +SSTV's tone frequencies are defined as follows: + Synchronization pulse 1200 Hz + Low level of the image 1500 Hz + High level of the image 2300 Hz + +There are four marker lines in the spectrum window of MMSSTV. From left to right: + Green line 1200Hz Synchronization pulse + Yellow line 1500Hz Low level of the image + Yellow dotted line 1900Hz Center level of the image + Yellow line 2300Hz High level of the image + +To tune the frequency, make the signal energy be laid between the 1500Hz and 2300Hz marker lines. Alternatively, you can tune the receiver so that the synchronization pulses are on the 1200Hz marker line. +However, the synchronization pulse is very short, so it might take time for you to get used to adjusting the frequency in this way. + +Since SSTV QSOs are made on the fixed common frequencies, you probably do not have difficulty in tuning the radio after you have done once. + +(2) Automatic start + +When the Auto button in the RX mode pane is depressed, MMSSTV automatically starts the receive operation in response to the start trigger signal. +The start trigger signal is called VIS signal, which consists of the 1200MHz marker signal and the SSTV mode code (1100Hz and 1300Hz FSK). MMSSTV detects the signal by using a resonant FSK demodulator, and automatically starts the receive operation if it finds the mode supported. + +To automatically start receiving, MMSSTV provides another method, which measures the interval time of the synchronization pulses. If you do not want to use this method, go to Option, select RX tab and choose 'VIS only' in the auto start option. + +* Squelch +Four levels (Lowest, Lower, Higher, and Highest) for the trigger threshold can be selected. +Lowest makes MMSSTV trigger with the weakest signal. +Highest makes MMSSTV trigger with the strongest signal. In other words, only the strong signal can kick off the receive operation. + +(3) Manual start + +In case MMSSTV does not automatically start receiving or you want to start receiving not from the beginning, push one of the mode buttons below the Auto button. In JA, HL, and US, try Scottie 1. In EU, try Martin 1. + +(4) Automatic stop, restart and resync + +When the auto stop in the RX window of the Setup MMSSTV is checked, MMSSTV automatically stops receiving in case it has lost the synchronization signal (this does not work in AVT90). + +When the auto start in the RX window of the Setup MMSSTV is checked, MMSSTV restarts the receiving from the beginning in case it detects the VIS signal even during the receive operation. It should be noted, however, that MMSSTV would not be able to detect the VIS signal because of the RxBPF effect. + +When the auto resync box in the RX window of MMSSTV Setup is checked, MMSSTV automatically attempts to re-synchronize the RX image. This is useful if the MMSSTV has lost the synchronization during RX. +However, a couple of lines are displayed with the old synchronization timing and therefore they might appear as a thin bar. + + +(5) Slant adjustment + +MMSSTV latches the SSTV signal with respect to the soundcard clock. For this reason, you would have a slanted image if the soundcard clock of your PC is not correctly calibrated or if the timing of the received signal is discriminated. There are three ways to adjust the slant. + +- High-accuracy slant adjustment +- Automatic slant adjustment +- Manual slant adjustment + +High-accuracy slant adjustment and Automatic slant adjustment analyze the timing of the received signal to automatically adjust the slant. They, however, might not work well in the situations of QRM, multipath, or weak signals. + + +The adjusted clock timing is applied only to the current image; it is not memorized in the MMSSTV. If you want to keep the timing adjusted, push the Mem button. The adjusted timing is used for all the images afterwards. + + +== High-accuracy slant adjustment == + +In this method, MMSSTV uses the least square method to solve the linear equation for analyzing the synchronization timings. For high quality RX signals, it will give the error less than 2ppm. +To start the high-accuracy slant adjustment, push the NicoNico button (comment by JA7UDE: the smiley button). You also can start it by right clicking on the sync or RX window and selecting "High-accuracy slant adjustment" in the pop-up menu. It should be noted that you must have received at least 16 scan lines to make this adjustment operational. The more the scan lines, the better the accuracy. + + +* You cannot use this method if you turn the RX buffer off. + + +== Automatic slant adjustment == + + +In Automatic slant adjustment, MMSSTV periodically measures the interval of the synchronization signals and automatically adjust the slant. When you leave this mode turned on, MMSSTV adjust the image in real time, but it gives slightly less accuracy than the High-accuracy slant adjustment. + +To start this method, check the Auto slant box in the RX tab of the Setup MMSSTV menu. You also can start it by right clicking on the RX window and selecting Auto slant adjustment in the pop-up menu. + + +* You cannot use this method if you turn the RX buffer off. + + + +== Manual slant adjustment == + Click the Sync tab of the main window and do the following procedure. + +1) Push Slant button +2) Click the upper right edge of the synchronization signal (white line) +3) Click the lower right edge of the synchronization signal (same white line) + +The synchronization signal is displayed in a relatively fat line, so you must click the same side. Immediately after you click once on the line, a guide cursor is displayed. Adjust the cursor in parallel with the synchronization signal line, and click again. + +According to this procedure, MMSSTV recalculates the sampling clock of the soundcard and adjusts the receiving or just received image. If you do not obtain the acceptable result, repeat the procedure. + +In case of small slant, it is a good idea to use the up-down button at the bottom of the Sync window. Click on the View menu, select Always show RX viewer, push the up-down button with looking at the slant of the image. + + +When you have obtained the successful adjustment and want to use it as the default frequency, push the Mem button; otherwise MMSSTV applies the adjustment to the current image only. + +* If you turn the RX buffer off, you cannot redraw the picture after adjusting the slant. + + +(6) Fine tune of the synchronization point + +MMSSTV automatically gets the receive operation synchronized with the transmitted image except in case of AVT90. However, it at times fails to do so in very bad conditions. You should immediately become aware of such a condition because the image is ill colored. + +If you are aware of the case, try the procedure below: + +1) Push Sync tab of the main window. +2) Push Phase button. +3) Click the left edge of the synchronization line (fat white line). + +MMSSTV arranges the image so that the clicked point becomes the leftmost position of the image window. If you do not get it right position, repeat the procedure. + +AVT90 does not have the synchronization signal in the image data. For this reason, you will see only a monochrome image in the Sync window. You can click one of the gaps (there are three gaps). + +* If you turn the RX buffer off, you cannot redraw the picture after you adjust the phase. + + + +======== +Receive history +======== + +MMSSTV can store up to 32 received images in default. To increase or decrease this number, click Option, select Setup, click Misc tab, and change the value in the History max box. If the number of stored images would exceed the specified value, the oldest image is erased in an FIFO manner. + +It should be noted that one image requires about 200KB disk space, and thus 256 images require about 50MB. Pay attention to the disk space of your PC. + +To reduce the disk space, you could use the JPEG format. Click the picture with the right button of your mouse and select Use JPEG format in the pop-up menu. + +The RX history is only used for a temporary buffer. The old pictures will automatically be deleted. If you want to keep them, right click and check the auto copy to another folder. + +With this automatic copy function turned on, MMSSTV records the index into the QSL field of the log so that it can retrieve the picture later. + +To manually copy the history picture to another folder, drag and drop the picture in the history window to the QSL box in the log window. To use this function, you must define the name of the target folder in advance. + +MMSSTV automatically records the index in the QSL field of the log, either if the auto copy is turned on or if the history image is dropped in the QSL box. Using the MMSSTV log facility, you anytime can refer to the image by pressing the Image button. + + + +======== +Transmit SSTV +======== + +To transmit an SSTV image, click TX tab of the main window. The image you see there is transmitted (What You See is What You Transmit). Adjust the mic gain appropriately. + + ***** DO NOT USE SPEECH PROCESSOR ***** + +(1) TX image preparation + +There are several ways to prepare the TX image. + +1. Drag&drop an image from the stocked picture gallery at the bottom in the main window to the TX window. + +2. Drag&drop an image from the thumbnail window of the folder (View -> Always show thumbnails of files folder) to the TX window. + +3. Drag&drop an image from Windows file manager (Explorer) to the TX window. + +4. Drag&drop an image from another image manipulation tool that supports Drag&drop to the TX window. + +5. Copy&paste an image from another image manipulation tool to the TX window through the Windows clipboard. + +You can make the TX image superimposed with a template. The template operation is explained in the later section of this document. + +Click the TX image with the right button of the mouse to get a pop-up menu that facilitates image manipulations, such as file load and save. Drag&drop from Internet Explore is also supported. + + +(2) Mode selection + +Select the SSTV mode. + +* If you uncheck "SSTV mode fixed" in the TX page of MMSSTV Setup option, MMSSTV automatically uses the SSTV mode that was used by the most recently received RX image. + + +(3) Transmission + +Push the TX button at the left bottom of the window to start transmission. The horizontal marker line moves from top to bottom as the image is transmitted. MMSSTV automatically returns to RX after it completes the transmission. If you want to abort the transmission, push the TX button again. + +MMSSTV has a 12-second sound buffer, which should be big enough in the normal environment. If your PC is not powerful, you had better not do other operations during the transmission. + +If MMSSTV has lost the timing during TX, it shows a caution message after the TX completion. In this particular case, you might be able to solve this problem by increasing the number of FIFO in the Misc page of the Setup window. + + +(4) Adjustment of the slant of the TX image + +Some soundcards (especially PCI form factors') have slightly different frequencies for recording and playing. In this particular case, even if you have correctly adjusted the clock in RX, you would have a slant image in TX. + +MMSSTV has a means to adjust the soundcard clock for TX and RX independently. Refer to the Soundcard section at the end of this document for details. + +(5) Tune button and CWID + +For repeaters in US, MMSSTV has a tone generator. Push the Tune button to transmit a 1750Hz tone. + +You can send a CWID after the TX completion. Check the CWID box in the TX of the Setup window. This is for a European friend of mine. + + + +======== +Template +======== + +Using a template, you can make a simple picture, which is superimposed to the TX image. For example, you can use a macro command that puts his/her call sign on the TX image. + + +MMSSTV provides primitive image-manipulation functions, but has no support for the group operations now. + +Make picture items using the tool buttons at the bottom of the window. + +- Arrow button Turn on/off the selection mode +- Line button Draw line + +- Square button Draw rectangle +- Shaded square button Draw rectangle with color pasted +- T button Draw text +- Picture button Insert picture or history image +- Color bar button Draw color bar +- Scissors button Cut the item +- Paste button Paste the item +- Color palette button Change the color +- L button Change the property of the selected item +- f button Change the font + +To use a macro text, for example, push T button and then click the point in the window where the text is placed. The text input dialog box is displayed. Push Macro button and select %c to place his/her callsign there. + +To move the item, push Arrow button and use drag&drop it. + +Here I do not cover all the operations, but they are similar to the DRAW software. Give it a try by yourself. + +* You can use drag&drop to copy an image (BMP or JPG) from a file manager (e.g., Explorer) to the template box. + + +====== +Superimpose the template over the TX image +====== + +When you use a template, MMSSTV superimposes all the colors except a transparent one in the template over the TX image. The default transparent color is defined at the bottom right position of the template window. You can change the position by right clicking at the arbitrary spot in the window. However, you must click the spot where no template item resides in. + +Special care should be taken if you place a template item at the bottom right of the window. + +In version 0.21 or later, the function that automatically replaces the transparent point is default ON. Therefore, the transparent point is automatically moved to where no template item exists. + +You can use any color as the transparent (background) color, but you must choose the color that you do not use in the template. However, a color bar and an image are the exceptions. In other words, you even can choose a color that is used in a color bar or an image as a transparent one. + +* You can settle a background color that is not used in the template by right clicking on the template and selecting "find unique background color." + +If you want to create or edit the TX picture during the QSO, I would recommend you use other editing software programs, which have excellent capability in manipulating images. + +The template of MMSSTV is supposed to offer the macro functions, such as his/her call sign, RSV report, and contest numbers. Therefore, you would not find good reason to use templates if you do not use the logging function. + + + +======== +Stock area +======== + +MMSSTV has a stock area, which can stores up to 300 images. Each stocked image has the image data and the template information. To manipulate the clipboard, save and load files, click the stock image with the right button of the mouse. You will have a popup menu. + +To save the disk space, you can use the JPEG format for the stocked images. +Right click the image and select Use JPEG format in the pop-up menu. + +It is a good idea to make a template picture in association with the TX image in advance. The stocked area can store the images and the templates independently. However, if you use drag&drop to copy the stock image to the TX window, MMSSTV copies the associated template, too. +This is effective only if the Show superimposed templates box is checked. +If the box is not checked, MMSSTV copies the image and the template independently. + +The following table shows how MMSSTV performs the drag&drop operation. + + +[Show superimposed templates ON] + +From To Action +---------------------------------------------------------------------- +S.pic TX window Copy the image and template +S.template Template window Copy the template only +TX window S.pic Copy the image and template +Template window S.template Copy the template only + + +[Show superimposed templates OFF] + +From To Action +---------------------------------------------------------------------- +S.pic TX window Copy the image only +S.template Template window Copy the template only +TX window S.pic Copy the image only +Template window S.template Copy the template only + + +You can drag&drop an image from Explorer or My Computer to the stock. + +It takes substantial time to make the text change in effect in the template. +For this reason, the window redraw is slowed down during superimposing of the template in the stocked image area. If you do not like it, try checking off Show superimposed templates or checking on Draft. In addition, the JPEG format will require a little bit longer time to re-read the file. + +* If you get the thumbnail window of the folder displayed on the stocked images window, MMSSTV will use the thumbnail window on behalf of the stocked image window. +MMSSTV temporarily hides the thumbnail window when you switch to the stocked template window. + + +====================== +Picture size and header +====================== + +The number of scan lines in the Robot and AVT modes is 240. On the other hand, that in the Scottie and Martin modes is 256. This difference is due to the domestic TV modes on which the SSTV modes are based. +Robot and AVT were devised in the US and defined to have 240 scan lines after the NTSC. Scottie and Martin were devised in the UK and defined to have 256 scan lines. My guess is that, to make them compatible to Robot and AVT, the first 16 lines are used for the header that has no picture data. +When the receiver uses a scan converter and an NTSC TV set, he/she should see only the 240 scan lines on the TV set. + +I think, however, the 16 lines make no sense in the SSTV using PC. The 16 lines could have some information on the sending picture. + +MMSSTV allows users to define the header (16 scan lines) by using the template item. The following TX modes are supported. + +----- Raw picture has 240 lines; the SSTV mode has 256 lines (e.g., Scottie) +1) Define the header in the template. +2) Push "Shift picture for the header color bar" button to shift down the raw picture. +or +2) Preserve the upper margin in the picture clipper and copy it to the TX window. + +----- Raw picture has 256 lines; the SSTV mode has 256 lines (e.g., Scottie) +You can put a header to the first 16 lines, or you put no header. Either is OK. Bear in mind, however, that some receivers/converters will not be able to display the first 16 lines. + +When you use the header, you could push the "Adjust picture for the header color bar" button in the TX window so as not to get the raw picture hidden behind the color bar. In this case, the aspect ratio of the raw picture is changed. + +----- Raw picture has 240 lines; the SSTV mode has 240 lines (e.g., Robot) +MMSSTV transmits the image without a header. + +----- Raw picture has 256 lines; the SSTV mode has 240 lines (e.g., Robot) +1) Define the header in the template. +2) Push the "Shift picture and template for 240 line mode" button to shift up the raw picture and the template. The upper 16 lines of the raw picture are not transmitted. +or +Define the template without a header. The lower 16 lines of the raw picture are not transmitted. If you push "Adjust picture and template for 240 line mode" button, you do not lose the lower 16 lines but the aspect ratio of the picture is changed. + + + +==================== +Program menu +==================== + +With the program menu, you can instantly start your favorite programs, such as an image manipulation tool, PSK31, RTTY, and MFSK16 programs. + +If you check Suspend box in the Assign menu, MMSSTV automatically goes down to the suspended state and starts the selected program. In this state, MMSSTV has released the COM and soundcard resources in order to allow the other program to use them. To restart MMSSTV, first terminate the program and then click the MMSSTV icon in the Windows task bar. + +When you want to start the program that is not assigned to the MMSSTV program menu, you can select Suspend in the Program option. +MMSSTV has released the hardware resources of the COM and soundcard and makes itself iconized. + +If you wake MMSSTV up again while the other program that uses the COM and soundcard resources is running, MMSSTV would show an error message. +In this case, MMSSTV will not be iconized again. To resume MMSSTV, terminate the other program and wake MMSSTV up again, or select Restore in the Program menu. + +* You do not have to check Suspend for an image manipulation tool, because it typically does not use the COM or soundcard. + + +======== +Radio command +======== + + +Refer to the MMTTY manual. + + + +======== +Demodulator +======== + +This section describes the digital signal processing used in MMSSTV. Refer to Digital.Txt of MMTTY for basic DSP operations. + +MMSSTV has three types of demodulators. + +(1) Demodulator configuration + +MMSSTV's demodulator has the following configuration. + +Sound --> BPF (FIR) --+> BPF1100 (IIR) --> VIS symbol '1' + | + +> BPF1300 (IIR) --> VIS symbol '0' + | + +> BPF1200 (IIR) --> Sync + | + ---> Zero cross det. --> Picture data + (1500 to 2300) + or + | + ---> PLL(1500 to 2300) --> Picture data + or + | + ---> Hilbert(1500 to 2300) --> Picture data + + +The zero cross detector's configuration is + + ---> Differentiator ---> Counter ---> Out LPF ---> Pic. data + + +The next figure shows the PLL configuration + + ---> Phase det. ---> Loop LPF ----> Out LPF ----> Pic. data + | | + <---- VCO <------------- + +The next figure shows the Hilbert transform configuration. I got this idea from JA6UHL Nishimura-san (MNI TNX to JA6UHL). + + --+-> Delay(N) -> Real + | |==> ATAN -> Differentiator -> LPF -> Pic. data + --> FIR(2N) --> Image + + +According to my experiences, they have the following pros and cons. Please give it a try by yourself to find your favorite method. + +Decoder Zero-cross PLL Hilbert transform +Color accuracy Fair Good Good +Image resolution Fair Fair Good +QSB Good Fair Good +CPU load Low Low High +Sampling freq. HB* HB* ---------- + +*HB: The higher, the better. + + +In the zero-cross and PLL methods, you can set the cut-off frequency of the OutLPF higher. + +In the Hilbert transform, the accuracy of the phase differentiation degrades as the sampling frequency increases. The default sampling frequency, 11025Hz, gives better results, though MMSSTV does the decimation to keep the transform accuracy. + + +(2) Zero cross detector parameters + +[Out LPF] +This filter smoothes the frequency ingredients obtained by the counter. +If you want a sharp image, increase the cut-off frequency. +If you want a low-noise image, decrease the cut-off frequency. +You can select an IIR or FIR filter for the Out LPF. However, it seems that they have no significant difference. The FIR filter is better for low sampling frequency because it consumes lower CPU power than the IIR filter. + + +(3) PLL parameters + +The parameters of the PLL affect the picture quality. Since the behavior of this PLL is just the same as that of the hardware PLL, try adjusting the parameters as you have better results. + +[VCO Gain] +VCO gain strongly affects the response of PLL. Higher VCO gain gives quicker response; lower VCO gain gives slower response. To high VCO gain would result in the oscillation of the decoded signal. + +[Loop LPF] +In addition to VCO, the Loop LPF is an important parameter that dominates the loop dumping factor. Always use a one-order filter. If you increase the cut-off frequency, the oscillation amplitude of the decoded signal becomes bigger. + + +[Out LPF] +The Out LPF filter does not affect the response of the PLL because it sits outside of the loop. It, however, should be noted that it strongly affects the picture quality. If you want a sharp picture, set the cut-off frequency higher. If you want a low-noise picture, set it lower. Adjust it according to your preference. + + +(4) Differentiator + +When the Differentiator box is checked, MMSSTV compensates the LPF effect by boosting the high-frequency ingredient of the received image. +However, it makes the receive image be more likely affected by the noise. +Try adjusting the effect with the slider for your preference. As the slider goes right, the differentiator takes sharper effect. + +*The differentiator is not related to the differentiator of the zero-cross detector. + + +(5) Level converter + +The level converter translates the frequency value derived by the decoder into the color amplitude values. MMSSTV provides two types of converters, which can be selected in the RX window of MMSSTV Setup. + +- Linear converter (uncheck the polynomial box) +It assumes that the frequency and the color level are linearly related. It is simple, but the frequency characteristics of the decoder must be linear. + +- Polynomial converter (check the polynomial box) +It uses a 17-th order polynomial formula for the level conversion. It works better if the frequency characteristics of the decoder are not linear. Since the converter uses a pre-calculated table to boost the processing speed, it should not require much more CPU load. + +It is a good idea to use the polynomial converter for the 11025MHz zero-cross detector because it has a little linearity problem in 2200 to 2300Hz. As the sampling frequency goes higher, the decoder will have better linearity. However, even in 11025Hz, the conversion error is 2/256 - 3/256, and therefore the error might not be visible. + +MMSSTV starts the automatic calibration by pressing the calibration button in the RX window of MMSSTV Setup. It takes about 20 seconds. +After the calibration, MMSSTV shows the frequency characteristics figure. +If the line of the figure goes straight down to the right, you can uncheck the polynomial converter (you can use the linear converter). + +=============== +Profile +=============== +The default demodulator parameters are settled according to my experiments, which, however, are very limited. I have had no sufficient time for the parameter optimization. If you are a master of SSTV, you already have found good parameters. + +With the Profile function, you can easily save and load up to 8 sets of the demodulator parameters. Each set can be named, as you like. + +It is a good idea to save your favorite demodulator parameter set as MyDefault before you try many different parameters. If you got lost in the parameter setting, you will be able to step back to the start point. + +MMSSTV has a special profile "MMSSTV Default," which cannot be modified by the user. This is the MMSSTV default parameter set. + +* It should be noted that the Profile memorizes the demodulator parameters only. + + +==================== +Supplemental RX filters +==================== + +MMSSTV has three supplemental RX filters. + + Sound ---> Notch ---> LMS -+-> BPF ---> Demodulator + | + --> Spectrum display + +[Notch] + This is a simple BEF (band elimination filter) of FIR type. The notch filter is engaged when the user left clicks on the spectrum or waterfall window. To disable the filter, just right click. + The notch filter eliminates a beat, but it possibly degrades the image quality if the notch frequency is set in the image transmission frequency range. If the frequency of the filter is on or close to the synchronization signal, MMSSTV would stop RX for weak SSTV signals if Auto stop function is turned on. + + +[LMS] + It is an adaptive filter based on Leaky LMS (Least mean Square) method. It can be turned on/off using the LMS button in the main window. + The default mode is noise smoothing. You can select automatic notch modes by right clicking on the LMS button. + + The response of the automatic notch filter is intentionally set slow so as not to degrade the image quality. Even set so, some images will be affected. + + + +[BPF] +It is a simple FIR band-pass filter. You can choose the sharpness in the RX page of the setup MMSSTV menu. As it is sharper, it is more likely to exclude adjacent QRMs, but on the other hand it degrades the horizontal resolution. + + +================ +TX filter + +================ + +MMSSTV generates the TX signal with the flow shown below. + +Picture data ---> LPF ---> VCO ---> BPF ---> D/A ---> Sound data + ON/OFF ON/OFF + +LPF and BPF are used to limit the frequency of the digital output as insurance. +If the CPU load is too high for TX, you can turn them off. However, I strongly recommend that you turn the BPF on when you use CWID. + + +[LPF] +This filter smoothes the signal translation from the image to the frequency domain. +As a result, the frequency bandwidth is substantially limited and the horizontal resolution of the TX image is slightly sacrificed. + +[BPF] +This filter limits the bandwidth of the TX signal. It is useful to limit the spectrum spread for CWID. + +======== +Sample frequency +======== + +MMSSTV has an option that allows the following sampling frequencies: + + 8000 Hz Secondary standard frequency + 11025 Hz Primary standard frequency + 12000 Hz + 14000 Hz + 16000 Hz + 18000 Hz + 22050 Hz Primary standard frequency + 24000 Hz + 44100 Hz Primary standard frequency + +You will have better quality in the RX images by increasing the sampling frequency and setting the cut-off frequency higher in the zero-cross and PLL decoders. In the Hilbert transform decoder, on the other hand, I recommend the default sampling frequency 11025Hz. + + + It should be noted that not all the soundcards support the frequencies listed above all. All the soundcards, however, should support 11025Hz, 22050Hz and 44100Hz. In addition, the high frequency dissipates more CPU power and more memory space. + +Tips: +* MMSSTV always calculates the FFT with 2048 points. To obtain the proper frequency resolution, MMSSTV uses a half frequency for FFT in case the sampling frequency is 18000Hz or higher. In the same manner, MMSSTV uses a quarter frequency in case of 44100Hz. + + +======== +Clock calibration +======== + +In SSTV, the discrimination of the clock appears as a slanted image. For MMSSTV, you are not required to have the absolute and exact clock frequency value (e.g. 11025Hz). But it is important to get MMSSTV informed on what the frequency of your soundcard has. + + +In normal situations, you would only have to adjust the slant by using the Sync window. If you want to calibrate your soundcard very accurately, listen to the standard radio or fax wave. + +1) Go Option, Setup, Misc page, and push Adj button. +2) Receive standard radio wave (e.g., WWV and JJY). +3) Tune into the tick sound. +4) Continue listening to the sound for a while. You have a vertical line. +5) Click the upper point of the line. +6) Click the lower point of the line. + +You could use FAX broadcasting instead of WWV or JJY, but be sure it has exact timing. Refer to the MMTTY help for details. + +If your soundcard seems to have different clock sampling frequencies for TX and RX, adjust the offset frequency with the following procedure. + +1) Adjust the slant in RX. +2) Go Option, Setup, and TX page. Select External in the Loopback. +3) Connect the Line-out to the Line-in of your soundcard. +4) Transmit an image with Martin 1. +5) You should have an image through the external feedback. +6) After completing the image receive, go Sync page and adjust the slant. + - You could use the High-accuracy slant adjustment. + - Do not push the Mem button +7) Push the TX(TX offset) button in the sync page. +8) Make sure that you have no slant in the TX. If you still have slant, repeat from (6). + +It is a good idea to use the High-accuracy slant adjustment at Step 6. If you are not satisfied with the result, start it again. Never push the Mem button at this step. + +You can use the LoopBack function of a mixer program instead of using the external feedback line. + +Although this procedure can be applied only for the soundcard that supports the full-duplex mode, the soundcard that does not support the full-duplex mode should not have different frequencies for TX and RX, and therefore you do not need this calibration. + +If you have a report that your TX image is greatly slanted, try changing the soundcard modes, monaural or stereo (Source in the Misc window of Setup MMSSTV). + +Some soundcards seem to use different sampling frequencies for the full-duplex and no-full-duplex operations. +In such a case, the offset calibration using the external loop back does not help. You should always have the loop back External or consult the QSO report. + + + +========== +Setup MMSSTV Misc +========== + +[FIFO] +FIFO specifies the number of the buffer for the low-level sound processing. As the number is increased, the possibility of timing loss is decreased because of larger sound processing margin. +Enlarge the RX-FIFO if you lose the timing in RX. Enlarge the TX-FIFO if you lose the timing in TX. + +[Priority] +Priority defines the task priority for low level sound processing. If you lose the sound during RX or TX, raise the priority. If the response of the menu operations is slow, lower the priority. Normal is the lowest and Critical is the highest priority. + +[DeviceID] +DeviceID specifies the ID number of the sound card. When you have only one sound card, put -1 or 0 to DeviceID. -1 uses the default sound card. The sound card IDs are sequentially assigned as 0, 1, 2, .... When you have two sound cards, for example, and want to use the second one for MMSSTV, put 1 to DeviceID. + +[Source] +Source defines the channel of the sound card. Mono makes the sound card work in the monaural mode. Left or Right makes the sound card work in the stereo mode and uses one of the channels. In TX, MMSSTV outputs the sound to both channels irrespective of the Source setting. + +[Clock] +Clock is the sampling frequency of MMSSTV. Refer to Sample frequency and Clock calibration sections. + + +============================ +Font set up for Hangul and Chinese Windows +============================ + +For Hangul and Chinese Windows users, try the following set up. +1. Click on Option and Setup MMSSTV. +2. Click on Misc tab. +3. Push the Misc button in the System font pane. +4. Select Hangul or Chinese font. Use the font that has small character spacing. +5. Push the OK button. + +After this setup, you can use Hangul or Chinese FEP for the text input boxes. + +It seems that Hangul and Japanese Windows manipulate 8-bit characters in a different manner from English font. MMSSTV version 1.05 or earlier could not handle the slash zero properly. MMSSTV 1.05D (1.06 hopefully) has special routine to work around this problem. + +====== +Closing remarks +====== +MMSSTV is a freeware program for amateur radio use. You can redistribute it as you like. Please join the following reflector for detailed information, + + http://groups.yahoo.com/group/MM-SSTV/ + +The JPEG converter in MMSSTV is based on the freeware source code, "IJG code," provided by Independent JPEG Group. + + +73 de JE3HHT Mako + + \ No newline at end of file diff --git a/EUPDATE.TXT b/EUPDATE.TXT new file mode 100644 index 0000000..bacfea0 --- /dev/null +++ b/EUPDATE.TXT @@ -0,0 +1,860 @@ +What's new in MMSSTV Version 1.13A + September 29, 2010 + JE3HHT Makoto Mori + Translated into English by JA7UDE Oba + +*********************************************************************** +Revision history Ver1.13 -> Ver1.13A +*********************************************************************** +- Fixed the sound card selection problem +- Fixed minor glitches and improved several functions + +*********************************************************************** +Revision history Ver1.12 -> Ver1.13 +*********************************************************************** +- Fixed the custom sound, which was disabled in version 1.12 +- Updated the URL of the English web site +- Updated the introduction for the JASTA contest +- Added COM8 to COM16 selections +- Added CW menu (right click on the CW button) +- Added radio command menu +- Added radio command for some Yaesu radios +- Added an option that lowers the tone frequency by 1000Hz (use -i option on start) + +*********************************************************************** +Revision history Ver1.11G -> Ver1.12 +*********************************************************************** +- Updated the duplication checker of the JASTA contest +- Changed the sound card selection scheme + +*********************************************************************** +Revision history Ver1.11 -> Ver1.11G +*********************************************************************** +- Added a link to the English CHM help file +- Fixed the log file location, the same folder where the EXE file resides +- Added the RX window clear button to the pop-up menu +- Added a gateway to Turbo Hamlog/Win version 5 (Tnx to JG1MOU) +- Added narrow band modes (MP-N, MC-N) +- Added FSKID.TXT in the package +- Improved AFC for narrow band modes +- Fixed typo in the English mode + +*********************************************************************** +Revision history Ver1.10 -> Ver1.11 +*********************************************************************** +- Fixed a bug of the FSKID (Contest NR) + +*********************************************************************** +Revision history Ver1.09 -> Ver1.10 +*********************************************************************** + +- Added links to the call for participations of NVCG and JASTA contests to +the Help menu. + +- Added the CW button to the TX window. Right click on the button to +specify the text to send. + +- Added the contest number option to the FSKID. Click on Setup logging +option and Misc tab. Check Add contest NR to the FSKID box. + +- Added the sound option to the template color bar. + +- Added an option that allows the user to select right or left channel for +the sound output. On the source pane of the Misc tab, selecting Right or +Left enables the TxCH check box. If the TxCH is checked, MMSSTV outputs the +TX sound only on the right or left channel selected. + +- Added TxID button in the Log pane of the main window. + +- Replaced the Clear button in the RX window with the Lock button. If +LOCKed, MMSSTV will not stop the RX scan even in QRM or QSB. + +- Added the log backup function. Select Setup logging and click on Misc +tab. Check Make backup box to enable the function. MMSSTV automatically +makes the log backup with the name of "xxxx_BAK.MDT". + +- Improved the function and manipulation of image clipper. Pop-up menus are +moved to Main menus. Added Make space button. Added Rotation buttons. + +- Improved the text and color setup functions in the template window. +Added the increase and decrease font size buttons. +Added the bold and italic font buttons. +Added the user-customizable font buttons (F1-F4). Right click on them +to register fonts. + +- Improved the speed of character mapping in the template window. +Added the fast code option in the pop-up menu. Some PCs running in the +16-bit color mode does not work well with this code. In that case, +unselect the fast code option. + +- Revised the rule of NVCG contest (1.09F) + +- Improved the precision of the TONE frequency (1.09F) + +- Added the 48KHz sound clock option for the optical connection (S/PDIF) + (may use more CPU power) + +- Improved the DSP calculation speed (1.09F) + +- Fixed some minor bugs and applied a few improvements. + +*********************************************************************** +Revision history Ver1.08 -> Ver1.09 +*********************************************************************** +- Improved the program termination speed +- Added an option that turns off the font smoothing. +- Added EXTPTT port function (EXTFSK.DLL required). +- Added custom log link +- Added custom RadioCommand +- Added custom sound +- Fixed minor bugs and improved several functions. + +============================== +Font smoothing +============================== +When the Windows option "Smooth edges of screen fonts" is engaged, the +background color of the template sometimes leaks at the edges of characters +on the MMSSTV template window. + +There are two ways to solve this problem. +1) Turn the Windows option off. To do so, you will find the option select +at: + Windows XP: Control Panel, System, Advanced, Performance, Visual effects + Windows 2000: Control Panel, Screen, Effects + Windows 98: Control Panel, Screen, Effects +2) Change the MMSSTV template option. Right click on the template window, +select Options, and check Disable font smoothing. When this option is +selected, the font smoothing function of Windows is disabled only within the +MMSSTV template window. + + +==================== +EXTPTT port +==================== +EXTPTT port is provided for the PTT operation using a special USB device, +which was originally made for FSK keying. To make use of this port, select +EXTPTT in the PTT port drop-down list of TX pane of Setup MMSSTV. +EXTFSK.DLL is prerequisite for the operation. For more information, refer +to the following web site. +http://www.archi.is.tohoku.ac.jp/~ooba/ja7ude/homebrew.htm + + + +*********************************************************************** +Revision history Ver1.07 -> Ver1.08 +*********************************************************************** + +- Added notch filter +- Added a function that automatically readjusts the off-synchronized image +when filters are switched +- Added MSG button in the text & color window +- Changed the number of S.Templates-image pages to 4 +- Added dupe check scheme for JASTA contest +- Added LMS filter modes +- Fixed minor bugs and put fine improvements to the program + +================ +Notch filter +================ + +I have added an FIR notch filter in RX. To activate the notch filter, left +click in the spectrum or waterfall window. The notch frequency is marked +with a small triangle. To deactivate the notch filter, right click anywhere +in the window. + +The notch filter eliminates the beat, but it slightly degrades the image +quality. If the notch filter frequency is put closely to the +synchronization signal, the RX operation sometimes stops for the weak +signals if auto-stop function is turned on. + + + Sound ---> Notch ---> LMS -+-> BPF ---> Demodulator + | + --> Spectrum display + +============================================= +MSG button in the "Text & Color" window +============================================= +In the template window, you can add text by pushing "T" button just under +the template window. Double clicking the added text gets the Text & Color +window popped up. You can find MSG button at the bottom center of the +window. When you push the button, a big square pane appears in the window. +Input pre-defined text lines in the window. The text can include macro +keywords. Double clicked line is copied to the text box. +For example, input the text lines in the white pane as follows. + Hello + Good morning + Good afternoon + Good evening + 73 +If you double click on 73, the content of the text box becomes 73. + + + +=================================================== +Added dupe check scheme for JASTA +=================================================== +Click on Option and select Setup logging. Select MISC tab. You will find +JASTA contest in Dupe check pane. If MMSSTV detects dupe, the color of the +callsign in the main window changes red. The dupe conditions are: + +Callsign only + If the same callsign has been found regardless of band or mode + +Hit on the same band + If the same callsign has been found in the same band + +JASTA contest + If the same callsign has been found "in the SSTV mode" and "on the same +day" and "on 14MHz or upper bands." + + + + +============================= +LMS filter selection +============================= +Three LMS filter modes can be selected by right clicking on the LMS button +in the DSP pane of the main window. + +- Noise smoothing: Conventional (default) +- Auto notch (fast): Automatic notch filter with fast response +- Auto notch (slow): Automatic notch filter with slow response + +The response of the automatic notch filter is intentionally set slow so as +not to degrade the image quality. Even set so, some images will be +affected. + + + +*********************************************************************** +Revision history Ver1.06 -> Ver1.07 +*********************************************************************** + +- Added multipage for folder thumbnail +- Implemented fast thumbnail browsing +- Added OLE support +- Fixed some bugs and applied minor improvements + + +====================================== +Multipage for folder thumbnail +====================================== + +The thumbnail window is useful for managing your picture resources. With +MMSSTV 1.07, you can view the pictures stored in two or more different +folders in one thumbnail window. + +To open the thumbnail window, click on "View" and select "Always show +thumbnails of files folder." Right click on any thumbnail in the thumbnail +window and select "Options" and "Create new page." Select the folder that +you want to add the thumbnail window. You will find a new tab added at the +top of the window. If you want to change the tab name, select "Options" and +"Rename page." The window can have up to 10 pages. + + +================================== +Fast thumbnail browsing +================================== + +If the size of the picture or template is large, it should take substantial +time to load and show all the thumbnail images in the folder thumbnail +window. To get the load and show operation faster, MMSSTV version 1.07 +makes an index of the thumbnails once while loaded. MMSSTV uses the index +for the next time on for faster thumbnail browsing. + +MMSSTV creates the index in the FIndex folder under the MMSSTV directory. +The index contains the view information and the thumbnail bitmaps. The +index uses some disk spaces, but it significantly saves the memory and +resources. + +If you do not want to make the index, right click on the thumbnail, select +"Options" and uncheck "Fast access with index." MMSSTV does not make the +index as version 1.06 or earlier. You can individually enable or disable +this indexing feature for each folder. + +* MMSSTV does not generate any file in the referred folders. + +=============== +OLE support +=============== + +MMSSTV now supports OLE (Object Linking and Embedding). If the object is +embedded (or linked) in the template, you can make use of the various +functions offered in the object. + +* Object means the whole or some part of the document in another +application. + +* What kind of object can you utilize in MMSSTV? It is dependent on the OLE +application you have. If you have installed a word processor, for example, +you can use the word processor document as well as all the functions, such +as character effect and picture drawing, provided in the word processor. + + +1. Object embedding + +To embed an object in the template, use one of the following five methods. + +- Right click on the template window of MMSSTV, select Object -> Insert, and +make a new object to embed. You can embed the existing file or place a link +to it in the template, too. + +- Make an object in the other application and copy it to the clip board. +Right click on the template window of MMSSTV, and select Object -> Paste. + +- Drag and drop the target object file from Explorer or My computer to the +MMSSTV template. It should be noted, however, that BMP, JPG, WMF, MTM, MTI, +and DLL files are not embedded as an OLE object. + +- Open the folder thumbnail window (View -> Always show thumbnails of files +folder), and right click on the target picture in the window. Select "Embed +to Template as OLE." In this case, the embedded picture always becomes a +bitmap OLE. + +- Open the thumbnail folder as the OLE object type and double click the +target thumbnail. You can use drag&drop, too. + +2. Object editing + +To edit the embedded object, just double click it. Another way to do this +is keep the object selected and push the Set color button. If you cannot +start the server application, right click on the target object and select +Object -> Edit. + +The server application of the embedded object works as the editor. Please +refer to the help file of the server application. For example, Windows +Paint is invoked for the target application when a BMP file is double +clicked. + +3. Object displaying and resizing + +MMSSTV displays the object in the overlay mode. If you do not want to get +the background transparent, right click on the object, select Object, and +uncheck Overlay. + +When "Object" -> "Stretch as bitmap" is checked, MMSSTV uses a bitmap +resizing code instead of a metafile resizing code. Generally speaking, the +metafile resizing code gives better results for the characters with special +effect. The bitmap resizing code, on the other hand, gives better result +for image objects like photographs. + +4. Custom item + +If you are not satisfied with the MMSSTV graphic tools or the OLE functions, +you can embed a custom item that you have created by yourself. + +To embed a custom item, go with "Object" -> "Insert custom item," and select +the target item. Another way to do this is to open the folder thumbnail as +Custom item type and double click the target thumbnail (or drag & drop it to +the template). + +For the implementation of the custom item, refer to ECUSTOM.TXT, which is +included in the PerImg package. + + + + +*********************************************************************** +Revision history Ver1.05 -> Ver1.06 +*********************************************************************** + +- Added VFO polling for JRC JST-245 +- Supported the slash zero in Hangul font +- Added several SSTV modes +- Improved the automatic synchronization function +- Had the timing of the B/W 8-sec mode adjusted to Robot 1200C +- Added a special font manipulation for East Asian languages +- Added customizable VOX tone +- Took measures not to lost sound +- Added RTS control for muting audio while receiving a picture +- Added overlay function +- Fixed some bugs and applied minor improvements + + +========================== +Special font manipulation for East Asian languages +========================== + +Version 1.05G has a special font manipulation for East Asian languages. In +case you want to use a new language that is different from your default one, +you must install the font and code page of the new one. If you have only +the font installed, you might encounter problems in several operations +including vertical unfolding. + +MMSSTV treats the codepages of the following languages in a special manner: + + 932 Japanese Verified + 949 Hangul Verified + 950 Chinese (BIG5) Not verified + 936 Chinese (GB2312) Not verified + + +====================== +Sound lost +====================== + +I have figured out that some soundcards are likely to lose sound, which +results in synchronization drift. I have added a code to try fixing the +problem. It is effective in some degree, but does not completely solve the +problem. I recommend you to install the latest device driver of your +soundcard. + +If you still have the problem, try turning off LoopBack in the TX page and +increasing the FIFO depth in the Misc page. + + +============== +MP/MR/ML modes +============== + + +MP mode: It is based on the color difference scheme that the PD mode uses. +This mode should be useful for reducing multi-path distortion and jitter. +The scan time for each pixel is longer than the other modes, but the color +information along the vertical axis is compressed. + +MR/ML mode: It is based on the color difference scheme that the Robot 24/72 +mode uses. This mode is aimed for offering good resolution in good condx. +The color information along the horizontal axis is compressed. + +These modes are not new to SSTV actually, but I have added them by way of +trial. In particular, I have considered good trade-off between the +transmission time, picture size, and quality. As a new trial, the VIS +signal is expanded to 16 bits. Refer to Mode.txt for the details of the new +modes and their VIS format. + + + +================ +B/W 8-sec mode +================ + +Changing with times including the old monochrome generation, the B/W 8-sec +mode seems to have several "dialects" in terms of the aspect ratio and the +timing. +MMSSTV has adjusted the timing to the Robot 1200C scan converter, which is +used as the standard of the VIS signals. When you come across a picture +with different timing, turn Auto slant on or push the niconico mark button +in the Sync window. + + + +================ +RTS control while scan +================ + +I have added "RTS while scan" option in the MMSSTV Setup window. The +behavior of the COM port signals, that is, DTR, RTS, and TXD can be selected +as follows: + +[RTS while scan = OFF] + RX TX SCAN (receiving a picture) + DTR OFF ON OFF + RTS OFF ON OFF + TXD --- --- --- (no control) + +[RTS while scan = ON] + RX TX SCAN (receiving a picture) + DTR OFF ON OFF + RTS OFF ON ON + TXD NoBreak NoBreak Break + + +========== +VOX tone +========== + +If you use the COM port to switch PTT or if you have a responsive VOX +interface, you can eliminate the VOX tone, which is sent before the picture. + Select "User defined" in the VOX tone pane on the TX page of Setup MMSSTV. + Push Edit button and delete all the definitions. MMSSTV no longer +generates the tone for triggering VOX prior to sending a picture. + + +============== +Overlay (superimpose) function +============== + +In the template, you can place an image that is superimposed on the TX +picture. By using an image that has a uniform background color, such as an +illustration, you would be able to make amusing effects on your picture. + +In the image, all the pixels that have the transparent color are +transparent, that is, invisible on the TX picture. The transparent color is +defined by the color of the transparent point in the image. The default +position of the transparent point is the upper left corner of the image. + +Here is a sample procedure to use the overlay function. In the template +window, push Draw picture button (a small button whose face has the sun and +mountains), and draw a rectangle that specifies the image size and position +in the template window. You should have the Choose picture window popped +up. Select Overlay in the source pane, and load an image. Left click on +somewhere in the picture. The clicked point is the new transparent point, +that is, the color of the point becomes the new transparent color. Try +right clicking somewhere in the image. All the pixels that have the same +color of the clicked point are changed to the current transparent color. + +If the source image is stored in the JPEG format, the background color is +not always uniform owing to the image compression effect. This results in +color leak in the overlay image. In such a case, try using the color +smoothing function, which is available at the right side of the Choose +picture window, in order to alleviate the color leak. + +When the size of the overlay image is changed in the template window, MMSSTV +gives priority to the color smoothness over the image quality. If the image +quality is degraded, change the size of the image in the bitmap format, and +then convert it to the overlay image. The size change in the bitmap format, +however, gives priority to the image quality, and thus it would degrade the +color smoothness. In this case, try using the color smoothing function to +alleviate the color leak. + + + + +*********************************************************************** +Revision history Ver1.04 -> Ver1.05 +*********************************************************************** +- Added two window layouts +- Added an optional window for the control buttons +- Added an option that attaches the RX window to the WINDOWS desktop. +- Added double-click short-cut operations for the stocked pictures, stocked +templates, folder thumbnails. +- Added 320x240 image manipulating schemes +- Added a repeater function +- Fixed a bug that caused the resource shortage in Windows 95/98/ME +- Fixed some bugs and applied minor improvements + + +============ +Window layouts +============ +You can select one of three window layouts by clicking "View" and selecting +"Design." + +[Standard] + This is the conventional MMSSTV window layout. All the information is +shown in one window. + +[Separate stock view] + The stock window is detached from the main window. + +[Separate all views] + All the windows are separated. + +Each detached window can be moved and resized independently. + + +==================== +Control buttons window + +==================== + Click on "View" and select "Always show control buttons" to open an +optional window dedicated to the control buttons. + +[Stop RX] + Stop the RX operation immediately and go into the stand-by state (Auto). + +[ReSync] + Make the synchronization again. + +[Lock RX] + When the button is depressed, MMSSTV turns off "Auto stop" and "Auto +restart," and therefore it won't stop the RX scan even in QRM and/or QSB. +When the button is not depressed, "Auto stop" and "Auto restart" are +resumed. + +[CopyHist] + If the RX image is not copied to the history, press this button to force +the copy. + +[TX(F9)] + It functions just same as the TX button of the TX window. You can use F9 +key to switch TX/RX. + + +============================================== +Attaching the RX window to the WINDOWS desktop +============================================== + When you have activated "Always show RX viewer" option, you can attach the +window to the WINDOWS desktop. Right click the RX window and select "Child +of a desktop window" in the pop-up menu. + In this mode, the RX viewer remains active, even if the main MMSSTV window +is minimized. + + +========================= +320x240 image manipulation +========================= + Click on "Edit" and select "Handling of 320x240" to settle how to +manipulate 320x240 image sources. This selection is also applied to the +combination of the 640x480 source and 640x496 TX images. + +[Vertical stretching] + The image is vertically stretched. The image aspect ratio is not +reserved. + +[Auto stretching] + The image is horizontally and vertically stretched. The aspect ratio is +reserved. The original image slightly loses the left and right edges. This +is the operation that MMSSTV used in the earlier versions. + +[No stretching] + The image size is unchanged. The TX image has 16 vacant lines at the +bottom. + +[Shift picture for the header] + The image size is unchanged. The TX image has 16 vacant lines at the top +for the header. + + It should be noted that this manipulation does not work for the image that +derived through the image clipper. + + +================ +SSTV repeater function +================ + MMSSTV can work as an SSTV repeater. Refer to Repeater.txt for details. + + +*********************************************************************** +Revision history Ver1.03 -> Ver1.04 +*********************************************************************** +- Improved the user interface for the character input in the template +- Added perspective and 3-D effects for the template text +- Corrected some bugs and applied minor improvements + +*********************************************************************** +Revision history Ver1.02 -> Ver1.03 +*********************************************************************** +- Added "FFT demodulator" mode in the spectrum display +- Added AFC +- Added Undo in the pop-up menu for the template +- Corrected some bugs and applied minor improvements + +================ +Spectrum display +================ +The user can select one of "OFF," "FFT," or "FM demodulator" mode for the +spectrum display. The default has been set to FM demodulator. If you want +to use the conventional FFT mode, change back it to "FFT." + +* If you draw CMT-HELL, which was made by PY4ZBZ, in the waterfall of +MMSSTV, you must select "FFT." + +The FM demodulator uses another wide-band FM demodulator in addition to the +picture demodulator. It draws the chart as the function of the rate of +incidence at each frequency. Because its computation process is much +simpler than the FFT, it gives good response even to the short pulse like a +synchronization signal, but it does not reflect the signal level. + +The FFT and FM demodulator observe the signal before the SSTV BPF in order +to see the signals outside of the BPF, too. + + --- Sound in --+--> SSTV demodulator + | + ---> Spectral (FFT / FM demodulator) + + +============== +AFC +============== +AFC is activated by pushing the AFC button in the DSP pane on the main +window. The default is ON. +When AFC is locked to the signal, the triangle marker on the synchronization +frequency line is displayed in blue. When AFC is unlocked, the triangle +marker is displayed in red. During in red, the response to the frequency +discrimination becomes slow. + +* The AGC in the previous versions was deleted because it seemed to offer no +improvements. + + +*********************************************************************** +Revision history: Ver1.01 -> Ver1.02 +*********************************************************************** +- Added the Hilbert transform method in the FM decoder +- Improved the processing speed of the low-level sound processing +- Added the TX-offset button on the Sync window +- Added High-accuracy slant adjustment method +- Added Vari-SSTV function +- Debugged the automatic start function +- Corrected some bugs and enhanced some functions + + +================================== +Added Hilbert transform method in the FM decoder +================================== +The figure below shows the flow of the Hilbert transform decoder. This idea +was given by JA6UHL Nishimura-san (MNI TNX to JA6UHL). + + --+> Delay(N) -> Real + | |==> ATAN --> Differentiator --> LPF --> Pic. data + --> FIR(2N) --> Image + + +======================== +Low-level sound buffer +======================== +I enhanced the sound buffer processing. You can set the FIFO sizes for TX +and RX in the option menu. +If you often loose the sound, that is, loose the synchronization, try +enlarging the RX FIFO or TX FIFO. Giving higher priority to the sound +processing is another way of alleviate the sound loosing. + + +============== +High-accuracy slant adjustment +============== +MMSSTV uses the least square method to solve the linear equation for +analyzing the synchronization timings. For high quality RX signals, it will +give the error less than 2ppm. +To start the high-accuracy slant adjustment, push the NikoNiko button +(comment by JA7UDE: the smiley button). You also can start it by right +clicking on the sync or RX window and selecting High-accuracy slant +adjustment in the pop-up menu. It should be noted that you must have +received at least 16 scan lines to make this adjustment operational. The +more the scan lines, the better the accuracy. + + +=============== +Adjustment of TX offset +=============== +Assuming that you have the RX clock calibrated, MMSSTV transmits the signal +and receives it through the external loop back. +After you have adjusted the slant (push the NikoNiko smiley button), push +the TX button in the Sync window. MMSSTV automatically records the TX +offset frequency. + + +======== +VariSSTV +======== +VariSSTV, which is proposed by Mr. Samuel Hunt, is a method to protect the +final device of the TX. He says that different colors have different +brightness and therefore making the power lower in the way shown below gives +better noise immunity. + +Sync signal 100% +Red 29.8% +Green 58.8% +Blue 11% + +For details, visit http://www.supersam.co.uk/sstvpwer.htm. + +I have no idea how it is effective. Please give it a try by yourself. Go +Option, Setup MMSSTV, TX tab, and check the VariSSTV box under the digital +output level slider. This is not operational in Robot36 or Robot72. + + +*********************************************************************** +Revision history Ver1.00 -> Ver1.01 +*********************************************************************** +- Added several SSTV modes +- Improved the image clipper function +- Added the preview tool for selecting files +- Fixed some bugs and improved some operations + + +================ +New SSTV modes +================ + +The following SSTV modes have been added. + + Name Time(s) Size Method + --------------------------------------------------- + SC2-120 122 320x256 RGB + SC2-60 62 320x256 RGB + PD50 50 320x256 Color discrimination + PD90 90 320x256 Color discrimination + PD120 126 640x496 Color discrimination + PD160 161 512x400 Color discrimination + PD180 187 640x496 Color discrimination + PD240 248 640x496 Color discrimination + PD290 289 800x616 Color discrimination + P3 203 640x496 RGB + P5 305 640x496 RGB + P7 406 640x496 RGB + +To use one of these modes, click the mode button in TX or RX window with the +right button of the mouse and select it from the pop-up menu. + +PD120 - PD290 and P3 - P5 have bigger image sizes than 320 x 256 (from now +on, I call them high-resolution modes). The image view board of the MMSSTV +main window is designed to show a 320x256 image. For this reason, MMSSTV +shrinks and displays the images (resized to 320x256) in those +high-resolution modes. In other words, the sizes of the actual image and +that displayed in the RX window would not be the same. + +To view the high-resolution images in the original size, push the magnifier +button under the RX or History window, or at the Always Show RX viewer, +right click and select Resize to RX size in the pop up menu. + +To view the high-resolution TX images in the original size, push the +magnifier button under the TX window. + +If the sizes in the TX mode and in the original image are different, MMSSTV +does not resize the original image. If you want to resize the image, right +click the TX window and select 'Stretch TX image by different size' in the +pop-up menu. In this case, however, the image resolution sometimes +degrades, particularly when you get it bigger. In addition, bear in mind +that different modes have different aspect ratios. + +Anyhow, it is recommended that you reload the image into the TX window if +you use images in different sizes. + +MMSSTV templates, therefore, have several sizes. It is a good idea to use +the template whose size is the same as the image. In default, MMSSTV tries +to get the template size to fit the image. However, the layout of the +template components is not reserved. + + +You can resize the template size by selecting Size entry in the pop-up menu, +which appears by right clicking the Template window. If the size of the +template is different from that of the image, MMSSTV resizes the template +and gets it superimposed to the image. It should be noted that the quality +of the template would get worse, but you can continue to use the templates +that you designed in different sizes. + +The image size in the Stocked pictures is predefined as 320x256. If you +want to change it, right click the Stocked pictures area and select Size in +the pop-up menu. + +When you drag & drop an image from the TX window to the Stocked pictures +window, MMSSTV uses the TX image size. + +In PD290, P5, and P7 modes, the RAM, which is used for the automatic slant +adjustment, cannot store the whole image data. The slant and phase +adjustment can be applied only to some portion of the data. To avoid this +problem, select FILE for the RX buffer. + + +======================== +New functions in the image clipper +======================== + +The following new functions have been added. + +- Copy and paste without changing the original image size +- Rotate the image in 90 degrees +- Adjust the image +- Copy to the clipboard + +- Save an image to a file + +To use these functions, right click the image clipper window. You will get +the pop-up menu for the functions. + + +================================ +Preview in file selection +================================ + +In the dialog box for loading an image file, you can preview the image by +clicking the file name. +The preview window is appeared at the top left corner for the first time, +but you can change the size and position as you like. + +73, Mako + diff --git a/ExtCmd.cpp b/ExtCmd.cpp new file mode 100644 index 0000000..693b91a --- /dev/null +++ b/ExtCmd.cpp @@ -0,0 +1,92 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ExtCmd.h" +#include "Main.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TExtCmdDlg::TExtCmdDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Assign program"; + CancelBtn->Caption = "Cancel"; + L1->Caption = "Menu name"; + L2->Caption = "Program file"; + RefBtn->Caption = "Ref."; + CBR->Caption = "Suspend (This program will use same sound card)"; + } +} +//--------------------------------------------------------------------- +int __fastcall TExtCmdDlg::Execute(AnsiString &Name, AnsiString &Cmd, int &Susp) +{ + EM->Text = Name; + EC->Text = Cmd; + CBR->Checked = Susp; + if( ShowModal() == IDOK ){ + if( !EC->Text.IsEmpty() ){ + Name = EM->Text; + Cmd = EC->Text; + Susp = CBR->Checked; + return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TExtCmdDlg::RefBtnClick(TObject *Sender) +{ + char bf[256]; + SetDirName(bf, AnsiString(EC->Text).c_str()); //ja7ude 0428 + if( !bf[0] ){ + strcpy(bf, "C:\\Program Files"); + } + TOpenDialog *pDialog = Mmsstv->OpenDialog; + pDialog->Options >> ofCreatePrompt; + pDialog->Options << ofFileMustExist; + if( MsgEng ){ + pDialog->Title = "Program file"; + pDialog->Filter = "Program files(*.exe;*.lnk)|*.exe;*.lnk|"; + } + else { + pDialog->Title = "プログラムファイル"; + pDialog->Filter = "プログラムファイル(*.exe;*.lnk)|*.exe;*.lnk|"; + } + pDialog->FileName = ""; + pDialog->DefaultExt = "exe"; + pDialog->InitialDir = bf; + SetDisPaint(); + NormalWindow(this); + if( Mmsstv->OpenDialogExecute(FALSE) == TRUE ){ + EC->Text = pDialog->FileName.c_str(); + } + ResDisPaint(); + TopWindow(this); +} +//--------------------------------------------------------------------------- + + diff --git a/ExtCmd.dfm b/ExtCmd.dfm new file mode 100644 index 0000000000000000000000000000000000000000..f7ee1aef6d87a36b091a53e6f09e9e9c0bc909dd GIT binary patch literal 973 zcmZ{jJ#W)M7{@Q?#Ez3viUb1_WkJAz3LgMLoP>ntjrc^7kXju3l9*n7k#mKxQJ)w9 z5rm2=*jbQ}0D%gqg{fjn2PTA|$rq>u3o|5kVg~`6AK(37o}cAkF@RE+kdjX(bLYU! z)H?wHR7%gpP^!h0B_l~{vi}s$;VKh;0s+wmB=H2b4Q#9I2EkIa(oC8fp*2a-8qB1Y zILWW^d%VbR^P8*m(fou$Ol+|XHfwbzd;@WBo-++r7j{DvX=Dv8Nr%Req6Ic)@dU z%f>;pM4RTIr8L=~s%~R!DgAQTj+JcFVydq7R}vevKrJk~lM&rhGFzB5OW4j@dL3Sg z4dREv`+$gYS_KoBJLy7#vdbtMarc8n99?G9my(P|7eF zOyxZiQJ3Z6A&FjS)cs%}0)a>w7cC4$kN+hK0U#r#j`hU^Z3#-EJf;-dLsUW_J>YL} zeB=FgZ)dAJebjmBbUMASZ@ZsAIoqqxo%M}Z{rBrHwz|%bcFlQmEa(UWcw!k>eR5A- ja&TA`p7z)CgBne~-Q>#XTQ)=p*. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef ExtCmdDlgH +#define ExtCmdDlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TExtCmdDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TEdit *EM; + TEdit *EC; + TCheckBox *CBR; + TLabel *L1; + TLabel *L2; + TButton *RefBtn; + void __fastcall RefBtnClick(TObject *Sender); +private: +public: + virtual __fastcall TExtCmdDlg(TComponent* AOwner); + + int __fastcall Execute(AnsiString &Name, AnsiString &Cmd, int &Susp); +}; +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +#endif diff --git a/Fft.cpp b/Fft.cpp new file mode 100644 index 0000000..59e86d0 --- /dev/null +++ b/Fft.cpp @@ -0,0 +1,871 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +#include //ja7ude 0521 +#pragma hdrstop + +#include +#include "fft.h" +#include "ComLib.h" + +#define PI 3.1415926535897932384626433832795 +#define PI2 (2*PI) + +#define SCALEADJ_1 (-5.5) +#define SCALEADJ_2 (-6.5) +#define SCALEADJ_3 (-7.8) +#define SCALEADJ_4 (-9.0) +#define LOGADJ (2.81458e4) + +#define SCALEPOW_1 (1.0/4.0) +#define SCALEPOW_ADJ_1 0.0018 +#define SCALEPOW_2 (1.0/5.0) +#define SCALEPOW_ADJ_2 0.008 +#define SCALEPOW_3 (1.0/6.0) +#define SCALEPOW_ADJ_3 0.022 +#define SCALEPOW_4 (1.0/7.0) +#define SCALEPOW_ADJ_4 0.048 +//------------------------------------------------- +// FFT処理クラス +CFFT::CFFT() +{ + m_FFTDIS = 0; + memset(m_fft, 0, sizeof(m_fft)); + m_CollectFFT = 1; + m_CollectrPage = m_CollectwPage = 0; + m_CollectFFTCount = 0; + m_tWindow = new double[FFT_BUFSIZE]; + m_tSinCos = new double[FFT_BUFSIZE/2]; + m_Work = new int[SQRT_FFT_SIZE+2]; + memset(m_Work, 0, sizeof(int[SQRT_FFT_SIZE+2])); + pStgBuf = new double[FFT_BUFSIZE]; + m_Work[0] = 0; + makewt(FFT_SIZE/4, m_Work, m_tSinCos); + makect(FFT_SIZE/4, m_Work, m_tSinCos + m_Work[0]); + for(int i = 0; i < FFT_SIZE; i++){ + pStgBuf[i] = 1.0; + m_tWindow[i] = (0.5 - 0.5*cos( (PI2*i)/(FFT_SIZE-1) )); //ハニング窓 +// m_tWindow[i] = 1.0; + } + m_StgSize = 1; + m_StgScale = 1.0; + m_StgK = 0.0; + m_StgSW = FALSE; + m_CollectFlag = 0; + m_Handle = NULL; + m_CollectCount = 0; + m_CollectFFT = 0; + + m_fqc.SetSampFreq(FFTSamp); + m_fqc.m_Limit = 0; + m_fqc.m_outOrder = 2; + m_fqc.m_outFC = 400; + m_fqc.CalcLPF(); +} + +//------------------------------------------------- +// FFT処理クラスの再初期化 +void CFFT::InitFFT(void) +{ + m_CollectFFT = 0; + m_CollectFFTCount = 0; + m_CollectFFT = 0; + m_CollectFFTCount = 0; + memset(m_Work, 0, sizeof(int[SQRT_FFT_SIZE+2])); + makewt(FFT_SIZE/4, m_Work, m_tSinCos); + makect(FFT_SIZE/4, m_Work, m_tSinCos + m_Work[0]); + for(int i = 0; i < FFT_SIZE; i++){ + pStgBuf[i] = 1.0; +// m_tWindow[i] = 1.0; +// m_tWindow[i] = (0.5 - 0.5*cos( (PI2*i)/(FFT_SIZE-1) )); //ハニング窓 + m_tWindow[i] = (0.5 - 0.5*cos( (PI2*i)/FFT_SIZE )); //ハニング窓 +// m_tWindow[i] = 0.46 - 0.5*cos( (PI2*i)/FFT_SIZE ) + 0.08*cos(2*PI2*i/FFT_SIZE); //ハニング窓 + } + m_StgSize = 1; + m_StgScale = 1.0; + m_StgK = 0.0; + m_StgSW = FALSE; + m_CollectFlag = 0; + m_CollectCount = 0; + m_CollectFFT = 0; +} + +//------------------------------------------------- +CFFT::~CFFT() +{ + if(pStgBuf){ + delete pStgBuf; + pStgBuf = NULL; + } + if(m_Work){ + delete m_Work; + m_Work = NULL; + } + if(m_tSinCos){ + delete m_tSinCos; + m_tSinCos = NULL; + } + if(m_tWindow){ + delete m_tWindow; + m_tWindow = NULL; + } +} + +//------------------------------------------------- +// データ収集(スレッド外で実行する) +void CFFT::TrigFFT(void) +{ + m_CollectFFT = 1; + m_CollectFFTCount = 0; + m_CollectrPage = m_CollectwPage = 0; + m_CollectCount = 0; + m_fqc.m_fq = ZEROFQ; + m_CollectFFT = 0; // 次の収集をトリガ +} +//------------------------------------------------- +// データ収集(スレッド内で実行する) +void CFFT::CollectFFT(double *lp, int dsize) +{ + if( DisPaint || m_CollectFFT ) return; + + if( sys.m_FFTPriority ){ + while( (m_CollectCount < 3) && dsize ){ + double *tp; + int i; + int size; + switch(FFTSampType){ + case 1: + size = dsize / 2; + if( (size + m_CollectFFTCount) > FFT_SIZE ){ + size = FFT_SIZE - m_CollectFFTCount; + } + dsize -= (size * 2); + for( tp = &m_CollectFFTBuf[m_CollectwPage][m_CollectFFTCount], i = 0; i < size; i++, tp++, lp+=2 ){ + *tp = *lp; + } + break; + case 2: + size = dsize / 4; + if( (size + m_CollectFFTCount) > FFT_SIZE ){ + size = FFT_SIZE - m_CollectFFTCount; + } + dsize -= (size * 4); + for( tp = &m_CollectFFTBuf[m_CollectwPage][m_CollectFFTCount], i = 0; i < size; i++, tp++, lp+=4 ){ + *tp = *lp; + } + break; + default: + size = dsize; + if( (size + m_CollectFFTCount) > FFT_SIZE ){ + size = FFT_SIZE - m_CollectFFTCount; + } + dsize -= size; + memcpy(&m_CollectFFTBuf[m_CollectwPage][m_CollectFFTCount], lp, sizeof(double)*size); + lp += size; + break; + } + m_CollectFFTCount += size; + if( m_CollectFFTCount >= FFT_SIZE ){ + int page = m_CollectwPage; + m_CollectwPage++; + if( m_CollectwPage >= 3 ) m_CollectwPage = 0; + m_CollectCount++; + switch(sys.m_FFTPriority){ + case 1: + m_CollectFFTCount = 0; + break; + case 2: + m_CollectFFTCount = 128; + memcpy(m_CollectFFTBuf[m_CollectwPage], &m_CollectFFTBuf[page][FFT_SIZE-128], sizeof(double)*128); + break; + case 3: + m_CollectFFTCount = 256; + memcpy(m_CollectFFTBuf[m_CollectwPage], &m_CollectFFTBuf[page][FFT_SIZE-256], sizeof(double)*256); + break; + default: + m_CollectFFTCount = 512; + memcpy(m_CollectFFTBuf[m_CollectwPage], &m_CollectFFTBuf[page][FFT_SIZE-512], sizeof(double)*512); + break; + } + if( m_Handle != NULL ){ + ::PostMessage(m_Handle, CM_FFT, 0, 0); + } + } + } + } + else if( !m_CollectCount ){ + double *tp; + int i; + int size; + switch(FFTSampType){ + case 1: + size = dsize / 2; + if( (size + m_CollectFFTCount) > FFT_SIZE ){ + size = FFT_SIZE - m_CollectFFTCount; + } + for( tp = &m_CollectFFTBuf[m_CollectwPage][m_CollectFFTCount], i = 0; i < size; i++, tp++, lp+=2 ){ + *tp = *lp; + } + break; + case 2: + size = dsize / 4; + if( (size + m_CollectFFTCount) > FFT_SIZE ){ + size = FFT_SIZE - m_CollectFFTCount; + } + for( tp = &m_CollectFFTBuf[m_CollectwPage][m_CollectFFTCount], i = 0; i < size; i++, tp++, lp+=4 ){ + *tp = *lp; + } + break; + default: + size = dsize; + if( (size + m_CollectFFTCount) > FFT_SIZE ){ + size = FFT_SIZE - m_CollectFFTCount; + } + memcpy(&m_CollectFFTBuf[m_CollectwPage][m_CollectFFTCount], lp, sizeof(double)*size); + break; + } + m_CollectFFTCount += size; + if( m_CollectFFTCount >= FFT_SIZE ){ + m_CollectwPage++; + if( m_CollectwPage >= 3 ) m_CollectwPage = 0; + m_CollectCount++; + m_CollectFFTCount = 0; + } + } +} +//------------------------------------------------- +// 計算(スレッド外で実行する) +void CFFT::CalcFFT(int size, double gain, int stg) +{ + if( sys.m_FFTType == 2 ){ + CalcFQC(m_CollectFFTBuf[m_CollectrPage], size, gain, stg, m_fft); + } + else { + Calc(m_CollectFFTBuf[m_CollectrPage], size, gain, stg, m_fft); + } + m_CollectrPage++; + if( m_CollectrPage >= 3 ) m_CollectrPage = 0; + if( m_CollectCount ) m_CollectCount--; +} + +void CFFT::makewt(int nw, int *ip, double *w) +{ + int nwh, j; + double delta, x, y; + + ip[0] = nw; + ip[1] = 1; + if(nw > 2){ + nwh = nw >> 1; + delta = atan(1.0) / nwh; + w[0] = 1; + w[1] = 0; + w[nwh] = cos(delta * nwh); + w[nwh + 1] = w[nwh]; + for(j = 2; j < nwh; j += 2){ + x = cos(delta * j); + y = sin(delta * j); + w[j] = x; + w[j + 1] = y; + w[nw - j] = y; + w[nw - j + 1] = x; + } + bitrv2(nw, ip + 2, w); + } +} +//------------------------------------------------- +// データの処理化 +void CFFT::makect(int nc, int *ip, double *c) +{ + int nch, j; + double delta; + + ip[1] = nc; + if(nc > 1){ + nch = nc >> 1; + delta = atan(1.0) / nch; + c[0] = cos(delta * nch); + c[nch] = 0.5 * c[0]; + for(j = 1; j < nch; j++){ + c[j] = 0.5 * cos(delta * j); + c[nc - j] = 0.5 * sin(delta * j); + } + } +} +//------------------------------------------------- +// データの処理化 +void CFFT::bitrv2(int n, int *ip, double *a) +{ + int j, j1, k, k1, l, m, m2; + double xr, xi; + + ip[0] = 0; + l = n; + m = 1; + while((m << 2) < l){ + l >>= 1; + for (j = 0; j < m; j++) { + ip[m + j] = ip[j] + l; + } + m <<= 1; + } + if((m << 2) > l){ + for (k = 1; k < m; k++) { + for (j = 0; j < k; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } else { + m2 = m << 1; + for(k = 1; k < m; k++){ + for(j = 0; j < k; j++){ + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 += m2; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } +} +//------------------------------------------------- +void CFFT::cftfsub(int n, double *a, double *w) +{ + int j, j1, j2, j3, l; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 2; + if(n > 8){ + cft1st(n, a, w); + l = 8; + while((l << 2) < n){ + cftmdl(n, l, a, w); + l <<= 2; + } + } + if((l << 2) == n){ + for(j = 0; j < l; j += 2){ + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i - x2i; + a[j1] = x1r - x3i; + a[j1 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + } + } else { + for(j = 0; j < l; j += 2){ + j1 = j + l; + x0r = a[j] - a[j1]; + x0i = a[j + 1] - a[j1 + 1]; + a[j] += a[j1]; + a[j + 1] += a[j1 + 1]; + a[j1] = x0r; + a[j1 + 1] = x0i; + } + } +} +//------------------------------------------------- +void CFFT::cft1st(int n, double *a, double *w) +{ + int j, k1, k2; + double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + x0r = a[0] + a[2]; + x0i = a[1] + a[3]; + x1r = a[0] - a[2]; + x1i = a[1] - a[3]; + x2r = a[4] + a[6]; + x2i = a[5] + a[7]; + x3r = a[4] - a[6]; + x3i = a[5] - a[7]; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[4] = x0r - x2r; + a[5] = x0i - x2i; + a[2] = x1r - x3i; + a[3] = x1i + x3r; + a[6] = x1r + x3i; + a[7] = x1i - x3r; + wk1r = w[2]; + x0r = a[8] + a[10]; + x0i = a[9] + a[11]; + x1r = a[8] - a[10]; + x1i = a[9] - a[11]; + x2r = a[12] + a[14]; + x2i = a[13] + a[15]; + x3r = a[12] - a[14]; + x3i = a[13] - a[15]; + a[8] = x0r + x2r; + a[9] = x0i + x2i; + a[12] = x2i - x0i; + a[13] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[10] = wk1r * (x0r - x0i); + a[11] = wk1r * (x0r + x0i); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[14] = wk1r * (x0i - x0r); + a[15] = wk1r * (x0i + x0r); + k1 = 0; + for(j = 16; j < n; j += 16){ + k1 += 2; + k2 = k1 << 1; + wk2r = w[k1]; + wk2i = w[k1 + 1]; + wk1r = w[k2]; + wk1i = w[k2 + 1]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + x0r = a[j] + a[j + 2]; + x0i = a[j + 1] + a[j + 3]; + x1r = a[j] - a[j + 2]; + x1i = a[j + 1] - a[j + 3]; + x2r = a[j + 4] + a[j + 6]; + x2i = a[j + 5] + a[j + 7]; + x3r = a[j + 4] - a[j + 6]; + x3i = a[j + 5] - a[j + 7]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j + 4] = wk2r * x0r - wk2i * x0i; + a[j + 5] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j + 2] = wk1r * x0r - wk1i * x0i; + a[j + 3] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j + 6] = wk3r * x0r - wk3i * x0i; + a[j + 7] = wk3r * x0i + wk3i * x0r; + wk1r = w[k2 + 2]; + wk1i = w[k2 + 3]; + wk3r = wk1r - 2 * wk2r * wk1i; + wk3i = 2 * wk2r * wk1r - wk1i; + x0r = a[j + 8] + a[j + 10]; + x0i = a[j + 9] + a[j + 11]; + x1r = a[j + 8] - a[j + 10]; + x1i = a[j + 9] - a[j + 11]; + x2r = a[j + 12] + a[j + 14]; + x2i = a[j + 13] + a[j + 15]; + x3r = a[j + 12] - a[j + 14]; + x3i = a[j + 13] - a[j + 15]; + a[j + 8] = x0r + x2r; + a[j + 9] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j + 12] = -wk2i * x0r - wk2r * x0i; + a[j + 13] = -wk2i * x0i + wk2r * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j + 10] = wk1r * x0r - wk1i * x0i; + a[j + 11] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j + 14] = wk3r * x0r - wk3i * x0i; + a[j + 15] = wk3r * x0i + wk3i * x0r; + } +} +//------------------------------------------------- +void CFFT::cftmdl(int n, int l, double *a, double *w) +{ + int j, j1, j2, j3, k, k1, k2, m, m2; + double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + m = l << 2; + for(j = 0; j < l; j += 2){ + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i - x2i; + a[j1] = x1r - x3i; + a[j1 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + } + wk1r = w[2]; + for(j = m; j < l + m; j += 2){ + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x2i - x0i; + a[j2 + 1] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * (x0r - x0i); + a[j1 + 1] = wk1r * (x0r + x0i); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[j3] = wk1r * (x0i - x0r); + a[j3 + 1] = wk1r * (x0i + x0r); + } + k1 = 0; + m2 = m << 1; + for(k = m2; k < n; k += m2){ + k1 += 2; + k2 = k1 << 1; + wk2r = w[k1]; + wk2i = w[k1 + 1]; + wk1r = w[k2]; + wk1i = w[k2 + 1]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + for(j = k; j < l + k; j += 2){ + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2] = wk2r * x0r - wk2i * x0i; + a[j2 + 1] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * x0r - wk1i * x0i; + a[j1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r - wk3i * x0i; + a[j3 + 1] = wk3r * x0i + wk3i * x0r; + } + wk1r = w[k2 + 2]; + wk1i = w[k2 + 3]; + wk3r = wk1r - 2 * wk2r * wk1i; + wk3i = 2 * wk2r * wk1r - wk1i; + for(j = k + m; j < l + (k + m); j += 2){ + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2] = -wk2i * x0r - wk2r * x0i; + a[j2 + 1] = -wk2i * x0i + wk2r * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * x0r - wk1i * x0i; + a[j1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r - wk3i * x0i; + a[j3 + 1] = wk3r * x0i + wk3i * x0r; + } + } +} +//--------------------------------------------------------------------------- +void CFFT::Calc(double * InBuf, int size, double gain, int stg, int* OutBuf) +{ + if( m_FFTDIS ) return; // for math error + m_FFTDIS++; + int i; + + if( stg > 1 ){ + m_StgSW = TRUE; + } + else { + m_StgSW = FALSE; + } + m_StgSize = stg; + if( stg ){ + m_StgScale = 1.0 / double(m_StgSize); + m_StgK = 1.0 - m_StgScale; + } + else { + m_StgScale = 1.0; + m_StgK = 0.0; + } + double *dp = InBuf; + for(i=0; i < FFT_SIZE; i++, dp++){ + if( *dp > 32768.0 ){ + *dp = 32768.0; + } + else if( *dp < -32768.0 ){ + *dp = -32768.0; + } + (*dp) *= m_tWindow[i]; + } + bitrv2(FFT_SIZE, m_Work + 2, InBuf); + cftfsub(FFT_SIZE, InBuf, m_tSinCos); + rftfsub(FFT_SIZE, InBuf, m_Work[1], m_tSinCos + m_Work[0]); + for( i = 0, dp = pStgBuf; i <= size; i++, dp+=2 ){ + OutBuf[i] = int((gain * (*dp))); + } + m_FFTDIS--; +} + +//--------------------------------------------------------------------------- +void CFFT::CalcFQC(double * InBuf, int size, double gain, int stg, int* OutBuf) +{ + double *dp = InBuf; + double d; + int i, r; + memset(OutBuf, 0, sizeof(int)*size); + int ad, ad2, max; + switch(sys.m_FFTGain&3){ + case 0: + ad = 30; + max = ad * 32; + break; + case 1: + ad = 30; + max = ad * 24; + break; + case 2: + ad = 40; + max = ad * 16; + break; + default: + ad = 50; + max = ad * 12; + break; + } + ad2 = ad / 2; + int *op; + size--; + for( i = 0; i < FFT_SIZE; i++, dp++ ){ + d = m_fqc.Do(*dp); + d = 1900.0 - (d * 400 / 16384.0); + r = d * FFT_SIZE / FFTSamp; + if( (r >= 1) && (r < size) ){ + op = &OutBuf[r]; + if( *op < max ){ + *op += ad; + *(op-1) += ad2; + *(op+1) += ad2; + } + } + } +} +//--------------------------------------------------------------------------- +void CFFT::rftfsub(int n, double *a, int nc, double *c) +{ + int j, k, kk, ks, m; + double wkr, wki, xr, xi, yr, yi; + double d; + + ks = (nc << 2) / n; + kk = 0; + m = n >> 1; + j = n - 2; + if(m_StgSW){ + for (k = 2; k <= m; k += 2, j -= 2 ){ + kk += ks; + wkr = 0.5 - c[nc - kk]; + wki = c[kk]; + xr = a[k] - a[j]; + xi = a[k + 1] + a[j + 1]; + yr = wkr * xr - wki * xi; + yi = wkr * xi + wki * xr; + a[k] -= yr; + xi = a[k]*a[k]; + a[k+1] -= yi; + xi += ( a[k+1]*a[k+1]); + a[j] += yr; + xr = a[j]*a[j]; + a[j+1] -= yi; + xr += (a[j+1]*a[j+1]); + if( xi <= 0 ) xi = 0.0001; + if( xi >= 1e38 ) xi = 1e38; + if( xr <= 0 ) xr = 0.0001; + if( xr >= 1e38 ) xr = 1e38; + if( FFT_SIZE == 1024 ){ + xi *= 4; + xr *= 4; + } + switch(sys.m_FFTGain){ + case 0: + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*(log10(xi+LOGADJ) + SCALEADJ_1); + pStgBuf[j] = m_StgK*pStgBuf[j] + m_StgScale*(log10(xr+LOGADJ) + SCALEADJ_1); + break; + case 1: + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*(log10(xi+LOGADJ) + SCALEADJ_2); + pStgBuf[j] = m_StgK*pStgBuf[j] + m_StgScale*(log10(xr+LOGADJ) + SCALEADJ_2); + break; + case 2: + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*(log10(xi+LOGADJ) + SCALEADJ_3); + pStgBuf[j] = m_StgK*pStgBuf[j] + m_StgScale*(log10(xr+LOGADJ) + SCALEADJ_3); + break; + case 3: + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*(log10(xi+LOGADJ) + SCALEADJ_4); + pStgBuf[j] = m_StgK*pStgBuf[j] + m_StgScale*(log10(xr+LOGADJ) + SCALEADJ_4); + break; + case 4: + d = xi * 32e-10; + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*d; + d = xr * 32e-10; + pStgBuf[j] = m_StgK*pStgBuf[j] + d; + break; + case 5: + d = xi * 96e-10; + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*d; + d = xr * 96e-10; + pStgBuf[j] = m_StgK*pStgBuf[j] + d; + break; + case 6: + d = xi * 256e-10; + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*d; + d = xr * 256e-10; + pStgBuf[j] = m_StgK*pStgBuf[j] + d; + break; + default: + d = xi * 512e-10; + pStgBuf[k] = m_StgK*pStgBuf[k] + m_StgScale*d; + d = xr * 512e-10; + pStgBuf[j] = m_StgK*pStgBuf[j] + d; + break; + } + } + } + else { + for (k = 2; k <= m; k += 2, j -= 2 ){ + kk += ks; + wkr = 0.5 - c[nc - kk]; + wki = c[kk]; + xr = a[k] - a[j]; + xi = a[k + 1] + a[j + 1]; + yr = wkr * xr - wki * xi; + yi = wkr * xi + wki * xr; + a[k] -= yr; + xi = a[k]*a[k]; + a[k+1] -= yi; + xi += ( a[k+1]*a[k+1]); + a[j] += yr; + xr = a[j]*a[j]; + a[j+1] -= yi; + xr += (a[j+1]*a[j+1]); + if( xi <= 0 ) xi = 0.0001; + if( xi >= 1e38 ) xi = 1e38; + if( xr <= 0 ) xr = 0.0001; + if( xr >= 1e38 ) xr = 1e38; + if( FFT_SIZE == 1024 ){ + xi *= 4; + xr *= 4; + } + switch(sys.m_FFTGain){ + case 0: + pStgBuf[k] = log10(xi+LOGADJ)+SCALEADJ_1; + pStgBuf[j] = log10(xr+LOGADJ)+SCALEADJ_1; + break; + case 1: + pStgBuf[k] = log10(xi+LOGADJ)+SCALEADJ_2; + pStgBuf[j] = log10(xr+LOGADJ)+SCALEADJ_2; + break; + case 2: + pStgBuf[k] = log10(xi+LOGADJ)+SCALEADJ_3; + pStgBuf[j] = log10(xr+LOGADJ)+SCALEADJ_3; + break; + case 3: + pStgBuf[k] = log10(xi+LOGADJ)+SCALEADJ_4; + pStgBuf[j] = log10(xr+LOGADJ)+SCALEADJ_4; + break; + case 4: + pStgBuf[k] = xi * 32e-10; + pStgBuf[j] = xr * 32e-10; + break; + case 5: + pStgBuf[k] = xi * 96e-10; + pStgBuf[j] = xr * 96e-10; + break; + case 6: + pStgBuf[k] = xi * 256e-10; + pStgBuf[j] = xr * 256e-10; + break; + default: + pStgBuf[k] = xi * 512e-10; + pStgBuf[j] = xr * 512e-10; + break; + } + } + } + pStgBuf[FFT_SIZE/2] = pStgBuf[(FFT_SIZE/2) - 2]; +} + diff --git a/Fft.h b/Fft.h new file mode 100644 index 0000000..2283b04 --- /dev/null +++ b/Fft.h @@ -0,0 +1,77 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +#ifndef FFT_H +#define FFT_H +//--------------------------------------------------------------------------- +#define FFT_BUFSIZE 2048 +#define SQRT_FFT_SIZE 46//sqrt(2048) + +#define CM_FFT WM_USER+403 + +#include "sstv.h" + +class CFFT +{ +public: + CFFT(); + virtual ~CFFT(); + void InitFFT(void); + + int IsData(void){ + return m_CollectCount; + }; + int m_CollectFFT; + HWND m_Handle; + void CollectFFT(double *lp, int size); + void CalcFFT(int size, double gain, int stg); + void TrigFFT(void); + int m_FFTDIS; + int m_fft[2048]; +private: + void Calc(double * InBuf, int size, double gain, int stg, int* OutBuf); + void CalcFQC(double * InBuf, int size, double gain, int stg, int* OutBuf); + BOOL m_StgSW; + int m_StgSize; + double m_StgScale; + double m_StgK; + + int m_CollectFlag; + int m_CollectrPage; + int m_CollectwPage; + int m_CollectCount; + int m_CollectFFTCount; + double m_CollectFFTBuf[3][2048]; + + double *m_tSinCos; + double *m_tWindow; + double *pStgBuf; + int *m_Work; + void makewt(int nw, int *ip, double *w); + void makect(int nc, int *ip, double *c); + void bitrv2(int n, int *ip, double *a); + void cftfsub(int n, double *a, double *w); + void rftfsub(int n, double *a, int nc, double *c); + void cft1st(int n, double *a, double *w); + void cftmdl(int n, int l, double *a, double *w); + + CFQC m_fqc; +}; + +#endif diff --git a/FreqDisp.cpp b/FreqDisp.cpp new file mode 100644 index 0000000..7062b90 --- /dev/null +++ b/FreqDisp.cpp @@ -0,0 +1,187 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "FreqDisp.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TFreqDispDlg *FreqDispDlg; +//--------------------------------------------------------------------- +__fastcall TFreqDispDlg::TFreqDispDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + + m_H1 = NULL; + m_Tap1 = 0; + m_Over1 = 1; + m_H2 = NULL; + m_Tap2 = 0; + m_Over2 = 1; + m_Max = 0; + + pBitmap = new Graphics::TBitmap(); + pBitmap->Width = PaintBox->Width; + pBitmap->Height = PaintBox->Height; + if( MsgEng ){ + CancelBtn->Caption = "Close"; + BwBtn->Caption = "Width"; + Caption = "frequency characteristic"; + } +} +__fastcall TFreqDispDlg::~TFreqDispDlg() +{ + delete pBitmap; +} +//--------------------------------------------------------------------- +void __fastcall TFreqDispDlg::Execute(const double *H, int Tap, int Over) +{ + m_type = 0; + m_H1 = H; + m_Tap1 = Tap; + m_Over1 = Over; + m_Tap2 = 0; + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TFreqDispDlg::Execute(const double *H1, const double *H2, int Tap, int Over) +{ + m_type = 0; + m_H1 = H1; + m_Tap1 = Tap; + m_Over1 = Over; + m_H2 = H2; + m_Tap2 = Tap; + m_Over2 = Over; + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TFreqDispDlg::Execute(double a10, double b11, double b12, double a20, double b21, double b22, int Over) +{ + m_type = 1; + m_Over1 = Over; + m_a10 = a10; + m_b11 = b11; + m_b12 = b12; + m_a20 = a20; + m_b21 = b21; + m_b22 = b22; + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TFreqDispDlg::Execute(CIIR *ip, int Over, double max) +{ + m_type = 2; + m_piir = ip; + m_Over1 = Over; + m_Max = max; + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TFreqDispDlg::Execute(const double *H, int Tap, int Over, double max) +{ + m_type = 3; + m_H1 = H; + m_Tap1 = Tap; + m_Over1 = Over; + m_Tap2 = 0; + m_Max = max; + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TFreqDispDlg::PaintBoxPaint(TObject *Sender) +{ + if( m_type == 0 ){ // FIR + if( Timer->Enabled ){ + memcpy(m_HT, m_H1, sizeof(double)*(m_Tap1+1)); + DrawGraph(pBitmap, m_H1, m_Tap1, m_Over1, m_Max, 1, clBlue); + } + else { + DrawGraph(pBitmap, m_H1, m_Tap1, m_Over1, m_Max, 1, clBlue); + if( m_Tap2 ){ + DrawGraph(pBitmap, m_H2, m_Tap2, m_Over2, m_Max, 0, clRed); + } + } + } + else if( m_type == 1 ){ // IIR Tank + DrawGraphIIR(pBitmap, m_a10, 0, 0, -m_b11, -m_b12, m_Over1, m_Max, 1, clBlue); + DrawGraphIIR(pBitmap, m_a20, 0, 0, -m_b21, -m_b22, m_Over1, m_Max, 0, clRed); + } + else if( m_type == 2 ){ // IIR +#if 1 + DrawGraphIIR(pBitmap, m_piir, m_Over1, m_Max, 1, clBlue); +#else + CIIR iir; + iir.MakeIIR(2600, SampFreq, 10, 0, 0); + m_Max = 6000.0; + DrawGraphIIR(pBitmap, &iir, 1, m_Max, 1, clBlue); +#endif + } + else if( m_type == 3 ){ // FIR-Avg + DrawGraph(pBitmap, m_H1, m_Tap1, m_Over1, m_Max, 1, clBlue); + } + PaintBox->Canvas->Draw(0, 0, (TGraphic*)pBitmap); +} +//--------------------------------------------------------------------------- +void __fastcall TFreqDispDlg::BwBtnClick(TObject *Sender) +{ + if( m_type >= 2 ){ + switch(m_Max){ + case 100: + m_Max = 200; + break; + case 200: + m_Max = 400; + break; + case 400: + m_Max = 800; + break; + case 800: + m_Max = 3000; + break; + default: + m_Max = 100; + break; + } + } + else { + switch(m_Max){ + case 3000: + m_Max = 4000; + break; + case 4000: + m_Max = 6000; + break; + case 6000: + m_Max = 2000; + break; + default: + m_Max = 3000; + break; + } + } + PaintBoxPaint(NULL); +} +//--------------------------------------------------------------------------- + diff --git a/FreqDisp.dfm b/FreqDisp.dfm new file mode 100644 index 0000000000000000000000000000000000000000..1206a7588f266e844ec2cfb3a74b80862da56a15 GIT binary patch literal 822 zcmZXS&u`N(6o4Iv#A(y99d>7b07AQST9TD!8f|DIhJ-ZaHePDs*f=-5ZqC`f+?k6ytsmB-x^FV*l6~MM zqM}W$=;lxFocPjdV6IVyMw~^2pVO2uPn2#rL)^6}i@FqZ6 za4x0btq}7uVS(hv**4V929~2cg~#sl$t~C1Y^}Aqi!bv}^Y17kC-|JnmVaO5m<>s# z0tmefj|Po(2mo-i1arb1y=o8y4F>{)Q9_p-JGPuXMhlJ{%+!s4N0(AwFye&TEK+7C zRFZ3!1zHNFlmuettu_Xze+Ibh%P!Zza0T=*Gc!g5uAicfRR;Z4eXOiG!NtlLL|Rz# zzp%9^@8$c&yT!NHkFM*4ilJcRr>Lz{>3!oVqo<^F^osU59x;-8UfhiO8D{ovOT9CP Qf7fP)_tpIHiKR;Y4dUhm=Kufz literal 0 HcmV?d00001 diff --git a/FreqDisp.h b/FreqDisp.h new file mode 100644 index 0000000..b7dc98c --- /dev/null +++ b/FreqDisp.h @@ -0,0 +1,83 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef FreqDispH +#define FreqDispH +//---------------------------------------------------------------------------- + //ja7ude 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "fir.h" +//---------------------------------------------------------------------------- +class TFreqDispDlg : public TForm +{ +__published: + TButton *CancelBtn; + TPanel *Panel; + TPaintBox *PaintBox; + TTimer *Timer; + TButton *BwBtn; + void __fastcall PaintBoxPaint(TObject *Sender); + + void __fastcall BwBtnClick(TObject *Sender); +private: + Graphics::TBitmap *pBitmap; + + int m_type; + double m_a10, m_a20; + double m_b11, m_b12; + double m_b21, m_b22; + + CIIR *m_piir; + + const double *m_H1; + int m_Tap1; + int m_Over1; + const double *m_H2; + int m_Tap2; + int m_Over2; + + double m_HT[TAPMAX+1]; +public: + virtual __fastcall TFreqDispDlg(TComponent* AOwner); + __fastcall ~TFreqDispDlg(); + + void __fastcall Execute(const double *H, int Tap, int Over); + void __fastcall Execute(const double *H1, const double *H2, int Tap, int Over); + void __fastcall Execute(double a10, double b11, double b12, double a20, double b21, double b22, int Over); + void __fastcall Execute(CIIR *ip, int Over, double max); + void __fastcall Execute(const double *H, int Tap, int Over, double max); + + int m_Max; +}; +//---------------------------------------------------------------------------- +extern TFreqDispDlg *FreqDispDlg; +//---------------------------------------------------------------------------- +#endif + diff --git a/Hamlog5.cpp b/Hamlog5.cpp new file mode 100644 index 0000000..6a20e4d --- /dev/null +++ b/Hamlog5.cpp @@ -0,0 +1,632 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "LogFile.h" +#include "Hamlog5.h" +#include "LogConv.h" +//-------------------------------------------- +const LPCSTR g_Hamlog5Key[]={ + "CALLS", "IGN", "DATE", "TIME", "CODE", "GL", "QSL", "FLAG", "HIS", "MY", + "FREQ", "MODE", "NAME", "QTH", "RMK1", "RMK2", NULL +}; +const BYTE g_Hamlog5Len[]={ + 8, 12, 4, 2, 6, 6, 3, 2, 3, 3, + 7, 4, 12, 28, 54, 54, 0 +}; +//-------------------------------------------- +void __fastcall GetHamlog5FieldsLen(AnsiString &as) +{ + as = ""; + for( int i = 8; i < 15; i++ ){ + if( i > 8 ) as += ","; + as += Log.m_LogSet.m_Hamlog5Len[i]; + } +} +//-------------------------------------------- +void __fastcall SetHamlog5FieldsLen(AnsiString &as) +{ + LPSTR pBF = StrDupe(as.c_str()); + LPSTR p, t; + p = pBF; + for( int i = 8; i < 15; i++ ){ + p = StrDlm(t, p); + Log.m_LogSet.m_Hamlog5Len[i] = BYTE(atoin(t, -1)); + } + delete pBF; +} +//-------------------------------------------- +//コンストラクタ +CHamlog5::CHamlog5() +{ + m_fCreate = FALSE; + m_RecMax = 0; // レコード数 + m_FilMax = 0; // フィールド数 + m_RecWidth = 0; // レコードの幅 + m_FilOff = 0; // ヘッダオフセット + m_bp = NULL; + m_OpenFlag = FALSE; + m_WriteFlag = FALSE; // 書き込みフラグ +} + +//-------------------------------------------- +//デストラクタ +CHamlog5::~CHamlog5() +{ + Close(); +} + +//-------------------------------------------- +//ヘッダデータセットアップ +BOOL CHamlog5::SetupHeader(void) +{ + if( fread(&m_Head, 1, sizeof(m_Head), m_fp)!=sizeof(m_Head) ){ + return FALSE; // 異なるフォーマット + } + + if( (m_Head.Type != 0x03)&&(m_Head.Type != 0x1a ) ) return FALSE; + + m_RecMax = m_Head.RecMax; + m_FilOff = m_Head.FilOff; + m_RecWidth = m_Head.RecWidth; + if( !m_FilOff ) return FALSE; + + hamlog5DBRHD slot; + ULONG fPos; + for( m_FilMax = 0; m_FilMax < HamlogDBMAX; m_FilMax++ ){ + fPos = (32L*m_FilMax)+32L; + if( fPos > ULONG(m_FilOff) ) break; + if( fread(&slot, 1, sizeof(slot), m_fp)!=sizeof(slot) ) break; + if( slot.Name[0] == 0x0d ) break; + slot.Name[10] = 0; + m_StrTable[m_FilMax] = slot.Name; + m_TypeTable[m_FilMax] = slot.Type; + m_LenTable[m_FilMax] = USHORT(slot.Len); + } + for( int i = 8; (i < 15) && (i < m_FilMax); i++ ){ + Log.m_LogSet.m_Hamlog5Len[i] = m_LenTable[i]; + } + +// if( (m_Head.Type == 0x1a) && !m_RecMax ){ +// m_RecMax = (m_fStatus.m_size - ULONG(m_FilOff)) / ULONG(m_RecWidth); +// } + + USHORT i; + USHORT Pos = 1; + for( i = 0; i < m_FilMax; i++ ){ + m_PosTable[i] = Pos; + Pos += m_LenTable[i]; + } + return TRUE; +} + +//-------------------------------------------- +//ヘッダデータ作成 +BOOL CHamlog5::MakeHeader(const LPCSTR _NT[], const BYTE _LT[]) +{ + hamlog5DBRHD slot; + + memset(&m_Head, 0, sizeof(m_Head)); + fseek(m_fp, 0, SEEK_SET); + fwrite(&m_Head, 1, sizeof(m_Head), m_fp); + m_FilOff = sizeof(m_Head); + m_RecWidth = 1; + for( m_FilMax = 0; _LT[m_FilMax]; m_FilMax++ ){ + memset(&slot, 0, sizeof(slot)); + strcpy(slot.Name, _NT[m_FilMax]); + slot.Len = _LT[m_FilMax]; + slot.Type = 'C'; + fwrite(&slot, 1, sizeof(slot), m_fp); + m_PosTable[m_FilMax] = m_RecWidth; + m_RecWidth += USHORT(_LT[m_FilMax]); + m_FilOff += USHORT(sizeof(slot)); + m_StrTable[m_FilMax] = _NT[m_FilMax]; + m_TypeTable[m_FilMax] = 'C'; + m_LenTable[m_FilMax] = USHORT(_LT[m_FilMax]); + } + char Term = 0x0d; + fwrite(&Term, 1, 1, m_fp); + m_FilOff++; + m_Head.Type = 3; + SYSTEMTIME st; + ::GetLocalTime(&st); + m_Head.Year = BYTE(st.wYear % 100); + m_Head.Mon = BYTE(st.wMonth); + m_Head.Day = BYTE(st.wDay); + m_Head.RecMax = 0; + m_Head.FilOff = m_FilOff; + m_Head.RecWidth = m_RecWidth; + fseek(m_fp, 0, SEEK_SET); + fwrite(&m_Head, 1, sizeof(m_Head), m_fp); + return TRUE; +} + +//-------------------------------------------- +//オープン +BOOL CHamlog5::Open(LPCSTR Name, BOOL fMsg) +{ + if( (m_OpenFlag == TRUE) ) Close(); + m_WriteFlag = FALSE; // 書き込みフラグ + if( (m_fp = fopen(Name, "rb")) == NULL ){ + if( fMsg ) ErrorMB("%sがオープンできません.", Name); + return FALSE; // ファイルがオープンできない + } + m_OpenFlag = TRUE; + m_fCreate = FALSE; + if( SetupHeader() == FALSE ){ + Close(); + if( fMsg ) ErrorMB("ファイルフォーマットが認識できません."); + return FALSE; + } + if( m_bp ) delete m_bp; + m_bp = new char[m_RecWidth]; + if( Seek(0) == FALSE ){ + Close(); + if( fMsg ) ErrorMB("データーレコードが存在しません."); + return FALSE; + } + return TRUE; +} + +//-------------------------------------------- +//オープン +BOOL CHamlog5::Create(LPCSTR Name) +{ + if( (m_OpenFlag == TRUE) ) Close(); + m_WriteFlag = FALSE; // 書き込みフラグ + if( (m_fp = fopen(Name, "wb")) == NULL ){ + ErrorMB("%sを作成できません.", Name); + return FALSE; // ファイルがオープンできない + } + m_OpenFlag = TRUE; + m_fCreate = TRUE; + if( MakeHeader(g_Hamlog5Key, Log.m_LogSet.m_Hamlog5Len) == FALSE ){ + Close(); + ErrorMB("%sを作成できません.", Name); + return FALSE; + } + if( m_bp ) delete m_bp; + m_bp = new char[m_RecWidth]; + return TRUE; +} + +//-------------------------------------------- +//クローズ +void CHamlog5::Close(void) +{ + if( m_OpenFlag == TRUE ){ + Update(); + if( m_RecMax != m_Head.RecMax ){ // データが追加されている + m_Head.RecMax = m_RecMax; + fseek(m_fp, 0, SEEK_SET); + fwrite(&m_Head, 1, sizeof(m_Head), m_fp); + } + int r = fclose(m_fp); + m_fp = NULL; + if( r && m_fCreate ){ + ErrorMB("ファイルの作成に失敗しました."); + } + m_OpenFlag = FALSE; + } + if( m_bp != NULL ){ + delete m_bp; + m_bp = NULL; + } +} + +//-------------------------------------------- +//レコードシーク +BOOL CHamlog5::Seek(ULONG Index) +{ + if( m_OpenFlag == FALSE ) return FALSE; + if( Update() == FALSE ) return FALSE; + m_Index = Index; + m_Pos = (Index * ULONG(m_RecWidth)) + ULONG(m_FilOff); + fseek(m_fp, m_Pos, SEEK_SET); + if( Index < m_RecMax ){ + if( fread(m_bp, 1, m_RecWidth, m_fp) != ULONG(m_RecWidth) ){ + return FALSE; + } + } + else { + memset(m_bp, ' ', m_RecWidth); + } + return TRUE; +} + +//-------------------------------------------- +//マークのチェック +BOOL CHamlog5::IsData(void) +{ + return (*m_bp == ' ') ? TRUE : FALSE; +} + +//-------------------------------------------- +//データの読み込み +BOOL CHamlog5::GetData(USHORT SubIndex, AnsiString &cs) +{ + char bf[1024]; + + if( SubIndex >= m_FilMax ) return FALSE; + + int len = m_LenTable[SubIndex]; + if( len >= 1023 ) len = 1023; + StrCopy(bf, m_bp + m_PosTable[SubIndex], len); + cs = bf; + return TRUE; +} +//-------------------------------------------- +//データの読み込み +BOOL CHamlog5::GetData(USHORT SubIndex, LPSTR pStore) +{ + if( SubIndex >= m_FilMax ) return FALSE; + + int len = m_LenTable[SubIndex]; + if( len >= 1023 ) len = 1023; + StrCopy(pStore, m_bp + m_PosTable[SubIndex], len); + return TRUE; +} + +//-------------------------------------------- +//データの読み込み +int CHamlog5::GetData(USHORT SubIndex, LPBYTE pData, int len) +{ + if( SubIndex >= m_FilMax ) return 0; + + int rlen = m_LenTable[SubIndex]; + if( rlen >= 1023 ) rlen = 1023; + if( rlen > len ) rlen = len; + memcpy(pData, m_bp + m_PosTable[SubIndex], rlen); + return rlen; +} + +//-------------------------------------------- +//データの書き込み(バッファを更新するのみ) +BOOL CHamlog5::SetData(USHORT SubIndex, LPCSTR p) +{ + if( SubIndex >= m_FilMax ) return FALSE; + + int len = m_LenTable[SubIndex]; + LPSTR t; + int i; + for( i = 0, t = m_bp + m_PosTable[SubIndex]; i < len; i++, t++ ){ + if( *p ){ + *t = *p++; + } + else { + *t = ' '; + } + } + m_WriteFlag = TRUE; + return TRUE; +} +//-------------------------------------------- +//データの書き込み(バッファを更新するのみ) +BOOL CHamlog5::SetBinary(USHORT SubIndex, LPBYTE p) +{ + if( SubIndex >= m_FilMax ) return FALSE; + + int len = m_LenTable[SubIndex]; + LPSTR t; + int i; + for( i = 0, t = m_bp + m_PosTable[SubIndex]; i < len; i++, t++ ){ + *t = *p++; + } + m_WriteFlag = TRUE; + return TRUE; +} + +//-------------------------------------------- +//データの書き込み(バッファの内容を反映させる) +BOOL CHamlog5::Update(void) +{ + if( m_OpenFlag == FALSE ) return FALSE; + + if( m_WriteFlag == TRUE ){ + m_WriteFlag = FALSE; + fseek(m_fp, m_Pos, SEEK_SET); + fwrite(m_bp, 1, m_RecWidth, m_fp); + if( m_Index >= m_RecMax ){ + m_RecMax++; + } + } + return TRUE; +} +//-------------------------------------------- +//データのデコード +void CHamlog5::DecodeData(SDMMLOG *sp) +{ + memset(sp, 0, sizeof(SDMMLOG)); + char bf[1024]; + + + int YY, MM, DD, HH, mm; + GetData(itemhamlog5DATE, LPBYTE(bf), 4); + YY = bf[1]; + MM = bf[2]; + DD = bf[3]; + GetData(itemhamlog5TIME, LPBYTE(bf), 2); + HH = bf[0]; + mm = bf[1] & 0x7f; + if( bf[1] & 0x80 ){ + UTCtoJST(YY, MM, DD, HH); + } + sp->year = BYTE(YY); + sp->date = WORD(MM * 100 + DD); + sp->btime = WORD(((HH * 60 + mm) * 30)); + if(!sp->btime) sp->btime++; + + USHORT usFlag; // コールサインの形式 + GetData(itemhamlog5FLAG, LPBYTE(&usFlag), sizeof(usFlag)); + + LPSTR t, p; + AnsiString call; + if( (usFlag & bithamlog5DX) && (usFlag & bithamlog5RevOdr) ){ // KH6/JE3HHT + AnsiString Add; + GetData(itemhamlog5IGN, bf); + p = bf; + if( *p != ' ' ){ + p = StrDlm(t, p, ' '); + Add = t; + } + p = SkipSpace(p); + p = StrDlm(t, p, '/'); + call = t; + GetData(itemhamlog5CALLS, bf); clipsp(bf); + if( !call.IsEmpty() ) call += '/'; + call += SkipSpace(bf); + call += Add; + if( *p ){ + call += '/'; + call += p; + } + } + else { // JE3HHT/KH6 + GetData(itemhamlog5CALLS, bf); clipsp(bf); + call = SkipSpace(bf); + GetData(itemhamlog5IGN, bf); + p = bf; + if( *p != ' ' ){ + p = StrDlm(t, p, ' '); + call += t; + } + p = SkipSpace(p); + if( *p ){ + call += '/'; + call += p; + } + } + + StrCopy(sp->call, call.c_str(), MLCALL); + GetData(itemhamlog5HIS, bf); clipsp(bf); + StrCopy(sp->ur, bf, MLRST); + GetData(itemhamlog5MY, bf); clipsp(bf); + StrCopy(sp->my, bf, MLRST); + GetData(itemhamlog5MODE, bf); clipsp(bf); + Log.SetMode(sp, bf); + GetData(itemhamlog5FREQ, bf); clipsp(bf); + Log.SetFreq(sp, bf); + GetData(itemhamlog5NAME, bf); clipsp(bf); + StrCopy(sp->name, bf, MLNAME); + GetData(itemhamlog5QTH, bf); clipsp(bf); + StrCopy(sp->qth, bf, MLQTH); + + GetData(itemhamlog5RMK1, bf); + SetMMLOGKey(sp, bf); + clipsp(bf); + StrCopy(sp->rem, SkipSpace(bf), MLREM); + GetData(itemhamlog5RMK2, bf); + SetMMLOGKey(sp, bf); + clipsp(bf); + StrCopy(sp->qsl, SkipSpace(bf), MLQSL); + GetData(itemhamlog5QSL, LPBYTE(bf), 3); + sprintf(&bf[32], "QSL[%.3s]", bf); + Log.SetOptStr(2, sp, &bf[32]); + if( bf[0] == 'N' ){ + sp->send = 'N'; + } + else if( bf[1] == ' ' ){ // 未発送 + if( (bf[0] == 'J')||(bf[0] == ' ') ){ + sp->send = 0; + } + else { + sp->send = BYTE(tolower(bf[0])); + } + } + else { // 発送済み + sp->send = BYTE(toupper(bf[1])); + } + sp->recv = bf[2]; + if( sp->recv == ' ' ) sp->recv = 0; + GetData(itemhamlog5CODE, LPBYTE(bf), 6); clipsp(bf); + StrCopy(sp->opt1, bf, 6); + GetData(itemhamlog5GL, LPBYTE(bf), 6); clipsp(bf); + StrCopy(sp->opt2, bf, 6); + if( !sp->etime ) sp->etime = sp->btime; +} +//-------------------------------------------- +//データのエンコード +void CHamlog5::EncodeData(SDMMLOG *sp) +{ + char bf[1024]; + + int YY = sp->year; + int MM = sp->date / 100; + int DD = sp->date % 100; + int tim = sp->btime / 30; + int HH = tim / 60; + int mm = tim % 60; + switch(Log.m_LogSet.m_THTZ){ + case 0: + if( !IsJA(sp->call) ){ + JSTtoUTC(YY, MM, DD, HH); + mm |= 0x80; + } + break; + case 1: + JSTtoUTC(YY, MM, DD, HH); + mm |= 0x80; + break; + default: + break; + } + bf[0] = BYTE(YY > 50 ? 19 : 20); + bf[1] = BYTE(YY); + bf[2] = BYTE(MM); + bf[3] = BYTE(DD); + SetBinary(itemhamlog5DATE, LPBYTE(bf)); + bf[0] = BYTE(HH); + bf[1] = BYTE(mm); + SetBinary(itemhamlog5TIME, LPBYTE(bf)); + + SetData(itemhamlog5NAME, sp->name); + SetData(itemhamlog5CODE, sp->opt1); + SetData(itemhamlog5GL, sp->opt2); + SetData(itemhamlog5QTH, sp->qth); + strcpy(bf, Log.GetModeString(sp->mode)); + SetData(itemhamlog5MODE, bf); + strcpy(bf, Log.GetFreqString(sp->band, sp->fq)); + SetData(itemhamlog5FREQ, bf); + + SetData(itemhamlog5HIS, sp->ur); + SetData(itemhamlog5MY, sp->my); + + AnsiString REM1, REM2; + REM1 = sp->rem; + REM2 = sp->qsl; + int l = GetLMode(sp->mode); + if( sp->ur[l] ) AddMMLOGKey(REM1, REM2, &sp->ur[l], "SN"); + if( sp->my[l] ) AddMMLOGKey(REM1, REM2, &sp->my[l], "RN"); + + if( sp->etime ){ + tim = sp->etime / 30; + sprintf(bf, "%02u%02u", tim / 60, tim % 60); + AddMMLOGKey(REM1, REM2, bf, "END"); + } + if( sp->env ){ + sprintf(bf, "%u", sp->env); + AddMMLOGKey(REM1, REM2, bf, "ENV"); + } + AddMMLOGKey(REM1, REM2, sp->pow, "POW"); + if( sp->cq ){ + bf[0] = sp->cq; bf[1] = 0; + AddMMLOGKey(REM1, REM2, bf, "M"); + } + strcpy(bf, Log.GetOptStr(2, sp)); + char rbf[32]; + char qsl[3]; + if(RemoveL2(rbf, bf, "QSL", sizeof(rbf)-1) == TRUE){ + qsl[0] = rbf[0]; + qsl[1] = rbf[1]; + qsl[2] = rbf[2]; + } + else { + qsl[2] = sp->recv; + if( !qsl[2] ) qsl[2] = ' '; + if( sp->send == 'N' ){ + qsl[0] = 'N'; + qsl[1] = ' '; + } + else if( !sp->send ){ + qsl[0] = 'J'; + qsl[1] = ' '; + } + else if( (sp->send >= 0x60)||(sp->send == '?') ){ + qsl[0] = BYTE(toupper(sp->send)); + qsl[1] = ' '; + } + else if( isalpha(sp->send) ){ + qsl[0] = sp->send; + qsl[1] = '*'; + } + else { + qsl[0] = 'J'; + qsl[1] = sp->send; + } + } + SetData(itemhamlog5QSL, qsl); + SetData(itemhamlog5RMK1, REM1.c_str()); + SetData(itemhamlog5RMK2, REM2.c_str()); + + BOOL fJA = IsJA(sp->call); + USHORT usFlag = USHORT(fJA ? 0 : bithamlog5DX); + AnsiString Calls, Ign; + strcpy(bf, sp->call); + LPSTR pp, p2, t; + t = bf; + if( (pp = strchr(bf, '/')) != NULL ){ // KH6/JE3HHT or JE3HHT/KH6 の形式 + *pp = 0; + pp++; + int LenC = strlen(t); + int LenP = strlen(pp); + if( (p2 = strchr(pp, '/')) != NULL ){ // KH6/JE3HHT/P JE3HHT/QRP/3 + // t = KH6, pp = JE3HHT, p2 = P + *p2 = 0; p2++; + if( fJA ){ + Calls = t; + Ign = pp; + Ign += "/"; + Ign += p2; + } + else { + Calls = pp; + Ign = t; + Ign += "/"; + Ign += p2; + usFlag |= bithamlog5RevOdr; + } + } + else { + if( LenC < LenP ){ + Calls = pp; + Ign = t; + if( usFlag ) usFlag |= bithamlog5RevOdr; + } + else { + Calls = t; + Ign = pp; + if( usFlag ) usFlag |= bithamlog5NorOdr; + } + } + } + else { + Calls = sp->call; + } + SetBinary(itemhamlog5FLAG, LPBYTE(&usFlag)); + SetData(itemhamlog5CALLS, Calls.c_str()); + LPCSTR pCall = Calls.c_str(); + memset(bf, ' ', 12); bf[13] = 0; + l = strlen(pCall); + if( l > 8 ){ + pCall += 8; + l -= 8; + memcpy(bf, pCall, l); + } + l = strlen(Ign.c_str()); + if( l ){ + if( l > 12 ) l = 12; + memcpy(&bf[12 - l], Ign.c_str(), l); + } + SetData(itemhamlog5IGN, bf); +} + diff --git a/Hamlog5.h b/Hamlog5.h new file mode 100644 index 0000000..89fabf3 --- /dev/null +++ b/Hamlog5.h @@ -0,0 +1,119 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +#ifndef Hamlog5H +#define Hamlog5H + +// MMQSL用Hamlog Ver5のドライバ + +#include "ComLib.h" +#include "LogFile.h" +extern const LPCSTR g_Hamlog5Key[]; +extern const BYTE g_Hamlog5Len[]; + +typedef enum { + itemhamlog5CALLS, + itemhamlog5IGN, + itemhamlog5DATE, + itemhamlog5TIME, + itemhamlog5CODE, + itemhamlog5GL, + itemhamlog5QSL, + itemhamlog5FLAG, + itemhamlog5HIS, + itemhamlog5MY, + itemhamlog5FREQ, + itemhamlog5MODE, + itemhamlog5NAME, + itemhamlog5QTH, + itemhamlog5RMK1, + itemhamlog5RMK2, +}HAMLOG5_ITEMS; + +#define bithamlog5DX 8 +#define bithamlog5NorOdr 1 +#define bithamlog5RevOdr 2 + +#pragma pack(1) +typedef struct { + BYTE Type; + BYTE Year; + BYTE Mon; + BYTE Day; + ULONG RecMax; + USHORT FilOff; + USHORT RecWidth; + BYTE dm1[20]; +}hamlog5DBHD; +typedef struct { + char Name[11]; + BYTE Type; + BYTE dm1[4]; + BYTE Len; + BYTE dm2[15]; +}hamlog5DBRHD; +#pragma pack() + +#define HamlogDBMAX 16 +class CHamlog5 +{ +private: + BOOL m_fCreate; + hamlog5DBHD m_Head; // ヘッダ情報 + ULONG m_RecMax; // レコード数 + USHORT m_FilMax; // フィールド数 + USHORT m_RecWidth; // レコードの幅 + USHORT m_FilOff; // ヘッダオフセット + FILE *m_fp; + AnsiString m_StrTable[HamlogDBMAX]; // テーブル名の配列 + USHORT m_PosTable[HamlogDBMAX]; // フィールド位置の配列 + USHORT m_LenTable[HamlogDBMAX]; // フィールド長さの配列 + char m_TypeTable[HamlogDBMAX]; // 型情報の配列 + BOOL m_OpenFlag; // ファイルオープンフラグ + + ULONG m_Index; // シーク時のインデックス + ULONG m_Pos; // シーク時のファイル位置 + LPSTR m_bp; // バッファのポインタ + BOOL m_WriteFlag; // 書き込みフラグ + BOOL SetupHeader(void); // ヘッダセットアップ + BOOL MakeHeader(const LPCSTR _NT[], const BYTE _LT[]); +public: + CHamlog5(); + ~CHamlog5(); + BOOL Open(LPCSTR Name, BOOL fMsg); + BOOL Create(LPCSTR Name); + void Close(void); + inline ULONG GetRCount(void){return m_RecMax;}; + inline USHORT GetFCount(void){return m_FilMax;}; + AnsiString *GetStrBase(void){return m_StrTable;}; + BOOL Seek(ULONG Index); + BOOL IsData(void); + BOOL GetData(USHORT SubIndex, AnsiString &cs); + BOOL GetData(USHORT SubIndex, LPSTR pStore); + BOOL SetData(USHORT SubIndex, LPCSTR p); + BOOL SetBinary(USHORT SubIndex, LPBYTE p); + int GetData(USHORT SubIndex, LPBYTE pData, int len); + BOOL Update(void); + void DecodeData(SDMMLOG *sp); + void EncodeData(SDMMLOG *sp); +}; + +void __fastcall GetHamlog5FieldsLen(AnsiString &as); +void __fastcall SetHamlog5FieldsLen(AnsiString &as); +#endif diff --git a/HistView.cpp b/HistView.cpp new file mode 100644 index 0000000..eae8103 --- /dev/null +++ b/HistView.cpp @@ -0,0 +1,313 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "Main.h" +#include "HistView.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +//--------------------------------------------------------------------------- +__fastcall THistViewDlg::THistViewDlg(TComponent* Owner) + : TForm(Owner) +{ + for( int i = 0; i < AHDMAX; i++ ){ + pBitmapH[i] = NULL; + pPanel[i] = NULL; + pBox[i] = NULL; + } + pPopup = NULL; + m_Col = 6; + m_Line = 1; + m_RectS.Left = 0; + m_RectS.Top = 0; + m_RectS.Right = 80; + m_RectS.Bottom = 64; + m_Max = m_Col = m_Line = 0; + SetThumbnailSize(m_RectS, sys.m_HistViewSize); + m_DisEvent = 0; +} +//--------------------------------------------------------------------------- +__fastcall THistViewDlg::~THistViewDlg() +{ + for( int i = 0; i < AHDMAX; i++ ){ + if( pBitmapH[i] != NULL ){ + delete pBitmapH[i]; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::UpdateTitle(LPCSTR pTime) +{ + if( BorderStyle == bsNone ) return; + + LPCSTR pTTL; + + if( pTime != NULL ){ + pTTL = pTime; + } + else { + pTTL = MsgEng ? "Thumbnails of recent history" : "最近の履歴のサムネイル"; + } + Caption = pTTL; +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::UpdateTitlebar(void) +{ + if( m_TitleBar ){ + BorderStyle = bsSizeable; + } + else { + BorderStyle = bsNone; + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::FormResize(TObject *Sender) +{ + if( m_DisEvent ) return; + + int WW = m_RectS.Right + 6; + int HH = m_RectS.Bottom + 6; + if( BorderStyle == bsNone ){ + int ch = m_Line * HH; + int cw = m_Col * WW; + m_DisEvent++; + ClientHeight = ch; + ClientWidth = cw; + m_DisEvent--; + return; + } + int OldMax = m_Max; + int h = int((double(ClientHeight)/ HH) + 0.5); + if( !h ) h = 1; + int w = int((double(ClientWidth)/ WW) + 0.5); + if( !w ) w = 1; + while( (h * w) > AHDMAX ){ + if( w > 1 ){ + w--; + } + else if( h > 1 ){ + h--; + } + } + int ch = h * HH; + int cw = w * WW; + m_Col = w; + m_Line = h; + m_Max = h * w; + int i; + for( i = 0; i < m_Max; i++ ){ + if( pBitmapH[i] == NULL ){ + pBitmapH[i] = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmapH[i]); + } + pBitmapH[i]->Width = m_RectS.Right; + pBitmapH[i]->Height = m_RectS.Bottom; + if( pPanel[i] == NULL ){ + pPanel[i] = new TPanel(this); + InsertControl(pPanel[i]); + pPanel[i]->Parent = this; + pPanel[i]->Width = WW; + pPanel[i]->Height = HH; + pPanel[i]->BorderStyle = bsSingle; + pBox[i] = new TPaintBox(this); + pPanel[i]->InsertControl(pBox[i]); + pBox[i]->Parent = pPanel[i]; + pBox[i]->Align = alClient; + pBox[i]->OnPaint = PBPaint; + pBox[i]->OnMouseDown = PBMouseDown; + pBox[i]->OnMouseMove = PBMouseMove; + pBox[i]->OnDblClick = PBDblClick; + pBox[i]->PopupMenu = pPopup; + } + else { + pPanel[i]->Visible = FALSE; + pPanel[i]->Width = WW; + pPanel[i]->Height = HH; + } + MultProc(); + } + for( ; i < AHDMAX; i++ ){ + if( pBitmapH[i] != NULL ){ + delete pBitmapH[i]; + pBitmapH[i] = NULL; + } + if( pPanel[i] != NULL ){ + pPanel[i]->Visible = FALSE; + } + MultProc(); + } + m_DisEvent++; + ClientHeight = ch; + ClientWidth = cw; + for( i = 0; i < m_Max; i++ ){ + pPanel[i]->Left = (i % m_Col) * WW; + pPanel[i]->Top = (i / m_Col) * HH; + pPanel[i]->Visible = TRUE; + } + m_DisEvent--; + if( OldMax < m_Max ){ + LoadHist(OldMax); + } +} +//--------------------------------------------------------------------------- +int __fastcall THistViewDlg::IsPBox(TObject *Sender) +{ + for( int i = 0; i < m_Max; i++ ){ + if( Sender == pBox[i] ) return i; + } + return -1; +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::UpdateBitmap(void) +{ + for( int i = 0; i < m_Max; i++ ){ + pBox[i]->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::SetPopup(TPopupMenu *tp) +{ + pPopup = tp; + for( int i = 0; i < m_Max; i++ ){ + pBox[i]->PopupMenu = tp; + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::LoadHist(int b) +{ + if( !m_Max ) return; + CWaitCursor wait; + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + pBitmap->Width = 320; + pBitmap->Height = 256; + + int SaveCur = Mmsstv->RxHist.m_CurRead; + int n = (Mmsstv->RxHist.m_Head.m_wPnt - 1) - b; + int i; + for( i = b; (i < m_Max) && (i < Mmsstv->RxHist.m_Head.m_Cnt); i++, n-- ){ + if( n < 0 ) n += Mmsstv->RxHist.m_Head.m_Max; + if( n >= Mmsstv->RxHist.m_Head.m_Max ) n -= Mmsstv->RxHist.m_Head.m_Max; + Mmsstv->RxHist.Read(pBitmap, n); + ::SetStretchBltMode(pBitmapH[i]->Canvas->Handle, HALFTONE); + pBitmapH[i]->Canvas->StretchDraw(m_RectS, pBitmap); + MultProc(); + } + for( ; i < m_Max; i++ ){ + FillBitmap(pBitmapH[i], clWhite); + MultProc(); + } + Mmsstv->RxHist.m_CurRead = SaveCur; + delete pBitmap; + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::Add(Graphics::TBitmap *pBitmap) +{ + for( int i = m_Max-1; i; i-- ){ + pBitmapH[i]->Assign(pBitmapH[i-1]); + } + ::SetStretchBltMode(pBitmapH[0]->Canvas->Handle, HALFTONE); + pBitmapH[0]->Canvas->StretchDraw(m_RectS, pBitmap); + UpdateBitmap(); +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::PBPaint(TObject *Sender) +{ + int r = IsPBox(Sender); + if( r >= 0 ){ + pBox[r]->Canvas->Draw(0, 0, pBitmapH[r]); + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::PBClick(int n) +{ + if( n < Mmsstv->RxHist.m_Head.m_Cnt ){ + if( Mmsstv->UDHist->Position != SHORT(n) ){ + Mmsstv->UDHist->Position = SHORT(n); + Mmsstv->UpdateHist(); + } + else { + Mmsstv->DispHistStat(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::PBDblClick(TObject *Sender) +{ + Mmsstv->AdjustPage(pgHist); +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::PBMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ +// if( Mmsstv->SBTX->Down ) return; + + int r = IsPBox(Sender); + if( r >= 0 ){ + PBClick(r); + m_XX = X; + m_YY = Y; +// if( Button == mbLeft ){ +// ((TPaintBox *)Sender)->BeginDrag(TRUE); +// } + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::PBMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + TShiftState sc1, sc2; + sc1 << ssLeft; + sc2 << ssLeft; + sc1 *= Shift; + if( sc1 == sc2 ){ // Left button + if( (ABS(m_XX-X) + ABS(m_YY-Y)) >= 10 ){ + ((TPaintBox *)Sender)->BeginDrag(TRUE,0); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::FormClose(TObject *Sender, + TCloseAction &Action) +{ + Mmsstv->m_FileViewClose = 1; +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + Mmsstv->FormKeyDown(Sender, Key, Shift); +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::FormKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + Mmsstv->FormKeyUp(Sender, Key, Shift); +} +//--------------------------------------------------------------------------- +void __fastcall THistViewDlg::FormDeactivate(TObject *Sender) +{ + UpdateTitle(NULL); +} +//--------------------------------------------------------------------------- + diff --git a/HistView.dfm b/HistView.dfm new file mode 100644 index 0000000000000000000000000000000000000000..eabc20c58b1eb364756e7dd3c8e381a46a946e6f GIT binary patch literal 493 zcmYjONpiw45EM%gUIIKJFG%qPFgSJs*o6!n6JrmcDp{grvE>M-yfE*`3ld?IN^adV zqwbm3w}~RpC(+y=E(W6~)a`s$5Q;*#Yeyc<)ttg%z}D73Tpz(o)vQV_65HAbGJ88E zNFoJeO{*_t3erym&n?|M7;zBO-%knZQ6^J@9u#ldUS%I;&%880k0oR9`FK`Ma>~$PQD`2T3 zAyyDvuQkk2Qm#l6Gr*0lm literal 0 HcmV?d00001 diff --git a/HistView.h b/HistView.h new file mode 100644 index 0000000..123af6e --- /dev/null +++ b/HistView.h @@ -0,0 +1,93 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef HistViewH +#define HistViewH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class THistViewDlg : public TForm +{ +__published: // IDE 管理のコンポーネント + void __fastcall FormResize(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall FormKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall FormDeactivate(TObject *Sender); +private: // ユーザー宣言 +#define AHDMAX 64 + Graphics::TBitmap *pBitmapH[AHDMAX]; + TPanel *pPanel[AHDMAX]; + TPaintBox *pBox[AHDMAX]; + TPopupMenu *pPopup; + + TRect m_RectS; + + int m_Max; + int m_Col; + int m_Line; + int m_DisEvent; + + int m_XX; + int m_YY; + + void __fastcall PBClick(int n); + void __fastcall PBPaint(TObject *Sender); + void __fastcall PBMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y); + void __fastcall PBDblClick(TObject *Sender); + + +public: // ユーザー宣言 + __fastcall THistViewDlg(TComponent* Owner); + __fastcall ~THistViewDlg(); + + int m_TitleBar; + void __fastcall LoadHist(int b); + void __fastcall Add(Graphics::TBitmap *pBitmap); + void __fastcall GetViewPos(int &x, int &y, int &w, int &h){ + x = Left; + y = Top; + w = ClientWidth; + h = ClientHeight; + }; + void __fastcall SetViewPos(int x, int y, int w, int h){ + Left = x; + Top = y; + ClientWidth = w; + ClientHeight = h; + }; + void __fastcall UpdateBitmap(void); + int __fastcall IsPBox(TObject *Sender); + void __fastcall SetPopup(TPopupMenu *tp); + void __fastcall UpdateTitlebar(void); + void __fastcall UpdateTitle(LPCSTR pTime); +}; +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +#endif diff --git a/History/History.bin b/History/History.bin new file mode 100644 index 0000000000000000000000000000000000000000..70a731cc3476e106ea5a7ad3662dc3a5d1070248 GIT binary patch literal 5136 xcmeIu0SN#A2*9vMv42X. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "InputWin.h" +#include "MacroKey.h" +#include "ComLib.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TInputWinDlg::TInputWinDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + CancelBtn->Caption = "Cancel"; + BMac->Caption = "Macro"; + } +} +//--------------------------------------------------------------------- +int InputMB(LPCSTR pTitle, LPCSTR pMsg, AnsiString &as, BOOL fMac) +{ + TForm *fp; + if( Screen->ActiveForm != NULL ){ + fp = Screen->ActiveForm; + } + else if( Application->MainForm != NULL ){ + fp = Application->MainForm; + } + else { + fp = NULL; + } + + TInputWinDlg *pBox = new TInputWinDlg(fp); + pBox->BMac->Visible = fMac; + pBox->LMsg->Caption = pMsg; + pBox->Caption = pTitle ? pTitle : "MMSSTV"; + pBox->Edit->Text = as.c_str(); + int r = FALSE; + if( pBox->ShowModal() == IDOK ){ + as = pBox->Edit->Text.c_str(); + r = TRUE; + } + delete pBox; + return r; +} +//--------------------------------------------------------------------- +int InputMB(LPCSTR pTitle, LPCSTR pMsg, AnsiString &as) +{ + return InputMB(pTitle, pMsg, as, FALSE); +} +//--------------------------------------------------------------------- +void __fastcall TInputWinDlg::BMacClick(TObject *Sender) +{ + TMacroKeyDlg *pBox = new TMacroKeyDlg(this); + AnsiString as = Edit->Text; + if( pBox->Execute(as) > 0 ){ + HWND hWnd; + Edit->SetFocus(); + Edit->SelStart = strlen(AnsiString(Edit->Text).c_str()); //ja7ude 0428 + Edit->SelLength = 0; + hWnd = Edit->Handle; + for( LPCSTR p = as.c_str(); *p; p++ ){ + ::PostMessage(hWnd, WM_CHAR, *p, 0); + } + } + delete pBox; +} +//--------------------------------------------------------------------------- + diff --git a/InputWin.dfm b/InputWin.dfm new file mode 100644 index 0000000000000000000000000000000000000000..fec9fcc45638a309fa28736f975739ce2f7f94ec GIT binary patch literal 761 zcmZWn%Z}496m^m|kERTzJ67-mjDq+AnoeoxE1DQ87ChYKPHT;^qr}w=8zfeI0}H-^ z4H6%~H?U>H8nI#>9H$Qu8_QR|=bp!P)j>F#$4~Gwnh&RsP|*8fB81~n(8UqYw{l7O zkgff{?yV_YNb5JUu*l8AABZA@B9U(xIPR((Qo_W#8!`%9j)AT>(t3ydre4xaZmjo4 zI}}V5j+e55n|7Jl&YDI<=&om|MukQ?dfqn$F6# z&dluV$ZocE45n-ETb+>PHMMOJgd9BBN-21IF;U?(z~>tHYzKU?2i`dV&BeqS!Ufqf z>G?B}5q1uxDon%0WThRN#&Nb65}raGezVMP%`*Qdu$xA2Ptg@9X0L literal 0 HcmV?d00001 diff --git a/InputWin.h b/InputWin.h new file mode 100644 index 0000000..4b6b3fa --- /dev/null +++ b/InputWin.h @@ -0,0 +1,52 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef InputWinH +#define InputWinH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TInputWinDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TEdit *Edit; + TLabel *LMsg; + TButton *BMac; + void __fastcall BMacClick(TObject *Sender); +private: +public: + virtual __fastcall TInputWinDlg(TComponent* AOwner); +}; +int InputMB(LPCSTR pTitle, LPCSTR pMsg, AnsiString &as, BOOL fMac); +int InputMB(LPCSTR pTitle, LPCSTR pMsg, AnsiString &as); +//---------------------------------------------------------------------------- +#endif + diff --git a/JASTA.txt b/JASTA.txt new file mode 100644 index 0000000..9001ded --- /dev/null +++ b/JASTA.txt @@ -0,0 +1,219 @@ +***** The 2010 JASTA SSTV Activity Contest Rules***** + + http://homepage3.nifty.com/jasta/english/index.html + +1.Contest periods +~~~~~~~~~~~~~~~~~~ + From August 1st 2010 (00:00 UTC) to August 31 (24:00 UTC) + +2.Bands +~~~~~~~~ + 3.5MHz and all upper bands.Use Only frequencies which are authorized by each individual station license. + +3.Categories of Entry +~~~~~~~~~~~~~~~~~~~~~ +a) "J" Category (Japanese only): Japanese domestic stations + +b) "S" Category(DX station): All stations operating outside of Japan. If a Japanese station operates outside Japan, this will be considered a DX contact. + +4.QSO Point +~~~~~~~~~~~~~ + Exchange the usual RSV plus a progressive QSO number starting with 001 which should be displayed in the picture exchange. Regardless of bands used, a station may only be worked once each UTC day . + If possible, during the exchange, include one's own face picture or some kind of illustration. QSO points authorized by bands. + + 3.5-28MHz ... 1 point + 50-430MHz ... 2 points + 1200MHz & upper ... 3 points + +5.Multipliers +~~~~~~~~~~~~ + Work all Japanese callsign districts(JA1-JA0 total 10) + DXCC Countries worked. Use DXCC List. Do not count Japan as a DXCC country + Number of days on the air. (10 days at the maximum even if a station operates more than 10 days) + +note:Prefix 7K-7N's are all JA1 area + +6.Scoring +~~~~~~~~~ + The final score is computed by multiplying the sum of the QSO points by the sum of multipliers as described in Paragraph 5. + +7.Contest awards +~~~~~~~~~~~~~~~~~ +1) A shield award will be sent to the 1st, the 2nd and the 3rd Score of each sections. But when the number of stations are less than 10, awards will be sent to the 1st place winner only. + +2) A special activity award will be sent to some of the stations who work over 10 days by lot. + (A JASTA T-shirts to 20 stations) + +3) New face certificate will be sent to the 1st of new comers. so please annotate your summary sheets "new Comer" on summary sheets. + +4) YL certificate will be sent to the 1st place YL stations. + +8.Logs +~~~~~~~ + Summary sheets and Log sheets should be arranged and mailed to the Contest manager. Email contest Summary sheet and logs to: JASTA Contest Secretary ja3wzt@mue.biglobe.ne.jp The log should be in a text file format. Email (text format) summary. E-Mail logs are acceptable now. Both Summary and logs should be forwarded to ja3wzt@mue.biglobe.ne.jp Assure you station callsign is in the e-mail subject line. + +* DX stations, "CQ WW" contest format is acceptable. Please enclose SASE and 1 IRC for reply. The log in a text file by Email is also acceptable now. + +9.Deadline for log entries +~~~~~~~~~~~~~~~~~~~~~~~~~ + Log entries with a stamp of a local POST office dated not later than September 30, 2010.(UTC) In case of Email, it must be received by the same above deadline.(UTC) + +10.Regulations +~~~~~~~~~~~~~~ +1) All Amateur Radio stations who has a license to transmit SSTV signal. + +2) Output power: Up to maximum power officially authorized by the operators class license . + +3) Both B/W and Color Picture QSO are accepted. + +4) A contest QSO should be one station to one station QSO. Round table style QSO’s between multiple stations will not be counted. + +5) Cross band QSO will not be counted as a contest QSO. + +6) All the QSO; JA to JA station, JA to DX station, DX to DX station will be counted and accepted as contest QSOs. + +11.JASTA Contest Results +~~~~~~~~~~~~~~~~~~~~~~~~~~ + The contest results will be sent to all stations who include a SASE. Aditionally announcement will be made on JASTA homepage and Japanese "CQ ham radio" magazine . + +12.The Contest Manager and Mailing Address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +JASTA Contest Secretariat Email:ja3wzt@mue.biglobe.ne.jp +c/o YOSHIKAZU TANABE JA3WZT/1 +905-8,SHIMOTANIGANUKI,IRUMA,SAITAMA,358 JAPAN + +%%%Japanese ========================================== + JASTA主催SSTVアクティビティコンテスト (2010) + + http://homepage3.nifty.com/jasta/ + +期間 +~~~~~ + 国際標準時間の8月1日(日)0時 〜 8月31日(火)24時 + (日本時間 8月1日 9時 〜 9月1日 9時まで) + +参加資格 +~~~~~~~~~ + アマチュア無線の資格を持ち、SSTVの免許を受けている局。 + +運用周波数 +~~~~~~~~~~~~ + 3.5MHz帯以上で自局に免許された周波数帯 + (電波法および郵政省令に定められた周波数帯で運用)。 + +空中線電力 +~~~~~~~~~~~~ + 免許された電力の範囲内 + +コンテストナンバー +~~~~~~~~~~~~~~~~~~ + RSV+001から始まる連番。連番の桁が足りなくなったら桁を増やしてください。 + + 例えば信号レポートが595で、期間中20局目のQSOであれば、コンテストナンバーは「595020」。 + +ポイント +~~~~~~~ + 可能なかぎり、自分の顔が写っている画像(手描きのイラストも可)に自局のコールサインとコンテストナンバーを入れて送信する。完全なコンテストナンバー交換をもって下記に示すポイント点とする。画像の白黒、カラーは問わない。コンテストでのQSOは、相手局と1対1とし、ラウンドQSOは認めない。海外局との交信もポイントとして認める。なお、同一局との交信は周波数にかかわらず一日一回のみ有効。 + + 注意:同一日は、国際標準時間を基準として判定すること。時差の異なる海外局とのQSOにおいて、日本時間で日付が変っていても国際標準時間で同一であればポイントとして認めない。 + + (1)3.5〜28MHz帯 :1点 (7MHz帯は7.1MHz以上の周波数での交信を推奨します) + (2)50〜430MHz帯 :2点 + (3)1200MHz帯以上 :3点 + +マルチ +~~~~~~ + バンドに関係なく以下の項目をマルチとして計上できる。 + + (1)JAのエリア(10エリア) + (2)JAを除くDXCCエンティティ +    ・JDはDXCCのエンティティとしカウントする +    ・ DXCCエンティティ内のエリアはマルチとしてカウント出来ません。 + (3)運用日数 +    1日の運用は1マルチとし最大10マルチ(10日以上の運用をしても10とする)。 + +総得点 +~~~~~~~ +  (ポイントの和)×(マルチの和)。 + + 例えば、14MHz帯で15局、50MHz帯で8局、430MHz帯で7局、1200MHz帯で5局のコンテストナンバ交換した場合、交信ポイントは + 15×1+(8+7)×2+5×3=60となる。 + + さらにマルチがJAの10エリア、DXCC 5エンティティ、運用日数12日の場合、総得点は + 60×(10+5+10)=1500となる。 + +エントリー部門 +~~~~~~~~~~~~~~ + 国内部門(J部門):日本国内からのエントリー局 + 海外部門(S部門):海外からのエントリー局(日本の局が海外カントリーから運用した場合この部門となる。) + + 今回のコンテストで初めてサマリーを提出し初参加か否かの区別およびOM、YL(XYL)の区別も記入願います。 + +賞 +~~~ + 各部門、上位3位までに楯を送る。各部門参加局が10局に満たない場合は、1位にのみ楯を送る。 + またニューフェース賞を、今回のコンテストが初参加の申告があった局の中から、得点が1位の局に送る。 + さらにYL(XYL)のエントリがあった場合、その中で得点が1位の局にベストYL(XYL)賞を送る。 + 運用日数が10日以上の局にはアクティビティ賞として、抽選で20名にJASTA特性の + + T−シャツ(提出するサマリシートにJASTA特性T-シャツのサイズを記入願います。なお記入のない場合はLサイズとさせていただきます)を送る。 + なお、同一オペレータが、DXペディション等、国外で運用した場合は、国内コールでの運用日数と国外コールでの運用日数を合算できる。たとえば、国内運用7日、DXペディ運用4日とすれば、合計11日となり、アクテイブ賞対象となる。 + + +ログの提出 +~~~~~~~~~~~ + ログは、以下の2方法のどちらかで提出してください。両方での提出は、混乱の原因になりますので絶対にしないようにお願いします。 + + (1)郵送の場合 + JARLのコンテストサマリーまたは、JASTAが定めた書式のフォーマットで記入したサマリー、およびマルチに計上する 交信のログを下記の提出先にSASE(定形の封筒に80円切手をはり、宛先を明記した封筒を同封する)にて郵送する + (結果の送付を必要としない場合は、SASEにする必要はない。) + + (2)e−mailで送付する場合 + JASATが定めた書式のフォーマットで記入したサマリーおよびマルチに計上する交信のログを、下記のアドレスにe−mailで送付する。 + e−mailで受付けた場合は、メールを受領した事を示す返信を事務局より送信します。2週間たっても受領確認のメールが来ない場合は再送信してください。 + + コンテストルール違反、サマリシート記入不備の場合は書類不備をして扱います。 + サマリーシートの参加部門欄に、エントリー部門(J、またはS)、今回のコンテストが初参加か否かの区分、およびOM,YL(XYL)の区別を明記のこと。 + + JARLのコンテストサマリーに記入する場合、JAのエリア、DXCCカントリーのマルチは合計して、バンドの欄に「エリア+DXCC]と追記しマルチプライヤーの欄に記入して下さい。また運用日数のマルチについては、バンドの欄に「運用日数」と追記し、マルチプライヤーの欄にコンテストで運用した日数を記入して下さい。 + + JASTAが定める書式については、JASTA事務局のホームページ(http://homepage3.nifty.com/jasta/)で準備します。ダウンロードしてそれに記入してください。 + +ログの締切 +~~~~~~~~~~~ + 2010年9月30日消印またはタイムスタンプ有効。これ以降は無効。 + +ログの提出先 +~~~~~~~~~~~~~~ + (1)郵送の場合 +    〒358−0041 埼玉県入間市下谷ケ貫905−8 +    田辺 義和方 日本アマチュアSSTV協会 コンテスト事務局 + + (2)e−mailで送付する場合 +    ja3wzt@mue.biglobe.ne.jp + +注意点 +~~~~~~~ + ・相手局を呼び出すときは、先に音声で呼び出し、応答を確認してから画像を送信するようにしてください。 +  いきなり画像で呼び出すようなことは避けてください。 + + ・CQを送信する際は十分にワッチし、音声で周波数が使われていない事を確認してから送信してください。 + ・同一局との交信はHF、VHFを問わず1日1回のポイントしか認めない。クロスバンドによる交信は認めない。 + ・同一日は国際標準時間で定義する。 + ・同時に2波以上の電波の発射によるものはポイントとしない。 + ・ラウンドQSOを認めないので、実質少ないチャネルしか使用できない周波数帯では、長時間周波数を占有しないように運用して下さい。 + ・バンドプランを遵守し、各局の自主的な判断で多くの局にチャンスが得られるように運用を心掛けてください。 + ・コンテスト中、「自分の自画像」を送らない局との交信も得点として認めますが、可能な限り自画像を入れた画像で交信してください。 + ・参加者のみなさんの良識で、サマリシートの提出を、お願いします。 + ・サマリシートの内容が、不明な場合等にはログの提出を求めることがあります。 + +結果発表 +~~~~~~~~~ + ログをSASEにて送付された局には郵送で通知。 + その他、JASTA事務局のホームページ、CQ誌等に結果を掲載。 + +その他 +~~~~~~~ + ・送信画像にJASATのロゴマークを貼り付けて使用できるよう、JASTA事務局のホームページ上にロゴマークを置きますので、ダウンロードし積極的にご活用ください。 + ・特定局だけとのナンバー交換を避けて多くの局との交信を、また1日でも多くの運用を楽しんでください。 + +上記の通りコンテストを実施いたしますので、奮ってご参加下さい。 + JASTAコンテスト事務局 diff --git a/JASTA/ARRL.DX b/JASTA/ARRL.DX new file mode 100644 index 0000000..4bbc512 --- /dev/null +++ b/JASTA/ARRL.DX @@ -0,0 +1,423 @@ +! ARRL DXCC COUNTRIES LIST For MMLOG +! +AP ;AP-AS,6P-6S ;PAKISTAN ;AS ;E +!A1 ;A1 ;ABU AIL ;AS +A2 ;A2,8O ;BOTSWANA ;AF ;B +A3 ;A3 ;TONGA ;OC ;N +A4 ;A4 ;OMAN ;AS ;D +A5 ;A5 ;BHUTAN ;AS ;F +A6 ;A6 ;UNITED ARAB ;AS ;D +A7 ;A7 ;QATAR ;AS ;C +A9 ;A9 ;BAHRAIN ;AS ;C +BV9P ;BV9P\,BQ9P\ ;PRATAS IS. ;AS ;H +BV ;BV,BX ;TAIWAN ;AS ;H +BS7 ;BS7H\ ;SCARBOROUGH REEF ;AS ;H +BY ;BA-BZ,3H-3U,B1-B9 ;CHINA ;AS ;H +CE0X ;CE0X,XQ0X-XR0X,CE0AA ;SAN FELIX IS. ;SA ;R +CE0Z ;CE0Z,CE0I,CE0OGZ,XQ0Z-XR0Z,XQ0I-XR0I,CE0/JA7XYE; FERNANDEZ ;SA ;R +CE0 ;CE0,XQ0-XR0 ;EASTER IS. ;SA ;T +CE ;CA-CE,XQ-XR,3G ;CHILE ;SA ;Q +CM ;CL-CM,CO,T4 ;CUBA ;NA ;R +CN ;CN,5C-5G ;MOROCCO ;AF ;Z +CP ;CP ;BOLIVIA ;SA ;Q +CT3 ;CS3,CT3,CR9 ;MADEIRAI IS.(PORTUGAL) ;AF ;Z +CU ;CU ;AZORES IS.(PORTUGAL) ;EU ;Z +CT ;CQ-CU ;PORTUGAL ;EU ;Z +CY9 ;CY9,CY0SPI ;ST PAUL IS. ;NA ;Q +CY0 ;CY0 ;SABLE IS. ;NA ;Q +CX ;CV-CX ;URUGUAY ;SA ;P +C2 ;C2 ;NAURU ;OC ;M +C3 ;C3 ;ANDORRA ;EU ;A +C5 ;C5 ;THE GAMBIA ;AF ;Z +C6 ;C6 ;BAHAMA IS. ;NA ;R +C8 ;C8-C9 ;MOZAMBIQUE ;AF ;B +DL ;DA-DR,Y2-Y9 ;GERMANY ;EU ;A +DU ;DU-DZ,4D-4I ;PHILIPPINES ;OC ;H +D2 ;D2-D3 ;ANGOLA ;AF ;A +D4 ;D4 ;CAPE VERDE ;AF ;A +D6 ;D6 ;COMOROS ;AF ;C +EA6 ;EA6-EH6,AM6-AO6 ;BALEARIC ;EU ;A +EA8 ;EA8-EH8,AM8-AO8 ;CANARY ;AF ;A +EA9 ;EA9-EH9,AM9-AO9 ;CEUTA & MELILLA(SPAIN) ;AF ;A +EA ;EA-EH,AM-AO ;SPAIN ;EU ;A +EI ;EI-EJ ;IRELAND ;EU ;Z +EK ;EK ;ARMENIA (ex UG) ;AS ;D +EL ;EL,5L-5M,A8,D5,6Z ;LIBERIA ;AF ;Z +EP ;EP-EQ,HN,9B-9D ;IRAN ;AS ;c +ER ;ER ;MOLDOVA (ex UO) ;EU ;C +ES ;ES ;ESTONIA ;EU ;C +ET ;ET,9E-9F ;ETHIOPIA ;AF ;C +EU ;EU-EW ;BELARUS (ex UC) ;EU ;C +EX ;EX ;KYRGYZSTAN (ex UM) ;AS ;F +EY ;EY ;TAJIKISTAN (ex UJ) ;AS ;F +EZ ;EZ ;TURKMENISTAN (ex UH) ;AS ;F +E4 ;E4 ;PALESTINE ;AS ;B +E3 ;E3 ;ERITREA ;AF ;C +FG ;FG ;GUADELOUPE ;NA ;Q +FH ;FH ;MAYOTTE ;AF ;C +FJ ;FJ,FS ;SAINT MARTIN ;NA ;Q +FK ;FK,TX8 ;NEW CALEDONIA ;OC ;L +FM ;FM ;MARTINIQUE ;NA ;Q +FO/C ;FO0X,FO0AAA ;CLIPPERTON IS. ;NA ;T +FO ;FO ;FRENCH POLYNESIA ;OC ;W +FO/A ;FO ;AUSTRAL IS ;OC ;W +FO/M ;FO ;MARQUESAS IS ;OC ;W +FP ;FP ;ST.PIERRE & MIQUELON IS. ;NA ;Q +FR/J ;FR*/J,FR*/E ;JUAN DE NOVA & EUROPA IS. ;AF ;C +FR/G ;FR*/G ;GLORIOSO IS. ;AF ;C +FR/T ;FR*/T ;TROMELIN ;AF ;C +FR ; ;REUNION IS. ;AF ;C +FR/? ;FR ;REUNION IS. /GLORIOSO IS. /JUAN DE NOVA & EUROPA ;AF ;C +FT5W ;FT8W,FT2W,FT4W,FT5W,FT0W ;CROZET IS. ;AF ;C +FT5X ;FT8X,FT2X,FT4X,FT5X,FT0X ;KERGUELEN IS. ;AF ;E +FT5Z ;FT8Z,FT2Z,FT4Z,FT5Z,FT0Z ;AMSTERDAM & ST PAUL IS. ;AF ;E +FW ;FW ;WALLIS & FUTUNA IS. ;OC ;M +FY ;FY ;FRENCH GUIANA ;SA ;P +F ;F,HW-HY,TM,TO-TQ ;FRANCE ;EU ;A +GD ;GD,GT,MA6-MB6,2A6,MD ;ISLE OF MAN ;EU ;Z +GI ;GI,GN,MA5-MB5,2A5,MI ;NORTHERN IRELAND ;EU ;Z +GJ ;GH,GJ,MA7-MB7,2A7,MJ ;JERSEY ;EU ;Z +GM ;GM,GS,MA3-MB3,2A3,MM ;SCOTLAND ;EU ;Z +GU ;GU,GP,MA8-MB8,2A8,MG ;GUERNSEY ;EU ;Z +GW ;GW,GC,MA4-MB4,2A4,MW ;WALES,U.K ;EU ;Z +G ;G,2,M ;ENGLAND(U.K) ;EU ;Z +HA ;HA,HG ;HUNGARY ;EU ;A +HB0 ;HB0,HE0 ;LIECHTENSTEIN ;EU ;A +HB ;HB,HE,4U1VIC ;SWITZERLAND ;EU ;A +HC8 ;HC8-HD8 ;GALAPAGOS IS.(ECUADOR) ;SA ;R +HC ;HC,HD ;ECUADOR ;SA ;R +HH ;HH,4V ;HAITI ;NA ;R +HI ;HI ;DOMINICAN REPUBLIC ;NA ;R +HK0/M ;HK0M,5J0M,HK0TU ;MALPELO IS. ;NA ;R +HK0/A ;HK0,5J0 ;SAN ANDRES ;NA ;R +HK ;HJ-HK,5J-5K ;COLOMBIA ;SA ;R +HL ;HL,DS-DT,6K-6N,D7-D9,KL9 ;REPUBLIC OF KOREA (SOUTH KOREA) ;AS ;I +HP ;HO-HP,3E-3F,H3,H8-H9 ;PANAMA ;NA ;R +HR ;HQ-HR ;HONDURAS ;NA ;S +HS ;HS,E2 ;THAILAND ;AS ;G +HV ;HV ;VATICAN ;EU ;A +HZ ;HZ,7Z-8Z ;SAUDI ARABIA ;AS ;C +H40 ;H40 ;TEMOTU IS ;OC ;L +H4 ;H4 ;SOLOMON IS. ;OC ;L +IS ;IS,IM0,IU0 ;SARDINIA ;EU ;A +I ;I ;ITALY ;EU ;A +JD1/M ;JD1YAA,JD1BIY ;MINAMI TORISHIMA ;OC ;I +JD1 ;JD1BIC ;OGASAWARA ;AS ;I +JD1/? ;JD1 ;OGASAWARA, /MINAMI TORISHIMA ;I +JA ;JA-JS,7J-7N,8J-8N ;JAPAN ;AS ;I +JT ;JT-JV ;MONGOLIA ;AS ;H +JW ;JW ;SVALBARD IS. ;EU ;A +JX ;JX ;JA MAYEN IS. ;EU ;Z +JY ;JY ;JORDAN ;AS ;B +J2 ;J2 ;DJIBOUTI ;AF ;C +J3 ;J3 ;GRENADA ;NA ;Q +J5 ;J5 ;GUINEA-BISSAU ;AF ;Z +J6 ;J6 ;ST LUCIA ;NA ;Q +J7 ;J7 ;DOMINICA ;NA ;Q +J8 ;J8 ;ST VINCENT & DEPENDENCIES ;NA ;Q +KC4 ;8J1R?\,R1A,FB8Y,CE9A,ZL5,Y88,Y90ANT,ZS8BBB,ZS8AAA,KC4AAC,KC4USV,Y73SOP,KC4AAA,KC4USB,KC4USX,3G9A,3Y9WT,8J1RY,AT0A,IA0PS,OR4,XS7ANT,Y83ANT,ZL0AIC,ZS7ANT,VK0DS,KC4AAE ;ANTARCTICA ;AN +KC6 ;T8,KC6??\ ;(WESTERN CAROLINE IS.) BELAU ;OC ;I +KG4 ;KG4??\ ;GUANTANAMO BAY ;NA ;R +KH0 ;AH0,KH0,NH0,WH0 ;MARIANA IS. ;OC ;K +KH1 ;AH1,KH1,NH1,WH1 ;BAKER & HOWLAND IS. ;OC ;X +KH2 ;AH2,KH2,NH2,WH2 ;GUAM ;OC ;K +KH3 ;AH3,KH3,NH3,WH3 ;JOHNSTON IS. ;OC ;X +KH4 ;AH4,KH4,NH4,WH4 ;MIDWAY IS. ;OC ;M +KH5K ;AH5K,KH5K,NH5K,WH5K ;KINGMAN REEF ;OC ;W +KH5 ;AH5,KH5,NH5,WH5 ;PALMYRA & JARVIS ;OC ;W +KH7K ;AH7K,KH7K,NH7K,WH7K ;KURE IS. ;OC ;M +KH6 ;AH6-AH7,KH6-KH7,NH6-NH7,WH6-WH7 ;HAWAIIAN IS. ;OC ;W +KH8 ;AH8,KH8,NH8,WH8 ;AMERICAN SAMOA ;OC ;W +KH9 ;AH9,KH9,NH9,WH9 ;WAKE IS. ;OC ;L +KL7 ;AL,KL0-KL8,NL,WL ;ALASKA ;NA ;W +KP1 ;KP1,NP1,WP1 ;NAVASSA IS. ;NA ;Q +KP2 ;KP2,NP2,WP2 ;AM.VIRGIN IS. ;NA ;Q +KP4 ;KP3-KP4,NP3-NP4,WP3-WP4 ;PUERTO RICO ;NA ;Q +KP5 ;KP5,NP5,WP5 ;DESECHEO IS. ;NA ;Q +W ;AA6-AK6,K6,N6,W6,K?6,N?6,W?6 ;U.S.A. ;NA ;U +W ;AA7-AK7,K7,N7,W7,K?7,N?7,W?7 ;U.S.A. ;NA ;T +W ;AA0-AK0,K0,N0,W0,K?0,N?0,W?0,AA5-AK5,K5,N5,W5,K?5,N?5,W?5,AA9-AK9,K9,N9,W9,K?9,N?9,W?9 ;U.S.A. ;NA ;S +W ;AA-AL,K,N,W,4U1WB ;U.S.A. ;NA ;R +LA ;LA-LN ;NORWAY ;EU ;A +LU ;LO-LW,AY-AZ,L2-L9 ;ARGENTINA ;SA ;P +LX ;LX ;LUXEMBOURG ;EU ;A +LY ;LY ;LITHUANIA ;EU ;C +LZ ;LZ ;BULGARIA ;EU ;B +OA ;OA-OC,4T ;PERU ;SA ;R +OD ;OD ;LEBANON ;AS ;B +OE ;OE ;AUSTRIA ;EU ;A +OH0 ;OH0,OF0 ;ALAND IS. ;EU ;B +OJ0 ;OJ0 ;MARKET REEF ;EU ;B +OH ;OF-OJ ;FINLAND ;EU ;B +OK ;OK-OL ;CZECH REPUBLIC ;EU ;A +OM ;OM ;SLOVAK REPUBLIC ;EU ;A +ON ;ON-OT ;BELGIUM ;EU ;A +OX ;OX ;GREENLAND ;NA ;Q +OY ;OY ;FAROES ;EU ;Z +OZ ;OU-OZ,XP,5P-5Q ;DENMARK ;EU ;A +PJ8 ;PJ5-PJ8,PJ0J,PJ1F ;SINT MAARTEN ;NA ;Q +PJ9 ;PJ ;NETHERLANDS ANTILLES ;SA ;Q +PA ;PA-PI ;NETHERLANDS ;EU ;A +PY0/S ;PP0S-PY0S,ZV0S-ZZ0S,PY0DX,PT0MI,PS0WH-PT0WH,PY0RO,PW0PP,PP0ZS-PY0ZS ;ST PETER ;SA ;P +PY0/T ;PP0T-PY0T,ZV0T-ZZ0T ;TRINDADE ;SA ;P +PY0 ;PP0-PY0,ZV0-ZZ0 ;FERNANDO DE NORONHA ;SA ;P +PY ;PP-PY,ZV-ZZ ;BRAZIL ;SA ;P +PZ ;PZ ;SURINAM ;SA ;Q +P2 ;P2 ;PAPUA NEW GUINEA ;OC ;K +P4 ;P4 ;ARUBA ;SA ;Q +P5 ;P5-P9,HM ;NORTH KOREA (DPRK) ;AS ;I +R1/MVI ;4J1FS,R1M,*/MVI,MVI/* ;MALYJ VYSOTSKIJ IS. (ex 4J1) ;EU ;C +R1/FJL ;R1F,*/FJL,FJL/* ;FRANZ JOSEPH LAND (ex UA1/4K2) ;EU ;C +SM ;SA-SM,7S-8S ;SWEDEN ;EU ;A +SP ;SN-SR,HF,3Z ;POLAND ;EU ;A +!ST0 ;ST0,6T0-6U0 ;SOUTHEN SUDAN ;AF ;B +ST ;ST,6T-6U ;SUDAN ;AF ;B +SU ;SU,6A-6B ;EGYPT ;AF ;B +SV/A ;SY1MA,SV*/A,*/SV/A ;MT ATHOS ;EU ;B +SV5 ;SV5-SZ5,J45 ;DODECANESE IS. ;EU ;B +SV9 ;SV9-SZ9,J49 ;CRETE ;EU ;B +SV ;SV-SZ,J4 ;GREECE ;EU ;B +S2 ;S2-S3 ;BANGLADESH ;AS ;F +S5 ;S5 ;SLOVENIA (ex YU3) ;EU ;A +S7 ;S7 ;SEYCHELLES ;AF ;C +S9 ;S9 ;SAO TOME & PRINCIPE ;AF ;B +S0 ;S0 ;WESTERN SAHARA ;AF ;Z +TA ;TA1-TC1,YM1 ;TURKEY (EU) ;EU ;C +TA ;TA2-TA9,TB2-TB9,TC2-TC9,YM2-YM9;TURKEY (AS) ;AS ;C +TF ;TF ;ICELAND ;EU ;Z +TG ;TG,TD ;GUATEMALA ;NA ;S +TI9 ;TI9,TE9 ;COCOS IS. ;NA ;S +TI ;TI,TE ;COSTA RICA ;NA ;S +TJ ;TJ ;CAMEROON ;AF ;A +TK ;TK ;CORSICA ;EU ;A +TL ;TL ;CENTRAL AFRICAN REP ;AF ;A +TN ;TN ;CONGO ;AF ;A +TR ;TR ;GABON ;AF ;A +TT ;TT ;CHAD ;AF ;A +TU ;TU ;IVORY COAST ;AF ;Z +TY ;TY ;BENIN ;AF ;Z +TX0 ;TX0 ;CHESTERFIELD IS. ;OC ;L +TZ ;TZ ;MALI ;AF ;Z +T2 ;T2 ;TUVALU ;OC ;M +T30 ;T30 ;WEST KIRIBATI(GILBERT IS.) ;OC ;X +T31 ;T31 ;CENTRAL KIRIBATI(BRITISH PHOENIX IS.) ;OC ;X +T32 ;T32 ;EAST KIRIBATI(LINE IS.) ;OC ;W +T33 ;T33 ;BANABA IS(OCEAN IS.) ;OC ;M +T5 ;T5,6O ;SOMALIA ;AF ;C +T7 ;T7 ;SAN MARINO ;EU ;A +T9 ;T9 ;BOSNIA-HERZEGOVINA (ex YU4,4N4) ;EU ;A +UJ ;UJ-UM ;UZBEKISTAN (ex UI) ;AS ;E +UN ;UN-UQ ;KAZAKHSTAN (ex UL) ;AS ;E +UR ;UR-UZ,EM-EO ;UKRAINE (ex UB) ;EU ;B +UA2 ;U?2,R?2 ;KALININGRAD ;EU ;C +UA/EU ;U?1-U?6,R?1-R?6,U1-U6,R1-R6 ;EUROPEAN RUSSIA ;EU ;C +UA/AS ;U?9,R?9,U9,R9 ;ASIATIC RUSSIA ;AS ;E +UA/AS ;U?8,U?0,R?8,R?0,U8,U0,R8,R0 ;ASIATIC RUSSIA ;AS ;I +VE ;VA7-VG7,VX7,CF7-CK7,XJ7-XO7,VY1 ;CANADA ;NA ;U +VE ;VA6-VG6,VX6,CF6-CK6,XJ6-XO6,VA5-VG5,VX5,CF5-CK5,XJ5-XO5 ;CANADA ;NA ;T +VE ;VA4-VG4,VX4,CF4-CK4,XJ4-XO4 ;CANADA ;NA ;S +VE ;VA3-VG3,VX3,CF3-CK3,XJ3-XO3,VA2-VG2,VX2,CF2-CK2,XJ2-XO2 ;CANADA ;NA ;R +VE ;VA-VG,VO,VX-VY,CF-CK,CY-CZ,XJ-XO ;CANADA ;NA ;Q +VK9L ;VK9L,AX9L ;LORD HOWE IS. ;OC ;L +VK9M ;VK9JW,VK9ZR,VK9MR,VK9ZM ;MELLISH REEF ;OC ;K +VK9N ;VK9N,AX9N ;NORFOLK IS. ;OC ;L +VK9W ;VK9Z,AX9Z,VK9TR ;WILLIS IS. ;OC ;K +VK9X ;VK9X,AX9X ;CHRISTMAS IS. ;OC ;H +VK9C ;VK9Y,AX9Y,VK9WB,VK9EW ;COCOS-KEELING IS. ;OC ;H +VK9? ;VK9 ;COCOS-KEELING IS., /LORD HOWE IS., /MELLISH IS., /NORFOLK IS., /WILLIS IS., /CHRISTMAS IS. ;OC ;K +VK0/M ;VK0AE,VK0GC,VK0WH ;MACQUARIE ;OC ;K +VK0/H ;VK0HM,VK0HI,VK0CW,VK0DA,VK0IR ;HEARD IS. ;AF ;E +VK0/? ;VK0 ;HEARD IS., /MACQUARIE IS. +VK ;VH-VN,VZ,AX ;AUSTRALIA ;OC ;K +VP2E ;VP2E,VP25E ;ANGUILLA ;NA ;Q +VP2M ;VP2M ;MONTSERRAT ;NA ;Q +VP2V ;VP2V ;BRITISH VIRGIN IS. ;NA ;Q +VP5 ;VP5 ;TURKS & CAICOS IS. ;NA ;R +VP8/G ;VP8BUB,VP8CDJ,VP8SGP ;SOUTH GEORGIA ;SA ;P +VP8/O ;LU1Z,VP8BXK ;SOUTH ORKNEY ;SA ;P +VP8/S ;LU2Z,4K1F,CX0XY,HF0POL,LU5ZI,ZX0ECF,VP8CQS,VP8CQR,LZ0A ;SOUTH SHETLAND ;SA ;P +VP8/SW ;VP8SSI ;SOUTH SANDWICH IS. ;SA ;P +VP8 ;VP8CSA ;FALKLAND IS. ;SA ;Q +VP8/? ;VP8,LU?Z ;FALKLAND IS., /SOUTH GEORGIA IS., /SOUTH ORKNEY IS., /SOUTH SANDWICH IS., /SOUTH SHETLAND IS. ;SA ;P +VP9 ;VP9 ;BERMUDA IS. ;NA +VQ9 ;VQ9 ;CHAGOS IS. ;AF ;E +VR6 ;VR6,VP6 ;PITCAIRN IS. ;OC ;U +VR2 ;VS6,VS96,VS97,VR97,VR98,VR2 ;HONG KONG ;AS ;H +VU/A ;VU2JPS ;ANDAMAN & NICOBAR IS. ;AS ;e +VU/L ; ;LACCADIVE IS. ;AS ;e +VU ; ;INDIA ;AS ;e +VU/? ;VT-VW,AT-AW,8T-8Y ;INDIA, /ANDAMAN & NICOBAR IS., /LACCADIVE IS. ;AS ;e +V2 ;V2 ;ANTIGUA & BARBUDA ;NA ;Q +V3 ;V3 ;BELIZE ;NA ;S +V4 ;V4 ;ST KITTS & NEVIS ;NA ;Q +V5 ;V5 ;NAMIBIA ;AF ;B +V6 ;V6 ;MICRONESIA(E CAROLINE IS.) ;OC ;L +V7 ;V7 ;MARSHALL IS. ;OC ;M +V8 ;V8 ;BRUNEI ;OC ;H +XF4 ;XA4-XI4,4A4-4C4,6D4-6J4 ;REVILLA GIGEDO ;NA ;T +XE ;XA-XI,4A-4C,6D-6J ;MEXICO ;NA ;S +XT ;XT ;BURKINA-FASO ;AF ;Z +XU ;XU ;CAMBODIA ;AS ;G +XV ;XV,3W ;VIETNAM ;AS ;G +XW ;XW ;LAOS ;AS ;G +XX9 ;XX9 ;MACAO ;AS ;H +XZ ;XY-XZ,1Z ;MYANMAR ;AS ;f +YA ;YA,T6 ;AFGHANISTAN ;AS ;d +YB ;YB-YH,JZ,PK-PO,7A-7I,8A-8I ;INDONESIA ;OC ;H +YI ;YI ;IRAQ ;AS ;C +YJ ;YJ ;VANUATU ;OC ;L +YK ;YK,6C ;SYRIA ;AS ;B +YL ;YL,UQ ;LATVIA ;EU ;C +YN ;YN,HT,H6-H7 ;NICARAGUA ;NA ;S +YO ;YO-YR ;ROMANIA ;EU ;B +YS ;YS,HU ;EL SALVADOR ;NA ;S +YU ;YT,YU,YZ,4N-4O ;YUGOSLAVIA ;EU ;A +YV0 ;YV0-YY0,4M0 ;AVES IS. ;NA ;Q +YV ;YV-YY,4M ;VENEZUELA ;SA ;Q +ZA ;ZA ;ALBANIA ;EU ;A +ZB ;ZB ;GIBRALTAR ;EU ;A +ZC ;ZC ;UK SOVEREIGN BASES ON CYPRUS ;AS ;B +ZD7 ;ZD7 ;ST HELENA ;AF ;Z +ZD8 ;ZD8 ;ASCENSION IS. ;AF ;Z +ZD9 ;ZD9 ;TRISTAN DE CUNHA & GOUGH IS. ;AF ;Z +ZF ;ZF ;CAYMAN IS. ;NA ;R +ZK1/N ;ZK1CQ,ZK1RS,ZK1BY,ZK1WL,ZK1XP,ZK1XY ;NORTH COOK IS. ;OC ;W +ZK1/S ; ;SOUTH COOK IS ;OC ;W +ZK1/? ;ZK1 ;NORTH COOK IS., /SOUTH COOK IS. ;OC ;W +ZK2 ;ZK2 ;NIUE ;OC ;X +ZK3 ;ZK3 ;TOKELAU IS. ;OC ;X +ZL7 ;ZL7-ZM7 ;CHATHAM IS. ;OC ;M +ZL8 ;ZL8-ZM8 ;KERMADEC IS. ;OC ;M +ZL9 ;ZL9-ZM9 ;AUKLAND & CAMPBELL IS. ;OC ;M +ZL ;ZL-ZM ;NEW ZEALAND ;OC ;M +ZP ;ZP ;PARAGUAY ;SA ;Q +ZS8 ;ZS8MI,ZT8M-ZU8M,ZR8M,ZS8IR ;PRINCE EDWARD & MARION IS. ;AF ;B +!ZS9 ;ZS9 ;WALVIS BAY ;AF +ZS ;ZR-ZU ;REP OF SOUTH AFRICA ;AF ;B +Z2 ;Z2 ;ZIMBABWE ;AF ;B +Z3 ;Z3 ;MACEDONIA (ex YU5,4N5) ;EU ;A +1A0 ;1A0 ;SOVEREIGN MILLITARY ORDER OF MALTA ;EU ;A +1S ;1S,9M0,9M6OO ;SPRATLY IS. ;AS ;H +3A ;3A ;MONACO ;EU ;A +3B6 ;3B6-3B7 ;AGALEGA & ST BRANDON IS. ;AF ;C +3B8 ;3B8 ;MAURITIUS IS. ;AF ;C +3B9 ;3B9 ;RODRIGUEZ IS. ;AF ;C +3C0 ;3C0 ;ANNOBON IS. ;AF ;A +3C ;3C ;EQUATORIAL GUINEA ;AF ;A +3D2/C ;3D2CR,3D2WV,3D2HL,3D2VT,3D2AM,3D2CU,3D2CT,3D2*/C ;CONWAY REEF ;OC ;M +3D2/R ;3D2XX,3D2RJ,3D2XV,3D2XR,3D2AP,3D2RO,3D2OQ,3D2RW,3D2*/R ;ROTUMA IS ;OC ;M +3D2 ;3D2 ;FIJI IS. ;OC ;M +3DA ;3DA ;SWAZILAND ;AF ;B +3V ;3V,TS ;TUNISIA ;AF ;A +3X ;3X ;GUINEA ;AF ;Z +3Y ;3Y1VC,3Y5X ;BOUVET ;AF ;Z +3Y/P ;3Y1EE,3Y2GV ;PETER 1 IS. ;AN ;S +3Y/? ;3Y ;BOUVET, /PETER 1 IS. ;AF,AN +4J ;4J-4K ;AZERBAIJAN (ex UD) ;AS ;F +4L ;4L ;GEORGIA (ex UF) ;AS ;F +4S ;4P-4S ;SRI LANKA ;AS ;e +4U1/U ;4U1U,4U43-4U44,4U45UN ;UN HEADQUATERS NEW YORK ;NA ;R +4U1/I ;4U?ITU ;ITU GENEVA ;EU ;A +4U1/? ;4U ;UN HEADQUATERS NEW YORK, /ITU GENEVA, etc +!4W ;4W ;YEMEN :AS +4W ;4W ;EAST TIMOR ;OC ;H +4X ;4X,4Z ;ISRAEL ;AS ;B +5A ;5A ;LIBYA ;AF ;B +5B ;5B,C4,H2,P3 ;CYPRUS ;AS ;B +5H ;5H-5I ;TANZANIA ;AF ;C +5N ;5N-5O ;NIGERIA ;AF ;A +5R ;5R-5S,6X ;MADAGASCAR ;AF ;C +5T ;5T ;MAURITANIA ;AF ;Z +5U ;5U ;NIGER ;AF ;A +5V ;5V ;TOGO ;AF ;Z +5W ;5W ;WESTERN SAMOA ;OC ;X +5X ;5X ;UGANDA ;AF ;C +5Y ;5Y-5Z ;KENYA ;AF ;C +6W ;6V-6W ;SENEGAL ;AF ;Z +6Y ;6Y ;JAMAICA ;NA ;R +7O ;7O ;REP OF YEMEN ;AS ;C +7P ;7P ;LESOTHO ;AF ;B +7Q ;7Q ;MALAWI ;AF ;B +7X ;7T-7Y ;ALGERIA ;AF ;Z +8P ;8P ;BARBADOS ;NA ;Q +8Q ;8Q ;MALDIVES ;AS,AF ;E +8R ;8R ;GUYANA ;SA ;P +9A ;9A ;CROATIA (ex YU2) ;EU ;A +9G ;9G ;GHANA ;AF ;Z +9H ;9H ;MALTA ;EU ;A +9J ;9I-9J ;ZAMBIA ;AF ;B +9K ;9K ;KUWAIT ;AS ;C +9L ;9L ;SIERRA LEONE ;AF ;Z +9M2 ;9M2,9M4,9W2,9W4 ;WEST MALAYSIA ;AS ;H +9M6 ;9M6,9M8,9W6,9W8 ;EAST MALAYSIA ;OC ;H +9N ;9N ;NEPAL ;AS ;e +9Q ;9O-9T ;ZAIRE ;AF ;B +9U ;9U ;BURUNDI ;AF ;B +9V ;9V,S6 ;SINGAPORE ;AS ;H +9X ;9X ;RWANDA ;AF ;B +9Y ;9Y-9Z ;TRINIDAD & TOBAGO ;SA ;Q +$END +!---------------------------------------------------------------------------- +!ファイルの形式 +! カントリ名 ; カントリ識別子 ; QTH ; 大陸名 ; タイムゾーン +! +!● 行の先頭のはコメントコード,<$>は終了コード +!● カントリ名は8文字以内。 +!● カントリ識別子は<,>で区切って複数個記述可。 +!● QTHは任意の文字列 +!● 大陸名は NA, SA, EU, OC, AF, AS, AN +!● タイムゾーンはA〜Z(Jを除く)で記述する。小文字は+30分 +!● コードは任意の位置にあっても良い +!● 1行255文字以内。 +!● 定義する行(コメント行を除く)は最大512行まで +!● このファイルをネット等で流通させる場合は、最後の変更履歴に追加記載する +! ことをお勧めします。 +! +!カントリ識別子 +! 1.プリフィックス(コールサイン)の羅列 +! 9M2,9M4,9W2,9W4 +! JD1YAA,JD1BIY +! ※ コールサインが短い場合は終端記号(\)を付加したほうが良い +! BV9P → BV9PAも含まれる +! BV9P\ → BV9Pのみ +! +! 2.範囲の指定 +! DA-DR,Y2-Y9 +! EA6-EH6,AM6-AO6 +! 範囲は同じ位置の1ヶ所のみを昇順で記述 +! JA-JS EA6-EH6 OK +! JS-JA(降順) EA6-EH7(2ヶ所) NG +! +! 3.ワイルドカード(範囲の複合可) +! U?1-U?6,R?1-R?6 +! SV*/A,*/SV/A +! =すべての文字, <*>=すべての文字列 +! +! 4.最初に定義したほうが優先される +! JD1/M ;JD1YAA ; MINAMI TORISHIMA ;OC +! JA ;JA-JS ; JAPAN ;AS +! 上記の例ではJD1YAAはJA-JSにも含まれるが、その前にJD1/Mの定義 +! があるのでそちらが優先される +! +!<<<変更履歴>>> +! Jan 15, 1996 - BV9P追加 JE3HHT +! Feb 15, 1996 - BS7H追加 JE3HHT +! Aug. 4, 1998 - VR98追加 JQ3UDL +! Aug. 4, 1998 - TA(AS)変更 JQ3UDL +! Nov. 15, 1998 - BQ9P追加 JQ3UDL +! Feb. 7, 1999 - FO0/M追加 JQ3UDL +! Feb. 7, 1999 - FO0/A追加 JQ3UDL +! Feb. 7, 1999 - H40追加 JQ3UDL +! Jul. 10, 1999 - E4追加  JQ3UDL +! Nov. 15. 1999 - 9M6OO追加 JQ3UDL +! Nov. 20. 1999 - B1-B9追加 JQ3UDL +! Jan. 06. 2000 - ST0削除 JE3HHT +! Feb. 15. 2000 - VR6にVP6追加 JE3HHT +! Mar. 03. 2000 - FO0XにFO0AAA追加 JE3HHT +! Mar. 20. 2000 - FO0X=>FO/C,FO0/M=>FO/M,FO0/A=>FO/Aに変更 JQ3UDL +! Mar. 20. 2000 - 4W追加 JQ3UDL +! Mar. 21. 2000 - TX0追加 JE3HHT +! Jan. 07. 2001 - P2の範囲変更 JQ3UDL +! Jan. 08. 2001 - KG4範囲変更 JQ3UDL +! Jan. 08. 2001 - LZ0A追加 JQ3UDL + \ No newline at end of file diff --git a/JASTA/App.ico b/JASTA/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..746e4d95bc82a631b7e6778b8d311fe0961ed25d GIT binary patch literal 1078 zcmbtTF>b>!45ZVJM&&1XDzXbmHlu$j;5@-g27kj#-y$GGm%w?11~&_#2N+e4vX$6w z3MA+`6nW%HktLcap%vwMMuM*u(JOqG4Sbyty*v@Ek;`Fku!Np564lV&MvWpWbv-zY z2+0@&F9jcd +#pragma hdrstop + +#include "ComLib.h" +#include "LogFile.h" +#include "main.h" +//--------------------------------------------------------------------------- +char BgnDir[256]; // 起動ディレクトリ +char MMLogDir[256]; + +LCID lcid; +int MsgEng; +SYSSET sys; + +//--------------------------------------------------------------------------- +int IsFile(LPCSTR pName) +{ + FILE *fp; + fp = fopen(pName, "rb"); + if( fp != NULL ){ + fclose(fp); + return 1; + } + else { + return 0; + } +} +//--------------------------------------------------------------------------- +LPSTR StrDupe(LPCSTR s) +{ + LPSTR p = new char[strlen(s)+1]; + strcpy(p, s); + return p; +} + + +LPUSTR jstrupr(LPUSTR s) +{ + LPUSTR p = s; + int kf; + + for( kf = 0; *p; p++ ){ + if( kf ){ + kf = 0; + } + else if( _mbsbtype((unsigned char *)p, 0) == _MBC_LEAD ){ + kf = 1; + } + else { + *p = (unsigned char)toupper(*p); + } + } + return s; +} +/*#$% +=============================================================== + 時刻を調整する +--------------------------------------------------------------- + t : 時刻(UTC) + c : 時差コード +--------------------------------------------------------------- + ローカルタイム +--------------------------------------------------------------- + A-Z + a-z +30min +=============================================================== +*/ +WORD AdjustRolTimeUTC(WORD tim, char c) +{ + const char tdf[]={ +/* A B C D E F G H I J K L M N O P Q R S T U V W X Y Z */ + 1,2,3,4,5,6,7,8,9,9,10,11,12,23,22,21,20,19,18,17,16,15,14,13,12,0 + }; + int cc; + + cc = toupper(c); + if( (cc >= 'A')&&(cc <= 'Z') ){ + // JST to UTC +#if 0 + if( tim >= (9*60*30) ){ + tim -= WORD(9 * 60 * 30); + } + else { + tim += WORD(15 * 60 * 30); + } +#endif + tim /= WORD(30); + tim += WORD(tdf[cc-'A'] * 60); + if( c >= 'a' ) tim += WORD(30); + while( tim >= (24 * 60) ){ + tim -= WORD(24 * 60); + } + tim *= WORD(30); + if( !tim ) tim++; + } + else { + tim = 0; + } + return tim; +} +///---------------------------------------------------------------- +/// ウィンドウをクライアントセンターにする +void FormCenter(TForm *tp, int XW, int YW) +{ + int top = (YW - tp->Height)/2; + int left = (XW - tp->Width)/2; + if( top < 0 ) top = 0; + if( left < 0 ) left = 0; + tp->Top = top; + tp->Left = left; +} +/*#$% +======================================================== + 最後の文字コードを返す +-------------------------------------------------------- + p : 文字列のポインタ +-------------------------------------------------------- + 文字コード +-------------------------------------------------------- +======================================================== +*/ +char *lastp(char *p) +{ + if( *p ){ + for( ; *p; p++ ); + p--; + return(p); + } + else { + return(p); + } +} +/*#$% +======================================================== + 末尾のスペースとTABを取る +-------------------------------------------------------- + s : 文字列のポインタ +-------------------------------------------------------- + 文字列のポインタ +-------------------------------------------------------- +======================================================== +*/ +char *clipsp(char *s) +{ + char *p; + + if( *s ){ + for( p = lastp(s); p >= s; p-- ){ + if( (*p == ' ')||(*p == 0x09) ){ + *p = 0; + } + else { + break; + } + } + } + return(s); +} +//--------------------------------------------------------------------------- +LPCSTR _strdmcpy(LPSTR t, LPCSTR p, char c) +{ + for( ; *p && (*p != c); p++, t++ ) *t = *p; + *t = 0; + if( *p == c ) p++; + return(p); +} +const char *StrDlmCpy(char *t, const char *p, char Dlm, int len) +{ + const char _tt1[]="[{(「<"; + const char _tt2[]="]})」>"; + const char *pp; + int r = FALSE; + + char Key; + if( (pp = strchr(_tt2, Dlm))!=NULL ){ + Key = _tt1[pp - _tt2]; + } + else { + Key = 0; + } + int f, k; + for( f = k = 0; *p; p++ ){ + if( k ){ // 漢字2バイト目 + k = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + } + else if( *p == Key ){ + f++; + } + else if( *p == Dlm ){ + if( f ){ + f--; + } + else { + r = TRUE; + p++; + break; + } + } + if( len ){ + *t++ = *p; + len--; + } + } + *t = 0; + return (r == TRUE) ? p : NULL; +} + +const char *StrDlmCpyK(char *t, const char *p, char Dlm, int len) +{ + const char _tt1[]="[{(「<"; + const char _tt2[]="]})」>"; + const char *pp; + int r = FALSE; + + char Key; + if( (pp = strchr(_tt2, Dlm))!=NULL ){ + Key = _tt1[pp - _tt2]; + } + else { + Key = 0; + } + int f, k; + for( f = k = 0; *p; p++ ){ + if( k ){ // 漢字2バイト目 + k = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + } + else if( (pp = strchr(_tt1, *p))!=NULL ){ + Key = _tt2[pp - _tt1]; + f++; + } + else if( f && (*p == Key) ){ + f--; + Key = 0; + } + else if( *p == Dlm ){ + if( !f ){ + r = TRUE; + p++; + break; + } + } + if( len ){ + *t++ = *p; + len--; + } + } + *t = 0; + return (r == TRUE) ? p : NULL; +} +//--------------------------------------------------------------------------- +void StrCopy(LPSTR t, LPCSTR s, int n) +{ + for( ; *s && n; n--, s++, t++){ + *t = *s; + } + *t = 0; +} +//--------------------------------------------------------------------------- +char LastC(LPCSTR p) +{ + char c = 0; + + if( *p ){ + c = *(p + strlen(p) - 1); + } + return c; +} + +/*#$% +======================================================== + 拡張子を得る +-------------------------------------------------------- + p : 文字列のポインタ +-------------------------------------------------------- + 文字コード +-------------------------------------------------------- +======================================================== +*/ +LPCSTR GetEXT(LPCSTR Fname) +{ + if( *Fname ){ + LPCSTR p = Fname + (strlen(Fname) - 1); + for( ; p > Fname; p-- ){ + if( *p == '.' ) return p+1; + } + } + return ""; +} + +void SetEXT(LPSTR pName, LPSTR pExt) +{ + if( *pName ){ + LPSTR p; + + for( p = &pName[strlen(pName)-1]; p >= pName; p-- ){ + if( *p == '.' ){ + strcpy(p, pExt); + return; + } + } + strcat(pName, pExt); + } +} + +void SetCurDir(LPSTR t, int size) +{ + if( !::GetCurrentDirectory(size-1, t) ){ + *t = 0; + } + else { + if( LastC(t) != '\\' ){ + strcat(t, "\\"); + } + } +} + +void SetDirName(LPSTR t, LPCSTR pName) +{ + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + strncpy(t, Dir.c_str(), 128); +} + +///---------------------------------------------------------------- +/// CR/LFを削除 +/// +void ClipLF(LPSTR sp) +{ + for( ; *sp; sp++ ){ + if( (*sp == LF)||(*sp == CR) ){ + *sp = 0; + break; + } + } +} +///---------------------------------------------------------------- +/// コメントを削除(スペースおよびTABも削除) +/// +void DeleteComment(LPSTR bf) +{ + LPSTR sp, tp; + + for( sp = tp = bf; *sp; sp++ ){ + if( (*sp == ';')||(*sp == CR)||(*sp == LF) ){ + break; + } + else if( (*sp!=' ')&&(*sp!=TAB) ){ + *tp++ = *sp; + } + } + *tp = 0; +} + +LPSTR FillSpace(LPSTR s, int n) +{ + LPSTR p = s; + int i = 0; + for( ; *p && (i < n); i++, p++ ); + for( ; i < n; i++, p++ ){ + *p = ' '; + } + *p = 0; + return s; +} +///---------------------------------------------------------------- +/// ホワイトスペースのスキップ +/// +LPSTR SkipSpace(LPSTR sp) +{ + for( ; *sp; sp++ ){ + if( (*sp != ' ')&&(*sp != TAB) ) break; + } + return sp; +} + +LPCSTR SkipSpace(LPCSTR sp) +{ + for( ; *sp; sp++ ){ + if( (*sp != ' ')&&(*sp != TAB) ) break; + } + return sp; +} +///---------------------------------------------------------------- +LPSTR DelLastSpace(LPSTR t) +{ + int l = strlen(t); + if( l ){ + LPSTR p; + for( p = t + l - 1; p >= t; p-- ){ + if( (*p == ' ') || (*p == TAB) ){ + *p = 0; + } + else { + break; + } + } + } + return t; +} +///---------------------------------------------------------------- +/// デリミッタ分解を行う +/// +LPSTR StrDlm(LPSTR &t, LPSTR p) +{ + return StrDlm(t, p, ','); +} + +///---------------------------------------------------------------- +/// デリミッタ分解を行う +/// +LPSTR StrDlm(LPSTR &t, LPSTR p, char c) +{ + int f, k; + LPSTR d1=NULL; + LPSTR d2=NULL; + + t = p; + f = k = 0; + while(*p){ + if( k ){ // 漢字2バイト目 + k = 0; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + } + else if( *p == 0x22 ){ + if( !f ){ + if( d1 == NULL ) d1 = p+1; + f++; + } + else { + d2 = p; + f--; + } + } + else if( !f && (*p == c) ){ + *p = 0; + p++; + break; + } + p++; + } + if( (d1!=NULL)&&(d2!=NULL) ){ + if( ((t+1)==d1) && ( ((p-2)==d2)||((p-1)==d2) ) ){ + t = d1; + *d2 = 0; + } + } + return(p); +} + +///---------------------------------------------------------------- +/// +void ChgString(LPSTR t, char a, char b) +{ + for( ; *t; t++ ){ + if( *t == a ) *t = b; + } +} + +///---------------------------------------------------------------- +/// +void DelChar(LPSTR t, char a) +{ + for( ; *t; t++ ){ + if( *t == a ){ + strcpy(t, t+1); + t--; + } + } +} + +/*#$% +======================================================== + デシマルアスキーを数値に変換する +-------------------------------------------------------- + p : 文字列のポインタ + n : 変換桁数 +-------------------------------------------------------- + 数値 +-------------------------------------------------------- +======================================================== +*/ +int atoin(const char *p, int n) +{ + int d; + + for( d = 0; *p && n; p++, n-- ){ + d *= 10; + d += (*p & 0x0f); + } + return(d); +} +/*#$% +======================================================== + 16進アスキーを数値に変換する +-------------------------------------------------------- + p : 文字列のポインタ + n : 変換桁数 +-------------------------------------------------------- + 数値 +-------------------------------------------------------- +======================================================== +*/ +int htoin(const char *p, int n) +{ + if( *p == 'x' ) return 0; + int d; + + for( d = 0; *p && n; p++, n-- ){ + d = d << 4; + d += (*p & 0x0f); + if( *p >= 'A' ) d += 9; + } + return(d); +} +//--------------------------------------------------------------------------- +int InvMenu(TMenuItem *pItem) +{ + pItem->Checked = pItem->Checked ? FALSE : TRUE; + return pItem->Checked; +} +///---------------------------------------------------------------- +HWND GetMBHandle(int &flag) +{ + HWND hd; + if( Screen->ActiveForm != NULL ){ + hd = Screen->ActiveForm->Handle; + } + else { + hd = NULL; + } + flag = MB_SETFOREGROUND; + flag |= MB_TOPMOST; + flag |= (hd == NULL) ? MB_TASKMODAL : MB_APPLMODAL; + return hd; +} +static int MsgBoxFlag = 0; +///---------------------------------------------------------------- +/// メッセージの表示 +/// +void InfoMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + flag |= (MB_OK | MB_ICONINFORMATION); +// Application->NormalizeTopMosts(); + ::MessageBox(hd, bf, "MMJASTA", flag); +// Application->RestoreTopMosts(); + MsgBoxFlag--; +} +///---------------------------------------------------------------- +/// エラーメッセージの表示 +/// +void ErrorMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + flag |= (MB_OK | MB_ICONEXCLAMATION); +// Application->NormalizeTopMosts(); + ::MessageBox(hd, bf, MsgEng ? "Error":"エラー", flag); +// Application->RestoreTopMosts(); + MsgBoxFlag--; +} + +///---------------------------------------------------------------- +/// 警告メッセージの表示 +/// +void WarningMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + flag |= (MB_OK | MB_ICONEXCLAMATION); +// Application->NormalizeTopMosts(); + ::MessageBox(hd, bf, MsgEng?"Warning":"警告", flag); +// Application->RestoreTopMosts(); + MsgBoxFlag--; +} + +///---------------------------------------------------------------- +/// 実行選択メッセージの表示 +/// +int YesNoMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return IDNO; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); +// if( Screen->ActiveForm != NULL ) NormalWindow(Screen->ActiveForm); + flag |= (MB_YESNO | MB_ICONQUESTION); +// Application->NormalizeTopMosts(); + int r = ::MessageBox(hd, bf, "MMJASTA", flag); +// Application->RestoreTopMosts(); + MsgBoxFlag--; + return r; +} + +///---------------------------------------------------------------- +/// 実行選択メッセージの表示 +/// +int YesNoCancelMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return IDCANCEL; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + flag |= (MB_YESNOCANCEL | MB_ICONQUESTION); +// Application->NormalizeTopMosts(); + int r = ::MessageBox(hd, bf, "MMJASTA", flag); +// Application->RestoreTopMosts(); + MsgBoxFlag--; + return r; +} +///---------------------------------------------------------------- +/// 実行選択メッセージの表示 +/// +int OkCancelMB(LPCSTR fmt, ...) +{ + if( MsgBoxFlag ) return IDCANCEL; + MsgBoxFlag++; + va_list pp; + char bf[1024]; + + va_start(pp, fmt); + vsprintf( bf, fmt, pp ); + va_end(pp); + + int flag; + HWND hd = GetMBHandle(flag); + flag |= (MB_OKCANCEL | MB_ICONQUESTION); +// Application->NormalizeTopMosts(); + int r = ::MessageBox(hd, bf, "MMJASTA", flag); +// Application->RestoreTopMosts(); + MsgBoxFlag--; + return r; +} +///---------------------------------------------------------------- +/// +void ErrorFWrite(LPCSTR pName) +{ + if( GetFileAttributes(pName) & FILE_ATTRIBUTE_READONLY ){ + ErrorMB(MsgEng ? "'%s' is read-only (fail to update)." : "'%s'が 読み取り専用 に設定されているため更新に失敗しました.", pName); + } + else { + ErrorMB( "Could not update '%s'", pName ); + } +} +///---------------------------------------------------------------- +/// +int RemoveL2(LPSTR t, LPSTR ss, LPCSTR pKey, int size) +{ + char c; + int k; + LPCSTR pp; + LPSTR s; + const char _tt1[]="[{(「<"; + const char _tt2[]="]})」>"; + + int len = strlen(pKey); + char ac = ';'; + for( k = 0, s = ss; *s; s++ ){ + if( k ){ // 漢字2バイト目 + k = 0; + ac = 0x1e; + } + else if( _mbsbtype((const unsigned char *)s, 0) == _MBC_LEAD ){ // 漢字1バイト目 + k = 1; + if( (len >= 2) && (strchr(" ,./;:*\t[{(「<]})」>", ac)!=NULL) && (!strnicmp(s, pKey, len)) ){ + pp = s + len; + if( (pp = strchr(_tt1, *pp))!=NULL ){ + c = _tt2[pp - _tt1]; + if( *(s+len+1) ){ + StrDlmCpy(t, s+len+1, c, size); + if( *t ){ + strcpy((ac == ' ')?(s-1):s, s+len+2+strlen(t)); + return TRUE; + } + } + } + } + } + else if( (strchr(" ,./;:*\t\x1e[{(「<]})」>", ac)!=NULL) && (!strnicmp(s, pKey, len)) ){ + pp = s + len; + if( (pp = strchr(_tt1, *pp))!=NULL ){ + c = _tt2[pp - _tt1]; + if( *(s+len+1) ){ + StrDlmCpy(t, s+len+1, c, size); + if( *t ){ + strcpy((ac == ' ')?(s-1):s, s+len+2+strlen(t)); + return TRUE; + } + } + } + ac = *s; + } + else { + ac = *s; + } + } + return FALSE; +} + +void AddL2(LPSTR t, LPCSTR pKey, LPCSTR s, UCHAR c1, UCHAR c2, int size) +{ + if( *s ){ + int len = strlen(t); + int lenkey = strlen(pKey); + int lenData = strlen(s); + if( (len + lenkey + lenData + 2) < size ){ + t += len; + if( len ) *t++ = ' '; + if( *pKey ){ + strcpy(t, pKey); + t += lenkey; + } + *t++ = c1; + strcpy(t, s); + t += lenData; + *t++ = c2; + *t = 0; + } + } +} +///---------------------------------------------------------------- +void NumCopy(LPSTR t, LPCSTR p) +{ + p = SkipSpace(p); + for( ; *p; p++ ){ + if( isdigit(*p) ){ + *t++ = *p; + } + else { + break; + } + } + *t = 0; +} +///---------------------------------------------------------------- +/// 数字が含まれるかどうか調べる +/// +int IsNumbs(LPCSTR p) +{ + for( ; *p; p++ ){ + if( isdigit(*p) ) return 1; + } + return 0; +} +///---------------------------------------------------------------- +/// 数字が含まれるかどうか調べる +/// +int IsNumbAll(LPCSTR p) +{ + for( ; *p; p++ ){ + if( !isdigit(*p) ) return 0; + } + return 1; +} +///---------------------------------------------------------------- +/// 数字が含まれるかどうか調べる +/// +int IsAlphas(LPCSTR p) +{ + for( ; *p; p++ ){ + if( isalpha(*p) ) return 1; + } + return 0; +} +///---------------------------------------------------------------- +/// RSTかどうか調べる +/// +int IsRST(LPCSTR p) +{ + if( strlen(p) < 3 ) return 0; + if( (*p < '1') || (*p > '5') ) return 0; + p++; + if( (*p < '1') || (*p > '9') ) return 0; + p++; + if( (*p < '1') || (*p > '9') ) return 0; + return 1; +} +///---------------------------------------------------------------- +int IsCallChar(char c) +{ + if( !isalpha(c) && !isdigit(c) && (c != '/') ) return 0; + if( islower(c) ) return 0; + return 1; +} +///---------------------------------------------------------------- +/// コールサインかどうか調べる +/// +int IsCall(LPCSTR p) +{ + int l = strlen(p); + if( l > 16 ) return 0; + if( l < 3 ) return 0; + if( isdigit(*p) ){ // 先頭が数字 + if( l <= 3 ) return 0; // 3文字以下の時NG + if( isdigit(*(p+1)) ) return 0; // 2文字目が数字の時NG + } + if( isdigit(LastC(p)) ){ // 最後が数字 + if( l <= 4 ) return 0; // 4文字以下の時NG +// if( !strchr(p, '/')==NULL ) return0; // /が含まれていない時NG +// if( p[l-2] != '/' ) return 0; // 最後の1つ前が/以外の時NG + } + int i; + for( i = 0; i < l-1; i++, p++ ){ + if( isdigit(*p) ) return 1; // 数字が含まれていればOK + } + return 0; +} +/*#$% +====================================================== + JAとDXの区別をする +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ + 1 : JA + 0 : DX (JD1 INCLUDEED) +------------------------------------------------------ +====================================================== +*/ +int IsJA(const char *s) +{ + if( (!memcmp(s, "8J1R", 4) && (strlen(s) == 5))||(strstr(s, "/JD1")!=NULL) ){ + return(0); + } + else if( strchr(s, '/') ){ + char bf[MLCALL+1]; + StrCopy(bf, s, MLCALL); + char *p; + char *t; + for( p = bf; *p; ){ + p = StrDlm(t, p, '/'); + if( *t ){ + if( (strlen(t) >= 2) && isdigit((unsigned char)LastC(t)) ){ + if( *t == 'J' ){ + t++; + if( *t == 'D' ) return(0); + if( (*t >= 'A')&&(*t <= 'S' ) ) return(1); + } + else if( *t == '7' ){ + t++; + if( (*t >= 'J')&&(*t <= 'N' ) ) return(1); + } + else if( *t == '8' ){ + t++; + if( (*t >= 'J')&&(*t <= 'N' ) ) return(1); + } + else { + return 0; + } + } + } + } + } + if( *s == 'J' ){ + s++; + if( *s == 'D' ) return(0); + if( (*s >= 'A')&&(*s <= 'S' ) ) return(1); + } + else if( *s == '7' ){ + s++; + if( (*s >= 'J')&&(*s <= 'N' ) ) return(1); + } + else if( *s == '8' ){ + s++; + if( (*s >= 'J')&&(*s <= 'N' ) ) return(1); + } + return(0); +} +/*#$% +====================================================== + コールサインをクリップする +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ + クリップコールのポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR ClipCall(LPCSTR s) +{ + static char bf[MLCALL+1]; + LPCSTR p1, p2; + + if( (p1=strchr(s, '/'))!=NULL ){ + if( (p2=strchr(p1+1, '/'))!=NULL ){ /* 3分割 */ + if( (int(strlen(p2+1)) < int((p2 - p1)+1)) || (!IsCall(p2+1)) ){ /* 最後より途中が長い */ + if( ((p2-p1) < (p1-s))||(!IsCall(p1+1)) ){ /* 途中より最初が長い */ + StrCopy(bf, s, MLCALL); + *strchr(bf, '/') = 0; + return(bf); + } + else { + strcpy(bf, p1+1); + *strchr(bf, '/') = 0; + return(bf); + } + } + else if( int(strlen(p2+1)) < int((p1 - s)+1) ){ /* 最後より最初が長い */ + StrCopy(bf, s, MLCALL); + *strchr(bf, '/') = 0; + return(bf); + } + else { + return(p2+1); + } + } + else { /* 2分割 */ + if( (int(strlen(p1+1)) < int((p1 - s)+1)) || (!IsCall(p1+1)) ){ + StrCopy(bf, s, MLCALL); + *strchr(bf, '/') = 0; + return(bf); + } + else { + return(p1+1); + } + } + } + else { + return(s); + } +} + +/*#$% +====================================================== + ポータブル表記を調べる +------------------------------------------------------ + p : コールサイン文字列のポインタ +------------------------------------------------------ + 数値のポインタ +------------------------------------------------------ +====================================================== +*/ +static LPSTR chkptb(LPSTR p) +{ + if( *p ){ + p = lastp(p); + if( isdigit(*p) && ((*(p-1))=='/') ){ + return(p); + } + } + return(NULL); +} + +/*#$% +====================================================== + ポータブル表記の入れ替え +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ +------------------------------------------------------ + 元の文字列を破壊する +====================================================== +*/ +void chgptb(LPSTR s) +{ + LPSTR p, t; + + if( (p = chkptb(s))!=NULL ){ + t = p; + for( p--; p > s; p-- ){ + if( isdigit(*p) ){ + *p = *t; + t--; + *t = 0; + break; + } + } + } +} + +/*#$% +====================================================== + コールサインからカントリの元をクリップする +------------------------------------------------------ + s : コールサイン文字列のポインタ +------------------------------------------------------ + カントリのポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR ClipCC(LPCSTR s) +{ + static char bf[MLCALL+1]; + LPSTR p, t; + + StrCopy(bf, s, MLCALL); + chgptb(bf); /* ポータブル表記の入れ替え */ + for( p = bf; *p; ){ + if( *p ){ + p = StrDlm(t, p, '/'); + if( (strlen(t) > 1) && (isdigit(*t) || isdigit(LastC(t))) ) return(t); + } + } + for( p = bf; *p; ){ + if( *p ){ + p = StrDlm(t, p, '/'); + if( (strlen(t) > 1) && (*t!='Q') && strcmp(t, "MM") ) return(t); + } + } + return ClipCall(s); +} + +///---------------------------------------------------------------- +/// 文字列変換 +/// +void Yen2CrLf(AnsiString &ws, AnsiString cs) +{ + ws = ""; + LPCSTR p; + int f; + int dlm = 0; + + p = cs.c_str(); + if( *p == 0x22 ){ + p++; + dlm++; + } + for( f = 0; *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == '\\' ){ + switch(*(p+1)){ + case 'r': + ws += "\r"; + p++; + break; + case 'n': + ws += "\n"; + p++; + break; + case 't': + ws += "\t"; + p++; + break; + case '\\': + ws += "\\"; + p++; + break; + default: + p++; + ws += *p; + break; + } + } + else if( !dlm || (*p!=0x22) || *(p+1) ){ + ws += *p; + } + } +} + +void CrLf2Yen(AnsiString &ws, AnsiString cs) +{ + ws = "\x22"; + LPCSTR p; + int f = 0; + + for( p = cs.c_str(); *p; p++ ){ + if( f ){ + f = 0; + ws += *p; + } + else if( _mbsbtype((const unsigned char *)p, 0) == _MBC_LEAD ){ + f = 1; + ws += *p; + } + else if( *p == 0x0d ){ + ws += "\\r"; + } + else if( *p == 0x0a ){ + ws += "\\n"; + } + else if( *p == TAB ){ + ws += "\\t"; + } + else if( *p == '\\' ){ + ws += "\\\\"; + } + else { + ws += *p; + } + } + ws += "\x22"; +} + + +///--------------------------------------------------------- +/// テキスト文字列ストリーマー +int __fastcall CTextString::LoadText(LPSTR tp, int len) +{ + char c; + int n = 0; + if( !(*rp) ) return FALSE; + while(*rp){ + c = *rp++; + if( c == LF ){ + *tp = 0; + return TRUE; + } + else if( (c != CR)&&(c != 0x1a) ){ + if( n < (len-1) ){ + *tp++ = c; + n++; + } + } + } + *tp = 0; + return TRUE; +} +///------------------------------------------------------ +/// +///CWebRef クラス +/// +void MakeCommand(LPSTR t, LPCSTR s, LPCSTR p) +{ + for( ;*s; s++ ){ + if( *s == '%' ){ + s++; + if( *s == '%' ){ + *t++ = '%'; + } + else if( (p != NULL) && (*s == '1') ){ + strcpy(t, p); + t += strlen(t); + p = NULL; + } + } + else { + *t++ = *s; + } + } + *t = 0; + if( p != NULL ){ + *t++ = ' '; + strcpy(t, p); + } +} + +CWebRef::CWebRef() +{ + HTML = ""; + + HKEY hkey=NULL; /* オープン キーのハンドル */ + + char bf[512], name[512]; + ULONG namelen, len; + if( !RegOpenKeyEx(HKEY_CLASSES_ROOT, "http", 0, KEY_READ, &hkey) ){ + if( !RegOpenKeyEx(hkey, "shell", 0, KEY_READ, &hkey) ){ + if( !RegOpenKeyEx(hkey, "open", 0, KEY_READ, &hkey) ){ + if( !RegOpenKeyEx(hkey, "command", 0, KEY_READ, &hkey) ){ + namelen = sizeof(name); + len = sizeof(bf); + if( !::RegEnumValue(hkey, 0, name, &namelen, NULL, + NULL, (LPBYTE)bf, &len) ){ + HTML = bf; + } + } + } + } + } + ::RegCloseKey(hkey); +} + +void CWebRef::ShowHTML(LPCSTR url) +{ + char cmd[1024]; + MakeCommand(cmd, HTML.c_str(), url); + ::WinExec(cmd, SW_SHOWDEFAULT); +} + + +///------------------------------------------------------ +/// +///CWaitCursor クラス +/// +CWaitCursor::CWaitCursor() +{ + sv = Screen->Cursor; + Screen->Cursor = crHourGlass; +} + +CWaitCursor::~CWaitCursor() +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Delete(void) +{ + Screen->Cursor = sv; +} + +void CWaitCursor::Wait(void) +{ + Screen->Cursor = crHourGlass; +} + +///---------------------------------------------------------------- +/// CAlignクラス +void CAlign::InitControl(TControl *p, TControl *pB, TFont *pF /*= NULL*/) +{ + tp = p; + OTop = p->Top; + OLeft = p->Left; + OWidth = p->Width; + OHeight = p->Height; + if( pF != NULL ){ + fp = pF; + OFontHeight = pF->Height; + } + + BTop = pB->Top; + BLeft = pB->Left; + BWidth = pB->ClientWidth; + BHeight = pB->ClientHeight; +} + +void CAlign::InitControl(TControl *p, RECT *rp, TFont *pF /*= NULL*/) +{ + tp = p; + OTop = p->Top; + OLeft = p->Left; + OWidth = p->Width; + OHeight = p->Height; + if( pF != NULL ){ + fp = pF; + OFontHeight = pF->Height; + } + + BTop = rp->top; + BLeft = rp->left; + BWidth = rp->right - rp->left + 1; + BHeight = rp->bottom - rp->top + 1; +} + +void CAlign::NewAlign(TControl *pB) +{ + double Sx = double(pB->ClientWidth)/double(BWidth); + double Sy = double(pB->ClientHeight)/double(BHeight); + tp->SetBounds(int(OLeft * Sx), int(OTop * Sy), int(OWidth * Sx), int(OHeight * Sy)); + if( fp != NULL ){ + if( Sx > Sy ) Sx = Sy; + fp->Height = int(OFontHeight * Sx); + m_FontAdj = Sx; + } + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } + else if( tp->ClassNameIs("TLabel") ){ + TLabel *lp = ((TLabel *)tp); + if( lp->Alignment == taRightJustify ){ + lp->AutoSize = FALSE; + lp->AutoSize = TRUE; + } + } +} + +void CAlign::NewAlign(TControl *pB, double hx) +{ + double Sx = double(pB->ClientWidth)/double(BWidth); + double Sy = double(pB->ClientHeight)/double(BHeight); + Sy *= hx; + tp->SetBounds(int(OLeft * Sx), int(OTop * Sy), int(OWidth * Sx), int(OHeight * Sy)); + if( fp != NULL ){ + if( Sx > Sy ) Sx = Sy; + fp->Height = int(OFontHeight * Sx); + m_FontAdj = Sx; + } + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } +} + +void CAlign::NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs) +{ + if( fp != NULL ){ + fp->Name = FontName; + fp->Charset = Charset; + fp->Style = fs; + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } + } +} + +void CAlign::NewFixAlign(TControl *pB, int XR) +{ + double Sx = double(pB->ClientWidth - XR) / double(BWidth - XR); + + tp->SetBounds(XR + (OLeft - XR) * Sx, OTop, OWidth * Sx, OHeight); + if( fp != NULL ){ + fp->Height = int(OFontHeight * (Sx < 1.0 ? Sx : 1.0)); + m_FontAdj = Sx; + } + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } +} + +void CAlign::Resume(void) +{ + if( tp != NULL ){ + tp->Top = OTop; + tp->Left = OLeft; + tp->Width = OWidth; + tp->Height = OHeight; + if( fp != NULL ){ + fp->Height = OFontHeight; + } + } +} +///---------------------------------------------------------------- +/// CAlignListクラス +CAlignList::CAlignList(void) +{ + Max = 0; + Cnt = 0; + AlignList = NULL; +} + +CAlignList::~CAlignList(){ + if( AlignList != NULL ){ + for( int i = 0; i < Cnt; i++ ){ + delete AlignList[i]; + } + delete AlignList; + AlignList = NULL; + } +} + +void CAlignList::Alloc(void) +{ + if( Cnt >= Max ){ + Max = Max ? Max * 2 : 16; + CAlign **np = (CAlign **)new BYTE[sizeof(CAlign*) * Max]; + if( AlignList != NULL ){ + for( int i = 0; i < Cnt; i++ ){ + np[i] = AlignList[i]; + } + delete AlignList; + } + AlignList = np; + } + AlignList[Cnt] = new CAlign; +} +void CAlignList::EntryControl(TControl *tp, TControl *pB, TFont *pF /*= NULL*/) +{ + Alloc(); + AlignList[Cnt]->InitControl(tp, pB, pF); + Cnt++; +} + +void CAlignList::EntryControl(TControl *tp, RECT *rp, TFont *pF /*= NULL*/){ + Alloc(); + AlignList[Cnt]->InitControl(tp, rp, pF); + Cnt++; +} + +void CAlignList::EntryControl(TControl *tp, int XW, int YW, TFont *pF /*= NULL*/){ + RECT rc; + rc.left = rc.top = 0; + rc.right = XW; rc.bottom = YW; + Alloc(); + AlignList[Cnt]->InitControl(tp, &rc, pF); + Cnt++; +} + +void CAlignList::NewAlign(TControl *pB) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + AlignList[i]->NewAlign(pB); + } +} + +double CAlignList::GetFontAdj(TControl *pB) +{ + for( int i = 0; i < Cnt; i++ ){ + if( AlignList[i]->GetControl() == pB ){ + return AlignList[i]->GetFontAdj(); + } + } + return 1.0; +} + +void CAlignList::NewAlign(TControl *pB, TControl *pS, double hx) +{ + for( int i = 0; i < Cnt; i++ ){ + if( AlignList[i]->GetControl() == pS ){ + AlignList[i]->NewAlign(pB, hx); + break; + } + } +} +void CAlignList::NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + AlignList[i]->NewFont(FontName, Charset, fs); + } +} + +void CAlignList::NewFixAlign(TControl *pB, int XR) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + AlignList[i]->NewFixAlign(pB, XR); + } +} + +void CAlignList::Resume(TControl *pB) +{ + if( AlignList == NULL ) return; + for( int i = 0; i < Cnt; i++ ){ + if( pB == NULL ){ + AlignList[i]->Resume(); + } + else if( pB == AlignList[i]->GetControl() ){ + AlignList[i]->Resume(); + break; + } + } +} + +//--------------------------------------------------------------------------- +void __fastcall SetGroupEnabled(TGroupBox *gp) +{ + TControl *tp; + int i; + for( i = 0; i < gp->ControlCount; i++ ){ + tp = gp->Controls[i]; + if( tp != NULL ){ + tp->Enabled = gp->Enabled; + if( tp->ClassNameIs("TComboBox") ){ + ((TComboBox *)tp)->SelLength = 0; + } + else if( tp->ClassNameIs("TGroupBox") ){ + SetGroupEnabled((TGroupBox *)tp); + } + } + } + gp->Font->Color = gp->Enabled ? clBlack : clGrayText; +} +//--------------------------------------------------------------------------- +void KeyEvent(const short *p) +{ + for( ; *p; p++ ){ + keybd_event(BYTE(*p), 0, *p&0x8000 ? KEYEVENTF_KEYUP : 0, 0); + } +} +//--------------------------------------------------------------------------- +// CMULTクラス +CMULT::CMULT() +{ + m_pBase = NULL; + m_CNT = m_MAX = 0; +} +//--------------------------------------------------------------------------- +void CMULT::Clear(void) +{ + for( int i = 0; i < m_CNT; i++ ){ + delete m_pBase[i].pStr; + } + delete m_pBase; + m_pBase = NULL; + m_CNT = m_MAX = 0; +} +//--------------------------------------------------------------------------- +void CMULT::Alloc(void) +{ + int max = m_MAX ? (m_MAX * 2) : 256; + MULTSET *pBase = new MULTSET[max]; + if( m_pBase != NULL ){ + memcpy(pBase, m_pBase, sizeof(MULTSET) * m_CNT); + delete m_pBase; + } + m_pBase = pBase; + m_MAX = max; +} +//--------------------------------------------------------------------------- +int CMULT::Add(LPCSTR pKey) +{ + for( int i = 0; i < m_CNT; i++ ){ + if( !strcmp(m_pBase[i].pStr, pKey) ){ + m_pBase[i].Count++; + return 0; + } + } + if( m_CNT >= m_MAX ) Alloc(); + m_pBase[m_CNT].pStr = StrDupe(pKey); + m_pBase[m_CNT].Count = 1; + m_CNT++; + return 1; +} +//--------------------------------------------------------------------------- +int CMULT::Set(LPCSTR pKey, int n) +{ + for( int i = 0; i < m_CNT; i++ ){ + if( !strcmp(m_pBase[i].pStr, pKey) ){ + m_pBase[i].Count = n; + return 0; + } + } + if( m_CNT >= m_MAX ) Alloc(); + m_pBase[m_CNT].pStr = StrDupe(pKey); + m_pBase[m_CNT].Count = n; + m_CNT++; + return 1; +} +//--------------------------------------------------------------------------- +static int CMULTcmpCall(const void *s, const void *t) +{ + MULTSET *sp = (MULTSET *)s; + MULTSET *tp = (MULTSET *)t; + return strcmp(sp->pStr, tp->pStr); +} +static int CMULTcmpCount(const void *s, const void *t) +{ + MULTSET *sp = (MULTSET *)s; + MULTSET *tp = (MULTSET *)t; + if( sp->Count == tp->Count ){ + return strcmp(sp->pStr, tp->pStr); + } + else { + return tp->Count - sp->Count; + } +} +void CMULT::Sort(void) +{ + if( m_CNT < 2 ) return; + qsort(m_pBase, m_CNT, sizeof(MULTSET), CMULTcmpCall); +} +void CMULT::SortCount(void) +{ + if( m_CNT < 2 ) return; + qsort(m_pBase, m_CNT, sizeof(MULTSET), CMULTcmpCount); +} +//--------------------------------------------------------------------------- +int CMULT::GetCount(LPCSTR pKey) +{ + for( int i = 0; i < m_CNT; i++ ){ + if( !strcmp(m_pBase[i].pStr, pKey) ) return m_pBase[i].Count; + } + return 0; +} +//--------------------------------------------------------------------------- +int CMULT::GetTotal(void) +{ + int sum = 0; + for( int i = 0; i < m_CNT; i++ ){ + sum += m_pBase[i].Count; + } + return sum; +} +//--------------------------------------------------------------------------- + + \ No newline at end of file diff --git a/JASTA/ComLib.h b/JASTA/ComLib.h new file mode 100644 index 0000000..9e098b1 --- /dev/null +++ b/JASTA/ComLib.h @@ -0,0 +1,327 @@ +#ifndef ComLibH +#define ComLibH +//ja7ude 0525 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEBUG 0 +#if DEBUG +#include +#define ASSERT(c) assert(c) +#else +#define ASSERT(c) +#endif + +#define VERBETA "" +#define VERID "Ver 1.14" +#define VERTTL2 "MMJASTA "VERID VERBETA +#define VERTTL VERTTL2" (C) JE3HHT 2002-2010." + +extern LCID lcid; + +extern int MsgEng; +extern char BgnDir[256]; +extern char MMLogDir[256]; + +extern const char MONN[]; +extern const char MONU[]; + +#ifndef LPCUSTR +typedef const unsigned char * LPCUSTR; +typedef unsigned char * LPUSTR; +#endif + +enum TFontPitch { fpDefault, fpVariable, fpFixed }; //ja7ude 0525 + +#define ABS(c) (((c)<0)?(-(c)):(c)) +#define AN(p) (sizeof(p)/sizeof(*(p))) +#define CR 0x0d +#define LF 0x0a +#define TAB '\t' + +typedef struct { + int m_HelpNotePad; + int m_Year; + AnsiString m_CName; + + AnsiString m_Call; + int m_First; + int m_Category; + AnsiString m_Name; + AnsiString m_Zip; + AnsiString m_Adr; + AnsiString m_Mail; + AnsiString m_License; + AnsiString m_Pow; + BOOL m_Sexual; + int m_TSize; // S, M, L, LL, アクテイブ賞のT−シャツ当選時の希望サイズ +}SYSSET; +extern SYSSET sys; +///--------------------------------------------------------- +/// テキスト文字列ストリーマー +class CTextString +{ +private: + LPCSTR rp; +public: + inline __fastcall CTextString(LPCSTR p){ + rp = p; + }; + inline __fastcall CTextString(AnsiString &As){ + rp = As.c_str(); + }; + int __fastcall LoadText(LPSTR tp, int len); +}; + +class CWebRef +{ +private: + AnsiString HTML; +public: + CWebRef(); + inline bool IsHTML(void){ + return !HTML.IsEmpty(); + }; + void ShowHTML(LPCSTR url); +}; + +///--------------------------------------------------------- +/// テキストバッファストリーマー +class StrText{ +public: + char *Bp; + char *Wp; + inline StrText(int max){ + Bp = new char[max]; + Clear(); + }; + inline ~StrText(){ + delete Bp; + }; + inline char *Printf(char *ct, ...){ + va_list pp; + + va_start(pp, ct); + vsprintf(Wp, ct, pp ); + va_end(pp); + ct = Wp; + Wp += strlen(Wp); + return(ct); + }; + inline void Add(LPCSTR sp){ + strcpy(Wp, sp); + Wp += strlen(Wp); + }; + inline void Write(void *p, int n){ + memcpy(Wp, p, n); + Wp += n; + *Wp = 0; + }; + inline int GetCnt(void){ + return Wp - Bp; + }; + inline void Clear(void){ + Wp = Bp; + *Wp = 0; + }; + inline char *GetText(void){ + return Bp; + }; +}; + +class CWaitCursor +{ +private: + TCursor sv; +public: + CWaitCursor(); + ~CWaitCursor(); + void Delete(void); + void Wait(void); +}; + +///--------------------------------------------------------- +/// コントロールのアラインの管理クラス +class CAlign +{ +private: + int BTop, BLeft; + int BWidth, BHeight; + int OTop, OLeft; + int OWidth, OHeight; + int OFontHeight; + double m_FontAdj; + + TControl *tp; + TFont *fp; +public: + inline CAlign(void){ + tp = NULL; + fp = NULL; + m_FontAdj = 1.0; + }; + inline ~CAlign(){ + }; + void InitControl(TControl *p, TControl *pB, TFont *pF = NULL); + void InitControl(TControl *p, RECT *rp, TFont *pF = NULL); + void NewAlign(TControl *pB); + inline double GetFontAdj(void){return fabs(m_FontAdj);}; + inline TControl *GetControl(void){return tp;}; + void NewAlign(TControl *pB, double hx); + void NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs); + void NewFixAlign(TControl *pB, int XR); + void Resume(void); +}; + +///--------------------------------------------------------- +/// コントロールのアラインの管理クラス +class CAlignList +{ +private: + int Max; + int Cnt; + CAlign **AlignList; + void Alloc(void); +public: + CAlignList(void); + ~CAlignList(); + void EntryControl(TControl *tp, TControl *pB, TFont *pF = NULL); + void EntryControl(TControl *tp, RECT *rp, TFont *pF = NULL); + void EntryControl(TControl *tp, int XW, int YW, TFont *pF = NULL); + void NewAlign(TControl *pB); + double GetFontAdj(TControl *pB); + void NewAlign(TControl *pB, TControl *pS, double hx); + void NewFont(AnsiString &FontName, BYTE Charset, TFontStyles fs); + void NewFixAlign(TControl *pB, int XR); + void Resume(TControl *pB); +}; + +int IsFile(LPCSTR pName); + +LPSTR StrDupe(LPCSTR s); + +LPUSTR jstrupr(LPUSTR s); +inline LPSTR jstrupr(LPSTR s){return (LPSTR)jstrupr(LPUSTR(s));}; + +int SetTimeOffsetInfo(int &Hour, int &Min); +WORD AdjustRolTimeUTC(WORD tim, char c); +void FormCenter(TForm *tp, int XW, int YW); +char *lastp(char *p); +char *clipsp(char *s); +LPCSTR _strdmcpy(LPSTR t, LPCSTR p, char c); +const char *StrDlmCpy(char *t, const char *p, char Dlm, int len); +const char *StrDlmCpyK(char *t, const char *p, char Dlm, int len); +void StrCopy(LPSTR t, LPCSTR s, int n); +char LastC(LPCSTR p); +LPCSTR GetEXT(LPCSTR Fname); +void SetEXT(LPSTR pName, LPSTR pExt); +void SetCurDir(LPSTR t, int size); +void SetDirName(LPSTR t, LPCSTR pName); +void ClipLF(LPSTR sp); +void DeleteComment(LPSTR bf); +LPSTR FillSpace(LPSTR s, int n); +LPSTR SkipSpace(LPSTR sp); +LPCSTR SkipSpace(LPCSTR sp); +LPSTR DelLastSpace(LPSTR t); +LPSTR StrDlm(LPSTR &t, LPSTR p); +LPSTR StrDlm(LPSTR &t, LPSTR p, char c); +void ChgString(LPSTR t, char a, char b); +void DelChar(LPSTR t, char a); +int atoin(const char *p, int n); +int htoin(const char *p, int n); + +int InvMenu(TMenuItem *pItem); + +void InfoMB(LPCSTR fmt, ...); +void ErrorMB(LPCSTR fmt, ...); +void WarningMB(LPCSTR fmt, ...); +int YesNoMB(LPCSTR fmt, ...); +int YesNoCancelMB(LPCSTR fmt, ...); +int OkCancelMB(LPCSTR fmt, ...); +void ErrorFWrite(LPCSTR pName); + +int RemoveL2(LPSTR t, LPSTR ss, LPCSTR pKey, int size); +void AddL2(LPSTR t, LPCSTR pKey, LPCSTR s, UCHAR c1, UCHAR c2, int size); + +void Yen2CrLf(AnsiString &ws, AnsiString cs); +void CrLf2Yen(AnsiString &ws, AnsiString cs); + +void NumCopy(LPSTR t, LPCSTR p); +int IsNumbs(LPCSTR p); +int IsNumbAll(LPCSTR p); +int IsAlphas(LPCSTR p); +int IsRST(LPCSTR p); +int IsCallChar(char c); +int IsCall(LPCSTR p); +int IsJA(const char *s); +LPCSTR ClipCall(LPCSTR s); +LPCSTR ClipCC(LPCSTR s); + +/* ja7ude 0525 +inline LPUSTR StrDlm(LPUSTR &t, LPUSTR p, char c){return (LPUSTR)StrDlm(LPSTR(t), LPSTR(p), c);}; +inline LPUSTR StrDlm(LPUSTR &t, LPUSTR p){return (LPUSTR)StrDlm(LPSTR(t), LPSTR(p));}; +inline LPUSTR StrDlm(LPUSTR &t, LPSTR p, char c){return (LPUSTR)StrDlm(LPSTR(t), p, c);}; +inline LPUSTR StrDlm(LPUSTR &t, LPSTR p){return (LPUSTR)StrDlm(LPSTR(t), p);}; +*/ + +void __fastcall SetGroupEnabled(TGroupBox *gp); +void KeyEvent(const short *p); + +typedef struct { + LPSTR pStr; + int Count; +}MULTSET; + +class CMULT +{ +private: + int m_CNT; + int m_MAX; + MULTSET *m_pBase; +// LPSTR *m_pStr; +// LPSTR m_pStr[MULTMAX]; +private: + void Alloc(void); + +public: + CMULT(); + ~CMULT(){ + Clear(); + }; + void Clear(void); + int Add(LPCSTR pKey); + int Set(LPCSTR pKey, int n); + int GetCount(void){ + return m_CNT; + }; + void Sort(void); + void SortCount(void); + LPCSTR GetText(int n){ + if( (n >= 0) && (n < m_CNT) ){ + return m_pBase[n].pStr; + } + else { + return NULL; + } + }; + int GetCount(int n){ + if( (n >= 0) && (n < m_CNT) ){ + return m_pBase[n].Count; + } + else { + return 0; + } + }; + int GetCount(LPCSTR pKey); + int GetTotal(void); +}; +#endif + + \ No newline at end of file diff --git a/JASTA/EMMJASTA.TXT b/JASTA/EMMJASTA.TXT new file mode 100644 index 0000000..6f13e56 --- /dev/null +++ b/JASTA/EMMJASTA.TXT @@ -0,0 +1,54 @@ +MMJASTA.EXE + JE3HHT Makoto Mori + First version released on September 3, 2002 + Last revised on September 8, 2004 + Translated into English by JA7UDE Nobuyuki Oba + +MMJASTA.EXE is a program that generates the log and summary sheets for JASTA Activity Contest, which regularly is held in August. +MMJASTA.EXE reads the log data of MMSSTV, calculates the score and generates the log and summary sheets for JA and non-JA stations. + +--------------- +1. Setup +--------------- +Start MMJASTA.EXE, click on File menu, select Setup, and fill out the form. The items you have entered are recorded in MMJASTA.INI, so that you will not have to enter them in the next time. +Select Japanese if you are JA, or English if you are not JA. MMJASTA.EXE generates Japanese or English summary according to this selection. MMJASTA.EXE automatically selects the language by referring to the Windows locale. + +--------------------- +2. Load the log file +--------------------- +Click on File menu and select Load log. Specify the log file that is generated by MMSSTV. The file extension is MDT. MMJASTA.EXE calculates the sore and generates the log and summary sheets. + +MMJASTA.EXE generates the following files in the directory where MMJASTA.EXE exists. + Log sheet Callsign.txt + Summary sheet Callsign.sum + Analysis file Callsign.ana + +MMJASTA automatically picks out the contest QSOs by referring to the date and HisRSV fields. Therefore, the log file can contain non-contest QSOs. + +-------------------- +DX entities +-------------------- +MMJASTA and MMSSTV automatically detect the DX entities and continents in most cases. If MMJASTA.EXE cannot identify the entity from the call sign, MMJASTA.EXE outputs an error message in the lower window, like below. + +194 10/21 1502Z 14 JD1ABC 59940 59999 : DXCC Unknown [JD1/?] + +Double click on the error message. MMJASTA.EXE opens a new window, with which you can edit the multi and continent. Push the OK button after inputting the correct multi and continent information. MMJASTA.EXE changes the entry not only in the JASTA log sheet but also in the original MMSSTV log file. +After editing all the DXCC unknown entries, click on File menu and Re-totalize. + +* The JASTA contest rule as of 2002 does not take account of continents, but MMJASTA.EXE allows the user to edit the continent field for future use. + +----------------------- +4. Invalid QSO +----------------------- +MMJASTA.EXE treat the QSO invalid if +- Two or more QSOs with the same station on the same day (UTC). MMJASTA only counts the first QSO. +- Rcvd contest NR is empty +- REM field has NOF or NOFACE. User should put NOF or NOFACE in the REM field if the face picture was not received. + +-------------- +5. Note +-------------- +MMJASTA automatically calculates the score and generates the log and summary sheets, but DO NOT FORGET TO CHECK ON THE LOG AND SUMMARY SHEETS BY YOURSELF. +This program has just been made and not quite tested. It is highly likely to have bugs.... + +73, Mako diff --git a/JASTA/FEdit.cpp b/JASTA/FEdit.cpp new file mode 100644 index 0000000..da98d1f --- /dev/null +++ b/JASTA/FEdit.cpp @@ -0,0 +1,188 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "FEdit.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TFileEdit *FileEdit; +//--------------------------------------------------------------------------- +__fastcall TFileEdit::TFileEdit(TComponent* Owner) + : TForm(Owner) +{ + m_FileName = ""; + REdit->Font->Pitch = fpFixed; + if( MsgEng ){ + REdit->Font->Name = "Courier New"; + REdit->Font->Charset = 0; + } + else { + REdit->Font->Name = "MS ゴシック"; + REdit->Font->Charset = SHIFTJIS_CHARSET; + + KF->Caption = "ファイル(&F)"; + KFN->Caption = "メモ帳に切り替え(&N)"; + KFX->Caption = "終了(&X)"; + KE->Caption = "編集(&E)"; + KFA->Caption = "名前を付けて保存(&A)..."; + KEU->Caption = "元に戻す(&U)"; + KEC->Caption = "切り取り(&T)"; + KECP->Caption = "コピー(&C)"; + KEP->Caption = "貼り付け(&P)"; + KEA->Caption = "すべて選択(&L)"; + KS->Caption = "検索(&S)"; + KSS->Caption = "検索(&F)..."; + KSN->Caption = "次を検索(&N)"; + } + for( int i = 0; i < KE->Count; i++ ){ + TMenuItem *pMenu = new TMenuItem(this); + pMenu->Caption = KE->Items[i]->Caption; + pMenu->OnClick = KE->Items[i]->OnClick; + PopupMenu->Items->Add(pMenu); + } +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::Execute(LPCSTR pName) +{ + Caption = pName; + CWaitCursor tw; + m_FileName = pName; + REdit->Lines->LoadFromFile(pName); + REdit->Modified = FALSE; + Show(); +} +//--------------------------------------------------------------------- +void __fastcall TFileEdit::FormCloseQuery(TObject *Sender, bool &CanClose) +{ + if( REdit->Modified ){ + int r = YesNoCancelMB(MsgEng ? "Overwrite to the file (%s) ?" : "ファイル (%s) に上書きしますか?", m_FileName.c_str()); + switch(r){ + case IDYES: + { + CWaitCursor w; + REdit->Lines->SaveToFile(m_FileName); + } + break; + case IDCANCEL: + CanClose = FALSE; + return; + } + } + CanClose = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KECClick(TObject *Sender) +{ + REdit->CutToClipboard(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KECPClick(TObject *Sender) +{ + REdit->CopyToClipboard(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KEPClick(TObject *Sender) +{ + REdit->PasteFromClipboard(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KEUClick(TObject *Sender) +{ + if( REdit->HandleAllocated() ){ + SendMessage(REdit->Handle, EM_UNDO, 0, 0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KEAClick(TObject *Sender) +{ + REdit->SelectAll(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KEClick(TObject *Sender) +{ + KEU->Enabled = REdit->Modified; + KEC->Enabled = REdit->SelLength; + KECP->Enabled = KEC->Enabled; + KEP->Enabled = ::IsClipboardFormatAvailable(CF_TEXT); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KFAClick(TObject *Sender) +{ + AnsiString FileName = m_FileName.c_str(); + SetEXT(FileName.c_str(), ""); + LPCSTR pEXT = GetEXT(m_FileName.c_str()); + SaveDialog->FileName = FileName; + SaveDialog->DefaultExt = pEXT; + if( !strcmpi(pEXT, "SUM") ) SaveDialog->FilterIndex = 2; + if( !strcmpi(pEXT, "CHK") ) SaveDialog->FilterIndex = 3; + if( !strcmpi(pEXT, "ANA") ) SaveDialog->FilterIndex = 4; + if( SaveDialog->Execute() ) { + // Options + OverwritePrompt = True thus no need to check. + REdit->Lines->SaveToFile(SaveDialog->FileName); + m_FileName = SaveDialog->FileName; + REdit->Modified = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KFXClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::PopupMenuPopup(TObject *Sender) +{ + KEClick(NULL); + for( int i = 0; i < PopupMenu->Items->Count; i++ ){ + PopupMenu->Items->Items[i]->Enabled = KE->Items[i]->Enabled; + } +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KSSClick(TObject *Sender) +{ + FindDialog->Execute(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::FindDialogFind(TObject *Sender) +{ + int FoundAt, StartPos, ToEnd; + // 検索は現在選択されている場所から開始される + // 何も選択されていない場合は, + // テキストの最初から開始される + if(REdit->SelLength){ + StartPos = REdit->SelStart + REdit->SelLength; + } + else { + StartPos = 0; + } + // ToEnd は検索範囲の文字数を示す + ToEnd = REdit->Text.Length() - StartPos; + + + TSearchTypes stype; + if( FindDialog->Options.Contains(frMatchCase) ) stype << stMatchCase; + if( FindDialog->Options.Contains(frWholeWord) ) stype << stWholeWord; + FoundAt = REdit->FindText(FindDialog->FindText, StartPos, ToEnd, stype); + if( FoundAt != -1 ){ + REdit->SetFocus(); + REdit->SelStart = FoundAt; + REdit->SelLength = FindDialog->FindText.Length(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KSClick(TObject *Sender) +{ + KSN->Enabled = !FindDialog->FindText.IsEmpty(); +} +//--------------------------------------------------------------------------- +void __fastcall TFileEdit::KFNClick(TObject *Sender) +{ + Close(); + + char bf[256]; + sprintf(bf, "NOTEPAD %s", m_FileName.c_str()); + WinExec(bf, SW_SHOWDEFAULT); +} +//--------------------------------------------------------------------------- + + diff --git a/JASTA/FEdit.dfm b/JASTA/FEdit.dfm new file mode 100644 index 0000000000000000000000000000000000000000..dfc6dd04a479c335e73d505d2e9f3e0febcae446 GIT binary patch literal 1627 zcmZWpTW;Gp6qV&z4?B}SR-iAT9iT=#-9S}Yf?YeZCR7@uKLsn%5m8zcD7vwMd=$wB z=5vDg&HMjp{e+hKZg7P&p7+1%#uVY}ocI6forbjFV?T$iLfm`|rn4}4Hv=F2sdoW_ zWZ1xzP-dQ{7$F$s*O(iNEf|OB0-U=U0qpIFgo?8k0v}74#x@KKbmR&JeTAIk@ zP=4z}b4>sCBq)5DakSCrq3Od?nqv%Hd7d4xKMy^HjsX0E9M`MHQv&%Or@sNmn;I(iQBLVq3uu^Jnhrd6%<#;B;!x z=Yir3TzMvnV9tYPeQQU59$a>oUy44oKu#I=x4i%1jiOp&-BEse^h$AmuRHJ+bmDK_ zq*Y!0qUs;1o`@`CMIN|5E%z9JDPr zlyuQ;;(jRwovH25Bs{^8&}$iK;x|fU+c)2aZD@#_!Vxq0f?hjSju3aA{W(rn$@ANK zxCPtI2C{vNfy;A=iQ#s#Eyd-5964!@($CIX+`3Bg{pnn;5yP!lK(eoJ)q-B+Nl*;t zvc9j?=m}jfzaVzQFh?NxqkiFL2_-{Q;8z$-z>AWnKb%%BWGbbYbgH*H!kH literal 0 HcmV?d00001 diff --git a/JASTA/FEdit.h b/JASTA/FEdit.h new file mode 100644 index 0000000..8cd9041 --- /dev/null +++ b/JASTA/FEdit.h @@ -0,0 +1,66 @@ +//--------------------------------------------------------------------------- +#ifndef FEditH +#define FEditH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +#include "ComLib.h" +#include +//--------------------------------------------------------------------------- +class TFileEdit : public TForm +{ +__published: // IDE 管理のコンポーネント + TRichEdit *REdit; + TMainMenu *MainMenu1; + TMenuItem *KF; + TMenuItem *KE; + TMenuItem *KFA; + TMenuItem *KEC; + TMenuItem *KECP; + TMenuItem *KEP; + TSaveDialog *SaveDialog; + TMenuItem *N1; + TMenuItem *KEU; + TMenuItem *N2; + TMenuItem *KEA; + TMenuItem *N3; + TMenuItem *KFX; + TPopupMenu *PopupMenu; + TFindDialog *FindDialog; + TMenuItem *KS; + TMenuItem *KSS; + TMenuItem *KSN; + TMenuItem *KFN; + void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); + + void __fastcall KECClick(TObject *Sender); + void __fastcall KECPClick(TObject *Sender); + void __fastcall KEPClick(TObject *Sender); + void __fastcall KFAClick(TObject *Sender); + void __fastcall KEUClick(TObject *Sender); + void __fastcall KEAClick(TObject *Sender); + + void __fastcall KEClick(TObject *Sender); + void __fastcall KFXClick(TObject *Sender); + void __fastcall PopupMenuPopup(TObject *Sender); + + void __fastcall KSSClick(TObject *Sender); + void __fastcall FindDialogFind(TObject *Sender); + void __fastcall KSClick(TObject *Sender); + void __fastcall KFNClick(TObject *Sender); + +private: // ユーザー宣言 + AnsiString m_FileName; +public: // ユーザー宣言 + __fastcall TFileEdit(TComponent* Owner); + void __fastcall Execute(LPCSTR pName); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TFileEdit *FileEdit; +//--------------------------------------------------------------------------- +#endif diff --git a/JASTA/LogConv.cpp b/JASTA/LogConv.cpp new file mode 100644 index 0000000..3509c65 --- /dev/null +++ b/JASTA/LogConv.cpp @@ -0,0 +1,2033 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include +#include "LogConv.h" +#include "country.h" +#include "main.h" +CLogText LogText; +//*************************************************************************** +// CLogConv 基本 クラス +CLogConv::CLogConv() +{ + m_Mode = 0; + m_fp = NULL; +} + +CLogConv::~CLogConv() +{ +} +//*************************************************************************** +// CLogText クラス +CLogText::CLogText() +{ + m_Type = 0; + m_Double = 0; + m_Delm = 0; + m_err = 0; + m_UTC = (lcid != LANG_JAPANESE) ? 1 : 0; + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + m_tConv[i].Key = ""; + m_tConv[i].w = 0; + } + m_tConv[0].Key = "%YYYY-MM-DD"; + m_tConv[1].Key = "%HHMM"; + m_tConv[2].Key = "%EHHMM"; + m_tConv[3].Key = "%CALL"; + m_tConv[4].Key = "%HIS"; + m_tConv[5].Key = "%MY"; + m_tConv[6].Key = "%FREQ"; + m_tConv[7].Key = "%MODE"; + m_tConv[8].Key = "%POWER"; + m_tConv[9].Key = "%NAME"; + m_tConv[10].Key = "%QTH"; + m_tConv[11].Key = "%REM"; + m_tConv[12].Key = "%QSL"; + m_tConv[13].Key = "%S"; + m_tConv[14].Key = "%R"; + m_tConv[15].Key = "%EOD"; + for( i = 0; i < TEXTCONVMAX; i++ ){ + m_rConv[i] = m_tConv[i]; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogText::Open(LPCSTR pName) +{ + Close(); + m_Mode = 0; + m_err = 0; + + m_fp = fopen(pName, "rt"); + + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't open '%s'":"'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルの作成 +int CLogText::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + + m_fp = fopen(pName, "wt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't write to '%s'":"'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogText::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB( MsgEng ? "Can't close '%s'":"'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB(MsgEng ? "Done (write to '%s')":"'%s'への書きこみを終了しました.", m_FileName.c_str()); + } + } + return r ? FALSE : TRUE; +} +//--------------------------------------------------------------------------- +// テキストファイルの読み出し +int CLogText::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + if( !feof(m_fp) ){ + if( fgets(m_bf, sizeof(m_bf), m_fp) != NULL ){ + ClipLF(m_bf); + return Text2MMLOG(sp, m_bf, m_err); + } + else { + return FALSE; + } + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +// 出力変換 +int CLogText::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + MMLOG2Text(m_bf, sp); + fputs(m_bf, m_fp); + fputs("\n", m_fp); + return ferror(m_fp) ? FALSE : TRUE; +} + +const LPCSTR ConvTbl[]={ + "%NULL", + "%YYYY-MM-DD", "%YY-MM-DD", "%YYYY/MM/DD", "%YY/MM/DD", + "%DD MON, YYYY","%YYMMDD", "%YYYYMMDD", + "%YY", "%YYYY", "%MM", "%MON", "%MON2", "%DD", "%HHMM", "%HH:MM","%HH:MM:SS", + "%EHHMM", "%EHH:MM", "%EHH:MM:SS", "%CALL", + "%M", "%MY", "%HIS", "%MYRST", "%HISRST", "%MYNR", "%HISNR", "%FREQ", "%KHZ", + "%MBAND", "%MODE", "%POWER", "%NAME", "%QTH", "%REM", "%QSL", + "%S", "%R", "%ENV", "%OPT1", "%OPT2", "%USR1", "%USR2", + "%EOD", + NULL, +}; + +const char *MONT1[]={"","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"}; +const char *MONT2[]={"","Jan.","Feb.","Mar.","Apr.","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."}; + +//--------------------------------------------------------------------------- +void MMLOG2Text(LPSTR t, SDMMLOG *sp, AnsiString &Key) +{ + int tim, l; + + if( Key == "%YYYY-MM-DD" ){ + sprintf(t, "%04u-%02u-%02u", YEAR(sp->year), sp->date/100, sp->date%100); + } + else if( Key == "%YY-MM-DD" ){ + sprintf(t, "%2u-%02u-%02u", sp->year, sp->date/100, sp->date%100); + } + else if( Key == "%YYYY/MM/DD" ){ + sprintf(t, "%04u/%02u/%02u", YEAR(sp->year), sp->date/100, sp->date%100); + } + else if( Key == "%YY/MM/DD" ){ + sprintf(t, "%2u/%02u/%02u", sp->year, sp->date/100, sp->date%100); + } + else if( Key == "%DD MON, YYYY" ){ + sprintf(t, "%02u %s, %04u", sp->date%100, MONT1[sp->date/100], YEAR(sp->year)); + } + else if( Key == "%YYYYMMDD" ){ + sprintf(t, "%04u%02u%02u", YEAR(sp->year), sp->date/100, sp->date%100); + } + else if( Key == "%YYMMDD" ){ + sprintf(t, "%02u%02u%02u", sp->year, sp->date/100, sp->date%100); + } + else if( Key == "%YY" ){ + sprintf(t, "%02u", sp->year); + } + else if( Key == "%YYYY" ){ + sprintf(t, "%04u", YEAR(sp->year)); + } + else if( Key == "%MM" ){ + sprintf(t, "%02u", sp->date / 100); + } + else if( Key == "%MON" ){ + strcpy(t, MONT1[sp->date/100]); + } + else if( Key == "%MON2" ){ + strcpy(t, MONT2[sp->date/100]); + } + else if( Key == "%DD" ){ + sprintf(t, "%02u", sp->date % 100); + } + else if( Key == "%HHMM" ){ + if( sp->btime ){ + tim = sp->btime / 30; + sprintf(t, "%02u%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%HH:MM" ){ + if( sp->btime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%HH:MM:SS" ){ + if( sp->btime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u:%02u", tim / 60, tim % 60, (sp->btime * 2) % 60); + } + else { + *t = 0; + } + } + else if( Key == "%EHHMM" ){ + if( sp->etime ){ + tim = sp->etime / 30; + sprintf(t, "%02u%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%EHH:MM" ){ + if( sp->etime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%EHH:MM:SS" ){ + if( sp->etime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u:%02u", tim / 60, tim % 60, (sp->etime * 2) % 60); + } + else { + *t = 0; + } + } + else if( Key == "%CALL" ){ + strcpy(t, sp->call); + } + else if( Key == "%M" ){ + *t = sp->send; + *(t+1) = 0; + } + else if( Key == "%HIS" ){ + strcpy(t, sp->ur); + } + else if( Key == "%MY" ){ + strcpy(t, sp->my); + } + else if( Key == "%HISRST" ){ + StrCopy(t, sp->ur, GetLMode(sp->mode)); + } + else if( Key == "%MYRST" ){ + StrCopy(t, sp->my, GetLMode(sp->mode)); + } + else if( Key == "%HISNR" ){ + l = GetLMode(sp->mode); + if( (int)strlen(sp->ur) >= l ){ + strcpy(t, &sp->ur[l]); + } + else { + *t = 0; + } + } + else if( Key == "%MYNR" ){ + l = GetLMode(sp->mode); + if( (int)strlen(sp->my) >= l ){ + strcpy(t, &sp->my[l]); + } + else { + *t = 0; + } + } + else if( Key == "%FREQ" ){ + strcpy(t, Log.GetFreqString(sp->band, sp->fq)); + } + else if( Key == "%MBAND" ){ + strcpy(t, FreqTomBand(sp)); + } + else if( Key == "%KHZ" ){ + char bf[32]; + double dd; + strcpy(bf, Log.GetFreqString(sp->band, sp->fq)); + sscanf(bf, "%lf", &dd); + sprintf(t, "%.2lf", dd * 1000.0); + } + else if( Key == "%MODE" ){ + strcpy(t, Log.GetModeString(sp->mode)); + } + else if( Key == "%POWER" ){ + strcpy(t, sp->pow); + } + else if( Key == "%NAME" ){ + strcpy(t, sp->name); + } + else if( Key == "%QTH" ){ + strcpy(t, sp->qth); + } + else if( Key == "%REM" ){ + strcpy(t, sp->rem); + } + else if( Key == "%QSL" ){ + strcpy(t, sp->qsl); + } + else if( Key == "%S" ){ + *t = sp->send; + *(t+1) = 0; + } + else if( Key == "%R" ){ + *t = sp->recv; + *(t+1) = 0; + } + else if( Key == "%ENV" ){ + sprintf(t, "%u", sp->env); + } + else if( Key == "%OPT1" ){ + strcpy(t, sp->opt1); + } + else if( Key == "%OPT2" ){ + strcpy(t, sp->opt2); + } + else if( Key == "%USR1" ){ + strcpy(t, Log.GetOptStr(2, sp)); + } + else if( Key == "%USR2" ){ + strcpy(t, Log.GetOptStr(3, sp)); + } + else if( (Key == "%EOD")||(Key == "%NULL") ){ + *t = 0; + } + else { + strcpy(t, Key.c_str()); + } +} +//--------------------------------------------------------------------------- +// 1行の出力変換 +void CLogText::MMLOG2Text(LPSTR t, SDMMLOG *sp) +{ + char bf[512]; + char dlm = m_Delm ? TAB : ','; + + if( m_UTC ) JSTtoUTC(sp); + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + if( (!m_tConv[i].Key.IsEmpty())&&(m_tConv[i].Key != "%EOD") ){ + ::MMLOG2Text(bf, sp, m_tConv[i].Key); + switch(m_Delm){ + case 0: // CSV + case 1: // TAB + if( i ) *t++ = dlm; + if( m_Double || (strchr(bf, dlm) != NULL) ) *t++ = 0x22; + if( m_tConv[i].w ){ + StrCopy(t, bf, m_tConv[i].w); + } + else { + strcpy(t, bf); + } + t += strlen(t); + if( m_Double || (strchr(bf, dlm) != NULL) ) *t++ = 0x22; + break; + default: // Format Text + if( m_tConv[i].w ){ + StrCopy(t, bf, m_tConv[i].w); + FillSpace(t, m_tConv[i].w); + } + else { + strcpy(t, bf); + } + t += strlen(t); + break; + } + } + else { + break; + } + } + *t = 0; +} +//--------------------------------------------------------------------------- +int GetMonth(LPCSTR p) +{ + for( int i = 1; i <=12; i++ ){ + if( !strcmpi(MONT1[i], p) ) return i; + if( !strcmpi(MONT2[i], p) ) return i; + } + return 0; +} +//--------------------------------------------------------------------------- +int Text2MMLOG(SDMMLOG *sp, LPCSTR s, AnsiString &Key) +{ + int y, m, d, h; + int tim; + + if( (Key == "%YYYY-MM-DD")||(Key == "%YY-MM-DD") ){ + if( sscanf(s, "%u-%u-%u", &y, &m, &d) != 3 ) return FALSE; + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( (Key == "%YYYY/MM/DD")||(Key == "%YY/MM/DD") ){ + if( sscanf(s, "%u/%u/%u", &y, &m, &d) != 3 ) return FALSE; + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( Key == "%DD MON, YYYY" ){ + d = atoin(s, 2); + s += 3; + char bf[4]; + StrCopy(bf, s, 3); + m = GetMonth(bf); + s = SkipSpace(s+1); + y = atoin(s, -1); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( Key == "%YYYYMMDD" ){ + y = atoin(s, 4); s += 4; + m = atoin(s, 2); s += 2; + d = atoin(s, 2); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( Key == "%YYMMDD" ){ + y = atoin(s, 2); s += 2; + m = atoin(s, 2); s += 2; + d = atoin(s, 2); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( (Key == "%YY")||(Key == "%YYYY") ){ + if( sscanf(s, "%u", &y) != 1 ) return FALSE; + sp->year = BYTE(y % 100); + } + else if( Key == "%MM" ){ + if( sscanf(s, "%u", &m) != 1 ) return FALSE; + sp->date = WORD((sp->date % 100) + m * 100); + } + else if( (Key == "%MON")||(Key == "%MON2") ){ + m = GetMonth(s); + sp->date = WORD((sp->date % 100) + m * 100); + } + else if( Key == "%DD" ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + sp->date = WORD(((sp->date / 100) * 100) + d); + } + else if( Key == "%HHMM" ){ + if( *s ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->btime = WORD(tim); + } + } + else if( (Key == "%HH:MM")||(Key == "%HH:MM:SS") ){ + if( *s ){ + if( sscanf(s, "%u:%u:%u", &h, &m, &d ) != 3 ){ + d = 0; + if( sscanf(s, "%u:%u", &h, &m) != 2 ) return FALSE; + } + tim = (h * 60 + m) * 30 + (d / 2); + if( !tim ) tim++; + sp->btime = WORD(tim); + } + } + else if( Key == "%EHHMM" ){ + if( *s ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->etime = WORD(tim); + } + } + else if( (Key == "%EHH:MM")||(Key == "%EHH:MM:SS") ){ + if( *s ){ + if( sscanf(s, "%u:%u:%u", &h, &m, &d ) != 3 ){ + d = 0; + if( sscanf(s, "%u:%u", &h, &m) != 2 ) return FALSE; + } + tim = (h * 60 + m) * 30 + (d / 2); + if( !tim ) tim++; + sp->etime = WORD(tim); + } + } + else if( Key == "%CALL" ){ + if( sp->call[0] ){ + char bf[256]; + sprintf(bf, "%s/%s", sp->call, s); + StrCopy(sp->call, bf, MLCALL); + } + else { + StrCopy(sp->call, s, MLCALL); + } + } + else if( Key == "%M" ){ + sp->send = *s; + } + else if( (Key == "%HIS")||(Key == "%HISRST") ){ + StrCopy(sp->ur, s, MLRST); + } + else if( (Key == "%MY")||(Key=="%MYRST") ){ + StrCopy(sp->my, s, MLRST); + } + else if( Key == "%FREQ" ){ + Log.SetFreq(sp, s); + } + else if( Key == "%MBAND" ){ + mBandToBand(sp, s); + } + else if( Key == "%KHZ" ){ + double dd; + sscanf(s, "%lf", &dd); + char bf[32]; + sprintf(bf, "%.03lf", dd / 1000.0); + Log.SetFreq(sp, bf); + } + else if( Key == "%MODE" ){ + Log.SetMode(sp, s); + } + else if( Key == "%POWER" ){ + StrCopy(sp->pow, s, MLPOW); + } + else if( Key == "%NAME" ){ + StrCopy(sp->name, s, MLNAME); + } + else if( Key == "%QTH" ){ + StrCopy(sp->qth, s, MLQTH); + } + else if( Key == "%REM" ){ + StrCopy(sp->rem, s, MLREM); + } + else if( Key == "%QSL" ){ + StrCopy(sp->qsl, s, MLQSL); + } + else if( Key == "%S" ){ + sp->send = *s; + } + else if( Key == "%R" ){ + sp->recv = *s; + } + else if( Key == "%ENV" ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + sp->env = WORD(d); + } + else if( Key == "%OPT1" ){ + StrCopy(sp->opt1, s, MLOPT); + } + else if( Key == "%OPT2" ){ + StrCopy(sp->opt2, s, MLOPT); + } + else if( Key == "%USR1" ){ + Log.SetOptStr(2, sp, s); + } + else if( Key == "%USR2" ){ + Log.SetOptStr(3, sp, s); + } + else if( (Key != "%EOD")&&(Key != "%NULL") ){ + if( Key != s ){ + return FALSE; + } + } + return TRUE; +} +//--------------------------------------------------------------------------- +// 1行の入力変換 +int CLogText::Text2MMLOG(SDMMLOG *sp, LPSTR p, int &err) +{ + char bf[512]; + char dlm = m_Delm ? TAB : ','; + LPSTR t; + + memset(sp, 0, sizeof(SDMMLOG)); + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + if( (!m_rConv[i].Key.IsEmpty())&&(m_rConv[i].Key != "%EOD") ){ + if( m_Delm == 2 ){ + StrCopy(bf, p, m_rConv[i].w); + p += strlen(bf); + t = bf; + } + else { + p = StrDlm(t, p, dlm); + } + clipsp(t); + t = SkipSpace(t); + if( ::Text2MMLOG(sp, t, m_rConv[i].Key ) == FALSE ){ + if( !err ){ + ErrorMB(MsgEng ? "An error occurred with conversion type [%s]." : "変換式[%s]でエラーが発生しました.", m_rConv[i].Key.c_str() ); + } + err++; + } + } + else { + break; + } + } + if( !sp->etime ) sp->etime = sp->btime; + if( m_UTC ) UTCtoJST(sp); + return err ? FALSE : TRUE; +} +// +// +//*************************************************************************** +// CLog200 クラス +CLog200::CLog200() +{ + m_Type = 1; + m_err = 0; +} +//--------------------------------------------------------------------------- +// LOG200ファイルのオープン +int CLog200::Open(LPCSTR pName) +{ + Close(); + m_Index = 0; + m_err = 0; + + m_fp = fopen(pName, "rb"); + if( m_fp != NULL ){ + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB("'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// LOG200ファイルの作成 +int CLog200::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + m_err = 0; + + int add = 0; + if( (m_fp = fopen(pName, "rb"))!=NULL ){ + fclose(m_fp); + m_fp = NULL; + add = 1; + char BackName[256]; + strcpy(BackName, pName); + SetEXT(BackName, ".BAK"); + int r = YesNoCancelMB( "'%s'は既に存在しています.\r\nMMTTYはこのファイルにデータを追加します.\r\n\r\n" + "この操作を実行する前に元のログファイルのバックアップファイル\r\n\r\n" + "'%s' -> '%s'\r\n\r\nを作成しますか?\r\n\r\n" + "[重要]\r\n念のためにバックアップを作成する事をお勧めします.", pName, pName, BackName); + if( r == IDYES ){ + CWaitCursor w; + if( ::CopyFile(pName, BackName, FALSE) == FALSE ){ + ErrorMB("バックアップの作成に失敗しました.\r\nこの処理は中断されます.元のログファイルは変更されません."); + return FALSE; + } + } + else if( r == IDCANCEL ){ + return FALSE; + } + } + m_fp = fopen(pName, add ? "ab":"wb"); + if( m_fp != NULL ){ + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB( "'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// LOG200ファイルのクローズ +int CLog200::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB("'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB("'%s'への追加を終了しました.", m_FileName.c_str()); + } + } + return r ? FALSE : TRUE; +} +//--------------------------------------------------------------------------- +// LOG200 -> MMLOG フォーマットの変換 +void LOG200toMMLOG(SDMMLOG *sp, LPSTR s) +{ + LPSTR t; + int y, m, d, h, tim; + char bf[256]; + + memset(sp, 0, sizeof(SDMMLOG)); + s = StrDlm(t, s, 0x1e); /* DATE */ + y = atoin(t, 2); t += 2; + m = atoin(t, 2); t += 2; + d = atoin(t, 2); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + + s = StrDlm(t, s, 0x1e); /* BGN */ + d = atoin(t, 4); + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->btime = WORD(tim); + + s = StrDlm(t, s, 0x1e); /* END */ + d = atoin(t, 4); + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->etime = WORD(tim); + + s = StrDlm(t, s, 0x1e); /* CALL */ + clipsp(t); + StrCopy(sp->call, t, MLCALL); + + s = StrDlm(t, s, 0x1e); /* FREQ */ + if( LastC(t) == '.' ){ + *lastp(t) = 0; + } + Log.SetFreq(sp, t); + + s = StrDlm(t, s, 0x1e); /* MODE */ + Log.SetMode(sp, t); + + s = StrDlm(t, s, 0x1e); /* RST */ + clipsp(t); + StrCopy(sp->ur, t, MLRST); + + s = StrDlm(t, s, 0x1e); /* MyRST*/ + clipsp(t); + StrCopy(sp->my, t, MLRST); + + s = StrDlm(t, s, 0x1e); /* QTH */ + clipsp(t); + StrCopy(sp->qth, t, MLQTH); + + s = StrDlm(t, s, 0x1e); /* NAME */ + clipsp(t); + StrCopy(sp->name, t, MLNAME); + + s = StrDlm(t, s, 0x1e); /* RIG */ + clipsp(t); + LPSTR pRIG = t; + + s = StrDlm(t, s, 0x1e); /* CONTEST */ + clipsp(t); + LPSTR pContest = t; + + s = StrDlm(t, s, 0x1e); /* Rem */ + clipsp(t); + + if( (strlen(sp->call) == 15) && (RemoveL2(bf, t, "CALL", sizeof(bf)-1) == TRUE) ){ + StrCopy(sp->call, bf, MLCALL); + } + if( RemoveL2(bf, t, "POW", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->pow, bf, MLPOW); + } + if( RemoveL2(bf, t, "ENV", sizeof(bf)-1) == TRUE ){ + sp->env = WORD(atoin(bf, -1)); + } + if( RemoveL2(bf, t, "M", sizeof(bf)-1) == TRUE ){ + sp->cq = bf[0]; + } + if( RemoveL2(bf, t, "OPT1", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->opt1, bf, MLOPT); + } + if( RemoveL2(bf, t, "OPT2", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->opt2, bf, MLOPT); + } + if( RemoveL2(bf, t, "USR1", sizeof(bf)-1) == TRUE ){ + Log.SetOptStr(2, sp, bf); + } + if( RemoveL2(bf, t, "USR2", sizeof(bf)-1) == TRUE ){ + Log.SetOptStr(3, sp, bf); + } + if( RemoveL2(bf, t, "MQSL", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->qsl, bf, MLQSL); + } + clipsp(t); + t = SkipSpace(t); + StrCopy(sp->rem, t, MLREM); + + s = StrDlm(t, s, 0x1e); /* MyQTH*/ + if( *t ) AddL2(sp->qsl, "MyQTH", t, '[', ']', MLQSL); + + s = StrDlm(t, s, 0x1e); /* MyRig*/ + if( *t ) AddL2(sp->qsl, "MyRIG", t, '[', ']', MLQSL); + + s = StrDlm(t, s, 0x1e); /* Send */ + sp->send = *t; + StrDlm(t, s, 0x1e); /* Recv */ + sp->recv = *t; + + if( *pRIG ) AddL2(sp->qsl, "RIG", pRIG, '[', ']', MLQSL); + if( *pContest ) AddL2(sp->qsl, "TEST", pContest, '[', ']', MLQSL); +} +//--------------------------------------------------------------------------- +// LOG200ファイルの読み出し +int CLog200::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + if( fread(m_bf, 1, 200, m_fp) == 200 ){ + LOG200toMMLOG(sp, m_bf); + m_Index++; + return TRUE; + } + else { + return FALSE; + } +} + +//--------------------------------------------------------------------------- +// MMLOG -> LOG200フォーマット変換 +void MMLOGtoLOG200(LPSTR t, SDMMLOG *sp, int &err) +{ + LPSTR s = t; + int h, m; + char bf[256]; + + memset(t, ' ', 200); + // YYMMDD + sprintf(t, "%02u%02u%02u\x1e", sp->year, sp->date / 100, sp->date % 100); + t += strlen(t); + // BGN(HHMM) + h = sp->btime / 1800; + m = (sp->btime % 1800) / 30; + sprintf(t, "%02u%02u\x1e", h, m); + t += strlen(t); + // END + h = sp->etime / 1800; + m = (sp->etime % 1800) / 30; + sprintf(t, "%02u%02u\x1e", h, m); + t += strlen(t); + // CALL + StrCopy(t, sp->call, 15); // 15文字に制限されている + t += strlen(t); + *t++ = 0x1e; + // FREQ + sprintf(bf, "%s", Log.GetFreqString(sp->band, sp->fq)); + if( bf[0] ){ + double dd; + if( sscanf(bf, "%lf", &dd) == 1 ){ + sprintf(bf, "%.3lf", dd); + } + } + strcpy(t, bf); + t += strlen(t); + *t++ = 0x1e; + // MODE + sprintf(t, "%s\x1e", Log.GetModeString(sp->mode)); + t += strlen(t); + // HisRST + sprintf(t, "%s\x1e", sp->ur); + t += strlen(t); + // MyRST + sprintf(t, "%s\x1e", sp->my); + t += strlen(t); + // QTH + sprintf(t, "%s\x1e", sp->qth); + t += strlen(t); + // NAME + sprintf(t, "%s\x1e", sp->name); + t += strlen(t); + // RIG + if( RemoveL2(bf, sp->qsl, "Rig", sizeof(bf)-1) == TRUE ){ + strcpy(t, bf); + } + *t++ = 0x1e; + // CONTEST + if( RemoveL2(bf, sp->qsl, "TEST", sizeof(bf)-1) == TRUE ){ + strcpy(t, bf); + } + *t++ = 0x1e; + char MyRig[200]; + char MyQTH[200]; + MyRig[0] = MyQTH[0] = 0; + if( RemoveL2(bf, sp->qsl, "MyRig", sizeof(bf)-1) == TRUE ){ + strcpy(MyRig, bf); + } + if( RemoveL2(bf, sp->qsl, "MyQTH", sizeof(bf)-1) == TRUE ){ + strcpy(MyQTH, bf); + } + clipsp(sp->qsl); + LPSTR p = SkipSpace(sp->qsl); + + // REM + strcpy(bf, sp->rem); + char bbf[128]; + if( strlen(sp->call) > 11 ){ + AddL2(bf, "CALL", sp->call, '[', ']', MLQSL); + } + if( sp->cq ){ + bbf[0] = sp->cq; bbf[1] = 0; + AddL2(bf, "M", bbf, '[', ']', MLQSL); + } + if( sp->pow[0] ) AddL2(bf, "POW", sp->pow, '[', ']', MLQSL); + if( sp->env ){ + sprintf(bbf, "%u", sp->env); + AddL2(bf, "ENV", bbf, '[', ']', MLQSL); + } + if( sp->opt1[0] ) AddL2(bf, "OPT1", sp->opt1, '[', ']', MLQSL); + if( sp->opt2[0] ) AddL2(bf, "OPT2", sp->opt2, '[', ']', MLQSL); + LPCSTR pp = Log.GetOptStr(2, sp); + if( *pp ) AddL2(bf, "USR1", pp, '[', ']', MLQSL); + pp = Log.GetOptStr(3, sp); + if( *pp ) AddL2(bf, "USR2", pp, '[', ']', MLQSL); + + if( *p ) AddL2(bf, "MQSL", p, '[', ']', MLQSL); + int len = (t - s) + strlen(bf) + 1 + strlen(MyQTH) + 1 + strlen(MyRig) + 1 + 2; + if( len >= 199 ){ + if( !err ){ + err++; + WarningMB("変換した結果がLOG200レコード長を越えました.\r\n\r\nリマークフィールドの長さを調整します."); + } + len -= 199; + bf[strlen(bf)-len] = 0; + } + + sprintf(t, "%s\x1e", bf); + t += strlen(t); + + // MyQTH + sprintf(t, "%s\x1e", MyQTH); + t += strlen(t); + // MyRIG + sprintf(t, "%s\x1e", MyRig); + t += strlen(t); + // S + if( sp->send ) *t++ = sp->send; + *t++ = 0x1e; + // R + if( sp->recv ) *t++ = sp->recv; + *t = 0x1e; + + s[198] = '\r'; s[199] = '\n'; +} +//--------------------------------------------------------------------------- +// LOG200ファイルの書きこみ +int CLog200::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + MMLOGtoLOG200(m_bf, sp, m_err); + if( fwrite(m_bf, 1, 200, m_fp) != 200 ){ + ErrorMB("'%s'に書き込み中にエラーが発生しました.", m_FileName.c_str()); + return FALSE; + } + else { + m_Index++; + return TRUE; + } +} +// +// +//*************************************************************************** +// CHamLog クラス +//--------------------------------------------------------------------------- +CHamLog::CHamLog() +{ + m_Type = 2; + m_err = 0; + + m_DBRName = ""; // DBRファイルの名前 + m_dbrfp = NULL; // DBRファイルのファイルポインタ +} +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// HamLogファイルのオープン +int CHamLog::Open(LPCSTR pName) +{ + Close(); + m_Index = 0; + m_err = 0; + m_Mode = 0; + + m_fp = fopen(pName, "rb"); // DBSのオープン + + if( m_fp == NULL ){ + ErrorMB( "'%s'がオープンできません.", pName); + return FALSE; + } + m_FileName = pName; + if( (fread(&m_hd, 1, sizeof(m_hd), m_fp)!=sizeof(m_hd)) || + (m_hd.Memo != 0x1a) || + (m_hd.HeadLen != 449) || + (m_hd.DataLen != sizeof(m_RecBuf)) + ){ + fclose(m_fp); + m_fp = NULL; + ErrorMB("予期しないファイル形式です."); + return FALSE; + } + char dbrName[256]; + strcpy(dbrName, pName); + SetEXT(dbrName, ".DBR"); + m_DBRName = dbrName; + m_dbrfp = fopen(dbrName, "rb"); + if( m_dbrfp == NULL ){ + WarningMB( "'%s'がオープンできません.", dbrName); + } + else if( fread(&m_dbrhd, 1, sizeof(m_dbrhd), m_dbrfp)!=sizeof(m_dbrhd) ){ + ErrorMB( "'%s'が正常に読みこめません. 処理を中断します.", dbrName); + fclose(m_fp); + m_fp = NULL; + fclose(m_dbrfp); + m_dbrfp = NULL; + return FALSE; + } + + if( Seek(0) == FALSE ){ + Close(); + ErrorMB("最初のレコードが見つかりません."); + return FALSE; + } + return TRUE; +} + +int CHamLog::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + if( m_Mode ){ // 書きこみ + fseek(m_fp, 0, SEEK_SET); + if( fwrite(&m_hd, 1, sizeof(m_hd), m_fp) != sizeof(m_hd) ) r = 1; + } + if( fclose(m_fp) ) r = 1;; + m_fp = NULL; + } + if( m_dbrfp != NULL ){ + if( m_Mode ){ + fseek(m_dbrfp, 0, SEEK_SET); + if( fwrite(&m_dbrhd, 1, sizeof(m_dbrhd), m_dbrfp) != sizeof(m_dbrhd) ) r = 1; + } + if( fclose(m_dbrfp) ) r = 1; + m_dbrfp = NULL; + } + if( r ){ + ErrorMB("ファイルのクローズに失敗しました."); + } + else if( m_Mode ){ + InfoMB("'%s'への追加を終了しました.", m_FileName.c_str()); + } + return r ? FALSE : TRUE; +} + +//---------------------------------------------------------------------- +int CHamLog::Seek(DWORD Index) +{ + long Pos = 449 + (Index * sizeof(m_RecBuf)); + if( fseek(m_fp, Pos, SEEK_SET) ) return FALSE; + m_Index = Index; + return TRUE; +} + +//--------------------------------------------------------------------------- +// HamLogファイルの読み出し +int CHamLog::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + Seek(m_Index); + if( fread(&m_RecBuf, 1, sizeof(m_RecBuf), m_fp) == sizeof(m_RecBuf) ){ + HAMLOGtoMMLOG(sp, &m_RecBuf, m_dbrfp); + m_Index++; + return TRUE; + } + else { + return FALSE; + } +} +//---------------------------------------------------------------------- +//HAMLOGの周波数記録方式を通常の文字列に変換 +void DecBand(LPSTR t, BYTE *pBand) +{ + if( pBand[3] & 0x80 ){ // 5〜7文字の文字列 + int DotPos = pBand[3] & 0x7f; + int Len = (DotPos >> 3) & 0x07; + DotPos &= 0x07; + LPSTR p = t; + wsprintf(p, "%-7lu", (*((LONG *)pBand) & 0x00ffffffL)); + if( Len < 4 ){ // Ver3.19までの記録方式 + for(int i = 6; i > 3; i--){ + if(p[i]>'0'){ + break; + } + else if(p[i] == '0'){ + p[i] = ' '; + } + } + } + else { + if( Len < 6 ) p[6] = ' '; + if( Len == 4 ) p[5] = ' '; + } + p[DotPos] = '.'; + p[8] = 0; + } + else { // そのまま + StrCopy(t, (LPCSTR)pBand, 4); + } + clipsp(t); + if( LastC(t) == '.' ){ + *lastp(t) = 0; + } +} + +void SetMMLOGKey(SDMMLOG *sp, LPSTR bf) +{ + char rbf[512]; + + if( RemoveL2(rbf, bf, "ToRadio", sizeof(rbf)-1) == TRUE ){ + StrCopy(sp->call, rbf, MLCALL); + } + else if( RemoveL2(rbf, bf, "CALL", sizeof(rbf)-1) == TRUE ){ + StrCopy(sp->call, rbf, MLCALL); + } + + if( RemoveL2(rbf, bf, "ENV", sizeof(rbf)-1) == TRUE ){ + sp->env = WORD(atoin(rbf, -1)); + } + if( RemoveL2(rbf, bf, "END", sizeof(rbf)-1) == TRUE ){ + int tim = atoin(rbf, -1); + int hh = tim / 100; + int mm = tim % 100; + sp->etime = WORD((hh * 60 + mm) * 30); + if( !sp->etime ) sp->etime++; + } + if( RemoveL2(rbf, bf, "POW", sizeof(rbf)-1) == TRUE ){ + StrCopy(sp->pow, rbf, MLPOW); + } + if( RemoveL2(rbf, bf, "M", sizeof(rbf)-1) == TRUE ){ + sp->cq = rbf[0]; + } + if( RemoveL2(rbf, bf, "SN", sizeof(rbf)-1) == TRUE ){ + strcat(sp->ur, rbf); + } + if( RemoveL2(rbf, bf, "RN", sizeof(rbf)-1) == TRUE ){ + strcat(sp->my, rbf); + } +} +//--------------------------------------------------------------------------- +// HamLog -> MMLOG フォーマットの変換 +void HAMLOGtoMMLOG(SDMMLOG *sp, SDHAMLOG *hp, FILE *dbrfp) +{ + int CallOrder = 0; + char bf[512]; + + memset(sp, 0, sizeof(SDMMLOG)); + DecBand(bf, (BYTE *)hp->freq); + Log.SetFreq(sp, bf); + + StrCopy(bf, hp->mode, 3); + clipsp(bf); + if( !strcmp(bf, Log.m_LogSet.m_THRTTY.c_str()) || !strcmp(bf, "RTY") || !strcmp(bf, "TTY") || !strcmp(bf, "RTT") ){ + strcpy(bf, "RTTY"); + } + else if( !strcmp(bf, Log.m_LogSet.m_THSSTV.c_str()) || !strcmp(bf, "STV")|| !strcmp(bf, "SST") ){ + strcpy(bf, "SSTV"); + } + else if( !strcmp(bf, "FTV") ){ + strcpy(bf, "FSTV"); + } + Log.SetMode(sp, bf); + + StrCopy(sp->name, hp->name, 12); + clipsp(sp->name); + + sprintf(sp->ur, "%02u", BYTE(hp->hiss[0])); + if( hp->hiss[1] != ' ' ) sp->ur[2] = hp->hiss[1]; + + sprintf(sp->my, "%02u", BYTE(hp->myrs[0])); + if( hp->myrs[1] != ' ' ) sp->my[2] = hp->myrs[1]; + + int YY, MM, DD, HH, mm; + YY = hp->date[0] & 0x007f; + YY %= 100; + MM = hp->date[1]; + DD = hp->date[2]; + HH = hp->time[0]; + mm = hp->time[1] & 0x7f; + if( hp->time[1] & 0x80 ){ + UTCtoJST(YY, MM, DD, HH); + } + sp->year = BYTE(YY); + sp->date = WORD(MM * 100 + DD); + sp->btime = WORD(((HH * 60 + mm) * 30)); + if(!sp->btime) sp->btime++; + + if( hp->ofs && (dbrfp != NULL) ){ + FHDDBR fhdbr; + if( fseek(dbrfp, hp->ofs, SEEK_SET) ) goto _ex; + if( fread(&fhdbr, 1, sizeof(fhdbr), dbrfp) != sizeof(fhdbr) ){ + goto _ex; + } + if( fhdbr.LenQTH ){ + if( fread(bf, 1, fhdbr.LenQTH, dbrfp)!=size_t(fhdbr.LenQTH) ){ + goto _ex; + } + bf[fhdbr.LenQTH] = 0; + clipsp(bf); + StrCopy(sp->qth, bf, MLQTH); + } + if( fhdbr.LenREM1 ){ + if( fread(bf, 1, fhdbr.LenREM1, dbrfp)!=size_t(fhdbr.LenREM1) ){ + goto _ex; + } + bf[fhdbr.LenREM1] = 0; + SetMMLOGKey(sp, bf); + clipsp(bf); + if( strstr(bf, "$DX" ) != NULL ) CallOrder = 1; + StrCopy(sp->rem, SkipSpace(bf), MLREM); + } + if( fhdbr.LenREM2 ){ + if( fread(bf, 1, fhdbr.LenREM2, dbrfp)!=size_t(fhdbr.LenREM2) ){ + goto _ex; + } + bf[fhdbr.LenREM2] = 0; + SetMMLOGKey(sp, bf); + clipsp(bf); + if( strstr(bf, "$DX" ) != NULL ) CallOrder = 1; + StrCopy(sp->qsl, SkipSpace(bf), MLQSL); + } + } +_ex:; + sprintf(bf, "QSL[%.3s]", hp->qsl); + Log.SetOptStr(2, sp, bf); + if( hp->qsl[0] == 'N' ){ + sp->send = 'N'; + } + else if( hp->send[0] == ' ' ){ // 未発送 + if( (hp->qsl[0] == 'J')||(hp->qsl[0] == ' ') ){ + sp->send = 0; + } + else { + sp->send = BYTE(tolower(hp->qsl[0])); + } + } + else { // 発送済み + sp->send = BYTE(toupper(hp->send[0])); + } + sp->recv = hp->rcv[0]; + if( sp->recv == ' ' ) sp->recv = 0; + + StrCopy(sp->opt1, hp->code, 6); + StrCopy(sp->opt2, hp->glid, 6); + + if( !sp->call[0] ){ + if( CallOrder && (hp->potbl[0] != ' ') ){ /* KH6/JE3HHTの形式 */ + StrCopy(bf, hp->potbl, 3); + clipsp(bf); + strcat(sp->call, bf); + if( sp->call[0] ) strcat(sp->call, "/"); + StrCopy(bf, hp->calls, 7); + clipsp(bf); + strcat(sp->call, bf); + } + else { /* JE3HHT/KH6の形式 */ + StrCopy(bf, hp->calls, 7); + clipsp(bf); + strcat(sp->call, bf); + if( hp->potbl[0] != ' ' ){ + if( sp->call[0] ) strcat(sp->call, "/"); + StrCopy(bf, hp->potbl, 3); + clipsp(bf); + strcat(sp->call, bf); + } + } + } + if( !sp->etime ) sp->etime = sp->btime; +} +//---------------------------------------------------------------------- +//文字列のコピー(ヌルはセットされない) +void SpaceCopy(LPSTR t, LPCSTR s, int n) +{ + for( ; n && *s; s++, t++, n-- ){ + *t = *s; + } +} +//---------------------------------------------------------------------- +//RST文字列をHAMLOG形式に変換して格納 +void SetRST(char *pRST, LPCSTR p, BYTE mode) +{ + char rs[3]; + int rst; + + StrCopy(rs, p, 2); + if( sscanf(rs, "%d", &rst) == 1 ){ + *pRST = BYTE(rst); + } + else { + *pRST = 59; + } + if( strlen(p) < 3 ) return; + if( GetLMode(mode) == 2 ) return; + pRST[1] = *(p+2); +} +//---------------------------------------------------------------------- +//周波数の文字列をHAMLOGの周波数記録方式に変換 +void EncBand(BYTE *pBand, LPCSTR pStr) +{ + char bf[32]; + StrCopy(bf, pStr, 7); + + int Len = strlen(bf); + if( Len <= 4 ){ + memset(pBand, ' ', 4); + SpaceCopy(LPSTR(pBand), bf, 4); + } + else { + LPSTR p = strchr(bf, '.'); + int DotPos; + if( p != NULL ){ + DotPos = p - bf; + *p = '0'; + } + else { + DotPos = Len; + } + long Freq; + sscanf(bf, "%lu", &Freq); + *(ULONG *)pBand = Freq; + pBand[3] = BYTE(0x0080 | (Len << 3) | DotPos); + } +} + +void AddMMLOGKey(AnsiString &REM1, AnsiString &REM2, LPCSTR s, LPCSTR pKey) +{ + if( !*s ) return; + + int len1 = strlen(REM1.c_str()); + int len2 = strlen(REM2.c_str()); + int len = strlen(s); + if( pKey == NULL ){ + len++; + } + else { + len += strlen(pKey) + 3; + } + AnsiString *ap; + if( (len2 + len) < 54 ){ + ap = &REM2; + } + else if( (len1 + len) < 54 ){ + ap = &REM1; + } + else { + return; + } + if( !ap->IsEmpty() ){ + *ap += " "; + } + if( pKey != NULL ){ + *ap += pKey; + *ap += '['; + } + *ap += s; + if( pKey != NULL ){ + *ap += ']'; + } +} +//--------------------------------------------------------------------------- +// MMLOG -> HamLog フォーマットの変換 +int MMLOGtoHAMLOG(SDHAMLOG *hp, SDMMLOG *sp, FILE *dbrfp) +{ + char bf[512]; + + int CallOrder = FALSE; + memset(hp, ' ', sizeof(SDHAMLOG)); + int YY = sp->year; + int MM = sp->date / 100; + int DD = sp->date % 100; + int tim = sp->btime / 30; + int HH = tim / 60; + int mm = tim % 60; + switch(Log.m_LogSet.m_THTZ){ + case 0: + if( !IsJA(sp->call) ){ + JSTtoUTC(YY, MM, DD, HH); + mm |= 0x80; + } + break; + case 1: + JSTtoUTC(YY, MM, DD, HH); + mm |= 0x80; + break; + default: + break; + } + hp->date[0] = BYTE(YY < 50 ? YY + 128 : YY); + hp->date[1] = BYTE(MM); + hp->date[2] = BYTE(DD); + hp->time[0] = BYTE(HH); + hp->time[1] = BYTE(mm); + + SpaceCopy(hp->name, sp->name, 12); + SpaceCopy(hp->code, sp->opt1, 6); + SpaceCopy(hp->glid, sp->opt2, 6); + AnsiString QTH = sp->qth; + AnsiString REM1 = sp->rem; + AnsiString REM2 = sp->qsl; + + strcpy(bf, sp->call); + LPSTR pp, p2, t; + t = bf; + if( (pp = strchr(bf, '/')) != NULL ){ // KH6/JE3HHT or JE3HHT/KH6 の形式 + *pp = 0; + pp++; + int LenC = strlen(t); + int LenP = strlen(pp); + if( ((p2 = strchr(pp, '/')) != NULL)|| + (LenC > 7) || + (LenP > 7) || + ((LenC > LenP) && (LenP>3)) || + ((LenC < LenP) && (LenC>3)) + ){ + // HAMLOGでは表現できない表記の場合 + AddMMLOGKey(REM1, REM2, sp->call, "ToRadio"); + if( p2 != NULL ){ + *p2 = 0; + LenP = strlen(pp); + } + } + if( LenC < LenP ){ + p2 = t; + t = pp; + pp = p2; + CallOrder = TRUE; + } + SpaceCopy(hp->potbl, pp, 3); + } + else if( strlen(t) > 7 ){ + AddMMLOGKey(REM1, REM2, sp->call, "ToRadio"); + } + SpaceCopy(hp->calls, t, 7); + strcpy(bf, Log.GetModeString(sp->mode)); + if( !strcmp(bf, "RTTY") ){ + StrCopy(bf, Log.m_LogSet.m_THRTTY.c_str(), 3); + } + else if( !strcmp(bf, "SSTV") ){ + StrCopy(bf, Log.m_LogSet.m_THSSTV.c_str(), 3); + } + else if( !strcmp(bf, "FSTV") ){ + strcpy(bf, "FTV"); + } + else if( !strcmp(bf, "BPSK") ){ + strcpy(bf, "PSK"); + } + else if( !strcmp(bf, "QPSK") ){ + strcpy(bf, "PSK"); + } + SpaceCopy(hp->mode, bf, 3); + SetRST(hp->hiss, sp->ur, sp->mode); + SetRST(hp->myrs, sp->my, sp->mode); + + int l = GetLMode(sp->mode); + if( sp->ur[l] ) AddMMLOGKey(REM1, REM2, &sp->ur[l], "SN"); + if( sp->my[l] ) AddMMLOGKey(REM1, REM2, &sp->my[l], "RN"); + + strcpy(bf, Log.GetFreqString(sp->band, sp->fq)); + EncBand((BYTE *)hp->freq, bf); + + + if( CallOrder && (!strstr(sp->rem, "$DX")) && (!strstr(sp->qsl, "$DX")) ){ + AddMMLOGKey(REM1, REM2, "$DX", NULL); + } + + if( sp->etime ){ + tim = sp->etime / 30; + sprintf(bf, "%02u%02u", tim / 60, tim % 60); + AddMMLOGKey(REM1, REM2, bf, "END"); + } + if( sp->env ){ + sprintf(bf, "%u", sp->env); + AddMMLOGKey(REM1, REM2, bf, "ENV"); + } + AddMMLOGKey(REM1, REM2, sp->pow, "POW"); + if( sp->cq ){ + bf[0] = sp->cq; bf[1] = 0; + AddMMLOGKey(REM1, REM2, bf, "M"); + } + strcpy(bf, Log.GetOptStr(2, sp)); + char rbf[32]; + if(RemoveL2(rbf, bf, "QSL", sizeof(rbf)-1) == TRUE){ + hp->qsl[0] = rbf[0]; + hp->send[0] = rbf[1]; + hp->rcv[0] = rbf[2]; + } + else { + hp->rcv[0] = sp->recv; + if( !hp->rcv[0] ) hp->rcv[0] = ' '; + if( sp->send == 'N' ){ + hp->qsl[0] = 'N'; + hp->send[0] = ' '; + } + else if( !sp->send ){ + hp->qsl[0] = 'J'; + hp->send[0] = ' '; + } + else if( (sp->send >= 0x60)||(sp->send == '?') ){ + hp->qsl[0] = BYTE(toupper(sp->send)); + hp->send[0] = ' '; + } + else if( isalpha(sp->send) ){ + hp->qsl[0] = sp->send; + hp->send[0] = '*'; + } + else { + hp->qsl[0] = 'J'; + hp->send[0] = sp->send; + } + } + + if( !QTH.IsEmpty() || !REM1.IsEmpty() || !REM2.IsEmpty() ){ + FHDDBR fhdbr; + memset(&fhdbr, 0, sizeof(fhdbr)); + hp->ofs = ftell(dbrfp); + fhdbr.LenQTH = BYTE(strlen(QTH.c_str())); + fhdbr.LenREM1 = BYTE(strlen(REM1.c_str())); + fhdbr.LenREM2 = BYTE(strlen(REM2.c_str())); + if( fhdbr.LenQTH > 28 ){ + fhdbr.LenQTH = 28; + } + if( fhdbr.LenREM1 > 54 ){ + fhdbr.LenREM1 = 54; + } + if( fhdbr.LenREM2 > 54 ){ + fhdbr.LenREM2 = 54; + } + if( fwrite(&fhdbr, 1, sizeof(fhdbr), dbrfp) != sizeof(fhdbr) ) return FALSE; + if( fhdbr.LenQTH ){ + if( fwrite(QTH.c_str(), 1, fhdbr.LenQTH, dbrfp) != size_t(fhdbr.LenQTH) ) return FALSE; + } + if( fhdbr.LenREM1 ){ + if( fwrite(REM1.c_str(), 1, fhdbr.LenREM1, dbrfp) != size_t(fhdbr.LenREM1) ) return FALSE; + } + if( fhdbr.LenREM2 ){ + if( fwrite(REM2.c_str(), 1, fhdbr.LenREM2, dbrfp) != size_t(fhdbr.LenREM2) ) return FALSE; + } + } + else { + hp->ofs = 0L; + } + return TRUE; +} + +//*************************************************************************** +// CLogADIF クラス +CLogADIF::CLogADIF() +{ + m_bf[sizeof(m_bf)-1] = 0; +} +//--------------------------------------------------------------------------- +// ADIFファイルのオープン +int CLogADIF::Open(LPCSTR pName) +{ + Close(); + m_Mode = 0; + + m_p = NULL; + m_conv = 1; + m_fp = fopen(pName, "rt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB(MsgEng ? "Can't open '%s'": "'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// ADIFファイルの作成 +int CLogADIF::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + + m_fp = fopen(pName, "wt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 1; + fprintf(m_fp, "ADIF Export from %s\n", VERTTL); + fprintf(m_fp, "\n\n"); + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't write to '%s'":"'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogADIF::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB(MsgEng ? "Can't write to '%s'":"'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB(MsgEng ? "Done (write to '%s')":"'%s'への書きこみを終了しました.", m_FileName.c_str()); + } + } + return r ? FALSE : TRUE; +} +const char *_BandText[]={ + "","160m","80m","80m","40m","30m","20m","17m","15m","12m","10m","6m", + "2m","70cm","23cm","13cm","6cm","3cm","3cm","1.25cm","6mm", + "4mm","2mm","1mm","65m","1.25m",NULL, +}; +//--------------------------------------------------------------------------- +// ADIFファイルの読み出し +void CLogADIF::SetData(SDMMLOG *sp, LPCSTR pKey, LPSTR pData) +{ + int l; + + if( !strcmpi(pKey, "CALL") ){ + StrCopy(sp->call, pData, MLCALL); + } + else if( !strcmpi(pKey, "QSO_DATE") ){ + sp->year = BYTE(atoin(pData, 4) % 100); + sp->date = WORD(atoin(pData+4, 4)); + } + else if( !strcmpi(pKey, "TIME_ON") ){ + int hh, mm, ss; + hh = atoin(pData, 2); + mm = atoin(pData+2, 2); + ss = pData[4] ? atoin(pData+4, 2) : 0; + sp->btime = WORD((hh * 60 + mm) * 30 + ss); + if( !sp->btime ) sp->btime++; + } + else if( !strcmpi(pKey, "TIME_OFF") ){ + int hh, mm, ss; + hh = atoin(pData, 2); + mm = atoin(pData+2, 2); + ss = pData[4] ? atoin(pData+4, 2) : 0; + sp->btime = WORD((hh * 60 + mm) * 30 + ss); + if( !sp->etime ) sp->btime++; + } + else if( !strcmpi(pKey, "FREQ") ){ + Log.SetFreq(sp, pData); + } + else if( !strcmpi(pKey, "BAND") ){ + if( !sp->band ){ + int i; + for( i = 1; _BandText[i] != NULL; i++ ){ + if( !strcmpi(_BandText[i], pData) ) break; + } + if( _BandText[i] == NULL ) i = 0; + sp->band = BYTE(i); + } + } + else if( !strcmpi(pKey, "MODE") ){ + Log.SetMode(sp, pData); + } + else if( !strcmpi(pKey, "TX_PWR") ){ + StrCopy(sp->pow, pData, MLPOW); + } + else if( !strcmpi(pKey, "RST_SENT") ){ + if( sp->ur[0] ){ + char bf[MLRST+1]; + strcpy(bf, sp->ur); + StrCopy(sp->ur, pData, MLRST); + l = strlen(sp->ur); + StrCopy(&sp->ur[l], bf, MLRST - l); + } + else { + StrCopy(sp->ur, pData, MLRST); + } + } + else if( !strcmpi(pKey, "RST_RCVD") ){ + if( sp->my[0] ){ + char bf[MLRST+1]; + strcpy(bf, sp->my); + StrCopy(sp->my, pData, MLRST); + l = strlen(sp->my); + StrCopy(&sp->my[l], bf, MLRST - l); + } + else { + StrCopy(sp->my, pData, MLRST); + } + } + else if( !strcmpi(pKey, "STX") ){ + l = strlen(sp->ur); + StrCopy(&sp->ur[l], pData, MLRST - l); + } + else if( !strcmpi(pKey, "SRX") ){ + l = strlen(sp->my); + StrCopy(&sp->my[l], pData, MLRST - l); + } + else if( !strcmpi(pKey, "QSL_SENT") ){ + if( *pData == ' ' ) *pData = 0; + sp->send = *pData; + } + else if( !strcmpi(pKey, "QSL_RCVD") ){ + if( *pData == ' ' ) *pData = 0; + sp->recv = *pData; + } + else if( !strcmpi(pKey, "NAME") ){ + StrCopy(sp->name, pData, MLNAME); + } + else if( !strcmpi(pKey, "QTH") ){ + StrCopy(sp->qth, pData, MLQTH); + } + else if( !strcmpi(pKey, "COMMENT") ){ + StrCopy(sp->rem, pData, MLREM); + } + else if( !strcmpi(pKey, "QSLMSG") ){ + StrCopy(sp->qsl, pData, MLQSL); + } + else if( !strcmpi(pKey, "CONT") ){ + StrCopy(sp->opt2, pData, MLOPT); + } +} +//--------------------------------------------------------------------------- +void CLogADIF::AdjustData(SDMMLOG *sp) +{ + if( !sp->etime ) sp->etime = sp->btime; + UTCtoJST(sp); + if( sp->call[0] ){ + LPCSTR pCC = ClipCC(sp->call); + Log.SetOptStr(0, sp, Cty.GetCountry(pCC)); + if( !sp->opt2[0] ) Log.SetOptStr(1, sp, Cty.GetCont(pCC)); + } + if( !sp->ur[0] ) StrCopy(sp->ur, "599", GetLMode(sp->mode)); + if( !sp->my[0] ) StrCopy(sp->my, "599", GetLMode(sp->mode)); +} +//--------------------------------------------------------------------------- +// ADIFファイルの読み出し +int CLogADIF::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + LPSTR p, t, tt; + char bf[1024]; + + while(1){ + if( (m_p == NULL) || !(*m_p) ){ + if( !feof(m_fp) ){ + if( fgets(m_bf, sizeof(m_bf), m_fp) != NULL ){ + ClipLF(m_bf); + m_p = m_bf; + } + else if( sp->btime && sp->call[0] && m_conv ){ + AdjustData(sp); + m_p = NULL; + return TRUE; + } + else { + return FALSE; + } + } + else { + return FALSE; + } + } + m_p = SkipSpace(m_p); + if( *m_p == '<' ){ + m_p = StrDlm(p, m_p+1, '>'); + p = StrDlm(t, p, ':'); + p = StrDlm(tt, p, ':'); + bf[0] = 0; + int n = *tt ? atoin(tt, -1) : 0; + if( (n >= 0) && (n < 1023) && (n <= (int)strlen(m_p)) ){ + if( n ) memcpy(bf, m_p, n); + bf[n] = 0; + } + if( !strcmpi(t, "EOR") ){ + if( m_conv ){ + AdjustData(sp); + return TRUE; + } + } + if( !strcmpi(t, "EOH") ){ + m_conv = 1; + } + else if( m_conv ){ + SetData(sp, t, bf); +#if 0 + FILE *fp = fopen("F:\\TEST.TXT", "at"); + fprintf(fp, "%s:%s\n", t, bf); + fclose(fp); +#endif + m_p += n; + } + } + else if( *m_p ){ + m_p++; + } + } +} +//--------------------------------------------------------------------------- +void CLogADIF::OutF(int &col, FILE *fp, LPCSTR fmt, ...) +{ + va_list pp; + char bf[512]; + + va_start(pp, fmt); + vsprintf(bf, fmt, pp ); + va_end(pp); + if( col ){ + fputs(" ", fp); + col++; + } + int l = strlen(bf); + if( (col + l) > 80 ){ + fputs("\n", fp); + col = 0; + } + fputs(bf, fp); + col += l; +} +//--------------------------------------------------------------------------- +// 出力変換 +// +//KD4MUL 19930921 223558 150000 +//3.690 80M CW 100 599 +//599 Y N ROY STRUNK +//KY FIRST CW CONTACT WB4TXW +int CLogADIF::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + int col = 0; + JSTtoUTC(sp); + OutF(col, m_fp, "%s", strlen(sp->call), sp->call); + OutF(col, m_fp, "%04u%02u%02u", YEAR(sp->year), sp->date/100, sp->date%100); + int tim = sp->btime / 30; + OutF(col, m_fp, "%02u%02u%02u", tim/60, tim%60, (sp->btime % 30)*2); + tim = sp->etime / 30; + OutF(col, m_fp, "%02u%02u%02u", tim/60, tim%60, (sp->etime % 30)*2); + LPCSTR p = Log.GetFreqString(sp->band, sp->fq); + if( *p ) OutF(col, m_fp, "%s", strlen(p), p); + p = _BandText[sp->band]; + if( *p ) OutF(col, m_fp, "%s", strlen(p), p); + p = Log.GetModeString(sp->mode); + if( *p ) OutF(col, m_fp, "%s", strlen(p), p); + if( sp->pow[0] ) OutF(col, m_fp, "%s", strlen(sp->pow), sp->pow); + int l = GetLMode(sp->mode); + if( Log.m_LogSet.m_ClipRSTADIF ){ + if( sp->ur[l] ) OutF(col, m_fp, "%s", strlen(&sp->ur[l]), &sp->ur[l]); + if( sp->my[l] ) OutF(col, m_fp, "%s", strlen(&sp->my[l]), &sp->my[l]); + sp->ur[GetLMode(sp->mode)] = 0; + sp->my[GetLMode(sp->mode)] = 0; + } + if( sp->ur[0] ) OutF(col, m_fp, "%s", strlen(sp->ur), sp->ur); + if( sp->my[0] ) OutF(col, m_fp, "%s", strlen(sp->my), sp->my); + if( sp->send ) OutF(col, m_fp, "%c", sp->send); + if( sp->recv ) OutF(col, m_fp, "%c", sp->recv); + if( sp->name[0] ) OutF(col, m_fp, "%s", strlen(sp->name), sp->name); + if( sp->qth[0] ) OutF(col, m_fp, "%s", strlen(sp->qth), sp->qth); + if( sp->rem[0] ) OutF(col, m_fp, "%s", strlen(sp->rem), sp->rem); + if( sp->opt2[0] ) OutF(col, m_fp, "%s", strlen(sp->opt2), sp->opt2); + if( sp->qsl[0] ) OutF(col, m_fp, "%s", strlen(sp->qsl), sp->qsl); + OutF(col, m_fp, "\n"); + return ferror(m_fp) ? FALSE : TRUE; +} + + +//*************************************************************************** +// CLogCabrillo クラス +CLogCabrillo::CLogCabrillo() +{ + m_bf[sizeof(m_bf)-1] = 0; +} +//--------------------------------------------------------------------------- +// LogCabrilloファイルのオープン +int CLogCabrillo::Open(LPCSTR pName) +{ + Close(); + m_Mode = 0; + + m_p = NULL; + m_SNR = ""; + m_fp = fopen(pName, "rt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB(MsgEng ? "Can't open '%s'": "'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// LogCabrilloファイルの作成 +int CLogCabrillo::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + + m_fp = fopen(pName, "wt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 1; + fprintf( m_fp, "START-OF-LOG: 2.0\n"); + fprintf( m_fp, "ARRL-SECTION: \n" ); + fprintf( m_fp, "CONTEST: <== e.g. ARRL-RTTY, CQ-WW-RTTY, CQ-WPX-RTTY, BARTG-SPRINT, BARTG-RTTY\n"); + fprintf( m_fp, "CALLSIGN: %s\n", sys.m_Call.c_str() ); + fprintf( m_fp, "CATEGORY: <== e.g. SINGLE-OP ALL HIGH, SINGLE-OP-ASSISTED 20M LOW\n" ); + fprintf( m_fp, "CLAIMED-SCORE: \n"); + fprintf( m_fp, "OPERATORS:\n" ); + fprintf( m_fp, "CLUB:\n" ); + fprintf( m_fp, "NAME: <== your name\n" ); + fprintf( m_fp, "ADDRESS: <== your postal address\n" ); + fprintf( m_fp, "SOAPBOX: \n" ); + fprintf( m_fp, "CREATED-BY: %s\n", VERTTL2); + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't write to '%s'":"'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogCabrillo::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + fprintf(m_fp, "END-OF-LOG:\n"); + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB(MsgEng ? "Can't write to '%s'":"'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB(MsgEng ? "Done (write to '%s')\r\n\r\nMMSSTV did only make QSO section.\r\nEdit to the contest name, category, your name and address, etc... in the file.":"'%s'への書きこみを終了しました.\r\n\r\nMMSSTVはQSOセクションしか作成しません。\r\nコンテスト名、参加カテゴリ等を編集してください.", m_FileName.c_str()); + sprintf(m_bf, "NOTEPAD.EXE %s", m_FileName.c_str()); + WinExec(m_bf, SW_SHOWDEFAULT); + } + } + return r ? FALSE : TRUE; +} +//--------------------------------------------------------------------------- +// LogCabrilloファイルの読み出し +int CLogCabrillo::Read(SDMMLOG *sp) +{ + return FALSE; +} +//--------------------------------------------------------------------------- +// 出力変換 +// +int CLogCabrillo::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; +// "","1.9","3.5","3.8","7","10","14","18","21","24","28","50", +// "144","430","1200","2400","5600","10.1G","10.4G","24G","47G", +// "75G","142G","248G","4630","220",NULL, + const char *_bandc[]={ + "??","1800","3500","3500","7000","10000","14000","18000","21000","24000","28000", + "A", "B","D","E","F","H","I","J","K","M", + "N","P","R","?","C",NULL, + }; + +// "CW","SSB","AM","FM","RTTY","PAC","FAX","SSTV","ATV","TV","FSTV", +// "A1","A2","A3","A3A","A3H","A3J","A4","A5","A5C","A5J", +// "A9","A9C","F1","F2","F3","F4","F5","F9","P0","P1", +// "P2D","P2E","P2F","P3D","P3E","P3F","P9", +// "U1","U2","U3","U4", +// "PSK","BPSK","QPSK","HELL","MFSK", + const char *_modec[]={ + "??", + "CW","PH","PH","FM","RY","RY","??","TV","TV","TV","TV", + "CW","CW","PH","PH","PH","PH","??","??","??","??", + "??","??","RY","RY","FM","??","??","??", + "??","??","??","??","??","??","??","??","??", + "??","??","??","??", + "RY","RY","RY","CW","RY", + NULL, + }; + + JSTtoUTC(sp); + int tim = sp->btime / 30; + char SNO[MLRST+1]; + char RNO[MLRST+1]; + int mno = sp->mode >= MODEMAX ? 0 : sp->mode; + int len = GetLMode(BYTE(mno)); + strcpy(SNO, &sp->ur[len]); + strcpy(RNO, &sp->my[len]); + sp->ur[len] = 0; + sp->my[len] = 0; + fprintf( m_fp, "QSO:%6s %2s %04u-%02u-%02u %02u%02u %-13s %-3s %-6s %-13s %-3s %-6s\n", + _bandc[sp->band], _modec[mno], + (sp->year <= 50) ? sp->year + 2000 : sp->year + 1900, + sp->date / 100, sp->date % 100, + tim/60, tim%60, sys.m_Call.c_str(), + sp->ur, SNO, + sp->call, sp->my, RNO + ); + return ferror(m_fp) ? FALSE : TRUE; +} + + \ No newline at end of file diff --git a/JASTA/LogConv.h b/JASTA/LogConv.h new file mode 100644 index 0000000..2523670 --- /dev/null +++ b/JASTA/LogConv.h @@ -0,0 +1,228 @@ +//--------------------------------------------------------------------------- +#ifndef LogConvH +#define LogConvH +#include "LogFile.h" + +extern const char *MONT1[]; +extern const char *MONT2[]; +extern const char *_BandText[]; +//************************************************************* +// ログ変換の基本クラス +// +class CLogConv +{ +protected: + int m_Type; // 0-TEXT, 1-LOG200, 2-HAMLOG, 3-DBASE + int m_Mode; // 0-Read, 1-Write + FILE *m_fp; + + AnsiString m_FileName; // 変換中のファイル名 +public: + CLogConv(); + virtual ~CLogConv(); + virtual int IsOpen(void){return m_fp != NULL ? 1 : 0;}; + virtual int Open(LPCSTR pName)=0; + virtual int Create(LPCSTR pName)=0; + virtual int Close(void)=0; + virtual int Read(SDMMLOG *sp)=0; + virtual int Write(SDMMLOG *sp)=0; +}; + +#define TEXTCONVMAX 64 +typedef struct { + int w; + AnsiString Key; +}TCONV; + +//************************************************************* +// テキストファイルアクセスのクラス +// +class CLogText : public CLogConv +{ +public: + int m_Double; + int m_Delm; + TCONV m_rConv[TEXTCONVMAX]; + TCONV m_tConv[TEXTCONVMAX]; + int m_UTC; + int m_err; +protected: + char m_bf[2048]; // ファイルバッファ + +private: + int Text2MMLOG(SDMMLOG *sp, LPSTR p, int &err); + void MMLOG2Text(LPSTR t, SDMMLOG *sp); + +public: + CLogText(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); + +}; + +void MMLOG2Text(LPSTR t, SDMMLOG *sp, AnsiString &Key); +int Text2MMLOG(SDMMLOG *sp, LPCSTR s, AnsiString &Key); +extern const LPCSTR ConvTbl[]; +extern CLogText LogText; + +//************************************************************* +// LOG200ファイルアクセスのクラス +// +#define LOG200WIDTH 200 +class CLog200 : public CLogConv +{ +public: + int m_Index; + int m_err; +protected: + char m_bf[200]; // ファイルバッファ +private: +public: + CLog200(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); +}; + +//************************************************************* +// HAMLOGファイルアクセスのクラス +// +#pragma option -a- // パックの指示 +typedef struct { + char Memo; // 03h=メモフィールド無し 83h=メモフィールド有り(HAMLOGでは 1Ah) + char YY, MM, DD; // 最終更新年月日 + long Max; // レコード件数 + WORD HeadLen; // ヘッダの長さ(HAMLOG.DBSは 449) + WORD DataLen; // レコードの長さ(HAMLOG.DBSは 58) + char dummy[20]; // 00h +}DBSHD; + +typedef struct { + char Memo; // 03h=メモフィールド無し 83h=メモフィールド有り(HAMLOGでは 1Ah) + char YY, MM, DD; // 最終更新年月日 + long Max; // レコード件数 + char dm1; + char m1; // 01h + char dm2; + char dummy[21]; // 00h + char dummy2[255-32]; // 00h + char term; // 1ah +}DBRHD; + +typedef struct { + char Name[11]; + BYTE Type; + BYTE dm1[4]; + BYTE Len; + BYTE dm2[15]; +}DBSLOT; + +typedef struct { + char del[1]; /* 削除マーク */ + char calls[7]; /* コールサイン */ + char potbl[3]; /* 移動エリア */ + char code[6]; /* JCCコード */ + char glid[6]; /* グリッドロケーター */ + char freq[4]; /* 周波数 */ + char mode[3]; /* モード */ + char name[12]; /* 氏名 */ + char qsl [1]; /* QSL via */ + char send[1]; /* QSL SEND */ + char rcv[1]; /* QSL RCV */ + char date[3]; /* 日付 */ + char time[2]; /* 時間 */ + char hiss[2]; /* HIS RST */ + char myrs[2]; /* MY RST */ + long ofs; /* HAMLOG.DBR オフセットアドレス */ +}SDHAMLOG; + +typedef struct { /* DBRのフィールド位置データ */ + BYTE LenQTH; + BYTE LenREM1; + BYTE LenREM2; +}FHDDBR; +#pragma option -a. // パック解除の指示 + +class CHamLog : public CLogConv +{ +public: + int m_Index; + int m_err; +protected: + DBSHD m_hd; // DBSヘッダ + SDHAMLOG m_RecBuf; // レコードバッファ + + AnsiString m_DBRName; // DBRファイルの名前 + FILE *m_dbrfp; // DBRファイルのファイルポインタ + DBRHD m_dbrhd; // DBRヘッダ +private: + int Seek(DWORD Index); + +public: + CHamLog(); + virtual int Create(LPCSTR pName){return FALSE;}; + virtual int Open(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp){return FALSE;}; +}; + +void HAMLOGtoMMLOG(SDMMLOG *sp, SDHAMLOG *hp, FILE *dbrfp); +int MMLOGtoHAMLOG(SDHAMLOG *hp, SDMMLOG *sp, FILE *dbrfp); +void AddMMLOGKey(AnsiString &REM1, AnsiString &REM2, LPCSTR s, LPCSTR pKey); + +//************************************************************* +// ADIFアクセスのクラス +// +class CLogADIF : public CLogConv +{ +public: +protected: + char m_bf[1024]; // ファイルバッファ + LPSTR m_p; + int m_conv; +private: + void MMLOG2ADIF(LPSTR t, SDMMLOG *sp); + void SetData(SDMMLOG *sp, LPCSTR pKey, LPSTR pData); + void AdjustData(SDMMLOG *sp); + void OutF(int &col, FILE *fp, LPCSTR fmt, ...); + +public: + CLogADIF(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); + +}; + +//************************************************************* +// Cabrillo アクセスのクラス +// +class CLogCabrillo : public CLogConv +{ +public: +protected: + char m_bf[1024]; // ファイルバッファ + LPSTR m_p; + AnsiString m_SNR; +private: + void MMLOG2Cabrillo(LPSTR t, SDMMLOG *sp); + void AdjustData(SDMMLOG *sp); + +public: + CLogCabrillo(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); +}; + +#endif diff --git a/JASTA/LogFile.cpp b/JASTA/LogFile.cpp new file mode 100644 index 0000000..09a4ff7 --- /dev/null +++ b/JASTA/LogFile.cpp @@ -0,0 +1,1541 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include +#include +#include +#include "LogFile.h" +#include "Main.h" +CLogFile Log; + + +const char *_mBand[]={ + "","160","80","75","40","30","20","17","15","12","10","6", + "2","430","1200","2400","5600","10.1G","10.4G","24G","47G", + "75G","142G","248G","4630","220","SAT", NULL, +}; +const char *_band[]={ + "","1.9","3.5","3.8","7","10","14","18","21","24","28","50", + "144","430","1200","2400","5600","10.1G","10.4G","24G","47G", + "75G","142G","248G","4630","220","SAT", NULL, +}; +static const char *_mode[]={ + "", + "CW","SSB","AM","FM","RTTY","PAC","FAX","SSTV","ATV","TV","FSTV", + "A1","A2","A3","A3A","A3H","A3J","A4","A5","A5C","A5J", + "A9","A9C","F1","F2","F3","F4","F5","F9","P0","P1", + "P2D","P2E","P2F","P3D","P3E","P3F","P9", + "U1","U2","U3","U4", + "PSK","BPSK","QPSK","HELL","MFSK", + NULL, +}; +const char lmode[]={ + 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, + 3, 3, 3, 3, 3, +}; +const char MONN[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; +const char MONU[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; +//--------------------------------------------------------------------------- +// CIndexクラス +int GetLMode(BYTE m) +{ + if( m < MODEMAX ){ + return lmode[m]; + } + else { + return 3; + } +} +//--------------------------------------------------------------------------- +// CIndexクラス +CIndex::CIndex() +{ + m_IndexMax = 0; // 確保中のインデックスの数 + m_IndexCnt = 0; // 現在のインデックスの数 + pIndex = NULL; // インデックス領域のポインタ(16バイトインデックス) + pMult = NULL; +} +CIndex::~CIndex() +{ + if( pIndex != NULL ){ + delete pIndex; + pIndex = NULL; + } + if( pMult != NULL ){ + delete pMult; + pMult = NULL; + } +} +void CIndex::AllocIndex(int n) +{ + if( n >= m_IndexMax ){ + int max = m_IndexMax ? (m_IndexMax * 2) : 32768; + LPSTR np = new char[16*max]; + if( pIndex != NULL ){ + memcpy(np, pIndex, m_IndexCnt*16); + delete pIndex; + } + pIndex = np; + m_IndexMax = max; + } +} + +void CIndex::ClearIndex(void) +{ + m_IndexCnt = 0; +} + +void CIndex::WriteIndex(LPCSTR pCall, int n) +{ + AllocIndex(n); + memcpy(&pIndex[n*16], pCall, 16); + if( n >= m_IndexCnt ) m_IndexCnt = n + 1; +} + +void CIndex::ReadIndex(LPSTR pCall, int n) +{ + memcpy(pCall, &pIndex[n*16], 16); + pCall[16] = 0; +} + +LPSTR CIndex::PointIndex(int n) +{ + return &pIndex[n*16]; +} + +void CIndex::AddBlock(LPCSTR p, int len) +{ + int n = len/16; + AllocIndex(n + m_IndexCnt); + memcpy(&pIndex[m_IndexCnt*16], p, len); + m_IndexCnt += n; +} +//--------------------------------------------------------------------------- +int CIndex::ReadIndex(int handle, FHD *hp) +{ + int r = TRUE; + int BUFSIZE=32768; + + CWaitCursor w; + if( lseek(handle, (hp->size * (ULONG)sizeof(SDMMLOG)) + FHDOFF, SEEK_SET) != -1L ){ + if( hp->hash != 2 ){ // 16バイトインデックスと異なる + if( hp->hash ){ // 2バイトインデックスのスキップ + lseek(handle, hp->size * 2, SEEK_CUR); + } + r = FALSE; + } + else { // 16バイトインデックス + LPSTR bp = new char[BUFSIZE]; + int len = hp->size * 16; + int rlen, wlen; + while(len){ + rlen = (len > BUFSIZE) ? BUFSIZE : len; + wlen = read(handle, bp, rlen); + if( rlen != wlen ){ + r = FALSE; + break; + } + AddBlock(bp, wlen); + len -= wlen; + } + delete bp; + } + if( pMult == NULL ) pMult = new BYTE[32768]; + read(handle, pMult, hp->mlt); + } + else { + r = FALSE; + } + return r; +} + +void CIndex::MakeIndex(int handle, FHD *hp) +{ + CWaitCursor w; + + lseek(handle, (ULONG)FHDOFF, SEEK_SET); + ClearIndex(); + + FHD fh; + memset(&fh, 0, sizeof(fh)); + + int i, rlen; + SDMMLOG sd; + for( i = 0; i < hp->size; i++ ){ + rlen = read(handle, &sd, sizeof(sd)); + if( rlen != sizeof(sd) ) break; + WriteIndex(sd.call, i); + if( sd.mode >= MODEMAX ){ + int m = sd.mode - MODEMAX; + int f = 0; + int n; + char sbf[7]; + StrCopy(sbf, hp->mode[m], 6); + for( n = 0; (n < UMODEMAX) && fh.mode[n][0] ; n++ ){ + char tbf[7]; + StrCopy(tbf, fh.mode[n], 6); + if( !strcmp(sbf, tbf) ){ + if( m != n ){ + f++; + sd.mode = BYTE(n + MODEMAX); + break; + } + } + } + if( !fh.mode[n][0] ){ + StrCopy(fh.mode[n], sbf, 6); + if( m != n ){ + sd.mode = BYTE(n + MODEMAX); + f++; + } + } + if( f ){ + lseek( handle, -long(sizeof(sd)), SEEK_CUR); + write(handle, &sd, sizeof(sd)); + } + } + } + memcpy(hp->mode, fh.mode, sizeof(fh.mode)); + lseek( handle, (hp->size * (ULONG)sizeof(SDMMLOG)) + FHDOFF, SEEK_SET); + hp->hash = 2; // 16バイトインデックス +} + +//--------------------------------------------------------------------------- +int CIndex::WriteIndex(int handle, FHD *hp) +{ + int r = TRUE; + int BUFSIZE=32768; + + CWaitCursor w; + + if( lseek(handle, (hp->size * (ULONG)sizeof(SDMMLOG)) + FHDOFF, SEEK_SET) != -1L ){ + hp->hash = 2; + int len = hp->size * 16; + int vlen, wlen; + LPSTR cp = pIndex; + while(len){ + wlen = (len > BUFSIZE) ? BUFSIZE : len; + vlen = write(handle, cp, wlen); + if( wlen != vlen ) r = FALSE; + len -= vlen; + cp += vlen; + } + if( pMult != NULL ){ + write(handle, pMult, hp->mlt); + } + } + else { + r = FALSE; + } + return r; +} + +//--------------------------------------------------------------------------- +// CLogFindクラス +CLogFind::CLogFind() +{ + m_FindCnt = 0; + pFindTbl = new int[FINDMAX]; +} +//--------------------------------------------------------------------------- +CLogFind::~CLogFind() +{ + delete pFindTbl; + pFindTbl = NULL; +} +//--------------------------------------------------------------------------- +int CLogFind::Add(int n) +{ + if( m_FindCnt >= FINDMAX ) return 0; + + for( int i = 0; i < m_FindCnt; i++ ){ + if( pFindTbl[i] == n ) return 0; + } + pFindTbl[m_FindCnt] = n; + m_FindCnt++; + return 1; +} +//--------------------------------------------------------------------------- +void CLogFind::Ins(int n) +{ + if( m_FindCnt >= FINDMAX ) return; + + int i; + for( i = 0; i < m_FindCnt; i++ ){ + if( pFindTbl[i] == n ) return; + } + for( i = m_FindCnt - 1; i > 0; i-- ){ + pFindTbl[i] = pFindTbl[i-1]; + } + pFindTbl[0] = n; + m_FindCnt++; + m_FindCmp1Max++; + m_FindCmp2Max++; + m_FindStr1Max++; + m_FindStr2Max++; +} +//--------------------------------------------------------------------------- +// CLogFileクラス +CLogFile::CLogFile() +{ + memset(&m_sd, 0, sizeof(SDMMLOG)); + memset(&m_bak, 0, sizeof(SDMMLOG)); + + m_Open = 0; // オープンフラグ + m_EditFlag = 0; + m_Handle = 0; + m_ReadOnly = 0; + memset(&m_fhd, 0, sizeof(m_fhd)); // 現在オープン中のファイルヘッダ + MakePathName("TEMP.MDT"); + m_CurNo = 0; + + // LogSet のデフォルト + + m_LogSet.m_TimeZone = 'I'; // JA + + m_LogSet.m_UpperName = 0; // 大文字への変換 + m_LogSet.m_UpperQTH = 0; // 大文字への変換 + m_LogSet.m_UpperREM = 0; // 大文字への変換 + m_LogSet.m_UpperQSL = 0; // 大文字への変換 + + m_LogSet.m_DefMyRST = 0; // 0-OFF, 1-ON + + m_LogSet.m_CopyFreq = 1; // 0-Band, 1-Freq + m_LogSet.m_CopyHis = 0; // 0-599, 1-599001, 2-599UTC + m_LogSet.m_CopyName = 1; // 0-OFF, 1-ON + m_LogSet.m_CopyQTH = 1; // 0-OFF, 1-ON + m_LogSet.m_CopyREM = 0; // 0-OFF, 1-ON + m_LogSet.m_CopyQSL = 0; // 0-OFF, 1-ON + + m_LogSet.m_AutoSave = 0; + m_LogSet.m_CheckBand = 1; + + m_LogSet.m_THRTTY = "RTY"; + m_LogSet.m_THSSTV = "STV"; + m_LogSet.m_THTZ = 0; + m_LogSet.m_ClipRSTADIF = 1; + m_LogSet.m_DateType = 0; +} + +CLogFile::~CLogFile() +{ + Close(); +} + +void CLogFile::ReadIniFile(LPCSTR pKey, TIniFile *pIniFile) +{ + m_LogSet.m_DateType = pIniFile->ReadInteger(pKey, "DateType", m_LogSet.m_DateType); + m_LogSet.m_TimeZone = (char)pIniFile->ReadInteger(pKey, "TimeZone", m_LogSet.m_TimeZone); + + m_LogSet.m_UpperName = pIniFile->ReadInteger(pKey, "UpperName", m_LogSet.m_UpperName); + m_LogSet.m_UpperQTH = pIniFile->ReadInteger(pKey, "UpperQTH", m_LogSet.m_UpperQTH); + m_LogSet.m_UpperREM = pIniFile->ReadInteger(pKey, "UpperREM", m_LogSet.m_UpperREM); + m_LogSet.m_UpperQSL = pIniFile->ReadInteger(pKey, "UpperQSL", m_LogSet.m_UpperQSL); + + m_LogSet.m_DefMyRST = pIniFile->ReadInteger(pKey, "DefMyRST", m_LogSet.m_DefMyRST); + + m_LogSet.m_CopyFreq = pIniFile->ReadInteger(pKey, "CopyFreq", m_LogSet.m_CopyFreq); + m_LogSet.m_CopyHis = pIniFile->ReadInteger(pKey, "CopyHis", m_LogSet.m_CopyHis); + m_LogSet.m_CopyName = pIniFile->ReadInteger(pKey, "CopyName", m_LogSet.m_CopyName); + m_LogSet.m_CopyQTH = pIniFile->ReadInteger(pKey, "CopyQTH", m_LogSet.m_CopyQTH); + m_LogSet.m_CopyREM = pIniFile->ReadInteger(pKey, "CopyREM", m_LogSet.m_CopyREM); + m_LogSet.m_CopyQSL = pIniFile->ReadInteger(pKey, "CopyQSL", m_LogSet.m_CopyQSL); + + m_LogSet.m_CheckBand = pIniFile->ReadInteger(pKey, "CheckBand", m_LogSet.m_CheckBand); + + m_LogSet.m_AutoSave = pIniFile->ReadInteger(pKey, "AutoSave", m_LogSet.m_AutoSave); + m_LogSet.m_THRTTY = pIniFile->ReadString(pKey, "THRTTY", m_LogSet.m_THRTTY); + m_LogSet.m_THSSTV = pIniFile->ReadString(pKey, "THSSTV", m_LogSet.m_THSSTV); + m_LogSet.m_THTZ = pIniFile->ReadInteger(pKey, "THTZ", m_LogSet.m_THTZ); + m_LogSet.m_ClipRSTADIF = pIniFile->ReadInteger(pKey, "ClipRSTADIF", m_LogSet.m_ClipRSTADIF); +} + +void CLogFile::WriteIniFile(LPCSTR pKey, TIniFile *pIniFile) +{ + pIniFile->WriteInteger(pKey, "TimeZone", m_LogSet.m_TimeZone); + pIniFile->WriteInteger(pKey, "DateType", m_LogSet.m_DateType); + + pIniFile->WriteInteger(pKey, "UpperName", m_LogSet.m_UpperName); + pIniFile->WriteInteger(pKey, "UpperQTH", m_LogSet.m_UpperQTH); + pIniFile->WriteInteger(pKey, "UpperREM", m_LogSet.m_UpperREM); + pIniFile->WriteInteger(pKey, "UpperQSL", m_LogSet.m_UpperQSL); + + pIniFile->WriteInteger(pKey, "DefMyRST", m_LogSet.m_DefMyRST); + + pIniFile->WriteInteger(pKey, "CopyFreq", m_LogSet.m_CopyFreq); + pIniFile->WriteInteger(pKey, "CopyHis", m_LogSet.m_CopyHis); + pIniFile->WriteInteger(pKey, "CopyName", m_LogSet.m_CopyName); + pIniFile->WriteInteger(pKey, "CopyQTH", m_LogSet.m_CopyQTH); + pIniFile->WriteInteger(pKey, "CopyREM", m_LogSet.m_CopyREM); + pIniFile->WriteInteger(pKey, "CopyQSL", m_LogSet.m_CopyQSL); + + pIniFile->WriteInteger(pKey, "CheckBand", m_LogSet.m_CheckBand); + + pIniFile->WriteInteger(pKey, "AutoSave", m_LogSet.m_AutoSave); + pIniFile->WriteString(pKey, "THRTTY", m_LogSet.m_THRTTY); + pIniFile->WriteString(pKey, "THSSTV", m_LogSet.m_THSSTV); + pIniFile->WriteInteger(pKey, "THTZ", m_LogSet.m_THTZ); + pIniFile->WriteInteger(pKey, "ClipRSTADIF", m_LogSet.m_ClipRSTADIF); +} + +void CLogFile::MakeIndex(void) +{ + if( !m_Open ) return; + + m_Index.MakeIndex(m_Handle, &m_fhd); + m_EditFlag = 1; +} + +void CLogFile::MakePathName(LPCSTR pName) +{ + char bf[256]; + + m_Name = pName; + sprintf(bf, "%s%s", LogDir, pName); + SetEXT(bf, ".MDT"); + m_FileName = bf; +} + +void CLogFile::MakeName(LPCSTR pPathName) +{ + if( pPathName != m_FileName.c_str() ) m_FileName = pPathName; + + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pPathName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + strncpy(LogDir, Dir.c_str(), 128); + + m_Name = name; + m_Name += ext; +} + +int CLogFile::Close(void) +{ + int r = TRUE; + if( m_Open ){ + if( m_EditFlag && (!m_ReadOnly) ){ + if( m_fhd.size ){ + SDMMLOG sd; + + GetData(&sd, m_fhd.size - 1); + if( !sd.date || !sd.btime ){ + DeleteLast(); + } + } + chsize(m_Handle, (m_fhd.size * (ULONG)sizeof(SDMMLOG))+(ULONG)FHDOFF ); + m_Index.WriteIndex(m_Handle, &m_fhd); // インデックスの格納 + lseek(m_Handle, 0L, SEEK_SET); + if( write( m_Handle, &m_fhd, sizeof(m_fhd) ) != sizeof(m_fhd) ){ + ErrorFWrite(m_FileName.c_str()); + r = FALSE; + } + } + if( close(m_Handle) ){ + if( r != FALSE ){ + ErrorFWrite(m_FileName.c_str()); + r = FALSE; + } + } + if( !m_fhd.size && (!m_ReadOnly) ) unlink(m_FileName.c_str()); // 0件の時は消去 + m_Open = 0; + } + m_EditFlag = 0; + m_Index.ClearIndex(); + return r; +} + +int CLogFile::Open(LPCSTR pName, int enbwrt) +{ + m_ReadOnly = enbwrt ? 0 : 1; + Close(); + if( pName == NULL ) pName = m_FileName.c_str(); + int f = 0; + if( IsFile(pName) ){ + f = 1; + } + else { + ::Sleep(1000); + } + int OFLAG, SFLAG; + if( m_ReadOnly ){ + OFLAG = O_RDONLY|O_BINARY; + SFLAG = S_IREAD; + } + else { + OFLAG = O_RDWR|O_BINARY|O_CREAT; + SFLAG = S_IREAD|S_IWRITE; + } + if( (m_Handle = open(pName, OFLAG, SFLAG)) > 0 ){ + if( read(m_Handle, &m_fhd, sizeof(m_fhd)) == sizeof(m_fhd) ){ + if( !strcmp(m_fhd.id, MMLOGID) ){ + if( m_Index.ReadIndex(m_Handle, &m_fhd) != TRUE ){ + m_Index.MakeIndex(m_Handle, &m_fhd); + } + m_Open = 1; + MakeName(pName); + m_Find.Clear(); + SetLastPos(); + memcpy(&m_asd, &m_sd, sizeof(m_asd)); + return TRUE; + } + else { + close(m_Handle); + ErrorMB("'%s' is not a correct format.", pName); + } + } + else if( f ){ // 既存のフィアル + close(m_Handle); + ErrorMB("'%s' is not a correct format.", pName); + } + else if( !m_ReadOnly ){ /* 新規ファイル */ + memset(&m_fhd, 0, sizeof(m_fhd)); + strcpy(m_fhd.id, MMLOGID); + m_fhd.size = 0L; + m_fhd.mlt = 0; + if( write(m_Handle, &m_fhd, sizeof(m_fhd)) != sizeof(m_fhd) ){ + close(m_Handle); + ErrorMB("Cannot open '%s'.", pName); + } + else { + m_Open = 1; + MakeName(pName); + m_Index.ClearIndex(); + m_Find.Clear(); + SetLastPos(); + memcpy(&m_asd, &m_sd, sizeof(m_asd)); + return TRUE; + } + } + else { + close(m_Handle); + ErrorMB("Cannot open '%s'.", pName); + return FALSE; + } + } + else if( f && (GetFileAttributes(pName) & FILE_ATTRIBUTE_READONLY) ){ + ErrorMB("'%s' is read-only.", pName); + } + else { + ErrorMB("Cannot open '%s'.", pName); + } + return FALSE; +} + +void CLogFile::InitCur(void) +{ + SetLastPos(); +} + +void CLogFile::SetLastPos(void) +{ + m_CurNo = m_fhd.size; + memset(&m_sd, 0, sizeof(SDMMLOG)); + + int n = m_CurNo - 1; + if( n >= 0 ){ + SDMMLOG sd; + + GetData(&sd, n); + if( !sd.etime ){ + m_CurNo = n; + memcpy(&m_sd, &sd, sizeof(SDMMLOG)); + } + } + else { +#if 0 + if( lcid != LANG_JAPANESE ){ + m_sd.band = B_14; + m_sd.fq = 230; + } + else { + m_sd.band = B_7; + m_sd.fq = 33; + } +#else + m_sd.band = B_14; + m_sd.fq = 230; +#endif + m_sd.mode = 8; + m_sd.env = 1; + } + CopyAF(); + m_CurChg = 0; +} + +int CLogFile::GetData(SDMMLOG *sp, int n) +{ + if( !m_Open || (n >= m_fhd.size) ){ + memset(sp, 0, sizeof(SDMMLOG)); + if( !n ){ + m_sd.band = B_14; + m_sd.mode = 5; + } + return FALSE; + } + if( lseek(m_Handle, (ULONG)FHDOFF + ((ULONG)n * (ULONG)sizeof(SDMMLOG)), SEEK_SET) == -1L ){ + memset(sp, 0, sizeof(SDMMLOG)); + return FALSE; + } + if( read( m_Handle, sp, sizeof(SDMMLOG) ) != sizeof(SDMMLOG) ){ + memset(sp, 0, sizeof(SDMMLOG)); + return FALSE; + } + else { + return TRUE; + } +} + +int CLogFile::PutData(SDMMLOG *sp, int n) +{ + if( m_ReadOnly ) return FALSE; + if( !m_Open ){ + if( m_FileName.IsEmpty() ){ + ErrorMB("ログファイルの名前が定義されていません."); + return FALSE; + } + if( Open(m_FileName.c_str(), TRUE) != TRUE ) return FALSE; + } + if( lseek(m_Handle, (ULONG)FHDOFF + ((ULONG)n * (ULONG)sizeof(SDMMLOG)), SEEK_SET) == -1L ){ + ErrorFWrite(m_FileName.c_str()); + return FALSE; + } + if( write( m_Handle, sp, sizeof(SDMMLOG) ) != sizeof(SDMMLOG) ){ + ErrorFWrite(m_FileName.c_str()); + return FALSE; + } + else { + m_EditFlag = 1; + if( m_CurNo == n ) m_CurChg = 1; + if( n >= m_fhd.size ) m_fhd.size = n + 1; + m_Index.WriteIndex(sp->call, n); + } + return TRUE; +} + +LPCSTR CLogFile::GetOptStr(int n, SDMMLOG *sp) +{ + switch(n){ + case 0: + return sp->opt1; + case 1: + return sp->opt2; + case 2: + if( !sp->ur[MLRST-MLOPT-1] && sp->ur[MLRST-MLOPT] ){ + return &sp->ur[MLRST-MLOPT]; + } + else { + return ""; + } + case 3: + if( !sp->my[MLRST-MLOPT-1] && sp->my[MLRST-MLOPT] ){ + return &sp->my[MLRST-MLOPT]; + } + else { + return ""; + } + default: + return ""; + } +} + +void CLogFile::SetOptStr(int n, SDMMLOG *sp, LPCSTR pOpt) +{ + switch(n){ + case 0: + StrCopy(sp->opt1, pOpt, MLOPT); + jstrupr(sp->opt1); + break; + case 1: + StrCopy(sp->opt2, pOpt, MLOPT); + jstrupr(sp->opt2); + break; + case 2: + if( *pOpt ){ + StrCopy(&sp->ur[MLRST-MLOPT], pOpt, MLOPT); + jstrupr(&sp->ur[MLRST-MLOPT]); + sp->ur[MLRST-MLOPT-1] = 0; + } + else if( !sp->ur[MLRST-MLOPT-1] ){ + sp->ur[MLRST-MLOPT] = 0; + } + break; + case 3: + if( *pOpt ){ + StrCopy(&sp->my[MLRST-MLOPT], pOpt, MLOPT); + jstrupr(&sp->my[MLRST-MLOPT]); + sp->my[MLRST-MLOPT-1] = 0; + } + else if( !sp->my[MLRST-MLOPT-1] ){ + sp->my[MLRST-MLOPT] = 0; + } + break; + default: + break; + } +} + +void CLogFile::SetHisRST(SDMMLOG *sp) +{ + int n, tim; + + switch(m_LogSet.m_CopyHis){ + case 0: + if( sp == NULL ){ + strcpy(m_sd.ur, "595"); + } + else { + strcpy(m_sd.ur, sp->ur); + memcpy(m_sd.ur, "595", 3); + } + break; + case 1: + if( sp == NULL ){ + strcpy(m_sd.ur, "595001"); + } + else { + if( sp->ur[0] ){ + n = atoin(&sp->ur[3], -1); + } + else { + n = 0; + } + n++; + if( n >= 10000 ){ + sprintf(m_sd.ur, "595%04u", n); + } + else { + sprintf(m_sd.ur, "595%03u", n); + } + } + break; + case 2: + if( m_sd.btime ){ + tim = m_sd.btime / 30; + if( tim >= (9 * 60) ){ + tim -= 9 * 60; + } + else { + tim += 15 * 60; + } + sprintf(m_sd.ur, "595%02u%02u", tim/60, tim%60); + } + break; + } +} + +void CLogFile::CopyAF(void) +{ + int n = m_CurNo - 1; + if( n >= 0 ){ + SDMMLOG sd; + GetData(&sd, n); + if( !m_sd.band ){ + m_sd.band = sd.band; + if( m_LogSet.m_CopyFreq ){ + m_sd.fq = sd.fq; + } + else { + m_sd.fq = 0; + } + } + if( !m_sd.env ){ + m_sd.env = sd.env; + } + if( !m_sd.pow[0] ){ + strcpy(m_sd.pow, sd.pow); + } + if( !m_sd.ur[0] ){ + SetHisRST(&sd); + } + } + else { + if( !m_sd.band ){ + m_sd.band = B_14; + m_sd.fq = 0; + } + if( !m_sd.env ){ + m_sd.env = 1; + } + if( !m_sd.ur[0] ){ + SetHisRST(NULL); + } + } + if( !m_sd.mode ) m_sd.mode = 8; // SSTV + if( m_LogSet.m_DefMyRST ){ + if( !m_sd.my[0] ){ + strcpy(m_sd.my, "595"); + } + } +} + +static int _cmpdate(SDMMLOG *s, SDMMLOG *t) +{ + int r = YEAR(s->year) - YEAR(t->year); + if( r ) return r; + r = s->date - t->date; + if( r ) return r; + return s->btime - t->btime; +} + +void CLogFile::SortDate(int bb, int eb) +{ + int gap, i, j, em; + SDMMLOG sd1, sd2; + + if( eb >= m_fhd.size ) eb = m_fhd.size - 1; + CWaitCursor w; + if( bb != eb ){ + em = eb - bb; + for( gap = (em + 1)/2; gap > 0; gap /= 2 ){ + for( i = gap; i <= em; i++ ){ + for( j = i - gap; j >= 0; j -= gap ){ + GetData(&sd1, bb+j); + GetData(&sd2, bb+j+gap); + if( _cmpdate(&sd1, &sd2) <= 0 ) break; + PutData(&sd1, bb+j+gap); + PutData(&sd2, bb+j); + } + } + } + } + m_EditFlag = 1; +} + +int CLogFile::FindSameBand(void) +{ + if( !m_sd.call[0] ) return 0; + char call[MLCALL+1]; + SDMMLOG sd; + + int i; + for( i = 0; i < m_Find.GetCount(); i++ ){ + m_Index.ReadIndex(call, m_Find.pFindTbl[i]); + if( !strcmp(call, m_sd.call) ){ + GetData(&sd, m_Find.pFindTbl[i]); + if( (sd.band == m_sd.band)&&(sd.mode == m_sd.mode) ) return 1; + } + } + return 0; +} + +int CLogFile::FindSameDate(SYSTEMTIME *pUTC) +{ + if( !m_sd.call[0] ) return 0; + char call[MLCALL+1]; + SDMMLOG sd; + + int i; + for( i = 0; i < m_Find.GetCount(); i++ ){ + m_Index.ReadIndex(call, m_Find.pFindTbl[i]); + if( !strcmp(call, m_sd.call) ){ + GetData(&sd, m_Find.pFindTbl[i]); + JSTtoUTC(&sd); + int yy = sd.year + 2000; + int mm = sd.date / 100; + int dd = sd.date % 100; + if( (sd.mode == 8) && (sd.band >= B_14) && (yy == pUTC->wYear) && (mm == pUTC->wMonth) && (dd == pUTC->wDay) ) return 1; + } + } + return 0; +} + +void CLogFile::FindStrSet(CLogFind *fp, LPCSTR pCall) +{ + if( !*pCall ) return; + if( fp->GetCount() >= FINDMAX ) return; + char call[MLCALL+1]; + + int i; + for( i = m_fhd.size - 1; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( strstr(call, pCall)!=NULL ){ + fp->Add(i); + if( fp->GetCount() >= FINDMAX ) break; + } + } +} + +int CLogFile::FindCmpSet(CLogFind *fp, LPCSTR pCall) +{ + if( fp->GetCount() >= FINDMAX ) return 0; + char call[MLCALL+1]; + + int i; + for( i = m_fhd.size - 1; i >= 0; i-- ){ + if( *pCall ){ + m_Index.ReadIndex(call, i); + if( !strcmp(call, pCall) ){ + fp->Write(i); + } + } + else { + fp->Write(i); + } + if( fp->GetCount() >= FINDMAX ) break; + } + return fp->GetCount(); +} + +int CLogFile::FindClipSet(CLogFind *fp, LPCSTR pCall) +{ + if( !*pCall ) return 0; + if( fp->GetCount() >= FINDMAX ) return 0; + char call[MLCALL+1]; + + int i; + for( i = m_fhd.size - 1; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( !strcmp(ClipCall(call), pCall) ){ + fp->Add(i); + } + if( fp->GetCount() >= FINDMAX ) break; + } + return fp->GetCount(); +} + +int CLogFile::FindSet(CLogFind *fp, LPCSTR pCall) +{ + fp->SetText(pCall); + fp->Clear(); + int r = FindCmpSet(fp, pCall); + fp->m_FindCmp1Max = fp->m_FindCnt; + char clipcall[MLCALL+1]; + strcpy(clipcall, ClipCall(pCall)); + if( FindClipSet(fp, clipcall) ){ + r = 1; + } + fp->m_FindCmp2Max = fp->m_FindCnt; + FindStrSet(fp, pCall); + fp->m_FindStr1Max = fp->m_FindStr2Max = fp->m_FindCnt; + if( strcmp(pCall, clipcall) ){ + FindStrSet(fp, clipcall); + fp->m_FindStr2Max = fp->m_FindCnt; + } + return r; +} + +int CLogFile::Find(LPCSTR pCall, int b, int dir) +{ + if( !m_fhd.size ) return -1; + char call[MLCALL+1]; + + int i; + if( dir ){ + for( i = b; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( strstr(call, pCall) != NULL ) return i; + } + } + else { + for( i = b; i < m_fhd.size; i++ ){ + m_Index.ReadIndex(call, i); + if( strstr(call, pCall) != NULL ) return i; + } + } + return -1; +} + +int CLogFile::IsAlready(LPCSTR pCall) +{ + if( !m_fhd.size ) return -1; + char call[MLCALL+1]; + + for( int i = m_CurNo; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( !strcmp(call, pCall) ) return i; + } + return -1; +} + +void CLogFile::DeleteAll(void) +{ + m_fhd.size = 0; + m_CurNo = m_fhd.size; + m_CurChg = 1; + m_EditFlag = 1; +} + +void CLogFile::DeleteLast(void) +{ + if( m_fhd.size ){ + m_fhd.size--; + } + m_CurNo = m_fhd.size; + m_CurChg = 1; + m_EditFlag = 1; +} + +void CLogFile::Delete(int top, int end) +{ + if( !m_fhd.size ) return; + + if( end >= (m_fhd.size - 1) ){ // 最後まで削除する場合 + m_fhd.size = top; + m_CurNo = m_fhd.size; + } + else { // 途中を削除する場合 + int i, j; + SDMMLOG sd; + for( i = top, j = end + 1; j < m_fhd.size; i++, j++ ){ + GetData(&sd, j); + PutData(&sd, i); + } + m_fhd.size -= end - top + 1; + m_CurNo = m_fhd.size; + } + SetLastPos(); + m_CurChg = 1; + m_EditFlag = 1; +} + +void CLogFile::Insert(int n, SDMMLOG *sp) +{ + if( n >= m_fhd.size ){ // 最終位置の場合は追加と同じ + PutData(sp, n); + m_CurNo++; + } + else { // 途中を削除する場合 + int i, j; + SDMMLOG sd; + i = m_fhd.size; + j = i - 1; + for( ; i > n; i--, j-- ){ + GetData(&sd, j); + PutData(&sd, i); + } + PutData(sp, n); + m_CurNo++; + m_CurChg = 0; + } + m_EditFlag = 1; +} + +LPCSTR CLogFile::GetDateString(SDMMLOG *sp, int sw) +{ + static char bf[12]; + + if( sp->date ){ + switch(sw){ + case 1: // yyyy-mm-dd + sprintf(bf, "%04u.%02u.%02u", YEAR(sp->year), sp->date/100, sp->date%100); + break; + case 2: // dd-mm-yy + sprintf(bf, "%02u.%02u.%02u", sp->date%100, sp->date/100, sp->year); + break; + case 3: // dd-mm-yyyy + sprintf(bf, "%02u.%02u.%04u", sp->date%100, sp->date/100, YEAR(sp->year)); + break; + case 4: // mm-dd-yy + sprintf(bf, "%02u.%02u.%02u", sp->date/100, sp->date%100, sp->year); + break; + case 5: // mm-dd-yyyy + sprintf(bf, "%02u.%02u.%04u", sp->date/100, sp->date%100, YEAR(sp->year)); + break; + default: // yy-mm-dd + sprintf(bf, "%02u.%02u.%02u", sp->year, sp->date/100, sp->date%100); + break; + } + } + else { + bf[0] = 0; + } + return bf; +} + +LPCSTR CLogFile::GetTimeString(WORD d) +{ + static char bf[8]; + + if( d ){ + d = WORD(d / 30); + sprintf(bf, "%02u%02u", d / 60, d % 60); + } + else { + bf[0] = 0; + } + return bf; +} + +LPCSTR CLogFile::GetModeString(BYTE m) +{ + if( m < MODEMAX ){ + return _mode[m]; + } + else { + m -= BYTE(MODEMAX); + StrCopy(m_modebuf, m_fhd.mode[m], 6); + return m_modebuf; + } +} + +void CLogFile::SetMode(SDMMLOG *sp, LPCSTR s) +{ + if( !*s ){ + sp->mode = 0; + return; + } + + int n; + const char **t; + char bf[7]; + StrCopy(bf, s, 6); + jstrupr(bf); + s = bf; + int len = strlen(s); + for( n = 0, t = _mode; *t != NULL; t++, n++ ){ + if( !strcmp(*t, s) ){ + sp->mode = BYTE(n); + return; + } + } + for( n = 0; (n < UMODEMAX) && m_fhd.mode[n][0] ; n++ ){ + char vbf[7]; + StrCopy(vbf, m_fhd.mode[n], 6); + if( !strcmp(vbf, s) ){ + sp->mode = BYTE(n + MODEMAX); + return; + } + } + if( n < UMODEMAX ){ + if( len < 6 ){ + strcpy(m_fhd.mode[n], s); + } + else { + memcpy(m_fhd.mode[n], s, 6); + } + sp->mode = BYTE(n + MODEMAX); + } + else { + sp->mode = 0; + } +} + +LPCSTR CLogFile::GetFreqString(BYTE b, short fq) +{ + static char bf[12]; + int d; + + if( fq < 0 ){ + sprintf( bf, "%s/%s", _band[b], _band[-fq]); + return(bf); + } + else if( fq ){ + switch(b){ + case 0: + return ""; + case B_19: /* 1.9 */ + if( fq == 800 ){ + strcpy(bf, "1.8"); + } + else { + sprintf( bf, "1.%03u", fq ); + } + break; + case B_35: /* 3.5 */ + sprintf( bf, "3.%03u", fq ); + break; + case B_38: /* 3.8 */ + sprintf( bf, "3.%03u", fq ); + break; + case B_1200: + d = 1240 + (fq / 100); + sprintf( bf, "%u.%02u", d, fq % 100 ); + break; + case B_2400: + d = 2350 + (fq / 100); + sprintf( bf, "%u.%02u", d, fq % 100 ); + break; + case B_220: + d = 220 + (fq / 1000); + sprintf( bf, "%u.%03u", d, fq % 1000 ); + break; + default: + if( b <= B_24 ){ + sprintf( bf, "%s.%03u", _band[b], fq ); + } + else if( b <= B_430 ){ + d = atoin(_band[b], -1) + (fq / 1000); + sprintf( bf, "%u.%03u", d, fq % 1000 ); + } + else { + return(_band[b]); + } + break; + } + return(bf); + } + else { + return(_band[b]); + } +} + +/*#$% +=============================================================== + バンド番号を得る +--------------------------------------------------------------- + p : 文字列のポインタ +--------------------------------------------------------------- +--------------------------------------------------------------- +=============================================================== +*/ +static BYTE _bandno_(LPCSTR p) +{ + char n; + const char **t; + + for( n = 0, t = _band; *t != NULL; t++, n++ ){ + if( !strcmp(*t, p) ) return(n); + } + return(0); +} + +/*#$% +=============================================================== + バンド番号を得る +--------------------------------------------------------------- + p : 文字列のポインタ +--------------------------------------------------------------- +--------------------------------------------------------------- +=============================================================== +*/ +void CLogFile::SetFreq(SDMMLOG *sp, LPCSTR p) +{ + BYTE n; + char ub[16], db[16]; + int ud, d; + + sp->fq = 0; + if( strchr(p, '/' )!=NULL ){ + p = _strdmcpy(ub, p, '/'); + if( (n = _bandno_(ub))!= 0 ){ + if( (sp->fq = _bandno_(p))!= 0 ){ + sp->fq = SHORT(-sp->fq); + sp->band = n; + return; + } + } + sp->band = 0; + return; + } + if( (n = _bandno_(p))!= 0 ){ + sp->band = n; + return; + } + if( strchr(p, '.')!=NULL ){ + p = _strdmcpy(ub, p, '.'); + memset(db, 0, 4); + strcpy(db, p); + db[3] = 0; + for( n = 0; n < 3; n++ ){ + if( !db[n] ) db[n] = '0'; + } + ud = atoin(ub, -1); + d = atoin(db, -1); + } + else { + ud = atoin(p, -1); + d = 0; + } + if( ud == 1 ){ + sp->fq = SHORT(d); + sp->band = B_19; + } + else if( ud == 3 ){ + sp->fq = SHORT(d); + if( d >= 700 ){ + n = B_38; + } + else { + n = B_35; + } + sp->band = n; + } + else if( (ud >= 7) && (ud <= 24) ){ + sp->fq = SHORT(d); + if( (n = _bandno_(ub))!= 0 ){ + sp->band = n; + return; + } + sp->fq = 0; + sp->band = 0; + } + else if( (ud >= 28)&&(ud <= 29) ){ + sp->fq = SHORT(((ud - 28) * 1000) + d); + sp->band = B_28; + } + else if( (ud >= 50)&&(ud <= 54) ){ + sp->fq = SHORT(((ud - 50) * 1000) + d); + sp->band = B_50; + } + else if( (ud >= 144) && (ud <= 147) ){ + sp->fq = SHORT(((ud - 144) * 1000) + d); + sp->band = B_144; + } + else if( (ud >= 430) && (ud <= 440) ){ + sp->fq = SHORT(((ud - 430) * 1000) + d); + sp->band = B_430; + } + else if( (ud >= 220) && (ud <= 225) ){ + sp->fq = SHORT(((ud - 220) * 1000) + d); + sp->band = B_220; + } + else if( (ud >= 1240) && (ud <= 1300) ){ + sp->fq = SHORT(((ud - 1240) * 100) + (d/10)); + sp->band = B_1200; + } + else if( (ud >= 2350) && (ud <= 2450) ){ + sp->fq = SHORT(((ud - 2350) * 100) + (d/10)); + sp->band = B_2400; + } + else { + sp->band = 0; + } +} + +int CLogFile::ReadAscii(SDMMLOG *sp, LPSTR p) +{ + LPSTR t; + int y, m, d; + + memset(sp, 0, sizeof(SDMMLOG)); + p = StrDlm(t, p); /* DATE */ + if( sscanf(t, "%u.%u.%u", &y, &m, &d )!=3 ) return FALSE; + sp->year = BYTE(y % 100); + sp->date = WORD((m * 100) + d); + p = StrDlm(t, p); /* BGN */ + if( sscanf(t, "%u.%u", &d, &y) != 2 ){ + d = atoin(t, -1); + y = 0; + } + m = d / 100; + d = d % 100; + y /= 2; + sp->btime = WORD((((m * 60) + d) * 30) + y); + p = StrDlm(t, p); /* CALL */ + StrCopy(sp->call, t, MLCALL); + p = StrDlm(t, p); /* UR */ + StrCopy(sp->ur, t, MLRST); + p = StrDlm(t, p); /* MY */ + StrCopy(sp->my, t, MLRST); + p = StrDlm(t, p); /* BAND */ + SetFreq(sp, t); + p = StrDlm(t, p); /* MODE */ + SetMode(sp, t); + p = StrDlm(t, p); /* POW */ + StrCopy(sp->pow, t, MLPOW); + p = StrDlm(t, p); /* NAME */ + StrCopy(sp->name, t, MLNAME); + p = StrDlm(t, p); /* QTH */ + StrCopy(sp->qth, t, MLQTH); + p = StrDlm(t, p); /* REM */ + StrCopy(sp->rem, t, MLREM); + p = StrDlm(t, p); /* QSL */ + StrCopy(sp->qsl, t, MLQSL); + p = StrDlm(t, p); /* ETIME*/ + d = atoin(t, -1); + m = d / 100; + d = d % 100; + sp->etime = WORD(((m * 60) + d) * 30); + p = StrDlm(t, p); /* S */ + sp->send = *t; + p = StrDlm(t, p); /* R */ + sp->recv = *t; + p = StrDlm(t, p); /* M */ + sp->cq = *t; + p = StrDlm(t, p); /* ENV */ + sp->env = WORD(atoin(t, -1)); + p = StrDlm(t, p); /* OPT1 */ + StrCopy(sp->opt1, t, MLOPT); + p = StrDlm(t, p); /* OPT2 */ + StrCopy(sp->opt2, t, MLOPT); + p = StrDlm(t, p); /* USR1 */ + if( *t ) SetOptStr(2, sp, t); + StrDlm(t, p); /* USR2 */ + if( *t ) SetOptStr(3, sp, t); + return TRUE; +} + +void JSTtoUTC(int &Year, int &Mon, int &Day, int &Hour) +{ + + Hour -= 9; + if( Hour < 0 ){ + Hour += 24; + Day--; + if( Day < 1 ){ + Mon--; + if( Mon < 1 ){ + Mon = 12; + if( Year ){ + Year--; + } + else { + Year = 99; + } + } + if( Year % 4 ){ + Day = MONN[Mon]; + } + else { + Day = MONU[Mon]; + } + } + } +} + +void JSTtoUTC(SDMMLOG *sp) +{ + int Year = sp->year; + int Mon = sp->date / 100; + int Day = sp->date % 100; + int Hour = sp->btime / (60*30); + if( sp->date || sp->btime ){ + JSTtoUTC(Year, Mon, Day, Hour); + sp->year = BYTE(Year); + sp->date = WORD(Mon * 100 + Day); + sp->btime = WORD((sp->btime % 1800) + (Hour * 1800)); + } + if( sp->etime ){ + // JST to UTC + if( sp->etime >= (9*60*30) ){ + sp->etime -= WORD(9 * 60 * 30); + } + else { + sp->etime += WORD(15 * 60 * 30); + } + if( !sp->etime ) sp->etime++; + } +} + +void UTCtoJST(int &Year, int &Mon, int &Day, int &Hour) +{ + LPCSTR mt; + + Hour += 9; + if( Hour >= 24 ){ + Hour -= 24; + Day++; + if( Year % 4 ){ + mt = MONN; + } + else { + mt = MONU; + } + if( Day > mt[Mon] ){ + Day = 1; + Mon++; + if( Mon > 12 ){ + Mon = 1; + Year++; + if( Year >= 100 ) Year = 0; + } + } + } +} + +void UTCtoJST(SDMMLOG *sp) +{ + int Year = sp->year; + int Mon = sp->date / 100; + int Day = sp->date % 100; + int Hour = sp->btime / (60*30); + if( sp->date || sp->btime ){ + UTCtoJST(Year, Mon, Day, Hour); + sp->year = BYTE(Year); + sp->date = WORD(Mon * 100 + Day); + sp->btime = WORD((sp->btime % 1800) + (Hour * 1800)); + } + if( sp->etime ){ + // UTC to JST + if( sp->etime >= (15*60*30) ){ + sp->etime -= WORD(15 * 60 * 30); + } + else { + sp->etime += WORD(9 * 60 * 30); + } + if( !sp->etime ) sp->etime++; + } +} + +void UTCtoJST(SYSTEMTIME *tp) +{ + int y = tp->wYear; + int m = tp->wMonth; + int d = tp->wDay; + int h = tp->wHour; + UTCtoJST(y, m, d, h); + tp->wYear = WORD(y); + tp->wMonth = WORD(m); + tp->wDay = WORD(d); + tp->wHour = WORD(h); +} + +void mBandToBand(SDMMLOG *sp, LPCSTR p) +{ + int m; + + sp->fq = 0; + if( !strcmpi(p, "SAT") ){ + sp->band = 0; + } + else if( sscanf(p, "%u", &m) == 1 ){ + switch(m){ + case 2: + sp->band = B_144; + break; + case 6: + sp->band = B_50; + break; + case 10: + sp->band = B_28; + break; + case 12: + sp->band = B_24; + break; + case 15: + sp->band = B_21; + break; + case 17: + sp->band = B_18; + break; + case 20: + sp->band = B_14; + break; + case 30: + sp->band = B_10; + break; + case 40: + sp->band = B_7; + break; + case 75: + sp->band = B_38; + break; + case 80: + sp->band = B_35; + break; + case 160: + sp->band = B_19; + sp->fq = 800; + break; + } + } +} + +LPCSTR FreqTomBand(SDMMLOG *sp) +{ + return _mBand[sp->band]; +} + + + \ No newline at end of file diff --git a/JASTA/LogFile.h b/JASTA/LogFile.h new file mode 100644 index 0000000..412e95f --- /dev/null +++ b/JASTA/LogFile.h @@ -0,0 +1,290 @@ +//--------------------------------------------------------------------------- +#ifndef LogFileH +#define LogFileH + +#include "ComLib.h" +//--------------------------------------------------------------------------- +#define MMLOGID "MMLOG DATA Ver1.00\032" + +extern const char *_band[]; + +//--------------------------------------------------------------------------- +// MMLOG Constant +// +enum BD { /* バンドの番号 */ + B_NULL, + B_19, + B_35, + B_38, + B_7, + B_10, + B_14, + B_18, + B_21, + B_24, + B_28, + B_50, + B_144, + B_430, + B_1200, + B_2400, + B_5600, + B_101G, + B_104G, + B_24G, + B_47G, + B_75G, + B_142G, + B_248G, + B_4630, + B_220, + B_SAT, +}; + +typedef struct { // Logの動作オプション + char m_TimeZone; // 表示用タイムゾーン + + int m_UpperName; // 大文字への変換 + int m_UpperQTH; // 大文字への変換 + int m_UpperREM; // 大文字への変換 + int m_UpperQSL; // 大文字への変換 + + int m_DefMyRST; // 0-OFF, 1-ON + + int m_CopyFreq; // 0-Band, 1-Freq + int m_CopyHis; // 0-599, 1-599001, 2-599UTC + int m_CopyName; // 0-OFF, 1-ON + int m_CopyQTH; // 0-OFF, 1-ON + int m_CopyREM; // 0-OFF, 1-ON + int m_CopyQSL; // 0-OFF, 1-ON + + int m_AutoSave; // 自動セーブ + + int m_QSOMacroFlag; // 0-OFF, 1-ON + int m_CheckBand; // 同一バンドでの重複をチェック + int m_QSOMacro[5]; // 0-Run 1st, 1-Run 2nd, 2-Run Dupe, 3-S&P 1st, 4-S&P 2nd + WORD m_QSOMacroKey[5]; + AnsiString m_QSOMacroStr[5]; + + AnsiString m_THRTTY; + AnsiString m_THSSTV; + int m_THTZ; + int m_ClipRSTADIF; + int m_DateType; +}LOGSET; + +#define MLCALL 16 /* コールサインの長さ */ +#define MLRST 20 /* RSTナンバの長さ */ +#define MLREM 56 /* 記事の長さ */ +#define MLNAME 16 /* 名前の長さ */ +#define MLQTH 28 /* QTHの長さ */ +#define MLQSL 54 /* QSLの長さ */ +#define MLPOW 4 /* 電力 */ +#define MLOPT 8 /* オプション */ + +#define MODEMAX 48 + +#define YEAR(c) (((c)<50)?(2000+(c)):(1900+(c))) + +#pragma option -a- // パックの指示 +typedef struct { /* MMLOGデータ形式 */ + BYTE year; /* 年 */ + WORD date; /* 日付 */ + WORD btime; /* 開始時刻 */ + WORD etime; /* 終了時刻 */ + char call[MLCALL+1]; /* コールサイン */ + char ur[MLRST+1]; /* T リポート */ + char my[MLRST+1]; /* R リポート */ + BYTE band; /* バンド */ + SHORT fq; /* 周波数 */ + BYTE mode; /* モード */ + char pow[MLPOW+1]; /* 電力 */ + char name[MLNAME+1]; /* 名前 */ + char qth[MLQTH+1]; /* QTH */ + char qsl[MLQSL+1]; /* QSL */ + char send; /* QSL 送信 */ + char recv; /* QSL 受信 */ + char cq; /* cq/call */ + WORD env; /* 自局環境 */ + char rem[MLREM+1]; /* 記事 */ + char opt1[MLOPT+1]; /* オプション */ + char opt2[MLOPT+1]; /* オプション2 */ +}SDMMLOG; + +#define FHDOFF 256 /* 先頭のヘッダのオフセット */ +#define UMODEMAX 32 +typedef struct { + char id[20]; /* ファイルバージョン */ + char dmy[4]; /* ダミー領域 */ + USHORT mlt; /* マルチ情報のサイズ */ + char td; /* 時差コード */ + char hash; /* ハッシュデータ格納フラグ */ + long size; /* データサイズ */ + char master; /* マスターファイルフラグ */ + char dm2[15]; /* ダミー2 */ + char mode[UMODEMAX][6]; /* ユーザ定義モード */ +}FHD; +#pragma option -a. // パック解除の指示 + +class CIndex +{ +private: + int m_IndexMax; // 確保中のインデックスの数 + int m_IndexCnt; // 現在のインデックスの数 + LPSTR pIndex; // インデックス領域のポインタ(16バイトインデックス) + BYTE *pMult; // マルチ情報のポインタ +public: + CIndex(); + ~CIndex(); + void AllocIndex(int n); + void ClearIndex(void); + void WriteIndex(LPCSTR pCall, int n); + void ReadIndex(LPSTR pCall, int n); + LPSTR PointIndex(int n); + void AddBlock(LPCSTR p, int len); + int ReadIndex(int handle, FHD *hp); + void MakeIndex(int handle, FHD *hp); + int WriteIndex(int handle, FHD *hp); + + +}; + +#define FINDMAX 32768 +class CLogFind +{ +public: + int m_FindCnt; + int m_FindCmp1Max; + int m_FindCmp2Max; + int m_FindStr1Max; + int m_FindStr2Max; + + int *pFindTbl; + AnsiString m_FindStr; +public: + CLogFind(); + ~CLogFind(); + inline int GetCount(void){return m_FindCnt;}; + inline void Clear(void){ + m_FindCnt = m_FindCmp1Max = m_FindCmp2Max = m_FindStr1Max = m_FindStr2Max = 0; + }; + int Add(int n); + void Ins(int n); + + inline void Write(int n){ + pFindTbl[m_FindCnt] = n; + m_FindCnt++; + }; + inline void SetText(LPCSTR p){ + if( p != m_FindStr.c_str() ){ + m_FindStr = p; + } + }; + inline LPCSTR GetText(void){ + return m_FindStr.c_str(); + }; + inline void ClearText(void){ + m_FindStr = ""; + }; +}; + +class CLogFile +{ +private: + int m_Open; // オープンフラグ + int m_ReadOnly; + int m_EditFlag; // 編集フラグ + int m_Handle; // ファイルハンドル + CIndex m_Index; // 現在オープン中のインデックス + FHD m_fhd; // 現在オープン中のファイルヘッダ + AnsiString m_Name; // ログファイルの名前 + char m_modebuf[8]; + char LogDir[256]; +public: + AnsiString m_FileName; // ログファイルの名前(フルパス) + + int m_CurNo; + int m_CurChg; + SDMMLOG m_sd; + SDMMLOG m_bak; + SDMMLOG m_asd; + + CLogFind m_Find; // カレント検索データ + LOGSET m_LogSet; +private: + void SetHisRST(SDMMLOG *sp); + +public: + CLogFile(); + ~CLogFile(); + + int Open(LPCSTR pName, int enbwrt); + int Close(void); + + void ReadIniFile(LPCSTR pKey, TIniFile *pIniFile); + void WriteIniFile(LPCSTR pKey, TIniFile *pIniFile); + + void MakeIndex(void); + + inline IsEdit(void){return m_EditFlag;}; + void MakePathName(LPCSTR pName); + void MakeName(LPCSTR pName); + inline LPCSTR GetName(void){return m_Name.c_str();}; + + inline int GetCount(void){return m_fhd.size;}; + inline int IsOpen(void){return m_Open;}; + int GetData(SDMMLOG *sp, int n); + int PutData(SDMMLOG *sp, int n); + + LPCSTR GetDateString(SDMMLOG *sp, int sw); + inline LPCSTR GetDateString(SDMMLOG *sp){ return GetDateString(sp, m_LogSet.m_DateType); }; + LPCSTR GetTimeString(WORD d); + + + LPCSTR GetModeString(BYTE m); + void SetMode(SDMMLOG *sp, LPCSTR s); + + LPCSTR GetFreqString(BYTE b, short fq); + void SetFreq(SDMMLOG *sp, LPCSTR p); + LPCSTR GetOptStr(int n, SDMMLOG *sp); + void SetOptStr(int n, SDMMLOG *sp, LPCSTR pOpt); + + void CopyAF(void); + + void SortDate(int bb, int eb); + int FindSameBand(void); + int FindSameDate(SYSTEMTIME *pUTC); + + void FindStrSet(CLogFind *fp, LPCSTR pCall); + int FindCmpSet(CLogFind *fp, LPCSTR pCall); + int FindClipSet(CLogFind *fp, LPCSTR pCall); + int FindSet(CLogFind *fp, LPCSTR pCall); + int Find(LPCSTR pCall, int b, int dir); + int IsAlready(LPCSTR pCall); + void DeleteAll(void); + void DeleteLast(void); + void Delete(int top, int end); + void Insert(int n, SDMMLOG *sp); + + void InitCur(void); + void SetLastPos(void); + + int ReadAscii(SDMMLOG *sp, LPSTR p); + CIndex *GetIndex(void){return &m_Index;}; +}; + +void JSTtoUTC(int &Year, int &Mon, int &Day, int &Hour); +void JSTtoUTC(SDMMLOG *sp); +void UTCtoJST(int &Year, int &Mon, int &Day, int &Hour); +void UTCtoJST(SDMMLOG *sp); +void UTCtoJST(SYSTEMTIME *tp); +void mBandToBand(SDMMLOG *sp, LPCSTR p); +LPCSTR FreqTomBand(SDMMLOG *sp); +int GetLMode(BYTE m); + +extern CLogFile Log; +extern const char MONN[]; +extern const char MONU[]; +#endif + + \ No newline at end of file diff --git a/JASTA/MMJASTA.bpr b/JASTA/MMJASTA.bpr new file mode 100644 index 0000000..b46ebc3 --- /dev/null +++ b/JASTA/MMJASTA.bpr @@ -0,0 +1,161 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE セクション +# --------------------------------------------------------------------------- +# プロジェクトメイクファイルの以下のセクションは、IDE によって管理されます。 +# このセクションを変更する場合は、できるだけ IDE を使用するようにして +# ください。 +# --------------------------------------------------------------------------- + +VERSION = BCB.03 +# --------------------------------------------------------------------------- +PROJECT = MMJASTA.exe +OBJFILES = MMJASTA.obj Main.obj ComLib.obj LogFile.obj OptDlg.obj TextEdit.obj QsoDlg.obj \ + country.obj FEdit.obj LogConv.obj +RESFILES = MMJASTA.res +DEFFILE = +RESDEPEN = $(RESFILES) Main.dfm OptDlg.dfm TextEdit.dfm QsoDlg.dfm FEdit.dfm +LIBFILES = +LIBRARIES = VCL35.lib +SPARELIBS = VCL35.lib +PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ + QRPT35.bpi TEEUI35.bpi VCLSMP35.bpi TEEDB35.bpi TEE35.bpi ibsmp35.bpi \ + NMFAST35.bpi INETDB35.bpi INET35.bpi +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +# --------------------------------------------------------------------------- +CFLAG1 = -O2 -Hc -w -Ve -d -k- -vi -c -b- -w-par -w-inl -Vx -tW +CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm +CFLAG3 = -Tkh30000 +PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$L- -$D- -v -JPHN -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn /d_RTLDLL +LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn +IFLAGS = +# --------------------------------------------------------------------------- +ALLOBJ = c0w32.obj sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1041 +CodePage=932 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= + +!endif + +# --------------------------------------------------------------------------- +# MAKE セクション +# --------------------------------------------------------------------------- +# IDE はプロジェクトファイルのこのセクションは使用していません。 +# コマンドラインの MAKE ユーティリティを使用してビルドするためのものです。 +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/JASTA/MMJASTA.cbproj b/JASTA/MMJASTA.cbproj new file mode 100644 index 0000000..889e7b0 --- /dev/null +++ b/JASTA/MMJASTA.cbproj @@ -0,0 +1,282 @@ +サソ + + {9DBCB72F-C3F6-4D05-819D-D09F90510086} + CppVCLApplication + MMJASTA.cpp + True + Debug + VCL + 14.6 + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + 1041 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=;CFBundleDisplayName=;UIDeviceFamily=;CFBundleIdentifier=;CFBundleVersion=;CFBundlePackageType=;CFBundleSignature=;CFBundleAllowMixedLocalizations=;UISupportedInterfaceOrientations=;CFBundleExecutable=;CFBundleResourceSpecification=;LSRequiresIPhoneOS=;CFBundleInfoDictionaryVersion=;CFBundleDevelopmentRegion= + vclx.bpi;rtl.bpi;vcl.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;bcbsmp.bpi;teeui.bpi;vclsmp.bpi;teedb.bpi;tee.bpi;ibsmp.bpi;inetdb.bpi;inet.bpi;$(PackageImports) + rtl.lib;vcl.lib + None + $(BDS)\lib\obj;$(BDS)\lib;$(BDS)\lib\psdk;$(ILINK_LibraryPath) + true + .\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_IncludePath) + $(BDS)\include;$(BDS)\include\vcl;$(BCC_IncludePath) + .\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_UnitSearchPath) + exe + . + Level2 + $(BDS)\include;$(BDS)\include\vcl;$(TASM_IncludePath) + JPHNE + $(BDS)\include;$(BDS)\include\vcl;$(BRCC_IncludePath) + /w2 + Windows + -M + true + + + -tWM -Tkh30000 -Vx -d -Ve + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + _RTLDLL;$(BCC_Defines) + 1033 + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + _RTLDLL;USEPACKAGES;$(BRCC_Defines) + true + MMJASTA_Icon.ico + _RTLDLL;USEPACKAGES;$(TASM_Defines) + $(BDS)\bin\default_app.manifest + + + _RTLDLL;$(BCC_Defines) + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + _RTLDLL;USEPACKAGES;$(TASM_Defines) + _RTLDLL;USEPACKAGES;$(BRCC_Defines) + MMJASTA_Icon.ico + + + true + Full + Debug_Build + false + true + $(BDS)\lib\debug;$(ILINK_LibraryPath);$(ILINK_LibraryPath) + true + true + DEBUG;$(DCC_Define);$(DCC_Define) + true + true + -M -V + true + + + -tWM -Tkh30000 -Vx -d -Ve -k + _DEBUG;$(BCC_Defines);$(BCC_Defines) + 1033 + rtl.lib;vcl.lib + true + None + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + + + _DEBUG;$(BCC_Defines);$(BCC_Defines) + + + Release_Build + $(BDS)\lib\release;$(ILINK_LibraryPath);$(ILINK_LibraryPath) + -M -$O+ + + + NDEBUG;$(BCC_Defines);$(BCC_Defines) + -tWM -Tkh30000 -Vx -d -Ve -r + + + NDEBUG;$(BCC_Defines);$(BCC_Defines) + + + + 3 + ComLib.h + 10 + + + 8 + country.h + 2 + + + 9 +

FileEdit + FEdit.h + 4 + + + 3 + LogConv.h + 10 + + + 9 + LogFile.h + 4 + + + 8 +
MainWnd
+ Main.h + 2 +
+ + -1 + 0 + + + -1 + 1 + + +
OptDlgBox
+ OptDlg.h + 5 +
+ + 7 +
QSODlgBox
+ QsoDlg.h + 0 +
+ + 6 +
TextEditDlg
+ TextEdit.h + 1 +
+ + + + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + + + + + CPlusPlusBuilder.Personality.12 + CppVCLApplication + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1041 + 932 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + + + + + + + + + + + + + False + True + True + + + MMJASTA.cpp + + + + True + False + + + 12 + + + diff --git a/JASTA/MMJASTA.cbproj.local b/JASTA/MMJASTA.cbproj.local new file mode 100644 index 0000000..b3811b7 --- /dev/null +++ b/JASTA/MMJASTA.cbproj.local @@ -0,0 +1,2 @@ +サソ + diff --git a/JASTA/MMJASTA.cpp b/JASTA/MMJASTA.cpp new file mode 100644 index 0000000..1b4b003 --- /dev/null +++ b/JASTA/MMJASTA.cpp @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("MMJASTA.res"); +USEFORM("Main.cpp", MainWnd); +USEUNIT("ComLib.cpp"); +USEUNIT("LogFile.cpp"); +USEFORM("OptDlg.cpp", OptDlgBox); +USEFORM("TextEdit.cpp", TextEditDlg); +USEFORM("QsoDlg.cpp", QSODlgBox); +USEUNIT("country.cpp"); +USEFORM("FEdit.cpp", FileEdit); +USEUNIT("LogConv.cpp"); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TMainWnd), &MainWnd); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/JASTA/MMJASTA.ini b/JASTA/MMJASTA.ini new file mode 100644 index 0000000..ed26e44 --- /dev/null +++ b/JASTA/MMJASTA.ini @@ -0,0 +1,17 @@ +[Language] +English=0 +[Folder] +Log=C:\MMSSTV +Index=1 +[Define] +Call= +Name= +Zip= +Adr= +Mail= +License= +Power= +Sexual=0 +TSize=2 +Category=0 +First=0 diff --git a/JASTA/MMJASTA.map b/JASTA/MMJASTA.map new file mode 100644 index 0000000..3eab8fa --- /dev/null +++ b/JASTA/MMJASTA.map @@ -0,0 +1,6 @@ + + Start Length Name Class + 0001:00401000 000303FDCH _TEXT CODE + 0002:00705000 000018028H _DATA DATA + 0003:0071D028 000021050H _BSS BSS + 0004:00000000 0000000F8H _TLS TLS diff --git a/JASTA/MMJASTA.res b/JASTA/MMJASTA.res new file mode 100644 index 0000000000000000000000000000000000000000..ac5d04dd7dc14b94caeb012d9c50412018772066 GIT binary patch literal 1636 zcmbtV&59F25dLP(!IfaoBMjnUPZF7sMUWWrkAQz?*nBkk`mXd=X(_ z4_=nphZrI5rJV-|wqJFplgYTkE>`HS`ntZVuIax3K*VN@Ycw~c6L^0}4gsZs?V2Zb zf+o#o*|rE{E5TtQU}k-m@ISS39=NqjPf(BD+BJ@ujC0eK$C(NJ?5s>Z#d~E8s#EMit8N zR~YhDK`diy3}pnfAjv2G65nEFR(yxo@eGCGB#@xL>nRmav;KX&A(PYC%kEhGnTPQb z=YC*!%r9SLx{5tv$=5=VG0)d|+}^-CZVP9{*SRJqo-gyyX1a_oX0tCGh}&~l-#>7! z8DC(LE&ZApM%6QI^DzUlDu}(fe3k7!+gz?|Bi?OD^Kup2bFJRt<&S8&d*BXu^&W)u z3&-Dsl=kH^M`nGUR#6V7|1^?%77MmN}uxs6wNY~SE6 zp4b=JCvKG97g^0ML{Vs0RbHb2Vd#+TiR^^5hc@RezK}1OwQt|`9%twi_3(nPZl5o| Klk)!qQ{WFoGVp2u literal 0 HcmV?d00001 diff --git a/JASTA/MMJASTA.tds b/JASTA/MMJASTA.tds new file mode 100644 index 0000000000000000000000000000000000000000..38378f5880b559e5bd4e36728e686dc7a2944b22 GIT binary patch literal 8519680 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
48M++ad7Pj2{MHJ>oqh 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

?(M;x{ZT}E84a2a7DWg98VZicT7*A=b3 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 hQy`Y+`dQtU~>Sfgw)hnv0s#jIh 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%0A0ZL=(R>JqV5d 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�`3`rQGLV+YGrwa;#VX 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

o1%5mfDxWtKe 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

  • +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

    eHhgcQ;X0Y10+RgQ8bDzCzuEw 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

    #qU*UEXT4pF^l3(nUy_7 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

    >^=e*Z?ywno?o;P?pp2-rv1 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

      I1(LZFh2)8Mz+(vsz(sr5zis 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

      PE5MiB=hcCl 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 z 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

      tan0rS_MF*bXM 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

      Y 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�+!tSAhaq9m@^=7RQkcrhE!i{?w5hB#pd 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 literal 0 HcmV?d00001 diff --git a/JASTA/MMJASTA_Icon.ico b/JASTA/MMJASTA_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..746e4d95bc82a631b7e6778b8d311fe0961ed25d GIT binary patch literal 1078 zcmbtTF>b>!45ZVJM&&1XDzXbmHlu$j;5@-g27kj#-y$GGm%w?11~&_#2N+e4vX$6w z3MA+`6nW%HktLcap%vwMMuM*u(JOqG4Sbyty*v@Ek;`Fku!Np564lV&MvWpWbv-zY z2+0@&F9jcd +#pragma hdrstop + +#include "Main.h" +#include "OptDlg.h" +#include "TextEdit.h" +#include "QsoDlg.h" +#include "LogConv.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TMainWnd *MainWnd; +//--------------------------------------------------------------------------- +#define TEMPLOGNAME "MMJASTA.MDT" +//--------------------------------------------------------------------------- +__fastcall TMainWnd::TMainWnd(TComponent* Owner) + : TForm(Owner) +{ + lcid = GetThreadLocale() & 0x00ff; + if( lcid != LANG_JAPANESE ){ // English + MsgEng = 1; + sys.m_Category = 1; + } + else { + MsgEng = 0; + sys.m_Category = 0; + } + + if( ParamCount() >= 0 ){ + SetDirName(BgnDir, AnsiString(ParamStr(0)).c_str()); + } + else { + SetCurDir(BgnDir, sizeof(BgnDir)); + } + strcpy(MMLogDir, "C:\\MMSSTV"); + ::GetLocalTime(&m_now); + sys.m_Year = m_now.wYear; + if( m_now.wMonth < 8 ) sys.m_Year--; + sys.m_Call = ""; + sys.m_CName = "JASTA SSTV activity contest"; + sys.m_TSize = 2; + m_FIndex = 1; + Caption = VERTTL; + ReadRegister(); + SetLanguage(); + + char bf[256]; + sprintf(bf, "%sARRL.DX", BgnDir); + Cty.Load(bf); + + m_ReCalc = 0; + m_pEditLog = NULL; + m_pEditSum = NULL; + m_pEditAna = NULL; +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::SetLanguage(void) +{ + Memo->Font->Pitch = fpFixed; + if( MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + Memo->Font->Name = "Courier New"; + Memo->Font->Charset = ANSI_CHARSET; + + KF->Caption = "&File"; + KV->Caption = "&View"; + KH->Caption = "&Help"; + KFS->Caption = "&Setup..."; + KFL->Caption = "&Load log..."; + KFR->Caption = "&Re-totalize"; + KVL->Caption = "Log sheet..."; + KVS->Caption = "Summary sheet..."; + KVA->Caption = "Analysis file..."; + KHM->Caption = "Download latest version..."; + KHR->Caption = "Reflector..."; + KHW->Caption = "JASTA Home page..."; + } + else { + Font->Name = "MS Pゴシック"; + Font->Charset = SHIFTJIS_CHARSET; + Memo->Font->Name = "MS ゴシック"; + Memo->Font->Charset = SHIFTJIS_CHARSET; + + KF->Caption = "ファイル(&F)"; + KV->Caption = "表示(&V)"; + KH->Caption = "ヘルプ(&H)"; + KFS->Caption = "セットアップ(&S)..."; + KFL->Caption = "ログファイルのロード(&L)..."; + KFR->Caption = "再集計(&R)"; + KVL->Caption = "ログシート..."; + KVS->Caption = "サマリシート..."; + KVA->Caption = "分析ファイル..."; + KHM->Caption = "最新版のダウンロード..."; + KHR->Caption = "メーリングリスト..."; + KHW->Caption = "JASTAのホームページ..."; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::FormCloseQuery(TObject *Sender, bool &CanClose) +{ + Log.Close(); + unlink(Log.m_FileName.c_str()); + WriteRegister(); + + if( m_pEditLog != NULL ) delete m_pEditLog; + if( m_pEditSum != NULL ) delete m_pEditSum; + if( m_pEditAna != NULL ) delete m_pEditAna; + CanClose = TRUE; +} +//--------------------------------------------------------------------------- +// レジストリからの読み出し +void __fastcall TMainWnd::ReadRegister(void) +{ + char bf[256]; + + sprintf(bf, "%sMMJASTA.ini", BgnDir); + TIniFile *pIniFile = new TIniFile(bf); + + MsgEng = pIniFile->ReadInteger("Language", "English", MsgEng); + + + AnsiString as; + as = pIniFile->ReadString("Folder", "Log", MMLogDir); + StrCopy(MMLogDir, as.c_str(), sizeof(MMLogDir)-1); + m_FIndex = pIniFile->ReadInteger("Folder", "Index", m_FIndex); + + sys.m_Call = pIniFile->ReadString("Define", "Call", sys.m_Call); + sys.m_Name = pIniFile->ReadString("Define", "Name", sys.m_Name); + sys.m_Zip = pIniFile->ReadString("Define", "Zip", sys.m_Zip); + sys.m_Adr = pIniFile->ReadString("Define", "Adr", sys.m_Adr); + sys.m_Mail = pIniFile->ReadString("Define", "Mail", sys.m_Mail); + sys.m_License = pIniFile->ReadString("Define", "License", sys.m_License); + sys.m_Pow = pIniFile->ReadString("Define", "Power", sys.m_Pow); + sys.m_Sexual = pIniFile->ReadInteger("Define", "Sexual", sys.m_Sexual); + sys.m_TSize = pIniFile->ReadInteger("Define", "TSize", sys.m_TSize); + + sys.m_Category = pIniFile->ReadInteger("Define", "Category", sys.m_Category); + sys.m_First = pIniFile->ReadInteger("Define", "First", sys.m_First); + delete pIniFile; +} +//--------------------------------------------------------------------------- +// レジストリへの書き込み +void __fastcall TMainWnd::WriteRegister(void) +{ + CWaitCursor wait; + char bf[256]; + sprintf(bf, "%sMMJASTA.ini", BgnDir); + + try{ + TIniFile *pIniFile = new TIniFile(bf); + + pIniFile->WriteInteger("Language", "English", MsgEng); + pIniFile->WriteString("Folder", "Log", MMLogDir); + pIniFile->WriteInteger("Folder", "Index", m_FIndex); + + pIniFile->WriteString("Define", "Call", sys.m_Call); + pIniFile->WriteString("Define", "Call", sys.m_Call); + pIniFile->WriteString("Define", "Name", sys.m_Name); + pIniFile->WriteString("Define", "Zip", sys.m_Zip); + pIniFile->WriteString("Define", "Adr", sys.m_Adr); + pIniFile->WriteString("Define", "Mail", sys.m_Mail); + pIniFile->WriteString("Define", "License", sys.m_License); + pIniFile->WriteString("Define", "Power", sys.m_Pow); + pIniFile->WriteInteger("Define", "Sexual", sys.m_Sexual); + pIniFile->WriteInteger("Define", "TSize", sys.m_TSize); + + pIniFile->WriteInteger("Define", "Category", sys.m_Category); + pIniFile->WriteInteger("Define", "First", sys.m_First); + delete pIniFile; + + } + catch(...){ + ErrorMB(MsgEng?"Cannot update MMJASTA.INI":"MMJASTA.INIを更新できません."); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::SetTitle(void) +{ + if( m_SrcName.IsEmpty() ){ + Caption = VERTTL; + } + else { + char bf[256]; + sprintf(bf, "%s [%s]", VERTTL, m_SrcName.c_str()); + Caption = bf; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::GridDrawCell(TObject *Sender, int Col, + int Row, TRect &Rect, TGridDrawState State) +{ + char bf[256]; + + Grid->Canvas->FillRect(Rect); + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + + if( Row ){ + Row--; + bf[0] = 0; + SDMMLOG sd; + int f = ( Row < Log.GetCount() ) ? TRUE : FALSE; + if( f ) Log.GetData(&sd, Row); + switch(Col){ + case 0: // No + wsprintf(bf, "%u", Row + 1); + break; + case 1: // Date + if( f ) wsprintf(bf, "%02u/%02u/%02u", sd.year, sd.date / 100, sd.date % 100); + break; + case 2: // Time + if( f ) wsprintf(bf, "%02u%02u", (sd.btime / 30) / 60, (sd.btime / 30) % 60); + break; + case 3: // Band + if( f ) wsprintf(bf, "%s", _band[sd.band]); + break; + case 4: // Call + if( f ) strcpy(bf, sd.call); + break; + case 5: + if( f ) strcpy(bf, sd.ur); + break; + case 6: + if( f ) strcpy(bf, sd.my); + break; + case 7: + if( f ) strcpy(bf, sd.opt1); + break; + case 8: + if( f ) strcpy(bf, sd.qsl); + break; + } + Grid->Canvas->TextRect(Rect, X, Y, bf); + } + else { // タイトル + LPCSTR _tt[]={ + "No","Date","UTC","Band","Call","Sent","Rcvd","Multi","Point" + }; + Grid->Canvas->TextRect(Rect, X, Y, _tt[Col]); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KFLClick(TObject *Sender) +{ + if( sys.m_Call.IsEmpty() ){ + KFSClick(NULL); + if( sys.m_Call.IsEmpty() ) return; + } + OpenDialog->Filter = MsgEng ? "MMLOG data files(mdt)|*.mdt|ADIF files(adi)|*.adi|LOG200 files(l2)|*.l2|Turbo HAMLOG files(dbs)|*.dbs" : + "MMLOGデータファイル(mdt)|*.mdt|ADIF ファイル(adi)|*.adi|LOG200 ファイル(l2)|*.l2|Turbo HAMLOG ファイル(dbs)|*.dbs"; + OpenDialog->FilterIndex = m_FIndex; + OpenDialog->InitialDir = MMLogDir; + if( OpenDialog->Execute() == TRUE ){ + SetDirName(MMLogDir, AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0525 + m_FIndex = OpenDialog->FilterIndex; + m_SrcName = OpenDialog->FileName.c_str(); + Exec(m_SrcName.c_str(), TRUE); + SetTitle(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::Exec(LPCSTR pName, int loadorg) +{ + m_ReCalc = 0; + CWaitCursor w; + + LPCSTR pEXT = GetEXT(pName); + if( !strcmpi(pEXT, "ADI") ){ + pName = ConvADIF(pName, loadorg); + if( pName == NULL ) return; + } + else if( !strcmpi(pEXT, "L2") ){ + pName = ConvLog200(pName, loadorg); + if( pName == NULL ) return; + } + else if( !strcmpi(pEXT, "DBS") ){ + pName = ConvHAMLOG(pName, loadorg); + if( pName == NULL ) return; + } + + CLogFile orgLog; + orgLog.Open(pName, FALSE); + if( !orgLog.IsOpen() ) return; + + char templog[256]; + sprintf(templog, "%sJASTA.$$$", BgnDir); + Log.Open(templog, TRUE); + if( !Log.IsOpen() ) return; + Log.DeleteAll(); + + m_errNOF = m_errDUP = m_errINV = m_errMLT = m_errBND = 0; + + SDMMLOG sd; + int i, n; + n = 0; + for( i = 0; i < orgLog.GetCount(); i++ ){ + orgLog.GetData(&sd, i); + JSTtoUTC(&sd); + int yy = sd.year + 2000; + int mm = sd.date / 100; + if( (sd.mode == 8) && (sd.band >= B_35) && (yy == sys.m_Year) && (mm == 8) && IsValidRST(sd.ur) ){ + AdjustData(&sd); + Log.PutData(&sd, n); + n++; + } + } + orgLog.Close(); + Log.SortDate(0, Log.GetCount()); + Grid->RowCount = (n >= 8) ? (n + 1) : 9; + Grid->Invalidate(); + Calc(ClipCall(sys.m_Call.c_str())); +} +//--------------------------------------------------------------------------- +int __fastcall TMainWnd::IsValidRST(LPSTR pRST) +{ + int l = strlen(pRST); + if( l <= 3 ) return 0; + LPCSTR p = pRST; + for( ; *p; p++ ){ + if( !isdigit(*p) ) return 0; + } + int n = atoin(&pRST[3], -1); + if( (n < 1000) && (l != 6) ){ + sprintf(&pRST[3], "%03u", n); + } + return 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::AdjustData(SDMMLOG *sp) +{ + if( sp->band <= B_28 ){ + strcpy(sp->qsl, "1"); + } + else if( sp->band <= B_430 ){ + strcpy(sp->qsl, "2"); + } + else { + strcpy(sp->qsl, "3"); + } + if( IsJA(sp->call) ){ + char c; + char bf[MLCALL+1]; + StrCopy(bf, ClipCC(sp->call), MLCALL); + if( (bf[0] == '7') && (bf[1] != 'J') ){ + c = '1'; + } + else { + c = bf[2]; + } + sprintf(sp->opt1, "JA%c", c); + strcpy(sp->opt2, "AS"); + } + else if( Cty.IsData() ){ + int ref = Cty.GetRefP(sp->call); + if( !ref ){ + LPCSTR pCC = ClipCC(sp->call); + ref = Cty.GetRefP(pCC); + } + if( ref ){ + LPCSTR pDX = Cty.GetCountry(ref); + if( (pDX != NULL) && *pDX && (strchr(pDX, '?') == NULL) ){ + LPCSTR p = lastp(sp->opt1); + p+=2; + if( *p != 0x01 ) StrCopy(sp->opt1, pDX, MLOPT); + } + pDX = Cty.GetCont(ref); + if( (pDX != NULL) && *pDX && (strchr(pDX, '?') == NULL) ){ + LPCSTR p = lastp(sp->opt2); + p+=2; + if( *p != 0x01 ) StrCopy(sp->opt2, pDX, MLOPT); + } + } + } + DelLastSpace(sp->opt1); + DelLastSpace(sp->opt2); + if( !IsValidRST(sp->my) ){ + strcpy(sp->qsl, "0"); + strcpy(sp->opt1, "*INV*"); + m_errINV++; + } + else if( (strstr(sp->rem, "NOF") != NULL) || (strstr(sp->rem, "nof") != NULL) ){ + strcpy(sp->qsl, "0"); + strcpy(sp->opt1, "*NOF*"); + m_errNOF++; + } +} +void __fastcall TMainWnd::ShowErr(StrText *tp, int n, SDMMLOG *sp, LPCSTR pKey) +{ + m_ShowErrCount++; + if( m_ShowErrCount >= 100 ){ + if( m_ShowErrCount == 100 ){ + tp->Printf("Too many Warnings\r\n"); + } + } + else { + tp->Printf("%-4u %u/%02u %02u%02uZ %5s %-13s %-7s %-7s : %s\r\n", + n+1, + sp->date/100, sp->date%100, + (sp->btime/30)/60, (sp->btime/30)%60, + _band[sp->band], + sp->call, sp->ur, sp->my, + pKey + ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::Calc(LPCSTR pName) +{ + StrText str(32768); + m_ShowErrCount = 0; + + m_Days = 0; + if( pName == NULL ){ + pName = "OUTPUT"; + } + sprintf(m_LogName, "%s%s.txt", BgnDir, pName); + sprintf(m_SumName, "%s%s.sum", BgnDir, pName); + sprintf(m_AnaName, "%s%s.ana", BgnDir, pName); + FILE *pfLog = fopen(m_LogName, "wt"); + + fprintf(pfLog, "JASTA Contest Log. Year:%04u Contest Name:%s\n", sys.m_Year, sys.m_CName.c_str()); + fprintf(pfLog, "Call Sign:%s\n\n", sys.m_Call.c_str()); + fprintf(pfLog, "Date Time UTC Band Station WKD. Sent No. RCVD No. Multi. Point\n\n"); + + int Score = 0; + int i; + int add = -1; + m_CountHF = m_CountVU = m_CountS = 0; + m_MJA.Clear(); + m_MDX.Clear(); + m_DUP.Clear(); + char mlt[32]; + int mf = 0; + for( i = 0; i < Log.GetCount(); i++ ){ + SDMMLOG sd; + Log.GetData(&sd, i); + int wf = 0; + mlt[0] = 0; + int dd = sd.date % 100; + if( add != dd ){ // 日付マルチ + add = dd; + m_Days++; + m_DUP.Clear(); + } + if( sd.opt1[0] != '*' ){ + if( !m_DUP.Add(clipsp(sd.call)) ){ + strcpy(sd.qsl, "0"); + strcpy(sd.opt1, "*DUP*"); + m_errDUP++; + wf++; + } + else if( (!sd.opt1[0]) || + (strchr(sd.opt1, '?') != NULL) || + (!strcmp(sd.opt1, "JA")) || + IsNumbAll(sd.opt1) + ){ + m_errMLT++; + char bf[128]; + sprintf(bf, "DXCC Unknown [%s]", sd.opt1); + ShowErr(&str, i, &sd, bf); + if( !mf ){ + MoveGrid(i); + mf++; + } + } + else if( !strncmp(sd.opt1, "JA", 2) ){ + if( m_MJA.Add(sd.opt1) ) strcpy(mlt, sd.opt1); + } + else { + if( sd.band >= B_144 ){ + m_errBND++; + char bf[128]; + sprintf(bf, "DX on 2m & down"); + ShowErr(&str, i, &sd, bf); + if( !mf ){ + MoveGrid(i); + mf++; + } + } + if( m_MDX.Add(sd.opt1) ) strcpy(mlt, sd.opt1); + } + int d = atoin(sd.qsl, -1); + Score += d; + switch(d){ + case 1: + m_CountHF++; + break; + case 2: + m_CountVU++; + break; + case 3: + m_CountS++; + break; + } + } + if( wf ) Log.PutData(&sd, i); + if( sd.opt1[0] == '*' ){ + strcpy(mlt, sd.opt1); + ShowErr(&str, i, &sd, sd.opt1); + } +// 1 123456789011231234567890123123456789012345678912345678 +// 8/01 12:34U     14 JA1QRZ 595001 595010 JA1 1 + + fprintf(pfLog, "%u/%02u %02u:%02uU%11s %-13s%-10s%-9s%-8s%s\n", + sd.date / 100, sd.date % 100, + (sd.btime/30)/60, (sd.btime/30)%60, + _band[sd.band], + sd.call, + sd.ur, + sd.my, + mlt, + sd.qsl + ); + } + + int MJA = m_MJA.GetCount(); + int MDX = m_MDX.GetCount(); + int MDAY = m_Days; + if( MDAY > 10 ) MDAY = 10; + int MALL = MJA+MDX+MDAY; + int Total = MALL * Score; + + if( m_errMLT || m_errINV || m_errDUP || m_errNOF || m_errBND ){ + str.Printf("Warning\t" ); + if( m_errDUP ) str.Printf("DUP(%u)\t", m_errDUP); + if( m_errNOF ) str.Printf("NOFACE(%u)\t", m_errNOF); + if( m_errINV ) str.Printf("Invalid(%u)\t", m_errINV); + if( m_errMLT ) str.Printf("DXCC Unknown(%u)\t", m_errMLT); + if( m_errBND ) str.Printf("DX on 2m & down(%u)", m_errBND); + str.Printf("\r\n" ); + } + else { + str.Printf("No Warning\r\n"); + } + str.Printf("\r\nMulti\tJAs(%u) + DX(%u) + DAYs(%u/%u) = %u \r\n", MJA, MDX, MDAY, m_Days, MALL); + str.Printf("Points\tHF(%u)+VU(%u)+S(%u) = %u\r\n", m_CountHF, m_CountVU*2, m_CountS*3, Score); + str.Printf("Total\t%u x %u = %u\r\n", Score, MALL, Total); + str.Printf("Output\t%s %s", m_LogName, m_SumName); + Memo->Text = str.GetText(); + + fprintf(pfLog, "-------------------------------------------------------------------\n"); + fprintf(pfLog, "Total JA's area:%u\n", MJA); + fprintf(pfLog, "%2u days DXCC :%-3u %9u Points\n",m_Days, MDX, Score); + fprintf(pfLog, "Total point %u*(%u+%u+%u)=%u\n", Score, MJA, MDX, MDAY, Total); + if( m_errDUP || m_errNOF || m_errINV ){ + fprintf(pfLog, "\n[Note]\n"); + if( m_errDUP ) fprintf(pfLog, "*DUP* : Duplicate QSO\n"); + if( m_errNOF ) fprintf(pfLog, "*NOF* : Nothing his/her face in the received PIC\n"); + if( m_errINV ) fprintf(pfLog, "*INV* : Invalid QSO\n"); + } + fclose(pfLog); + + + const LPCSTR _tsize[]={"S","M","L","LL","?","?"}; + + pfLog = fopen(m_SumName, "wt"); + if( MsgEng ){ + fprintf(pfLog, "\n%04u JASTA SSTV CONTEST SUMMARY SHEET\n\n", sys.m_Year); + fprintf(pfLog, "1. Contest Name : %s\n", sys.m_CName.c_str()); + fprintf(pfLog, "2. Entry Section : %s\n", sys.m_Category ? "S" : "J"); + fprintf(pfLog, "3. First time entry : %s\n", sys.m_First ? "Yes" : "No"); + fprintf(pfLog, "4. OM or YL(XYL) : %s\n", sys.m_Sexual ? "YL/XYL":"OM"); + fprintf(pfLog, "5. Size of T-shirts : %s (for an Activity Premium)\n", _tsize[sys.m_TSize]); + fprintf(pfLog, "6. Callsign : %s\n", sys.m_Call.c_str()); + fprintf(pfLog, "7. Address : Postal Zip Code %s\n", sys.m_Zip.c_str()); + fprintf(pfLog, " : %s\n", sys.m_Adr.c_str()); + fprintf(pfLog, " e-mail : %s\n", sys.m_Mail.c_str()); + fprintf(pfLog, "8. Name : %s\n", sys.m_Name.c_str()); + fprintf(pfLog, "9. Licensed Class : %s\n", sys.m_License.c_str()); + fprintf(pfLog, "10.Output Power : %s\n", sys.m_Pow.c_str()); + fprintf(pfLog, "11.Result\n"); + fprintf(pfLog, " (1)Confirmed QSO number of 3.5-28MHz %5u x 1 = %u points\n", m_CountHF, m_CountHF); + fprintf(pfLog, " (2)Confirmed QSO number of 50-430MHz %5u x 2 = %u points\n", m_CountVU, m_CountVU*2); + fprintf(pfLog, " (3)Confirmed QSO number of 1200MHz&UP %5u x 3 = %u points\n", m_CountS, m_CountS*3); + fprintf(pfLog, "\n\n"); + fprintf(pfLog, " Total QSO points : (%u)+(%u)+(%u) = %u\n", m_CountHF, m_CountVU*2, m_CountS*3, Score); + fprintf(pfLog, "\n"); + fprintf(pfLog, " (4)Total Areas of JA's = %u\n", MJA); + fprintf(pfLog, " (5)Total Entity of DXCC except JA = %u\n", MDX); + fprintf(pfLog, " (6)Total Worked Days(Maximum 10 days) = %u\n", MDAY ); + fprintf(pfLog, "\n"); + fprintf(pfLog, " Total Multi : (%u)+(%u)+(%u) = %u\n", MJA, MDX, MDAY, MALL); + fprintf(pfLog, "\n\n"); + fprintf(pfLog, " Total Points : %u x %u = %u points\n", Score, MALL, Total); + fprintf(pfLog, "\n"); + fprintf(pfLog, "I declare my honor that in this contest I have operated\n" ); + fprintf(pfLog, "my station within the limitations of my license and have\n" ); + fprintf(pfLog, "observed fully the rules and regulations of the contest.\n" ); + fprintf(pfLog, "\n" ); + fprintf(pfLog, " %04u.%02u.%02u\n", m_now.wYear, m_now.wMonth, m_now.wDay); + fprintf(pfLog, " Singnature _________________\n" ); + fprintf(pfLog, "\n"); + fprintf(pfLog, "***************************************************************************\n"); + fprintf(pfLog, "(Remarks)\n\n\n"); + fprintf(pfLog, "---------------------------------------------------------------------------\n"); + } + else { + fprintf(pfLog, "\nJASTA 主催SSTVコンテストサマリーシート(様式AS)\n\n"); + fprintf(pfLog, "1.コンテスト名称 : %s\n", sys.m_CName.c_str()); + fprintf(pfLog, "2.参加部門 : %s\n", sys.m_Category ? "S" : "J"); + fprintf(pfLog, "3.初参加の区別 : %s\n", sys.m_First ? "初参加" : "過去にも参加した"); + fprintf(pfLog, "4.性別 : %s\n", sys.m_Sexual ? "YL/XYL":"OM"); + fprintf(pfLog, "5. Tシャツのサイズ : %s (アクティブ賞当選時用)\n", _tsize[sys.m_TSize]); + fprintf(pfLog, "6.コールサイン : %s\n", sys.m_Call.c_str()); + fprintf(pfLog, "7.住所 : 〒%s\n", sys.m_Zip.c_str()); + fprintf(pfLog, " : %s\n", sys.m_Adr.c_str()); + fprintf(pfLog, " e-mail : %s\n", sys.m_Mail.c_str()); + fprintf(pfLog, "8. 氏名 : %s\n", sys.m_Name.c_str()); + fprintf(pfLog, "9. 無線従事者の資格 : %s\n", sys.m_License.c_str()); + fprintf(pfLog, "10. 空中線電力 : %s\n", sys.m_Pow.c_str()); + fprintf(pfLog, "11. 結果\n"); + fprintf(pfLog, " (1) 3.5〜28MHz帯での交信局数 %5u x 1 = %u 点\n", m_CountHF, m_CountHF); + fprintf(pfLog, " (2) 50〜430MHz帯での交信局数 %5u x 2 = %u 点\n", m_CountVU, m_CountVU*2); + fprintf(pfLog, " (3) 1200MHz帯以上での交信局数 %5u x 3 = %u 点\n", m_CountS, m_CountS*3); + fprintf(pfLog, "\n\n"); + fprintf(pfLog, " 交信点数:(%u)+(%u)+(%u) = %u\n", m_CountHF, m_CountVU*2, m_CountS*3, Score); + fprintf(pfLog, "\n"); + fprintf(pfLog, " (4) 交信したJAのエリア数 = %u\n", MJA); + fprintf(pfLog, " (5) 交信したDXCCエンティティ数(JAを除く)= %u\n", MDX); + fprintf(pfLog, " (6) 運用日数(最大10) = %u\n", MDAY ); + fprintf(pfLog, "\n"); + fprintf(pfLog, " マルチ:(%u)+(%u)+(%u) = %u\n", MJA, MDX, MDAY, MALL); + fprintf(pfLog, "\n\n"); + fprintf(pfLog, " 総得点:交信点数×マルチ = %u × %u = %u 点\n", Score, MALL, Total); + fprintf(pfLog, "\n"); + fprintf(pfLog, " 以上、ここに提出するサマリーは運用した事実と相違ない事を誓います。\n"); + fprintf(pfLog, "\n"); + fprintf(pfLog, " %04u年 %02u月 %02u日\n", m_now.wYear, m_now.wMonth, m_now.wDay); + fprintf(pfLog, "\n"); + fprintf(pfLog, "***************************************************************************\n"); + fprintf(pfLog, "(意見等あればこの欄に記入下さい。)\n\n\n"); + fprintf(pfLog, "---------------------------------------------------------------------------\n"); + } + fclose(pfLog); + + MakeANA(); + if( m_errMLT ){ + WarningMB(MsgEng ? "There are unknown DXCC entities.\r\nDouble click on [DXCC Unknown] in the status window, and then edit the multi." : "未確定のDXCCエンティティが存在します.\r\n「DXCC Unknown」をダブルクリックし修正して下さい."); + return; + } + + KVAClick(NULL); + KVLClick(NULL); + KVSClick(NULL); +} +//--------------------------------------------------------------------------- +int __fastcall TMainWnd::GetBNO(int b) +{ + // 3.5, 7, 14, 18, 21, 24, 28, 50, 144, 430, 1200, 2400+ + if( b >= B_2400 ){ + b = 9; + } + else { + switch(b){ + case B_35: + case B_38: + b = 0; + break; + case B_7: + b = 1; + break; + default: + if( b >= B_14 ){ + b -= B_14; + b += 2; + } + else { + b = 11; + } + break; + } + } + return b; +} +//--------------------------------------------------------------------------- +// 解析フィアルを作成する +void __fastcall TMainWnd::MakeANA(void) +{ + FILE *fp = fopen(m_AnaName, "wt"); + if( fp == NULL ) return; + fprintf(fp, "\nAnalysis of %04u JASTA SSTV CONTEST\n\n", sys.m_Year); + + SDMMLOG sd; + CMULT MTMP; + int i, n; + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n ){ + MTMP.Add(clipsp(sd.call)); + } + } + MTMP.SortCount(); + + int b; + int max = MTMP.GetCount(); + fprintf(fp, "[Number of QSOs according to a callsign (%u/%u)]\n", max, MTMP.GetTotal()); + int col, row; + int base = 0; + while(1){ + for( row = 0; row < 50; row++ ){ + fprintf(fp, "%-4u ", base + row + 1); + for( col = 0; col < 4; col++ ){ + int n = base + (col * 50 + row); + if( n < max ){ + fprintf(fp, "(%2u) %-13s", MTMP.GetCount(n), MTMP.GetText(n)); + } + else { + continue; + } + } + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + base += 200; + if( base >= max ) break; + } + + int sum; + CMULT MDX[16]; + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n && m_MJA.GetCount(sd.opt1) ){ + b = GetBNO(sd.band); + MDX[b].Add(sd.opt1); + } + } + for( b = 0; b < 11; b++ ){ + MDX[b].Set("all", MDX[b].GetTotal()); + } + m_MJA.Sort(); + fprintf(fp, "[Number of QSOs according to a JA's area (%u/%u)]\n", m_MJA.GetCount(), m_MJA.GetTotal()); + fprintf(fp, "Area 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + m_MJA.Add("all"); + for( row = 0; row < m_MJA.GetCount(); row++ ){ + LPCSTR pDX = m_MJA.GetText(row); + fprintf(fp, "%-5s ", pDX); + sum = 0; + for( b = 0; b < 12; b++ ){ + n = MDX[b].GetCount(pDX); + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + } + fprintf(fp, sum ? "%4u\n" : " -\n", sum); + } + fprintf(fp, "\n"); + + for( b = 0; b < 11; b++ ){ + MDX[b].Clear(); + } + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n && m_MDX.GetCount(sd.opt1) ){ + b = GetBNO(sd.band); + MDX[b].Add(sd.opt1); + } + } + for( b = 0; b < 11; b++ ){ + MDX[b].Set("all", MDX[b].GetTotal()); + } + m_MDX.Sort(); + fprintf(fp, "[Number of QSOs according to a DX entity (%u/%u)]\n", m_MDX.GetCount(), m_MDX.GetTotal()); + fprintf(fp, "Entity 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + m_MDX.Add("all"); + for( row = 0; row < m_MDX.GetCount(); row++ ){ + LPCSTR pDX = m_MDX.GetText(row); + fprintf(fp, "%-5s ", pDX); + sum = 0; + for( b = 0; b < 12; b++ ){ + n = MDX[b].GetCount(pDX); + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + } + fprintf(fp, sum ? "%4u\n" : " -\n", sum); + } + fprintf(fp, "\n"); + + for( b = 0; b < 11; b++ ) MDX[b].Clear(); + MTMP.Clear(); + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n ){ + b = GetBNO(sd.band); + MTMP.Add(sd.opt2); + MDX[b].Add(sd.opt2); + } + + } + for( b = 0; b < 11; b++ ){ + MDX[b].Set("all", MDX[b].GetTotal()); + } + MTMP.Sort(); + MTMP.Add("all"); + fprintf(fp, "[Number of QSOs according to a continent]\n"); + fprintf(fp, "Conti. 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < MTMP.GetCount(); row++ ){ + LPCSTR pDX = MTMP.GetText(row); + fprintf(fp, "%-5s ", pDX); + sum = 0; + for( b = 0; b < 12; b++ ){ + n = MDX[b].GetCount(pDX); + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + } + fprintf(fp, sum ? "%4u\n" : " -\n", sum); + } + fprintf(fp, "\n"); + + + int QSODs[16][32]; + int QSOHs[16][25]; + memset(QSODs, 0, sizeof(QSODs)); + memset(QSOHs, 0, sizeof(QSOHs)); + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n ){ + b = GetBNO(sd.band); + n = sd.date % 100; + if( (n >= 1) && (n <= 31) ){ + n--; + QSODs[b][n]++; + } + n = (sd.btime / 30) / 60; + if( (n >= 0) && (n <= 23) ){ + QSOHs[b][n]++; + } + } + } + fprintf(fp, "[Number of QSOs according to a day(UTC)]\n"); + fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 32; row++ ){ + fprintf(fp, row == 31 ? "all " : "%02u ", row + 1); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSODs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSODs[b][31] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + fprintf(fp, "[Number of QSOs according to an hour(UTC)]\n"); + fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 25; row++ ){ + fprintf(fp, row == 24 ? "all " : "%02u ", row); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSOHs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSOHs[b][24] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + memset(QSODs, 0, sizeof(QSODs)); + memset(QSOHs, 0, sizeof(QSOHs)); + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n && !IsJA(sd.call) ){ + b = GetBNO(sd.band); + n = sd.date % 100; + if( (n >= 1) && (n <= 31) ){ + n--; + QSODs[b][n]++; + } + n = (sd.btime / 30) / 60; + if( (n >= 0) && (n <= 23) ){ + QSOHs[b][n]++; + } + } + } + fprintf(fp, "[Number of QSOs (DX) according to a day(UTC)]\n"); + fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 32; row++ ){ + fprintf(fp, row == 31 ? "all " : "%02u ", row + 1); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSODs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSODs[b][31] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + fprintf(fp, "[Number of QSOs (DX) according to an hour(UTC)]\n"); + fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 25; row++ ){ + fprintf(fp, row == 24 ? "all " : "%02u ", row); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSOHs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSOHs[b][24] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + memset(QSODs, 0, sizeof(QSODs)); + memset(QSOHs, 0, sizeof(QSOHs)); + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n && IsJA(sd.call) ){ + b = GetBNO(sd.band); + n = sd.date % 100; + if( (n >= 1) && (n <= 31) ){ + n--; + QSODs[b][n]++; + } + n = (sd.btime / 30) / 60; + if( (n >= 0) && (n <= 23) ){ + QSOHs[b][n]++; + } + } + } + fprintf(fp, "[Number of QSOs (JA) according to a day(UTC)]\n"); + fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 32; row++ ){ + fprintf(fp, row == 31 ? "all " : "%02u ", row + 1); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSODs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSODs[b][31] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + fprintf(fp, "[Number of QSOs (JA) according to an hour(UTC)]\n"); + fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 25; row++ ){ + fprintf(fp, row == 24 ? "all " : "%02u ", row); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSOHs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSOHs[b][24] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + memset(QSODs, 0, sizeof(QSODs)); + memset(QSOHs, 0, sizeof(QSOHs)); + CMULT MLTD, MLTH; + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n && sd.opt1[0] && !IsJA(sd.call) && (strchr(sd.opt1, '?')==NULL) ){ + b = GetBNO(sd.band); + n = sd.date % 100; + if( (n >= 1) && (n <= 31) ){ + n--; + if( MLTD.Add(sd.opt1) ) QSODs[b][n]++; + } + n = (sd.btime / 30) / 60; + if( (n >= 0) && (n <= 23) ){ + if( MLTH.Add(sd.opt1) ) QSOHs[b][n]++; + } + } + } + fprintf(fp, "[Number of NEW MULTIs (DX) according to a day(UTC)]\n"); + fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 32; row++ ){ + fprintf(fp, row == 31 ? "all " : "%02u ", row + 1); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSODs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSODs[b][31] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + fprintf(fp, "[Number of NEW MULTIs (DX) according to an hour(UTC)]\n"); + fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 25; row++ ){ + fprintf(fp, row == 24 ? "all " : "%02u ", row); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSOHs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSOHs[b][24] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + memset(QSODs, 0, sizeof(QSODs)); + memset(QSOHs, 0, sizeof(QSOHs)); + MLTD.Clear(); + MLTH.Clear(); + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetData(&sd, i); + n = atoin(sd.qsl, -1); + if( n && sd.opt1[0] && IsJA(sd.call) && (strchr(sd.opt1, '?')==NULL) ){ + b = GetBNO(sd.band); + n = sd.date % 100; + if( (n >= 1) && (n <= 31) ){ + n--; + if( MLTD.Add(sd.opt1) ) QSODs[b][n]++; + } + n = (sd.btime / 30) / 60; + if( (n >= 0) && (n <= 23) ){ + if( MLTH.Add(sd.opt1) ) QSOHs[b][n]++; + } + } + } + fprintf(fp, "[Number of NEW MULTIs (JA) according to a day(UTC)]\n"); + fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 32; row++ ){ + fprintf(fp, row == 31 ? "all " : "%02u ", row + 1); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSODs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSODs[b][31] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + fprintf(fp, "[Number of NEW MULTIs (JA) according to an hour(UTC)]\n"); + fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n"); + for( row = 0; row < 25; row++ ){ + fprintf(fp, row == 24 ? "all " : "%02u ", row); + int sum = 0; + for( b = 0; b < 12; b++ ){ + n = QSOHs[b][row]; + sum += n; + fprintf(fp, n ? "%4u " : " - ", n); + QSOHs[b][24] += n; + } + fprintf(fp, sum ? "%4u" : " -", sum); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + fclose(fp); +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KFSClick(TObject *Sender) +{ + int meng = MsgEng; + TOptDlgBox *pBox = new TOptDlgBox(this); + int r = pBox->Execute(); + delete pBox; + if( meng != MsgEng ) SetLanguage(); + if( (r == TRUE) && Log.IsOpen() && !m_SrcName.IsEmpty() ){ + m_ReCalc = TRUE; + if( YesNoMB(MsgEng ? "Does totalize once again?" : "集計しなおしますか ?") == IDYES ){ + Exec(m_SrcName.c_str(), FALSE); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KVLClick(TObject *Sender) +{ + if( m_pEditLog != NULL ) delete m_pEditLog; + if( m_LogName[0] ){ + m_pEditLog = new TFileEdit(this); + m_pEditLog->Execute(m_LogName); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KVSClick(TObject *Sender) +{ + if( m_pEditSum != NULL ) delete m_pEditSum; + if( m_SumName[0] ){ + m_pEditSum = new TFileEdit(this); + m_pEditSum->Execute(m_SumName); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KVAClick(TObject *Sender) +{ + if( m_pEditAna != NULL ) delete m_pEditAna; + if( m_AnaName[0] ){ + m_pEditAna = new TFileEdit(this); + m_pEditAna->Execute(m_AnaName); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KVClick(TObject *Sender) +{ + KVL->Enabled = m_LogName[0] && IsFile(m_LogName) ? TRUE : FALSE; + KVS->Enabled = m_SumName[0] && IsFile(m_SumName) ? TRUE : FALSE; + KVA->Enabled = m_AnaName[0] && IsFile(m_AnaName) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::MoveGrid(int n) +{ + Grid->Row = n + 1; + if( (Grid->Row < Grid->TopRow) || (Grid->Row >= (Grid->TopRow+8)) ){ + Grid->TopRow = Grid->Row; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::MemoClick(TObject *Sender) +{ + m_GridMove = FALSE; + if( Memo->Lines->Count ){ + int e = Memo->SelStart; + LPCSTR p = AnsiString(Memo->Text).c_str(); //ja7ude 0525 + int n = 0; + for( int i = 0; i < e; i++, p++ ){ + if( *p == LF ) n++; + } + if( n > Memo->Lines->Count ) n = Memo->Lines->Count - 1; + char bf[256]; + StrCopy(bf, AnsiString(Memo->Lines->Strings[n]).c_str(), sizeof(bf)-1); + if( isdigit(bf[0]) ){ + LPSTR t; + StrDlm(t, bf, ' '); + n = atoin(t, -1) - 1; + if( (n >= 0) && (n < Log.GetCount()) ){ + MoveGrid(n); + m_GridMove = TRUE; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::MemoDblClick(TObject *Sender) +{ + if( m_GridMove ){ + GridDblClick(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KHTClick(TObject *Sender) +{ + ShowHelp(this, MsgEng ? "EMMJASTA.TXT":"MMJASTA.TXT"); +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KHMClick(TObject *Sender) +{ + WebRef.ShowHTML(MsgEng ? "http://www.qsl.net/mmhamsoft/" : "http://plaza27.mbn.or.jp/~je3hht/mmsstv/index.html"); +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KHRClick(TObject *Sender) +{ + WebRef.ShowHTML(MsgEng ? "http://groups.yahoo.com/group/MM-SSTV/" : "http://www.egroups.co.jp/group/mmhamsoft/"); +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KHWClick(TObject *Sender) +{ + WebRef.ShowHTML("http://homepage3.nifty.com/jasta/"); +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::GridDblClick(TObject *Sender) +{ + if( m_SrcName.IsEmpty() ) return; + if( !Log.IsOpen() ) return; + + int n = Grid->Row - 1; + if( (n >= 0) && (n < Log.GetCount()) ){ + TQSODlgBox *pBox = new TQSODlgBox(this); + SDMMLOG sd, rsd; + Log.GetData(&sd, n); + memcpy(&rsd, &sd, sizeof(sd)); + if( pBox->Execute(&sd) == TRUE ){ + DelLastSpace(sd.opt1); + DelLastSpace(sd.opt2); + if( strcmp(sd.opt1, rsd.opt1) || strcmp(sd.opt2, rsd.opt2) ){ + LPSTR p = lastp(sd.opt1); + p+=2; + *p = 0x01; + p = lastp(sd.opt2); + p+=2; + *p = 0x01; + + CLogFile orgLog; + orgLog.Open(m_SrcName.c_str(), TRUE); + if( !orgLog.IsOpen() ) return; + + m_ReCalc = TRUE; + int i; + for( i = 0; i < Log.GetCount(); i++ ){ + Log.GetIndex()->ReadIndex(rsd.call, i); + if( !strcmp(sd.call, rsd.call) ){ + Log.GetData(&rsd, i); + memcpy(rsd.opt1, sd.opt1, MLOPT); + memcpy(rsd.opt2, sd.opt2, MLOPT); + Log.PutData(&rsd, i); + } + } + + for( i = 0; i < orgLog.GetCount(); i++ ){ + orgLog.GetIndex()->ReadIndex(rsd.call, i); + if( !strcmp(sd.call, rsd.call) ){ + orgLog.GetData(&rsd, i); + memcpy(rsd.opt1, sd.opt1, MLOPT); + memcpy(rsd.opt2, sd.opt2, MLOPT); + orgLog.PutData(&rsd, i); + } + } + orgLog.Close(); + } + } + Grid->Invalidate(); + delete pBox; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KFRClick(TObject *Sender) +{ + if( m_ReCalc ){ + Exec(m_SrcName.c_str(), FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::KFClick(TObject *Sender) +{ + KFR->Enabled = m_ReCalc && (!m_SrcName.IsEmpty()); +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall TMainWnd::ConvADIF(LPCSTR pName, int loadorg) +{ + AnsiString LogName = pName; + + char TmpName[256]; + sprintf(TmpName, "%s"TEMPLOGNAME, BgnDir); + m_SrcName = TmpName; + + if( !loadorg ) return m_SrcName.c_str(); + + CLogADIF adif; + if( adif.Open(LogName.c_str()) == FALSE ) return NULL; + + CLogFile tmpLog; + tmpLog.Open(TmpName, TRUE); + if( !tmpLog.IsOpen() ) return NULL; + tmpLog.DeleteAll(); + + SDMMLOG sd; + memset(&sd, 0, sizeof(sd)); + CWaitCursor w; + while(adif.Read(&sd)==TRUE){ + if( (sd.mode == 8) && (sd.band >= B_35) ){ + sd.opt1[0] = 0; sd.opt2[0] = 0; + tmpLog.PutData(&sd, tmpLog.GetCount()); + } + memset(&sd, 0, sizeof(sd)); + } + adif.Close(); + tmpLog.Close(); + + return m_SrcName.c_str(); +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall TMainWnd::ConvLog200(LPCSTR pName, int loadorg) +{ + AnsiString LogName = pName; + + char TmpName[256]; + sprintf(TmpName, "%s"TEMPLOGNAME, BgnDir); + m_SrcName = TmpName; + + if( !loadorg ) return m_SrcName.c_str(); + + CLog200 log; + if( log.Open(LogName.c_str()) == FALSE ) return NULL; + + CLogFile tmpLog; + tmpLog.Open(TmpName, TRUE); + if( !tmpLog.IsOpen() ) return NULL; + tmpLog.DeleteAll(); + + SDMMLOG sd; + CWaitCursor w; + while(log.Read(&sd)==TRUE){ + if( (sd.mode == 8) && (sd.band >= B_35) ){ + sd.opt1[0] = 0; sd.opt2[0] = 0; + tmpLog.PutData(&sd, tmpLog.GetCount()); + } + } + log.Close(); + tmpLog.Close(); + + return m_SrcName.c_str(); +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall TMainWnd::ConvHAMLOG(LPCSTR pName, int loadorg) +{ + AnsiString LogName = pName; + + char TmpName[256]; + sprintf(TmpName, "%s"TEMPLOGNAME, BgnDir); + m_SrcName = TmpName; + + if( !loadorg ) return m_SrcName.c_str(); + + CHamLog log; + if( log.Open(LogName.c_str()) == FALSE ) return NULL; + + CLogFile tmpLog; + tmpLog.Open(TmpName, TRUE); + if( !tmpLog.IsOpen() ) return NULL; + tmpLog.DeleteAll(); + + SDMMLOG sd; + CWaitCursor w; + while(log.Read(&sd)==TRUE){ + if( (sd.mode == 8) && (sd.band >= B_35) ){ + sd.opt1[0] = 0; sd.opt2[0] = 0; + AdjustHamlogRSV(&sd); + tmpLog.PutData(&sd, tmpLog.GetCount()); + } + } + log.Close(); + tmpLog.Close(); + + return m_SrcName.c_str(); +} +//--------------------------------------------------------------------------- +void __fastcall TMainWnd::AdjustHamlogRSV(SDMMLOG *sp) +{ + char bf[MLREM+1]; + if( strlen(sp->ur) <= 3 ){ + NumCopy(bf, sp->rem); + if( bf[0] ){ + int n = atoin(bf, -1); + sprintf(bf, "%03u", n); + strcat(sp->ur, bf); + } + } + if( strlen(sp->my) <= 3 ){ + NumCopy(bf, sp->qsl); + if( bf[0] ){ + int n = atoin(bf, -1); + sprintf(bf, "%03u", n); + strcat(sp->my, bf); + } + } +} +//--------------------------------------------------------------------------- + + \ No newline at end of file diff --git a/JASTA/Main.dfm b/JASTA/Main.dfm new file mode 100644 index 0000000000000000000000000000000000000000..21db139c721ff9f70b95c1e96fbfc72c43caa8c2 GIT binary patch literal 1741 zcmZ`(zi%T&6rPL|?+^QuBT7S;DoTp829Qp)&W2?jdu`)g*>td8Pwdr=XUux6Bvhxf zbh-wK4kW5WSDZuv1?VKMq=7$xmc{}O&>_(yg_&88?Tdp}+MTy=-}k=ndoz1wgU~Nm z>Ye%tK)0Xg0SKEeGDAN~XovQU`E#>|&v@={kPF!eUKEa5+QVtUF9|lx?l?$jpWvcH z5=^;=lm39`yp2K@cak0-1aaE~C8U45D<5xp6!2DsFgM2|jSV zaw~Wzw6nA-D#oOf&>lMv@dYoaMAioWW2vYf4e_oC0JwAY*3~{hSKp#%=m+#Q%1{*3 z0@(C1ofxLnBv;!F(sNQAaomt{EVIeR2~QX`wnr?8Q;ex21mV^1Cyhp?A*U(% zTe7EGzM@LL)v5rn)G3iWX|biUbAq5cCrExFvK5Ypu<9C4q~@UZ>CfmfdV>B!hu{FX z;0P=_8&y~JU8&7g-9Q)by)Jy2J$OEwPG{3cvj<1ds zUlTYl(KkpFq39+07yYCN)dZoEx>f;eYk;u+rpC)}+);+i +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +#include "LogFile.h" +#include "Country.h" +#include "FEdit.h" + +//--------------------------------------------------------------------------- +class TMainWnd : public TForm +{ +__published: // IDE 管理のコンポーネント + TMainMenu *MainMenu; + TStringGrid *Grid; + TMenuItem *KF; + TMemo *Memo; + TMenuItem *KFL; + TOpenDialog *OpenDialog; + TMenuItem *KFS; + TMenuItem *KV; + TMenuItem *KVL; + TMenuItem *KVS; + TMenuItem *KH; + TMenuItem *KHT; + TMenuItem *KHW; + TMenuItem *N1; + TMenuItem *KHM; + TMenuItem *KHR; + TMenuItem *N2; + TMenuItem *KFR; + TMenuItem *KVA; + void __fastcall GridDrawCell(TObject *Sender, int Col, int Row, + TRect &Rect, TGridDrawState State); + + void __fastcall KFLClick(TObject *Sender); + void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); + void __fastcall KFSClick(TObject *Sender); + void __fastcall KVLClick(TObject *Sender); + void __fastcall KVSClick(TObject *Sender); + void __fastcall KVClick(TObject *Sender); + void __fastcall MemoClick(TObject *Sender); + + void __fastcall KHWClick(TObject *Sender); + void __fastcall KHTClick(TObject *Sender); + void __fastcall KHMClick(TObject *Sender); + void __fastcall KHRClick(TObject *Sender); + void __fastcall GridDblClick(TObject *Sender); + void __fastcall MemoDblClick(TObject *Sender); + void __fastcall KFRClick(TObject *Sender); + void __fastcall KFClick(TObject *Sender); + void __fastcall KVAClick(TObject *Sender); +private: // ユーザー宣言 + AnsiString m_SrcName; + SYSTEMTIME m_now; + int m_FIndex; + int m_Year; + int m_Days; + + int m_ShowErrCount; + + int m_CountHF; + int m_CountVU; + int m_CountS; + + CMULT m_MJA; + CMULT m_MDX; + CMULT m_DUP; + + int m_errDUP; + int m_errINV; + int m_errNOF; + int m_errMLT; + int m_errBND; + + char m_LogName[256]; + char m_SumName[256]; + char m_AnaName[256]; + + TFileEdit *m_pEditLog; + TFileEdit *m_pEditSum; + TFileEdit *m_pEditAna; + + CWebRef WebRef; + + int m_GridMove; + int m_ReCalc; + + void __fastcall SetTitle(void); + void __fastcall SetLanguage(void); + void __fastcall ReadRegister(void); + void __fastcall WriteRegister(void); + int __fastcall IsValidRST(LPSTR pRST); + void __fastcall AdjustData(SDMMLOG *sp); + void __fastcall ShowErr(StrText *tp, int n, SDMMLOG *sp, LPCSTR pKey); + void __fastcall Exec(LPCSTR pName, int loadorg); + void __fastcall Calc(LPCSTR pName); + void __fastcall MoveGrid(int n); + int __fastcall GetBNO(int b); + void __fastcall MakeANA(void); + + LPCSTR __fastcall ConvADIF(LPCSTR pName, int loadorg); + LPCSTR __fastcall ConvLog200(LPCSTR pName, int loadorg); + LPCSTR __fastcall ConvHAMLOG(LPCSTR pName, int loadorg); + void __fastcall AdjustHamlogRSV(SDMMLOG *sp); + +public: // ユーザー宣言 + __fastcall TMainWnd(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TMainWnd *MainWnd; +//--------------------------------------------------------------------------- +#endif + + \ No newline at end of file diff --git a/JASTA/OptDlg.cpp b/JASTA/OptDlg.cpp new file mode 100644 index 0000000..ab11fb6 --- /dev/null +++ b/JASTA/OptDlg.cpp @@ -0,0 +1,117 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "OptDlg.h" +#include "Country.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TOptDlgBox *OptDlgBox; +//--------------------------------------------------------------------- +__fastcall TOptDlgBox::TOptDlgBox(TComponent* AOwner) + : TForm(AOwner) +{ +} +//--------------------------------------------------------------------- +void __fastcall TOptDlgBox::SetLanguage(void) +{ + if( RGL->ItemIndex ){ + Caption = "Setup"; + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + + RGL->Caption = "Language"; + RGL->Items->Strings[0] = "Japanese"; + RGL->Items->Strings[1] = "English"; + L1->Caption = "Callsign"; + L2->Caption = "Year"; + RGC->Caption = "Entry Section"; + RGC->Items->Strings[0] = "J (Japan)"; + RGC->Items->Strings[1] = "S"; + RGF->Caption = "First time entry"; + RGF->Items->Strings[0] = "No"; + RGF->Items->Strings[1] = "Yes"; + L3->Caption = "ZIP"; + L4->Caption = "Address"; +// L5->Caption = "E-Mail"; + L6->Caption = "Name"; + L7->Caption = "License"; + L9->Caption = "Size of T-shirts as an Activity Premium"; + + CancelBtn->Caption = "Cancel"; + } + else { + Caption = "セットアップ"; + Font->Name = "MS Pゴシック"; + Font->Charset = SHIFTJIS_CHARSET; + + RGL->Caption = "言語 (Language)"; + RGL->Items->Strings[0] = "日本語(Japanese)"; + RGL->Items->Strings[1] = "英語(English)"; + L1->Caption = "コールサイン"; + L2->Caption = "集計年度"; + RGC->Caption = "参加部門"; + RGC->Items->Strings[0] = "J (日本国内)"; + RGC->Items->Strings[1] = "S (海外)"; + RGF->Caption = "初参加"; + RGF->Items->Strings[0] = "過去にも参加した"; + RGF->Items->Strings[1] = "初参加"; + L3->Caption = "郵便番号"; + L4->Caption = "住所"; +// L5->Caption = "E-Mail"; + L6->Caption = "氏名"; + L7->Caption = "資格"; + L9->Caption = "アクティブ賞のT−シャツ当選時の希望サイズ"; + CancelBtn->Caption = "キャンセル"; + } +} +//--------------------------------------------------------------------- +int __fastcall TOptDlgBox::Execute(void) +{ + RGL->ItemIndex = MsgEng; + SetLanguage(); + + EditCall->Text = sys.m_Call; + EditYear->Text = sys.m_Year; + RGC->ItemIndex = sys.m_Category; + RGF->ItemIndex = sys.m_First; + EditZip->Text = sys.m_Zip; + EditAdr->Text = sys.m_Adr; + EditMail->Text = sys.m_Mail; + EditName->Text = sys.m_Name; + EditLicense->Text = sys.m_License; + EditPow->Text = sys.m_Pow; + CBSex->ItemIndex = sys.m_Sexual; + CBTSize->ItemIndex = sys.m_TSize; + + if( ShowModal() == IDOK ){ + sys.m_Call = EditCall->Text.c_str(); + jstrupr(sys.m_Call.c_str()); + sscanf(AnsiString(EditYear->Text).c_str(), "%u", &sys.m_Year); + + sys.m_Category = RGC->ItemIndex; + sys.m_First = RGF->ItemIndex; + sys.m_Zip = EditZip->Text; + sys.m_Adr = EditAdr->Text; + sys.m_Mail = EditMail->Text; + sys.m_Name = EditName->Text; + sys.m_License = EditLicense->Text; + sys.m_Pow = EditPow->Text; + sys.m_Sexual = CBSex->ItemIndex; + sys.m_TSize = CBTSize->ItemIndex; + + MsgEng = RGL->ItemIndex; + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------- +void __fastcall TOptDlgBox::RGLClick(TObject *Sender) +{ + SetLanguage(); +} +//--------------------------------------------------------------------------- + + \ No newline at end of file diff --git a/JASTA/OptDlg.dfm b/JASTA/OptDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..6beb05e8d72ce6fa2b648ea280e9a489f2c70158 GIT binary patch literal 2350 zcma)8&ub(_6t3>hbkEPY26a&pgBN$ftiAcID46NVk4ZY|ak?>yNMdKEGSj;~U2S&_ zne3{_iWkWt2VGED@gUyBgGvxVLBah4#EXh}S@9rvaq%Q=b=CAtWfE5}#S~rN`@Z+R z_o^n!0?VjaC4I4IYykDl0~r9U%7U7;3?G-=MiF%~yY z*jun`Fu#C2d_im4K?t#O##|~dSj%N|TU(l|n)6nceWsv%&0TlAI@+^f2j}PqMkD@_ zp}RG^1xL~VfU#&I8U$7;3!sgm5vP+$S5WB087RX(GHU^Z zo<=f&LADY&9yV(>NmusK8uFk_clC6k;&h-JR$x%}YEALQY%HlO=58Qcy1fHkQNKtH z6m!(Sl@v8Wd|FNpCf1F}MDvx%kKT!{MnQBV0{sxlzK5TbFS0yT12oi zjO}Xd`f@wO&hCCM`Vfi!?e+AVcjppmsH5gcHz_v&5;FqE7UB)Qk?I_oANpw-Ty{lcLC? zv7(gVuHANVCbx>}wp)cE*@!~gvUliYh~#QWqGvSQtHF3^8AC~+*_^^4vy+*GX(UCG z+9L_vh+ZWPevC`(b7cWYS@U%Vr{hJlU6;9L(%C6@%eyC`}S z+5waKD3vKD@T;f5bA>X7t?+`0$+R~@K^_`c)r)i;r|Se=C+Rvx*J--W&~=v3=d7w- zchF*h+P+j>)R^)-Rqin5(&r%Ip6fXi59ZhA`_Jtm8BdYlmN$m(^=( z{C!>BR!92BIes$Yta?gZz2_aDS+Gu<hUC!YK#EEtPpKy4PP%vd-RTgwv I)MG~Q4>t?9!T +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "ComLib.h" +//---------------------------------------------------------------------------- +class TOptDlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TLabel *L1; + TEdit *EditCall; + TLabel *L2; + TComboBox *EditYear; + TRadioGroup *RGC; + TRadioGroup *RGF; + TLabel *L3; + TEdit *EditZip; + TLabel *L4; + TEdit *EditAdr; + TLabel *L5; + TEdit *EditMail; + TLabel *L6; + TEdit *EditName; + TLabel *L7; + TEdit *EditLicense; + TLabel *L8; + TEdit *EditPow; + TRadioGroup *RGL; + TComboBox *CBSex; + TLabel *L9; + TComboBox *CBTSize; + void __fastcall RGLClick(TObject *Sender); +private: + void __fastcall SetLanguage(void); + +public: + virtual __fastcall TOptDlgBox(TComponent* AOwner); + int __fastcall Execute(void); +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TOptDlgBox *OptDlgBox; +//---------------------------------------------------------------------------- +#endif diff --git a/JASTA/QsoDlg.cpp b/JASTA/QsoDlg.cpp new file mode 100644 index 0000000..fa45592 --- /dev/null +++ b/JASTA/QsoDlg.cpp @@ -0,0 +1,49 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "QsoDlg.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TQSODlgBox *QSODlgBox; +//--------------------------------------------------------------------- +__fastcall TQSODlgBox::TQSODlgBox(TComponent* AOwner) + : TForm(AOwner) +{ + if( MsgEng ){ + Font->Name = "Arial"; + Font->Charset = ANSI_CHARSET; + + L2->Caption = "Continent"; + CancelBtn->Caption = "Cancel"; + } +} +//--------------------------------------------------------------------- +int __fastcall TQSODlgBox::Execute(SDMMLOG *sp) +{ + char bf[256]; + + sprintf(bf, "%s %2u/%02u %02u%02u %s %s %s %s\n", + _band[sp->band], + sp->date / 100, sp->date % 100, + (sp->btime/30)/60, (sp->btime/30)%60, + sp->call, + sp->my, + sp->opt1, + sp->opt2 + ); + LOrg->Caption = bf; + EditDXCC->Text = sp->opt1; + EditCont->Text = sp->opt2; + if( ShowModal() == IDOK ){ + StrCopy(sp->opt1, AnsiString(EditDXCC->Text).c_str(), MLOPT); //ja7ude 0525 + jstrupr(sp->opt1); + StrCopy(sp->opt2, AnsiString(EditCont->Text).c_str(), MLOPT); //ja7ude 0525 + jstrupr(sp->opt2); + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------- diff --git a/JASTA/QsoDlg.dfm b/JASTA/QsoDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..f7582ae0f04ad747c86c2f20c43baa5aa6c96268 GIT binary patch literal 928 zcmZuw&2G~$9Cw}Nv)xpBf)f)UaoUu@3(&eP?bbD=3EH>-ZsMkv+_*|yt-EkVNSu*4 z@C;m#cmNK(1+M^a5FDr3hQ`5B{PFw$KKys?fZ&Dibw|%T-Z^laA2k4iN#AwUDvLXO zV;B4CZ)Zg2LhIJFfUmS)px)tWL{eW|GGbb@tV=QDv5D|XP@Wi0FQQ_9xn_bk5Thg! z14844&^~~AIX|P3SZMESI^v9{rX8}5NcuP=jXqDrAzI)xBf@O@gJC~79{O+4pgr|_ zfm3cPP$Oh#G>P~{KsKVTHcA@!+g7tNUXqpt0655>=KH|Szq#MtAMRJTtfJJ{!Jfw= zloBk6S9r3m3D0O@!`xeOKTHWpkaR#&XOhxH_#u{_jTImBgcxcTS-TUuAuOAabeMz- z_|_>TZN=OHMlixN!gfYp8mk~-v&a!Pbrl1AXjDh95>#hFg@mJ{n>cridvqJ8pBACt z06r;i?hjCmM_c5BE2Q0KG)|V%pt&dTw78|?btdTiveMFmGQr2MHlF}6gU(tAp6K3* zyslDGs0!n4;n!8+`xV@P-ig^Ib1a3~^-~^UHYJ&yz?v1{naUhWimJAaa1xTD9ZKat zOXar-jPjse5w&!w^CD;Ym;7D+IsbV)?N2v7iO!+w2`Uol?_pXt$ zyd5CEoN@Uy6dK81EmhuCF9TL^??3R`?og0rcIXS)MsZd%VB44BAOnuu2K43Vy_9Qx JImVI-`~?gK7b^e& literal 0 HcmV?d00001 diff --git a/JASTA/QsoDlg.h b/JASTA/QsoDlg.h new file mode 100644 index 0000000..8b973ef --- /dev/null +++ b/JASTA/QsoDlg.h @@ -0,0 +1,37 @@ +//---------------------------------------------------------------------------- +#ifndef QSODlgH +#define QSODlgH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "LogFile.h" +//---------------------------------------------------------------------------- +class TQSODlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TLabel *LOrg; + TLabel *L1; + TLabel *L2; + TEdit *EditDXCC; + TComboBox *EditCont; +private: +public: + virtual __fastcall TQSODlgBox(TComponent* AOwner); + + int __fastcall Execute(SDMMLOG *sp); +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TQSODlgBox *QSODlgBox; +//---------------------------------------------------------------------------- +#endif diff --git a/JASTA/TextEdit.cpp b/JASTA/TextEdit.cpp new file mode 100644 index 0000000..2560875 --- /dev/null +++ b/JASTA/TextEdit.cpp @@ -0,0 +1,144 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "TextEdit.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" + +//TTextEditDlg *TextEditDlg; +//--------------------------------------------------------------------- +__fastcall TTextEditDlg::TTextEditDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + ap = NULL; + Memo->Font->Pitch = fpFixed; + EntryAlignControl(); + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + CancelBtn->Caption = "Cancel"; + FontBtn->Caption = "Font"; + Memo->Font->Name = "Courier New"; + Memo->Font->Charset = 0; + } +} +//--------------------------------------------------------------------- +int __fastcall TTextEditDlg::Execute(AnsiString &as, int flag, LPCSTR pTitle /* = NULL*/) +{ + CWaitCursor tw; + ap = as.c_str(); + if( flag != TRUE ){ + OKBtn->Visible = FALSE; + CancelBtn->Caption = MsgEng ? "Close":"閉じる"; + Memo->ReadOnly = TRUE; + } + if( pTitle != NULL ){ + Caption = pTitle; + } + tw.Delete(); + int r = ShowModal(); + if( r == IDOK ){ + if( Memo->Modified == FALSE ) return FALSE; + if( flag == TRUE ){ + as = Memo->Text; + } + return TRUE; + } + return FALSE; +} + +void __fastcall TTextEditDlg::FontBtnClick(TObject *Sender) +{ + FontDialog->Font->Assign(Memo->Font); + if( FontDialog->Execute() == TRUE ){ + CWaitCursor tw; + Memo->Font->Assign(FontDialog->Font); + Memo->Update(); + } +} +//--------------------------------------------------------------------------- +// サイズ変更コントロールの登録 +void __fastcall TTextEditDlg::EntryAlignControl(void) +{ + RECT rc; + rc.left = 0; + rc.top = 0; + rc.right = 792-1; + rc.bottom = 572-1; + + AlignList.EntryControl(OKBtn, &rc, OKBtn->Font); + AlignList.EntryControl(CancelBtn, &rc, CancelBtn->Font); + AlignList.EntryControl(FontBtn, &rc, FontBtn->Font); + AlignList.EntryControl(Memo, &rc, Memo->Font); + + int CX = ::GetSystemMetrics(SM_CXFULLSCREEN); + int CY = ::GetSystemMetrics(SM_CYFULLSCREEN); +// int CX = ::GetSystemMetrics(SM_CXSCREEN); +// int CY = ::GetSystemMetrics(SM_CYSCREEN); + if( (CX < Width)||(CY < Height) ){ + Top = 0; + Left = 0; + Width = CX; + Height = CY; + } + FormCenter(this, CX, CY); + if( Owner != NULL ){ + WindowState = ((TForm *)Owner)->WindowState; + } +} +//--------------------------------------------------------------------------- +void __fastcall TTextEditDlg::FormResize(TObject *Sender) +{ + CWaitCursor tw; + AlignList.NewAlign(this); +} +//--------------------------------------------------------------------------- +void __fastcall TTextEditDlg::FormPaint(TObject *Sender) +{ + if( ap == NULL ) return; + CWaitCursor tw; + Memo->Text = ap; + ap = NULL; + Memo->Update(); +} +//--------------------------------------------------------------------------- +// テキストヘルプの表示 +void __fastcall ShowHelp(TForm *pForm, LPCSTR pName) +{ + char bf[2048]; + char Name[256]; + FILE *fp; + + sprintf(Name, "%s%s", BgnDir, pName); + CWaitCursor w; + if( (fp = fopen(Name, "rt"))!=NULL ){ + if( sys.m_HelpNotePad ){ + fclose(fp); + sprintf( bf, "NOTEPAD.EXE %s", Name); + WinExec(bf, SW_SHOWDEFAULT); + } + else { + AnsiString in; + while(!feof(fp)){ + if( fgets(bf, 2048, fp) != NULL ){ + ClipLF(bf); + in += bf; + in += "\r\n"; + } + } + fclose(fp); + TTextEditDlg *Box = new TTextEditDlg(pForm); + Box->Execute(in, FALSE, pName); + delete Box; + } + } + else { + ErrorMB( MsgEng ? "'%s' was not found.\r\n\r\nProbably this file will be provided in the future." : "'%s'が見つかりません.", Name); + } +} +//--------------------------------------------------------------------------- + + \ No newline at end of file diff --git a/JASTA/TextEdit.dfm b/JASTA/TextEdit.dfm new file mode 100644 index 0000000000000000000000000000000000000000..26faaba42c136cc1fbf57e9236de042bc0b12a76 GIT binary patch literal 1050 zcmb_bO^(wr6n34q&QC$3u7(v{02B$aKw?AFc3L`}MiYy&0!;FzjmEVr$3tgWu;COe zH~=d)NOJ%-T!3pJAr26nq(6)VLL;$>-ix2#=l6Zz%Uwii?-}iNhqQZmfc(9B9U&U_ z{T8Kgu6s$UyL{&T7S|8qL|gBWMdcEYNWhjlm7-~HN?HL=LFfUbv$?h&VXw-kX`<)W zzSRgMmx?$s?`Y9yF|_(p=zGDOsSGsPiw46!eKL$*1cS%NQIERSae0ZDOPs~0Uiq&= zz~7xRJ7NoH+X$h%`ThJ3^7GIBrT@kMnbEdTvjmgN&Uhx>=f=BBXZj=P!=goEb?Jcu-G9q0#VP{-B-dHA#8!(gL znoZfO^6j{Ww%wh8i5LoYD}>9xA~dT?XM@yk82VN@&p+gE^Y{4`EWE?Q2sP*!7P4M` z3OnG+4X7HzsJx!SYUBSYFWJibM{&t;0fh~kWE>60y@wCnkSSxu!XLI9#Y%GCF*YM^ zmOTZfQzP|mEM!la(1y{>*^x<#yBjL8{V%QBW_i#z|D*rY|LX5rTgE?T3*u8!vSIp_ t8A2W{`gc>t<*f8+6<&k0R?MfVNaU(;+LgWdah<)Wtg@_?1MVAz(JyyPNC^M{ literal 0 HcmV?d00001 diff --git a/JASTA/TextEdit.h b/JASTA/TextEdit.h new file mode 100644 index 0000000..7b50947 --- /dev/null +++ b/JASTA/TextEdit.h @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------------- +#ifndef TextEditH +#define TextEditH +//---------------------------------------------------------------------------- +//ja7ude 0525 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +class TTextEditDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TMemo *Memo; + TButton *FontBtn; + TFontDialog *FontDialog; + void __fastcall FontBtnClick(TObject *Sender); + void __fastcall FormResize(TObject *Sender); + + + + + void __fastcall FormPaint(TObject *Sender); + + +private: + int InitFlag; + LPCSTR ap; + + CAlignList AlignList; + void __fastcall EntryAlignControl(void); +public: + virtual __fastcall TTextEditDlg(TComponent* AOwner); + + int __fastcall Execute(AnsiString &as, int flag, LPCSTR pTitle = NULL); +}; +//---------------------------------------------------------------------------- +//extern TTextEditDlg *TextEditDlg; + +extern void __fastcall ShowHelp(TForm *pForm, LPCSTR pName); +//---------------------------------------------------------------------------- +#endif diff --git a/JASTA/country.cpp b/JASTA/country.cpp new file mode 100644 index 0000000..b10bcba --- /dev/null +++ b/JASTA/country.cpp @@ -0,0 +1,396 @@ +/************************************************************************ + カントリ識別処理モジュール + + Copyright (C) JE3HHT 1993-2000. +************************************************************************/ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "Country.h" +#include "string.h" +#include "stdlib.h" + +CCountry Cty; +/*#$% +======================================================== + 文字列から指定の文字をクリップする +-------------------------------------------------------- + s : 文字列のポインタ +-------------------------------------------------------- +-------------------------------------------------------- +======================================================== +*/ +static char *_delchr(char *s, char c) +{ + char *p; + + for( p = s; *p; p++ ){ + if( *p == c ){ + strcpy(p, p+1); + p--; + } + } + return(s); +} + +/*#$% +====================================================== + 異なる文字列のポインタを返す +------------------------------------------------------ + n : 範囲数の格納位置のポインタ + t : プリフィックスのポインタ + p : プリフィックスのポインタ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static LPSTR lcmpp(int *n, LPSTR s, LPSTR p) +{ + LPSTR t; + + for( t = s; *p && *t; p++, t++ ){ + if( *p != *t ){ + *n = (*p - *t) + 1; + if( *n > 26 ) *n = 26; + return(t); + } + } + *n = 0; + return(s); +} + +/*#$% +====================================================== + 文字列の比較を行う +------------------------------------------------------ + t : 対象文字列 + s : 基準文字列 +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static int strcmpv(LPCSTR t, LPCSTR s) +{ + for( ; *s; s++, t++ ){ + if( *t != *s ) return(1); + } + return(0); +} + +static int svf; /* 完全一致フラグ */ +/*#$% +================================================================ + プリフィックス検索用文字列比較 +---------------------------------------------------------------- +---------------------------------------------------------------- +---------------------------------------------------------------- +================================================================ +*/ +static int _strcmp(LPCSTR t, LPCSTR v) +{ +/* printf( "<%s>-<%s>\n", v, t ); */ + for( ; *v; v++, t++ ){ + if( *v == '*' ){ + for( v++; *t && strcmpv(t, v); t++ ); + if( !*t ) return(1); + } + else if( *v == '\\' ){ + if( *t ) return(1); + } + else if( (*v!='?') && (*v != *t) ){ + return(1); + } + } + if( svf && *t ) return(1); + return(0); +} + +/*#$% +====================================================== + コンストラクター +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +CCountry::CCountry() +{ + Init(); +} + +CCountry::~CCountry(void) +{ + Free(); +} + +/*#$% +====================================================== + DXCC定義領域を開放する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CCountry::Init(void) +{ + cmax = 0; + memset(ctl, 0, sizeof(ctl)); +} + +/*#$% +====================================================== + DXCC定義領域を開放する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CCountry::Free(void) +{ + int i; + CTL *cp; + + for( cp = ctl, i = 0; i < cmax; i++, cp++ ){ + if( cp->Name != NULL ) delete cp->Name; + if( cp->Code != NULL ) delete cp->Code; + if( cp->QTH != NULL ) delete cp->QTH; + if( cp->Cont != NULL ) delete cp->Cont; + if( cp->TD != NULL ) delete cp->TD; + } + Init(); +} + + +/*#$% +====================================================== + プリフィックスからカントリコードを得る +------------------------------------------------------ + p : プリフィックスのポインタ +------------------------------------------------------ + カントリコード +------------------------------------------------------ +====================================================== +*/ +int CCountry::GetNo(LPCSTR s) +{ + LPSTR p, pb, t, pp; + int i; + int j; + + if( !*s ) return(0); + for( i = 0; i < cmax; i++ ){ + strcpy(wbf, ctl[i].Code); + for( p = wbf; *p; ){ + p = StrDlm(pb, p, ','); + if( (t = strchr(pb, '-')) != NULL ){ + *t = 0; + t++; + if( (*pb == *s) || (*pb != *t) ){ + for( pp = lcmpp(&j, pb, t); j; (*pp)++, j-- ){ + if( !_strcmp(s, pb) ) return(i+1); + } + } + } + else { + if( !_strcmp(s, pb) ) return(i+1); + } + } + } + return(0); +} + +/*#$% +====================================================== + コールサインからポインタを得る +------------------------------------------------------ + p : コールサインのポインタ +------------------------------------------------------ + ポインタ +------------------------------------------------------ +====================================================== +*/ +int CCountry::GetNoP(LPCSTR p) +{ + int n; + + svf = 1; + if( (n = GetNo(p))!=0 ) return(n); + svf = 0; + if( (n = GetNo(p))!=0 ) return(n); + return(0); +} +/*#$% +====================================================== + コールサインからポインタを得る +------------------------------------------------------ + p : コールサインのポインタ +------------------------------------------------------ + ポインタ +------------------------------------------------------ +====================================================== +*/ +int CCountry::GetRefP(LPCSTR p) +{ + if( !cmax ) return 0; + int n; + + if( !(*p) ) return 0; + if( ((n = GetNoP(p))!=0) && (ctl[n-1].Name != NULL) ){ + return n; + } + else { + return 0; + } +} +/*#$% +====================================================== + コールサインからカントリ名を得る +------------------------------------------------------ + p : コールサインのポインタ +------------------------------------------------------ + カントリ名のポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR CCountry::GetCountry(int n) +{ + if( n ){ + strcpy(wbf, ctl[n-1].Name); + return(wbf); + } + else { + return("?"); + } +} +/*#$% +====================================================== + コールサインから大陸名を得る +------------------------------------------------------ + p : コールサインのポインタ +------------------------------------------------------ + カントリ名のポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR CCountry::GetCont(int n) +{ + if( n ){ + strcpy(wbf, ctl[n-1].Cont); + return(wbf); + } + else { + return("?"); + } +} +/*#$% +====================================================== + コールサインからカントリ名を得る +------------------------------------------------------ + p : コールサインのポインタ +------------------------------------------------------ + カントリ名のポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR CCountry::GetCountry(LPCSTR p) +{ + if( !cmax ) return ""; + int n; + + if( !(*p) ) return("?"); + if( ((n = GetNoP(p))!=0) && (ctl[n-1].Name != NULL) ){ + strcpy(wbf, ctl[n-1].Name); + return(wbf); + } + else { + return("?"); + } +} + +/*#$% +====================================================== + コールサインから大陸名を得る +------------------------------------------------------ + p : コールサインのポインタ +------------------------------------------------------ + カントリ名のポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR CCountry::GetCont(LPCSTR p) +{ + if( !cmax ) return ""; + int n; + + if( !(*p) ) return("?"); + if( ((n = GetNoP(p))!=0) && (ctl[n-1].Cont != NULL) ){ + strcpy(wbf, ctl[n-1].Cont); + return(wbf); + } + else { + return("?"); + } +} + +/*#$% +====================================================== + DXCC定義ファイルを読み込む +------------------------------------------------------ + fm : ファイル名のポインタ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CCountry::Load(LPCSTR fm) +{ + FILE *fp; + LPCSTR p; + char hbf[512]; + + Free(); + if( (fp = fopen(fm, "rt"))!=NULL ){ + while( !feof(fp) ){ + if( fgets(hbf, 512, fp)!=NULL ){ + if( hbf[0] == '$' ) break; + ClipLF(hbf); + _delchr(hbf, TAB); + if( hbf[0] != '!' ){ + p = StrDlmCpy(wbf, hbf, ';', 512); + clipsp(wbf); + ctl[cmax].Name = StrDupe(wbf); + if( p != NULL ){ + p = StrDlmCpy(wbf, p, ';', 512); + clipsp(wbf); + ctl[cmax].Code = StrDupe(wbf); + } + if( p != NULL ){ + p = StrDlmCpy(wbf, p, ';', 512); + clipsp(wbf); + ctl[cmax].QTH = StrDupe(wbf); + } + if( p != NULL ){ + p = StrDlmCpy(wbf, p, ';', 512); + clipsp(wbf); + ctl[cmax].Cont = StrDupe(wbf); + } + if( p != NULL ){ + StrDlmCpy(wbf, p, ';', 512); + clipsp(wbf); + ctl[cmax].TD = StrDupe(wbf); + } + cmax++; + if( cmax >= CTMAX ) break; + } + } + } + fclose(fp); + } + else { + WarningMB(MsgEng ? "'ARRL.DX' was not found.\r\n\r\nYou cannot use a re-creating DX entity function.\r\nThis is not a problem if you do not need it":"'ARRL.DX'が見つかりません.\r\n\r\nDXエンティティの再構築機能は使用できません."); + } +} + + + \ No newline at end of file diff --git a/JASTA/country.h b/JASTA/country.h new file mode 100644 index 0000000..9ccd03c --- /dev/null +++ b/JASTA/country.h @@ -0,0 +1,46 @@ +#ifndef CountryH +#define CountryH + +extern LPSTR StrDupe(LPCSTR s); +//---------------------------------------------------------------------------- + +#define CTMAX 512 +typedef struct { + LPSTR Name; + LPSTR Code; + LPSTR QTH; + LPSTR Cont; + LPSTR TD; +}CTL; + +class CCountry +{ +private: + int cmax; + CTL ctl[CTMAX]; + + char wbf[512]; +public: + CCountry(); + ~CCountry(void); + + inline CTL *GetCTL(int n){ return &ctl[n];}; + void Init(void); + void Free(void); + int GetNo(LPCSTR s); + int GetNoP(LPCSTR p); + int GetRefP(LPCSTR p); + LPCSTR GetCountry(int n); + LPCSTR GetCont(int n); + + LPCSTR GetCountry(LPCSTR p); + LPCSTR GetCont(LPCSTR p); + void Load(LPCSTR fm); + inline int IsData(void){ + return cmax; + }; +}; + +extern CCountry Cty; +#endif + diff --git a/JASTA/mmjasta.txt b/JASTA/mmjasta.txt new file mode 100644 index 0000000..38bd7c7 --- /dev/null +++ b/JASTA/mmjasta.txt @@ -0,0 +1,96 @@ +MMJASTA.EXE + + 初版 2002年9月 3日 JE3HHT 森 誠 + 改訂 2004年9月 8日 JE3HHT 森 誠 + + MMJASTAは、JASTA主宰のアクティビティコンテスト(8月開催)のログシートおよびサマリーシート(日本語様式および英語様式)を作成するためのコンテスト集計用プログラムです。 + MMSSTVで記録されたログデータから自動的にログシートおよびサマリーシートを作成することができます。 + +------------------------------------------------ +変更履歴 +- 3D2/Rの判定ミスを修正(2005/SEP/02) +- アクティブ賞当選時のTシャツサイズをサマリに追加(2005/AUG/09) +- OM/YL区別を追加 (2004/SEP/08) +- 得点計算から衛星通信の区別を削除 (2004/SEP/08) +------------------------------------------------ + +1.環境設定 +~~~~~~~~~~~~ + MMJASTAを起動し、ファイルメニューの「セットアップ」で必要な項目をすべて記入して下さい。ここで記録した情報は「MMJASTA.INI」ファイルに記録されますので、次回起動時に失うことはありません。 + + 使用言語は、日本国内局の場合「日本語」、それ以外の局の場合は「英語」を選択して下さい。それぞれ日本語様式、英語様式のサマリを作成できます。なおこの選択は初回起動時にWindowsのロケール情報により自動的に設定されます。 + + +2.ログファイルのロード +~~~~~~~~~~~~~~~~~~~~~~~~ + ファイルメニューの「ログファイルのロード」を選択し、MMSSTVで記録されたログファイル(拡張子はMDT)を選択して下さい。これで自動的に集計計算し、ログシートとサマリーシートを作成します。 + + MMJASTAが生成するファイルの名前は以下のようになり、MMJASTA.EXEが存在するフォルダに作成されます。 + + ログシート Callsign.txt + サマリシート Callsign.sum + 分析ファイル Callsign.ana + + MMJASTAは日付およびHisRSVのナンバーの有無でフィルタをかけますので、読みこむログは、コンテスト以外のQSOが記録されていても構いません。 + + +3.DXエンティティ +~~~~~~~~~~~~~~~~~~ + MMJASTAおよびMMSSTVは、ほとんどのDXエンティティの名前と大陸区分を、自動的に判定します。しかしコールサインからDXエンティティが一意に確定できない場合、例えば「JD1/?」のようにエンティティ名が生成され、MMJASTAでエラーメッセージが表示されます。 + + この場合、MMJASTAのウインドウ下側の警告表示を見ます。未確定のDXエンティティ名があると、 + +194 8/21 1502Z 14 JD1ABC 595194 595131 : DXCC Unknown [JD1/?] + +のように表示されていますので、この行をダブルクリックします。 + マルチ修正用の画面が表示されますので、そこで、マルチを「JD1/M」、大陸名を「OC」のように修正して「OK」ボタンを押します。この操作で参照元(オリジナル)のログファイルの同一コールサインのOPT1およびOPT2フィールドがすべて修正されます。 + + 上記の操作を繰り返し、すべての「DXCC Unknown」を修正したら、ファイルメニューの「再集計(R)」を実行し、集計しなおせばOKです。 + +*2002年現在のJASTAコンテストのルールでは、大陸名は得点に影響しませんが、将来の拡張用として修正できるようにしてあります。 + + +4.無効なQSOの取り扱い +~~~~~~~~~~~~~~~~~~~~~~~ + MMJASTAは以下のいずれかの場合、無効なQSOとしてそのQSOについてポイントおよびマルチを計上しません。 + ・同一日(UTC)に同じ局とのQSOが重複している場合(後者を無効化) + ・RcvdのコンテストNRが未記入の場合 + ・REMフィールドに「NOF」または「NOFACE」の文字列が存在する場合 + (相手局の画像に顔写真が存在しない場合にNOFを記録しておく) + + +5.他の形式のログファイル +~~~~~~~~~~~~~~~~~~~~~~~~~~ + MMJASTAは以下のログフォーマットを変換して読み込むこともできます。 + + - ADIF形式 (ADI) + - Log200形式 (L2) + - Turbo HAMLOG形式 (DBS, DBR) + + これらの形式のファイルが指定された場合、MMJASTAは"MMJASTA.MDT"というMDT形式のファイルを一旦作成しそこにデータを変換します。その後の動作は、MDTファイルを扱う場合と同じです。MMJASTAで「DXCC Unknown」を修正した場合、MMJASTA.MDTは更新されますが、参照元ファイルは更新されません。 + + 参照元ファイル -> MMJASTA.MDT -> 集計 + + + 各形式についてMMJASTAは以下の条件を適用します。 + +[ADIF形式] + モードの名前はSSTVでなければなりません。 + STXおよびSRXにコンテストNRが記録されていなければなりません。 + +[Log200形式] + モードの名前はSSTVでなければなりません。 + HisRSTおよびMyRSTに595001の形式でRSVとコンテストNRが連続して記録されていなければなりません。 + +[Turbo HAMLOG形式]  + モードの名前はSTVまたはSSTでなければなりません。 + 以下のいずれかの方法でコンテストNRが記録されていなければなりません。 + - REM1またはREM2にSN[...], RN[...]の形式で記録 + - REM1とREM2にそれぞれSentおよびRcvdのNRが先頭から記録 + + +6.使用上の注意 +~~~~~~~~~~~~~~~~ + MMJASTAはコンテストの集計を自動化しますが、必ず最後にログとサマリの確認を、あなた自身の手で行って下さい。 + +73, Mako diff --git a/LineSet.cpp b/LineSet.cpp new file mode 100644 index 0000000..8b9e1db --- /dev/null +++ b/LineSet.cpp @@ -0,0 +1,178 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "Comlib.h" +#include "LineSet.h" +#include "Main.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TLineSetDlg *LineSetDlg; +LPCSTR pStyle[2][9]={ + {"なし","実線", "破線", "点線", "一点鎖線", "二点鎖線","縁取り線", "縁取り線(細)", NULL}, + {"None","Solid", "Dash", "Dot", "DashDot", "DashDotDot", "Siege", "Siege(narrow)", NULL}, +}; +int LineTable[]={-1, psSolid, psDash, psDot, psDashDot, psDashDotDot, 5, 6}; +//--------------------------------------------------------------------- +__fastcall TLineSetDlg::TLineSetDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Line"; + CancelBtn->Caption = "Cancel"; + LS->Caption = "Style"; + LW->Caption = "Width"; + LC->Caption = "Color"; + LT->Caption = "Shape"; + m_lmode = 1; + } + else { + m_lmode = 0; + } + LineStyle->Clear(); + for( int i = 0; pStyle[m_lmode][i] != NULL; i++ ){ + LineStyle->Items->Add(pStyle[m_lmode][i]); + } +} +//--------------------------------------------------------------------- +void __fastcall TLineSetDlg::UpdateUI(void) +{ + int f = (LineStyle->ItemIndex != 1) ? FALSE : TRUE; + LW->Enabled = f; + LineWidth->Enabled = f; +} +//--------------------------------------------------------------------- +int __fastcall TLineSetDlg::Execute(CDraw *pItem) +{ + int cmd = pItem->m_Command; + LineStyle->ItemIndex = 1; + int i; + for( i = 0; pStyle[0][i] != NULL; i++ ){ + if( LineTable[i] == pItem->m_LineStyle ){ + LineStyle->ItemIndex = i; + } + } + LineWidth->Text = pItem->m_LineWidth; + CDrawText *pText = (CDrawText *)pItem; + CDrawPic *pPic = (CDrawPic *)pItem; + LPCSTR *pTbl = NULL; + switch(cmd){ + case CM_PIC: + if( pPic->m_Type < 2 ){ + pTbl = MsgEng ? _ShapePIC[0] : _ShapePIC[1]; + } + break; + case CM_BOX: + case CM_BOXS: + pTbl = MsgEng ? _ShapeBOX[0] : _ShapeBOX[1]; + break; + } + if( pTbl != NULL ){ + while(*pTbl){ + BoxStyle->Items->Add(*pTbl++); + } + } + BoxStyle->ItemIndex = cmd != CM_PIC ? pItem->m_BoxStyle : pPic->m_Shape; + if( cmd == CM_TEXT ){ + pItem->m_LineStyle = psSolid; + LineStyle->ItemIndex = 1; + LS->Enabled = FALSE; + LineStyle->Enabled = FALSE; + PCol->Color = ( pText->m_Shadow == 6 ) ? pText->m_LineColor : pText->m_ColS; + } + else { + PCol->Color = pItem->m_LineColor; + } + if( pTbl != NULL ){ + LT->Enabled = TRUE; + BoxStyle->Enabled = TRUE; + } + else { + LT->Enabled = FALSE; + BoxStyle->Enabled = FALSE; + } + UpdateUI(); + if( ShowModal() == IDOK ){ + pItem->m_LineStyle = TPenStyle(LineTable[LineStyle->ItemIndex]); + int d; + sscanf(AnsiString(LineWidth->Text).c_str(), "%d", &d); //ja7ude 0521 + if( (d >= 1) && (d < 1024) ){ + pItem->m_LineWidth = d; + } + if( LineStyle->ItemIndex != 1 ){ + pItem->m_LineWidth = 1; + } + if( (pItem->m_Command == CM_TEXT) && (pText->m_Shadow != 6) ){ + pText->m_ColS = PCol->Color; + } + else { + pItem->m_LineColor = PCol->Color; + } + pItem->m_BoxStyle = 0; + if( pTbl != NULL ){ + if( cmd == CM_PIC ){ + pPic->m_Shape = BoxStyle->ItemIndex; + } + else { + pItem->m_BoxStyle = BoxStyle->ItemIndex; + } + if( pItem->m_BoxStyle == 5 ){ + int xl = pItem->m_X2 - pItem->m_X1; + int yl = pItem->m_Y2 - pItem->m_Y1; + if( xl != yl ){ + if( xl > yl ){ + pItem->m_Y2 = pItem->m_Y1 + xl; + } + else { + pItem->m_X2 = pItem->m_X1 + yl; + } + } + } + } + return TRUE; + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TLineSetDlg::PColClick(TObject *Sender) +{ + TColorDialog *pDialog = Mmsstv->ColorDialog; + InitCustomColor(pDialog); + AddCustomColor(pDialog, PCol->Color); + pDialog->Color = PCol->Color; + SetDisPaint(); + if( pDialog->Execute() == TRUE ){ + PCol->Color = pDialog->Color; + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- + +void __fastcall TLineSetDlg::LineStyleChange(TObject *Sender) +{ + UpdateUI(); +} +//--------------------------------------------------------------------------- + diff --git a/LineSet.dfm b/LineSet.dfm new file mode 100644 index 0000000000000000000000000000000000000000..fc34defa8e42c759be7f97cf00ceb4fe12ae3f7c GIT binary patch literal 1302 zcmb7DO>fgc5MA5NI!@9Lazg@vxF8|5a+A`6xImnShK3}njVe@$;yByHVzX=6TQwk+ z14lrJ4+#k*#82RYKs_S%1l zb5afftJ~0vR?8*GM68Yng-JNoLOV?P1r&>VGA`Dr-$%a59%7{CdqLf`F&(Ie?J<{< z@)Q8zaG&V&Pv38q4D2Gp){r|GGUW#-#`&h(XG3LH${7?>U)3C3W29j_sMMf@Ef_=F z4-ix5%(Z62y45tdjkOyaoNOWfEI=g(Z@Q#U_bfDKMe!kSBmdMy*0x8eoabcb!)kaQ z=;3GmtNva8q{meR{UVs@;J)D_o1so5O3Qa?;6^&s8IPKdj}S4q0^}FEzDt zaN!Y{KsU3{YYFuFNoeZ*rMq|Z4BW`V2MN4-60Rhp^PgnERtBuR2LI;W+y3GMpjx$E z#wf{k*7;y#{KZJN@-4;ROS_*-bwjzcuGZ0xy^EPvyiNNy-ar9QWGQdiJu#lhnzXoP z*u+86=7j2|FwX{>2Z#&ovarhy89KH+x=p|2jNdRb;K}S7Wqhn3HhG^wu zIi8qeDRx771yVVubMd>Fae}%}y*k|^EjM73s&c+V_=1xGQfH59#uw8~hDO1H$@r!X z0;wFS{kV0wFM_3U5*&Cuhz1SX2j1H^N%A~N`1LW;V$ZUqS5A^vnN2=zI>TY27 zFq$w{j`4!hB9tmnszPZAN|&Lu45bw)U4hb7C@<>#RQOrqXBo;Bo>wcJ6|}lGL3pam v-+Y#hldyStWZ~IK>nW9+gvW(DT?WQ5*;{< literal 0 HcmV?d00001 diff --git a/LineSet.h b/LineSet.h new file mode 100644 index 0000000..a3114ab --- /dev/null +++ b/LineSet.h @@ -0,0 +1,65 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef LineSetH +#define LineSetH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "Draw.h" +//---------------------------------------------------------------------------- +class TLineSetDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TLabel *LS; + TLabel *LW; + TComboBox *LineStyle; + TComboBox *LineWidth; + TLabel *LC; + TPanel *PCol; + TLabel *LT; + TComboBox *BoxStyle; + void __fastcall PColClick(TObject *Sender); + + void __fastcall LineStyleChange(TObject *Sender); +private: + int m_lmode; + void __fastcall UpdateUI(void); + +public: + virtual __fastcall TLineSetDlg(TComponent* AOwner); + + int __fastcall Execute(CDraw *pItem); +}; +//---------------------------------------------------------------------------- +//extern PACKAGE TLineSetDlg *LineSetDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/LinearDs.cpp b/LinearDs.cpp new file mode 100644 index 0000000..a935e0c --- /dev/null +++ b/LinearDs.cpp @@ -0,0 +1,127 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "LinearDs.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TLinearDspDlg::TLinearDspDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "frequency characteristic"; + } + pData = NULL; +} +//--------------------------------------------------------------------- +void __fastcall TLinearDspDlg::Execute(double *D) +{ + pData = D; + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TLinearDspDlg::PBoxPaint(TObject *Sender) +{ + PBox->Canvas->Font->Size = 8; + int XL = PBox->Canvas->TextWidth("-16000") + 10; + int YT = PBox->Canvas->TextHeight("-16000"); + int YB = PBox->Height - YT - 10; + int XR = PBox->Width - (XL/2); + + int i, fq, x, y; + char bf[32]; + PBox->Canvas->Pen->Color = clGray; + for( fq = 1500, i = 0; i <= 16; i++, fq += 50 ){ + x = XL + i * (XR - XL)/16; + PBox->Canvas->Pen->Style = i & 1 ? psDot : psSolid; + PBox->Canvas->MoveTo(x, YT); + PBox->Canvas->LineTo(x, YB); + if( !(i & 1) ){ + sprintf(bf, "%4u", fq); + int w = PBox->Canvas->TextWidth(bf)/2; + PBox->Canvas->TextOut(x - w, YB + 5, bf); + } + } + int vm; + if( *pData >= 16000 ){ + vm = 20000; + } + else if( *pData >= 10000 ){ + vm = 16000; + } + else if( *pData >= 8000 ){ + vm = 10000; + } + else if( *pData >= 6000 ){ + vm = 8000; + } + else if( *pData >= 5000 ){ + vm = 6000; + } + else if( *pData >= 4000 ){ + vm = 5000; + } + else if( *pData >= 2000 ){ + vm = 4000; + } + else if( *pData >= 1000 ){ + vm = 2000; + } + else { + vm = 1000; + } + fq = vm; + for( i = 0; i <= 4; i++, fq -= (vm / 2) ){ + y = YT + i * (YB - YT)/4; + PBox->Canvas->Pen->Style = i & 1 ? psDot : psSolid; + PBox->Canvas->MoveTo(XL, y); + PBox->Canvas->LineTo(XR, y); + sprintf(bf, "%d", fq); + int w = PBox->Canvas->TextWidth(bf); + int h = PBox->Canvas->TextHeight(bf); + if( i < 4 ) h /= 2; + PBox->Canvas->TextOut(XL-w-3, y - h, bf); + } + if( pData == NULL ) return; + + PBox->Canvas->Pen->Color = clBlue; + PBox->Canvas->Pen->Style = psSolid; + for( i = 0; i <= 16; i++ ){ + x = XL + i * (XR - XL)/16; + y = pData[i] * (YB - YT) / (vm * 2); + y += (YB - YT)/2; + y = YB - y; + if( i ){ + PBox->Canvas->LineTo(x, y); + } + else { + PBox->Canvas->MoveTo(x, y); + } + } +} +//--------------------------------------------------------------------------- + diff --git a/LinearDs.dfm b/LinearDs.dfm new file mode 100644 index 0000000000000000000000000000000000000000..0427a0cf28f7def67c80cf464a9dbcab290a050d GIT binary patch literal 421 zcmZ9I-%7(U6o=DvZQ5>AA7!twwN3|R3pTLptUI>Bkkm9neTgw}Z{bt;P~HjJKbwfT zIONC4$@g)-BgE3x`gZ=1WHd?d(Cp^mAjIf$Hf5<$z)ezDi7Y06!zhJE>wY4a=?cqe z{$h2O8!cr(VqRIHl^-3xPQ~%`_Hlfl#8QB=_aKVWy3fvd$Xl_urQ6_$a?`e#TG=q5 zx)$9$xvIJ^0aV=fz(mvtWwV@1AbzFST7loEeK4h>0a;TpE0veHi5N6z7`{e6qg;XX z`r3QrK^u7&0sq&`n@dqB5^y;vju+bO!DRNe#Rj`N6RMEl#ae1ZNG`Xfun;i5+jP$` oLSaj5Jr}we(XMoR!cM;?=gc$s!h3T5^T. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef OCBH +#define OCBH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#define LINEARDATAMAX 16 +class TLinearDspDlg : public TForm +{ +__published: + TPanel *Panel; + TPaintBox *PBox; + void __fastcall PBoxPaint(TObject *Sender); +private: + double *pData; +public: + virtual __fastcall TLinearDspDlg(TComponent* AOwner); + + void __fastcall Execute(double *D); +}; +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +#endif diff --git a/ListText.cpp b/ListText.cpp new file mode 100644 index 0000000..d3a8daf --- /dev/null +++ b/ListText.cpp @@ -0,0 +1,320 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "Main.h" +#include "ListText.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +static int SaveTopRow; +static int SaveRow; +//--------------------------------------------------------------------- +__fastcall TListTextDlg::TListTextDlg(TComponent* AOwner) + : TForm(AOwner) +{ + MultProc(); + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Caption = "Defined text"; + CancelBtn->Caption = "Cancel"; + DelBtn->Caption = "Delete"; + EditBtn->Caption = "Edit"; + UpBtn->Caption = "Up"; + DwnBtn->Caption = "Down"; + m_Jpn = 0; + } + else { + m_Jpn = 1; + } + pList = NULL; + MultProc(); +} +//--------------------------------------------------------------------- +void __fastcall TListTextDlg::UpdateUI(void) +{ + if( Grid->Row && (Grid->Row <= pList->m_Cnt) ){ + DelBtn->Enabled = TRUE; + OKBtn->Enabled = TRUE; + } + else { + DelBtn->Enabled = FALSE; + OKBtn->Enabled = FALSE; + } + EditBtn->Enabled = Grid->Row ? TRUE : FALSE; + UpBtn->Enabled = (Grid->Row > 1) && (Grid->Row <= pList->m_Cnt) ? TRUE : FALSE; + DwnBtn->Enabled = (Grid->Row <= (pList->m_Cnt - 1)) ? TRUE : FALSE; +} +//--------------------------------------------------------------------- +CDraw *__fastcall TListTextDlg::Execute(CDrawGroup *pg, int pos) +{ + pList = pg; + Grid->RowCount = pList->m_Cnt + 2; + if( pos < 0 ){ + Grid->Row = Grid->RowCount - 2; + int n = Grid->Row - 11; + if( n < 1 ) n = 1; + Grid->TopRow = n; + } + else if( SaveRow && SaveTopRow ){ + Grid->TopRow = SaveTopRow; + Grid->Row = SaveRow; + } + UpdateUI(); + MultProc(); + int r = ShowModal(); + MultProc(); + SaveTopRow = Grid->TopRow; + SaveRow = Grid->Row; + if( r == IDOK ){ + return (CDraw *)pList->pBase[Grid->Row - 1]; + } + return NULL; +} +//--------------------------------------------------------------------- +void __fastcall TListTextDlg::DrawGrade(CDrawText *pItem, TRect &Rect) +{ + TRect rc = Rect; + rc.Top += 2; + rc.Bottom -= 2; + int xw = (Rect.Right - Rect.Left)/4; + int yw = (Rect.Bottom - Rect.Top)/4; + switch(pItem->m_Grade){ + case 0: + Grid->Canvas->Brush->Color = pItem->m_Col1; + Grid->Canvas->FillRect(rc); + break; + case 1: + rc.Right = rc.Left + xw; + Grid->Canvas->Brush->Color = pItem->m_Col1; + Grid->Canvas->FillRect(rc); + rc.Left += xw; + rc.Right += xw; + Grid->Canvas->Brush->Color = pItem->m_Col2; + Grid->Canvas->FillRect(rc); + rc.Left += xw; + rc.Right += xw; + Grid->Canvas->Brush->Color = pItem->m_Col3; + Grid->Canvas->FillRect(rc); + rc.Left += xw; + rc.Right += xw; + Grid->Canvas->Brush->Color = pItem->m_Col4; + Grid->Canvas->FillRect(rc); + break; + case 2: + rc.Bottom = rc.Top + yw; + Grid->Canvas->Brush->Color = pItem->m_Col1; + Grid->Canvas->FillRect(rc); + rc.Top += yw; + rc.Bottom += yw; + Grid->Canvas->Brush->Color = pItem->m_Col2; + Grid->Canvas->FillRect(rc); + rc.Top += yw; + rc.Bottom += yw; + Grid->Canvas->Brush->Color = pItem->m_Col3; + Grid->Canvas->FillRect(rc); + rc.Top += yw; + rc.Bottom += yw; + Grid->Canvas->Brush->Color = pItem->m_Col4; + Grid->Canvas->FillRect(rc); + break; + } +} +//--------------------------------------------------------------------- +void __fastcall TListTextDlg::DrawShadow(CDrawText *pItem, TRect &Rect) +{ + LPCSTR _tt[2][9]={ + {"None","Siege", "Shadow1", "Shadow2", "Shadow3", "Shadow4", "Shadow5", "Shadow6", "?",}, + {"なし","縁取り", "影1", "影2","影3","影4","影5","影6","?"}, + }; + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + TRect rc = Rect; + rc.Top += 2; + rc.Bottom -= 2; + rc.Left = rc.Right - (Rect.Right - Rect.Left)/4; + int n = pItem->m_Shadow; + if( (n < 0) || (n > 8) ) n = 8; + Grid->Canvas->TextOut(X, Y, _tt[m_Jpn][n]); + if( pItem->m_Shadow ){ + Grid->Canvas->Brush->Color = pItem->m_ColS; + Grid->Canvas->FillRect(rc); + } +} +//--------------------------------------------------------------------- +static void __fastcall ConvCRLF(LPSTR s) +{ + LPSTR p = s; + for( ; *p; p++ ){ + if( (*p == CR) || (*p == LF) ){ + *p = '\\'; + } + } +} +//--------------------------------------------------------------------- +void __fastcall TListTextDlg::GridDrawCell(TObject *Sender, int Col, + int Row, TRect &Rect, TGridDrawState State) +{ + if( pList == NULL ) return; + + char bf[256]; + + Grid->Canvas->FillRect(Rect); + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + + if( Row ){ + Row--; + bf[0] = 0; + int ec = 4; + if( Row < pList->m_Cnt ){ +// strcpy(bf, "-"); + bf[0] = 0; + LPCSTR p; + CDraw *pItem = pList->pBase[Row]; + CDrawLib *pLib = (CDrawLib *)pItem; + CDrawText *pText = (CDrawText *)pItem; + if( (pItem->m_Command != CM_TEXT) && (pItem->m_Command != CM_LIB) ) return; + if( pItem->m_Command == CM_LIB ) ec = 6; + switch(Col){ + case 0: // No. + sprintf(bf, "%u%s", Row+1, (pItem->m_Command == CM_LIB)?" c":""); + break; + case 1: // text + p = (pItem->m_Command == CM_TEXT) ? pText->m_Text.c_str() : pLib->GetItemText(); + StrCopy(bf, p, sizeof(bf)-1); + ConvCRLF(bf); + break; + case 2: // text + p = (pItem->m_Command == CM_TEXT) ? pText->m_Text.c_str() : pLib->GetItemText(); + Mmsstv->MacroText(bf, p, sizeof(bf)-1); + ConvCRLF(bf); + break; + case 3: // text + if( pItem->m_Command == CM_TEXT ){ + sprintf(bf, "%u", pText->pFont->Size); + } + break; + case 4: // color + if( pItem->m_Command == CM_TEXT ){ + DrawGrade(pText, Rect); + } + break; + case 5: // Shadow + if( pItem->m_Command == CM_TEXT ){ + DrawShadow(pText, Rect); + } + break; + } + if( pItem->m_Command == CM_TEXT ){ + if( ((Col == 1) || (Col == 2)) && (pText->pFont != NULL) ){ + Grid->Canvas->Font->Name = pText->pFont->Name; + Grid->Canvas->Font->Charset = pText->pFont->Charset; + } + } + else { + Grid->Canvas->Font->Name = Font->Name; + Grid->Canvas->Font->Charset = Font->Charset; + } + } + if( Col < ec ){ + Grid->Canvas->TextRect(Rect, X, Y, bf); + } + } + else { // タイトル + LPCSTR _tt[2][6]={ + {"No.","Defined Text", "Macro conversion", "Size", "Color", "Shadow",}, + {"No.","定義文字列", "マクロ変換", "サイズ","色","影",}, + }; + Grid->Canvas->TextRect(Rect, X, Y, _tt[m_Jpn][Col]); + } + if( !Col ) MultProc(); +} +//--------------------------------------------------------------------------- + +void __fastcall TListTextDlg::DelBtnClick(TObject *Sender) +{ + if( Grid->Row && (Grid->Row <= pList->m_Cnt) ){ + pList->DeleteItem(pList->pBase[Grid->Row-1]); + Grid->RowCount = pList->m_Cnt + 2; + Grid->Invalidate(); + UpdateUI(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TListTextDlg::GridClick(TObject *Sender) +{ + UpdateUI(); +} +//--------------------------------------------------------------------------- + +void __fastcall TListTextDlg::EditBtnClick(TObject *Sender) +{ + if( Grid->Row ){ + if( Grid->Row <= pList->m_Cnt ){ + if( pList->pBase[Grid->Row-1]->Edit() == TRUE ){ + Grid->Invalidate(); + } + } + else { + CDrawText *pItem = (CDrawText *)pList->MakeItem(CM_TEXT); + pItem->Start(Mmsstv->PBoxTemp->Canvas, 0, 0); + if( pItem->Finish(0, 0) ){ + pList->AddItem(pItem); + Grid->RowCount = pList->m_Cnt + 2; + Grid->Invalidate(); + UpdateUI(); + } + else { + delete pItem; + } + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TListTextDlg::UpBtnClick(TObject *Sender) +{ + if( Grid->Row > 1 ){ + Grid->Row--; + pList->UpItem(Grid->Row); + Grid->Invalidate(); + UpdateUI(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TListTextDlg::DwnBtnClick(TObject *Sender) +{ + if( Grid->Row <= (pList->m_Cnt - 1) ){ + pList->DownItem(Grid->Row-1); + Grid->Row++; + Grid->Invalidate(); + UpdateUI(); + } +} +//--------------------------------------------------------------------------- + + diff --git a/ListText.dfm b/ListText.dfm new file mode 100644 index 0000000000000000000000000000000000000000..219de0e1a8028535bc065efc877fbadeb8848be5 GIT binary patch literal 1185 zcma))zi-n(6vxl!*iP&~gT#mgW5s~V%GTOR6B?4JHf_aF>e^T5#Bmp$uS#JfmJk9# z2ULL&6Jue9jhUH^f&T!67#Ntqzg;SREvNV1oj&jTeeZtg!0GpF$7ydkR(}~Rv>wy| za7LYlrqjovaL}HxNMIa^YkjmMnW zo^Bqze)R0g*XVw<5d}??U_?b1;b1J}yONRR>)01#c?6psM#Tkl?D7x^tz~z69p`e- zzHW9GSM9c=XV;7{t~EWfj;YV4iAE#6$f)p3Bh3cxO{C7v$c&$xvB-|rqU~sq5mLDZ zsE=5P6P?=039~(p5H(|Qi0dPcsjxjaHlBgA{u8^bLKNZH}jA3Lbo%SPErdGqSy+Yi6=fK?9(0K>6GY(7}#*srBWvTvBJ z8)O#ZMdcpkElF7U|- zH0A=d z-KmKP(V9uM$Qp&#P=fRF3m_i?cphGY*N)6ywW`5GIo&M!%Vuj2Kkq-UWSFTP9y8JHPsa&eR_?v%u=dgk+C0tJ_$Iz-Z Ur6v3O|FB. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef OCBH +#define OCBH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "Draw.h" +//---------------------------------------------------------------------------- +class TListTextDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TStringGrid *Grid; + TButton *DelBtn; + TButton *EditBtn; + TButton *UpBtn; + TButton *DwnBtn; + void __fastcall GridDrawCell(TObject *Sender, int Col, int Row, + TRect &Rect, TGridDrawState State); + void __fastcall DelBtnClick(TObject *Sender); + void __fastcall GridClick(TObject *Sender); + void __fastcall EditBtnClick(TObject *Sender); + void __fastcall UpBtnClick(TObject *Sender); + void __fastcall DwnBtnClick(TObject *Sender); +private: + CDrawGroup *pList; + int m_Jpn; + + void __fastcall UpdateUI(void); + + void __fastcall DrawGrade(CDrawText *pItem, TRect &Rect); + void __fastcall DrawShadow(CDrawText *pItem, TRect &Rect); + +public: + virtual __fastcall TListTextDlg(TComponent* AOwner); + + CDraw *__fastcall Execute(CDrawGroup *pg, int pos); +}; +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +#endif diff --git a/LogConv.cpp b/LogConv.cpp new file mode 100644 index 0000000..7ba3561 --- /dev/null +++ b/LogConv.cpp @@ -0,0 +1,2224 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include +#include "LogConv.h" +#include "country.h" +#include "main.h" +CLogText LogText; +//*************************************************************************** +// CLogConv 基本 クラス +CLogConv::CLogConv() +{ + m_Mode = 0; + m_fp = NULL; +} + +CLogConv::~CLogConv() +{ +} +//*************************************************************************** +// CLogText クラス +CLogText::CLogText() +{ + m_Type = 0; + m_Double = 0; + m_Delm = 0; + m_err = 0; + m_UTC = (lcid != LANG_JAPANESE) ? 1 : 0; + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + m_tConv[i].Key = ""; + m_tConv[i].w = 0; + } + m_tConv[0].Key = "%YYYY-MM-DD"; + m_tConv[1].Key = "%HHMM"; + m_tConv[2].Key = "%EHHMM"; + m_tConv[3].Key = "%CALL"; + m_tConv[4].Key = "%HIS"; + m_tConv[5].Key = "%MY"; + m_tConv[6].Key = "%FREQ"; + m_tConv[7].Key = "%MODE"; + m_tConv[8].Key = "%POWER"; + m_tConv[9].Key = "%NAME"; + m_tConv[10].Key = "%QTH"; + m_tConv[11].Key = "%REM"; + m_tConv[12].Key = "%QSL"; + m_tConv[13].Key = "%S"; + m_tConv[14].Key = "%R"; + m_tConv[15].Key = "%EOD"; + for( i = 0; i < TEXTCONVMAX; i++ ){ + m_rConv[i] = m_tConv[i]; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogText::Open(LPCSTR pName) +{ + Close(); + m_Mode = 0; + m_err = 0; + + m_fp = fopen(pName, "rt"); + + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't open '%s'":"'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルの作成 +int CLogText::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + + m_fp = fopen(pName, "wt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't write to '%s'":"'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogText::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB( MsgEng ? "Can't close '%s'":"'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB(MsgEng ? "Done (write to '%s')":"'%s'への書きこみを終了しました.", m_FileName.c_str()); + } + } + return r ? FALSE : TRUE; +} +//--------------------------------------------------------------------------- +// テキストファイルの読み出し +int CLogText::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + if( !feof(m_fp) ){ + if( fgets(m_bf, sizeof(m_bf), m_fp) != NULL ){ + ClipLF(m_bf); + return Text2MMLOG(sp, m_bf, m_err); + } + else { + return FALSE; + } + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +// 出力変換 +int CLogText::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + MMLOG2Text(m_bf, sp); + fputs(m_bf, m_fp); + fputs("\n", m_fp); + return ferror(m_fp) ? FALSE : TRUE; +} + +const LPCSTR ConvTbl[]={ + "%NULL", + "%YYYY-MM-DD", "%YY-MM-DD", "%YYYY/MM/DD", "%YY/MM/DD", + "%DD MON, YYYY","%YYMMDD", "%YYYYMMDD", + "%YY", "%YYYY", "%MM", "%MON", "%MON2", "%DD", "%HHMM", "%HH:MM","%HH:MM:SS", + "%EHHMM", "%EHH:MM", "%EHH:MM:SS", "%CALL", + "%M", "%MY", "%HIS", "%MYRST", "%HISRST", "%MYNR", "%HISNR", "%FREQ", "%KHZ", + "%MBAND", "%MODE", "%POWER", "%NAME", "%QTH", "%REM", "%QSL", + "%S", "%R", "%ENV", "%OPT1", "%OPT2", "%USR1", "%USR2", + "%EOD", + NULL, +}; + +const char *MONT1[]={"","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"}; +const char *MONT2[]={"","Jan.","Feb.","Mar.","Apr.","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."}; + +//--------------------------------------------------------------------------- +void MMLOG2Text(LPSTR t, SDMMLOG *sp, AnsiString &Key) +{ + int tim, l; + + if( Key == "%YYYY-MM-DD" ){ + sprintf(t, "%04u-%02u-%02u", YEAR(sp->year), sp->date/100, sp->date%100); + } + else if( Key == "%YY-MM-DD" ){ + sprintf(t, "%2u-%02u-%02u", sp->year, sp->date/100, sp->date%100); + } + else if( Key == "%YYYY/MM/DD" ){ + sprintf(t, "%04u/%02u/%02u", YEAR(sp->year), sp->date/100, sp->date%100); + } + else if( Key == "%YY/MM/DD" ){ + sprintf(t, "%2u/%02u/%02u", sp->year, sp->date/100, sp->date%100); + } + else if( Key == "%DD MON, YYYY" ){ + sprintf(t, "%02u %s, %04u", sp->date%100, MONT1[sp->date/100], YEAR(sp->year)); + } + else if( Key == "%YYYYMMDD" ){ + sprintf(t, "%04u%02u%02u", YEAR(sp->year), sp->date/100, sp->date%100); + } + else if( Key == "%YYMMDD" ){ + sprintf(t, "%02u%02u%02u", sp->year, sp->date/100, sp->date%100); + } + else if( Key == "%YY" ){ + sprintf(t, "%02u", sp->year); + } + else if( Key == "%YYYY" ){ + sprintf(t, "%04u", YEAR(sp->year)); + } + else if( Key == "%MM" ){ + sprintf(t, "%02u", sp->date / 100); + } + else if( Key == "%MON" ){ + strcpy(t, MONT1[sp->date/100]); + } + else if( Key == "%MON2" ){ + strcpy(t, MONT2[sp->date/100]); + } + else if( Key == "%DD" ){ + sprintf(t, "%02u", sp->date % 100); + } + else if( Key == "%HHMM" ){ + if( sp->btime ){ + tim = sp->btime / 30; + sprintf(t, "%02u%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%HH:MM" ){ + if( sp->btime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%HH:MM:SS" ){ + if( sp->btime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u:%02u", tim / 60, tim % 60, (sp->btime * 2) % 60); + } + else { + *t = 0; + } + } + else if( Key == "%EHHMM" ){ + if( sp->etime ){ + tim = sp->etime / 30; + sprintf(t, "%02u%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%EHH:MM" ){ + if( sp->etime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u", tim / 60, tim % 60); + } + else { + *t = 0; + } + } + else if( Key == "%EHH:MM:SS" ){ + if( sp->etime ){ + tim = sp->btime / 30; + sprintf(t, "%02u:%02u:%02u", tim / 60, tim % 60, (sp->etime * 2) % 60); + } + else { + *t = 0; + } + } + else if( Key == "%CALL" ){ + strcpy(t, sp->call); + } + else if( Key == "%M" ){ + *t = sp->send; + *(t+1) = 0; + } + else if( Key == "%HIS" ){ + strcpy(t, sp->ur); + } + else if( Key == "%MY" ){ + strcpy(t, sp->my); + } + else if( Key == "%HISRST" ){ + StrCopy(t, sp->ur, GetLMode(sp->mode)); + } + else if( Key == "%MYRST" ){ + StrCopy(t, sp->my, GetLMode(sp->mode)); + } + else if( Key == "%HISNR" ){ + l = GetLMode(sp->mode); + if( (int)strlen(sp->ur) >= l ){ + strcpy(t, &sp->ur[l]); + } + else { + *t = 0; + } + } + else if( Key == "%MYNR" ){ + l = GetLMode(sp->mode); + if( (int)strlen(sp->my) >= l ){ + strcpy(t, &sp->my[l]); + } + else { + *t = 0; + } + } + else if( Key == "%FREQ" ){ + strcpy(t, Log.GetFreqString(sp->band, sp->fq)); + } + else if( Key == "%MBAND" ){ + strcpy(t, FreqTomBand(sp)); + } + else if( Key == "%KHZ" ){ + char bf[32]; + double dd; + strcpy(bf, Log.GetFreqString(sp->band, sp->fq)); + sscanf(bf, "%lf", &dd); + sprintf(t, "%.2lf", dd * 1000.0); + } + else if( Key == "%MODE" ){ + strcpy(t, Log.GetModeString(sp->mode)); + } + else if( Key == "%POWER" ){ + strcpy(t, sp->pow); + } + else if( Key == "%NAME" ){ + strcpy(t, sp->name); + } + else if( Key == "%QTH" ){ + strcpy(t, sp->qth); + } + else if( Key == "%REM" ){ + strcpy(t, sp->rem); + } + else if( Key == "%QSL" ){ + strcpy(t, sp->qsl); + } + else if( Key == "%S" ){ + *t = sp->send; + *(t+1) = 0; + } + else if( Key == "%R" ){ + *t = sp->recv; + *(t+1) = 0; + } + else if( Key == "%ENV" ){ + sprintf(t, "%u", sp->env); + } + else if( Key == "%OPT1" ){ + strcpy(t, sp->opt1); + } + else if( Key == "%OPT2" ){ + strcpy(t, sp->opt2); + } + else if( Key == "%USR1" ){ + strcpy(t, Log.GetOptStr(2, sp)); + } + else if( Key == "%USR2" ){ + strcpy(t, Log.GetOptStr(3, sp)); + } + else if( (Key == "%EOD")||(Key == "%NULL") ){ + *t = 0; + } + else { + strcpy(t, Key.c_str()); + } +} +//--------------------------------------------------------------------------- +// 1行の出力変換 +void CLogText::MMLOG2Text(LPSTR t, SDMMLOG *sp) +{ + char bf[512]; + char dlm = m_Delm ? TAB : ','; + + if( m_UTC ) JSTtoUTC(sp); + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + if( (!m_tConv[i].Key.IsEmpty())&&(m_tConv[i].Key != "%EOD") ){ + ::MMLOG2Text(bf, sp, m_tConv[i].Key); + switch(m_Delm){ + case 0: // CSV + case 1: // TAB + if( i ) *t++ = dlm; + if( m_Double || (strchr(bf, dlm) != NULL) ) *t++ = 0x22; + if( m_tConv[i].w ){ + StrCopy(t, bf, m_tConv[i].w); + } + else { + strcpy(t, bf); + } + t += strlen(t); + if( m_Double || (strchr(bf, dlm) != NULL) ) *t++ = 0x22; + break; + default: // Format Text + if( m_tConv[i].w ){ + StrCopy(t, bf, m_tConv[i].w); + FillSpace(t, m_tConv[i].w); + } + else { + strcpy(t, bf); + } + t += strlen(t); + break; + } + } + else { + break; + } + } + *t = 0; +} +//--------------------------------------------------------------------------- +int GetMonth(LPCSTR p) +{ + for( int i = 1; i <=12; i++ ){ + if( !strcmpi(MONT1[i], p) ) return i; + if( !strcmpi(MONT2[i], p) ) return i; + } + return 0; +} +//--------------------------------------------------------------------------- +int Text2MMLOG(SDMMLOG *sp, LPCSTR s, AnsiString &Key) +{ + int y, m, d, h; + int tim; + + if( (Key == "%YYYY-MM-DD")||(Key == "%YY-MM-DD") ){ + if( sscanf(s, "%u-%u-%u", &y, &m, &d) != 3 ) return FALSE; + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( (Key == "%YYYY/MM/DD")||(Key == "%YY/MM/DD") ){ + if( sscanf(s, "%u/%u/%u", &y, &m, &d) != 3 ) return FALSE; + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( Key == "%DD MON, YYYY" ){ + d = atoin(s, 2); + s += 3; + char bf[4]; + StrCopy(bf, s, 3); + m = GetMonth(bf); + s = SkipSpace(s+1); + y = atoin(s, -1); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( Key == "%YYYYMMDD" ){ + y = atoin(s, 4); s += 4; + m = atoin(s, 2); s += 2; + d = atoin(s, 2); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( Key == "%YYMMDD" ){ + y = atoin(s, 2); s += 2; + m = atoin(s, 2); s += 2; + d = atoin(s, 2); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + } + else if( (Key == "%YY")||(Key == "%YYYY") ){ + if( sscanf(s, "%u", &y) != 1 ) return FALSE; + sp->year = BYTE(y % 100); + } + else if( Key == "%MM" ){ + if( sscanf(s, "%u", &m) != 1 ) return FALSE; + sp->date = WORD((sp->date % 100) + m * 100); + } + else if( (Key == "%MON")||(Key == "%MON2") ){ + m = GetMonth(s); + sp->date = WORD((sp->date % 100) + m * 100); + } + else if( Key == "%DD" ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + sp->date = WORD(((sp->date / 100) * 100) + d); + } + else if( Key == "%HHMM" ){ + if( *s ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->btime = WORD(tim); + } + } + else if( (Key == "%HH:MM")||(Key == "%HH:MM:SS") ){ + if( *s ){ + if( sscanf(s, "%u:%u:%u", &h, &m, &d ) != 3 ){ + d = 0; + if( sscanf(s, "%u:%u", &h, &m) != 2 ) return FALSE; + } + tim = (h * 60 + m) * 30 + (d / 2); + if( !tim ) tim++; + sp->btime = WORD(tim); + } + } + else if( Key == "%EHHMM" ){ + if( *s ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->etime = WORD(tim); + } + } + else if( (Key == "%EHH:MM")||(Key == "%EHH:MM:SS") ){ + if( *s ){ + if( sscanf(s, "%u:%u:%u", &h, &m, &d ) != 3 ){ + d = 0; + if( sscanf(s, "%u:%u", &h, &m) != 2 ) return FALSE; + } + tim = (h * 60 + m) * 30 + (d / 2); + if( !tim ) tim++; + sp->etime = WORD(tim); + } + } + else if( Key == "%CALL" ){ + if( sp->call[0] ){ + char bf[256]; + sprintf(bf, "%s/%s", sp->call, s); + StrCopy(sp->call, bf, MLCALL); + } + else { + StrCopy(sp->call, s, MLCALL); + } + } + else if( Key == "%M" ){ + sp->send = *s; + } + else if( (Key == "%HIS")||(Key == "%HISRST") ){ + StrCopy(sp->ur, s, MLRST); + } + else if( (Key == "%MY")||(Key=="%MYRST") ){ + StrCopy(sp->my, s, MLRST); + } + else if( Key == "%FREQ" ){ + Log.SetFreq(sp, s); + } + else if( Key == "%MBAND" ){ + mBandToBand(sp, s); + } + else if( Key == "%KHZ" ){ + double dd; + sscanf(s, "%lf", &dd); + char bf[32]; + sprintf(bf, "%.03lf", dd / 1000.0); + Log.SetFreq(sp, bf); + } + else if( Key == "%MODE" ){ + Log.SetMode(sp, s); + } + else if( Key == "%POWER" ){ + StrCopy(sp->pow, s, MLPOW); + } + else if( Key == "%NAME" ){ + StrCopy(sp->name, s, MLNAME); + } + else if( Key == "%QTH" ){ + StrCopy(sp->qth, s, MLQTH); + } + else if( Key == "%REM" ){ + StrCopy(sp->rem, s, MLREM); + } + else if( Key == "%QSL" ){ + StrCopy(sp->qsl, s, MLQSL); + } + else if( Key == "%S" ){ + sp->send = *s; + } + else if( Key == "%R" ){ + sp->recv = *s; + } + else if( Key == "%ENV" ){ + if( sscanf(s, "%u", &d) != 1 ) return FALSE; + sp->env = WORD(d); + } + else if( Key == "%OPT1" ){ + StrCopy(sp->opt1, s, MLOPT); + } + else if( Key == "%OPT2" ){ + StrCopy(sp->opt2, s, MLOPT); + } + else if( Key == "%USR1" ){ + Log.SetOptStr(2, sp, s); + } + else if( Key == "%USR2" ){ + Log.SetOptStr(3, sp, s); + } + else if( (Key != "%EOD")&&(Key != "%NULL") ){ + if( Key != s ){ + return FALSE; + } + } + return TRUE; +} +//--------------------------------------------------------------------------- +// 1行の入力変換 +int CLogText::Text2MMLOG(SDMMLOG *sp, LPSTR p, int &err) +{ + char bf[512]; + char dlm = m_Delm ? TAB : ','; + LPSTR t; + + memset(sp, 0, sizeof(SDMMLOG)); + int i; + for( i = 0; i < TEXTCONVMAX; i++ ){ + if( (!m_rConv[i].Key.IsEmpty())&&(m_rConv[i].Key != "%EOD") ){ + if( m_Delm == 2 ){ + StrCopy(bf, p, m_rConv[i].w); + p += strlen(bf); + t = bf; + } + else { + p = StrDlm(t, p, dlm); + } + clipsp(t); + t = SkipSpace(t); + if( ::Text2MMLOG(sp, t, m_rConv[i].Key ) == FALSE ){ + if( !err ){ + ErrorMB(MsgEng ? "An error occurred with conversion type [%s]." : "変換式[%s]でエラーが発生しました.", m_rConv[i].Key.c_str() ); + } + err++; + } + } + else { + break; + } + } + if( !sp->etime ) sp->etime = sp->btime; + if( m_UTC ) UTCtoJST(sp); + return err ? FALSE : TRUE; +} +// +// +//*************************************************************************** +// CLog200 クラス +CLog200::CLog200() +{ + m_Type = 1; + m_err = 0; +} +//--------------------------------------------------------------------------- +// LOG200ファイルのオープン +int CLog200::Open(LPCSTR pName) +{ + Close(); + m_Index = 0; + m_err = 0; + + m_fp = fopen(pName, "rb"); + if( m_fp != NULL ){ + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB("'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// LOG200ファイルの作成 +int CLog200::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + m_err = 0; + + int add = 0; + if( (m_fp = fopen(pName, "rb"))!=NULL ){ + fclose(m_fp); + m_fp = NULL; + add = 1; + char BackName[256]; + strcpy(BackName, pName); + SetEXT(BackName, ".BAK"); + int r = YesNoCancelMB( "'%s'は既に存在しています.\r\nMMTTYはこのファイルにデータを追加します.\r\n\r\n" + "この操作を実行する前に元のログファイルのバックアップファイル\r\n\r\n" + "'%s' -> '%s'\r\n\r\nを作成しますか?\r\n\r\n" + "[重要]\r\n念のためにバックアップを作成する事をお勧めします.", pName, pName, BackName); + if( r == IDYES ){ + CWaitCursor w; + if( ::CopyFile(pName, BackName, FALSE) == FALSE ){ + ErrorMB("バックアップの作成に失敗しました.\r\nこの処理は中断されます.元のログファイルは変更されません."); + return FALSE; + } + } + else if( r == IDCANCEL ){ + return FALSE; + } + } + m_fp = fopen(pName, add ? "ab":"wb"); + if( m_fp != NULL ){ + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB( "'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// LOG200ファイルのクローズ +int CLog200::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB("'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB("'%s'への追加を終了しました.", m_FileName.c_str()); + } + } + return r ? FALSE : TRUE; +} +//--------------------------------------------------------------------------- +// LOG200 -> MMLOG フォーマットの変換 +void LOG200toMMLOG(SDMMLOG *sp, LPSTR s) +{ + LPSTR t; + int y, m, d, h, tim; + char bf[256]; + + memset(sp, 0, sizeof(SDMMLOG)); + s = StrDlm(t, s, 0x1e); /* DATE */ + y = atoin(t, 2); t += 2; + m = atoin(t, 2); t += 2; + d = atoin(t, 2); + sp->year = BYTE(y % 100); + sp->date = WORD(m * 100 + d); + + s = StrDlm(t, s, 0x1e); /* BGN */ + d = atoin(t, 4); + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->btime = WORD(tim); + + s = StrDlm(t, s, 0x1e); /* END */ + d = atoin(t, 4); + h = d / 100; + m = d % 100; + tim = (h * 60 + m) * 30; + if( !tim ) tim++; + sp->etime = WORD(tim); + + s = StrDlm(t, s, 0x1e); /* CALL */ + clipsp(t); + StrCopy(sp->call, t, MLCALL); + + s = StrDlm(t, s, 0x1e); /* FREQ */ + if( LastC(t) == '.' ){ + *lastp(t) = 0; + } + Log.SetFreq(sp, t); + + s = StrDlm(t, s, 0x1e); /* MODE */ + Log.SetMode(sp, t); + + s = StrDlm(t, s, 0x1e); /* RST */ + clipsp(t); + StrCopy(sp->ur, t, MLRST); + + s = StrDlm(t, s, 0x1e); /* MyRST*/ + clipsp(t); + StrCopy(sp->my, t, MLRST); + + s = StrDlm(t, s, 0x1e); /* QTH */ + clipsp(t); + StrCopy(sp->qth, t, MLQTH); + + s = StrDlm(t, s, 0x1e); /* NAME */ + clipsp(t); + StrCopy(sp->name, t, MLNAME); + + s = StrDlm(t, s, 0x1e); /* RIG */ + clipsp(t); + LPSTR pRIG = t; + + s = StrDlm(t, s, 0x1e); /* CONTEST */ + clipsp(t); + LPSTR pContest = t; + + s = StrDlm(t, s, 0x1e); /* Rem */ + clipsp(t); + + if( (strlen(sp->call) == 15) && (RemoveL2(bf, t, "CALL", sizeof(bf)-1) == TRUE) ){ + StrCopy(sp->call, bf, MLCALL); + } + if( RemoveL2(bf, t, "POW", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->pow, bf, MLPOW); + } + if( RemoveL2(bf, t, "ENV", sizeof(bf)-1) == TRUE ){ + sp->env = WORD(atoin(bf, -1)); + } + if( RemoveL2(bf, t, "M", sizeof(bf)-1) == TRUE ){ + sp->cq = bf[0]; + } + if( RemoveL2(bf, t, "OPT1", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->opt1, bf, MLOPT); + } + if( RemoveL2(bf, t, "OPT2", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->opt2, bf, MLOPT); + } + if( RemoveL2(bf, t, "USR1", sizeof(bf)-1) == TRUE ){ + Log.SetOptStr(2, sp, bf); + } + if( RemoveL2(bf, t, "USR2", sizeof(bf)-1) == TRUE ){ + Log.SetOptStr(3, sp, bf); + } + if( RemoveL2(bf, t, "MQSL", sizeof(bf)-1) == TRUE ){ + StrCopy(sp->qsl, bf, MLQSL); + } + clipsp(t); + t = SkipSpace(t); + StrCopy(sp->rem, t, MLREM); + + s = StrDlm(t, s, 0x1e); /* MyQTH*/ + if( *t ) AddL2(sp->qsl, "MyQTH", t, '[', ']', MLQSL); + + s = StrDlm(t, s, 0x1e); /* MyRig*/ + if( *t ) AddL2(sp->qsl, "MyRIG", t, '[', ']', MLQSL); + + s = StrDlm(t, s, 0x1e); /* Send */ + sp->send = *t; + StrDlm(t, s, 0x1e); /* Recv */ + sp->recv = *t; + + if( *pRIG ) AddL2(sp->qsl, "RIG", pRIG, '[', ']', MLQSL); + if( *pContest ) AddL2(sp->qsl, "TEST", pContest, '[', ']', MLQSL); +} +//--------------------------------------------------------------------------- +// LOG200ファイルの読み出し +int CLog200::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + if( fread(m_bf, 1, 200, m_fp) == 200 ){ + LOG200toMMLOG(sp, m_bf); + m_Index++; + return TRUE; + } + else { + return FALSE; + } +} + +//--------------------------------------------------------------------------- +// MMLOG -> LOG200フォーマット変換 +void MMLOGtoLOG200(LPSTR t, SDMMLOG *sp, int &err) +{ + LPSTR s = t; + int h, m; + char bf[256]; + + memset(t, ' ', 200); + // YYMMDD + sprintf(t, "%02u%02u%02u\x1e", sp->year, sp->date / 100, sp->date % 100); + t += strlen(t); + // BGN(HHMM) + h = sp->btime / 1800; + m = (sp->btime % 1800) / 30; + sprintf(t, "%02u%02u\x1e", h, m); + t += strlen(t); + // END + h = sp->etime / 1800; + m = (sp->etime % 1800) / 30; + sprintf(t, "%02u%02u\x1e", h, m); + t += strlen(t); + // CALL + StrCopy(t, sp->call, 15); // 15文字に制限されている + t += strlen(t); + *t++ = 0x1e; + // FREQ + sprintf(bf, "%s", Log.GetFreqString(sp->band, sp->fq)); + if( bf[0] ){ + double dd; + if( sscanf(bf, "%lf", &dd) == 1 ){ + sprintf(bf, "%.3lf", dd); + } + } + strcpy(t, bf); + t += strlen(t); + *t++ = 0x1e; + // MODE + sprintf(t, "%s\x1e", Log.GetModeString(sp->mode)); + t += strlen(t); + // HisRST + sprintf(t, "%s\x1e", sp->ur); + t += strlen(t); + // MyRST + sprintf(t, "%s\x1e", sp->my); + t += strlen(t); + // QTH + sprintf(t, "%s\x1e", sp->qth); + t += strlen(t); + // NAME + sprintf(t, "%s\x1e", sp->name); + t += strlen(t); + // RIG + if( RemoveL2(bf, sp->qsl, "Rig", sizeof(bf)-1) == TRUE ){ + strcpy(t, bf); + } + *t++ = 0x1e; + // CONTEST + if( RemoveL2(bf, sp->qsl, "TEST", sizeof(bf)-1) == TRUE ){ + strcpy(t, bf); + } + *t++ = 0x1e; + char MyRig[200]; + char MyQTH[200]; + MyRig[0] = MyQTH[0] = 0; + if( RemoveL2(bf, sp->qsl, "MyRig", sizeof(bf)-1) == TRUE ){ + strcpy(MyRig, bf); + } + if( RemoveL2(bf, sp->qsl, "MyQTH", sizeof(bf)-1) == TRUE ){ + strcpy(MyQTH, bf); + } + clipsp(sp->qsl); + LPSTR p = SkipSpace(sp->qsl); + + // REM + strcpy(bf, sp->rem); + char bbf[128]; + if( strlen(sp->call) > 11 ){ + AddL2(bf, "CALL", sp->call, '[', ']', MLQSL); + } + if( sp->cq ){ + bbf[0] = sp->cq; bbf[1] = 0; + AddL2(bf, "M", bbf, '[', ']', MLQSL); + } + if( sp->pow[0] ) AddL2(bf, "POW", sp->pow, '[', ']', MLQSL); + if( sp->env ){ + sprintf(bbf, "%u", sp->env); + AddL2(bf, "ENV", bbf, '[', ']', MLQSL); + } + if( sp->opt1[0] ) AddL2(bf, "OPT1", sp->opt1, '[', ']', MLQSL); + if( sp->opt2[0] ) AddL2(bf, "OPT2", sp->opt2, '[', ']', MLQSL); + LPCSTR pp = Log.GetOptStr(2, sp); + if( *pp ) AddL2(bf, "USR1", pp, '[', ']', MLQSL); + pp = Log.GetOptStr(3, sp); + if( *pp ) AddL2(bf, "USR2", pp, '[', ']', MLQSL); + + if( *p ) AddL2(bf, "MQSL", p, '[', ']', MLQSL); + int len = (t - s) + strlen(bf) + 1 + strlen(MyQTH) + 1 + strlen(MyRig) + 1 + 2; + if( len >= 199 ){ + if( !err ){ + err++; + WarningMB("変換した結果がLOG200レコード長を越えました.\r\n\r\nリマークフィールドの長さを調整します."); + } + len -= 199; + bf[strlen(bf)-len] = 0; + } + + sprintf(t, "%s\x1e", bf); + t += strlen(t); + + // MyQTH + sprintf(t, "%s\x1e", MyQTH); + t += strlen(t); + // MyRIG + sprintf(t, "%s\x1e", MyRig); + t += strlen(t); + // S + if( sp->send ) *t++ = sp->send; + *t++ = 0x1e; + // R + if( sp->recv ) *t++ = sp->recv; + *t = 0x1e; + + s[198] = '\r'; s[199] = '\n'; +} +//--------------------------------------------------------------------------- +// LOG200ファイルの書きこみ +int CLog200::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + MMLOGtoLOG200(m_bf, sp, m_err); + if( fwrite(m_bf, 1, 200, m_fp) != 200 ){ + ErrorMB("'%s'に書き込み中にエラーが発生しました.", m_FileName.c_str()); + return FALSE; + } + else { + m_Index++; + return TRUE; + } +} +// +// +//*************************************************************************** +// CHamLog クラス +//--------------------------------------------------------------------------- +CHamLog::CHamLog() +{ + m_Type = 2; + m_err = 0; + + m_DBRName = ""; // DBRファイルの名前 + m_dbrfp = NULL; // DBRファイルのファイルポインタ +} +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// HamLogファイルのオープン +int CHamLog::Open(LPCSTR pName) +{ + Close(); + m_Index = 0; + m_err = 0; + m_Mode = 0; + + m_fp = fopen(pName, "rb"); // DBSのオープン + + if( m_fp == NULL ){ + ErrorMB( "'%s'がオープンできません.", pName); + return FALSE; + } + m_FileName = pName; + if( (fread(&m_hd, 1, sizeof(m_hd), m_fp)!=sizeof(m_hd)) || + (m_hd.Memo != 0x1a) || + (m_hd.HeadLen != 449) || + (m_hd.DataLen != sizeof(m_RecBuf)) + ){ + fclose(m_fp); + m_fp = NULL; + ErrorMB("予期しないファイル形式です."); + return FALSE; + } + char dbrName[256]; + strcpy(dbrName, pName); + SetEXT(dbrName, ".DBR"); + m_DBRName = dbrName; + m_dbrfp = fopen(dbrName, "rb"); + if( m_dbrfp == NULL ){ + WarningMB( "'%s'がオープンできません.", dbrName); + } + else if( fread(&m_dbrhd, 1, sizeof(m_dbrhd), m_dbrfp)!=sizeof(m_dbrhd) ){ + ErrorMB( "'%s'が正常に読みこめません. 処理を中断します.", dbrName); + fclose(m_fp); + m_fp = NULL; + fclose(m_dbrfp); + m_dbrfp = NULL; + return FALSE; + } + + if( Seek(0) == FALSE ){ + Close(); + ErrorMB("最初のレコードが見つかりません."); + return FALSE; + } + return TRUE; +} + +int CHamLog::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + if( m_Mode ){ // 書きこみ + fseek(m_fp, 0, SEEK_SET); + if( fwrite(&m_hd, 1, sizeof(m_hd), m_fp) != sizeof(m_hd) ) r = 1; + } + if( fclose(m_fp) ) r = 1;; + m_fp = NULL; + } + if( m_dbrfp != NULL ){ + if( m_Mode ){ + fseek(m_dbrfp, 0, SEEK_SET); + if( fwrite(&m_dbrhd, 1, sizeof(m_dbrhd), m_dbrfp) != sizeof(m_dbrhd) ) r = 1; + } + if( fclose(m_dbrfp) ) r = 1; + m_dbrfp = NULL; + } + if( r ){ + ErrorMB("ファイルのクローズに失敗しました."); + } + else if( m_Mode ){ + InfoMB("'%s'への追加を終了しました.", m_FileName.c_str()); + } + return r ? FALSE : TRUE; +} + +//--------------------------------------------------------------------------- +// HamLogファイルの作成 +int CHamLog::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + m_err = 0; + + char dbrName[256]; + strcpy(dbrName, pName); + SetEXT(dbrName, ".DBR"); + + int add = 0; + if( (m_fp = fopen(pName, "rt"))!=NULL ){ + fclose(m_fp); + add = 1; + char BackNameDBS[256]; + strcpy(BackNameDBS, pName); + SetEXT(BackNameDBS, ".$BS"); + char BackNameDBR[256]; + strcpy(BackNameDBR, dbrName); + SetEXT(BackNameDBR, ".$BR"); + int r = YesNoCancelMB( "'%s'は既に存在しています. データはこのファイルに追加されます.\r\n\r\nこの操作を実行する前に元のログファイルのバックアップファイル\r\n\r\n'%s'->'%s'\r\n'%s'->'%s'\r\n\r\nを作成しますか?\r\n\r\n" + "[重要]\r\n念のためにバックアップを作成する事をお勧めします.", pName, pName, BackNameDBS, dbrName, BackNameDBR); + if( r == IDYES ){ + CWaitCursor w; + if( ::CopyFile(pName, BackNameDBS, FALSE) == FALSE ){ + ErrorMB("バックアップの作成に失敗しました.\r\nこの処理は中断されます.元のログファイルは変更されません."); + return FALSE; + } + if( ::CopyFile(dbrName, BackNameDBR, FALSE) == FALSE ){ + ErrorMB("バックアップの作成に失敗しました.\r\nこの処理は中断されます.元のログファイルは変更されません."); + return FALSE; + } + } + else if( r == IDCANCEL ){ + return FALSE; + } + } + m_fp = fopen(pName, add ? "r+b":"wb"); + if( m_fp == NULL ){ + ErrorMB( "'%s'がオープンできません.", pName); + return FALSE; + } + m_dbrfp = fopen(dbrName, add ? "r+b":"wb"); + if( m_dbrfp == NULL ){ + ErrorMB( "'%s'がオープンできません.", dbrName); + return FALSE; + } + + if( add ){ // 追加の時 + if( (fread(&m_hd, 1, sizeof(m_hd), m_fp)!=sizeof(m_hd)) || + (m_hd.Memo != 0x1a) || + (m_hd.HeadLen != 449) || + (m_hd.DataLen != sizeof(m_RecBuf)) + ){ + fclose(m_fp); + m_fp = NULL; + fclose(m_dbrfp); + m_dbrfp = NULL; + ErrorMB("'%s'は予期しないファイル形式です.", pName); + return FALSE; + } + if( (fread(&m_dbrhd, 1, sizeof(m_dbrhd), m_dbrfp)!=sizeof(m_dbrhd)) || + (m_dbrhd.Memo != 0x1a) || + (m_dbrhd.term != 0x1a) + ){ + fclose(m_fp); + m_fp = NULL; + fclose(m_dbrfp); + m_dbrfp = NULL; + ErrorMB("'%s'は予期しないファイル形式です.", dbrName); + return FALSE; + } + fseek(m_dbrfp, 0, SEEK_END); // DBRの最後に移動 + } + else { // 新規の時 + MakeHD(); + } + m_FileName = pName; + m_Mode = 1; + m_DBRName = dbrName; + m_Index = m_hd.Max; + return TRUE; +} + +//---------------------------------------------------------------------- +int CHamLog::Seek(DWORD Index) +{ + long Pos = 449 + (Index * sizeof(m_RecBuf)); + if( fseek(m_fp, Pos, SEEK_SET) ) return FALSE; + m_Index = Index; + return TRUE; +} + +//---------------------------------------------------------------------- +//HAMLOGのヘッダを作成 +BOOL CHamLog::MakeHD(void) +{ + memset(&m_hd, 0, sizeof(m_hd)); + memset(&m_dbrhd, 0, sizeof(m_dbrhd)); + m_hd.Memo = 0x1a; + SYSTEMTIME st; + ::GetLocal(&st); + m_hd.YY = BYTE(st.wYear % 100); + m_hd.MM = BYTE(st.wMonth); + m_hd.DD = BYTE(st.wDay); + m_hd.Max = 0; + memcpy(&m_dbrhd, &m_hd, sizeof(m_hd)); + m_hd.HeadLen = 449; + m_hd.DataLen = sizeof(m_RecBuf); + if( fwrite(&m_hd, 1, sizeof(m_hd), m_fp) != sizeof(m_hd) ) return FALSE; + + LPCSTR _Name[]={"CALLS","IGN","POTBL","CODE","GL","FREQ","MODE","NAME","QSL","DATE","TIME","RST","OFS"}; + BYTE _Len[]={6, 1, 3, 6, 6, 4, 3, 12, 3, 3, 2, 4, 4, 0}; + DBSLOT slot; + for( int i = 0; _Len[i]; i++ ){ + memset(&slot, 0, sizeof(slot)); + strcpy(slot.Name, _Name[i]); + slot.Type = 'C'; + slot.Len = _Len[i]; + if( fwrite(&slot, 1, sizeof(slot), m_fp)!=sizeof(slot) ) return FALSE; + } + slot.Name[0] = 0x0d; + if( fwrite(&slot, 1, 1, m_fp)!=1 ) return FALSE; + + m_dbrhd.m1 = 1; + m_dbrhd.term = 0x1a; + if( fwrite(&m_dbrhd, 1, sizeof(m_dbrhd), m_dbrfp)!=sizeof(m_dbrhd) ) return FALSE; + return TRUE; +} + +//--------------------------------------------------------------------------- +// HamLogファイルの読み出し +int CHamLog::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + Seek(m_Index); + if( fread(&m_RecBuf, 1, sizeof(m_RecBuf), m_fp) == sizeof(m_RecBuf) ){ + HAMLOGtoMMLOG(sp, &m_RecBuf, m_dbrfp); + m_Index++; + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +// HamLogファイルの書きこみ +int CHamLog::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + if( MMLOGtoHAMLOG(&m_RecBuf, sp, m_dbrfp) == FALSE ){ + ErrorMB("'%s'に書き込み中にエラーが発生しました.", m_DBRName.c_str()); + return FALSE; + } + Seek(m_hd.Max); + if( fwrite(&m_RecBuf, 1, sizeof(m_RecBuf), m_fp) != sizeof(m_RecBuf) ){ + ErrorMB("'%s'に書き込み中にエラーが発生しました.", m_FileName.c_str()); + return FALSE; + } + else { + m_hd.Max++; + m_dbrhd.Max++; + return TRUE; + } +} +//---------------------------------------------------------------------- +//HAMLOGの周波数記録方式を通常の文字列に変換 +void DecBand(LPSTR t, BYTE *pBand) +{ + if( pBand[3] & 0x80 ){ // 5〜7文字の文字列 + int DotPos = pBand[3] & 0x7f; + int Len = (DotPos >> 3) & 0x07; + DotPos &= 0x07; + LPSTR p = t; + wsprintf(p, "%-7lu", (*((LONG *)pBand) & 0x00ffffffL)); + if( Len < 4 ){ // Ver3.19までの記録方式 + for(int i = 6; i > 3; i--){ + if(p[i]>'0'){ + break; + } + else if(p[i] == '0'){ + p[i] = ' '; + } + } + } + else { + if( Len < 6 ) p[6] = ' '; + if( Len == 4 ) p[5] = ' '; + } + p[DotPos] = '.'; + p[8] = 0; + } + else { // そのまま + StrCopy(t, (LPCSTR)pBand, 4); + } + clipsp(t); + if( LastC(t) == '.' ){ + *lastp(t) = 0; + } +} + +void SetMMLOGKey(SDMMLOG *sp, LPSTR bf) +{ + char rbf[512]; + + if( RemoveL2(rbf, bf, "ToRadio", sizeof(rbf)-1) == TRUE ){ + StrCopy(sp->call, rbf, MLCALL); + } + else if( RemoveL2(rbf, bf, "CALL", sizeof(rbf)-1) == TRUE ){ + StrCopy(sp->call, rbf, MLCALL); + } + + if( RemoveL2(rbf, bf, "ENV", sizeof(rbf)-1) == TRUE ){ + sp->env = WORD(atoin(rbf, -1)); + } + if( RemoveL2(rbf, bf, "END", sizeof(rbf)-1) == TRUE ){ + int tim = atoin(rbf, -1); + int hh = tim / 100; + int mm = tim % 100; + sp->etime = WORD((hh * 60 + mm) * 30); + if( !sp->etime ) sp->etime++; + } + if( RemoveL2(rbf, bf, "POW", sizeof(rbf)-1) == TRUE ){ + StrCopy(sp->pow, rbf, MLPOW); + } + if( RemoveL2(rbf, bf, "M", sizeof(rbf)-1) == TRUE ){ + sp->cq = rbf[0]; + } + if( RemoveL2(rbf, bf, "SN", sizeof(rbf)-1) == TRUE ){ + int l = GetLMode(sp->mode); + if( l ) sp->ur[l] = 0; + strcat(sp->ur, rbf); + } + if( RemoveL2(rbf, bf, "RN", sizeof(rbf)-1) == TRUE ){ + int l = GetLMode(sp->mode); + if( l ) sp->my[l] = 0; + strcat(sp->my, rbf); + } +} +//--------------------------------------------------------------------------- +// HamLog -> MMLOG フォーマットの変換 +void HAMLOGtoMMLOG(SDMMLOG *sp, SDHAMLOG *hp, FILE *dbrfp) +{ + int CallOrder = 0; + char bf[512]; + + memset(sp, 0, sizeof(SDMMLOG)); + DecBand(bf, (BYTE *)hp->freq); + Log.SetFreq(sp, bf); + + StrCopy(bf, hp->mode, 3); + clipsp(bf); + if( !strcmp(bf, Log.m_LogSet.m_THRTTY.c_str()) || !strcmp(bf, "RTY") || !strcmp(bf, "TTY") || !strcmp(bf, "RTT") ){ + strcpy(bf, "RTTY"); + } + else if( !strcmp(bf, Log.m_LogSet.m_THSSTV.c_str()) || !strcmp(bf, "STV")|| !strcmp(bf, "SST") ){ + strcpy(bf, "SSTV"); + } + else if( !strcmp(bf, "FTV") ){ + strcpy(bf, "FSTV"); + } + Log.SetMode(sp, bf); + + StrCopy(sp->name, hp->name, 12); + clipsp(sp->name); + + sprintf(sp->ur, "%02u", BYTE(hp->hiss[0])); + if( hp->hiss[1] != ' ' ) sp->ur[2] = hp->hiss[1]; + + sprintf(sp->my, "%02u", BYTE(hp->myrs[0])); + if( hp->myrs[1] != ' ' ) sp->my[2] = hp->myrs[1]; + + int YY, MM, DD, HH, mm; + YY = hp->date[0] & 0x007f; + YY %= 100; + MM = hp->date[1]; + DD = hp->date[2]; + HH = hp->time[0]; + mm = hp->time[1] & 0x7f; + if( hp->time[1] & 0x80 ){ + UTCtoJST(YY, MM, DD, HH); + } + sp->year = BYTE(YY); + sp->date = WORD(MM * 100 + DD); + sp->btime = WORD(((HH * 60 + mm) * 30)); + if(!sp->btime) sp->btime++; + + if( hp->ofs && (dbrfp != NULL) ){ + FHDDBR fhdbr; + if( fseek(dbrfp, hp->ofs, SEEK_SET) ) goto _ex; + if( fread(&fhdbr, 1, sizeof(fhdbr), dbrfp) != sizeof(fhdbr) ){ + goto _ex; + } + if( fhdbr.LenQTH ){ + if( fread(bf, 1, fhdbr.LenQTH, dbrfp)!=size_t(fhdbr.LenQTH) ){ + goto _ex; + } + bf[fhdbr.LenQTH] = 0; + clipsp(bf); + StrCopy(sp->qth, bf, MLQTH); + } + if( fhdbr.LenREM1 ){ + if( fread(bf, 1, fhdbr.LenREM1, dbrfp)!=size_t(fhdbr.LenREM1) ){ + goto _ex; + } + bf[fhdbr.LenREM1] = 0; + SetMMLOGKey(sp, bf); + clipsp(bf); + if( strstr(bf, "$DX" ) != NULL ) CallOrder = 1; + StrCopy(sp->rem, SkipSpace(bf), MLREM); + } + if( fhdbr.LenREM2 ){ + if( fread(bf, 1, fhdbr.LenREM2, dbrfp)!=size_t(fhdbr.LenREM2) ){ + goto _ex; + } + bf[fhdbr.LenREM2] = 0; + SetMMLOGKey(sp, bf); + clipsp(bf); + if( strstr(bf, "$DX" ) != NULL ) CallOrder = 1; + StrCopy(sp->qsl, SkipSpace(bf), MLQSL); + } + } +_ex:; + sprintf(bf, "QSL[%.3s]", hp->qsl); + Log.SetOptStr(2, sp, bf); + if( hp->qsl[0] == 'N' ){ + sp->send = 'N'; + } + else if( hp->send[0] == ' ' ){ // 未発送 + if( (hp->qsl[0] == 'J')||(hp->qsl[0] == ' ') ){ + sp->send = 0; + } + else { + sp->send = BYTE(tolower(hp->qsl[0])); + } + } + else { // 発送済み + sp->send = BYTE(toupper(hp->send[0])); + } + sp->recv = hp->rcv[0]; + if( sp->recv == ' ' ) sp->recv = 0; + + StrCopy(sp->opt1, hp->code, 6); + StrCopy(sp->opt2, hp->glid, 6); + + if( !sp->call[0] ){ + if( CallOrder && (hp->potbl[0] != ' ') ){ /* KH6/JE3HHTの形式 */ + StrCopy(bf, hp->potbl, 3); + clipsp(bf); + strcat(sp->call, bf); + if( sp->call[0] ) strcat(sp->call, "/"); + StrCopy(bf, hp->calls, 7); + clipsp(bf); + strcat(sp->call, bf); + } + else { /* JE3HHT/KH6の形式 */ + StrCopy(bf, hp->calls, 7); + clipsp(bf); + strcat(sp->call, bf); + if( hp->potbl[0] != ' ' ){ + if( sp->call[0] ) strcat(sp->call, "/"); + StrCopy(bf, hp->potbl, 3); + clipsp(bf); + strcat(sp->call, bf); + } + } + } + if( !sp->etime ) sp->etime = sp->btime; +} +//---------------------------------------------------------------------- +//文字列のコピー(ヌルはセットされない) +void SpaceCopy(LPSTR t, LPCSTR s, int n) +{ + for( ; n && *s; s++, t++, n-- ){ + *t = *s; + } +} +//---------------------------------------------------------------------- +//RST文字列をHAMLOG形式に変換して格納 +void SetRST(char *pRST, LPCSTR p, BYTE mode) +{ + char rs[3]; + int rst; + + StrCopy(rs, p, 2); + if( sscanf(rs, "%d", &rst) == 1 ){ + *pRST = BYTE(rst); + } + else { + *pRST = 59; + } + if( strlen(p) < 3 ) return; + if( GetLMode(mode) == 2 ) return; + pRST[1] = *(p+2); +} +//---------------------------------------------------------------------- +//周波数の文字列をHAMLOGの周波数記録方式に変換 +void EncBand(BYTE *pBand, LPCSTR pStr) +{ + char bf[32]; + StrCopy(bf, pStr, 7); + + int Len = strlen(bf); + if( Len <= 4 ){ + memset(pBand, ' ', 4); + SpaceCopy(LPSTR(pBand), bf, 4); + } + else { + LPSTR p = strchr(bf, '.'); + int DotPos; + if( p != NULL ){ + DotPos = p - bf; + *p = '0'; + } + else { + DotPos = Len; + } + long Freq; + sscanf(bf, "%lu", &Freq); + *(ULONG *)pBand = Freq; + pBand[3] = BYTE(0x0080 | (Len << 3) | DotPos); + } +} + +void AddMMLOGKey(AnsiString &REM1, AnsiString &REM2, LPCSTR s, LPCSTR pKey) +{ + if( !*s ) return; + + int len1 = strlen(REM1.c_str()); + int len2 = strlen(REM2.c_str()); + int len = strlen(s); + if( pKey == NULL ){ + len++; + } + else { + len += strlen(pKey) + 3; + } + AnsiString *ap; + if( (len2 + len) < 54 ){ + ap = &REM2; + } + else if( (len1 + len) < 54 ){ + ap = &REM1; + } + else { + return; + } + if( !ap->IsEmpty() ){ + *ap += " "; + } + if( pKey != NULL ){ + *ap += pKey; + *ap += '['; + } + *ap += s; + if( pKey != NULL ){ + *ap += ']'; + } +} +//--------------------------------------------------------------------------- +// MMLOG -> HamLog フォーマットの変換 +int MMLOGtoHAMLOG(SDHAMLOG *hp, SDMMLOG *sp, FILE *dbrfp) +{ + char bf[512]; + + int CallOrder = FALSE; + memset(hp, ' ', sizeof(SDHAMLOG)); + int YY = sp->year; + int MM = sp->date / 100; + int DD = sp->date % 100; + int tim = sp->btime / 30; + int HH = tim / 60; + int mm = tim % 60; + switch(Log.m_LogSet.m_THTZ){ + case 0: + if( !IsJA(sp->call) ){ + JSTtoUTC(YY, MM, DD, HH); + mm |= 0x80; + } + break; + case 1: + JSTtoUTC(YY, MM, DD, HH); + mm |= 0x80; + break; + default: + break; + } + hp->date[0] = BYTE(YY < 50 ? YY + 128 : YY); + hp->date[1] = BYTE(MM); + hp->date[2] = BYTE(DD); + hp->time[0] = BYTE(HH); + hp->time[1] = BYTE(mm); + + SpaceCopy(hp->name, sp->name, 12); + SpaceCopy(hp->code, sp->opt1, 6); + SpaceCopy(hp->glid, sp->opt2, 6); + AnsiString QTH = sp->qth; + AnsiString REM1 = sp->rem; + AnsiString REM2 = sp->qsl; + + strcpy(bf, sp->call); + LPSTR pp, p2, t; + t = bf; + if( (pp = strchr(bf, '/')) != NULL ){ // KH6/JE3HHT or JE3HHT/KH6 の形式 + *pp = 0; + pp++; + int LenC = strlen(t); + int LenP = strlen(pp); + if( ((p2 = strchr(pp, '/')) != NULL)|| + (LenC > 7) || + (LenP > 7) || + ((LenC > LenP) && (LenP>3)) || + ((LenC < LenP) && (LenC>3)) + ){ + // HAMLOGでは表現できない表記の場合 + AddMMLOGKey(REM1, REM2, sp->call, "ToRadio"); + if( p2 != NULL ){ + *p2 = 0; + LenP = strlen(pp); + } + } + if( LenC < LenP ){ + p2 = t; + t = pp; + pp = p2; + CallOrder = TRUE; + } + SpaceCopy(hp->potbl, pp, 3); + } + else if( strlen(t) > 7 ){ + AddMMLOGKey(REM1, REM2, sp->call, "ToRadio"); + } + SpaceCopy(hp->calls, t, 7); + strcpy(bf, Log.GetModeString(sp->mode)); + if( !strcmp(bf, "RTTY") ){ + StrCopy(bf, Log.m_LogSet.m_THRTTY.c_str(), 3); + } + else if( !strcmp(bf, "SSTV") ){ + StrCopy(bf, Log.m_LogSet.m_THSSTV.c_str(), 3); + } + else if( !strcmp(bf, "FSTV") ){ + strcpy(bf, "FTV"); + } + else if( !strcmp(bf, "BPSK") ){ + strcpy(bf, "PSK"); + } + else if( !strcmp(bf, "QPSK") ){ + strcpy(bf, "PSK"); + } + SpaceCopy(hp->mode, bf, 3); + SetRST(hp->hiss, sp->ur, sp->mode); + SetRST(hp->myrs, sp->my, sp->mode); + + int l = GetLMode(sp->mode); + if( sp->ur[l] ) AddMMLOGKey(REM1, REM2, &sp->ur[l], "SN"); + if( sp->my[l] ) AddMMLOGKey(REM1, REM2, &sp->my[l], "RN"); + + strcpy(bf, Log.GetFreqString(sp->band, sp->fq)); + EncBand((BYTE *)hp->freq, bf); + + + if( CallOrder && (!strstr(sp->rem, "$DX")) && (!strstr(sp->qsl, "$DX")) ){ + AddMMLOGKey(REM1, REM2, "$DX", NULL); + } + + if( sp->etime ){ + tim = sp->etime / 30; + sprintf(bf, "%02u%02u", tim / 60, tim % 60); + AddMMLOGKey(REM1, REM2, bf, "END"); + } + if( sp->env ){ + sprintf(bf, "%u", sp->env); + AddMMLOGKey(REM1, REM2, bf, "ENV"); + } + AddMMLOGKey(REM1, REM2, sp->pow, "POW"); + if( sp->cq ){ + bf[0] = sp->cq; bf[1] = 0; + AddMMLOGKey(REM1, REM2, bf, "M"); + } + strcpy(bf, Log.GetOptStr(2, sp)); + char rbf[32]; + if(RemoveL2(rbf, bf, "QSL", sizeof(rbf)-1) == TRUE){ + hp->qsl[0] = rbf[0]; + hp->send[0] = rbf[1]; + hp->rcv[0] = rbf[2]; + } + else { + hp->rcv[0] = sp->recv; + if( !hp->rcv[0] ) hp->rcv[0] = ' '; + if( sp->send == 'N' ){ + hp->qsl[0] = 'N'; + hp->send[0] = ' '; + } + else if( !sp->send ){ + hp->qsl[0] = 'J'; + hp->send[0] = ' '; + } + else if( (sp->send >= 0x60)||(sp->send == '?') ){ + hp->qsl[0] = BYTE(toupper(sp->send)); + hp->send[0] = ' '; + } + else if( isalpha(sp->send) ){ + hp->qsl[0] = sp->send; + hp->send[0] = '*'; + } + else { + hp->qsl[0] = 'J'; + hp->send[0] = sp->send; + } + } + + if( !QTH.IsEmpty() || !REM1.IsEmpty() || !REM2.IsEmpty() ){ + FHDDBR fhdbr; + memset(&fhdbr, 0, sizeof(fhdbr)); + hp->ofs = ftell(dbrfp); + fhdbr.LenQTH = BYTE(strlen(QTH.c_str())); + fhdbr.LenREM1 = BYTE(strlen(REM1.c_str())); + fhdbr.LenREM2 = BYTE(strlen(REM2.c_str())); + if( fhdbr.LenQTH > 28 ){ + fhdbr.LenQTH = 28; + } + if( fhdbr.LenREM1 > 54 ){ + fhdbr.LenREM1 = 54; + } + if( fhdbr.LenREM2 > 54 ){ + fhdbr.LenREM2 = 54; + } + if( fwrite(&fhdbr, 1, sizeof(fhdbr), dbrfp) != sizeof(fhdbr) ) return FALSE; + if( fhdbr.LenQTH ){ + if( fwrite(QTH.c_str(), 1, fhdbr.LenQTH, dbrfp) != size_t(fhdbr.LenQTH) ) return FALSE; + } + if( fhdbr.LenREM1 ){ + if( fwrite(REM1.c_str(), 1, fhdbr.LenREM1, dbrfp) != size_t(fhdbr.LenREM1) ) return FALSE; + } + if( fhdbr.LenREM2 ){ + if( fwrite(REM2.c_str(), 1, fhdbr.LenREM2, dbrfp) != size_t(fhdbr.LenREM2) ) return FALSE; + } + } + else { + hp->ofs = 0L; + } + return TRUE; +} + +//*************************************************************************** +// CLogADIF クラス +CLogADIF::CLogADIF() +{ + m_bf[sizeof(m_bf)-1] = 0; +} +//--------------------------------------------------------------------------- +// ADIFファイルのオープン +int CLogADIF::Open(LPCSTR pName) +{ + Close(); + m_Mode = 0; + + m_p = NULL; + m_conv = 1; + m_fp = fopen(pName, "rt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB(MsgEng ? "Can't open '%s'": "'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// ADIFファイルの作成 +int CLogADIF::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + + m_fp = fopen(pName, "wt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 1; + fprintf(m_fp, "ADIF Export from %s\n", VERTTL); + fprintf(m_fp, "\n\n"); + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't write to '%s'":"'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogADIF::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB(MsgEng ? "Can't write to '%s'":"'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB(MsgEng ? "Done (write to '%s')":"'%s'への書きこみを終了しました.", m_FileName.c_str()); + } + } + return r ? FALSE : TRUE; +} +const char *_BandText[]={ + "","160m","80m","80m","40m","30m","20m","17m","15m","12m","10m","6m", + "2m","70cm","23cm","13cm","6cm","3cm","3cm","1.25cm","6mm", + "4mm","2mm","1mm","65m","1.25m",NULL, +}; +//--------------------------------------------------------------------------- +// ADIFファイルの読み出し +void CLogADIF::SetData(SDMMLOG *sp, LPCSTR pKey, LPSTR pData) +{ + int l; + + if( !strcmpi(pKey, "CALL") ){ + StrCopy(sp->call, pData, MLCALL); + } + else if( !strcmpi(pKey, "QSO_DATE") ){ + sp->year = BYTE(atoin(pData, 4) % 100); + sp->date = WORD(atoin(pData+4, 4)); + } + else if( !strcmpi(pKey, "TIME_ON") ){ + int hh, mm, ss; + hh = atoin(pData, 2); + mm = atoin(pData+2, 2); + ss = pData[4] ? atoin(pData+4, 2) : 0; + sp->btime = WORD((hh * 60 + mm) * 30 + ss); + if( !sp->btime ) sp->btime++; + } + else if( !strcmpi(pKey, "TIME_OFF") ){ + int hh, mm, ss; + hh = atoin(pData, 2); + mm = atoin(pData+2, 2); + ss = pData[4] ? atoin(pData+4, 2) : 0; + sp->btime = WORD((hh * 60 + mm) * 30 + ss); + if( !sp->etime ) sp->btime++; + } + else if( !strcmpi(pKey, "FREQ") ){ + Log.SetFreq(sp, pData); + } + else if( !strcmpi(pKey, "BAND") ){ + if( !sp->band ){ + int i; + for( i = 1; _BandText[i] != NULL; i++ ){ + if( !strcmpi(_BandText[i], pData) ) break; + } + if( _BandText[i] == NULL ) i = 0; + sp->band = BYTE(i); + } + } + else if( !strcmpi(pKey, "MODE") ){ + Log.SetMode(sp, pData); + } + else if( !strcmpi(pKey, "TX_PWR") ){ + StrCopy(sp->pow, pData, MLPOW); + } + else if( !strcmpi(pKey, "RST_SENT") ){ + if( sp->ur[0] ){ + char bf[MLRST+1]; + strcpy(bf, sp->ur); + StrCopy(sp->ur, pData, MLRST); + l = strlen(sp->ur); + StrCopy(&sp->ur[l], bf, MLRST - l); + } + else { + StrCopy(sp->ur, pData, MLRST); + } + } + else if( !strcmpi(pKey, "RST_RCVD") ){ + if( sp->my[0] ){ + char bf[MLRST+1]; + strcpy(bf, sp->my); + StrCopy(sp->my, pData, MLRST); + l = strlen(sp->my); + StrCopy(&sp->my[l], bf, MLRST - l); + } + else { + StrCopy(sp->my, pData, MLRST); + } + } + else if( !strcmpi(pKey, "STX") ){ + l = strlen(sp->ur); + StrCopy(&sp->ur[l], pData, MLRST - l); + } + else if( !strcmpi(pKey, "SRX") ){ + l = strlen(sp->my); + StrCopy(&sp->my[l], pData, MLRST - l); + } + else if( !strcmpi(pKey, "QSL_SENT") ){ + if( *pData == ' ' ) *pData = 0; + sp->send = *pData; + } + else if( !strcmpi(pKey, "QSL_RCVD") ){ + if( *pData == ' ' ) *pData = 0; + sp->recv = *pData; + } + else if( !strcmpi(pKey, "NAME") ){ + StrCopy(sp->name, pData, MLNAME); + } + else if( !strcmpi(pKey, "QTH") ){ + StrCopy(sp->qth, pData, MLQTH); + } + else if( !strcmpi(pKey, "COMMENT") ){ + StrCopy(sp->rem, pData, MLREM); + } + else if( !strcmpi(pKey, "QSLMSG") ){ + StrCopy(sp->qsl, pData, MLQSL); + } + else if( !strcmpi(pKey, "CONT") ){ + StrCopy(sp->opt2, pData, MLOPT); + } + else if( !strcmpi(pKey, "QSL_VIA") ){ + AddL2(sp->qsl, "QSL", pData, '[', ']', MLQSL); + } +} +//--------------------------------------------------------------------------- +void CLogADIF::AdjustData(SDMMLOG *sp) +{ + if( !sp->etime ) sp->etime = sp->btime; + UTCtoJST(sp); + if( sp->call[0] ){ + LPCSTR pCC = ClipCC(sp->call); + Log.SetOptStr(0, sp, Cty.GetCountry(pCC)); + if( !sp->opt2[0] ) Log.SetOptStr(1, sp, Cty.GetCont(pCC)); + } + if( !sp->ur[0] ) StrCopy(sp->ur, "599", GetLMode(sp->mode)); + if( !sp->my[0] ) StrCopy(sp->my, "599", GetLMode(sp->mode)); +} +//--------------------------------------------------------------------------- +// ADIFファイルの読み出し +int CLogADIF::Read(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + LPSTR p, t, tt; + char bf[1024]; + + while(1){ + if( (m_p == NULL) || !(*m_p) ){ + if( !feof(m_fp) ){ + if( fgets(m_bf, sizeof(m_bf), m_fp) != NULL ){ + ClipLF(m_bf); + m_p = m_bf; + } + else if( sp->btime && sp->call[0] && m_conv ){ + AdjustData(sp); + m_p = NULL; + return TRUE; + } + else { + return FALSE; + } + } + else { + return FALSE; + } + } + m_p = SkipSpace(m_p); + if( *m_p == '<' ){ + m_p = StrDlm(p, m_p+1, '>'); + p = StrDlm(t, p, ':'); + p = StrDlm(tt, p, ':'); + bf[0] = 0; + int n = *tt ? atoin(tt, -1) : 0; + if( (n >= 0) && (n < 1023) && (n <= (int)strlen(m_p)) ){ + if( n ) memcpy(bf, m_p, n); + bf[n] = 0; + } + if( !strcmpi(t, "EOR") ){ + if( m_conv ){ + AdjustData(sp); + return TRUE; + } + } + if( !strcmpi(t, "EOH") ){ + m_conv = 1; + } + else if( m_conv ){ + SetData(sp, t, bf); +#if 0 + FILE *fp = fopen("F:\\TEST.TXT", "at"); + fprintf(fp, "%s:%s\n", t, bf); + fclose(fp); +#endif + m_p += n; + } + } + else if( *m_p ){ + m_p++; + } + } +} +//--------------------------------------------------------------------------- +void CLogADIF::OutF(int &col, FILE *fp, LPCSTR fmt, ...) +{ + va_list pp; + char bf[512]; + + va_start(pp, fmt); + vsprintf(bf, fmt, pp ); + va_end(pp); + if( col ){ + fputs(" ", fp); + col++; + } + int l = strlen(bf); + if( (col + l) > 80 ){ + fputs("\n", fp); + col = 0; + } + fputs(bf, fp); + col += l; +} +//--------------------------------------------------------------------------- +// 出力変換 +// +//KD4MUL 19930921 223558 150000 +//3.690 80M CW 100 599 +//599 Y N ROY STRUNK +//KY FIRST CW CONTACT WB4TXW +int CLogADIF::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; + + int col = 0; + JSTtoUTC(sp); + OutF(col, m_fp, "%s", strlen(sp->call), sp->call); + OutF(col, m_fp, "%04u%02u%02u", YEAR(sp->year), sp->date/100, sp->date%100); + int tim = sp->btime / 30; + OutF(col, m_fp, "%02u%02u%02u", tim/60, tim%60, (sp->btime % 30)*2); + tim = sp->etime / 30; + OutF(col, m_fp, "%02u%02u%02u", tim/60, tim%60, (sp->etime % 30)*2); + LPCSTR p = Log.GetFreqString(sp->band, sp->fq); + if( *p ) OutF(col, m_fp, "%s", strlen(p), p); + p = _BandText[sp->band]; + if( *p ) OutF(col, m_fp, "%s", strlen(p), p); + p = Log.GetModeString(sp->mode); + if( *p ) OutF(col, m_fp, "%s", strlen(p), p); + if( sp->pow[0] ) OutF(col, m_fp, "%s", strlen(sp->pow), sp->pow); + int l = GetLMode(sp->mode); + if( Log.m_LogSet.m_ClipRSTADIF ){ + if( sp->ur[l] ) OutF(col, m_fp, "%s", strlen(&sp->ur[l]), &sp->ur[l]); + if( sp->my[l] ) OutF(col, m_fp, "%s", strlen(&sp->my[l]), &sp->my[l]); + sp->ur[GetLMode(sp->mode)] = 0; + sp->my[GetLMode(sp->mode)] = 0; + } + if( sp->ur[0] ) OutF(col, m_fp, "%s", strlen(sp->ur), sp->ur); + if( sp->my[0] ) OutF(col, m_fp, "%s", strlen(sp->my), sp->my); + if( sp->send ) OutF(col, m_fp, "%c", sp->send); + if( sp->recv ) OutF(col, m_fp, "%c", sp->recv); + if( sp->name[0] ) OutF(col, m_fp, "%s", strlen(sp->name), sp->name); + if( sp->qth[0] ) OutF(col, m_fp, "%s", strlen(sp->qth), sp->qth); + if( sp->rem[0] ) OutF(col, m_fp, "%s", strlen(sp->rem), sp->rem); + if( sp->opt2[0] ) OutF(col, m_fp, "%s", strlen(sp->opt2), sp->opt2); + if( sp->qsl[0] ){ + char via[MLQSL+1]; + char qsl[MLQSL+1]; + StrCopy(qsl, sp->qsl, MLQSL); + if( !RemoveL2(via, qsl, "QSL", sizeof(via)-1) ){ + via[0] = 0; + } + if( qsl[0] ) OutF(col, m_fp, "%s", strlen(qsl), qsl); + if( via[0] ) OutF(col, m_fp, "%s", strlen(via), via); + } + OutF(col, m_fp, "\n"); + return ferror(m_fp) ? FALSE : TRUE; +} + + +//*************************************************************************** +// CLogCabrillo クラス +CLogCabrillo::CLogCabrillo() +{ + m_bf[sizeof(m_bf)-1] = 0; +} +//--------------------------------------------------------------------------- +// LogCabrilloファイルのオープン +int CLogCabrillo::Open(LPCSTR pName) +{ + Close(); + m_Mode = 0; + + m_p = NULL; + m_SNR = ""; + m_fp = fopen(pName, "rt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 0; + return TRUE; + } + else { + ErrorMB(MsgEng ? "Can't open '%s'": "'%s'がオープンできません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// LogCabrilloファイルの作成 +int CLogCabrillo::Create(LPCSTR pName) +{ + Close(); + m_Mode = 1; + + m_fp = fopen(pName, "wt"); + if( m_fp != NULL ){ + setvbuf(m_fp, NULL, _IOFBF, 16384); + m_FileName = pName; + m_Mode = 1; + fprintf( m_fp, "START-OF-LOG: 2.0\n"); + fprintf( m_fp, "ARRL-SECTION: \n" ); + fprintf( m_fp, "CONTEST: <== e.g. ARRL-RTTY, CQ-WW-RTTY, CQ-WPX-RTTY, BARTG-SPRINT, BARTG-RTTY\n"); + fprintf( m_fp, "CALLSIGN: %s\n", sys.m_Call.c_str() ); + fprintf( m_fp, "CATEGORY: <== e.g. SINGLE-OP ALL HIGH, SINGLE-OP-ASSISTED 20M LOW\n" ); + fprintf( m_fp, "CLAIMED-SCORE: \n"); + fprintf( m_fp, "OPERATORS:\n" ); + fprintf( m_fp, "CLUB:\n" ); + fprintf( m_fp, "NAME: <== your name\n" ); + fprintf( m_fp, "ADDRESS: <== your postal address\n" ); + fprintf( m_fp, "SOAPBOX: \n" ); + fprintf( m_fp, "CREATED-BY: %s\n", VERTTL2); + return TRUE; + } + else { + ErrorMB( MsgEng ? "Can't write to '%s'":"'%s'が作成できません.", pName); + return FALSE; + } +} +//--------------------------------------------------------------------------- +// テキストファイルのオープン +int CLogCabrillo::Close(void) +{ + int r = 0; + if( m_fp != NULL ){ + fprintf(m_fp, "END-OF-LOG:\n"); + r = fclose(m_fp); + m_fp = NULL; + if( r ){ + ErrorMB(MsgEng ? "Can't write to '%s'":"'%s'が正しくクローズできませんでした.", m_FileName.c_str()); + } + else if( m_Mode ){ + InfoMB(MsgEng ? "Done (write to '%s')\r\n\r\nMMSSTV did only make QSO section.\r\nEdit to the contest name, category, your name and address, etc... in the file.":"'%s'への書きこみを終了しました.\r\n\r\nMMSSTVはQSOセクションしか作成しません。\r\nコンテスト名、参加カテゴリ等を編集してください.", m_FileName.c_str()); + sprintf(m_bf, "NOTEPAD.EXE %s", m_FileName.c_str()); + WinExec(m_bf, SW_SHOWDEFAULT); + } + } + return r ? FALSE : TRUE; +} +//--------------------------------------------------------------------------- +// LogCabrilloファイルの読み出し +int CLogCabrillo::Read(SDMMLOG *sp) +{ + return FALSE; +} +//--------------------------------------------------------------------------- +// 出力変換 +// +int CLogCabrillo::Write(SDMMLOG *sp) +{ + if( !IsOpen() ) return FALSE; +// "","1.9","3.5","3.8","7","10","14","18","21","24","28","50", +// "144","430","1200","2400","5600","10.1G","10.4G","24G","47G", +// "75G","142G","248G","4630","220",NULL, + const char *_bandc[]={ + "??","1800","3500","3500","7000","10000","14000","18000","21000","24000","28000", + "A", "B","D","E","F","H","I","J","K","M", + "N","P","R","?","C",NULL, + }; + +// "CW","SSB","AM","FM","RTTY","PAC","FAX","SSTV","ATV","TV","FSTV", +// "A1","A2","A3","A3A","A3H","A3J","A4","A5","A5C","A5J", +// "A9","A9C","F1","F2","F3","F4","F5","F9","P0","P1", +// "P2D","P2E","P2F","P3D","P3E","P3F","P9", +// "U1","U2","U3","U4", +// "PSK","BPSK","QPSK","HELL","MFSK", + const char *_modec[]={ + "??", + "CW","PH","PH","FM","RY","RY","??","TV","TV","TV","TV", + "CW","CW","PH","PH","PH","PH","??","??","??","??", + "??","??","RY","RY","FM","??","??","??", + "??","??","??","??","??","??","??","??","??", + "??","??","??","??", + "RY","RY","RY","CW","RY", + NULL, + }; + + JSTtoUTC(sp); + int tim = sp->btime / 30; + char SNO[MLRST+1]; + char RNO[MLRST+1]; + int mno = sp->mode >= MODEMAX ? 0 : sp->mode; + int len = GetLMode(BYTE(mno)); + strcpy(SNO, &sp->ur[len]); + strcpy(RNO, &sp->my[len]); + sp->ur[len] = 0; + sp->my[len] = 0; + if( !SNO[0] ){ + if( m_SNR.IsEmpty() ){ + int r; + if( MsgEng ){ + r = InputMB("Does not exist the Sent-NR information", "Enter contest number which you sent", m_SNR); + } + else { + r = InputMB("Sent-NR情報が存在しません", "Sent-NRを入力して下さい", m_SNR); + } + if( r == FALSE ) return FALSE; + } + strcpy(SNO, m_SNR.c_str()); + } + fprintf( m_fp, "QSO:%6s %2s %04u-%02u-%02u %02u%02u %-13s %-3s %-6s %-13s %-3s %-6s\n", + _bandc[sp->band], _modec[mno], + (sp->year <= 50) ? sp->year + 2000 : sp->year + 1900, + sp->date / 100, sp->date % 100, + tim/60, tim%60, sys.m_Call.c_str(), + sp->ur, SNO, + sp->call, sp->my, RNO + ); + return ferror(m_fp) ? FALSE : TRUE; +} + diff --git a/LogConv.h b/LogConv.h new file mode 100644 index 0000000..edd377a --- /dev/null +++ b/LogConv.h @@ -0,0 +1,249 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef LogConvH +#define LogConvH +#include "LogFile.h" + +extern const char *MONT1[]; +extern const char *MONT2[]; +extern const char *_BandText[]; +//************************************************************* +// ログ変換の基本クラス +// +class CLogConv +{ +protected: + int m_Type; // 0-TEXT, 1-LOG200, 2-HAMLOG, 3-DBASE + int m_Mode; // 0-Read, 1-Write + FILE *m_fp; + + AnsiString m_FileName; // 変換中のファイル名 +public: + CLogConv(); + virtual ~CLogConv(); + virtual int IsOpen(void){return m_fp != NULL ? 1 : 0;}; + virtual int Open(LPCSTR pName)=0; + virtual int Create(LPCSTR pName)=0; + virtual int Close(void)=0; + virtual int Read(SDMMLOG *sp)=0; + virtual int Write(SDMMLOG *sp)=0; +}; + +#define TEXTCONVMAX 64 +typedef struct { + int w; + AnsiString Key; +}TCONV; + +//************************************************************* +// テキストファイルアクセスのクラス +// +class CLogText : public CLogConv +{ +public: + int m_Double; + int m_Delm; + TCONV m_rConv[TEXTCONVMAX]; + TCONV m_tConv[TEXTCONVMAX]; + int m_UTC; + int m_err; +protected: + char m_bf[2048]; // ファイルバッファ + +private: + int Text2MMLOG(SDMMLOG *sp, LPSTR p, int &err); + void MMLOG2Text(LPSTR t, SDMMLOG *sp); + +public: + CLogText(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); + +}; + +void MMLOG2Text(LPSTR t, SDMMLOG *sp, AnsiString &Key); +int Text2MMLOG(SDMMLOG *sp, LPCSTR s, AnsiString &Key); +extern const LPCSTR ConvTbl[]; +extern CLogText LogText; + +//************************************************************* +// LOG200ファイルアクセスのクラス +// +#define LOG200WIDTH 200 +class CLog200 : public CLogConv +{ +public: + int m_Index; + int m_err; +protected: + char m_bf[200]; // ファイルバッファ +private: +public: + CLog200(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); +}; + +//************************************************************* +// HAMLOGファイルアクセスのクラス +// +#pragma option -a- // パックの指示 +typedef struct { + char Memo; // 03h=メモフィールド無し 83h=メモフィールド有り(HAMLOGでは 1Ah) + char YY, MM, DD; // 最終更新年月日 + long Max; // レコード件数 + WORD HeadLen; // ヘッダの長さ(HAMLOG.DBSは 449) + WORD DataLen; // レコードの長さ(HAMLOG.DBSは 58) + char dummy[20]; // 00h +}DBSHD; + +typedef struct { + char Memo; // 03h=メモフィールド無し 83h=メモフィールド有り(HAMLOGでは 1Ah) + char YY, MM, DD; // 最終更新年月日 + long Max; // レコード件数 + char dm1; + char m1; // 01h + char dm2; + char dummy[21]; // 00h + char dummy2[255-32]; // 00h + char term; // 1ah +}DBRHD; + +typedef struct { + char Name[11]; + BYTE Type; + BYTE dm1[4]; + BYTE Len; + BYTE dm2[15]; +}DBSLOT; + +typedef struct { + char del[1]; /* 削除マーク */ + char calls[7]; /* コールサイン */ + char potbl[3]; /* 移動エリア */ + char code[6]; /* JCCコード */ + char glid[6]; /* グリッドロケーター */ + char freq[4]; /* 周波数 */ + char mode[3]; /* モード */ + char name[12]; /* 氏名 */ + char qsl [1]; /* QSL via */ + char send[1]; /* QSL SEND */ + char rcv[1]; /* QSL RCV */ + char date[3]; /* 日付 */ + char time[2]; /* 時間 */ + char hiss[2]; /* HIS RST */ + char myrs[2]; /* MY RST */ + long ofs; /* HAMLOG.DBR オフセットアドレス */ +}SDHAMLOG; + +typedef struct { /* DBRのフィールド位置データ */ + BYTE LenQTH; + BYTE LenREM1; + BYTE LenREM2; +}FHDDBR; +#pragma option -a. // パック解除の指示 + +class CHamLog : public CLogConv +{ +public: + int m_Index; + int m_err; +protected: + DBSHD m_hd; // DBSヘッダ + SDHAMLOG m_RecBuf; // レコードバッファ + + AnsiString m_DBRName; // DBRファイルの名前 + FILE *m_dbrfp; // DBRファイルのファイルポインタ + DBRHD m_dbrhd; // DBRヘッダ +private: + int Seek(DWORD Index); + BOOL MakeHD(void); + +public: + CHamLog(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); +}; + +void HAMLOGtoMMLOG(SDMMLOG *sp, SDHAMLOG *hp, FILE *dbrfp); +int MMLOGtoHAMLOG(SDHAMLOG *hp, SDMMLOG *sp, FILE *dbrfp); +void AddMMLOGKey(AnsiString &REM1, AnsiString &REM2, LPCSTR s, LPCSTR pKey); +void SetMMLOGKey(SDMMLOG *sp, LPSTR bf); + +//************************************************************* +// ADIFアクセスのクラス +// +class CLogADIF : public CLogConv +{ +public: +protected: + char m_bf[1024]; // ファイルバッファ + LPSTR m_p; + int m_conv; +private: + void MMLOG2ADIF(LPSTR t, SDMMLOG *sp); + void SetData(SDMMLOG *sp, LPCSTR pKey, LPSTR pData); + void AdjustData(SDMMLOG *sp); + void OutF(int &col, FILE *fp, LPCSTR fmt, ...); + +public: + CLogADIF(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); + +}; + +//************************************************************* +// Cabrillo アクセスのクラス +// +class CLogCabrillo : public CLogConv +{ +public: +protected: + char m_bf[1024]; // ファイルバッファ + LPSTR m_p; + AnsiString m_SNR; +private: + void MMLOG2Cabrillo(LPSTR t, SDMMLOG *sp); + void AdjustData(SDMMLOG *sp); + +public: + CLogCabrillo(); + virtual int Open(LPCSTR pName); + virtual int Create(LPCSTR pName); + virtual int Close(void); + virtual int Read(SDMMLOG *sp); + virtual int Write(SDMMLOG *sp); +}; + +#endif diff --git a/LogFile.cpp b/LogFile.cpp new file mode 100644 index 0000000..941b018 --- /dev/null +++ b/LogFile.cpp @@ -0,0 +1,1667 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include //ja7ude 0521 +#pragma hdrstop + +#include +#include +#include +#include +#include "LogFile.h" +#include "Main.h" +#include "Hamlog5.h" +CLogFile Log; + + +//--------------------------------------------------------------------------- +// MMLOG Constant +// +enum BD { /* バンドの番号 */ + B_NULL, + B_19, + B_35, + B_38, + B_7, + B_10, + B_14, + B_18, + B_21, + B_24, + B_28, + B_50, + B_144, + B_430, + B_1200, + B_2400, + B_5600, + B_101G, + B_104G, + B_24G, + B_47G, + B_75G, + B_142G, + B_248G, + B_4630, + B_220, + B_SAT, +}; + +const char *_mBand[]={ + "","160","80","75","40","30","20","17","15","12","10","6", + "2","430","1200","2400","5600","10.1G","10.4G","24G","47G", + "75G","142G","248G","4630","220",NULL, +}; +const char *_band[]={ + "","1.9","3.5","3.8","7","10","14","18","21","24","28","50", + "144","430","1200","2400","5600","10.1G","10.4G","24G","47G", + "75G","142G","248G","4630","220",NULL, +}; +static const char *_mode[]={ + "", + "CW","SSB","AM","FM","RTTY","PAC","FAX","SSTV","ATV","TV","FSTV", + "A1","A2","A3","A3A","A3H","A3J","A4","A5","A5C","A5J", + "A9","A9C","F1","F2","F3","F4","F5","F9","P0","P1", + "P2D","P2E","P2F","P3D","P3E","P3F","P9", + "U1","U2","U3","U4", + "PSK","BPSK","QPSK","HELL","MFSK", + NULL, +}; +const char lmode[]={ + 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, + 3, 3, 3, 3, 3, +}; +const char MONN[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; +const char MONU[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; +//--------------------------------------------------------------------------- +// CIndexクラス +int GetLMode(BYTE m) +{ + if( m < MODEMAX ){ + return lmode[m]; + } + else { + return 3; + } +} +//--------------------------------------------------------------------------- +// CIndexクラス +CIndex::CIndex() +{ + m_IndexMax = 0; // 確保中のインデックスの数 + m_IndexCnt = 0; // 現在のインデックスの数 + pIndex = NULL; // インデックス領域のポインタ(16バイトインデックス) + pMult = NULL; +} +CIndex::~CIndex() +{ + if( pIndex != NULL ){ + delete pIndex; + pIndex = NULL; + } + if( pMult != NULL ){ + delete pMult; + pMult = NULL; + } +} +void CIndex::AllocIndex(int n) +{ + if( n >= m_IndexMax ){ + int max = m_IndexMax ? (m_IndexMax * 2) : 32768; + LPSTR np = new char[16*max]; + if( pIndex != NULL ){ + memcpy(np, pIndex, m_IndexCnt*16); + delete pIndex; + } + pIndex = np; + m_IndexMax = max; + } +} + +void CIndex::ClearIndex(void) +{ + m_IndexCnt = 0; +} + +void CIndex::WriteIndex(LPCSTR pCall, int n) +{ + AllocIndex(n); + memcpy(&pIndex[n*16], pCall, 16); + if( n >= m_IndexCnt ) m_IndexCnt = n + 1; +} + +void CIndex::ReadIndex(LPSTR pCall, int n) +{ + memcpy(pCall, &pIndex[n*16], 16); + pCall[16] = 0; +} + +LPSTR CIndex::PointIndex(int n) +{ + return &pIndex[n*16]; +} + +void CIndex::AddBlock(LPCSTR p, int len) +{ + int n = len/16; + AllocIndex(n + m_IndexCnt); + memcpy(&pIndex[m_IndexCnt*16], p, len); + m_IndexCnt += n; +} +//--------------------------------------------------------------------------- +int CIndex::ReadIndex(int handle, FHD *hp) +{ + int r = TRUE; + int BUFSIZE=32768; + + CWaitCursor w; + if( lseek(handle, (hp->size * (ULONG)sizeof(SDMMLOG)) + FHDOFF, SEEK_SET) != -1L ){ + if( hp->hash != 2 ){ // 16バイトインデックスと異なる + if( hp->hash ){ // 2バイトインデックスのスキップ + lseek(handle, hp->size * 2, SEEK_CUR); + } + r = FALSE; + } + else { // 16バイトインデックス + LPSTR bp = new char[BUFSIZE]; + int len = hp->size * 16; + int rlen, wlen; + while(len){ + rlen = (len > BUFSIZE) ? BUFSIZE : len; + wlen = read(handle, bp, rlen); + if( rlen != wlen ){ + r = FALSE; + break; + } + AddBlock(bp, wlen); + len -= wlen; + } + delete bp; + } + if( pMult == NULL ) pMult = new BYTE[32768]; + read(handle, pMult, hp->mlt); + } + else { + r = FALSE; + } + return r; +} + +void CIndex::MakeIndex(int handle, FHD *hp) +{ + CWaitCursor w; + + lseek(handle, (ULONG)FHDOFF, SEEK_SET); + ClearIndex(); + + FHD fh; + memset(&fh, 0, sizeof(fh)); + + int i, rlen; + SDMMLOG sd; + for( i = 0; i < hp->size; i++ ){ + rlen = read(handle, &sd, sizeof(sd)); + if( rlen != (int)sizeof(sd) ) break; //ja7ude 0525 + WriteIndex(sd.call, i); + if( sd.mode >= MODEMAX ){ + int m = sd.mode - MODEMAX; + int f = 0; + int n; + char sbf[7]; + StrCopy(sbf, hp->mode[m], 6); + for( n = 0; (n < UMODEMAX) && fh.mode[n][0] ; n++ ){ + char tbf[7]; + StrCopy(tbf, fh.mode[n], 6); + if( !strcmp(sbf, tbf) ){ + if( m != n ){ + f++; + sd.mode = BYTE(n + MODEMAX); + break; + } + } + } + if( !fh.mode[n][0] ){ + StrCopy(fh.mode[n], sbf, 6); + if( m != n ){ + sd.mode = BYTE(n + MODEMAX); + f++; + } + } + if( f ){ + lseek( handle, -long(sizeof(sd)), SEEK_CUR); + write(handle, &sd, sizeof(sd)); + } + } + } + memcpy(hp->mode, fh.mode, sizeof(fh.mode)); + lseek( handle, (hp->size * (ULONG)sizeof(SDMMLOG)) + FHDOFF, SEEK_SET); + hp->hash = 2; // 16バイトインデックス +} + +//--------------------------------------------------------------------------- +int CIndex::WriteIndex(int handle, FHD *hp) +{ + int r = TRUE; + int BUFSIZE=32768; + + CWaitCursor w; + + if( lseek(handle, (hp->size * (ULONG)sizeof(SDMMLOG)) + FHDOFF, SEEK_SET) != -1L ){ + hp->hash = 2; + int len = hp->size * 16; + int vlen, wlen; + LPSTR cp = pIndex; + while(len){ + wlen = (len > BUFSIZE) ? BUFSIZE : len; + vlen = write(handle, cp, wlen); + if( wlen != vlen ) r = FALSE; + len -= vlen; + cp += vlen; + } + if( pMult != NULL ){ + write(handle, pMult, hp->mlt); + } + } + else { + r = FALSE; + } + return r; +} + +//--------------------------------------------------------------------------- +// CLogFindクラス +CLogFind::CLogFind() +{ + m_FindCnt = 0; + pFindTbl = new int[FINDMAX]; +} +//--------------------------------------------------------------------------- +CLogFind::~CLogFind() +{ + delete pFindTbl; + pFindTbl = NULL; +} +//--------------------------------------------------------------------------- +int CLogFind::Add(int n) +{ + if( m_FindCnt >= FINDMAX ) return 0; + + for( int i = 0; i < m_FindCnt; i++ ){ + if( pFindTbl[i] == n ) return 0; + } + pFindTbl[m_FindCnt] = n; + m_FindCnt++; + return 1; +} +//--------------------------------------------------------------------------- +void CLogFind::Ins(int n) +{ + if( m_FindCnt >= FINDMAX ) return; + + int i; + for( i = 0; i < m_FindCnt; i++ ){ + if( pFindTbl[i] == n ) return; + } + for( i = m_FindCnt - 1; i > 0; i-- ){ + pFindTbl[i] = pFindTbl[i-1]; + } + pFindTbl[0] = n; + m_FindCnt++; + m_FindCmp1Max++; + m_FindCmp2Max++; + m_FindStr1Max++; + m_FindStr2Max++; +} +//--------------------------------------------------------------------------- +// CLogFileクラス +CLogFile::CLogFile() +{ + memset(&m_sd, 0, sizeof(SDMMLOG)); + memset(&m_bak, 0, sizeof(SDMMLOG)); + + m_Open = 0; // オープンフラグ + m_EditFlag = 0; + m_Handle = 0; + memset(&m_fhd, 0, sizeof(m_fhd)); // 現在オープン中のファイルヘッダ + MakePathName("TEMP.MDT"); + m_CurNo = 0; + + // LogSet のデフォルト + + m_LogSet.m_TimeZone = 'I'; // JA + + m_LogSet.m_UpperName = 0; // 大文字への変換 + m_LogSet.m_UpperQTH = 0; // 大文字への変換 + m_LogSet.m_UpperREM = 0; // 大文字への変換 + m_LogSet.m_UpperQSL = 0; // 大文字への変換 + + m_LogSet.m_DefMyRST = 0; // 0-OFF, 1-ON + + m_LogSet.m_CopyFreq = 1; // 0-Band, 1-Freq + m_LogSet.m_CopyHis = 0; // 0-599, 1-599001, 2-599UTC + m_LogSet.m_CopyName = 1; // 0-OFF, 1-ON + m_LogSet.m_CopyQTH = 1; // 0-OFF, 1-ON + m_LogSet.m_CopyREM = 0; // 0-OFF, 1-ON + m_LogSet.m_CopyQSL = 0; // 0-OFF, 1-ON + m_LogSet.m_CopyREMB4 = 0; // 0-OFF, 1-ON + + m_LogSet.m_AutoSave = 1; + m_LogSet.m_CheckBand = 1; + + m_LogSet.m_THRTTY = "RTY"; + m_LogSet.m_THSSTV = "STV"; + m_LogSet.m_THTZ = 0; + m_LogSet.m_ClipRSTADIF = 1; + m_LogSet.m_DateType = 0; + + m_LogSet.m_FSKNR = 1; + m_LogSet.m_Backup = 1; + memcpy(m_LogSet.m_Hamlog5Len, g_Hamlog5Len, 17); +} + +CLogFile::~CLogFile() +{ + Close(); +} + +void CLogFile::ReadIniFile(LPCSTR pKey, TMemIniFile *pIniFile) +{ + m_LogSet.m_DateType = pIniFile->ReadInteger(pKey, "DateType", m_LogSet.m_DateType); + m_LogSet.m_TimeZone = (char)pIniFile->ReadInteger(pKey, "TimeZone", m_LogSet.m_TimeZone); + + m_LogSet.m_UpperName = pIniFile->ReadInteger(pKey, "UpperName", m_LogSet.m_UpperName); + m_LogSet.m_UpperQTH = pIniFile->ReadInteger(pKey, "UpperQTH", m_LogSet.m_UpperQTH); + m_LogSet.m_UpperREM = pIniFile->ReadInteger(pKey, "UpperREM", m_LogSet.m_UpperREM); + m_LogSet.m_UpperQSL = pIniFile->ReadInteger(pKey, "UpperQSL", m_LogSet.m_UpperQSL); + + m_LogSet.m_DefMyRST = pIniFile->ReadInteger(pKey, "DefMyRST", m_LogSet.m_DefMyRST); + + m_LogSet.m_CopyFreq = pIniFile->ReadInteger(pKey, "CopyFreq", m_LogSet.m_CopyFreq); + m_LogSet.m_CopyHis = pIniFile->ReadInteger(pKey, "CopyHis", m_LogSet.m_CopyHis); + m_LogSet.m_CopyName = pIniFile->ReadInteger(pKey, "CopyName", m_LogSet.m_CopyName); + m_LogSet.m_CopyQTH = pIniFile->ReadInteger(pKey, "CopyQTH", m_LogSet.m_CopyQTH); + m_LogSet.m_CopyREM = pIniFile->ReadInteger(pKey, "CopyREM", m_LogSet.m_CopyREM); + m_LogSet.m_CopyQSL = pIniFile->ReadInteger(pKey, "CopyQSL", m_LogSet.m_CopyQSL); + m_LogSet.m_CopyREMB4 = pIniFile->ReadInteger(pKey, "CopyREMB4", m_LogSet.m_CopyREMB4); + + m_LogSet.m_CheckBand = pIniFile->ReadInteger(pKey, "CheckBand", m_LogSet.m_CheckBand); + + m_LogSet.m_AutoSave = pIniFile->ReadInteger(pKey, "AutoSave", m_LogSet.m_AutoSave); + m_LogSet.m_THRTTY = pIniFile->ReadString(pKey, "THRTTY", m_LogSet.m_THRTTY); + m_LogSet.m_THSSTV = pIniFile->ReadString(pKey, "THSSTV", m_LogSet.m_THSSTV); + m_LogSet.m_THTZ = pIniFile->ReadInteger(pKey, "THTZ", m_LogSet.m_THTZ); + m_LogSet.m_ClipRSTADIF = pIniFile->ReadInteger(pKey, "ClipRSTADIF", m_LogSet.m_ClipRSTADIF); + + m_LogSet.m_FSKNR = pIniFile->ReadInteger(pKey, "FSKNR", m_LogSet.m_FSKNR); + m_LogSet.m_Backup = pIniFile->ReadInteger(pKey, "Backup", m_LogSet.m_Backup); + AnsiString ss; + GetHamlog5FieldsLen(ss); + AnsiString as = pIniFile->ReadString(pKey, "TH5Fields", ss); + SetHamlog5FieldsLen(as); +} + +void CLogFile::WriteIniFile(LPCSTR pKey, TMemIniFile *pIniFile) +{ + pIniFile->WriteInteger(pKey, "TimeZone", m_LogSet.m_TimeZone); + pIniFile->WriteInteger(pKey, "DateType", m_LogSet.m_DateType); + + pIniFile->WriteInteger(pKey, "UpperName", m_LogSet.m_UpperName); + pIniFile->WriteInteger(pKey, "UpperQTH", m_LogSet.m_UpperQTH); + pIniFile->WriteInteger(pKey, "UpperREM", m_LogSet.m_UpperREM); + pIniFile->WriteInteger(pKey, "UpperQSL", m_LogSet.m_UpperQSL); + + pIniFile->WriteInteger(pKey, "DefMyRST", m_LogSet.m_DefMyRST); + + pIniFile->WriteInteger(pKey, "CopyFreq", m_LogSet.m_CopyFreq); + pIniFile->WriteInteger(pKey, "CopyHis", m_LogSet.m_CopyHis); + pIniFile->WriteInteger(pKey, "CopyName", m_LogSet.m_CopyName); + pIniFile->WriteInteger(pKey, "CopyQTH", m_LogSet.m_CopyQTH); + pIniFile->WriteInteger(pKey, "CopyREM", m_LogSet.m_CopyREM); + pIniFile->WriteInteger(pKey, "CopyQSL", m_LogSet.m_CopyQSL); + pIniFile->WriteInteger(pKey, "CopyREMB4", m_LogSet.m_CopyREMB4); + + pIniFile->WriteInteger(pKey, "CheckBand", m_LogSet.m_CheckBand); + + pIniFile->WriteInteger(pKey, "AutoSave", m_LogSet.m_AutoSave); + pIniFile->WriteString(pKey, "THRTTY", m_LogSet.m_THRTTY); + pIniFile->WriteString(pKey, "THSSTV", m_LogSet.m_THSSTV); + pIniFile->WriteInteger(pKey, "THTZ", m_LogSet.m_THTZ); + pIniFile->WriteInteger(pKey, "ClipRSTADIF", m_LogSet.m_ClipRSTADIF); + + pIniFile->WriteInteger(pKey, "FSKNR", m_LogSet.m_FSKNR); + pIniFile->WriteInteger(pKey, "Backup", m_LogSet.m_Backup); + AnsiString ss; + GetHamlog5FieldsLen(ss); + pIniFile->WriteString(pKey, "TH5Fields", ss); +} + +void CLogFile::MakeIndex(void) +{ + if( !m_Open ) return; + + m_Index.MakeIndex(m_Handle, &m_fhd); + m_EditFlag = 1; +} + +void CLogFile::MakePathName(LPCSTR pName) +{ + char bf[256]; + + m_Name = pName; + sprintf(bf, "%s%s", MMLogDir, pName); + SetEXT(bf, ".MDT"); + m_FileName = bf; +} + +void CLogFile::MakeName(LPCSTR pPathName) +{ + if( pPathName != m_FileName.c_str() ) m_FileName = pPathName; + + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char name[_MAX_FNAME]; + char ext[_MAX_EXT]; + AnsiString Dir; + + ::_splitpath( pPathName, drive, dir, name, ext ); + Dir = drive; + Dir += dir; + m_Name = name; + m_Name += ext; + if( Dir.IsEmpty() ){ + if( !MMLogDir[0] ) strcpy(MMLogDir, BgnDir); + MakePathName(m_Name.c_str()); + } + else { + strncpy(MMLogDir, Dir.c_str(), 128); + } +} + +void CLogFile::DoBackup(void) +{ + if( !Log.m_LogSet.m_Backup ) return; + if( m_FileName.IsEmpty() ) return; + + FILE *sfp = fopen(m_FileName.c_str(), "rb"); + if( sfp == NULL ) return; + + char tname[256]; + strcpy(tname, m_FileName.c_str()); + SetEXT(tname, "_BAK.MDT"); + FILE *tfp = fopen(tname, "rb"); + if( tfp != NULL ){ + long slen = filelength(fileno(sfp)); + long tlen = filelength(fileno(tfp)); + fclose(tfp); + if( slen <= tlen ){ + fclose(sfp); + return; + } + } + fclose(sfp); + ::CopyFile(m_FileName.c_str(), tname, FALSE); +} + +int CLogFile::Close(void) +{ + int r = TRUE; + if( m_Open ){ + if( m_EditFlag ){ + if( m_fhd.size ){ + SDMMLOG sd; + + GetData(&sd, m_fhd.size - 1); + if( !sd.date || !sd.btime ){ + DeleteLast(); + } + } + ULONG size = (m_fhd.size * (ULONG)sizeof(SDMMLOG))+(ULONG)FHDOFF; + if( chsize(m_Handle, size) ){ + ErrorFWrite(m_FileName.c_str()); + r = FALSE; + lseek(m_Handle, size, SEEK_SET); + } + m_Index.WriteIndex(m_Handle, &m_fhd); // インデックスの格納 + lseek(m_Handle, 0L, SEEK_SET); + if( write( m_Handle, &m_fhd, (int)sizeof(m_fhd) ) != (int)sizeof(m_fhd) ){ + ErrorFWrite(m_FileName.c_str()); + r = FALSE; + } + } + if( close(m_Handle) ){ + if( r != FALSE ){ + ErrorFWrite(m_FileName.c_str()); + r = FALSE; + } + } +// if( !m_fhd.size ) unlink(m_FileName.c_str()); // 0件の時は消去 + m_Open = 0; + } + m_EditFlag = 0; + m_Index.ClearIndex(); + return r; +} + +void CLogFile::InitHeader(void) +{ + memset(&m_fhd, 0, sizeof(m_fhd)); + strcpy(m_fhd.id, MMLOGID); + m_fhd.size = 0L; + m_fhd.mlt = 0; +} + +int CLogFile::Open(LPCSTR pName, BOOL fNew) +{ + CWaitCursor w; + Close(); + InitHeader(); + + if( pName == NULL ) pName = m_FileName.c_str(); + int omode = O_RDWR|O_BINARY; // 初回は新規作成なしでオープン + int n = 0; + while(1){ + if( (m_Handle = open(pName, omode, S_IREAD|S_IWRITE)) > 0 ){ + if( read(m_Handle, &m_fhd, (int)sizeof(m_fhd)) == (int)sizeof(m_fhd) ){ //ja7ude 0525 + if( !strcmp(m_fhd.id, MMLOGID) ){ + if( m_Index.ReadIndex(m_Handle, &m_fhd) != TRUE ){ + m_Index.MakeIndex(m_Handle, &m_fhd); + } + m_Open = 1; + MakeName(pName); + m_Find.Clear(); + SetLastPos(); + memcpy(&m_asd, &m_sd, sizeof(m_asd)); + return TRUE; + } + else { + close(m_Handle); + ErrorMB("'%s' is not a correct format.", pName); + } + } + else if( omode & O_CREAT ){ // 新規ファイル 2回目のパスのみ + InitHeader(); + if( write(m_Handle, &m_fhd, (int)sizeof(m_fhd)) != (int)sizeof(m_fhd) ){ //ja7ude 0525 + close(m_Handle); + ErrorMB("Cannot open '%s'.", pName); + } + else { + m_Open = 1; + MakeName(pName); + m_Index.ClearIndex(); + m_Find.Clear(); + SetLastPos(); + memcpy(&m_asd, &m_sd, sizeof(m_asd)); + return TRUE; + } + } + else { // 既存のフィアル + close(m_Handle); + ErrorMB("Cannot open '%s'.", pName); + } + return FALSE; + } + // オープンエラーの場合 + if( !(omode & O_CREAT) && (errno == ENOENT) ){ // 1回目でファイルが存在しない場合 + n++; + if( n >= 2 ){ + if( fNew ){ + if( YesNoMB(MsgEng ? "Log file (%s) does not exist, create it ?" : "ログファイル(%s)が見つかりません. 新規に作成しますか ?", pName) != IDYES ) return FALSE; + } + omode |= O_CREAT; // 2回目は新規作成付きでオープン + } + else { + ::Sleep(1000); + } + } + else if( IsFile(pName) && (GetFileAttributes(pName) & FILE_ATTRIBUTE_READONLY) ){ + ErrorMB("'%s' is read-only.", pName); + return FALSE; + } + else { + ErrorMB("Cannot open '%s'.", pName); + return FALSE; + } + } +} + +void CLogFile::InitCur(void) +{ + SetLastPos(); +} + +void CLogFile::SetLastPos(void) +{ + m_CurNo = m_fhd.size; + memset(&m_sd, 0, sizeof(SDMMLOG)); + + int n = m_CurNo - 1; + if( n >= 0 ){ + SDMMLOG sd; + + GetData(&sd, n); + if( !sd.etime ){ + m_CurNo = n; + memcpy(&m_sd, &sd, sizeof(SDMMLOG)); + } + } + else { +#if 0 + if( lcid != LANG_JAPANESE ){ + m_sd.band = B_14; + m_sd.fq = 230; + } + else { + m_sd.band = B_7; + m_sd.fq = 33; + } +#else + m_sd.band = B_14; + m_sd.fq = 230; +#endif + m_sd.mode = 8; + m_sd.env = 1; + } + CopyAF(); + m_CurChg = 0; +} + +int CLogFile::GetData(SDMMLOG *sp, int n) +{ + if( !m_Open || (n >= m_fhd.size) ){ + memset(sp, 0, sizeof(SDMMLOG)); + if( !n ){ + m_sd.band = B_14; + m_sd.mode = 5; + } + return FALSE; + } + if( lseek(m_Handle, (ULONG)FHDOFF + ((ULONG)n * (ULONG)sizeof(SDMMLOG)), SEEK_SET) == -1L ){ + memset(sp, 0, sizeof(SDMMLOG)); + return FALSE; + } + if( read( m_Handle, sp, (int)sizeof(SDMMLOG) ) != (int)sizeof(SDMMLOG) ){ //ja7ude 0525 + memset(sp, 0, sizeof(SDMMLOG)); + return FALSE; + } + else { + return TRUE; + } +} + +int CLogFile::PutData(SDMMLOG *sp, int n) +{ + if( !m_Open ){ + if( m_FileName.IsEmpty() ){ + ErrorMB("ログファイルの名前が定義されていません."); + return FALSE; + } + if( Open(m_FileName.c_str(), TRUE) != TRUE ) return FALSE; + } + if( lseek(m_Handle, (ULONG)FHDOFF + ((ULONG)n * (ULONG)sizeof(SDMMLOG)), SEEK_SET) == -1L ){ + ErrorFWrite(m_FileName.c_str()); + return FALSE; + } + if( write( m_Handle, sp, (int)sizeof(SDMMLOG) ) != (int)sizeof(SDMMLOG) ){ //ja7ude 0525 + ErrorFWrite(m_FileName.c_str()); + return FALSE; + } + else { + m_EditFlag = 1; + if( m_CurNo == n ) m_CurChg = 1; + if( n >= m_fhd.size ) m_fhd.size = n + 1; + m_Index.WriteIndex(sp->call, n); + } + return TRUE; +} + +LPCSTR CLogFile::GetOptStr(int n, SDMMLOG *sp) +{ + switch(n){ + case 0: + return sp->opt1; + case 1: + return sp->opt2; + case 2: + if( !sp->ur[MLRST-MLOPT-1] && sp->ur[MLRST-MLOPT] ){ + return &sp->ur[MLRST-MLOPT]; + } + else { + return ""; + } + case 3: + if( !sp->my[MLRST-MLOPT-1] && sp->my[MLRST-MLOPT] ){ + return &sp->my[MLRST-MLOPT]; + } + else { + return ""; + } + default: + return ""; + } +} + +void CLogFile::SetOptStr(int n, SDMMLOG *sp, LPCSTR pOpt) +{ + switch(n){ + case 0: + StrCopy(sp->opt1, pOpt, MLOPT); + jstrupr(sp->opt1); + break; + case 1: + StrCopy(sp->opt2, pOpt, MLOPT); + jstrupr(sp->opt2); + break; + case 2: + if( *pOpt ){ + StrCopy(&sp->ur[MLRST-MLOPT], pOpt, MLOPT); + jstrupr(&sp->ur[MLRST-MLOPT]); + sp->ur[MLRST-MLOPT-1] = 0; + } + else if( !sp->ur[MLRST-MLOPT-1] ){ + sp->ur[MLRST-MLOPT] = 0; + } + break; + case 3: + if( *pOpt ){ + StrCopy(&sp->my[MLRST-MLOPT], pOpt, MLOPT); + jstrupr(&sp->my[MLRST-MLOPT]); + sp->my[MLRST-MLOPT-1] = 0; + } + else if( !sp->my[MLRST-MLOPT-1] ){ + sp->my[MLRST-MLOPT] = 0; + } + break; + default: + break; + } +} + +void CLogFile::SetHisRST(SDMMLOG *sp) +{ + int n, tim; + + switch(m_LogSet.m_CopyHis){ + case 0: + if( sp == NULL ){ + strcpy(m_sd.ur, "595"); + } + else { + strcpy(m_sd.ur, sp->ur); + memcpy(m_sd.ur, "595", 3); + } + break; + case 1: + if( sp == NULL ){ + strcpy(m_sd.ur, "595001"); + } + else { + if( sp->ur[0] ){ + n = atoin(&sp->ur[3], -1); + } + else { + n = 0; + } + n++; + if( n >= 10000 ){ + sprintf(m_sd.ur, "595%04u", n); + } + else { + sprintf(m_sd.ur, "595%03u", n); + } + } + break; + case 2: + if( m_sd.btime ){ + tim = m_sd.btime / 30; + if( tim >= (9 * 60) ){ + tim -= 9 * 60; + } + else { + tim += 15 * 60; + } + sprintf(m_sd.ur, "595%02u%02u", tim/60, tim%60); + } + break; + } +} + +void CLogFile::CopyAF(void) +{ + int n = m_CurNo - 1; + if( n >= 0 ){ + SDMMLOG sd; + GetData(&sd, n); + if( !m_sd.band ){ + m_sd.band = sd.band; + if( m_LogSet.m_CopyFreq ){ + m_sd.fq = sd.fq; + } + else { + m_sd.fq = 0; + } + } + if( !m_sd.env ){ + m_sd.env = sd.env; + } + if( !m_sd.pow[0] ){ + strcpy(m_sd.pow, sd.pow); + } + if( !m_sd.ur[0] ){ + SetHisRST(&sd); + } + if( m_LogSet.m_CopyREMB4 ){ + strcpy(m_sd.rem, sd.rem); + } + } + else { + if( !m_sd.band ){ + m_sd.band = B_14; + m_sd.fq = 0; + } + if( !m_sd.env ){ + m_sd.env = 1; + } + if( !m_sd.ur[0] ){ + SetHisRST(NULL); + } + } + if( !m_sd.mode ) m_sd.mode = 8; // SSTV + if( m_LogSet.m_DefMyRST ){ + if( !m_sd.my[0] ){ + strcpy(m_sd.my, "595"); + } + } +} + +static int _cmpdate(SDMMLOG *s, SDMMLOG *t) +{ + int r = YEAR(s->year) - YEAR(t->year); + if( r ) return r; + r = s->date - t->date; + if( r ) return r; + return s->btime - t->btime; +} + +void CLogFile::SortDate(int bb, int eb) +{ + int gap, i, j, em; + SDMMLOG sd1, sd2; + + CWaitCursor w; + if( bb != eb ){ + em = eb - bb; + for( gap = (em + 1)/2; gap > 0; gap /= 2 ){ + for( i = gap; i <= em; i++ ){ + for( j = i - gap; j >= 0; j -= gap ){ + GetData(&sd1, bb+j); + GetData(&sd2, bb+j+gap); + if( _cmpdate(&sd1, &sd2) <= 0 ) break; + PutData(&sd1, bb+j+gap); + PutData(&sd2, bb+j); + } + } + } + } + m_EditFlag = 1; +} + +int CLogFile::FindSameBand(void) +{ + if( !m_sd.call[0] ) return 0; + char call[MLCALL+1]; + SDMMLOG sd; + + MultProc(); + int i; + for( i = 0; i < m_Find.GetCount(); i++ ){ + m_Index.ReadIndex(call, m_Find.pFindTbl[i]); + if( !strcmp(call, m_sd.call) ){ + GetData(&sd, m_Find.pFindTbl[i]); + MultProc(); + if( !sd.etime && (i == (m_Find.GetCount()-1)) ) break; + if( (sd.band == m_sd.band)&&(sd.mode == m_sd.mode) ) return 1; + } + } + return 0; +} + +int CLogFile::FindSameDate(void) +{ + if( !m_sd.call[0] ) return 0; + char call[MLCALL+1]; + SDMMLOG sd; + + SYSTEMTIME utc; + GetUTC(&utc); + MultProc(); + int i; + for( i = 0; i < m_Find.GetCount(); i++ ){ + m_Index.ReadIndex(call, m_Find.pFindTbl[i]); + if( !strcmp(call, m_sd.call) ){ + GetData(&sd, m_Find.pFindTbl[i]); + MultProc(); + if( !sd.etime && (i == (m_Find.GetCount()-1)) ) break; + WORD btime = sd.btime; + JSTtoUTC(&sd); + int yy = sd.year + 2000; + int mm = sd.date / 100; + int dd = sd.date % 100; + if( (sd.mode == 8) && (btime != m_sd.btime) && (yy == utc.wYear) && (mm == utc.wMonth) && (dd == utc.wDay) ) return 1; + } + } + return 0; +} + +void CLogFile::FindStrSet(CLogFind *fp, LPCSTR pCall) +{ + if( !*pCall ) return; + if( fp->GetCount() >= FINDMAX ) return; + char call[MLCALL+1]; + + MultProc(); + int i; + for( i = m_fhd.size - 1; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( strstr(call, pCall)!=NULL ){ + fp->Add(i); + if( fp->GetCount() >= FINDMAX ) break; + } + } +} + +int CLogFile::FindCmpSet(CLogFind *fp, LPCSTR pCall) +{ + if( fp->GetCount() >= FINDMAX ) return 0; + char call[MLCALL+1]; + + MultProc(); + int i; + for( i = m_fhd.size - 1; i >= 0; i-- ){ + if( *pCall ){ + m_Index.ReadIndex(call, i); + if( !strcmp(call, pCall) ){ + fp->Write(i); + } + } + else { + fp->Write(i); + } + if( fp->GetCount() >= FINDMAX ) break; + } + return fp->GetCount(); +} + +int CLogFile::FindClipSet(CLogFind *fp, LPCSTR pCall) +{ + if( !*pCall ) return 0; + if( fp->GetCount() >= FINDMAX ) return 0; + char call[MLCALL+1]; + + MultProc(); + int i; + for( i = m_fhd.size - 1; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( !strcmp(ClipCall(call), pCall) ){ + fp->Add(i); + } + if( fp->GetCount() >= FINDMAX ) break; + } + return fp->GetCount(); +} + +int CLogFile::FindSet(CLogFind *fp, LPCSTR pCall) +{ + fp->SetText(pCall); + fp->Clear(); + int r = FindCmpSet(fp, pCall); + fp->m_FindCmp1Max = fp->m_FindCnt; + char clipcall[MLCALL+1]; + strcpy(clipcall, ClipCall(pCall)); + if( FindClipSet(fp, clipcall) ){ + r = 1; + } + fp->m_FindCmp2Max = fp->m_FindCnt; + FindStrSet(fp, pCall); + fp->m_FindStr1Max = fp->m_FindStr2Max = fp->m_FindCnt; + if( strcmp(pCall, clipcall) ){ + FindStrSet(fp, clipcall); + fp->m_FindStr2Max = fp->m_FindCnt; + } + return r; +} + +int CLogFile::Find(LPCSTR pCall, int b, int dir) +{ + if( !m_fhd.size ) return -1; + char call[MLCALL+1]; + + MultProc(); + int i; + if( dir ){ + for( i = b; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( strstr(call, pCall) != NULL ) return i; + } + } + else { + for( i = b; i < m_fhd.size; i++ ){ + m_Index.ReadIndex(call, i); + if( strstr(call, pCall) != NULL ) return i; + } + } + return -1; +} + +int CLogFile::IsAlready(LPCSTR pCall) +{ + if( !m_fhd.size ) return -1; + char call[MLCALL+1]; + + for( int i = m_CurNo; i >= 0; i-- ){ + m_Index.ReadIndex(call, i); + if( !strcmp(call, pCall) ) return i; + } + return -1; +} + +void CLogFile::DeleteAll(void) +{ + m_fhd.size = 0; + m_CurNo = m_fhd.size; + m_CurChg = 1; + m_EditFlag = 1; +} + +void CLogFile::DeleteLast(void) +{ + if( m_fhd.size ){ + m_fhd.size--; + } + m_CurNo = m_fhd.size; + m_CurChg = 1; + m_EditFlag = 1; +} + +void CLogFile::Delete(int top, int end) +{ + if( !m_fhd.size ) return; + + if( end >= (m_fhd.size - 1) ){ // 最後まで削除する場合 + m_fhd.size = top; + m_CurNo = m_fhd.size; + } + else { // 途中を削除する場合 + int i, j; + SDMMLOG sd; + for( i = top, j = end + 1; j < m_fhd.size; i++, j++ ){ + GetData(&sd, j); + PutData(&sd, i); + } + m_fhd.size -= end - top + 1; + m_CurNo = m_fhd.size; + } + SetLastPos(); + m_CurChg = 1; + m_EditFlag = 1; +} + +void CLogFile::Insert(int n, SDMMLOG *sp) +{ + if( n >= m_fhd.size ){ // 最終位置の場合は追加と同じ + PutData(sp, n); + m_CurNo++; + } + else { // 途中を削除する場合 + int i, j; + SDMMLOG sd; + i = m_fhd.size; + j = i - 1; + for( ; i > n; i--, j-- ){ + GetData(&sd, j); + PutData(&sd, i); + } + PutData(sp, n); + m_CurNo++; + m_CurChg = 0; + } + m_EditFlag = 1; +} + +LPCSTR CLogFile::GetDateString(SDMMLOG *sp, int sw) +{ + static char bf[12]; + + if( sp->date ){ + switch(sw){ + case 1: // yyyy-mm-dd + sprintf(bf, "%04u.%02u.%02u", YEAR(sp->year), sp->date/100, sp->date%100); + break; + case 2: // dd-mm-yy + sprintf(bf, "%02u.%02u.%02u", sp->date%100, sp->date/100, sp->year); + break; + case 3: // dd-mm-yyyy + sprintf(bf, "%02u.%02u.%04u", sp->date%100, sp->date/100, YEAR(sp->year)); + break; + case 4: // mm-dd-yy + sprintf(bf, "%02u.%02u.%02u", sp->date/100, sp->date%100, sp->year); + break; + case 5: // mm-dd-yyyy + sprintf(bf, "%02u.%02u.%04u", sp->date/100, sp->date%100, YEAR(sp->year)); + break; + default: // yy-mm-dd + sprintf(bf, "%02u.%02u.%02u", sp->year, sp->date/100, sp->date%100); + break; + } + } + else { + bf[0] = 0; + } + return bf; +} + +LPCSTR CLogFile::GetTimeString(WORD d) +{ + static char bf[8]; + + if( d ){ + d = WORD(d / 30); + sprintf(bf, "%02u%02u", d / 60, d % 60); + } + else { + bf[0] = 0; + } + return bf; +} + +LPCSTR CLogFile::GetModeString(BYTE m) +{ + if( m < MODEMAX ){ + return _mode[m]; + } + else { + m -= BYTE(MODEMAX); + StrCopy(m_modebuf, m_fhd.mode[m], 6); + return m_modebuf; + } +} + +void CLogFile::SetMode(SDMMLOG *sp, LPCSTR s) +{ + if( !*s ){ + sp->mode = 0; + return; + } + + int n; + const char **t; + char bf[7]; + StrCopy(bf, s, 6); + jstrupr(bf); + s = bf; + int len = strlen(s); + for( n = 0, t = _mode; *t != NULL; t++, n++ ){ + if( !strcmp(*t, s) ){ + sp->mode = BYTE(n); + return; + } + } + for( n = 0; (n < UMODEMAX) && m_fhd.mode[n][0] ; n++ ){ + char vbf[7]; + StrCopy(vbf, m_fhd.mode[n], 6); + if( !strcmp(vbf, s) ){ + sp->mode = BYTE(n + MODEMAX); + return; + } + } + if( n < UMODEMAX ){ + if( len < 6 ){ + strcpy(m_fhd.mode[n], s); + } + else { + memcpy(m_fhd.mode[n], s, 6); + } + sp->mode = BYTE(n + MODEMAX); + } + else { + sp->mode = 0; + } +} + +LPCSTR CLogFile::GetFreqString(BYTE b, short fq) +{ + static char bf[12]; + int d; + + if( fq < 0 ){ + sprintf( bf, "%s/%s", _band[b], _band[-fq]); + return(bf); + } + else if( fq ){ + switch(b){ + case 0: + return ""; + case B_19: /* 1.9 */ + if( fq == 800 ){ + strcpy(bf, "1.8"); + } + else { + sprintf( bf, "1.%03u", fq ); + } + break; + case B_35: /* 3.5 */ + sprintf( bf, "3.%03u", fq ); + break; + case B_38: /* 3.8 */ + sprintf( bf, "3.%03u", fq ); + break; + case B_1200: + d = 1240 + (fq / 100); + sprintf( bf, "%u.%02u", d, fq % 100 ); + break; + case B_2400: + d = 2350 + (fq / 100); + sprintf( bf, "%u.%02u", d, fq % 100 ); + break; + case B_220: + d = 220 + (fq / 1000); + sprintf( bf, "%u.%03u", d, fq % 1000 ); + break; + default: + if( b <= B_24 ){ + sprintf( bf, "%s.%03u", _band[b], fq ); + } + else if( b <= B_430 ){ + d = atoin(_band[b], -1) + (fq / 1000); + sprintf( bf, "%u.%03u", d, fq % 1000 ); + } + else { + return(_band[b]); + } + break; + } + return(bf); + } + else { + return(_band[b]); + } +} + +/*#$% +=============================================================== + バンド番号を得る +--------------------------------------------------------------- + p : 文字列のポインタ +--------------------------------------------------------------- +--------------------------------------------------------------- +=============================================================== +*/ +static BYTE _bandno_(LPCSTR p) +{ + char n; + const char **t; + + for( n = 0, t = _band; *t != NULL; t++, n++ ){ + if( !strcmp(*t, p) ) return(n); + } + return(0); +} + +/*#$% +=============================================================== + バンド番号を得る +--------------------------------------------------------------- + p : 文字列のポインタ +--------------------------------------------------------------- +--------------------------------------------------------------- +=============================================================== +*/ +void CLogFile::SetFreq(SDMMLOG *sp, LPCSTR p) +{ + BYTE n; + char ub[16], db[16]; + int ud, d; + + sp->fq = 0; + if( strchr(p, '/' )!=NULL ){ + p = _strdmcpy(ub, p, '/'); + if( (n = _bandno_(ub))!= 0 ){ + if( (sp->fq = _bandno_(p))!= 0 ){ + sp->fq = SHORT(-sp->fq); + sp->band = n; + return; + } + } + sp->band = 0; + return; + } + if( (n = _bandno_(p))!= 0 ){ + sp->band = n; + return; + } + if( strchr(p, '.')!=NULL ){ + p = _strdmcpy(ub, p, '.'); + memset(db, 0, 4); + strcpy(db, p); + db[3] = 0; + for( n = 0; n < 3; n++ ){ + if( !db[n] ) db[n] = '0'; + } + ud = atoin(ub, -1); + d = atoin(db, -1); + } + else { + ud = atoin(p, -1); + d = 0; + } + if( ud == 1 ){ + sp->fq = SHORT(d); + sp->band = B_19; + } + else if( ud == 3 ){ + sp->fq = SHORT(d); + if( d >= 700 ){ + n = B_38; + } + else { + n = B_35; + } + sp->band = n; + } + else if( (ud >= 7) && (ud <= 24) ){ + sp->fq = SHORT(d); + if( (n = _bandno_(ub))!= 0 ){ + sp->band = n; + return; + } + sp->fq = 0; + sp->band = 0; + } + else if( (ud >= 28)&&(ud <= 29) ){ + sp->fq = SHORT(((ud - 28) * 1000) + d); + sp->band = B_28; + } + else if( (ud >= 50)&&(ud <= 54) ){ + sp->fq = SHORT(((ud - 50) * 1000) + d); + sp->band = B_50; + } + else if( (ud >= 144) && (ud <= 147) ){ + sp->fq = SHORT(((ud - 144) * 1000) + d); + sp->band = B_144; + } + else if( (ud >= 430) && (ud <= 440) ){ + sp->fq = SHORT(((ud - 430) * 1000) + d); + sp->band = B_430; + } + else if( (ud >= 220) && (ud <= 225) ){ + sp->fq = SHORT(((ud - 220) * 1000) + d); + sp->band = B_220; + } + else if( (ud >= 1240) && (ud <= 1300) ){ + sp->fq = SHORT(((ud - 1240) * 100) + (d/10)); + sp->band = B_1200; + } + else if( (ud >= 2350) && (ud <= 2450) ){ + sp->fq = SHORT(((ud - 2350) * 100) + (d/10)); + sp->band = B_2400; + } + else { + sp->band = 0; + } +} + +int CLogFile::ReadAscii(SDMMLOG *sp, LPSTR p) +{ + LPSTR t; + int y, m, d; + + memset(sp, 0, sizeof(SDMMLOG)); + p = StrDlm(t, p); /* DATE */ + if( sscanf(t, "%u.%u.%u", &y, &m, &d )!=3 ) return FALSE; + sp->year = BYTE(y % 100); + sp->date = WORD((m * 100) + d); + p = StrDlm(t, p); /* BGN */ + if( sscanf(t, "%u.%u", &d, &y) != 2 ){ + d = atoin(t, -1); + y = 0; + } + m = d / 100; + d = d % 100; + y /= 2; + sp->btime = WORD((((m * 60) + d) * 30) + y); + p = StrDlm(t, p); /* CALL */ + StrCopy(sp->call, t, MLCALL); + p = StrDlm(t, p); /* UR */ + StrCopy(sp->ur, t, MLRST); + p = StrDlm(t, p); /* MY */ + StrCopy(sp->my, t, MLRST); + p = StrDlm(t, p); /* BAND */ + SetFreq(sp, t); + p = StrDlm(t, p); /* MODE */ + SetMode(sp, t); + p = StrDlm(t, p); /* POW */ + StrCopy(sp->pow, t, MLPOW); + p = StrDlm(t, p); /* NAME */ + StrCopy(sp->name, t, MLNAME); + p = StrDlm(t, p); /* QTH */ + StrCopy(sp->qth, t, MLQTH); + p = StrDlm(t, p); /* REM */ + StrCopy(sp->rem, t, MLREM); + p = StrDlm(t, p); /* QSL */ + StrCopy(sp->qsl, t, MLQSL); + p = StrDlm(t, p); /* ETIME*/ + d = atoin(t, -1); + m = d / 100; + d = d % 100; + sp->etime = WORD(((m * 60) + d) * 30); + p = StrDlm(t, p); /* S */ + sp->send = *t; + p = StrDlm(t, p); /* R */ + sp->recv = *t; + p = StrDlm(t, p); /* M */ + sp->cq = *t; + p = StrDlm(t, p); /* ENV */ + sp->env = WORD(atoin(t, -1)); + p = StrDlm(t, p); /* OPT1 */ + StrCopy(sp->opt1, t, MLOPT); + p = StrDlm(t, p); /* OPT2 */ + StrCopy(sp->opt2, t, MLOPT); + p = StrDlm(t, p); /* USR1 */ + if( *t ) SetOptStr(2, sp, t); + StrDlm(t, p); /* USR2 */ + if( *t ) SetOptStr(3, sp, t); + return TRUE; +} + +void JSTtoUTC(int &Year, int &Mon, int &Day, int &Hour) +{ + + Hour -= 9; + if( Hour < 0 ){ + Hour += 24; + Day--; + if( Day < 1 ){ + Mon--; + if( Mon < 1 ){ + Mon = 12; + if( Year ){ + Year--; + } + else { + Year = 99; + } + } + if( Year % 4 ){ + Day = MONN[Mon]; + } + else { + Day = MONU[Mon]; + } + } + } +} + +void JSTtoUTC(SDMMLOG *sp) +{ + int Year = sp->year; + int Mon = sp->date / 100; + int Day = sp->date % 100; + int Hour = sp->btime / (60*30); + if( sp->date || sp->btime ){ + JSTtoUTC(Year, Mon, Day, Hour); + sp->year = BYTE(Year); + sp->date = WORD(Mon * 100 + Day); + sp->btime = WORD((sp->btime % 1800) + (Hour * 1800)); + } + if( sp->etime ){ + // JST to UTC + if( sp->etime >= (9*60*30) ){ + sp->etime -= WORD(9 * 60 * 30); + } + else { + sp->etime += WORD(15 * 60 * 30); + } + if( !sp->etime ) sp->etime++; + } +} + +void UTCtoJST(int &Year, int &Mon, int &Day, int &Hour) +{ + LPCSTR mt; + + Hour += 9; + if( Hour >= 24 ){ + Hour -= 24; + Day++; + if( Year % 4 ){ + mt = MONN; + } + else { + mt = MONU; + } + if( Day > mt[Mon] ){ + Day = 1; + Mon++; + if( Mon > 12 ){ + Mon = 1; + Year++; + if( Year >= 100 ) Year = 0; + } + } + } +} + +void UTCtoJST(SDMMLOG *sp) +{ + int Year = sp->year; + int Mon = sp->date / 100; + int Day = sp->date % 100; + int Hour = sp->btime / (60*30); + if( sp->date || sp->btime ){ + UTCtoJST(Year, Mon, Day, Hour); + sp->year = BYTE(Year); + sp->date = WORD(Mon * 100 + Day); + sp->btime = WORD((sp->btime % 1800) + (Hour * 1800)); + } + if( sp->etime ){ + // UTC to JST + if( sp->etime >= (15*60*30) ){ + sp->etime -= WORD(15 * 60 * 30); + } + else { + sp->etime += WORD(9 * 60 * 30); + } + if( !sp->etime ) sp->etime++; + } +} + +void UTCtoJST(SYSTEMTIME *tp) +{ + int y = tp->wYear; + int m = tp->wMonth; + int d = tp->wDay; + int h = tp->wHour; + UTCtoJST(y, m, d, h); + tp->wYear = WORD(y); + tp->wMonth = WORD(m); + tp->wDay = WORD(d); + tp->wHour = WORD(h); +} + +void mBandToBand(SDMMLOG *sp, LPCSTR p) +{ + int m; + + sp->fq = 0; + if( !strcmpi(p, "SAT") ){ + sp->band = 0; + } + else if( sscanf(p, "%u", &m) == 1 ){ + switch(m){ + case 2: + sp->band = B_144; + break; + case 6: + sp->band = B_50; + break; + case 10: + sp->band = B_28; + break; + case 12: + sp->band = B_24; + break; + case 15: + sp->band = B_21; + break; + case 17: + sp->band = B_18; + break; + case 20: + sp->band = B_14; + break; + case 30: + sp->band = B_10; + break; + case 40: + sp->band = B_7; + break; + case 75: + sp->band = B_38; + break; + case 80: + sp->band = B_35; + break; + case 160: + sp->band = B_19; + sp->fq = 800; + break; + } + } +} + +LPCSTR FreqTomBand(SDMMLOG *sp) +{ + return _mBand[sp->band]; +} + + diff --git a/LogFile.h b/LogFile.h new file mode 100644 index 0000000..3e6e99b --- /dev/null +++ b/LogFile.h @@ -0,0 +1,280 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef LogFileH +#define LogFileH + +#include "ComLib.h" +//--------------------------------------------------------------------------- +#define MMLOGID "MMLOG DATA Ver1.00\032" + +typedef struct { // Logの動作オプション + char m_TimeZone; // 表示用タイムゾーン + + int m_UpperName; // 大文字への変換 + int m_UpperQTH; // 大文字への変換 + int m_UpperREM; // 大文字への変換 + int m_UpperQSL; // 大文字への変換 + + int m_DefMyRST; // 0-OFF, 1-ON + + int m_CopyFreq; // 0-Band, 1-Freq + int m_CopyHis; // 0-599, 1-599001, 2-599UTC + int m_CopyName; // 0-OFF, 1-ON + int m_CopyQTH; // 0-OFF, 1-ON + int m_CopyREM; // 0-OFF, 1-ON + int m_CopyQSL; // 0-OFF, 1-ON + int m_CopyREMB4; // 0-OFF, 1-ON + + int m_AutoSave; // 自動セーブ + + int m_QSOMacroFlag; // 0-OFF, 1-ON + int m_CheckBand; // 同一バンドでの重複をチェック + int m_QSOMacro[5]; // 0-Run 1st, 1-Run 2nd, 2-Run Dupe, 3-S&P 1st, 4-S&P 2nd + WORD m_QSOMacroKey[5]; + AnsiString m_QSOMacroStr[5]; + + AnsiString m_THRTTY; + AnsiString m_THSSTV; + int m_THTZ; + int m_ClipRSTADIF; + int m_DateType; + + int m_FSKNR; // コンテストNRをFSKIDに含める + int m_Backup; // バックアップ作成 + + BYTE m_Hamlog5Len[17]; +}LOGSET; + +#define MLCALL 16 /* コールサインの長さ */ +#define MLRST 20 /* RSTナンバの長さ */ +#define MLREM 56 /* 記事の長さ */ +#define MLNAME 16 /* 名前の長さ */ +#define MLQTH 28 /* QTHの長さ */ +#define MLQSL 54 /* QSLの長さ */ +#define MLPOW 4 /* 電力 */ +#define MLOPT 8 /* オプション */ + +#define MODEMAX 48 + +#define YEAR(c) (((c)<50)?(2000+(c)):(1900+(c))) + +#pragma option -a- // パックの指示 +typedef struct { /* MMLOGデータ形式 */ + BYTE year; /* 年 */ + WORD date; /* 日付 */ + WORD btime; /* 開始時刻 */ + WORD etime; /* 終了時刻 */ + char call[MLCALL+1]; /* コールサイン */ + char ur[MLRST+1]; /* T リポート */ + char my[MLRST+1]; /* R リポート */ + BYTE band; /* バンド */ + SHORT fq; /* 周波数 */ + BYTE mode; /* モード */ + char pow[MLPOW+1]; /* 電力 */ + char name[MLNAME+1]; /* 名前 */ + char qth[MLQTH+1]; /* QTH */ + char qsl[MLQSL+1]; /* QSL */ + char send; /* QSL 送信 */ + char recv; /* QSL 受信 */ + char cq; /* cq/call */ + WORD env; /* 自局環境 */ + char rem[MLREM+1]; /* 記事 */ + char opt1[MLOPT+1]; /* オプション */ + char opt2[MLOPT+1]; /* オプション2 */ +}SDMMLOG; + +#define FHDOFF 256 /* 先頭のヘッダのオフセット */ +#define UMODEMAX 32 +typedef struct { + char id[20]; /* ファイルバージョン */ + char dmy[4]; /* ダミー領域 */ + USHORT mlt; /* マルチ情報のサイズ */ + char td; /* 時差コード */ + char hash; /* ハッシュデータ格納フラグ */ + long size; /* データサイズ */ + char master; /* マスターファイルフラグ */ + char dm2[15]; /* ダミー2 */ + char mode[UMODEMAX][6]; /* ユーザ定義モード */ +}FHD; +#pragma option -a. // パック解除の指示 + +class CIndex +{ +private: + int m_IndexMax; // 確保中のインデックスの数 + int m_IndexCnt; // 現在のインデックスの数 + LPSTR pIndex; // インデックス領域のポインタ(16バイトインデックス) + BYTE *pMult; // マルチ情報のポインタ +public: + CIndex(); + ~CIndex(); + void AllocIndex(int n); + void ClearIndex(void); + void WriteIndex(LPCSTR pCall, int n); + void ReadIndex(LPSTR pCall, int n); + LPSTR PointIndex(int n); + void AddBlock(LPCSTR p, int len); + int ReadIndex(int handle, FHD *hp); + void MakeIndex(int handle, FHD *hp); + int WriteIndex(int handle, FHD *hp); + + +}; + +#define FINDMAX 32768 +class CLogFind +{ +public: + int m_FindCnt; + int m_FindCmp1Max; + int m_FindCmp2Max; + int m_FindStr1Max; + int m_FindStr2Max; + + int *pFindTbl; + AnsiString m_FindStr; +public: + CLogFind(); + ~CLogFind(); + inline int GetCount(void){return m_FindCnt;}; + inline void Clear(void){ + m_FindCnt = m_FindCmp1Max = m_FindCmp2Max = m_FindStr1Max = m_FindStr2Max = 0; + }; + int Add(int n); + void Ins(int n); + + inline void Write(int n){ + pFindTbl[m_FindCnt] = n; + m_FindCnt++; + }; + inline void SetText(LPCSTR p){ + if( p != m_FindStr.c_str() ){ + m_FindStr = p; + } + }; + inline LPCSTR GetText(void){ + return m_FindStr.c_str(); + }; + inline void ClearText(void){ + m_FindStr = ""; + }; +}; + +class CLogFile +{ +private: + int m_Open; // オープンフラグ + int m_EditFlag; // 編集フラグ + int m_Handle; // ファイルハンドル + CIndex m_Index; // 現在オープン中のインデックス + FHD m_fhd; // 現在オープン中のファイルヘッダ + AnsiString m_Name; // ログファイルの名前 + char m_modebuf[8]; +public: + AnsiString m_FileName; // ログファイルの名前(フルパス) + + int m_CurNo; + int m_CurChg; + SDMMLOG m_sd; + SDMMLOG m_bak; + SDMMLOG m_asd; + + CLogFind m_Find; // カレント検索データ + LOGSET m_LogSet; +private: + void SetHisRST(SDMMLOG *sp); + void InitHeader(void); + +public: + CLogFile(); + ~CLogFile(); + + void DoBackup(void); + + int Open(LPCSTR pName, BOOL fNew); + int Close(void); + + void ReadIniFile(LPCSTR pKey, TMemIniFile *pIniFile); + void WriteIniFile(LPCSTR pKey, TMemIniFile *pIniFile); + + void MakeIndex(void); + + inline IsEdit(void){return m_EditFlag;}; + void MakePathName(LPCSTR pName); + void MakeName(LPCSTR pName); + inline LPCSTR GetName(void){return m_Name.c_str();}; + + inline int GetCount(void){return m_fhd.size;}; + inline int IsOpen(void){return m_Open;}; + int GetData(SDMMLOG *sp, int n); + int PutData(SDMMLOG *sp, int n); + + LPCSTR GetDateString(SDMMLOG *sp, int sw); + inline LPCSTR GetDateString(SDMMLOG *sp){ return GetDateString(sp, m_LogSet.m_DateType); }; + LPCSTR GetTimeString(WORD d); + + + LPCSTR GetModeString(BYTE m); + void SetMode(SDMMLOG *sp, LPCSTR s); + + LPCSTR GetFreqString(BYTE b, short fq); + void SetFreq(SDMMLOG *sp, LPCSTR p); + LPCSTR GetOptStr(int n, SDMMLOG *sp); + void SetOptStr(int n, SDMMLOG *sp, LPCSTR pOpt); + + void CopyAF(void); + + void SortDate(int bb, int eb); + int FindSameBand(void); + int FindSameDate(void); + + void FindStrSet(CLogFind *fp, LPCSTR pCall); + int FindCmpSet(CLogFind *fp, LPCSTR pCall); + int FindClipSet(CLogFind *fp, LPCSTR pCall); + int FindSet(CLogFind *fp, LPCSTR pCall); + int Find(LPCSTR pCall, int b, int dir); + int IsAlready(LPCSTR pCall); + void DeleteAll(void); + void DeleteLast(void); + void Delete(int top, int end); + void Insert(int n, SDMMLOG *sp); + + void InitCur(void); + void SetLastPos(void); + + int ReadAscii(SDMMLOG *sp, LPSTR p); + +}; + +void JSTtoUTC(int &Year, int &Mon, int &Day, int &Hour); +void JSTtoUTC(SDMMLOG *sp); +void UTCtoJST(int &Year, int &Mon, int &Day, int &Hour); +void UTCtoJST(SDMMLOG *sp); +void UTCtoJST(SYSTEMTIME *tp); +void mBandToBand(SDMMLOG *sp, LPCSTR p); +LPCSTR FreqTomBand(SDMMLOG *sp); +int GetLMode(BYTE m); + +extern CLogFile Log; +extern const char MONN[]; +extern const char MONU[]; +#endif + diff --git a/LogList.cpp b/LogList.cpp new file mode 100644 index 0000000..0848984 --- /dev/null +++ b/LogList.cpp @@ -0,0 +1,1143 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "LogList.h" +#include "QsoDlg.h" +#include "TextEdit.h" +#include "LogConv.h" +#include "ConvDef.h" +#include "LogSet.h" +#include "country.h" +#include "Main.h" +#include "Hamlog5.h" +#include "TH5Len.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TLogListDlg *LogListDlg; +//--------------------------------------------------------------------- +__fastcall TLogListDlg::TLogListDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + Grid->Font->Name = ((TForm *)AOwner)->Font->Name; + Grid->Font->Charset = ((TForm *)AOwner)->Font->Charset; + KFile->Caption = "File(&F)"; + KEdit->Caption = "Edit(&E)"; + KFind->Caption = "Find(&S)"; + KOpt->Caption = "Option(&O)"; + KHelp->Caption = "Help(&H)"; + + KOpen->Caption = "Open LogData File(&O)..."; + KFlush->Caption = "Save data now(&M)"; + KReIndex->Caption = "Make Index"; + KMTextRead->Caption = "Load MMLOG TextFile(&R)..."; + KMTextWrite->Caption = "Save selected range to MMLOG TextFile(&W)..."; + KImport->Caption = "Import"; + KImportText->Caption = "Text File..."; + KImportLog200->Caption = "Log200 File..."; + KImportHamlog->Caption = "Hamlog File..."; + KImportADIF->Caption = "ADIF File..."; + KExport->Caption = "Export selected range"; + KExportText->Caption = "Text File..."; + KExportADIF->Caption = "ADIF File..."; + KExportLog200->Caption = "Log200 File..."; + KExportHamlog->Caption = "Hamlog File..."; + KExportCabrillo->Caption = "Cabrillo file..."; + KExit->Caption = "Return to MMSSTV(&X)"; + + KDelCur->Caption = "Cut"; + KInsCur->Caption = "Insert"; + KSelAll->Caption = "Select All"; + KDelSel->Caption = "Delete selected range"; + KSortDate->Caption = "Sort(Date/Time)"; + + KTop->Caption = "Move Top"; + KBottom->Caption = "Move Last"; + KFindTop->Caption = "Search forward..."; + KFindBottom->Caption = "Search backward..."; + KFindConT->Caption = "Search forward again"; + KFindConB->Caption = "Search backward again"; + + KLogOpt->Caption = "Setup Logging..."; + } + if( !JanHelp.IsEmpty() ) KHlpLog->Caption = "MMSSTV Log"; + + int CX = ::GetSystemMetrics(SM_CXFULLSCREEN); + int CY = ::GetSystemMetrics(SM_CYFULLSCREEN); + if( (CX < Width)||(CY < Height) ){ + Top = 0; + Left = 0; + Width = CX; + Height = CY; + } + m_DateWidth = Grid->ColWidths[0]; + FormCenter(this, CX, CY); + if( Owner != NULL ){ + WindowState = ((TForm *)Owner)->WindowState; + } + SetTimeZone(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::SetTimeZone(void) +{ + switch(Log.m_LogSet.m_TimeZone){ + case 'I': + if( lcid == LANG_KOREAN ){ + m_TimeZone = "KST"; + } + else { + m_TimeZone = "JST"; + } + break; + default: + m_TimeZone = "UTC"; + break; + } + if(Log.m_LogSet.m_DateType & 1){ + Grid->ColWidths[0] = (m_DateWidth * 10) / 8; + } + else { + Grid->ColWidths[0] = m_DateWidth; + } +} +//--------------------------------------------------------------------------- +// アイドル処理 +void __fastcall TLogListDlg::OnIdle(TObject *Sender, bool &Done) +{ + UpdateMenu(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::UpdateLogCount(int sw) +{ + Grid->RowCount = Log.GetCount() + 2; + + if( sw ){ + Grid->Row = Log.GetCount() + 1; + AdjustTopRow(); + char bf[256]; + if( Log.IsOpen() ){ + sprintf(bf, MsgEng ? "%s - [%u QSO data(s)]" : "%s - [%u件のデータがあります]", Log.m_FileName.c_str(), Log.GetCount()); + } + else { + sprintf(bf, "%s is not opened.", Log.m_FileName.c_str()); + } + Caption = bf; + } + Grid->Col = 0; + Grid->Invalidate(); +} + +void __fastcall TLogListDlg::AdjustTopRow(void) +{ + int GridLine = Grid->GridHeight/Grid->RowHeights[1] - 1; + int Top = Grid->Row - GridLine + 1; + if( Top < 1 ) Top = 1; + Grid->TopRow = Top; + Grid->Invalidate(); +} + +void __fastcall TLogListDlg::Execute(void) +{ + if( !Log.IsOpen() ){ + Log.Open(NULL, TRUE); + } + Application->OnIdle = OnIdle; + UpdateLogCount(1); + ShowModal(); + Application->OnIdle = NULL; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::GridDrawCell(TObject *Sender, int Col, + int Row, TRect &Rect, TGridDrawState State) +{ + + char bf[256]; + SDMMLOG sd; + + Grid->Canvas->FillRect(Rect); + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + + if( Row ){ + Row--; + bf[0] = 0; + if( Row < Log.GetCount() ){ + Log.GetData(&sd, Row); + } + else { + memset(&sd, 0, sizeof(SDMMLOG)); + } + if( Log.m_LogSet.m_TimeZone != 'I' ){ + JSTtoUTC(&sd); + } + switch(Col){ + case 0: // Date + MultProc(); + strcpy(bf, Log.GetDateString(&sd)); + break; + case 1: // Time + strcpy(bf, Log.GetTimeString(sd.btime)); + break; + case 2: // Call + strcpy(bf, sd.call); + break; + case 3: // M + bf[0] = sd.cq; + bf[1] = 0; + break; + case 4: // HisRST + strcpy(bf, sd.ur); + break; + case 5: // MyRST + strcpy(bf, sd.my); + break; + case 6: // Band + strcpy(bf, Log.GetFreqString(sd.band, sd.fq)); + break; + case 7: // Mode + strcpy(bf, Log.GetModeString(sd.mode)); + break; + case 8: // Pow + strcpy(bf, sd.pow); + break; + case 9: // Name + strcpy(bf, sd.name); + break; + case 10: // QTH + strcpy(bf, sd.qth); + break; + case 11: // S + bf[0] = sd.send; + bf[1] = 0; + break; + case 12: // R + bf[0] = sd.recv; + bf[1] = 0; + break; + case 13: // REM + strcpy(bf, sd.rem); + break; + case 14: // QSL + strcpy(bf, sd.qsl); + break; + case 15: // etime; + strcpy(bf, Log.GetTimeString(sd.etime)); + break; + case 16: // Env + if( sd.env ) sprintf(bf, "%u", sd.env); + break; + case 17: // Opt1 + strcpy(bf, sd.opt1); + break; + case 18: // Opt2 + strcpy(bf, sd.opt2); + break; + case 19: // Usr1 + strcpy(bf, Log.GetOptStr(2, &sd)); + break; + case 20: // Usr2 + strcpy(bf, Log.GetOptStr(3, &sd)); + break; + } + Grid->Canvas->TextRect(Rect, X, Y, bf); + } + else { // タイトル + LPCSTR _tt[]={ + "Date","JST","Call","M", "His","My","Band","Mode","Pow","Name","QTH","S","R", + "Note","QSL", "End", "Env", "Opt1", "Opt2", "Usr1", "Usr2", + }; + if( Col == 1 ){ + Grid->Canvas->TextRect(Rect, X, Y, m_TimeZone.c_str()); + } + else { + Grid->Canvas->TextRect(Rect, X, Y, _tt[Col]); + } + } +} +//--------------------------------------------------------------------------- +// リターンキーの処理 +void __fastcall TLogListDlg::GridKeyPress(TObject *Sender, char &Key) +{ + if( Key == 0x0d ){ + GridDblClick(NULL); + Key = 0; + } +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::UpdateMenu(void) +{ + int f = Log.IsOpen(); + KFlush->Enabled = f && Log.IsEdit(); + KDelCur->Enabled = f && (Grid->Row <= Log.GetCount()) && (Grid->Row >= 1); + KInsCur->Enabled = f && (Grid->Row <= Log.GetCount()) && (Grid->Row >= 1); + KDelSel->Enabled = f && (Grid->Selection.Top < Grid->Selection.Bottom); + KTop->Enabled = f && Log.GetCount(); + KBottom->Enabled = f && Log.GetCount(); + KFindTop->Enabled = f && Log.GetCount(); + KFindBottom->Enabled = f && Log.GetCount(); + KFindConT->Enabled = f && Log.GetCount(); + KFindConB->Enabled = f && Log.GetCount(); + KSortDate->Enabled = f && Log.GetCount() && (Grid->Selection.Top < Grid->Selection.Bottom); + KSelAll->Enabled = f && Log.GetCount(); + KMTextRead->Enabled = f; + KMTextWrite->Enabled = f && Log.GetCount() && (Grid->Selection.Top <= Log.GetCount()); + KExport->Enabled = f && Log.GetCount() && (Grid->Selection.Top <= Log.GetCount()); + KReIndex->Enabled = f; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KOpenClick(TObject *Sender) +{ +#if 1 + Mmsstv->KLogOpenClick(NULL); + UpdateLogCount(1); +#else + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options >> ofFileMustExist; + if(MsgEng){ + OpenDialog->Title = "Open LogData File"; + OpenDialog->Filter = "MMLOG Data File(*.mdt)|*.mdt|"; + } + else { + OpenDialog->Title = "ログファイルのオープン"; + OpenDialog->Filter = "MMLOG Data File(*.mdt)|*.mdt|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "mdt"; + OpenDialog->InitialDir = MMLogDir; + NormalWindow(this); + if( OpenDialog->Execute() == TRUE ){ + Log.Close(); + Log.MakeName(OpenDialog->FileName.c_str()); + Log.Open(NULL, TRUE); + UpdateLogCount(1); + } + TopWindow(this); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KFlushClick(TObject *Sender) +{ + Log.Close(); + Log.Open(NULL, TRUE); + UpdateLogCount(0); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KDelCurClick(TObject *Sender) +{ + int n = Grid->Row - 1; + SDMMLOG sd; + Log.GetData(&sd, n); + memcpy(&Log.m_bak, &sd, sizeof(SDMMLOG)); + Log.Delete(n, n); + UpdateLogCount(0); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KInsCurClick(TObject *Sender) +{ + int n = Grid->Row - 1; + Log.Insert(n, &Log.m_bak); + UpdateLogCount(0); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KDelSelClick(TObject *Sender) +{ + if( YesNoMB( MsgEng ? "Delete Selection.(will not be able to restore) Are you sure?":"現在選択されている範囲を削除します.削除した内容は復元できません\r\n\r\nよろしおまっか?") == IDYES ){ + int top = Grid->Selection.Top - 1; + int end = Grid->Selection.Bottom - 1; + Log.Delete(top, end); + UpdateLogCount(0); + Grid->Row = top + 1; + } +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KExitClick(TObject *Sender) +{ + ModalResult = mrOk; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KFindTopClick(TObject *Sender) +{ + if( m_FindCall.IsEmpty() || (Sender == KFindTop) ){ + AnsiString as = m_FindCall; + if( InputMB(NULL, MsgEng ? "Callsign":"検索するコールサイン", as) == FALSE ) return; + jstrupr(as.c_str()); + m_FindCall = as; + } + int n = Log.Find(m_FindCall.c_str(), Grid->Row, 0); + if( n >= 0 ){ + Grid->Row = n + 1; + } + else { + WarningMB(MsgEng ? "'%s' was not found" : "'%s'は見つかりませんでした.", m_FindCall.c_str()); + } +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KFindBottomClick(TObject *Sender) +{ + if( m_FindCall.IsEmpty() || (Sender == KFindBottom) ){ + AnsiString as = m_FindCall; + if( InputMB(NULL, MsgEng ? "Callsign":"検索するコールサイン", as) == FALSE ) return; + jstrupr(as.c_str()); + m_FindCall = as; + } + int n = Log.Find(m_FindCall.c_str(), Grid->Row - 2, 1); + if( n >= 0 ){ + Grid->Row = n + 1; + } + else { + WarningMB(MsgEng ? "'%s' was not found" : "'%s'は見つかりませんでした.", m_FindCall.c_str()); + } +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KTopClick(TObject *Sender) +{ + Grid->Row = 1; + Grid->TopRow = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KBottomClick(TObject *Sender) +{ + Grid->Row = Log.GetCount() + 1; + AdjustTopRow(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KSortDateClick(TObject *Sender) +{ + if( YesNoMB( MsgEng ? "It may take substantial time. Are you sure?":"この処理はメチャンコ時間がかかるかも知れません.\r\n\r\nよろしおまっか?" ) == IDYES ){ + int top = Grid->Selection.Top - 1; + int end = Grid->Selection.Bottom - 1; + if( top == end ){ + top = 0; + end = Log.GetCount() - 1; + } + Log.SortDate(top, end); + Grid->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::GridDblClick(TObject *Sender) +{ + int n = Grid->Row - 1; + if( (n >= 0) && (n < Log.GetCount()) ){ + TQSODlgBox *pBox = new TQSODlgBox(this); + SDMMLOG sd; + Log.GetData(&sd, n); + CLogFind Find; + + Log.FindSet(&Find, sd.call); + + pBox->Execute(&Find, &sd, n); + Grid->Invalidate(); + delete pBox; + } +} +//--------------------------------------------------------------------------- +// MMLOGテキストファイルのロード +void __fastcall TLogListDlg::KMTextReadClick(TObject *Sender) +{ + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options << ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load MMLOG Text file"; + OpenDialog->Filter = "MMLOG Text Files(*.log)|*.log|"; + } + else { + OpenDialog->Title = "MMLOGテキストファイルのロード"; + OpenDialog->Filter = "MMLOGテキストファイル(*.log)|*.log|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "log"; + OpenDialog->InitialDir = MMLogDir; + NormalWindow(this); + if( OpenDialog->Execute() == TRUE ){ + LoadMmlogText(AnsiString(OpenDialog->FileName).c_str()); //JA7UDE 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KMTextWriteClick(TObject *Sender) +{ + SaveDialog->Options << ofOverwritePrompt; + if( MsgEng ){ + SaveDialog->Title = "Save MMLOG Text File"; + SaveDialog->Filter = "MMLOG Text Files(*.log)|*.log|"; + } + else { + SaveDialog->Title = "MMLOGテキストファイルの作成"; + SaveDialog->Filter = "MMLOGテキストファイル(*.log)|*.log|"; + } + char bf[256]; + strcpy(bf, Log.GetName()); + SetEXT(bf, ".log"); + SaveDialog->FileName = bf; + SaveDialog->DefaultExt = "log"; + SaveDialog->InitialDir = MMLogDir; + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + SaveMmlogText(AnsiString(SaveDialog->FileName).c_str()); //JA7UDE 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SureRead(void) +{ + int r; + if( MsgEng ){ + r = YesNoCancelMB("MMSSTV has QSO data(s) already. Add QSO data from file?\r\n\r\n\tAdded to the end\r\n\tOverwrite\r\n\t(All the current data are deleted, and replaced by the read data)\r\n\tAbort this function"); + } + else { + r = YesNoCancelMB("現在MMSSTVにログデータが存在します. 追加読みこみしますか?\r\n\r\n<はい>\t現在のログデータの最後に読み込んだデータが追加される.\r\n<いいえ>\t現在のログデータは全て削除され読み込んだデータに置き換わる.\r\n<キャンセル>\t処理中止"); + } + switch(r){ + case IDCANCEL: + return 0; + case IDNO: + if( MsgEng ){ + r = OkCancelMB("Delete All QSO data(s)...(will not be able to restore) Are you sure?"); + } + else { + r = OkCancelMB("現在MMSSTVが保持しているログデータを全て失います.\r\n\r\nほんまにええでっか?"); + } + switch(r){ + case IDOK: + Log.DeleteAll(); + break; + case IDCANCEL: + return 0; + } + break; + default: + break; + } + return 1; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::LoadMmlogText(LPCSTR pName) +{ + char bf[1024]; + + if( Log.GetCount() ){ + if( !SureRead() ) return; + } + FILE *fp = fopen(pName, "rt"); + if( fp != NULL ){ + int r = IDNO; + if( MsgEng ){ + r = YesNoMB("This function exists for compatibility with old software which handle JST.\r\n\r\nAre recorded data UTC?"); + } + CWaitCursor w; + SDMMLOG sd; + while(!feof(fp)){ + if( fgets(bf, 1023, fp) != NULL ){ + ClipLF(bf); + if( bf[0] ){ + if( Log.ReadAscii(&sd, bf) == TRUE ){ + if( r == IDYES ) UTCtoJST(&sd); + Log.PutData(&sd, Log.GetCount()); + } + } + } + } + fclose(fp); + } + else { + ErrorMB(MsgEng ? "Can't open '%s'" : "'%s'が見つかりません.", pName); + } + UpdateLogCount(1); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::SaveMmlogText(LPCSTR pName) +{ + FILE *fp = fopen(pName, "wt"); + if( fp != NULL ){ + int r = IDNO; + if( MsgEng ){ + r = YesNoMB("This function exists for compatibility with old software which handle JST.\r\n\r\nDo you want UTC?"); + } + SDMMLOG sd; + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + int i; + CWaitCursor w; + for( i = b; i <= e; i++ ){ + Log.GetData(&sd, i); + if( r == IDYES ) JSTtoUTC(&sd); + fprintf(fp, "\042%s\042,\042%s.%02u\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,", + Log.GetDateString(&sd, 0), + Log.GetTimeString(sd.btime), (sd.btime % 30 * 2), + sd.call, sd.ur, sd.my, + Log.GetFreqString(sd.band, sd.fq) + ); + + fprintf(fp, "\042%s\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,", + Log.GetModeString(sd.mode), + sd.pow, sd.name, sd.qth, sd.rem, sd.qsl + ); + fprintf(fp, "\042%s\042,\042%.1s\042,\042%.1s\042,\042%.1s\042,\042%u\042,", + Log.GetTimeString(sd.etime), + &sd.send, &sd.recv, &sd.cq, sd.env + ); + fprintf(fp, "\042%s\042,\042%s\042,", sd.opt1, sd.opt2 ); + fprintf(fp, "\042%s\042,", Log.GetOptStr(2, &sd)); + fprintf(fp, "\042%s\042\n", Log.GetOptStr(3, &sd)); + if( ferror(fp) ) break; + } + if( fclose(fp) ){ + ErrorMB( MsgEng ? "Can't save to '%s'" : "'%s'が正しく作成できませんでした.", pName); + } + } + else { + ErrorMB(MsgEng ? "Can't save to '%s'" : "'%s'が作成できません.", pName); + } +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KSelAllClick(TObject *Sender) +{ + TGridRect gRect; + gRect.Top = 1; + gRect.Bottom = Grid->RowCount - 1; + gRect.Left = 0; + gRect.Right = 20; + + Grid->Selection = gRect; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KHlpLogClick(TObject *Sender) +{ + ShowHelp(this, MsgEng ? "EMSTVLOG.TXT":"MSTVLOG.TXT"); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KReIndexClick(TObject *Sender) +{ + Log.MakeIndex(); +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::LoadText(LPCSTR pName) +{ + TConvDefDlg *pBox = new TConvDefDlg(this); + int r = pBox->Execute(LogText.m_rConv, LogText.m_Delm, LogText.m_UTC, LogText.m_Double, pName); + delete pBox; + if( r == FALSE ) return FALSE; + + if( Log.GetCount() ){ + if( !SureRead() ) return FALSE; + } + + if( LogText.Open(pName) ){ + SDMMLOG sd; + CWaitCursor w; + while(LogText.Read(&sd)==TRUE){ + Log.PutData(&sd, Log.GetCount()); + } + LogText.Close(); + } + else { + UpdateLogCount(1); + return FALSE; + } + UpdateLogCount(1); + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SaveText(LPCSTR pName) +{ + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + + TConvDefDlg *pBox = new TConvDefDlg(this); + int r = pBox->Execute(LogText.m_tConv, LogText.m_Delm, LogText.m_UTC, LogText.m_Double, b, e); + delete pBox; + if( r == FALSE ) return FALSE; + if( LogText.Create(pName) ){ + SDMMLOG sd; + int i; + CWaitCursor w; + for( i = b; i <= e; i++ ){ + Log.GetData(&sd, i); + if( LogText.Write(&sd) == FALSE ) break; + } + LogText.Close(); + } + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KExportTextClick(TObject *Sender) +{ + SaveDialog->Options << ofOverwritePrompt; + if( MsgEng ){ + SaveDialog->Title = "Save Text File"; + SaveDialog->Filter = "Text Files(*.csv;*.txt)|*.csv;*.txt|"; + } + else { + SaveDialog->Title = "テキストファイルの作成"; + SaveDialog->Filter = "テキストファイル(*.csv;*.txt)|*.csv;*.txt|"; + } + char bf[256]; + strcpy(bf, Log.GetName()); + SetEXT(bf, ".csv"); + SaveDialog->FileName = bf; + SaveDialog->DefaultExt = "csv"; + SaveDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + SaveText(AnsiString(SaveDialog->FileName).c_str()); //JA7UDE 0428 + SetDirName(ExtLogDir, AnsiString(SaveDialog->FileName).c_str()); //JA7UDE 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KImportTextClick(TObject *Sender) +{ + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options >> ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load Text File"; + OpenDialog->Filter = "Text File(*.csv;*.txt)|*.csv;*.txt|"; + } + else { + OpenDialog->Title = "テキストファイルのロード"; + OpenDialog->Filter = "テキストファイル(*.csv;*.txt)|*.csv;*.txt|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "csv"; + OpenDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( OpenDialog->Execute() == TRUE ){ + LoadText(AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0428 + SetDirName(ExtLogDir, AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::LoadLog200(LPCSTR pName) +{ + if( Log.GetCount() ){ + if( !SureRead() ) return FALSE; + } + + CLog200 log200; + if( log200.Open(pName) ){ + SDMMLOG sd; + CWaitCursor w; + while(log200.Read(&sd)==TRUE){ + Log.PutData(&sd, Log.GetCount()); + } + log200.Close(); + } + else { + UpdateLogCount(1); + return FALSE; + } + UpdateLogCount(1); + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SaveLog200(LPCSTR pName) +{ + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + + CLog200 log200; + if( log200.Create(pName) ){ + SDMMLOG sd; + int i; + CWaitCursor w; + for( i = b; i <= e; i++ ){ + Log.GetData(&sd, i); + if( log200.Write(&sd) == FALSE ) break; + } + log200.Close(); + } + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KExportLog200Click(TObject *Sender) +{ + SaveDialog->Options << ofOverwritePrompt; + if( MsgEng ){ + SaveDialog->Title = "Save LOG200 Data file"; + SaveDialog->Filter = "LOG200 Data File(*.l2)|*.l2|"; + } + else { + SaveDialog->Title = "LOG200データファイルの作成"; + SaveDialog->Filter = "LOG200データファイル(*.l2)|*.l2|"; + } + char bf[256]; + strcpy(bf, Log.GetName()); + SetEXT(bf, ".l2"); + SaveDialog->FileName = bf; + SaveDialog->DefaultExt = "l2"; + SaveDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + SaveLog200(AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + SetDirName(ExtLogDir, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KImportLog200Click(TObject *Sender) +{ + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options >> ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load LOG200 Data File"; + OpenDialog->Filter = "LOG200 Data File(*.l2)|*.l2|"; + } + else { + OpenDialog->Title = "LOG200データファイルのロード"; + OpenDialog->Filter = "LOG200データファイル(*.l2)|*.l2|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "l2"; + OpenDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( OpenDialog->Execute() == TRUE ){ + LoadLog200(AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0428 + SetDirName(ExtLogDir, AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::LoadHamLog(LPCSTR pName) +{ + if( Log.GetCount() ){ + if( !SureRead() ) return FALSE; + } + + CHamLog HamLog; + if( HamLog.Open(pName) ){ + SDMMLOG sd; + CWaitCursor w; + while(HamLog.Read(&sd)==TRUE){ + Log.PutData(&sd, Log.GetCount()); + } + HamLog.Close(); + } + else { + UpdateLogCount(1); + return FALSE; + } + UpdateLogCount(1); + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::LoadHamLog5(LPCSTR pName) +{ + if( Log.GetCount() ){ + if( !SureRead() ) return FALSE; + } + + CHamlog5 HamLog; + if( HamLog.Open(pName, TRUE) ){ + SDMMLOG sd; + CWaitCursor w; + DWORD Pos; + for( Pos = 0; Pos < HamLog.GetRCount(); Pos++ ){ + if( HamLog.Seek(Pos) ){ + HamLog.DecodeData(&sd); + Log.PutData(&sd, Log.GetCount()); + } + } + HamLog.Close(); + } + else { + UpdateLogCount(1); + return FALSE; + } + UpdateLogCount(1); + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SaveHamLog(LPCSTR pName) +{ + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + + CHamLog HamLog; + if( HamLog.Create(pName) ){ + SDMMLOG sd; + int i; + CWaitCursor w; + for( i = b; i <= e; i++ ){ + Log.GetData(&sd, i); + if( HamLog.Write(&sd) == FALSE ) break; + } + HamLog.Close(); + } + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SaveHamLog5(LPCSTR pName) +{ + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + + + char master[256]; + SetDirName(master, pName); + strcat(master, "HAMLOG.HDB"); + CHamlog5 HamLog; + if( HamLog.Open(master, FALSE) ){ // フィールド情報を読み込む + HamLog.Close(); + } + else { // フィールド情報を問い合わせ + TTH5LenDlg *pBox = new TTH5LenDlg(this); + if( !pBox->Execute() ){ + return FALSE; + } + } + + if( HamLog.Create(pName) ){ + SDMMLOG sd; + int i; + int n = 0; + CWaitCursor w; + for( i = b; i <= e; i++, n++ ){ + Log.GetData(&sd, i); + HamLog.Seek(n); + HamLog.EncodeData(&sd); + if( HamLog.Update() == FALSE ) break; + } + HamLog.Close(); + } + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KImportHamlogClick(TObject *Sender) +{ + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options >> ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load HamLog Data File"; + OpenDialog->Filter = "HamLog Data File(*.hdb;*.dbs)|*.hdb;*.dbs|"; + } + else { + OpenDialog->Title = "HamLogデータファイルのロード"; + OpenDialog->Filter = "HamLogデータファイル(*.hdb;*.dbs)|*.hdb;*.dbs|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "hdb"; + OpenDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( OpenDialog->Execute() == TRUE ){ + LPCSTR pName = AnsiString(OpenDialog->FileName).c_str(); //ja7ude 0428 + if( !strcmpi(GetEXT(pName), "HDB") ){ + LoadHamLog5(pName); + } + else { + LoadHamLog(pName); + } + SetDirName(ExtLogDir, pName); + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KExportHamlogClick(TObject *Sender) +{ + SaveDialog->Options << ofOverwritePrompt; + if( MsgEng ){ + SaveDialog->Title = "Save HAMLOG Data File"; + SaveDialog->Filter = "HAMLOG (Ver5) Data File(*.hdb)|*.hdb|HAMLOG Data File(*.dbs)|*.dbs|"; + } + else { + SaveDialog->Title = "HAMLOGデータファイルの作成"; + SaveDialog->Filter = "HAMLOG (Ver5) データファイル(*.hdb)|*.hdb|HAMLOGデータファイル(*.dbs)|*.dbs|"; + } + char bf[256]; + strcpy(bf, Log.GetName()); + SetEXT(bf, ".hdb"); + SaveDialog->FileName = bf; + SaveDialog->DefaultExt = "hdb"; + SaveDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + LPCSTR pName = AnsiString(SaveDialog->FileName).c_str(); //ja7ude 0428 + if( !strcmpi(GetEXT(pName), "HDB") ){ + SaveHamLog5(pName); + } + else { + SaveHamLog(pName); + } + SetDirName(ExtLogDir, pName); + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KLogOptClick(TObject *Sender) +{ + TLogSetDlg *pBox = new TLogSetDlg(this); + pBox->Execute(); + delete pBox; + SetTimeZone(); + Grid->Invalidate(); +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SaveADIF(LPCSTR pName) +{ + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + + CLogADIF logADIF; + if( logADIF.Create(pName) ){ + SDMMLOG sd; + int i; + CWaitCursor w; + for( i = b; i <= e; i++ ){ + Log.GetData(&sd, i); + if( logADIF.Write(&sd) == FALSE ) break; + } + logADIF.Close(); + } + return TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::LoadADIF(LPCSTR pName) +{ + if( Log.GetCount() ){ + if( !SureRead() ) return FALSE; + } + + CLogADIF logADIF; + if( logADIF.Open(pName) ){ + SDMMLOG sd; + memset(&sd, 0, sizeof(sd)); + CWaitCursor w; + while(logADIF.Read(&sd)==TRUE){ + Log.PutData(&sd, Log.GetCount()); + memset(&sd, 0, sizeof(sd)); + } + logADIF.Close(); + } + else { + UpdateLogCount(1); + return FALSE; + } + UpdateLogCount(1); + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KExportADIFClick(TObject *Sender) +{ + SaveDialog->Options << ofOverwritePrompt; + if( MsgEng ){ + SaveDialog->Title = "Save ADIF File"; + SaveDialog->Filter = "ADIF Files(*.adi)|*.adi|"; + } + else { + SaveDialog->Title = "ADIF ファイルの作成"; + SaveDialog->Filter = "ADIF ファイル(*.adi)|*.adi|"; + } + char bf[256]; + strcpy(bf, Log.GetName()); + SetEXT(bf, ".adi"); + SaveDialog->FileName = bf; + SaveDialog->DefaultExt = "adi"; + SaveDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + SaveADIF(AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + SetDirName(ExtLogDir, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KImportADIFClick(TObject *Sender) +{ + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options >> ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load ADIF File"; + OpenDialog->Filter = "ADIF Files(*.adi;*.txt)|*.adi;*.txt|"; + } + else { + OpenDialog->Title = "ADIF ファイルのロード"; + OpenDialog->Filter = "ADIF ファイル(*.adi;*.txt)|*.adi;*.txt|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "adi"; + OpenDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( OpenDialog->Execute() == TRUE ){ + LoadADIF(AnsiString(OpenDialog->FileName).c_str()); + SetDirName(ExtLogDir, AnsiString(OpenDialog->FileName).c_str()); + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +int __fastcall TLogListDlg::SaveCabrillo(LPCSTR pName) +{ + int b = Grid->Selection.Top - 1; + int e = Grid->Selection.Bottom - 1; + if( e >= Log.GetCount() ) e--; + + CLogCabrillo logCabrillo; + if( logCabrillo.Create(pName) ){ + SDMMLOG sd; + int i; + CWaitCursor w; + for( i = b; i <= e; i++ ){ + Log.GetData(&sd, i); + if( logCabrillo.Write(&sd) == FALSE ) break; + } + logCabrillo.Close(); + } + return TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TLogListDlg::KExportCabrilloClick(TObject *Sender) +{ + SaveDialog->Options << ofOverwritePrompt; + if( MsgEng ){ + SaveDialog->Title = "Save Cabrillo File"; + SaveDialog->Filter = "Cabrillo Files(*.txt)|*.txt|"; + } + else { + SaveDialog->Title = "Cabrillo ファイルの作成"; + SaveDialog->Filter = "Cabrillo ファイル(*.txt)|*.txt|"; + } + char bf[256]; + strcpy(bf, Log.GetName()); + SetEXT(bf, ".txt"); + SaveDialog->FileName = bf; + SaveDialog->DefaultExt = "txt"; + SaveDialog->InitialDir = ExtLogDir; + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + SaveCabrillo(AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + SetDirName(ExtLogDir, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + } + TopWindow(this); +} +//--------------------------------------------------------------------------- + + diff --git a/LogList.dfm b/LogList.dfm new file mode 100644 index 0000000000000000000000000000000000000000..9f105b7e387806a102166edb601ccd7d85a2c804 GIT binary patch literal 3811 zcmbW4TWB0r7=Wj<$k+&&-^e*_{SySy<-G z`Ty_#&wn}R%tnk6^QFmrP7u@iNe1=**vl|tIfLS2UYGMq(@d*!%zNz0;~6t_h6#y! zBXpkOQc}ZIbS=y|B8il$V9m^8MXsBnr`fnYo>FRNJ@i?)F?-rlN>tS;MXTwDM7&_etqI!<`$yCo6{R_x zj4%wdePidw5Q8?Zq80Ql`U=?;!CX{voariHZJvu1Bt;`ny(P7lGO%Rgl2OA(G*&hg z%@nGVin(w@FX|c&TccW}r>rbswOPhSPOH}0*JH#H$Avy7E(#{7%9Dmt>$3hxs8}mf zEYnRR5Ozb;J+3OU#ziF6j!^_+lhWrklO2p^z)}syO_q6p2yqZrRjSTDd~mpumCk0o zPu49T_G81$D;lQbtZp18DylOR=Rxde$U9gztzkix3! zOgJN$;PGPFz|E#TK}S(AZe^mmg&k*~W1H+&_GNY#{GMf>VN0Pm7VJi0j>RkZd2w4Y0A!0VQCN7(cE70zU%@%8h8O63G783)!Py&D1FoXC z_uW!{IO4k8Lly30B zT!umiwgHs9Xf2&-9Y5DPzT8^6G&VLCAQG7XvBxn7N5&3>T;?D!;V6Pvn^BW(ikot? z(wwTxZQSg50nq=)wG|z%FRmQFXQ3?vB&J?5T!4mJMfb^ut@Ys9@bm&}j61HhWn;j} z#?WR9?DuH}kUh@iL!`rY)K=V-`w;1{xozq2s=UwfHziFQimK{vq927Y(3hJ$nc)gwyH~GH8pQgZ<0jv67>8xaE#>seS14)0PcD*y2vA-{EJJ7hoq%!)=cWBol20?%-dFG8!&6(Z)>Hi)^o} z=NR+li5&Ktdn65zEZtrHbnWUFBg29}pItoMnO(DC5Xag?0>XW_gX>12-=`74MXkw{u8DLJ*7;~VNnCW@ zV-1(MxpyvZq77&J)`kliLoV+=9{LKT3+`v`wqbR~MYzbVpf%rR&L__Cu%Y@itc~X0 zh0Axo{CMqyYwMpuU6n@thi$@9aAM;_b@N%Qx-~b@15s`*orSZywe-=*aMoX)9G_Ji zV3;mD9JBYfAvibPbtW7kY6(7i$kj8gNUAQ!yhrylqF0~EDm6^*Y$Z)ygrWVdRW|gw qhRN7B=. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef LogListH +#define LogListH +//---------------------------------------------------------------------------- +/* JA7UDE 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +*/ +//---------------------------------------------------------------------------- +#include "LogFile.h" +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TLogListDlg : public TForm +{ +__published: + TStringGrid *Grid; + TMainMenu *MainMenu; + TMenuItem *KFile; + TMenuItem *KOpen; + TOpenDialog *OpenDialog; + TMenuItem *KEdit; + TMenuItem *KFlush; + TMenuItem *KDelCur; + TMenuItem *KDelSel; + TMenuItem *N1; + TMenuItem *KExit; + TMenuItem *KFind; + TMenuItem *KFindTop; + TMenuItem *KFindBottom; + TMenuItem *KFindConT; + TMenuItem *KFindConB; + TMenuItem *N2; + TMenuItem *KTop; + TMenuItem *KBottom; + TMenuItem *N3; + TMenuItem *KSortDate; + TMenuItem *KInsCur; + TMenuItem *N4; + TMenuItem *N5; + TMenuItem *KMTextRead; + TMenuItem *KMTextWrite; + TSaveDialog *SaveDialog; + TMenuItem *KSelAll; + TMenuItem *KHelp; + TMenuItem *KHlpLog; + TMenuItem *N6; + TMenuItem *KReIndex; + TMenuItem *N7; + TMenuItem *KExport; + TMenuItem *KExportText; + TMenuItem *KImport; + TMenuItem *KImportText; + TMenuItem *KImportLog200; + TMenuItem *KExportLog200; + TMenuItem *KImportHamlog; + TMenuItem *KExportHamlog; + TMenuItem *KLogOpt; + TMenuItem *KOpt; + TMenuItem *KExportADIF; + TMenuItem *KImportADIF; + TMenuItem *KExportCabrillo;void __fastcall GridKeyPress(TObject *Sender, char &Key); + void __fastcall KOpenClick(TObject *Sender); + void __fastcall KFlushClick(TObject *Sender); + void __fastcall KDelCurClick(TObject *Sender); + void __fastcall KDelSelClick(TObject *Sender); + void __fastcall KExitClick(TObject *Sender); + void __fastcall KFindTopClick(TObject *Sender); + void __fastcall KFindBottomClick(TObject *Sender); + void __fastcall KTopClick(TObject *Sender); + void __fastcall KBottomClick(TObject *Sender); + void __fastcall KSortDateClick(TObject *Sender); + + void __fastcall GridDblClick(TObject *Sender); + void __fastcall KInsCurClick(TObject *Sender); + void __fastcall KMTextReadClick(TObject *Sender); + void __fastcall KMTextWriteClick(TObject *Sender); + void __fastcall KSelAllClick(TObject *Sender); + void __fastcall KHlpLogClick(TObject *Sender); + void __fastcall KReIndexClick(TObject *Sender); + + void __fastcall KExportTextClick(TObject *Sender); + void __fastcall KImportTextClick(TObject *Sender); + void __fastcall KExportLog200Click(TObject *Sender); + void __fastcall KImportLog200Click(TObject *Sender); + void __fastcall KImportHamlogClick(TObject *Sender); + void __fastcall KExportHamlogClick(TObject *Sender); + void __fastcall KLogOptClick(TObject *Sender); + void __fastcall KExportADIFClick(TObject *Sender); + void __fastcall KImportADIFClick(TObject *Sender); + void __fastcall KExportCabrilloClick(TObject *Sender); + void __fastcall GridDrawCell(TObject *Sender, int Col, int Row, + TRect &Rect, TGridDrawState State); +private: + void __fastcall AdjustTopRow(void); + void __fastcall UpdateLogCount(int sw); + void __fastcall UpdateMenu(void); + void __fastcall OnIdle(TObject *Sender, bool &Done); + + int __fastcall SureRead(void); + + void __fastcall LoadMmlogText(LPCSTR pName); + void __fastcall SaveMmlogText(LPCSTR pName); + int __fastcall LoadText(LPCSTR pName); + int __fastcall SaveText(LPCSTR pName); + int __fastcall LoadLog200(LPCSTR pName); + int __fastcall SaveLog200(LPCSTR pName); + int __fastcall LoadHamLog(LPCSTR pName); + int __fastcall SaveHamLog(LPCSTR pName); + int __fastcall LoadHamLog5(LPCSTR pName); + int __fastcall SaveHamLog5(LPCSTR pName); + + int __fastcall LoadADIF(LPCSTR pName); + int __fastcall SaveADIF(LPCSTR pName); + + int __fastcall SaveCabrillo(LPCSTR pName); + + AnsiString m_FindCall; + + void __fastcall SetTimeZone(void); + AnsiString m_TimeZone; + int m_DateWidth; +public: + virtual __fastcall TLogListDlg(TComponent* AOwner); + + void __fastcall TLogListDlg::Execute(void); +}; +//---------------------------------------------------------------------------- +//extern TLogListDlg *LogListDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/LogPic.cpp b/LogPic.cpp new file mode 100644 index 0000000..1911a61 --- /dev/null +++ b/LogPic.cpp @@ -0,0 +1,211 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ComLib.h" +#include "LogPic.h" +#include "Main.h" +#include "ZoomView.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//--------------------------------------------------------------------- +__fastcall TLogPicDlg::TLogPicDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + OKBtn->Caption = "Close"; + } + pBitmap = new Graphics::TBitmap(); + pBitmap->Width = PB->Width; + pBitmap->Height = PB->Height; + for( int i = 0; i < 5; i++ ){ + pBitmapS[i] = new Graphics::TBitmap(); + pBitmapS[i]->Width = PB->Width; + pBitmapS[i]->Height = PB->Height; + } + m_RectS.Left = 0; + m_RectS.Top = 0; + m_RectS.Right = PB1->Width; + m_RectS.Bottom = PB1->Height; + SBCopy->Glyph->Assign(Mmsstv->SBCopy->Glyph); + SBZoom->Glyph->Assign(Mmsstv->SBHView->Glyph); +} +//--------------------------------------------------------------------- +__fastcall TLogPicDlg::~TLogPicDlg() +{ + delete pBitmap; + pBitmap = NULL; + for( int i = 0; i < 5; i++ ){ + delete pBitmapS[i]; + pBitmapS[i] = NULL; + } +} +//--------------------------------------------------------------------- +// 200102211234 +int __fastcall IsDateFormat(LPCSTR p) +{ + if( !*p ) return 0; + if( strlen(p) != 10 ) return 0; + for( ; *p; p++ ){ + if( !isdigit(*p) ) return 0; + } + return 1; +} +//--------------------------------------------------------------------- +void __fastcall TLogPicDlg::LoadPic(void) +{ + m_Cur = 0; + int i; + for( i = 0; i < m_Cnt; i++ ){ + char fname[256]; + char abf[2]; + abf[0] = abf[1] = 0; + if( LastC(sys.m_AutoSaveDir.c_str()) != '\\' ) abf[0] = '\\'; + sprintf(fname, "%s%s20%s.jpg", sys.m_AutoSaveDir.c_str(), abf, m_List[i].c_str()); + if( LoadJPEG(pBitmapS[i], fname) != TRUE ){ + sprintf(fname, "%s%s20%s.bmp", sys.m_AutoSaveDir.c_str(), abf, m_List[i].c_str()); + if( LoadBitmap(pBitmapS[i], fname) != TRUE ){ + FillBitmap(pBitmapS[i], clWhite); + } + } + } + pBitmap->Assign(pBitmapS[0]); +} +//--------------------------------------------------------------------- +int __fastcall IsLogPic(LPCSTR pNote) +{ + char bf[256]; + strcpy(bf, pNote); + LPSTR t; + LPSTR p = bf; + while(*p){ + p = StrDlm(t, p); + if( IsDateFormat(t) ) return 1; + } + return 0; +} + +//--------------------------------------------------------------------- +void __fastcall TLogPicDlg::Execute(LPCSTR pNote) +{ + char bf[256]; + strcpy(bf, pNote); + LPSTR t; + LPSTR p = bf; + m_Cur = 0; + m_Cnt = 0; + while(*p){ + p = StrDlm(t, p); + if( IsDateFormat(t) ){ + m_List[m_Cnt] = t; + m_Cnt++; + if( m_Cnt >= 5 ) break; + } + } + LoadPic(); + ShowModal(); +} +//--------------------------------------------------------------------- +void __fastcall TLogPicDlg::PBPaint(TObject *Sender) +{ + DrawBitmap(PB, pBitmap); +// PB->Canvas->Draw(0, 0, pBitmap); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PaintS(TPaintBox *tp, Graphics::TBitmap *pbmp) +{ + ::SetStretchBltMode(tp->Canvas->Handle, HALFTONE); + tp->Canvas->StretchDraw(m_RectS, pbmp); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB1Paint(TObject *Sender) +{ + PaintS(PB1, pBitmapS[0]); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB2Paint(TObject *Sender) +{ + PaintS(PB2, pBitmapS[1]); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB3Paint(TObject *Sender) +{ + PaintS(PB3, pBitmapS[2]); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB4Paint(TObject *Sender) +{ + PaintS(PB4, pBitmapS[3]); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB5Paint(TObject *Sender) +{ + PaintS(PB5, pBitmapS[4]); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB1Click(TObject *Sender) +{ + pBitmap->Assign(pBitmapS[0]); + PB->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB2Click(TObject *Sender) +{ + pBitmap->Assign(pBitmapS[1]); + PB->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB3Click(TObject *Sender) +{ + pBitmap->Assign(pBitmapS[2]); + PB->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB4Click(TObject *Sender) +{ + pBitmap->Assign(pBitmapS[3]); + PB->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::PB5Click(TObject *Sender) +{ + pBitmap->Assign(pBitmapS[4]); + PB->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogPicDlg::SBCopyClick(TObject *Sender) +{ + Mmsstv->CopyBitmap(pBitmap); +} +//--------------------------------------------------------------------------- + +void __fastcall TLogPicDlg::SBZoomClick(TObject *Sender) +{ + TZoomViewDlg *pBox = new TZoomViewDlg(this); + pBox->Execute(pBitmap, FALSE); + delete pBox; +} +//--------------------------------------------------------------------------- + diff --git a/LogPic.dfm b/LogPic.dfm new file mode 100644 index 0000000000000000000000000000000000000000..f0fdc8f0882975c8458154e46d58f47123467007 GIT binary patch literal 1371 zcmbW0Pj1vO6viF96K66luS}vhl+t%O#~7Pq%?77B8(j+9%;H^(M?a# z9p~TxEV&5>U=2>33`sMps@eI){yzWwzL&o?2p9gGoV(s)4o;rU2LOcR?8FWiVoB22 zW6R-ob+DjU68!-v6d7bAN8}0319{CTwk``VjhI+sH_BuxxM?Z1T<5enbXiKdd_&Xa zN+RDF>H1@u$QAl-*d)r;_L<;vXc1AQr5ZoUL=fkca#!uq+$MR-We`W|Dl-%B1*c|J zCDsv1HdNv}STRdMA>IUC=@m(6GYj(k~N%001*25vL51;ALeGb!d(GMPu&#R~cZaM5@h> z*dXH6x{3-mI@0J)2d`PW. +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef OCBH +#define OCBH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TLogPicDlg : public TForm +{ +__published: + TButton *OKBtn; + TPanel *PS1; + TPanel *PS2; + TPanel *PS3; + TPanel *PS; + TPaintBox *PB1; + TPaintBox *PB2; + TPaintBox *PB3; + TPaintBox *PB; + TSpeedButton *SBCopy; + TPanel *PC4; + TPaintBox *PB4; + TPanel *PC5; + TPaintBox *PB5; + TSpeedButton *SBZoom; + void __fastcall PBPaint(TObject *Sender); + void __fastcall PB1Paint(TObject *Sender); + void __fastcall PB2Paint(TObject *Sender); + void __fastcall PB3Paint(TObject *Sender); + void __fastcall PB1Click(TObject *Sender); + void __fastcall PB2Click(TObject *Sender); + void __fastcall PB3Click(TObject *Sender); + void __fastcall SBCopyClick(TObject *Sender); + void __fastcall PB4Paint(TObject *Sender); + void __fastcall PB4Click(TObject *Sender); + void __fastcall PB5Click(TObject *Sender); + void __fastcall PB5Paint(TObject *Sender); + void __fastcall SBZoomClick(TObject *Sender); +private: + AnsiString m_List[5]; + Graphics::TBitmap *pBitmapS[5]; + Graphics::TBitmap *pBitmap; + + int m_Cnt; + int m_Cur; + TRect m_RectS; + void __fastcall LoadPic(void); + void __fastcall PaintS(TPaintBox *tp, Graphics::TBitmap *pbmp); + +public: + virtual __fastcall TLogPicDlg(TComponent* AOwner); + __fastcall ~TLogPicDlg(); + + + void __fastcall Execute(LPCSTR pNote); +}; +int __fastcall IsDateFormat(LPCSTR p); +int __fastcall IsLogPic(LPCSTR pNote); +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +#endif diff --git a/LogSet.cpp b/LogSet.cpp new file mode 100644 index 0000000..9884c9a --- /dev/null +++ b/LogSet.cpp @@ -0,0 +1,235 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "LogSet.h" +#include "country.h" +#include "Loglink.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TLogSetDlg *LogSetDlg; +static int PageIndex = 0; +//--------------------------------------------------------------------- +__fastcall TLogSetDlg::TLogSetDlg(TComponent* AOwner) + : TForm(AOwner) +{ + m_DisEvent = 1; + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + TabConv->Caption = "Conversion"; + TabMisc->Caption = "Misc"; + CancelBtn->Caption = "Cancel"; + Caption = "Setup Logging"; + TabFlag->Caption = "Input"; + GrpConv->Caption = "Convert UpperCase"; + GrpCopy->Caption = "Copy Before Data"; + CopyFreq->Caption = "Copy Band or Freq."; + CopyFreq->Items->Strings[0] = "Copy Band"; + CopyFreq->Items->Strings[1] = "Copy Freq."; + DefMyRST->Caption = "595 Default"; + + RGDupe->Caption = "Dupe Check (Show Red)"; + RGDupe->Items->Strings[0] = "Callsign only"; + RGDupe->Items->Strings[1] = "Hit on the same band"; + AutoZone->Caption = "Ignore daylight saving"; + CBBackup->Caption = "Make backup"; + CBFSKNR->Caption = "Add contest NR to the FSKID"; + CBRemC->Visible = FALSE; + L1->Caption = "Delay time"; + GB7->Caption = "Template"; + GB9->Caption = "Mode"; + } + else { + LLink->Caption = "Hamlogの環境設定-設定1で\r\n「交信履歴表示で一旦停止」のチェックは付けないで下さい."; + } + if( lcid == LANG_KOREAN ){ + TimeZone->Items->Strings[0] = "Korea"; + } + else { + TimeZone->Items->Strings[0] = "Japan"; + } + m_MMList.QueryList("MML"); + for( int i = 0; i < m_MMList.GetCount(); i++ ){ + CBMMLink->Items->Add(m_MMList.GetItemName(i)); + } +} +//--------------------------------------------------------------------- +void __fastcall TLogSetDlg::UpdateUI(void) +{ + int f = !AutoZone->Checked; + TimeOff->Enabled = f; + MinOff->Enabled = f; + UDOffset->Enabled = f; + UDMin->Enabled = f; + ClearOff->Enabled = f; + CBPoll->Enabled = RGLink->ItemIndex ? TRUE : FALSE; + if( !MsgEng ){ + LLink->Visible = (RGLink->ItemIndex == 1) ? TRUE : FALSE; + } + CBMMLink->Enabled = (RGLink->ItemIndex == 2) ? TRUE : FALSE; + LT->Enabled = CBMMLink->Enabled; +} +//--------------------------------------------------------------------- +int __fastcall TLogSetDlg::Execute(void) +{ + int i; + for( i = 0; i < 5; i++ ){ + m_MacroStr[i] = Log.m_LogSet.m_QSOMacroStr[i]; + m_MacroKey[i] = Log.m_LogSet.m_QSOMacroKey[i]; + } + UpperName->Checked = Log.m_LogSet.m_UpperName; + UpperQTH->Checked = Log.m_LogSet.m_UpperQTH; + UpperREM->Checked = Log.m_LogSet.m_UpperREM; + UpperQSL->Checked = Log.m_LogSet.m_UpperQSL; + + DefMyRST->Checked = Log.m_LogSet.m_DefMyRST; + + CopyFreq->ItemIndex = Log.m_LogSet.m_CopyFreq; + CopyHis->ItemIndex = Log.m_LogSet.m_CopyHis; + CopyName->Checked = Log.m_LogSet.m_CopyName; + CopyQTH->Checked = Log.m_LogSet.m_CopyQTH; + CopyREM->Checked = Log.m_LogSet.m_CopyREM; + CopyQSL->Checked = Log.m_LogSet.m_CopyQSL; + CBBackup->Checked = Log.m_LogSet.m_Backup; + CBRemC->Checked = Log.m_LogSet.m_CopyREMB4; + CBFSKNR->Checked = Log.m_LogSet.m_FSKNR; + + if( Log.m_LogSet.m_TimeZone != 'I' ){ + TimeZone->ItemIndex = 1; + } + else { + TimeZone->ItemIndex = 0; + } + AutoSave->Checked = Log.m_LogSet.m_AutoSave; + RGDupe->ItemIndex = Log.m_LogSet.m_CheckBand; + + THRTTY->Text = Log.m_LogSet.m_THRTTY; + THSSTV->Text = Log.m_LogSet.m_THSSTV; + THTZ->ItemIndex = Log.m_LogSet.m_THTZ; + ClipRSTADIF->Checked = Log.m_LogSet.m_ClipRSTADIF; + DateType->ItemIndex = Log.m_LogSet.m_DateType; + AutoZone->Checked = sys.m_AutoTimeOffset; + UDOffset->Position = short(sys.m_TimeOffset); + UDMin->Position = short(sys.m_TimeOffsetMin); + RGLink->ItemIndex = sys.m_LogLink; + CBPoll->Checked = LogLink.IsPolling(); + CBPTT->Checked = LogLink.GetPTTEnabled(); + CBMMLink->ItemIndex = CBMMLink->Items->IndexOf(LogLink.GetItemName()); + if( m_MMList.GetCount() ){ + RGLink->Controls[2]->Enabled = TRUE; + if( CBMMLink->ItemIndex < 0 ){ + CBMMLink->ItemIndex = 0; + } + } + else { + RGLink->Controls[2]->Enabled = FALSE; + } + CBTDelay->ItemIndex = sys.m_TempDelay; + if( (PageIndex >= 0) && (PageIndex < Page->PageCount) ){ + if( Page->Pages[PageIndex]->TabVisible == FALSE ){ + PageIndex = 0; + } + Page->ActivePage = Page->Pages[PageIndex]; + } + int r = FALSE; + UpdateUI(); + m_DisEvent = 0; + if( ShowModal() == IDOK ){ + Log.m_LogSet.m_UpperName = UpperName->Checked; + Log.m_LogSet.m_UpperQTH = UpperQTH->Checked; + Log.m_LogSet.m_UpperREM = UpperREM->Checked; + Log.m_LogSet.m_UpperQSL = UpperQSL->Checked; + + Log.m_LogSet.m_DefMyRST = DefMyRST->Checked; + + Log.m_LogSet.m_CopyFreq = CopyFreq->ItemIndex; + Log.m_LogSet.m_CopyHis = CopyHis->ItemIndex; + Log.m_LogSet.m_CopyName = CopyName->Checked; + Log.m_LogSet.m_CopyQTH = CopyQTH->Checked; + Log.m_LogSet.m_CopyREM = CopyREM->Checked; + Log.m_LogSet.m_CopyQSL = CopyQSL->Checked; + Log.m_LogSet.m_CopyREMB4 = ( Font->Charset != SHIFTJIS_CHARSET ) ? 0 : CBRemC->Checked; + + if( TimeZone->ItemIndex ){ + Log.m_LogSet.m_TimeZone = 'Z'; + } + else { + Log.m_LogSet.m_TimeZone = 'I'; + } + + Log.m_LogSet.m_AutoSave = AutoSave->Checked; + Log.m_LogSet.m_CheckBand = RGDupe->ItemIndex; + + Log.m_LogSet.m_THRTTY = THRTTY->Text; + Log.m_LogSet.m_THSSTV = THSSTV->Text; + Log.m_LogSet.m_THTZ = THTZ->ItemIndex; + Log.m_LogSet.m_ClipRSTADIF = ClipRSTADIF->Checked; + Log.m_LogSet.m_DateType = DateType->ItemIndex; + Log.m_LogSet.m_Backup = CBBackup->Checked; + Log.m_LogSet.m_FSKNR = CBFSKNR->Checked; + + sys.m_AutoTimeOffset = AutoZone->Checked; + sys.m_TimeOffset = UDOffset->Position; + sys.m_TimeOffsetMin = UDMin->Position; + if( sys.m_AutoTimeOffset ){ + SetTimeOffsetInfo(sys.m_TimeOffset, sys.m_TimeOffsetMin); + } + sys.m_LogLink = RGLink->ItemIndex; + LogLink.SetPolling(CBPoll->Checked); + LogLink.SetPTTEnabled(CBPTT->Checked); + if( CBMMLink->ItemIndex >= 0 ){ + LogLink.SetItemName(AnsiString(CBMMLink->Items->Strings[CBMMLink->ItemIndex]).c_str()); //ja7ude 0428 + } + sys.m_TempDelay = CBTDelay->ItemIndex; + r = TRUE; + } + PageIndex = GetActiveIndex(Page); + return r; +} +//--------------------------------------------------------------------- +void __fastcall TLogSetDlg::ClearOffClick(TObject *Sender) +{ + UDOffset->Position = 0; + UDMin->Position = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TLogSetDlg::AutoZoneClick(TObject *Sender) +{ + if( AutoZone->Checked ){ + int hour, min; + SetTimeOffsetInfo(hour, min); + UDOffset->Position = short(hour); + UDMin->Position = short(min); + } + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TLogSetDlg::RGLinkClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + UpdateUI(); +} +//--------------------------------------------------------------------------- + diff --git a/LogSet.dfm b/LogSet.dfm new file mode 100644 index 0000000000000000000000000000000000000000..d55cd06439523d1c28418c566d882c4d020d1320 GIT binary patch literal 5592 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 R-?y{}=7yF8I5`L*^j})*g#7>j literal 0 HcmV?d00001 diff --git a/LogSet.h b/LogSet.h new file mode 100644 index 0000000..9c50352 --- /dev/null +++ b/LogSet.h @@ -0,0 +1,125 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef LogSetH +#define LogSetH +//---------------------------------------------------------------------------- +// JA7UDE 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "LogFile.h" +#include "MMLink.h" +//---------------------------------------------------------------------------- +class TLogSetDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TPageControl *Page; + TTabSheet *TabFlag; + TGroupBox *GrpConv; + TCheckBox *UpperName; + TCheckBox *UpperQTH; + TCheckBox *UpperREM; + TCheckBox *UpperQSL; + TGroupBox *GrpCopy; + TCheckBox *CopyName; + TCheckBox *CopyQTH; + TCheckBox *CopyREM; + TCheckBox *CopyQSL; + TRadioGroup *CopyHis; + TRadioGroup *CopyFreq; + TGroupBox *GB5; + TCheckBox *DefMyRST; + TRadioGroup *TimeZone; + TTabSheet *TabConv; + TGroupBox *GB1; + TGroupBox *GB2; + TCheckBox *ClipRSTADIF; + TTabSheet *TabMisc; + TGroupBox *GTime; + TEdit *TimeOff; + TUpDown *UDOffset; + TRadioGroup *DateType; + TEdit *MinOff; + TUpDown *UDMin; + TLabel *Label4; + TLabel *Label5; + TButton *ClearOff; + TCheckBox *AutoSave; + TCheckBox *AutoZone; + TGroupBox *GB3; + TRadioGroup *RGLink; + TCheckBox *CBPoll; + TRadioGroup *THTZ; + TRadioGroup *RGDupe; + TLabel *LLink; + TCheckBox *CBRemC; + TComboBox *CBMMLink; + TLabel *LT; + TCheckBox *CBFSKNR; + TGroupBox *GB7; + TLabel *L1; + TComboBox *CBTDelay; + TLabel *L2; + TCheckBox *CBBackup; + TCheckBox *CBPTT; + TGroupBox *GB9; + TLabel *Label2; + TEdit *THRTTY; + TLabel *Label3; + TEdit *THSSTV; + void __fastcall ClearOffClick(TObject *Sender); + void __fastcall AutoZoneClick(TObject *Sender); + + + + void __fastcall RGLinkClick(TObject *Sender); + +private: + int m_DisEvent; + AnsiString m_MacroStr[5]; + WORD m_MacroKey[5]; + + CMMList m_MMList; + + void __fastcall MacroBtnClick(int n); + void __fastcall UpdateUI(void); + +public: + virtual __fastcall TLogSetDlg(TComponent* AOwner); + + int __fastcall Execute(void); + +}; +//---------------------------------------------------------------------------- +//extern TLogSetDlg *LogSetDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/Loglink.cpp b/Loglink.cpp new file mode 100644 index 0000000..925d36a --- /dev/null +++ b/Loglink.cpp @@ -0,0 +1,865 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include //ja7ude 0521 +#pragma hdrstop + +#define MMSSTV 1 // MMTTYでは0 +#if MMSSTV +#include "Main.h" +#endif + +#include "LogLink.h" +CLogLink LogLink; +//--------------------------------------------------------------------------- +// CLogLinkクラス +CLogLink::CLogLink() +{ + m_Enabled = FALSE; + m_Count = m_Count2 = 0; + m_hLog = NULL; + m_hLogIn = NULL; + m_CStat = 0; + m_hApp = NULL; + m_hMain = NULL; + m_Error = 0; + m_1stSession = TRUE; + m_fHLV5 = TRUE; + + m_Polling = 1; + m_PTTEnabled = FALSE; + + m_AStat = FALSE; + m_MMStat = FALSE; + m_pLink = NULL; + m_strMode[0] = 0; +} + +CLogLink::~CLogLink() +{ + CloseMMLink(); +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::CloseMMLink(void) +{ + if( m_pLink != NULL ){ + delete m_pLink; + m_pLink = NULL; + } +} +//--------------------------------------------------------------------------- +// 送信用ウインドウハンドルの設定 +void CLogLink::SetHandle(HWND hMain, UINT uMsg) +{ + m_hMain = hMain; + m_uMsg = uMsg; + m_hApp = Application->Handle; + if( m_pLink == NULL ) return; + m_pLink->SetHandle(hMain, uMsg); +} +//--------------------------------------------------------------------------- +BOOL __fastcall CLogLink::IsLink(void) +{ + switch(m_Enabled){ + case 1: + return m_hLog != NULL ? TRUE : FALSE; + case 2: + return m_MMStat; + default: + return FALSE; + } +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall CLogLink::GetSessionName(void) +{ + switch(m_Enabled){ + case 1: +// return "Turbo HAMLOG/Win"; + return m_AppName.c_str(); + case 2: + if( m_pLink == NULL ) return NULL; + return m_pLink->GetSessionName(); + default: + return NULL; + } +} +//--------------------------------------------------------------------------- +// リンクの許可設定 +void CLogLink::UpdateLink(int sw) +{ + if( (m_Enabled != sw) || + ((m_pLink != NULL) && strcmp(m_ItemName.c_str(), m_pLink->GetItemName()) ) + ){ + m_Enabled = sw; + switch(sw){ + case 0: + m_hLog = NULL; + m_hLogIn = NULL; + CloseMMLink(); + break; + case 1: + m_Count = 0; + m_Error = 0; + CloseMMLink(); + break; + case 2: + m_Count = 0; + m_Error = 0; + if( !m_pLink ){ + m_pLink = new CMMLink(m_hMain, m_uMsg); + } + m_pLink->Open(m_ItemName.c_str()); + break; + } + } +} +//--------------------------------------------------------------------------- +// コールサインを分離 +static void DevCall(AnsiString &CALL, AnsiString &PTB, LPCSTR pCall) +{ + char bf[1024]; + + CALL = ""; + PTB = ""; + strcpy(bf, pCall); + LPSTR pp, p2, t; + t = bf; + if( (pp = strchr(bf, '/')) != NULL ){ // KH6/JE3HHT or JE3HHT/KH6 の形式 + *pp = 0; + pp++; + int LenC = strlen(t); + int LenP = strlen(pp); + if( ((p2 = strchr(pp, '/')) != NULL)|| + (LenC > 7) || + (LenP > 7) || + ((LenC > LenP) && (LenP>3)) || + ((LenC < LenP) && (LenC>3)) + ){ + // HAMLOGでは表現できない表記の場合 + if( p2 != NULL ){ + *p2 = 0; + LenP = strlen(pp); + } + } + if( LenC < LenP ){ + p2 = t; + t = pp; + pp = p2; + } + PTB = pp; + } + CALL = t; +} +//--------------------------------------------------------------------------- +static void __fastcall SetHamlogMode(LPSTR bf) +{ + if( !strcmp(bf, "RTTY") ){ + StrCopy(bf, Log.m_LogSet.m_THRTTY.c_str(), 3); + } + else if( !strcmp(bf, "SSTV") ){ + StrCopy(bf, Log.m_LogSet.m_THSSTV.c_str(), 3); + } + else if( !strcmp(bf, "GMSK") ){ + strcpy(bf, "MSK"); + } + else if( !strcmp(bf, "FSTV") ){ + strcpy(bf, "FTV"); + } + else if( !strcmp(bf, "BPSK") ){ + strcpy(bf, "PSK"); + } + else if( !strcmp(bf, "QPSK") ){ + strcpy(bf, "PSK"); + } +} +//--------------------------------------------------------------------------- +// MM -> HamLog フォーマットの一括変換 +static void MMtoHAMLOG(LPSTR tp, SDMMLOG *sp, BOOL fHLV5) +{ + char bf[512]; + + AnsiString DATE; + AnsiString TIME; + + int CallOrder = FALSE; + + if( sp->btime ){ + int YY = sp->year; + int MM = sp->date / 100; + int DD = sp->date % 100; + int tim = sp->btime / 30; + int HH = tim / 60; + int mm = tim % 60; + char tz = 'J'; + switch(Log.m_LogSet.m_THTZ){ + case 0: + if( !IsJA(sp->call) ){ + JSTtoUTC(YY, MM, DD, HH); + tz = 'U'; + } + break; + case 1: + JSTtoUTC(YY, MM, DD, HH); + tz = 'U'; + break; + default: + break; + } + sprintf(bf, "%02u/%02u/%02u", YY, MM, DD); + DATE = bf; + sprintf(bf, "%02u:%02u%c", HH, mm, tz); + TIME = bf; + } + + AnsiString NAME = sp->name; + AnsiString QTH = sp->qth; + AnsiString REM1 = sp->rem; + AnsiString REM2 = sp->qsl; + + AnsiString CALL; + AnsiString PTB; + + if( fHLV5 ){ // Ver 5.00以降 + CALL = sp->call; + } + else { // Ver 4.xx + strcpy(bf, sp->call); + LPSTR pp, p2, t; + t = bf; + if( (pp = strchr(bf, '/')) != NULL ){ // KH6/JE3HHT or JE3HHT/KH6 の形式 + *pp = 0; + pp++; + int LenC = strlen(t); + int LenP = strlen(pp); + if( ((p2 = strchr(pp, '/')) != NULL)|| + (LenC > 7) || + (LenP > 7) || + ((LenC > LenP) && (LenP>3)) || + ((LenC < LenP) && (LenC>3)) + ){ + // HAMLOGでは表現できない表記の場合 + AddMMLOGKey(REM1, REM2, sp->call, "ToRadio"); + if( p2 != NULL ){ + *p2 = 0; + LenP = strlen(pp); + } + } + if( LenC < LenP ){ + p2 = t; + t = pp; + pp = p2; + CallOrder = TRUE; + } + PTB = pp; + } + else if( strlen(t) > 7 ){ + AddMMLOGKey(REM1, REM2, sp->call, "ToRadio"); + } + CALL = t; + } + strcpy(bf, Log.GetModeString(sp->mode)); + if( !fHLV5 ){ + SetHamlogMode(bf); + } + AnsiString MODE = bf; + + AnsiString HIS, MY; + int l = GetLMode(sp->mode); + if( fHLV5 ){ + HIS = sp->ur; + MY = sp->my; + } + else { + strcpy(bf, sp->ur); + bf[l] = 0; + HIS = bf; + strcpy(bf, sp->my); + bf[l] = 0; + MY = bf; + } + if( sp->ur[l] ) AddMMLOGKey(REM1, REM2, &sp->ur[l], "SN"); + if( sp->my[l] ) AddMMLOGKey(REM1, REM2, &sp->my[l], "RN"); + + strcpy(bf, Log.GetFreqString(sp->band, sp->fq)); + AnsiString FREQ = bf; + + if( !fHLV5 ){ + if( CallOrder && (!strstr(sp->rem, "$DX")) && (!strstr(sp->qsl, "$DX")) ){ + AddMMLOGKey(REM1, REM2, "$DX", NULL); + } + } + + if( sp->etime ){ + int tim = sp->etime / 30; + sprintf(bf, "%02u%02u", tim / 60, tim % 60); + AddMMLOGKey(REM1, REM2, bf, "END"); + } + if( sp->env ){ + sprintf(bf, "%u", sp->env); + AddMMLOGKey(REM1, REM2, bf, "ENV"); + } + AddMMLOGKey(REM1, REM2, sp->pow, "POW"); + if( sp->cq ){ + bf[0] = sp->cq; bf[1] = 0; + AddMMLOGKey(REM1, REM2, bf, "M"); + } + AnsiString CODE; + if( (strlen(sp->opt1) >= 3) && isdigit(sp->opt1[0]) && isdigit(sp->opt1[1]) ){ + CODE = sp->opt1; + } + sprintf(bf, "%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n", + CALL.c_str(), PTB.c_str(), DATE.c_str(), TIME.c_str(), + HIS.c_str(), MY.c_str(), FREQ.c_str(), MODE.c_str(), CODE.c_str(), "", "", + NAME.c_str(), QTH.c_str(), REM1.c_str(), REM2.c_str() + ); + strcpy(tp, bf); +} + +//--------------------------------------------------------------------------- +// ウインドウフォーカスを自身に戻す +void CLogLink::Foreground(void) +{ + if( m_Enabled != 1 ) return; + + ::SetWindowPos(m_hApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + ::SetFocus(m_hApp); +} +//--------------------------------------------------------------------------- +// ログのリンクのチェック +BOOL CLogLink::CheckLink(void) +{ + if( m_Error ) return FALSE; + + switch(m_Enabled){ + case 1: + { + HWND hLog = ::FindWindow("TThwin", NULL); + if( hLog != m_hLog ){ + if( hLog ){ + m_AppVer = 0; + char bf[128]; + LPSTR p; + ::GetWindowText(hLog, bf, sizeof(bf)); + clipsp(bf); + m_AppName = bf; + if( (p = strstr(bf, "Ver")) != NULL ){ + p += 3; + LPSTR t; + for( t = p; *t; t++ ){ + if( (*t != '.') && !isdigit(*t) ) break; + } + *t = 0; + double d; + if( sscanf(p, "%lf", &d) == 1 ){ + m_AppVer = d * 100; + } + } + else { + m_Count = 1000/LINKINTERVAL; + return FALSE; + } + m_fHLV5 = (m_AppVer >= 500); + } + m_hLog = hLog; + m_CStat = TRUE; + } + return m_hLog != NULL ? TRUE : FALSE; + } + case 2: + { + if( m_pLink == NULL ) return FALSE; + m_MMStat = m_pLink->IsConnected(); + if( m_MMStat != m_AStat ){ + m_AStat = m_MMStat; + m_CStat = TRUE; + } + return m_MMStat; + } + default: + return FALSE; + } +} +//--------------------------------------------------------------------------- +// 定期的なログのリンクの監視(200ms毎にコール) +BOOL CLogLink::TimerLogLink(void) +{ + if( !m_Enabled ) return FALSE; + + if( !m_Count ){ + m_Count = 5000/LINKINTERVAL; // 5[s]毎のチェック + BOOL f = m_hLog != NULL; + CheckLink(); + if( m_hLog && !f ) m_1stSession = TRUE; + } + m_Count--; + if( m_CStat ){ + m_CStat = 0; + return TRUE; + } + else { + return FALSE; + } +} +//--------------------------------------------------------------------------- +// 定期的な周波数ポーリング +void CLogLink::EventGetFreq(void) +{ + if( !m_Polling ) return; + + if( !m_Count2 ){ + m_Count2 = 2000/LINKINTERVAL; // 2[s]毎のチェック + switch(m_Enabled){ + case 1: + { + if( m_hLog == NULL ) return; + int af = Application->Active; + m_cds.dwData = 106; + m_cds.cbData = 0; + m_cds.lpData = NULL; + ::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hMain), LPARAM(&m_cds)); + if( af && m_1stSession ) Foreground(); + m_1stSession = FALSE; + + } + break; + case 2: + if( m_pLink == NULL ) return; + m_pLink->EventVFO(); + break; + } + } + m_Count2--; +} +//--------------------------------------------------------------------------- +// 周波数の設定 +void CLogLink::SetFreq(LPSTR pFreq) +{ + if( !CheckLink() ) return; + + switch(m_Enabled){ + case 1: + m_cds.dwData = 6; + m_cds.cbData = strlen(pFreq); + m_cds.lpData = pFreq; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + break; + case 2: + if( m_pLink == NULL ) return; + m_pLink->SetFreq(pFreq); + break; + } +} +//--------------------------------------------------------------------------- +// モードの設定 +void CLogLink::SetMode(LPCSTR pMode) +{ + if( !CheckLink() ) return; + + switch(m_Enabled){ + case 1: + if( pMode && (pMode != m_strMode) ){ + StrCopy(m_strMode, pMode, sizeof(m_strMode)-1); + if( !m_fHLV5 ){ + SetHamlogMode(m_strMode); + } + } + if( m_strMode[0] ){ + m_cds.dwData = 7; + m_cds.cbData = strlen(m_strMode); + m_cds.lpData = m_strMode; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + } + break; + case 2: +// if( m_pLink == NULL ) return; +// m_pLink->SetMode(pMode); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::SetPTT(int ptt) +{ + if( !m_PTTEnabled ) return; + if( !CheckLink() ) return; + switch(m_Enabled){ + case 1: + { + int af = Application->Active; + m_cds.dwData = ptt ? 23 : 24; + m_cds.cbData = 0; + m_cds.lpData = NULL; + ::SendMessage(m_hLog, WM_COPYDATA, af ? WPARAM(m_hApp) : NULL, LPARAM(&m_cds)); + if( af && m_1stSession ) Foreground(); + m_1stSession = FALSE; + } + break; + case 2: + if( !m_pLink ) return; + m_pLink->SetPTT(ptt); + break; + } +} +//--------------------------------------------------------------------------- +// クリア +void CLogLink::Clear(void) +{ + if( !CheckLink() ) return; + + switch(m_Enabled){ + case 1: + { + int af = Application->Active; + m_cds.dwData = 16; + m_cds.cbData = 0; + m_cds.lpData = NULL; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, af ? WPARAM(m_hApp) : NULL, LPARAM(&m_cds)); +// m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, NULL, LPARAM(&m_cds)); + if( !::IsWindow(m_hLogIn) ){ + m_hLog = NULL; + m_CStat = TRUE; + m_Error = TRUE; + } + if( af ) Foreground(); + break; + } + case 2: + m_QueryCall = ""; + if( m_pLink == NULL ) return; + m_pLink->Clear(); + break; + } +} +//--------------------------------------------------------------------------- +// Hamlogにフォーカスを設定 +void CLogLink::SetFocus(void) +{ + if( m_Enabled != 1 ) return; + if( m_hLog == NULL ) return; + if( m_hLogIn == NULL ) return; + + ::SetForegroundWindow(m_hLogIn); +} +//--------------------------------------------------------------------------- +// コールサインの転送 +void CLogLink::SetCall(LPSTR pCall, int sw) +{ + if( !CheckLink() ) return; + + switch(m_Enabled){ + case 1: + { + int af = Application->Active; + Clear(); + if( m_hLog == NULL ) return; +#if MMSSTV + MultProc(); +#endif + + AnsiString CALL; + AnsiString PTB; + + if( m_fHLV5 ){ + CALL = pCall; + m_cds.dwData = IsJA(pCall) ? 26 : 25; + m_cds.cbData = 0; + m_cds.lpData = NULL; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + m_cds.dwData = 0; + if( sw ) m_cds.dwData |= THW_ENTER; + m_cds.cbData = strlen(CALL.c_str()); + m_cds.lpData = CALL.c_str(); + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + } + else { + DevCall(CALL, PTB, pCall); + m_cds.dwData = 0; + if( sw ) m_cds.dwData |= THW_ENTER; + m_cds.cbData = strlen(CALL.c_str()); + m_cds.lpData = CALL.c_str(); + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); +#if MMSSTV + MultProc(); +#endif + m_cds.dwData = 1; + if( sw ) m_cds.dwData |= THW_ENTER; + m_cds.cbData = strlen(PTB.c_str()); + m_cds.lpData = PTB.c_str(); + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + } + if( af ) Foreground(); + } + case 2: + m_QueryCall = pCall; + if( m_pLink == NULL ) return; + m_pLink->Query(pCall); + break; + } +} +//--------------------------------------------------------------------------- +// コールサインの検索 +void CLogLink::FindCall(LPSTR pCall) +{ + if( !CheckLink() ) return; + + switch(m_Enabled){ + case 1: + { + int af = Application->Active; + SetCall(pCall, FALSE); + if( m_hLog == NULL ) return; +#if MMSSTV + MultProc(); +#endif + m_cds.dwData = 17; + m_cds.cbData = 0; + m_cds.lpData = NULL; + ::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + +#if MMSSTV + MultProc(); +#endif + + m_cds.dwData = 115; + m_cds.cbData = 0; + m_cds.lpData = NULL; + ::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hMain), LPARAM(&m_cds)); + if( af ) Foreground(); + } + break; + case 2: + m_QueryCall = pCall; + if( m_pLink == NULL ) return; + m_pLink->Query(pCall); + break; + } +} +//--------------------------------------------------------------------------- +// ログの記録 +// 0-データの設定のみ +// 1-データの設定とRETキー/問い合わせの実行(QSOの開始時) +// 2-書きこみを実行(QSOの終了時) +void CLogLink::Write(SDMMLOG *sp, int sw) +{ + if( !CheckLink() ) return; + + switch(m_Enabled){ + case 1: + { + int af = Application->Active; + if( m_fHLV5 && (sw == 1) ){ + m_cds.dwData = IsJA(sp->call) ? 26 : 25; + m_cds.cbData = 0; + m_cds.lpData = NULL; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + m_cds.dwData = 0; + m_cds.cbData = strlen(sp->call); + m_cds.lpData = sp->call; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + } + char bf[1024]; + MMtoHAMLOG(bf, sp, m_fHLV5); + m_cds.dwData = 15; + if( sw ) m_cds.dwData |= THW_ENTER; + m_cds.cbData = strlen(bf); + m_cds.lpData = bf; + m_hLogIn = (HWND)::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + +#if MMSSTV + MultProc(); +#endif + switch(sw){ + case 1: + m_cds.dwData = 115; + m_cds.cbData = 0; + m_cds.lpData = NULL; + ::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hMain), LPARAM(&m_cds)); + break; + case 2: + m_cds.dwData = 18 | THW_SAVEBOX_OFF; + m_cds.cbData = 0; + m_cds.lpData = NULL; + ::SendMessage(m_hLog, WM_COPYDATA, WPARAM(m_hApp), LPARAM(&m_cds)); + break; + } + if( af ) Foreground(); + } + break; + case 2: + if( m_pLink == NULL ) return; + m_QueryCall = sp->call; + m_pLink->LogWrite(sp, sw); + break; + } +} +//--------------------------------------------------------------------------- +int __fastcall GetLFCount(LPCSTR p) +{ + int n = 0; + for(; *p; p++ ){ + if( *p == LF ) n++; + } + return n; +} +//--------------------------------------------------------------------------- +// Hamlogからの返信メッセージからName,QTH,REM1を得る +int CLogLink::AnaData(SDMMLOG *sp, COPYDATASTRUCT *cp) +{ + BOOL r = FALSE; + + char bf[1024]; + int len = cp->cbData; + if( len >= 1023 ) len = 1023; + if( len && (cp->lpData != NULL) ){ + StrCopy(bf, LPCSTR(cp->lpData), len); + int lfLen = GetLFCount(bf); + LPSTR t, p; + if( len < 10 ){ // 周波数情報 + if( m_Polling ){ + t = SkipSpace(bf); ClipLF(t); clipsp(t); + if( *t ){ + Log.SetFreq(&Log.m_sd, t); + r = 106; + } + } + } + else if( lfLen >= 10 ){ // 検索結果情報 + p = StrDlm(t, bf, LF); // Call + p = StrDlm(t, p, LF); // PTB + p = StrDlm(t, p, LF); // Date + p = StrDlm(t, p, LF); // Time + p = StrDlm(t, p, LF); // His + p = StrDlm(t, p, LF); // My + p = StrDlm(t, p, LF); // Freq + p = StrDlm(t, p, LF); // Mode + p = StrDlm(t, p, LF); // Code + t = SkipSpace(t); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->opt1, t, MLOPT); + r = 115; + } + p = StrDlm(t, p, LF); // GL + p = StrDlm(t, p, LF); // QSL + p = StrDlm(t, p, LF); // Name + if( !sp->name[0] ){ + t = SkipSpace(t); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->name, t, MLNAME); + r = 115; + } + } + p = StrDlm(t, p, LF); // QTH +// if( !sp->qth[0] ){ + if( !sp->qth[0] || !IsJA(sp->call) ){ + t = SkipSpace(t); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->qth, t, MLQTH); + r = 115; + } + } + StrDlm(t, p, LF); // REM1 + if( !sp->rem[0] ){ + t = SkipSpace(t); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->rem, t, MLREM); + r = 115; + } + } + } + } + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::NotifySession(LPCSTR pSession) +{ + if( m_pLink == NULL ) return; + + m_pLink->NotifySession(pSession); + CheckLink(); +} +//--------------------------------------------------------------------------- +int __fastcall CLogLink::QReturn(SDMMLOG *sp, const mmLOGDATA *pLog) +{ + if( pLog == NULL ) return FALSE; + int r = FALSE; + + mmLOGDATA logdata; + memcpy(&logdata, pLog, sizeof(logdata)); + + if( stricmp(logdata.m_Call, m_QueryCall.c_str()) ) return FALSE; + LPSTR t; + if(!sp->name[0] ){ + t = SkipSpace(logdata.m_Name); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->name, t, MLNAME); + r = TRUE; + } + } + if( !sp->qth[0] ){ + t = SkipSpace(logdata.m_QTH); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->qth, t, MLQTH); + r = TRUE; + } + } + if( !sp->rem[0] ){ + t = SkipSpace(logdata.m_Note); ClipLF(t); clipsp(t); + if( *t ){ + StrCopy(sp->rem, t, MLREM); + r = TRUE; + } + } + return r; +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::SetTime(SYSTEMTIME *tp, int sw) +{ + if( m_pLink == NULL ) return; + + m_pLink->SetTime(tp, sw); +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall CLogLink::GetItemName(void) +{ + return m_ItemName.c_str(); +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::SetItemName(LPCSTR pName) +{ + m_ItemName = pName; +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::LoadMMLink(TMemIniFile *pIni) +{ + m_ItemName = pIni->ReadString("MMLink", "Name", ""); +} +//--------------------------------------------------------------------------- +void __fastcall CLogLink::SaveMMLink(TMemIniFile *pIni) +{ + pIni->WriteString("MMLink", "Name", m_ItemName); +} +//--------------------------------------------------------------------------- +BOOL __fastcall CLogLink::IsCopyData(void) +{ + if( m_Enabled != 2 ) return FALSE; + if( !m_pLink ) return FALSE; + return (m_pLink->GetCaps() & capWMCOPYDATA); +} +//--------------------------------------------------------------------------- + diff --git a/Loglink.h b/Loglink.h new file mode 100644 index 0000000..999f98f --- /dev/null +++ b/Loglink.h @@ -0,0 +1,123 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef LogLinkH +#define LogLinkH + +#include +#include +#include + +#include "ComLib.h" +#include "LogConv.h" +#include "MMLink.h" + +#define LINKINTERVAL 200 + +//------------ Command of Hamlog ------------- +#define THW_ENTER 0x10000 +#define THW_FOCUS 0x20000 +#define THW_SAVEBOX_ON 0x40000 +#define THW_SAVEBOX_OFF 0x80000 +#define THW_APPLIHWND 0x100000 + +//--------------------------------------------------------------------------- +// CLogLinkクラス +class CLogLink +{ +private: + int m_Enabled; // リンクの許可 + int m_Polling; // 周波数ポーリング + BOOL m_PTTEnabled; // PTTコントロール + BOOL m_1stSession; + + HWND m_hLog; // Hamlogプログラムのハンドル + HWND m_hLogIn; // Hamlog入力ウインドウのハンドル + + COPYDATASTRUCT m_cds; // インターフェース構造体 + int m_Count; // 監視カウンタ + int m_CStat; // 状態変更セマフォ + int m_Count2; // ポーリングカウンタ + + HWND m_hMain; // メイン画面のウインドウハンドル + HWND m_hApp; // アプリケーションのウインドウハンドル + BOOL m_fHLV5; // Hamlog Ver 5.0 + + int m_Error; + + AnsiString m_ItemName; + AnsiString m_QueryCall; + AnsiString m_AppName; + int m_AppVer; + int m_MMStat; + int m_AStat; + UINT m_uMsg; + + char m_strMode[16]; +public: + CMMLink *m_pLink; +private: + void __fastcall CloseMMLink(void); + +public: + CLogLink(); + ~CLogLink(); + void SetHandle(HWND hMain, UINT uMsg); + BOOL IsEnabled(void){return m_Enabled;}; + void UpdateLink(int sw); + void Foreground(void); + BOOL IsError(void){return m_Error;}; + void ClearError(void){m_Error = 0;}; + BOOL __fastcall IsLink(void); + LPCSTR __fastcall GetSessionName(void); + + BOOL CheckLink(void); + BOOL TimerLogLink(void); + void Clear(void); + void SetFocus(void); + void SetCall(LPSTR pCall, int sw); + void FindCall(LPSTR pCall); + void Write(SDMMLOG *sp, int sw); + int AnaData(SDMMLOG *sp, COPYDATASTRUCT *cp); + + BOOL IsPolling(void){return m_Polling;}; + void SetPolling(int sw){m_Polling = sw;}; + void EventGetFreq(void); + void SetFreq(LPSTR pFreq); + void SetMode(LPCSTR pMode); + void __fastcall SetPTT(int ptt); + + void __fastcall SetTime(SYSTEMTIME *tp, int sw); + +public: + void __fastcall LoadMMLink(TMemIniFile *pIni); + void __fastcall SaveMMLink(TMemIniFile *pIni); + void __fastcall NotifySession(LPCSTR pSession); + int __fastcall QReturn(SDMMLOG *sp, const mmLOGDATA *pLog); + LPCSTR __fastcall GetItemName(void); + void __fastcall SetItemName(LPCSTR pName); + BOOL __fastcall IsCopyData(void); + + inline BOOL __fastcall GetPTTEnabled(void){return m_PTTEnabled;}; + inline void __fastcall SetPTTEnabled(BOOL e){m_PTTEnabled = e;}; +}; +extern CLogLink LogLink; +#endif + diff --git a/MMCG.DEF b/MMCG.DEF new file mode 100644 index 0000000..b78a832 --- /dev/null +++ b/MMCG.DEF @@ -0,0 +1,1776 @@ +!=========================================================================== +! AJA番号定義ファイル For MMTTY, MMSSTV, MMVARI +! +!※ 読みは<,>で区切って複数個記述する事ができます。ひらがなやカタカナ +! を記述しても良いでしょう。 +! +! 例> 2509 高槻市 TAKATUKI,たかつき,タカツキ,タカツキ +! +! ただし、あまりファイルサイズが大きくなると、レスポンスが悪くなり +! ますので注意が必要です。 +! +!※ このファイルをネット等に流通させる場合は、変更履歴を追加記載する +! 事をお勧めします。 +! +!<<<変更履歴>>> +! Feb 4, 1996 - 1029(あきる野市)追加 JE3HHT +! Jun 5, 1997 - 0134(北広島市)追加 JE3HHT +! Jun 5, 1997 - 2212(京田辺市)追加 JE3HHT +! Jan 10, 2000 - 0135,1231,1343,1422,2722,4029追加 +! SBAE=>SABAE,SINNANJO=>SINNANYOU,UDO=>UTO +! 27017,01029消滅 JQ3UDL +! Aug 25, 2010 - JARL公開のリストから再構築 JE3HHT +!========================================================================== +01 % HOKKAIDO +0101 札幌市 SAPPORO +0102 旭川市 ASAHIKAWA +0103 小樽市 OTARU +0104 函館市 HAKODATE +0105 室蘭市 MURORAN +0106 釧路市 KUSIRO +0107 帯広市 OBIHIRO +0108 北見市 KITAMI +0109 夕張市 YUBARI +0110 岩見沢市 IWAMIZAWA +0111 網走市 ABASIRI +0112 留萌市 RUMOI +0113 苫小牧市 TOMAKOMAI +0114 稚内市 WAKKANAI +0115 美唄市 BIBAI +0116 芦別市 ASIBETU +0117 江別市 EBETU +0118 赤平市 AKABIRA +0119 紋別市 MOMBETU +0120 士別市 SIBETU +0121 名寄市 NAYORO +0122 三笠市 MIKASA +0123 根室市 NEMURO +0124 千歳市 CITOSE +0125 滝川市 TAKIKAWA +0126 砂川市 SUNAGAWA +0127 歌志内市 UTASINAI +0128 深川市 FUKAGAWA +0129 富良野市 FURANO +0130 登別市 NOBORIBETU +0131 恵庭市 ENIWA +0132 亀田市* +0133 伊達市 DATE +0134 北広島市 KITAHIROSIMA +0135 石狩市 ISIKARI +0136 北斗市 HOKUTO +01001 阿寒群 AKAN +01002 足寄群 ASHORO +01003 厚岸群 ATUKESI +01004 厚田群* +01005 網走群 ABASIRI +01006 虻田群(後志) ABUTA,SIRIBESI +01007 虻田群(胆振) ABUTA,IBURI +01008 石狩群 ISIKARI +01009 磯谷群 ISOYA +01010 岩内群 IWANAI +01011 有珠群 USU +01012 歌棄群* +01013 浦河群 URAKAWA +01014 雨竜群(空知) URYU,SORACI +01015 枝幸群 ESASI +01016 奥尻群 OKUSIRI +01017 忍路群* +01018 河西群 KASAI +01019 河東群 KATO +01020 樺戸群 KABATO +01021 上磯群 KAMIISO +01022 上川群(十勝) KAMIKAWA,TOKACI +01023 上川群(上川) KAMIKAWA +01024 亀田群 KAMEDA +01025 茅部群 KAYABE +01026 川上群 KAWAKAMI +01027 釧路群 KUSIRO +01028 久遠群 KUDO +01029 札幌群* +01030 様似群 SAMANI +01031 沙流群 SARU +01032 静内群* +01033 標津群 SIBETU +01034 島牧群 SIMAMAKI +01035 積丹群 SHAKOTAN +01036 斜里群 SHARI +01037 白老群 SIRAOI +01038 白糠群 SIRANUKA +01039 寿都群 SUTTU +01040 瀬棚群 SETANA +01041 宗谷群 SOYA +01042 空知群(空知) SORACI +01043 空知群(上川) SORACI,KAMIKAWA +01044 千歳群* +01045 天塩群(留萌) TESIO,RUMOI +01046 天塩群(宗谷) TESIO,SOYA +01047 十勝群 TOKACI +01048 常呂群 TOKORO +01049 苫前群 TOMAMAE +01050 中川群(上川) NAKAGAWA,KAMIKAWA +01051 中川群(十勝) NAKAGAWA,TOKACI +01052 新冠群 NIIKAPPU +01053 爾志群 NISI +01054 根室群* +01055 野付群 NOTUKE +01056 花咲群* +01057 浜益群* +01058 美国群* +01059 檜山群 HIYAMA +01060 広尾群 HIROO +01061 太櫓群* +01062 古宇群 FURUU +01063 古平群 FURUBIRA +01064 幌泉群 HOROIZUMI +01065 幌別群* +01066 増毛群 MASIKE +01067 松前群 MATUMAE +01068 三石群* +01069 目梨群 MENASI +01070 紋別群 MOMBETU +01071 山越群 YAMAKOSI +01072 夕張群 YUBARI +01073 勇払群(胆振) YUFUTU,IBURI +01074 勇払群(上川) YUFUTU,KAMIKAWA +01075 余市群 YOICI +01076 利尻群 RISIRI +01077 留萌群 RUMOI +01078 礼文群 REBUN +01079 二海群 FUTAMI +01080 日高群 HIDAKA +01081 雨竜群(上川) URYU,KAMIKAWA +010101 札幌市中央区 CHUO +010102 札幌市北区 KITA +010103 札幌市東区 HIGASI +010104 札幌市白石区 SIROISI +010105 札幌市豊平区 TOYOHIRA +010106 札幌市南区 MINAMI +010107 札幌市西区 NISI +010108 札幌市厚別区 ATUBETU +010109 札幌市手稲区 TEINE +010110 札幌市清田区 KIYOTA +02 % AOMORI +0201 青森市 AOMORI +0202 弘前市 HIROSAKI +0203 八戸市 HACINOHE +0204 黒石市 KUROISI +0205 五所川原市 GOSHOGAWARA +0206 十和田市 TOWADA +0207 三沢市 MISAWA +0208 むつ市 MUTU +0209 つがる市 TUGARU +0210 平川市 HIRAKAWA +02001 上北群 KAMIKITA +02002 北津軽群 KITATUGARU +02003 三戸群 SANNOHE +02004 下北群 SIMOKITA +02005 中津軽群 NAKATUGARU +02006 西津軽群 NISITUGARU +02007 東津軽群 HIGASITUGARU +02008 南津軽群 MINAMITUGARU +03 % IWATE +0301 盛岡市 MORIOKA +0302 釜石市 KAMAISI +0303 宮古市 MIYAKO +0304 一関市 ICINOSEKI +0305 大船渡市 OFUNATO +0306 水沢市* +0307 花巻市 HANAMAKI +0308 北上市 KITAKAMI +0309 久慈市 KUJI +0310 遠野市 TONO +0311 陸前高田市 RIKUZENTAKATA +0312 江刺市* +0313 二戸市 NINOHE +0314 八幡平市 HACIMANTAI +0315 奥州市 OSHU +03001 胆沢群 ISAWA +03002 岩手群 IWATE +03003 江刺群* +03004 上閉伊群 KAMIHEI +03005 九戸群 KUNOHE +03006 気仙群 KESEN +03007 下閉伊群 SIMOHEI +03008 紫波群 SIWA +03009 西磐井群 NISIIWAI +03010 二戸群 NINOHE +03011 稗貫群* +03012 東磐井群 HIGASIIWAI +03013 和賀群 WAGA +04 % AKITA +0401 秋田市 AKITA +0402 能代市 NOSIRO +0403 大館市 ODATE +0404 横手市 YOKOTE +0405 本荘市* +0406 男鹿市 OGA +0407 湯沢市 YUZAWA +0408 大曲市* +0409 鹿角市 KAZUNO +0410 由利本荘市 YURIHONJO +0411 潟上市 KATAGAMI +0412 大仙市 DAISEN +0413 北秋田市 KITAAKITA +0414 にかほ市 NIKAHO +0415 仙北市 SENBOKU +04001 雄勝群 OGACI +04002 鹿角群 KAZUNO +04003 河辺群* +04004 北秋田群 KITAAKITA +04005 仙北群 SEMBOKU +04006 平鹿群* +04007 南秋田群 MINAMIAKITA +04008 山本群 YAMAMOTO +04009 由利群* +05 % YAMAGATA +0501 山形市 YAMAGATA +0502 米沢市 YONEZAWA +0503 鶴岡市 TURUOKA +0504 酒田市 SAKATA +0505 新庄市 SINJO +0506 寒河江市 SAGAE +0507 上山市 KAMINOYAMA +0508 村山市 MURAYAMA +0509 長井市 NAGAI +0510 天童市 TENDO +0511 東根市 HIGASINE +0512 尾花沢市 OBANAZAWA +0513 南陽市 NAN'YO +05001 飽海群 AKUMI +05002 北村山群 KITAMURAYAMA +05003 西置賜群 NISIOKITAMA +05004 西田川群* +05005 西村山群 NISIMURAYAMA +05006 東置賜群 HIGASIOKITAMA +05007 東田川群 HIGASITAGAWA +05008 東村山群 HIGASIMURAYAMA +05009 南置賜群* +05010 南村山群* +05011 最上群 MOGAMI +06 % MIYAZAKI +0601 仙台市 SENDAI +0602 石巻市 ISINOMAKI +0603 塩竈市 SIOGAMA +0604 古川市* +0605 気仙沼市 KESENNUMA +0606 白石市 SIROISI +0607 名取市 NATORI +0608 角田市 KAKUDA +0609 多賀城市 TAGAJO +0610 泉市* +0611 岩沼市 IWANUMA +0612 登米市 TOME +0613 栗原市 KURIHARA +0614 東松島市 HIGASIMATUSIMA +0615 大崎市 OSAKI +06001 伊具群 IGU +06002 牡鹿群 OSIKA +06003 刈田群 KATTA +06004 加美群 KAMI +06005 栗原群* +06006 黒川群 KUROKAWA +06007 志田群* +06008 柴田群 SIBATA +06009 玉造群* +06010 遠田群 TODA +06011 登米群* +06012 名取群* +06013 宮城群 MIYAGI +06014 本吉群 MOTOYOSI +06015 桃生群* +06016 亘理群 WATARI +060101 仙台市青葉区 AOBA +060102 仙台市宮城野区 MIYAGINO +060103 仙台市若林区 WAKABAYASI +060104 仙台市太白区 TAIHAKU +060105 仙台市泉区 IZUMI +07 % FUKUSIMA +0701 福島市 FUKUSIMA +0702 会津若松市 AIZUWAKAMATU +0703 郡山市 KORIYAMA +0704 平市* +0705 白河市 SIRAKAWA +0706 原町市* +0707 須賀川市 SUKAGAWA +0708 喜多方市 KITAKATA +0709 常磐市* +0710 磐城市* +0711 相馬市 SOMA +0712 内郷市* +0713 勿来市* +0714 二本松市 NIHONMATU +0715 いわき市 IWAKI +0716 若松市* +0717 田村市 TAMURA +0718 南相馬市 MINAMISOMA +0719 伊達市 DATE +0720 本宮市 MOTOMIYA +07001 安積群* +07002 安達群 ADACI +07003 石川群 ISIKAWA +07004 石城群* +07005 岩瀬群 IWASE +07006 大沼群 ONUMA +07007 河沼群 KAWANUMA +07008 北会津群* +07009 信夫群* +07010 相馬群 SOMA +07011 伊達群 DATE +07012 田村群 TAMURA +07013 西白河群 NISISIRAKAWA +07014 東白川群 HIGASISIRAKAWA +07015 双葉群 FUTABA +07016 南会津群 MINAMIAIZU +07017 耶麻群 YAMA +08 % NIGATA +0801 新潟市 NIIGATA +0802 長岡市 NAGAOKA +0803 高田市* +0804 三条市 SANJO +0805 柏崎市 KASIWAZAKI +0806 新発田市 SIBATA +0807 新津市* +0808 小千谷市 OJIYA +0809 加茂市 KAMO +0810 十日町市 TOKAMACI +0811 見附市 MITUKE +0812 村上市 MURAKAMI +0813 燕市 TUBAME +0814 直江津市* +0815 栃尾市* +0816 糸魚川市 ITOIGAWA +0817 新井市* +0818 五泉市 GOSEN +0819 両津市* +0820 白根市* +0821 豊栄市* +0822 上越市 JOETU +0823 阿賀野市 AGANO +0824 佐渡市 SADO +0825 魚沼市 UONUMA +0826 南魚沼市 MINAMIUONUMA +0827 妙高市 MYOKO +0828 胎内市 TAINAI +08001 岩船群 IWAFUNE +08002 刈羽群 KARIWA +08003 北魚沼群* +08004 北蒲原群 KITAKAMBARA +08005 古志群* +08006 佐渡群* +08007 三島群 SANTO +08008 中魚沼群 NAKAUONUMA +08009 中蒲原群* +08010 中頸城群* +08011 西蒲原群 NISIKAMBARA +08012 西頸城群* +08013 東蒲原群 HIGASIKAMBARA +08014 東頸城群* +08015 南魚沼群 MINAMIUONUMA +08016 南蒲原群 MINAMIKAMBARA +080101 新潟市北区 KITA +080102 新潟市東区 HIGASI +080103 新潟市中央区 CHUO +080104 新潟市江南区 KONAN +080105 新潟市秋葉区 AKIHA +080106 新潟市南区 MINAMI +080107 新潟市西区 NISI +080108 新潟市西蒲区 NISIKAN +09 % NAGANO +0901 長野市 NAGANO +0902 松本市 MATUMOTO +0903 上田市 UEDA +0904 岡谷市 OKAYA +0905 飯田市 IIDA +0906 諏訪市 SUWA +0907 須坂市 SUZAKA +0908 小諸市 KOMORO +0909 伊那市 INA +0910 駒ヶ根市 KOMAGANE +0911 中野市 NAKANO +0912 大町市 OMACI +0913 飯山市 IIYAMA +0914 茅野市 CINO +0915 塩尻市 SIOJIRI +0916 篠ノ井市* +0917 更埴市* +0918 佐久市 SAKU +0919 千曲市 CIKUMA +0920 東御市 TOUMI +0921 安曇野市 AZUMINO +09001 上伊那群 KAMIINA +09002 上高井群 KAMITAKAI +09003 上水内群 KAMIMINOCI +09004 木曽群 KISO +09005 北安曇群 KITAAZUMI +09006 北佐久群 KITASAKU +09007 更級群* +09008 下伊那群 SIMOINA +09009 下高井群 SIMOTAKAI +09010 下水内群 SIMOMINOCI +09011 諏訪群 SUWA +09012 小県群 CIISAGATA +09013 群(欠番)* +09014 埴科群 HANISINA +09015 東筑摩群 HIGASICIKUMA +09016 南安曇群* +09017 南佐久群 MINAMISAKU +10 % TOKYO +1001 23区* +1002 八王子市 HACIOJI +1003 立川市 TACIKAWA +1004 武蔵野市 MUSASINO +1005 三鷹市 MITAKA +1006 青梅市 OME +1007 府中市 FUCHU +1008 昭島市 AKISIMA +1009 調布市 CHOFU +1010 町田市 MACIDA +1011 小金井市 KOGANEI +1012 小平市 KODAIRA +1013 日野市 HINO +1014 東村山市 HIGASIMURAYAMA +1015 国分寺市 KOKUBUNJI +1016 国立市 KUNITACI +1017 保谷市* +1018 田無市* +1019 福生市 FUSSA +1020 狛江市 KOMAE +1021 東大和市 HIGASIYAMATO +1022 清瀬市 KIYOSE +1023 東久留米市 HIGASIKURUME +1024 武蔵村山市 MUSASIMURAYAMA +1025 多摩市 TAMA +1026 稲城市 INAGI +1027 秋川市* +1028 羽村市 HAMURA +1029 あきる野市 AKIRUNO +1030 西東京市 NISITOKYO +10001 北多摩群* +10002 西多摩群 NISITAMA +10003 南多摩群* +10004 大島支庁群 OSIMA-SICHO +10005 三宅支庁群 MIYAKE-SICHO +10006 八丈支庁群 HACIJO-SICHO +10007 小笠原支庁群 OGASAWARA-SICHO +100101 東京都千代田区 CIYODA +100102 東京都中央区 CHUO +100103 東京都港区 MINATO +100104 東京都新宿区 SINJUKU +100105 東京都文京区 BUNKYO +100106 東京都台東区 TAITO +100107 東京都墨田区 SUMIDA +100108 東京都江東区 KOTO +100109 東京都品川区 SINAGAWA +100110 東京都目黒区 MEGURO +100111 東京都大田区 OTA +100112 東京都世田谷区 SETAGAYA +100113 東京都渋谷区 SIBUYA +100114 東京都中野区 NAKANO +100115 東京都杉並区 SUGINAMI +100116 東京都豊島区 TOSIMA +100117 東京都北区 KITA +100118 東京都荒川区 ARAKAWA +100119 東京都板橋区 ITABASI +100120 東京都練馬区 NERIMA +100121 東京都足立区 ADACI +100122 東京都葛飾区 KATUSIKA +100123 東京都江戸川区 EDOGAWA +11 % KANAGAWA +1101 横浜市 YOKOHAMA +1102 横須賀市 YOKOSUKA +1103 川崎市 KAWASAKI +1104 平塚市 HIRATUKA +1105 鎌倉市 KAMAKURA +1106 藤沢市 FUJISAWA +1107 小田原市 ODAWARA +1108 茅ヶ崎市 CIGASAKI +1109 逗子市 ZUSI +1110 相模原市 SAGAMIHARA +1111 三浦市 MIURA +1112 秦野市 HADANO +1113 厚木市 ATUGI +1114 大和市 YAMATO +1115 伊勢原市 ISEHARA +1116 海老名市 EBINA +1117 座間市 ZAMA +1118 南足柄市 MINAMIASIGARA +1119 綾瀬市 AYASE +11001 愛甲群 AIKO +11002 足柄上群 ASIGARAKAMI +11003 足柄下群 ASIGARASIMO +11004 高座群 KOZA +11005 津久井群* +11006 中群 NAKA +11007 三浦群 MIURA +110101 横浜市鶴見区 TURUMI +110102 横浜市神奈川区 KANAGAWA +110103 横浜市西区 NISI +110104 横浜市中区 NAKA +110105 横浜市南区 MINAMI +110106 横浜市保土ヶ谷区 HODOGAYA +110107 横浜市磯子区 ISOGO +110108 横浜市金沢区 KANAZAWA +110109 横浜市港北区 KOHOKU +110110 横浜市戸塚区 TOTUKA +110111 横浜市港南区 KONAN +110112 横浜市旭区 ASAHI +110113 横浜市緑区 MIDORI +110114 横浜市瀬谷区 SEYA +110115 横浜市栄区 SAKAE +110116 横浜市泉区 IZUMI +110117 横浜市青葉区 AOBA +110118 横浜市都筑区 TUZUKI +110301 川崎市川崎区 KAWASAKI +110302 川崎市幸区 SAIWAI +110303 川崎市中原区 NAKAHARA +110304 川崎市高津区 TAKATU +110305 川崎市多摩区 TAMA +110306 川崎市宮前区 MIYAMAE +110307 川崎市麻生区 ASAO +111001 相模原市緑区 MIDORI +111002 相模原市中央区 CHUO +111003 相模原市南区 MINAMI +12 % CIBA +1201 千葉市 CIBA +1202 銚子市 CHOSI +1203 市川市 ICIKAWA +1204 船橋市 FUNABASI +1205 館山市 TATEYAMA +1206 木更津市 KISARAZU +1207 松戸市 MATUDO +1208 野田市 NODA +1209 佐原市* +1210 茂原市 MOBARA +1211 成田市 NARITA +1212 佐倉市 SAKURA +1213 東金市 TOGANE +1214 八日市場市* +1215 旭市 ASAHI +1216 習志野市 NARASINO +1217 柏市 KASIWA +1218 勝浦市 KATUURA +1219 市原市 ICIHARA +1220 流山市 NAGAREYAMA +1221 八千代市 YACIYO +1222 我孫子市 ABIKO +1223 鴨川市 KAMOGAWA +1224 君津市 KIMITU +1225 鎌ヶ谷市 KAMAGAYA +1226 富津市 FUTTU +1227 浦安市 URAYASU +1228 四街道市 YOTUKAIDO +1229 袖ヶ浦市 SODEGAURA +1230 八街市 YACIMATA +1231 印西市 INZAI +1232 白井市 SIROI +1233 富里市 TOMISATO +1234 南房総市 MINAMIBOSO +1235 匝瑳市 SOSA +1236 香取市 KATORI +1237 山武市 SANMU +1238 いすみ市 ISUMI +12001 安房群 AWA +12002 夷隅群 ISUMI +12003 市原群* +12004 印旛群 INBA +12005 海上群* +12006 香取群 KATORI +12007 君津群* +12008 山武群 SAMBU +12009 匝瑳群* +12010 千葉群* +12011 長生群 CHOSEI +12012 東葛飾群* +120101 千葉市中央区 CHUO +120102 千葉市花見川区 HANAMIGAWA +120103 千葉市稲毛区 INAGE +120104 千葉市若葉区 WAKABA +120105 千葉市緑区 MIDORI +120106 千葉市美浜区 MIHAMA +13 % SAITAMA +1301 浦和市* +1302 川越市 KAWAGOE +1303 熊谷市 KUMAGAYA +1304 川口市 KAWAGUCI +1305 大宮市* +1306 行田市 GYODA +1307 秩父市 CICIBU +1308 所沢市 TOKOROZAWA +1309 飯能市 HANNO +1310 加須市 KAZO +1311 本庄市 HONJO +1312 東松山市 HIGASIMATUYAMA +1313 岩槻市* +1314 春日部市 KASUKABE +1315 狭山市 SAYAMA +1316 羽生市 HANYU +1317 鴻巣市 KONOSU +1318 深谷市 FUKAYA +1319 上尾市 AGEO +1320 与野市* +1321 草加市 SOKA +1322 越谷市 KOSIGAYA +1323 蕨市 WARABI +1324 戸田市 TODA +1325 入間市 IRUMA +1326 鳩ヶ谷市 HATOGAYA +1327 朝霞市 ASAKA +1328 志木市 SIKI +1329 和光市 WAKO +1330 新座市 NIIZA +1331 桶川市 OKEGAWA +1332 久喜市 KUKI +1333 北本市 KITAMOTO +1334 八潮市 YASIO +1335 上福岡市* +1336 富士見市 FUJIMI +1337 三郷市 MISATO +1338 蓮田市 HASUDA +1339 坂戸市 SAKADO +1340 幸手市 SATTE +1341 鶴ヶ島市 TURUGASIMA +1342 日高市 HIDAKA +1343 吉川市 YOSIKAWA +1344 さいたま市 SAITAMA +1345 ふじみ野市 FUJIMINO +13001 入間群 IRUMA +13002 大里群 OSATO +13003 北足立群 KITAADACI +13004 北葛飾群 KITAKATUSIKA +13005 北埼玉群* +13006 児玉群 KODAMA +13007 秩父群 CICIBU +13008 比企群 HIKI +13009 南埼玉群 MINAMISAITAMA +134401 さいたま市西区 NISI +134402 さいたま市北区 KITA +134403 さいたま市大宮区 OMIYA +134404 さいたま市見沼区 MINUMA +134405 さいたま市中央区 CHUO +134406 さいたま市桜区 SAKURA +134407 さいたま市浦和区 URAWA +134408 さいたま市南区 MINAMI +134409 さいたま市緑区 MIDORI +134410 さいたま市岩槻区 IWATUKI +14 % IBARAGI +1401 水戸市 MITO +1402 日立市 HITACI +1403 土浦市 TUCIURA +1404 古河市 KOGA +1405 石岡市 ISIOKA +1406 下館市* +1407 結城市 YUKI +1408 龍ヶ崎市 RYUGASAKI +1409 那珂湊市* +1410 下妻市 SIMOTUMA +1411 水海道市* +1412 常陸太田市 HITACIOTA +1413 勝田市* +1414 高萩市 TAKAHAGI +1415 北茨城市 KITAIBARAKI +1416 笠間市 KASAMA +1417 取手市 TORIDE +1418 岩井市* +1419 牛久市 USIKU +1420 つくば市 TUKUBA +1421 ひたちなか市 HITACINAKA +1422 鹿嶋市 KASIMA +1423 潮来市 ITAKO +1424 守谷市 MORIYA +1425 常陸大宮市 HITACIOMIYA +1426 那珂市 NAKA +1427 筑西市 CIKUSEI +1428 坂東市 BANDOU +1429 稲敷市 INASIKI +1430 かすみがうら市 KASUMIGAURA +1431 桜川市 SAKURAGAWA +1432 神栖市 KAMISU +1433 行方市 NAMEGATA +1434 鉾田市 HOKOTA +1435 常総市 JOSO +1436 つくばみらい市 TUKUBAMIRAI +1437 小美玉市 OMITAMA +14001 稲敷群 INASIKI +14002 鹿島群* +14003 北相馬群 KITASOMA +14004 久慈群 KUJI +14005 猿島群 SASIMA +14006 多賀群* +14007 筑波群* +14008 那珂群 NAKA +14009 行方群* +14010 新治群* +14011 西茨城群* +14012 東茨城群 HIGASIIBARAKI +14013 真壁群* +14014 結城群 YUKI +15 % TOCIGI +1501 宇都宮市 UTUNOMIYA +1502 足利市 ASIKAGA +1503 栃木市 TOCIGI +1504 佐野市 SANO +1505 鹿沼市 KANUMA +1506 日光市 NIKKO +1507 今市市* +1508 小山市 OYAMA +1509 真岡市 MOOKA +1510 大田原市 OTAWARA +1511 矢板市 YAITA +1512 黒磯市* +1513 那須塩原市 NASUSIOBARA +1514 さくら市 SAKURA +1515 那須烏山市 NASUKARASUYAMA +1516 下野市 SIMOTUKE +15001 足利群* +15002 安蘇群* +15003 上都賀群 KAMITUGA +15004 河内群 KAWACI +15005 塩谷群 SIOYA +15006 下都賀群 SIMOTUGA +15007 那須群 NASU +15008 芳賀群 HAGA +16 % GUNMA +1601 前橋市 MAEBASI +1602 高崎市 TAKASAKI +1603 桐生市 KIRYU +1604 伊勢崎市 ISESAKI +1605 太田市 OTA +1606 沼田市 NUMATA +1607 館林市 TATEBAYASI +1608 渋川市 SIBUKAWA +1609 藤岡市 FUJIOKA +1610 富岡市 TOMIOKA +1611 安中市 ANNAKA +1612 みどり市 MIDORI +16001 吾妻群 AGATUMA +16002 碓氷群* +16003 邑楽群 ORA +16004 甘楽群 KANRA +16005 北群馬群 KITAGUMMA +16006 群馬群* +16007 佐波群 SAWA +16008 勢多群* +16009 多野群 TANO +16010 利根群 TONE +16011 新田群* +16012 山田群* +17 % YAMANASI +1701 甲府市 KOFU +1702 富士吉田市 FUJIYOSIDA +1703 塩山市* +1704 都留市 TURU +1705 山梨市 YAMANASI +1706 大月市 OTUKI +1707 韮崎市 NIRASAKI +1708 南アルプス市 MINAMI-ALPS +1709 北杜市 HOKUTO +1710 甲斐市 KAI +1711 笛吹市 FUEFUKI +1712 上野原市 UENOHARA +1713 甲州市 KOSHU +1714 中央市 CHUO +17001 北巨摩群* +17002 北都留群 KITATURU +17003 中巨摩群 NAKAKOMA +17004 西八代群 NISIYATUSIRO +17005 東八代群* +17006 東山梨群* +17007 南巨摩群 MINAMIKOMA +17008 南都留群 MINAMITURU +18 % SIZUOKA +1801 静岡市 SIZUOKA +1802 浜松市 HAMAMATU +1803 沼津市 NUMAZU +1804 清水市* +1805 熱海市 ATAMI +1806 三島市 MISIMA +1807 富士宮市 FUJINOMIYA +1808 伊東市 ITO +1809 島田市 SIMADA +1810 吉原市* +1811 磐田市 IWATA +1812 焼津市 YAIZU +1813 富士市 FUJI +1814 掛川市 KAKEGAWA +1815 藤枝市 FUJIEDA +1816 御殿場市 GOTEMBA +1817 袋井市 FUKUROI +1818 天竜市* +1819 浜北市* +1820 下田市 SIMODA +1821 裾野市 SUSONO +1822 湖西市 KOSAI +1823 伊豆市 IZU +1824 御前崎市 OMAEZAKI +1825 菊川市 KIKUGAWA +1826 伊豆の国市 IZUNOKUNI +1827 牧之原市 MAKINOHARA +18001 安倍群* +18002 引佐群* +18003 庵原群* +18004 磐田群* +18005 小笠群* +18006 賀茂群 KAMO +18007 志太群* +18008 周智群 SHUCI +18009 駿東群 SUNTO +18010 田方群 TAGATA +18011 榛原群 HAIBARA +18012 浜名群* +18013 富士群* +180101 静岡市葵区 AOI +180102 静岡市駿河区 SURUGA +180103 静岡市清水区 SIMIZU +180201 浜松市中区 NAKA +180202 浜松市東区 HIGASI +180203 浜松市西区 NISI +180204 浜松市南区 MINAMI +180205 浜松市北区 KITA +180206 浜松市浜北区 HAMAKITA +180207 浜松市天竜区 TENRYU +19 % GIFU +1901 岐阜市 GIFU +1902 大垣市 OGAKI +1903 高山市 TAKAYAMA +1904 多治見市 TAJIMI +1905 関市 SEKI +1906 中津川市 NAKATUGAWA +1907 美濃市 MINO +1908 瑞浪市 MIZUNAMI +1909 羽島市 HASIMA +1910 恵那市 ENA +1911 美濃加茂市 MINOKAMO +1912 土岐市 TOKI +1913 各務原市 KAKAMIGAHARA +1914 可児市 KANI +1915 山県市 YAMAGATA +1916 瑞穂市 MIZUHO +1917 飛騨市 HIDA +1918 本巣市 MOTOSU +1919 郡上市 GUJO +1920 下呂市 GERO +1921 海津市 KAIZU +19001 安八群 AMPACI +19002 稲葉群* +19003 揖斐群 IBI +19004 恵那群* +19005 大野群 ONO +19006 海津群* +19007 可児群 KANI +19008 加茂群 KAMO +19009 郡上群* +19010 土岐群* +19011 羽島群 HASIMA +19012 不破群 FUWA +19013 益田群* +19014 武儀群* +19015 本巣群 MOTOSU +19016 山県群* +19017 養老群 YORO +19018 吉城群* +20 % AICI +2001 名古屋市 NAGOYA +2002 豊橋市 TOYOHASI +2003 岡崎市 OKAZAKI +2004 一宮市 ICINOMIYA +2005 瀬戸市 SETO +2006 半田市 HANDA +2007 春日井市 KASUGAI +2008 豊川市 TOYOKAWA +2009 津島市 TUSIMA +2010 碧南市 HEKINAN +2011 刈谷市 KARIYA +2012 豊田市 TOYOTA +2013 安城市 ANJO +2014 西尾市 NISIO +2015 蒲郡市 GAMAGORI +2016 犬山市 INUYAMA +2017 常滑市 TOKONAME +2018 守山市* +2019 江南市 KONAN +2020 尾西市* +2021 小牧市 KOMAKI +2022 稲沢市 INAZAWA +2023 新城市 SINSIRO +2024 東海市 TOKAI +2025 大府市 OBU +2026 知多市 CITA +2027 高浜市 TAKAHAMA +2028 知立市 CIRYU +2029 尾張旭市 OWARIASAHI +2030 岩倉市 IWAKURA +2031 豊明市 TOYOAKE +2032 日進市 NISSIN +2033 田原市 TAHARA +2034 愛西市 AISAI +2035 清須市 KIYOSU +2036 北名古屋市 KITANAGOYA +2037 弥富市 YATOMI +2038 みよし市 MIYOSI +2039 あま市 AMA +20001 愛知群 AICI +20002 渥美群* +20003 海部群 AMA +20004 北設楽群 KITASITARA +20005 知多群 CITA +20006 中島群* +20007 西春日井群 NISIKASUGAI +20008 西加茂群* +20009 丹羽群 NIWA +20010 額田群 NUKATA +20011 葉栗群* +20012 幡豆群 HAZU +20013 東春日井群* +20014 東加茂群* +20015 碧海群* +20016 宝飯群* +20017 南設楽群* +20018 八名群* +200101 名古屋市千種区 CIKUSA +200102 名古屋市東区 HIGASI +200103 名古屋市北区 KITA +200104 名古屋市西区 NISI +200105 名古屋市中村区 NAKAMURA +200106 名古屋市中区 NAKA +200107 名古屋市昭和区 SHOWA +200108 名古屋市瑞穂区 MIZUHO +200109 名古屋市熱田区 ATUTA +200110 名古屋市中川区 NAKAGAWA +200111 名古屋市港区 MINATO +200112 名古屋市南区 MINAMI +200113 名古屋市守山区 MORIYAMA +200114 名古屋市緑区 MIDORI +200115 名古屋市名東区 MEITO +200116 名古屋市天白区 TENPAKU +21 % MIE +2101 津市 TU +2102 四日市市 YOKKAICI +2103 伊勢市 ISE +2104 松阪市 MATUSAKA +2105 桑名市 KUWANA +2106 上野市* +2107 鈴鹿市 SUZUKA +2108 名張市 NABARI +2109 尾鷲市 OWASE +2110 亀山市 KAMEYAMA +2111 鳥羽市 TOBA +2112 熊野市 KUMANO +2113 久居市* +2114 宇治山田市* +2115 いなべ市 INABE +2116 志摩市 SIMA +2117 伊賀市 IGA +21001 安芸群* +21002 安濃群* +21003 阿山群* +21004 飯南群* +21005 一志群* +21006 員弁群 INABE +21007 河芸群* +21008 北牟婁群 KITAMURO +21009 桑名群 KUWANA +21010 志摩群* +21011 鈴鹿群* +21012 多気群 TAKI +21013 名賀群* +21014 三重群 MIE +21015 南牟婁群 MINAMIMURO +21016 度会群 WATARAI +22 % KYOTO +2201 京都市 KYOTO +2202 福知山市 FUKUCIYAMA +2203 舞鶴市 MAIZURU +2204 綾部市 AYABE +2205 宇治市 UJI +2206 宮津市 MIYAZU +2207 亀岡市 KAMEOKA +2208 城陽市 JOYO +2209 長岡京市 NAGAOKAKYO +2210 向日市 MUKO +2211 八幡市 YAWATA +2212 京田辺市 KYOTANABE +2213 京丹後市 KYOTANGO +2214 南丹市 NANTAN +2215 木津川市 KIZUGAWA +22001 天田群* +22002 何鹿群* +22003 乙訓群 OTOKUNI +22004 加佐群* +22005 北桑田群* +22006 久世群 KUSE +22007 熊野群* +22008 相楽群 SORAKU +22009 竹野群* +22010 綴喜群 TUZUKI +22011 中群* +22012 船井群 FUNAI +22013 南桑田群* +22014 与謝群 YOZA +220101 京都市北区 KITA +220102 京都市上京区 KAMIGYO +220103 京都市左京区 SAKYO +220104 京都市中京区 NAKAGYO +220105 京都市東山区 HIGASIYAMA +220106 京都市下京区 SIMOGYO +220107 京都市南区 MINAMI +220108 京都市右京区 UKYO +220109 京都市伏見区 FUSIMI +220110 京都市山科区 YAMASINA +220111 京都市西京区 NISIKYO +23 % SIGA +2301 大津市 OTU +2302 彦根市 HIKONE +2303 長浜市 NAGAHAMA +2304 近江八幡市 OMIHACIMAN +2305 八日市市* +2306 草津市 KUSATU +2307 守山市 MORIYAMA +2308 栗東市 RITTO +2309 甲賀市 KOKA +2310 野洲市 YASU +2311 湖南市 KONAN +2312 高島市 TAKASIMA +2313 東近江市 HIGASIOUMI +2314 米原市 MAIBARA +23001 伊香群* +23002 犬上群 INUKAMI +23003 愛知群 ECI +23004 蒲生群 GAMOU +23005 神崎群* +23006 栗太群* +23007 甲賀群* +23008 坂田群* +23009 滋賀群* +23010 高島群* +23011 東浅井群* +23012 野洲群* +24 % NARA +2401 奈良市 NARA +2402 大和高田市 YAMATOTAKADA +2403 大和郡山市 YAMATOKORIYAMA +2404 天理市 TENRI +2405 橿原市 KASIHARA +2406 桜井市 SAKURAI +2407 五條市 GOJO +2408 御所市 GOSE +2409 生駒市 IKOMA +2410 香芝市 KASIBA +2411 葛城市 KATURAGI +2412 宇陀市 UDA +24001 生駒群 IKOMA +24002 宇陀群 UDA +24003 宇智群* +24004 北葛城群 KITAKATURAGI +24005 磯城群 SIKI +24006 添上群* +24007 高市群 TAKAICI +24008 南葛城群* +24009 山辺群 YAMABE +24010 吉野群 YOSINO +25 % OSAKA +2501 大阪市 OSAKA +2502 堺市 SAKAI +2503 岸和田市 KISIWADA +2504 豊中市 TOYONAKA +2505 布施市* +2506 池田市 IKEDA +2507 吹田市 SUITA +2508 泉大津市 IZUMIOTU +2509 高槻市 TAKATUKI +2510 貝塚市 KAIZUKA +2511 守口市 MORIGUCI +2512 枚方市 HIRAKATA +2513 茨木市 IBARAKI +2514 八尾市 YAO +2515 泉佐野市 IZUMISANO +2516 富田林市 TONDABAYASI +2517 寝屋川市 NEYAGAWA +2518 河内長野市 KAWACINAGANO +2519 枚岡市* +2520 河内市* +2521 松原市 MATUBARA +2522 大東市 DAITO +2523 和泉市 IZUMI +2524 箕面市 MINO +2525 柏原市 KASIWARA +2526 羽曳野市 HABIKINO +2527 門真市 KADOMA +2528 摂津市 SETTU +2529 藤井寺市 FUJIIDERA +2530 高石市 TAKAISI +2531 東大阪市 HIGASIOSAKA +2532 泉南市 SENNAN +2533 四條畷市 SIJONAWATE +2534 交野市 KATANO +2535 大阪狭山市 OSAKASAYAMA +2536 阪南市 HANNAN +25001 北河内群* +25002 泉南群 SENNAN +25003 泉北群 SENBOKU +25004 豊能群 TOYONO +25005 中河内群* +25006 三島群 MISIMA +25007 南河内群 MINAMIKAWACI +250101 大阪市北区 KITA +250102 大阪市都島区 MIYAKOJIMA +250103 大阪市福島区 FUKUSIMA +250104 大阪市此花区 KONOHANA +250105 大阪市東区* +250106 大阪市西区 NISI +250107 大阪市港区 MINATO +250108 大阪市大正区 TAISHO +250109 大阪市天王寺区 TENNOJI +250110 大阪市南区* +250111 大阪市浪速区 NANIWA +250112 大阪市大淀区* +250113 大阪市西淀川区 NISIYODOGAWA +250114 大阪市東淀川区 HIGASIYODOGAWA +250115 大阪市東成区 HIGASINARI +250116 大阪市生野区 IKUNO +250117 大阪市旭区 ASAHI +250118 大阪市城東区 JOTO +250119 大阪市阿倍野区 ABENO +250120 大阪市住吉区 SUMIYOSI +250121 大阪市東住吉区 HIGASISUMIYOSI +250122 大阪市西成区 NISINARI +250123 大阪市淀川区 YODOGAWA +250124 大阪市鶴見区 TURUMI +250125 大阪市住之江区 SUMINOE +250126 大阪市平野区 HIRANO +250127 大阪市中央区 CHUO +250201 堺市堺区 SAKAI +250202 堺市中区 NAKA +250203 堺市東区 HIGASI +250204 堺市西区 NISI +250205 堺市南区 MINAMI +250206 堺市北区 KITA +250207 堺市美原区 MIHARA +26 % WAKAYAMA +2601 和歌山市 WAKAYAMA +2602 新宮市 SINGU +2603 海南市 KAINAN +2604 田辺市 TANABE +2605 御坊市 GOBO +2606 橋本市 HASIMOTO +2607 有田市 ARIDA +2608 紀の川市 KINOKAWA +2609 岩出市 IWADE +26001 有田群 ARIDA +26002 伊都群 ITO +26003 海草群 KAISO +26004 那賀群* +26005 西牟婁群 NISIMURO +26006 東牟婁群 HIGASIMURO +26007 日高群 HIDAKA +27 % HYOGO +2701 神戸市 KOBE +2702 姫路市 HIMEJI +2703 尼崎市 AMAGASAKI +2704 明石市 AKASI +2705 西宮市 NISINOMIYA +2706 洲本市 SUMOTO +2707 芦屋市 ASIYA +2708 伊丹市 ITAMI +2709 相生市 AIOI +2710 豊岡市 TOYOOKA +2711 加古川市 KAKOGAWA +2712 龍野市* +2713 赤穂市 AKO +2714 西脇市 NISIWAKI +2715 宝塚市 TAKARAZUKA +2716 三木市 MIKI +2717 高砂市 TAKASAGO +2718 川西市 KAWANISI +2719 小野市 ONO +2720 三田市 SANDA +2721 加西市 KASAI +2722 篠山市 SASAYAMA +2723 養父市 YABU +2724 丹波市 TANBA +2725 南あわじ市 MINAMIAWAJI +2726 朝来市 ASAGO +2727 淡路市 AWAJI +2728 宍粟市 SISO +2729 加東市 KATO +2730 たつの市 TATUNO +27001 赤穂群 AKOU +27002 朝来群* +27003 有馬群* +27004 出石群* +27005 揖保群 IBO +27006 印南群* +27007 加古群 KAKO +27008 加西群* +27009 加東群* +27010 川辺群 KAWABE +27011 神崎群 KANZAKI +27012 城崎群* +27013 佐用群 SAYO +27014 飾磨群* +27015 宍粟群* +27016 多可群 TAKA +27017 多紀群* +27018 津名群* +27019 氷上群* +27020 美方群 MIKATA +27021 美嚢群* +27022 三原群* +27023 武庫群* +27024 養父群* +270101 神戸市東灘区 HIGASINADA +270102 神戸市灘区 NADA +270103 神戸市兵庫区 HYOGO +270104 神戸市長田区 NAGATA +270105 神戸市須磨区 SUMA +270106 神戸市垂水区 TARUMI +270107 神戸市北区 KITA +270108 神戸市中央区 CHUO +270109 神戸市西区 NISI +270110 神戸市葺合区* +270111 神戸市生田区* +28 % TOYAMA +2801 富山市 TOYAMA +2802 高岡市 TAKAOKA +2803 新湊市* +2804 魚津市 UOZU +2805 氷見市 HIMI +2806 滑川市 NAMERIKAWA +2807 黒部市 KUROBE +2808 砺波市 TONAMI +2809 小矢部市 OYABE +2810 南砺市 NANTO +2811 射水市 IMIZU +28001 射水群* +28002 上新川群* +28003 下新川群 SIMONIIKAWA +28004 中新川群 NAKANIIKAWA +28005 西砺波群* +28006 婦負群* +28007 氷見群* +28008 東砺波群* +29 % FUKUI +2901 福井市 FUKUI +2902 敦賀市 TURUGA +2903 武生市* +2904 小浜市 OBAMA +2905 大野市 ONO +2906 勝山市 KATUYAMA +2907 鯖江市 SABAE +2908 あわら市 AWARA +2909 越前市 ECIZEN +2910 坂井市 SAKAI +29001 足羽群* +29002 今立群 IMADATE +29003 大飯群 OI +29004 大野群* +29005 遠敷群* +29006 坂井群* +29007 敦賀群* +29008 南条群 NANJO +29009 丹生群 NYUU +29010 三方群 MIKATA +29011 吉田群 YOSIDA +29012 三方上中群 MIKATAKAMINAKA +30 % ISIKAWA +3001 金沢市 KANAZAWA +3002 七尾市 NANAO +3003 小松市 KOMATU +3004 輪島市 WAJIMA +3005 珠洲市 SUZU +3006 加賀市 KAGA +3007 羽咋市 HAKUI +3008 松任市* +3009 かほく市 KAHOKU +3010 白山市 HAKUSAN +3011 能美市 NOMI +30001 石川群 ISIKAWA +30002 江沼群* +30003 鹿島群 KASIMA +30004 河北群 KAHOKU +30005 珠洲群* +30006 能美群 NOMI +30007 羽咋群 HAKUI +30008 鳳至群* +30009 鳳珠群 HOUSU +31 % OKAYAMA +3101 岡山市 OKAYAMA +3102 倉敷市 KURASIKI +3103 津山市 TUYAMA +3104 玉野市 TAMANO +3105 児島市* +3106 玉島市* +3107 笠岡市 KASAOKA +3108 西大寺市* +3109 井原市 IBARA +3110 総社市 SOJA +3111 高梁市 TAKAHASI +3112 新見市 NIIMI +3113 備前市 BIZEN +3114 瀬戸内市 SETOUCI +3115 赤磐市 AKAIWA +3116 真庭市 MANIWA +3117 美作市 MIMASAKA +3118 浅口市 ASAKUCI +31001 英田群 AIDA +31002 赤磐群* +31003 浅口群 ASAKUCI +31004 阿哲群* +31005 邑久群* +31006 小田群 ODA +31007 勝田群 KATUTA +31008 川上群* +31009 吉備群* +31010 久米群 KUME +31011 児島群* +31012 後月群* +31013 上道群* +31014 上房群* +31015 都窪群 TUKUBO +31016 苫田群 TOMATA +31017 真庭群 MANIWA +31018 御津群* +31019 和気群 WAKE +31020 加賀群 KAGA +310101 岡山市北区 KITA +310102 岡山市中区 NAKA +310103 岡山市東区 HINAGASI +310104 岡山市南区 MINAMI +32 % SIMANE +3201 松江市 MATUE +3202 浜田市 HAMADA +3203 出雲市 IZUMO +3204 益田市 MASUDA +3205 大田市 ODA +3206 安来市 YASUGI +3207 江津市 GOTU +3208 平田市* +3209 雲南市 UNNAN +32001 安濃群* +32002 海士群* +32003 飯石群 IISI +32004 邑智群 OCI +32005 大原群* +32006 隠岐群 OKI +32007 隠地群* +32008 鹿足群 KANOASI +32009 周吉群* +32010 知夫群* +32011 那賀群* +32012 仁多群 NITA +32013 迩摩群* +32014 能義群* +32015 簸川群 HIKAWA +32016 美濃群* +32017 八束群 YATUKA +33 % YAMAGUCI +3301 山口市 YAMAGUCI +3302 下関市 SIMONOSEKI +3303 宇部市 UBE +3304 萩市 HAGI +3305 徳山市* +3306 防府市 HOFU +3307 下松市 KUDAMATU +3308 岩国市 IWAKUNI +3309 小野田市* +3310 光市 HIKARI +3311 長門市 NAGATO +3312 柳井市 YANAI +3313 美祢市 MINE +3314 新南陽市* +3315 周南市 SHUNAN +3316 山陽小野田市 SAN'YOONODA +33001 厚狭群* +33002 阿武群 ABU +33003 大島群 OSIMA +33004 大津群* +33005 玖珂群 KUGA +33006 熊毛群 KUMAGE +33007 佐波群* +33008 都濃群* +33009 豊浦群* +33010 美祢群* +33011 吉敷群* +34 % TOTTRI +3401 鳥取市 TOTTORI +3402 倉吉市 KURAYOSI +3403 米子市 YONAGO +3404 境港市 SAKAIMINATO +34001 岩美群 IWAMI +34002 気高群* +34003 西伯群 SAIHAKU +34004 東伯群 TOHAKU +34005 日野群 HINO +34006 八頭群 YAZU +35 % HIROSIMA +3501 広島市 HIROSIMA +3502 呉市 KURE +3503 竹原市 TAKEHARA +3504 三原市 MIHARA +3505 尾道市 ONOMICI +3506 因島市* +3507 松永市* +3508 福山市 FUKUYAMA +3509 府中市 FUCHU +3510 三次市 MIYOSI +3511 庄原市 SYOUBARA +3512 大竹市 OTAKE +3513 東広島市 HIGASIHIROSIMA +3514 廿日市市 HATUKAICI +3515 安芸高田市 AKITAKATA +3516 江田島市 ETAJIMA +35001 安芸群 AKI +35002 安佐群* +35003 芦品群* +35004 賀茂群* +35005 甲奴群* +35006 佐伯群* +35007 神石群 JINSEKI +35008 世羅群 SERA +35009 高田群* +35010 豊田群 TOYOTA +35011 沼隈群* +35012 比婆群* +35013 深安群* +35014 双三群* +35015 御調群* +35016 山県群 YAMAGATA +350101 広島市中区 NAKA +350102 広島市東区 HIGASI +350103 広島市南区 MINAMI +350104 広島市西区 NISI +350105 広島市安佐南区 ASAMINAMI +350106 広島市安佐北区 ASAKITA +350107 広島市安芸区 AKI +350108 広島市佐伯区 SAEKI +36 % KAGAWA +3601 高松市 TAKAMATU +3602 丸亀市 MARUGAME +3603 坂出市 SAKAIDE +3604 善通寺市 ZENTUJI +3605 観音寺市 KAN'ONJI +3606 さぬき市 SANUKI +3607 東かがわ市 HIGASIKAGAWA +3608 三豊市 MITOYO +36001 綾歌群 AYAUTA +36002 大川群* +36003 香川群 KAGAWA +36004 木田群 KITA +36005 小豆群 SYOZU +36006 仲多度群 NAKATADO +36007 三豊群* +37 % TOKUSIMA +3701 徳島市 TOKUSIMA +3702 鳴門市 NARUTO +3703 小松島市 KOMATUSIMA +3704 阿南市 ANAN +3705 吉野川市 YOSINOGAWA +3706 阿波市 AWA +3707 美馬市 MIMA +3708 三好市 MIYOSI +37001 阿波群* +37002 板野群 ITANO +37003 麻植群* +37004 海部群 KAIFU +37005 勝浦群 KATUURA +37006 那賀群 NAKA +37007 名西群 MYOZAI +37008 名東群 MYODO +37009 美馬群 MIMA +37010 三好群 MIYOSI +38 % EHIME +3801 松山市 MATUYAMA +3802 今治市 IMABARI +3803 宇和島市 UWAJIMA +3804 八幡浜市 YAWATAHAMA +3805 新居浜市 NIIHAMA +3806 西条市 SAIJO +3807 大洲市 OZU +3808 伊予三島市* +3809 川之江市* +3810 伊予市 IYO +3811 北条市* +3812 東予市* +3813 四国中央市 SIKOKUCHUO +3814 西予市 SEIYO +3815 東温市 TOON +38001 伊予群 IYO +38002 宇摩群* +38003 越智群 OCI +38004 温泉群* +38005 上浮穴群 KAMIUKENA +38006 喜多群 KITA +38007 北宇和群 KITAUWA +38008 周桑群* +38009 新居群* +38010 西宇和群 NISIUWA +38011 東宇和群* +38012 南宇和群 MINAMIUWA +39 % KOCI +3901 高知市 KOCI +3902 室戸市 MUROTO +3903 安芸市 AKI +3904 土佐市 TOSA +3905 須崎市 SUSAKI +3906 中村市* +3907 宿毛市 SUKUMO +3908 土佐清水市 TOSASIMIZU +3909 南国市 NANKOKU +3910 四万十市 SIMANTO +3911 香南市 KONAN +3912 香美市 KAMI +39001 吾川群 AGAWA +39002 安芸群 AKI +39003 香美群* +39004 高岡群 TAKAOKA +39005 土佐群 TOSA +39006 長岡群 NAGAOKA +39007 幡多群 HATA +40 % FUKUOKA +4001 福岡市 FUKUOKA +4002 小倉市* +4003 門司市* +4004 八幡市* +4005 戸畑市* +4006 若松市* +4007 久留米市 KURUME +4008 大牟田市 OMUTA +4009 直方市 NOOGATA +4010 飯塚市 IIZUKA +4011 田川市 TAGAWA +4012 柳川市 YANAGAWA +4013 甘木市* +4014 山田市* +4015 八女市 YAME +4016 筑後市 CIKUGO +4017 大川市 OKAWA +4018 行橋市 YUKUHASI +4019 豊前市 BUZEN +4020 中間市 NAKAMA +4021 北九州市 KITAKYUSHU +4022 小郡市 OGOORI +4023 春日市 KASUGA +4024 筑紫野市 CIKUSINO +4025 大野城市 ONOJO +4026 宗像市 MUNAKATA +4027 太宰府市 DAZAIFU +4028 前原市* +4029 古賀市 KOGA +4030 福津市 FUKUTU +4031 うきは市 UKIHA +4032 宮若市 MIYAWAKA +4033 嘉麻市 KAMA +4034 朝倉市 ASAKURA +4035 みやま市 MIYAMA +4036 糸島市 ITOSIMA +40001 朝倉群 ASAKURA +40002 糸島群* +40003 浮羽群* +40004 遠賀群 ONGA +40005 糟屋群 KASUYA +40006 嘉穂群 KAHO +40007 鞍手群 KURATE +40008 早良群* +40009 田川群 TAGAWA +40010 筑紫群 CIKUSI +40011 築上群 CIKUJO +40012 三井群 MII +40013 三池群* +40014 三潴群 MIZUMA +40015 京都群 MIYAKO +40016 宗像群* +40017 山門群* +40018 八女群 YAME +400101 福岡市東区 HIGASI +400102 福岡市博多区 HAKATA +400103 福岡市中央区 CHUO +400104 福岡市南区 MINAMI +400105 福岡市西区 NISI +400106 福岡市城南区 JONAN +400107 福岡市早良区 SAWARA +402101 北九州市門司区 MOJI +402102 北九州市若松区 WAKAMATU +402103 北九州市戸畑区 TOBATA +402104 北九州市小倉北区 KOKURAKITA +402105 北九州市小倉南区 KOKURAMINAMI +402106 北九州市八幡東区 YAHATAHIGASI +402107 北九州市八幡西区 YAHATANISI +402108 北九州市八幡区* +402109 北九州市小倉区* +41 % SAGA +4101 佐賀市 SAGA +4102 唐津市 KARATU +4103 鳥栖市 TOSU +4104 多久市 TAKU +4105 伊万里市 IMARI +4106 武雄市 TAKEO +4107 鹿島市 KASIMA +4108 小城市 OGI +4109 嬉野市 URESINO +4110 神埼市 KANZAKI +41001 小城群* +41002 神埼群 KANZAKI +41003 杵島群 KISIMA +41004 佐賀群* +41005 西松浦群 NISIMATUURA +41006 東松浦群 HIGASIMATUURA +41007 藤津群 FUJITU +41008 三養基群 MIYAKI +42 % NAGASAKI +4201 長崎市 NAGASAKI +4202 佐世保市 SASEBO +4203 島原市 SIMABARA +4204 諫早市 ISAHAYA +4205 大村市 OMURA +4206 福江市* +4207 平戸市 HIRADO +4208 松浦市 MATUURA +4209 対馬市 TUSIMA +4210 壱岐市 IKI +4211 五島市 GOTO +4212 西海市 SAIKAI +4213 雲仙市 UNZEN +4214 南島原市 MINAMISIMABARA +42001 壱岐群* +42002 上県群* +42003 北高来群* +42004 北松浦群 KITAMATUURA +42005 下県群* +42006 西彼杵群 NISISONOGI +42007 東彼杵群 HIGASISONOGI +42008 南高来群* +42009 南松浦群 MINAMIMATUURA +43 % KUMAMOTO +4301 熊本市 KUMAMOTO +4302 八代市 YATUSIRO +4303 人吉市 HITOYOSI +4304 荒尾市 ARAO +4305 水俣市 MINAMATA +4306 玉名市 TAMANA +4307 本渡市* +4308 山鹿市 YAMAGA +4309 牛深市* +4310 菊池市 KIKUCI +4311 宇土市 UTO +4312 上天草市 KAMIAMAKUSA +4313 宇城市 UKI +4314 阿蘇市 ASO +4315 天草市 AMAKUSA +4316 合志市 KOSI +43001 葦北群 ASIKITA +43002 阿蘇群 ASO +43003 天草群 AMAKUSA +43004 宇土群* +43005 上益城群 KAMIMASIKI +43006 鹿本群* +43007 菊池群 KIKUCI +43008 球磨群 KUMA +43009 下益城群 SIMOMASIKI +43010 玉名群 TAMANA +43011 飽託群* +43012 八代群 YATUSIRO +44 % OITA +4401 大分市 OITA +4402 別府市 BEPPU +4403 中津市 NAKATU +4404 日田市 HITA +4405 佐伯市 SAIKI +4406 臼杵市 USUKI +4407 津久見市 TUKUMI +4408 竹田市 TAKETA +4409 鶴崎市* +4410 豊後高田市 BUNGOTAKADA +4411 杵築市 KITUKI +4412 宇佐市 USA +4413 豊後大野市 BUNGOONO +4414 由布市 YUFU +4415 国東市 KUNISAKI +44001 宇佐群* +44002 大分群* +44003 大野群* +44004 北海部群* +44005 玖珠群 KUSU +44006 下毛群* +44007 直入群* +44008 西国東群* +44009 速見群 HAYAMI +44010 東国東群 HIGASIKUNISAKI +44011 日田群* +44012 南海部群* +45 % MIYAZAKI +4501 宮崎市 MIYAZAKI +4502 都城市 MIYAKONOJO +4503 延岡市 NOBEOKA +4504 日南市 NICINAN +4505 小林市 KOBAYASI +4506 日向市 HYUGA +4507 串間市 KUSIMA +4508 西都市 SAITO +4509 えびの市 EBINO +45001 北諸県群 KITAMOROKATA +45002 児湯群 KOYU +45003 西臼杵群 NISIUSUKI +45004 西諸県群 NISIMOROKATA +45005 東臼杵群 HIGASIUSUKI +45006 東諸県群 HIGASIMOROKATA +45007 南那珂群* +45008 宮崎群* +46 % KAGOSIMA +4601 鹿児島市 KAGOSIMA +4602 川内市* +4603 鹿屋市 KANOYA +4604 枕崎市 MAKURAZAKI +4605 串木野市* +4606 阿久根市 AKUNE +4607 出水市 IZUMI +4608 名瀬市* +4609 大口市* +4610 指宿市 IBUSUKI +4611 加世田市* +4612 国分市* +4613 谷山市* +4614 西之表市 NISINOOMOTE +4615 垂水市 TARUMIZU +4616 薩摩川内市 SATUMASENDAI +4617 日置市 HIOKI +4618 曽於市 SOO +4619 霧島市 KIRISIMA +4620 いちき串木野市 ICIKIKUSIKINO +4621 南さつま市 MINAMISATUMA +4622 志布志市 SIBUSI +4623 奄美市 AMAMI +4624 南九州市 MINAMIKYUSHU +4625 伊佐市 ISA +4626 姶良市 AIRA +46001 姶良群 AIRA +46002 伊佐群* +46003 出水群 IZUMI +46004 揖宿群* +46005 大島群 OSIMA +46006 鹿児島群 KAGOSIMA +46007 川辺群* +46008 肝属群 KIMOTUKI +46009 熊毛群 KUMAGE +46010 薩摩群 SATUMA +46011 曽於群 SOO +46012 日置群* +47 % OKINAWA +4701 那覇市 NAHA +4702 石川市* +4703 平良市* +4704 石垣市 ISIGAKI +4705 コザ市* +4706 宜野湾市 GINOWAN +4707 具志川市* +4708 名護市 NAGO +4709 浦添市 URASOE +4710 糸満市 ITOMAN +4711 沖縄市 OKINAWA +4712 豊見城市 TOMIGUSUKU +4713 うるま市 URUMA +4714 宮古島市 MIYAKOJIMA +4715 南城市 NANJO +47001 国頭群 KUNIGAMI +47002 島尻群 SIMAJIRI +47003 中頭群 NAKAGAMI +47004 宮古群 MIYAKO +47005 八重山群 YAEYAMA diff --git a/MMSSTV.TXT b/MMSSTV.TXT new file mode 100644 index 0000000..8291037 --- /dev/null +++ b/MMSSTV.TXT @@ -0,0 +1,804 @@ +「MMSSTVソフトウエア基本マニュアル」 + + 初版 2001.02.08 Mako, JE3HHT + 改定 2002.06.26 Mako, JE3HHT + + Ver1.01以降の情報は「バージョンアップ情報」に記載してあります。そちらも参照して下さい。 + +========== +◎はじめに +========== + このプログラムはサウンドカードを使ったSSTV送受信ソフトウエアです。元々はPSK31用のサウンドカードのクロック較正用のユーティリティプログラムにするつもりだったのですが、途中から方針を変更してSSTVのプログラムになってしまいました。 + + 私自身が少なくとも1度はこのプログラムで実際にQSOして実績を作ってからVer1.00としてリリースしようと考えていましたが、しばらく趣味の時間がとれなくなる可能性があり、また既にこのプログラムをお使いの方もおられるようですので、今回Ver1.00としてリリースすることにしました。 + + +======================== +◎アンインストールの方法 +======================== + このプログラムはWindowsのレジストリを一切書き換えません。アンインストールする際は、MMSSTVをインストールしたフォルダを丸ごと削除すればOKです。 + + +========== +◎動作環境 +========== + OS Windows95, 98, 98SE, ME + WindowsNT, Windows2000 + サウンドカード 16bit 11025Hz または 22050Hz + ビデオアダプタ 256色以上(16bitまたは24bitカラーが望ましい) + RAM 32MB以上 + + 私が持っているPentium100MHzクラスのディスクトップパソコンでも何とか動作しましたが、できればCPUのクロックは早いほうがFBです。 + + MMSSTVの動作速度はビデオアダプタの性能に大きく依存しますので、例え同じCPUクロックのパソコンでもビデオカードが異なる場合は動作状況が違います。特に256色アダプタをお使いの場合は、パレット演算にCPU時間を消費する傾向がありますので、可能ならば16Bitまたは24Bitカラーを選択することをお勧めします。ビデオアダプタに256色をお使いの場合は、実現される色はそのアダプタのパレット演算能力に依存します。 + + + 動作が厳しい場合は以下の設定を行って下さい。 + + [オプションメニュー -> MMSSTV設定画面] + ・「受信バッファ」をFILEまたはOFFにする + ・サウンドカードのFIFOの数を増やす + ・RxBPFをOFFにする + ・TxBPFのチェックを外す + [表示メニュー] + ・WaterFallをOFFにする + + デフォルトではLoopbackはOFFに設定されています。もしこれを内部または外部に設定すると、送信時に受信動作も同時に行いますので、CPU負荷はそれだけ増大します。動作が厳しい場合は必ずLoopbackはOFFに設定して下さい。 + +--- 重要 --- + 設定画面の「受信」ページの「受信バッファ」は傾き補正や位相ずれ補正を行った際に、受信中または直前に受信した画像を再表示させるのに使います。この領域には約270秒分のサウンドデータを記憶しており、RAMを選択している場合、物理メモリが少ないパソコンでは画像受信中にスワップが発生し、同期ズレを起こしてしまいますので、その場合はFILEまたはOFFを選択すると良いでしょう。 + 特にサンプリング周波数を高く設定している場合は、受信バッファはあなたの予想以上に大きなサイズになります。「自動傾き調整」を使わないのであれば、受信バッファをOFFにしても運用上の大きな不便はないと思います。 + + +=========================== +◎サウンドカードとRigの接続 +=========================== + PSK31やRTTYとまったく同じインターフェースが利用できます。 + + 基本的にはサウンドカードのLine入力にRigのスピーカ出力を、またサウンドカードのOutputをRigのMicまたはData入力に接続します。この時、RigのDataまたはMicラインにはATTを入れてレベルを下げる事をお勧めします。ATTなしで接続した場合はRigのマイクゲインの調整がクリチカルで、送信電波の質も悪くなります。 + + サウンドカード RIG + + Line(or Mic) <---------------- Speaker Out + + Output ------ ATT -----> Rig Data or Mic + +*サウンドカードのMic入力に入れる場合は、ここにもATTを入れる方が良いでしょう。 + + ATTは次のような簡単な構成でOKです。 + + Output ------ R1 ------+---- Data/Mic + | +SoundCard側 R2 Rig側 + | + GND ----------------+---- GND + + Data R1 = 1K, R2 = 100 + Mic R1 = 10K, R2 = 100 + +*上記の回路図には記載していませんが、回り込み防止のために適当なパスコンやフェライトビーズで処理する事をお勧めします。 +*お使いになるRigによって抵抗値を若干調整する必要があるかも知れません。 +*半固定で調整できるようにしておくとRigやソフトの組み合わせが変わっても、レベルを簡単に調整できるのでより便利だと思います。 + + +========= +◎PTT制御 +========= + RigのMic入力にトーンを入れる場合は、Rig側にVOXが備わっていれば、とりあえずそれを使っても良いと思います(ただしメッセージボックスが表示された時にポーンという音が出て一瞬だけ送信状態になる可能性はあります。)。 + + RigのData入力にトーンを入れた場合はVOXが使用できませんので、PTT制御を行う必要が生じます。 + MMSSTVはPTT制御として、RS232C回線のRTSまたはDTRを使用することができます。両方同じ論理でON/OFFしますのでいずれに接続してもOKです。 + +*PTT制御の回線はオプションメニューの設定画面の「送信」のところで設定します。ドロップリストではCOM1〜COM8しか選択できませんが、例えばキーボードからCOM9と入力して任意のポート名を設定する事もできます。 + +*「占有使用」のチェックを付けると、ポートはMMSSTVが占有し続けます。 + +*「RTS while Scan」のチェックを付けると、画像受信中(スキャン中)にもRTS信号をアクティブにします。また画像受信中はTxDをブレーク状態に保ちます。 + + PTT制御回路は例えば一つのトランジスタを使った次のような回路で構成できます。 + + (C)---+---- Rig PTT + Com-DTR -- R1-+---+-(B)< | + (RTS) | | (E) | + D R2 | D + | | | | + Com-GND ------+---+------+----+---- Rig GND + + R1=4.7K, R2=47K + D=1S1588, 1N914, 4148, etc... + Tr=2SC1815, 2N2222, etc... + + Dsub(9pin) RTS(7), DTR(4), GND(5), TXD(3) + Dsub(25pin) RTS(4), DTR(20), GND(7), TXD(2) + +*上記の回路図には記載していませんが、回り込み防止のために適当なパスコンやフェライトビーズで処理する事をお勧めします。 + + お使いのRigがRadio CommandによるPTT制御をサポートしている場合、DTR/RTSラインを使わずに、Radio Commandを使用してPTT制御を行うこともできます。この場合USBアダプタなどのDTR/RTS制御を持たないポートでもPTT制御を利用することができるようになります。詳細は「Radio Command」の項を参照して下さい。 + + +============== +◎SSTVのモード +============== + MMSSTVが準拠対応するSSTVモードは下記の通りです。 + + 名称 時間(s) サイズ 方式 + --------------------------------------------------- + Robot B/W 8 8 160x120 モノトーン + Robot B/W 12 12 160x120 モノトーン + Robot 24 24 160x120 色差 + Robot 36 36 320x240 色差 + Robot 72 72 320x240 色差 + AVT 90 90 320x240 RGB(同期パルスなし) + Scottie 1 110 320x256 RGB + Scottie 2 71 320x256 RGB + Scottie DX 269 320x256 RGB + Martin 1 114 320x256 RGB + Martin 2 58 320x256 RGB + SC2-180 182 320x256 RGB + SC2-120 122 320x256 RGB + SC2-60 62 320x256 RGB + PD50 50 320x256 色差 + PD90 90 320x256 色差 + PD120 126 640x496 色差 + PD160 161 512x400 色差 + PD180 187 640x496 色差 + PD240 248 640x496 色差 + PD290 289 800x616 色差 + P3 203 640x496 RGB + P5 305 640x496 RGB + P7 406 640x496 RGB + +* 日本では私が観察した限り、ほとんどすべての信号が「Scottie 1」です。 +* USでは「Scottie 1」と「Scottie 2」が多く使われているようです。 +* EUでは「Martin 1」と「Martin 2」が多く使われているようです。 + +また以下のモードは現在実験中です。 + + MP73 73 320x256 色差 + MP115 115 320x256 色差 + MP140 140 320x256 色差 + MP175 175 320x256 色差 + MR73 73 320x256 色差 + MR90 90 320x256 色差 + MR115 115 320x256 色差 + MR140 140 320x256 色差 + MR175 175 320x256 色差 + ML180 180 640x496 色差 + ML240 240 640x496 色差 + ML280 280 640x496 色差 + ML320 320 640x496 色差 + +MPモード + PDモードと同じ方式の色差方式のモードで、20mでのマルチパス/ジッタ対策のために設けました。ピクセル当たりのスキャン時間は同一伝送時間の他のモードよりも長いですが、垂直方向の色情報が圧縮されています。 + +MR/MLモード + Robot24/72モードと同じ方式の色差方式のモードで、比較的良好なCondx下で見た目の解像度を得るのが狙いです。水平方向の色情報が圧縮されています。 + + + いずれも方式は新しいものではありませんが、適当な伝送時間と画像サイズを作成しました。新しい試みとして、VIS信号を16ビットに拡張してあります。 + これらのフォーマットの詳細は付属の「mode.txt」を参照して下さい。 + + +================== +◎SSTVの呼出周波数 +================== + 日本では7033(LSB)が良く使われているようです。国際的には下記の周波数が習慣的に使われています。 + + 14.230MHz USB + 21.340MHz USB + 28.680MHz USB + + 私が観察した限り、これら3つの周波数は常に混雑しているようです。従って一旦相手局と連絡を取り合った後は、上下の周波数にQSYしてQSOを楽しまれることをお勧めします。呼び出し周波数でそのままQSOを続行しても、QRMであまり良い結果が得られないと思います。 + + 7033の場合は、QSYするのが困難ですので、そのままQSOが行われています。 + + +====== +◎受信 +====== + +1.トーン周波数 +~~~~~~~~~~~~~~ + SSTVのトーン周波数は次のように定義されています。 + Syncパルス 1200Hz + 画像Lowレベル 1500Hz + 画像Highレベル 2300Hz + + MMSSTVのスペクトラム表示にある4本のマーカーラインの周波数は左から次の順番で表示されます。 + + 一番左(緑) 1200Hz Syncパルス + その次(黄) 1500Hz 画像Lowレベル + その次(黄点線) 1900Hz 画像中間レベル + 一番右(黄) 2300Hz 画像Highレベル + + 周波数を合わせる場合は、スペクトラム表示またはWaterFallを見ながら、信号のエネルギーが1500Hzマーカーと2300Hzマーカーの範囲内に収まるように調整して下さい。またSyncパルスが1200Hzマーカーの上に丁度重なるように合わせてもOKです。ただしSyncパルスは非常に短い信号ですので、馴れるまでは少し見つけ難いかも知れません。 + + 一般のSSTVの運用では、ほとんど固定された周波数でQSOが行われているようですので、一旦周波数を合わせてしまえば、後はRigのダイアルを触る必要はほとんどないと思います。 + +2.自動スタート +~~~~~~~~~~~~~~ + メイン画面のRxModeの「Auto」ボタンをONにしておくと、起動信号を受信して自動的に画像の受信を開始するようになります。 + 起動信号はVIS信号と呼ばれ、1200HzのマーカーとSSTVモードを表すコードが1100Hzと1300HzのFSK(7ビット+Evenパリティ)で送信されます。MMSSTVはこの信号を共振器型のFSKデモジュレータを使用して受信し、MMSSTVが受信可能な画像モードの場合はそのモードで受信を開始します。 + + 設定画面の「自動スタート」で「VIS or Sync」を選択している場合、MMSSTVは1200HzのSyncパルスの時間間隔を計測し、その時間がそれぞれのモードと一致した場合も、そのモードで強制的にスタートします(デフォルトは「VIS or Sync」になっています)。 + + +3.手動スタート +~~~~~~~~~~~~~~ + 運悪く自動スタートできなかった場合、または途中から信号を受信した場合は、メイン画面のRxModeの、いずれかのボタンを押して、手動で画像受信を開始することができます。 + この場合、日本、韓国およびUSでは「Scottie 1」をまずは選択してみると良いでしょう。EUでは「Martin 1」をまずは選択してみます。確率的にそれらのモードが良く運用されているからです。 + + +4.自動停止,自動再スタート,自動再同期 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 設定画面(または受信画面でマウス右ボタンを押す)の「自動停止」をONに設定すると、MMSSTVは画像受信中に同期信号を見失った際に自動的に停止します(AVT90モードを除く)。 + + 設定画面(または受信画面でマウス右ボタンを押す)の「自動再スタート」をONにすると、画像受信中にVIS信号を検出した場合に、再度先頭から受信開始を行います。ただしこの場合のVIS信号の判定はRxBPFの影響を受けて少し厳しくなります。 + + 設定画面(または受信画面でマウス右ボタンを押す)の「自動再同期」をONにすると、途中でタイミングがずれた場合に、そのタイミングで再同期を取ります。ただしこの場合、数本の情報は古いタイミングで表示されますので、タイミングがずれている領域が帯状に表示されます。 + + +5.傾き調整 +~~~~~~~~~~ + MMSSTVはサウンドカードのクロックタイミングでSSTV信号のタイミングを測ります。したがってサウンドカードのクロックがずれている場合や、相手局の信号のタイミングがズレている場合には、受信した画像に傾きが起こります。これを補正するには以下の3つの方法があります。 + + - 高精度傾き調整 + - 自動傾き調整 + - 手動操作による傾き調整 + + 「高精度傾き調整」および「自動傾き調整」は、受信信号のタイミングを解析し自動的に補正します。しかしDX局などの弱い信号やマルチパスで同期信号のタイミングがジッタを含む場合、またQRMがある場合などは、必ずしもあなたの期待通りにはならないかも知れません。 + + なおいずれの方法でも、同期画面の「記憶」ボタンを押さなければ、調整した結果のサンプリング周波数は現在受信中または直前に受信した画像にしか適用されず、次の受信または送信時に元の設定値に戻ります。その周波数を次回の受信時にも適用したい場合は、「記憶」ボタンを押す必要があります。 + + +===[高精度傾き調整]=== + 高精度傾き調整は、現在受信中または直前に受信した信号の、同期位置の直線方程式の解を最小二乗法で求め補正します。受信信号の質が良好な場合、誤差は概ね2ppm以内に収まります。 + + 高精度傾き調整を行うには、同期画面のニコニコボタンを押すか、同期画面または受信画面でマウスの右ボタンをクリックし、ポップアップメニューの中の「高精度傾き調整」を実行します。この機能を使うには少なくとも16掃引分の信号を受信していなければなりません。また掃引数が多くなるほど精度は良くなります。 + +* 受信バッファをOFFにしている場合、高精度傾き調整機能は使用できません。 + +===[自動傾き調整]=== + 自動傾き調整は、受信中の信号の同期間隔を定期的に観測し、そのズレを自動的に検出して補正します。この機能をONにしておくと受信中に勝手に補正されていきますが、高精度傾き調整と比較して精度が少し悪いです。 + + 設定画面の受信ページの「自動傾き調整」のチェックを付けるか、または、メインウインドウの受信画面のマウスの右ボタンを押し、ポップアップメニューの中の「自動傾き調整」のチェックを付けておきます。 + +* 受信バッファをOFFにしている場合、自動傾き調整機能は使用できません。 + +===[手動操作による傾き調整]=== + メイン画面の同期ページを選択し、次の手順を行います。 + 1.「傾き」ボタンを押します + 2.同期信号(白の縦帯)の上右側をクリックします。 + 3.同期信号(白の縦帯)の下右側をクリックします。 + + 同期信号はある程度の幅を持ちますので、2回のクリックでは同じ側をクリックしなければなりません。1回目のクリックの後、補助カーソルが表示されますので、同期信号の帯とその補助カーソルが平行になるようにすると良いでしょう。 + + MMSSTVは上記の操作により得られた傾斜に従って、サウンドカードのサンプリング周波数を計算し、現在受信中または直前に受信した画像を再表示します。もし1回の操作で満足いく結果が得られない場合は、上記の手順を繰り返して下さい。 + + また傾きが小さい状態では、表示メニューの「受信画面を常に表示」のチェックを付け、別の受信画面を表示させた状態で、同期画面上の周波数の横にあるアップダウンボタンを押して画像の傾斜を確認しながら除々に追いこむこともできます。 + +* 受信バッファをOFFにしている場合、傾き調整をした結果の画像を再描画することができません。 + + +6.同期位置の調整 +~~~~~~~~~~~~~~~~ + MMSSTVはAVT90以外のモードでは、手動スタートした場合でも、概ね自動で正しい同期位置に合わせますが、受信信号の状態が悪いと稀に失敗する場合もあります。同期ズレが発生した場合、単に画像がずれるだけではなく、画像の色もおかしくなりますのですぐに判ります。 + + もし同期ズレが発生した場合は、メイン画面のSyncページを選択し、次の手順を行います。 + 1.「位相」ボタンを押します + 2.同期信号(白の縦帯)の左側のすぐ横をクリックします。 + + MMSSTVは指定された位置が一番左端になるように、受信中または受信した画像を再表示します。もし1回の操作で満足いく結果が得られない場合は、上記の手順を繰り返して下さい。 + + AVT90は画像データ内に同期信号が存在しないため、Syncページでは画像の白黒イメージしか表示されませんが、その切れ目(3箇所存在します)をクリックします。受信画面で正常な色が得られない場合は他の切れ目を試すと良いでしょう。 + +* 受信バッファをOFFにしている場合、同期位置調整をした結果の画像を再描画することができません。 + + +========== +◎受信履歴 +========== + MMSSTVは過去に受信した最新の画像を最大で256枚保持することができます。デフォルトではこの数は32枚に制限されていますので、MMSSTV設定画面の「その他」ページの「履歴画像の数」を好みの数に設定して下さい。記録する画像が設定した数を超えた場合、古いものが消えて新しいものが追加されます。 + ただしデフォルトのビットマップフォーマットでは1枚あたり約160から240KBのディスクスペースを消費しますので、256枚を設定すると最大で約50MBの領域がハードディスク上に必要になります。 + ディスク領域をセーブしたい場合は、JPEGフォーマットに変更すると良いでしょう。JPEGフォーマットへの変更はマウス右ボタンを押し、ポップアップメニューの「JPEGフォーマットを使う」を選択します。 + + 受信履歴はあくまで一時的に記憶する目的で設計されていますので、必ず古い画像が削除されます。もしあなたが受信した画像を別のフォルダに自動的に保存したい場合は、右ボタンのポップアップメニューの「他のフォルダに自動的にコピー」のチェックを付けて、「コピー先のフォルダ名の定義」でフォルダ名を指定しておくと良いでしょう。 + + 履歴画像を手動で別のフォルダにコピーしたい場合、履歴ウインドウの画像をドラッグし、ログウインドウのQSLボックスにドロップします。ただしこのドラッグ&ドロップ操作は「コピー先のフォルダ名の定義」であらかじめフォルダ名を指定しておかなければ使用できません。 + 自動コピー機能をONにしているか、またはQSLボックスに履歴画像をドロップした場合、MMSSTVはログのQSLフィールドにそのインデックスを自動的に記録します。あなたがMMSSTVのログを使用してQSOデータを記録している場合、データ表示画面から「画像」ボタンを押して、その画像をいつでも参照することができます。 + + +====== +◎送信 +====== + 送信する場合は、メイン画面の送信ページタブをクリックします。現在送信画面に表示されているイメージがそのまま送信されます。送信する前に、Rigのマイクゲインを適切に調整して下さい。 + + スピーチプロセッサは絶対にONにしないで下さい。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1.送信画像の準備 +~~~~~~~~~~~~~~~~ + 送信する画像は、以下の方法でMMSSTVの送信画面にロードすることができます。 + + 1.メイン画面下側のストック画像ギャラリからドラッグ&ドロップ + 2.フォルダのサムネイル画面(表示メニュー)からドラッグ&ドロップ + 3.Windowsファイルマネージャからドラッグ&ドロップ + 4.他の編集ソフトからドラッグ&ドロップ + (そのソフトがドラッグオペレーションをサポートしている場合) + 5.他の編集ソフトからクリップボード経由で貼り付け + + またあらかじめ準備してあるテンプレートを、ロードした画像と重ね合わせて送信画像を作成することもできます。テンプレートの作成方法については後で解説します。 + + 送信画面をマウスの右ボタンでクリックすると、クリップボード操作やファイルのロード・セーブに関するポップアップメニューが表示されます。 + + +2.モードの選択 +~~~~~~~~~~~~~~ + 送信したいSSTVモードをTxModeから選びます。 + +* 設定画面の「送信」ページにある「SSTV Mode」の「固定」のチェックを外すと、既に画像を受信している場合は、最後に受信した時のモードが自動的に送信モードに設定されるようになります。 + + +3.送信 +~~~~~~ + 送信画面の左下にある「TX」ボタンを押すと送信を開始します。画像が送信されるに従って送信位置のマーカーが下がって行きます。 + 全画像を送信すると自動的に受信に戻ります。送信を途中で中止したい場合は再度「TX」ボタンを押します。 + + MMSSTVは12秒の送信サウンドバッファを持ちます。これは通常は充分なサイズだと思いますが、お使いのパソコンの速度が遅い場合は、送信中はあまり他の操作をしないほうが良いかも知れません。 + また送信中にタイミングをロストした場合、MMSSTVは送信完了後に警告メッセージを表示します。この場合、設定画面の「その他」ページのサウンド処理のFIFOの数を増やすと問題が解決するかも知れません。 + + +4.送信画像の傾きの調整 +~~~~~~~~~~~~~~~~~~~~~~ + 一部のサウンドカード(特に最近のPCIカードのもの)は録音と再生動作でサンプリング周波数が微妙に異なる場合があります。このような場合、受信でクロックが正しく較正されていても、送信時の画像が相手局で受信した時に傾く場合があります。 + MMSSTVはこのような場合のために、送信時に適用するサウンドカードクロックのオフセット周波数を設定できるようになっています。調整方法の詳細についてはサウンドカードの項(本書の最後)を参照して下さい。 + + +5.TuneボタンとCWID +~~~~~~~~~~~~~~~~~~ + 送信画面の「Tune」ボタンを押すとデフォルトで1750Hzのトーンを送信します。この機能はUSのリピータのために存在します。 + また設定画面の「CWIDを使う」にチェックを入れると画像送信後にCWIDを送信することができます。この機能はEUの友人のために存在します。 + + +============== +◎テンプレート +============== + 送信画面に重ね合わせる簡単な図を作成することができます。例えばQSO相手のコールサインをマクロコマンドを使用して自動的に展開することも可能です。 + + 操作はDraw系ソフトの基本操作にほぼ準拠していますが、現状ではグループ化はサポートしていません。 + + 画面下側にあるツールボタンを操作し、アイテムを作成します。ツールボタンは左から次の順番で並んでいます。 + +矢印ボタン 選択モードのON/OFFをします。 +直線ボタン 直線モードを選択します。 +四角ボタン ボックスモードを選択します。 +四角塗りつぶしボタン ボックス塗りつぶしモードを選択します。 +Tボタン 文字モードを選択します。 +絵ボタン 絵または履歴画像の挿入モードを選択します。 +カラーバーボタン カラーバーモードを選択します。 +文字列リスト 定義済みの文字列を選択します。 +はさみボタン 選択中のアイテムをカットします。 +ペーストボタン カットしたアイテムをペーストします。 +色変更ボタン 選択中のアイテムの色を変更します。 +Lボタン 選択中のアイテムのペンを変更します。 +fボタン 選択中のアイテムのフォントを変更します。 + + 例えばマクロテキストを使用するには、Tボタンを押した後に、画面上の任意の点をマウスでクリックします。すると文字入力画面が表示されますので、Macroボタンを押して例えば「%c」を選択するとそこに相手局のコールサインが展開されるようになります。 + 一旦作成したアイテムの位置を変更するには、矢印ボタンを押した後、画面上のそのアイテムをドラッグして移動先にドロップします。またそのアイテムを再編集するにはそのアイテムをダブルクリックします。 + テンプレートのアイテム同士の重なりを制御するには、そのアイテムを選択状態にし、マウスの右ボタンを押して、「前面に移動」または「背面に移動」を選択します。 + + 操作方法の詳細は省略しますが、DRAWソフトの感覚に似ています。適当に操作してみてください。 + +* エクスプローラ等のファイルマネージャから画像(BMP,JPG)ファイルをテンプレートにドロップすると、その画像がその位置に展開されます。 + + +========================================== +◎テンプレートの送信画像への重ね合わせ動作 +========================================== + MMSSTVはテンプレートを送信画像に重ねる際、透過ポイントで指定されている位置の色以外をすべて送信画像に重ねます。透過ポイントはデフォルトでは画面右下になっていますが、マウス右ボタンを押してポップアップメニューを開き、「透過ポイントの設定」を選択して、自由に画面内の好きな位置に設定できます。あなたは必ずテンプレートアイテムが存在しない位置に透過ポイントを設定しなければなりません。特に画面右下にテンプレートアイテムを配置した場合は注意が必要です。 + +* Ver0.21以降のMMSSTVは透過ポイントを自動的に調整する機能がデフォルトでONになっています。従って、テンプレートアイテムの位置を変更した場合でも、透過ポイントはアイテムと重ならない位置に自動的に調整されます。 + + またテンプレートの背景色も「背景(透過)色の設定」で自由に選択できます。実は送信画像重ね合わせ動作において、テンプレートの背景色は極めて重要です。あなたは必ずテンプレート内で使わなかった色をテンプレート背景色に設定しなければなりません。 + ただし画像およびカラーバーをテンプレート内に描画している場合、その部分のみテンプレートの背景色は関係なくなり送信画像は透過しません。 + +* テンプレート上でマウス右ボタンを押し、ポップアップメニュー内の「ユニークな背景色を探す」というメニューを実行すると、自動的にテンプレート内で使っていない色を探し出し背景色に設定することができます。 + + + もしあなたがQSO中に、送信画像そのものを編集したいのであれば、他のSSTV用の画像編集ソフトを使うことをお勧めします。それらはMMSSTVよりも、より多くの素晴らしい文字効果や画像効果を提供しています。 + MMSSTVのテンプレートは、主に相手局のコールサイン、RSVリポートやコンテストナンバなどをマクロコマンドによりログから自動的に展開する用途で設計されています。したがってログ機能を使わないのであれば、テンプレートを使うメリットはないかも知れません。 + + +====================== +◎画像サイズとヘッダー +====================== + RobotやAVTモードの走査線は240本で、ScottieやMartinモードは256本です。これは元々は家庭用テレビの方式の違いに起因しています。 + RobotやAVTはUSで生まれたフォーマットで、走査線の数もNTSCに合わせて240本になりました。しかしScottieやMartinはUKで生まれたフォーマットで、走査線は256本あります。この場合、240本との互換を取るために先頭の16本はヘッダーにして画像を送信しないという習慣を持つようになったものと推測します。 + 相手局がスキャンコンバータを使ってNTSC方式のテレビで受信している場合は、恐らく240本しか映らないはずですから、(映らなくても良い)ヘッダーを入れるようにします。 + + しかしPCを使った設備の場合、この16本のヘッダーは無駄だと思います。それもデザインの一部と割り切れれば良いですが、せっかく16本余分に送信時間をかけるのですから、その部分も素材画像の一部として取り扱っても良いと思います。 + + MMSSTVの場合この違いを吸収するために、ヘッダーはテンプレートアイテムで自由に定義できるようにし、以下の送信方法を提供しています。 + +○素材画像が縦240ピクセルで256本モード(Scotti等)で送信する場合 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 1)テンプレートにヘッダーを定義しておきます。 + 2)送信画面の「上マージンシフト」ボタンを押しこみ、素材画像のみを下にシフトさせます。 + または + 2)画像クリッパーで上マージンを確保して送信画面に取りこみます。 + +○素材画像が縦256ピクセルで256本モード(Scotti等)で送信する場合 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ヘッダーの有無はあなたの好みに依存します。ただし相手局の受信設備により、先頭の16ピクセルは映らない可能性があることを考慮しなければなりません。 + ヘッダーを使っている場合に送信画面の「上マージン調整」ボタンを押しこむと素材画像の上側16ピクセルがヘッダーに隠れることはありませんが、アスペクト比は変化します。 + +○素材画像が縦240ピクセルで240本モード(Robot等)で送信する場合 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ヘッダーなしのテンプレートを定義してそのまま送信します。 + +○素材画像が縦256ピクセルで240本モード(Robot等)で送信する場合 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 1)テンプレートにヘッダーを定義しておきます。 + 2)送信画面の「下マージンシフト」ボタンを押しこみ、素材画像とテンプレートを上にシフトさせます。素材画像の上側16ピクセルは送信されません。 + または + ヘッダーなしのテンプレートを定義してそのまま送信します。素材画像の下側16ピクセルは送信されません。「下マージン調整」ボタンを押しこむと、素材画像の下側16ピクセルを失うことはありませんが、アスペクト比は変化します。 + + +============== +◎ストック画像 +============== + MMSSTVは最大300枚のストック領域を持ちます。このストック領域にはそれぞれ、画像データとテンプレートの情報を保持することができます。 + またストック領域をマウスの右ボタンでクリックするとポップアップメニューが表示され、その領域に関して、クリップボード操作、ファイルロード・セーブ機能を使うことができます。 + + ディスク領域をセーブしたい場合は、ストック画像の保存フォーマットをJPEGフォーマットに変更すると良いでしょう。JPEGフォーマットへの変更はマウス右ボタンを押し、ポップアップメニューの「JPEGフォーマットを使う」を選択します。 + + テンプレートは送信画像と組み合わせてあらかじめ作成しておくと良いでしょう。ストック領域は画像とテンプレートを独立して格納することができますが、ストック画像をドラッグ&ドロップで送信画面にロードすると、ストック画像コントロールバー内の「テンプレート合成表示」のチェックが付いている場合、それに付属するテンプレートも同時にロードできるように設計されています。 + 画像とテンプレートを個々に転送したい場合は、「テンプレート合成表示」のチェックを外してドラッグ&ドロップ操作を行います。 + 以下にストック画像およびストックテンプレートと、送信画面、テンプレート画面間のコピー動作の規則を示します。 + +[テンプレート合成表示のチェックが付いている場合] +ドラッグ元 ドラッグ先 動作 +--------------------------------------------------------- +ストック画像 送信画面 画像とテンプレートを同時にコピー +ストックテンプレート テンプレート画面 テンプレートのみをコピー +送信画面 ストック画像 画像とテンプレートを同時にコピー +テンプレート画面 ストックテンプレート テンプレートのみをコピー + +[テンプレート合成表示のチェックが付いていない場合] +ドラッグ元 ドラッグ先 動作 +--------------------------------------------------------- +ストック画像 送信画面 画像のみをコピー +ストックテンプレート テンプレート画面 テンプレートのみをコピー +送信画面 ストック画像 画像のみをコピー +テンプレート画面 ストックテンプレート テンプレートのみをコピー + + ストック画像にファイルからビットマップまたはJPEGファイルをロードする場合は、エクスプローラやマイコンピュータ画面上でそのファイルをドラッグし、そのままストック画面にドロップしてもOKです。 + + テンプレートの文字効果の展開は若干時間がかかります。このためストック画像領域でテンプレートを合成表示した場合、ウインドウ再描画が遅くなります。もしこれに不満を感じるならば、ストック画像コントロールバー内の「高速描画」のチェックを付けると良いかも知れません。 + またストック画像の保存フォーマットにJPEGを選択している場合、ストック画像のページを変更すると、ファイルの読みなおしに若干時間がかかる場合があります。 + +* ストック画像ウインドウの上に、フォルダのサムネイルウインドウを表示すると、MMSSTVはそのサムネイルウインドウをストック画像の代用として使用すると判断し、ストックテンプレートに切り替えた際に、フォルダのサムネイルウインドウを一時的に消します。 + + +==================== +◎プログラムメニュー +==================== + あなたが良く使うプログラムをMMSSTVのプログラムメニューに登録し、メニューから起動することができます。 + + プログラムメニューの上から8つのメニューに、画像編集ソフトや、PSK31、RTTY、MFSK16などの普段お使いのプログラムを登録しておくと良いでしょう。 + + プログラムを登録する際、サスペンドのチェックを付けると、他のサウンドカードやComポートを利用するプログラムを動作させるために、MMSSTVはサスペンド状態になります。この場合、MMSSTVはCom回線とサウンドカードのリソースを放棄し自身を最小化状態にした後、登録されているプログラムを実行します。 + MMSSTVを復帰させるには、そのプログラムを終了した後、Windowsタスクバーの「Mmsstv」アイコンをクリックして最小化を解除します。 + + メニューに登録していない(サウンドカードを利用する)プログラムを実行させたい場合は「サスペンド」を選択すると良いでしょう。MMSSTVはCom回線とサウンドカードのリソースを放棄し、自身を最小化状態にします。 + + 他のサウンドカードやCom回線を利用するプログラムが動作中に、MMSSTVの最小化を解除すると、MMSSTVでサウンドカードおよびCom回線のオープンエラーメッセージが表示されます。 + この場合、MMSSTVは自動で自身を再度最小化しません。MMSSTVを復帰させるには、他のプログラムを終了した後、MMSSTVを手動で再表示させるか、またはプログラムメニュー内の「サスペンドの解除」を選択すると良いでしょう。 + +* 画像編集ソフトを登録する場合は、サスペンドのチェックを付ける必要はありません。 + + +=============== +◎Radio Command +=============== + MMSSTVはDTR/RTS制御によるPTT以外に、Radio CommandによりPTTを切り替えることができます。お使いのRigによりこのコマンドは異なりますが、送出するコマンドとディレイを自由に定義することができますので、Radio Commandが使用できるほぼ全てのRigで利用することができると思います。 + + RadioCommandを使う場合、オプションメニューの設定画面を開き、送信設定で「Radio command」ボタンを押します。この画面でポート名を設定すると、そのポートがRadio Commandポートとして働くようになります。 + + 定義できるイベントは以下の通りです。 + Init 回線を初期化した直後に送信されます。 + Rx 受信に切り替える時に送信されます。 + Tx 送信に切り替える時に送信されます。 + + これらのイベントには、デフォルトでYAESUのFT-1000MPのコマンドが定義してありますが、以下のキーワードを使ってコマンドを自由に変更できます。 + + \$##... ##=00-FF, 送信する複数バイトを16進数で定義する + (例:\$FE55AA -> FEh,55h,AAh) + \x## ##=00-FF, 送信する1バイトを16進数で定義する + (例:\xFE\x55\xAA -> FEh, 55h, AAh) + \w## ##=00-99, ディレイ時間を10ms単位の10進数で定義する + (例:\w05 -> wait 50ms) + \r キャリッジリターンを送信する + \n ラインフィードを送信する + \c.... 以降はすべてコメント + \\ '\'文字を送信する + その他 その文字列を送信する + + 16進数の代わりにxxを記述すると、その部分はxx入力ボックスで定義した16進数に置き換わります。この変換はICOMの機種アドレスを指定する場合に便利かも知れません。 + \$FEFExxE01C0001FD (xxの部分が定義内容に置き換わる) + + 特定のイベントでコマンドを送出したくない場合、そこには何もコマンドを定義しないで下さい。 + 各イベントの定義コマンドは「Save」ボタンを押してファイルに保存できます。また「Load」ボタンを押して保存したファイルから読み込むことができます。 + +* ディレイ時間はTx定義の一番最後に定義します。デフォルトでは\w10(100ms)になっています。MMSSTVはこのディレイ以外にも、常に送信切り替え時に僅かなディレイ時間を確保しますので、RigによってはこのTx定義でのディレイは不要かも知れません。 + + 「VFO polling」を設定すると、RadioCommand経由でRigの周波数を取りこみ、ログのバンド情報を自動的に更新することができます。現状ではすべてのRigをサポートしているわけではありませんが、未サポートのもにに関しては将来コマンドが判明した時点で追加したいと思います。 + + ICOMおよびTenTec Omni-VIの場合、「Scan addr.」のチェックを付けると自動的にRigのアドレスを探します。マルチドロップで多数のRigを接続をしている場合、最初に見つけたRigのアドレスで停止します。 + + Radio Commandで使用するポートは、通常のDTR/RTS制御のPTTポートとはまったく独立して存在します。従ってRadio CommandポートではVFOポーリングのみを行い、PTT制御は別のポートでDTR/RTSラインを使用することも可能です。 + + +==================== +◎復調器の構成と調整 +==================== + + DSPの基本的な解説はMMTTYのDigital.txtを参照して下さい。ここではMMSSTVに関する解説のみ行います。 + + +1.復調器の構成 +~~~~~~~~~~~~~~ + MMSSTVの復調器の構成を以下に示します。 + +Sound --> BPF(FIR) -+--> BPF1100(IIR) --> Vis symbol '1' + | + +--> BPF1300(IIR) --> Vis symbol '0' + | + +--> BPF1200(IIR) --> Sync + | + ---> Zero cross det. --> Pciture data + (1500 to 2300) + または + | + ---> PLL(1500 to 2300) --> Picture data + または + | + ---> Hilbert(1500 to 2300) --> Picture data + + + 以下にゼロクロス方式の構成図を示します。 + + ---> 微分器 ---> カウンタ ----> Out LPF ----> Pic. data + + + 以下にPLL方式の構成図を示します。 + + (位相検波器) + ---> Phase det. ---> Loop LPF ---> Out LPF --> Pic. data + | | + <---- VCO <------------- + + 以下にヒルベルト変換方式の構成図を示します。このアイデアはJA6UHL西村さんに教えて頂きました(MNI TNX to JA6UHL)。 + + --+-> Delay(N) -> Real + | |==> ATAN --> 微分器 --> LPF --> Pic. data + --> FIR(2N) --> Image + + + 各方式について私が実験した限りでは、概ね以下のような違い(一長一短)があるようです。しかし受信信号の質によって異なる評価になる場合もあります。どの方式を使うかは皆さん自身で実験して選択して下さい。 + +デコード方式 ゼロクロス PLL ヒルベルト変換 +変換色精度 △ ○ ○ +解像度 △ △ ○ +QSB ○ △ ○ +CPU負荷 ○ ○ △ +サンプリング 高いほうが良い 高いほうが良い ---- + + + ゼロクロス方式およびPLL方式は、サンプリング周波数を高くするとOut LPFのカットオフ周波数を高く設定することができます。 + + ヒルベルト変換方式は、サンプリング周波数を高くするとそのままでは位相微分の精度が悪くなります。MMSSTVは変換精度が得られるように内部でデシメート処理(サブサンプリング)を行いますが、この方式の場合はむしろデフォルト通りの11025Hzサンプリングを使ったほうがFBです。 + + +2.ゼロクロス検波のパラメータ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[Out LPF] + このフィルタはカウンタで得られた周波数成分をスムージングします。シャープな画像が欲しい場合はこのカットオフ周波数を高く設定します。ノイズの少ない画像が欲しい場合はこのカットオフ周波数を低く設定します。 + フィルタはIIR型とFIR型のいずれかを選択できますが、いずれの方式を選択しても変化がないようです。低いサンプリング周波数の場合はFIR型のほうがCPU負荷は小さいと思います。 + + +3.PLLのパラメータ +~~~~~~~~~~~~~~~~~ +[VCO Gain] + VCO GainはPLLの応答特性に大きく影響します。VCOゲインを大きくすると応答が速くなり、小さくすると応答が遅くなります。あまりゲインを上げ過ぎると復調信号の振動が大きくなります。 + +[Loop LPF] + VCOと共にループのダンピングファクタを決定ずける重要なパラメータです。このフィルタには必ず1次フィルタを使って下さい。このカットオフ周波数を上げると復調信号の振動が大きくなります。 + +[Out LPF] + このフィルタはPLLのループ外にありますので、応答特性には影響しません。しかし画像の質は大きく変化します。シャープな画像が欲しい場合はこのカットオフ周波数を高く設定します。ノイズの少ない画像が欲しい場合はこのカットオフ周波数を低く設定します。この選択はあなたの好みに完全に依存します。 + + +4.微分処理 +~~~~~~~~~~ + 微分処理のチェックを入れると、MMSSTVは信号の周波数の変化を若干強調させてフィルタ部での信号のなまりを補正しますが、ノイズに少し弱くなる欠点を持ちます。 + 横にあるスライダで補正具合を調整できますので、好みの画質になるように調整してみてください。右にするほどエッジが急峻になります。 + +* この微分処理はゼロクロス方式やヒルベルト変換方式の微分器とは関係しません。 + + +5.レベル変換 +~~~~~~~~~~~~ + 復調器で得られた周波数値をカラー(輝度)値に変換する際、レベル変換器を使います。このレベル変換は、設定画面の「受信」ページで次の2つの方法を選択できます。 + +- 直線変換(多項式を使うのチェックを外す) + 復調器で得られた周波数値とレベルの関係が直線であると仮定して、1次変換を行います。この方法は処理が簡単ですが復調器の周波数特性が直線である必要があります。 + +- 多項式変換(多項式を使うのチェックを入れる) + 復調器で得られた周波数値を17次の多項式で曲線近似して変換します。復調器の周波数特性が直線でない場合はこちらを使用すると良いかもしれません。なお、高速に変換するために、あらかじめ多項式を計算したテーブルを作成して変換を行いますのでCPU負荷はほとんど変化しないと思います。 + + 11025Hzでゼロクロス検波を使用した場合、2200Hzから2300Hz(高輝度側)の直線性が少し悪くなりますので、「多項式を使う」にチェックを付けたほうが良いかも知れません(サンプリング周波数が高くなるに従い、変換結果は直線に近くなるはずです)。ただ実際には11025Hzの場合でも、その変換誤差は2/256〜3/256の範囲ですので、画像での見た目はほとんどわからないと思います。 + + 設定画面の「受信」ページで、「較正」ボタンを押すとMMSSTVは自動較正を開始します。較正には約20秒ほど必要です。 + 較正を終了すると1500Hzから2300Hzまでの周波数特性グラフを表示しますので、それが右下がりの直線になっている場合は、「多項式を使う」のチェックを外してもOKです。 + + +=============== +◎プロファイル +=============== + MMSSTVのデフォルトの復調パラメータは、私が実験した結果、無難と思われる値が設定されていますが、実験期間が短く受信した信号サンプルが少ないため、それがベストであるとは思えません。あなたが伝統的なアマチュア無線家であるならば、恐らくこれらのパラメータは既により適した値に変更されているはずです。 + + プロファイルメニューを使うと、8個の異なるメニュースロットに、あなたが良く使う復調パラメータを一括して名前を付けて登録でき、またそれを好きなときに呼び出すことができますので、実験がやり易くなると思います。 + + プロファイル機能を使う場合、最も重要な点は、まず現状のあなたが気に入っている復調パラメータを「MyDefault」のような名前で登録しておくことです。こうしておけば、パラメータの組み合わせが判らなくなった場合でも、その状態に復帰させることができます。 + + またMMSSTVは変更(登録)できない「MMSSTV Default」というプロファイルを持ちます。このメニューを選択するとあなたが一番最初にMMSSTVをインストールした時のMMSSTVのデフォルトの復調パラメータに戻すことができます。 + +*プロファイルで記憶できるパラメータはPLLとゼロクロス検波のパラメータに限られます。 + +==================== +◎受信用補助フィルタ +==================== + MMSSTVには3つの受信用補助フィルタがあります。 + + Sound ---> Notch ---> LMS -+-> BPF ---> Demodulator + | + --> Spectrum display + +[Notch] + 単純なFIR型のBEFです。このフィルタはスペクトラムまたはウォータフォールでマウス左ボタンを押すと、その周波数でONになり、マウス右ボタンを押すとOFFになります。 + ビート混信除去の目的で使用することができますが、画像帯域内にノッチフィルタを設定した場合、受信画像は若干劣化します。また同期信号周波数にノッチを設けた場合、「自動停止」をONにしていると弱い信号では画像受信が停止する場合があります。 + +[LMS] + 「Leaky LMS(Least Mean Square)法」による適応フィルタです。このフィルタはメイン画面のDSPパネルにON/OFFスイッチがあります。デフォルトはノイズスムージングになっていますが、オートノッチを選択することもできます(マウス右ボタンで動作を選択します)。 + オートノッチは画質への影響を軽減するため応答を遅めにしてありますが、それでも画材によって著しく画質が劣化する場合があります。 + +[BPF] + 単純なFIR型のBPFです。このフィルタは、オプションメニューの設定画面の「受信」ページで特性を選択できます。このフィルタを鋭くすると水平解像度は悪化しますが、近接信号のQRMには強くなります。 + + +================ +◎送信用フィルタ +================ + MMSSTVの送信信号は以下のような系統で出力されます。 + +Picture data ---> LPF ---> VCO ---> BPF ---> D/A ---> Sound data + ON/OFF ON/OFF + + LPFおよびBPFはデジタル出力の帯域を制限するための保険の意味で設けてあります。送信時のCPU負荷が重い場合は、これらのフィルタをOFF(設定画面の送信ページでチェックを外す)にすると良いでしょう。 + しかしCWIDをONにしている場合は、BPFにチェックを付けておくことをお勧めします。 + +[LPF] + このフィルタをONにすると画像信号を周波数に変換する際、滑らかに変化するように働きます。結果として帯域は大きく制限されますが、送信画像の水平方向の解像度は少し悪くなります。 + +[BPF] + このフィルタをONにすると送信信号そのものの帯域を制限します。CWIDをONにしている場合にキャリアの断続部分でのスペクトラムの広がりを抑えることができます。 + + +================ +◎サウンドカード +================ + +1.サンプリング周波数の選択 +~~~~~~~~~~~~~~~~~~~~~~~~~~ + MMSSTVでは8000Hzから44100Hzまで以下のように動作サンプリング周波数を選択することができます。 + + 8000Hz 準サウンドカード標準周波数 + 11025Hz サウンドカード標準周波数 + 12000Hz + 14000Hz + 16000Hz + 18000Hz + 22050Hz サウンドカード標準周波数 + 24000Hz + 44100Hz サウンドカード標準周波数 + + 復調器にゼロクロス方式、PLL方式を使っている場合は、サンプリング周波数を高くし、Out LPFのカットオフ周波数を高くすると画質が良くなります。しかし復調器にヒルベルト変換方式を使っている場合は、デフォルトの11025Hzを選択したほうがFBです。 + + 11025Hz,22050Hz,44100Hz以外の周波数でサウンドカードが動作するかどうかは、そのカードに依存します。 + また高いサンプリング周波数は低いサンプリング周波数と比較して、よりCPUパワーを消費し、またメモリも消費しますので、それらが使用可能かどうかはお使いのパソコンのスペックに大きく依存します。 + +* MMSSTVのFFTは常に2048ポイントで計算します。必要な周波数分解能を得るために、18000Hz以上を選択した場合、FFTのみ1/2の周波数で動作します。同様に44100Hzを選択した場合、1/4の周波数で動作します。 + + +2.クロックの較正 +~~~~~~~~~~~~~~~~ + SSTVではサンプリング周波数のズレは画像の傾斜となって現れます。MMSSTVの場合、サウンドカードの絶対的な精度は必要はなく、その実際の周波数をMMSSTVが正確に知っていることのみが重要です。 + + 受信した画像によってSync画面で傾斜を調整した場合、その信号が正確なタイミングを持っているならば、比較的正確な精度でクロックの較正が完了したことになり、通常はそれでも充分だと思います。 + + しかしあなたが絶対的な精度でタイミングを調整したい場合は、時報標準電波またはFAX放送を受信して、サウンドカードのクロック周波数を計測することができます。 + + 1) MMSSTV設定画面の「その他」のページの「Adj」ボタンを押します。 + 2) 時報標準電波(WWV, JJY等)を受信します。 + 3) 時報チック音の周波数を合わせます。 + 4) しばらく受信するとチック音が縦のラインとなって表示されます。 + 5) その縦のラインの上の点をクリックします。 + 6) 次にそのラインの下の点をクリックすると較正は終了します。 + + クリックする2点間の距離が長いほど正確に較正できますので、周波数を合わせた後は画面を最大化したほうが良いでしょう。 + またクリックする縦のラインは幅を持ちますので、その同じ位置をクリックすることが重要です。1点目をクリックした後は補助ラインが表示されますので、その補助ラインが縦のラインと平行になるようにすればOKです。 + + 残念ながら日本の時報標準電波(JJY)は2001年の3月で停波しますが、時報標準電波の代わりにFAX放送を受信しても同様の調整ができます。ただし受信しているFAX信号が正確なタイミングを持っている必要があります。 + またNTTテレホンサービスの時報信号も時報標準電波と同じように使うことができます。 + + +3.送信時のサンプリング周波数のオフセットの調整 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 受信時と送信時でサウンドカードのサンプリング周波数が異なる場合、以下の手順で送信時のオフセット周波数を調整します。 + + 1) まず受信で傾き調整が完了している状態であることが前提条件です。 + 2) 設定画面の「送信」ページのループバックを「外部(衛星通信用)」にします。 + 3) サウンドカードのLineOutとLineInを接続します。 + 4) Martin 1で画像を送信します。 + 5) 外部ループバックにより送信画像が自動受信されるはずです。 + 6) 受信が完了したら「同期」ページに行き、傾きの調整を行います。 + - 同期画面のニコニコマークを押し「高精度傾き調整」を + 実行すると良いでしょう + - 「記憶」ボタンは押さないで下さい。 + 7) 傾きがなくなったら同期画面の「TX」ボタンを押します。 + 8) 以上で送信オフセット周波数の調整は完了です。念の為に再度送信し、 + 傾きがなくなっていることを確認して下さい。もし傾きが残留している + 場合は、再度(6)以降の手順を繰り返します。 + + サウンドカードのLineOutとLineInを接続する代わりに、ミキサープログラムのLoopBackを選択しても構いません。 + なお、この操作はFull-Duplex(再生・録音同時動作)をサポートするサウンドカードでしか行うことができませんが、Full-Duplexをサポートしないサウンドカードでは、もともと送受のサンプリング周波数が異なるようなことはありませんのでこの調整は不要なはずです。 + + もし送信画像が大きく傾くというリポートを貰った場合は、サウンドカードをモノラル動作ではなく、ステレオ動作に変更してみて下さい(設定画面の「Source」)。 + また一部のカードはFull-Duplex動作時とそうでない場合でもサンプリング周波数が異なる場合があるようです。当然、そのような場合は外部ループバックによるオフセット調整を行っても意味がありません。この場合、常にループバックを外部(衛星通信用)の状態で使用するか、または相手局からのリポートに頼る必要があります。 + + +4.設定画面のサウンドカード設定 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[FIFO] + 低レベルサウンド処理のFIFOバッファの数を設定します。FIFOバッファの数を多くするとサウンド処理のマージンが増え、タイミングをロストする確立が減少します。 + + 受信時にタイミングをロストする場合、RX FIFOの数を増やします。また送信時にタイミングをロストする場合はTX FIFOの数を増やすと良いでしょう。 + + +[処理の優先度] + 低レベルサウンド処理に与える処理の優先順位を設定します。受信中または送信中にサウンドをロストする場合、優先順位を高く設定すると良いでしょう。逆にメニュー操作の応答が遅い場合は優先順位を下げると良いでしょう。 + +[DeviceID] + 使用するサウンドカードのID番号を指定します。サウンドカードが1枚しか存在しない場合は-1または0を設定して下さい。-1はデフォルトのサウンドカードを使います。 + サウンドカードのID番号は、通常0から順番に暗黙に割り当てられます。したがってパソコン上に複数枚のサウンドカードが存在し、例えば2枚目のカードを使用したい場合は1を設定すると良いでしょう。 + +[入力チャンネル] + サウンドカードの使用チャンネルを指定します。「モノラル」を選択するとモノラル動作になります。「左 ch.」または「右 ch.」を指定するとステレオ動作で指定したチャンネルからのデータを入力信号として使用します。いずれの場合も送信時は常に両方のチャンネルに信号が出力されます。 + +[Clock] + MMSSTVの処理サンプリング周波数を設定します。詳細は前項の「サンプリング周波数の選択」および「クロックの較正」を参照して下さい。 + + +======== +◎最後に +======== + このプログラムはアマチュア無線用フリーソフトウエアです。あなたの裁量において自由に使用し配布することができます。 + より詳細な情報が必要な場合は、以下のリフレクタ(メーリングリスト)または掲示板に参加すると良いかも知れません。 + + http://www.egroups.co.jp/group/mmhamsoft/ + + +* MMSSTVのJPEGファイルコンバータは「Independent JPEG Group」のフリーソースファイル「IJG code」がベースになっています。 + +73, Mako \ No newline at end of file diff --git a/MMlink.cpp b/MMlink.cpp new file mode 100644 index 0000000..3dbba5b --- /dev/null +++ b/MMlink.cpp @@ -0,0 +1,408 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "MMLink.h" +//--------------------------------------------------------------------------- +__fastcall CMMList::CMMList(void) +{ + m_pList = NULL; +} +//--------------------------------------------------------------------------- +__fastcall CMMList::~CMMList() +{ + delete m_pList; +} +//--------------------------------------------------------------------------- +int __fastcall CMMList::QueryList(LPCSTR pFilter) +{ + if( m_pList == NULL ) m_pList = new TStringList; + m_pList->Clear(); + m_FilterLen = strlen(pFilter); + + HANDLE hFind; + WIN32_FIND_DATA fd; + + char Name[MAX_PATH]; + sprintf(Name, "%s*.%s", BgnDir, pFilter); + hFind = ::FindFirstFile(Name, &fd); + if( hFind != INVALID_HANDLE_VALUE ){ + while(1){ + m_pList->Add(fd.cFileName); + if( !FindNextFile(hFind, &fd) ) break; + } + ::FindClose(hFind); + } + return m_pList->Count; +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall CMMList::GetItemName(int n) +{ + if( n < 0 ) return NULL; + if( n >= m_pList->Count ) return NULL; + + m_Name = m_pList->Strings[n].c_str(); + LPSTR p = lastp(m_Name.c_str()); + p -= m_FilterLen; + *p = 0; + return m_Name.c_str(); +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall CMMList::GetFileName(int n) +{ + if( n < 0 ) return NULL; + if( n >= m_pList->Count ) return NULL; + + m_Name = m_pList->Strings[n]; + return m_Name.c_str(); +} +//--------------------------------------------------------------------------- +int __fastcall CMMList::IndexOf(LPCSTR pKey) +{ + for( int i = 0; i < m_pList->Count; i++ ){ + if( !strcmpi(GetItemName(i), pKey) ) return i; + } + return -1; +} +//*************************************************************************** +// CMMLink class +//--------------------------------------------------------------------------- +__fastcall CMMLink::CMMLink(HWND hWnd, UINT uMsg) +{ + m_hLib = NULL; + m_hWnd = hWnd; + m_uMsg = uMsg; + m_Caps = 0; +} +//--------------------------------------------------------------------------- +__fastcall CMMLink::~CMMLink() +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::FreeLib(void) +{ + if( m_hLib ){ + FreeLibrary(m_hLib); + m_hLib = NULL; + } +} +//--------------------------------------------------------------------------- +FARPROC __fastcall CMMLink::GetProc(LPCSTR pName) +{ + if( !m_hLib ) return NULL; + + FARPROC fn = ::GetProcAddress(m_hLib, pName+1); + if( fn == NULL ){ + fn = ::GetProcAddress(m_hLib, pName); + if( fn == NULL ) FreeLib(); + } + return fn; +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::Close(void) +{ + if( IsLib() ){ + fmmlClose(); + FreeLib(); + } + m_Connected = FALSE; +} +//--------------------------------------------------------------------------- +BOOL __fastcall CMMLink::Open(LPCSTR pItemName) +{ + Close(); + + m_ItemName = pItemName; + m_SessionName = m_ItemName; + char LibName[MAX_PATH]; + if( !*GetEXT(pItemName) ){ + sprintf(LibName, "%s.mml", pItemName); + pItemName = LibName; + } + + m_hLib = ::LoadLibrary(pItemName); + if( m_hLib ){ + + fmmlOpen = (tmmlOpen)GetProc("_mmlOpen"); + fmmlClose = (tmmlClose)GetProc("_mmlClose"); + fmmlSetHandle = (tmmlSetHandle)GetProc("_mmlSetHandle"); + fmmlIsCap = (tmmlIsCap)GetProc("_mmlIsCap"); + fmmlIsConnected = (tmmlIsConnected)GetProc("_mmlIsConnected"); + fmmlGetSessionName = (tmmlGetSessionName)GetProc("_mmlGetSessionName"); + fmmlQuery = (tmmlQuery)GetProc("_mmlQuery"); + fmmlSetFreq = (tmmlSetFreq)GetProc("_mmlSetFreq"); + fmmlLog = (tmmlLog)GetProc("_mmlLog"); + fmmlLogClear = (tmmlLogClear)GetProc("_mmlLogClear"); + fmmlSetPTT = (tmmlSetPTT)GetProc("_mmlSetPTT"); + fmmlOnCopyData = (tmmlOnCopyData)GetProc("_mmlOnCopyData"); + fmmlEventVFO = (tmmlEventVFO)GetProc("_mmlEventVFO"); + + if( m_hLib ){ + if( fmmlOpen(m_hWnd, m_uMsg) ){ + m_Caps = fmmlIsCap(); + } + else { + FreeLib(); + } + } + } + return IsLib(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::SetHandle(HWND hWnd, UINT uMsg) +{ + m_hWnd = hWnd; + m_uMsg = uMsg; + if( !IsLib() ) return; + fmmlSetHandle(hWnd, m_uMsg); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::NotifySession(LPCSTR pSession) +{ + if( pSession ){ + m_Connected = TRUE; + m_SessionName = pSession; + } + else { + m_Connected = FALSE; + } +} +//--------------------------------------------------------------------------- +BOOL __fastcall CMMLink::IsConnected(void) +{ + if( !IsLib() ) return FALSE; + if( m_Caps & capNOTIFYSESSION ) return m_Connected; + return fmmlIsConnected(); +} +//--------------------------------------------------------------------------- +LPCSTR __fastcall CMMLink::GetSessionName(void) +{ + if( !IsLib() ) return NULL; + if( m_Caps & capNOTIFYSESSION ) return m_SessionName.c_str(); + return fmmlGetSessionName(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::Query(LPCSTR pCall) +{ + if( !IsLib() ) return; + fmmlQuery(pCall); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::SetFreq(LPCSTR pFreq) +{ + if( !IsLib() ) return; + fmmlSetFreq(pFreq); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::SetPTT(int ptt) +{ + if( !IsLib() ) return; + fmmlSetPTT(ptt); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::LogWrite(SDMMLOG *sp, int sw) +{ + if( !IsLib() ) return; + mmLOGDATA ml; + ConvFormat(&ml, sp); + fmmlLog(&ml, sw); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::Clear(void) +{ + if( !IsLib() ) return; + fmmlLogClear(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::EventVFO(void) +{ + if( !IsLib() ) return; + fmmlEventVFO(); +} +//--------------------------------------------------------------------------- +LONG __fastcall CMMLink::OnCopyData(HWND hSender, const COPYDATASTRUCT *pcds) +{ + if( !IsLib() ) return FALSE; + if( !(m_Caps & capWMCOPYDATA) ) return FALSE; + return fmmlOnCopyData(hSender, pcds); +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::SetTime(SYSTEMTIME *tp, int sw) +{ + if( sw ){ + m_TimeLogOFF = *tp; + } + else { + m_TimeLogON = *tp; + } +} +//--------------------------------------------------------------------------- +void __fastcall CMMLink::ConvFormat(mmLOGDATA *pLog, const SDMMLOG *sp) +{ + memset(pLog, 0, sizeof(mmLOGDATA)); + + if( sp->btime ) pLog->m_TimeLogON = m_TimeLogON; + if( sp->etime ) pLog->m_TimeLogOFF = m_TimeLogOFF; + StrCopy(pLog->m_Call, sp->call, sizeof(pLog->m_Call)- 1); + strcpy(pLog->m_Mode, Log.GetModeString(sp->mode)); + strcpy(pLog->m_Freq, Log.GetFreqString(sp->band, sp->fq)); + memcpy(pLog->m_His, sp->ur, sizeof(pLog->m_His)); + memcpy(pLog->m_My, sp->my, sizeof(pLog->m_My)); + StrCopy(pLog->m_Name, sp->name, sizeof(pLog->m_Name)- 1); + StrCopy(pLog->m_QTH, sp->qth, sizeof(pLog->m_QTH)- 1); + StrCopy(pLog->m_Pow, sp->pow, sizeof(pLog->m_Pow)- 1); + StrCopy(pLog->m_Note, sp->rem, sizeof(pLog->m_Note)- 1); + StrCopy(pLog->m_QSL, sp->qsl, sizeof(pLog->m_QSL)- 1); + StrCopy(pLog->m_DXCC, sp->opt1, sizeof(pLog->m_DXCC)- 1); + StrCopy(pLog->m_Cont, sp->opt2, sizeof(pLog->m_Cont)- 1); + pLog->m_QSLS = sp->send; + pLog->m_QSLR = sp->recv; +} + + +//*************************************************************************** +// CMMRadio class +//--------------------------------------------------------------------------- +__fastcall CMMRadio::CMMRadio(HWND hWnd, UINT uMsg) +{ + m_hLib = NULL; + m_hWnd = hWnd; + m_uMsg = uMsg; +} +//--------------------------------------------------------------------------- +__fastcall CMMRadio::~CMMRadio() +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMRadio::FreeLib(void) +{ + if( m_hLib ){ + FreeLibrary(m_hLib); + m_hLib = NULL; + } +} +//--------------------------------------------------------------------------- +FARPROC __fastcall CMMRadio::GetProc(LPCSTR pName) +{ + if( !m_hLib ) return NULL; + + FARPROC fn = ::GetProcAddress(m_hLib, pName+1); + if( fn == NULL ){ + fn = ::GetProcAddress(m_hLib, pName); + if( fn == NULL ) FreeLib(); + } + return fn; +} +//--------------------------------------------------------------------------- +void __fastcall CMMRadio::Close(void) +{ + if( IsLib() ){ + fmmrpClose(); + FreeLib(); + } +} +//--------------------------------------------------------------------------- +BOOL __fastcall CMMRadio::Open(LPCSTR pItemName) +{ + Close(); + + m_ItemName = pItemName; + char LibName[MAX_PATH]; + if( !*GetEXT(pItemName) ){ + sprintf(LibName, "%s.mmr", pItemName); + pItemName = LibName; + } + m_hLib = ::LoadLibrary(pItemName); + if( m_hLib ){ + + fmmrpOpen = PROC(mmrpOpen); + fmmrpClose = PROC(mmrpClose); + fmmrpSetHandle = PROC(mmrpSetHandle); + fmmrpGetStatus = PROC(mmrpGetStatus); + fmmrpSetPTT = PROC(mmrpSetPTT); + fmmrpPutChar = PROC(mmrpPutChar); + fmmrpGetChar = PROC(mmrpGetChar); + fmmrpPolling = PROC(mmrpPolling); + fmmrpGetFreq = PROC(mmrpGetFreq); + fmmrpGetDefCommand = PROC(mmrpGetDefCommand); + + if( m_hLib ){ + if( !fmmrpOpen(m_hWnd, m_uMsg) ){ + FreeLib(); + } + } + } + return IsLib(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMRadio::SetHandle(HWND hWnd, UINT uMsg) +{ + m_hWnd = hWnd; + m_uMsg = uMsg; + if( !IsLib() ) return; + fmmrpSetHandle(hWnd, uMsg); +} +//--------------------------------------------------------------------------- +void __fastcall CMMRadio::SetPTT(int ptt) +{ + if( !IsLib() ) return; + fmmrpSetPTT(ptt); +} +//--------------------------------------------------------------------------- +void __fastcall CMMRadio::PutChar(BYTE c) +{ + if( !IsLib() ) return; + fmmrpPutChar(c); +} +//--------------------------------------------------------------------------- +BYTE __fastcall CMMRadio::GetChar(void) +{ + if( !IsLib() ) return 0; + return fmmrpGetChar(); +} +//--------------------------------------------------------------------------- +DWORD __fastcall CMMRadio::GetStatus(void) +{ + if( !IsLib() ) return 0; + return fmmrpGetStatus(); +} +//--------------------------------------------------------------------------- +void __fastcall CMMRadio::Polling(void) +{ + if( !IsLib() ) return; + fmmrpPolling(); +} +//--------------------------------------------------------------------------- +DWORD __fastcall CMMRadio::GetFreq(void) +{ + if( !IsLib() ) return 0; + return fmmrpGetFreq(); +} +//--------------------------------------------------------------------------- +DWORD __fastcall CMMRadio::GetDefCommand(void) +{ + if( !IsLib() ) return 0; + return fmmrpGetDefCommand(); +} + diff --git a/MMlink.h b/MMlink.h new file mode 100644 index 0000000..f836ef5 --- /dev/null +++ b/MMlink.h @@ -0,0 +1,152 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + + +#ifndef MMLinkH +#define MMLinkH + +#include "ComLib.h" +#include "LogConv.h" +#include "mml.h" +#include "mmrp.h" + +#define PROC(Key) ((t##Key)GetProc("_" #Key)) + +class CMMList +{ +private: + TStringList *m_pList; + AnsiString m_Name; + int m_FilterLen; +public: + __fastcall CMMList(void); + __fastcall ~CMMList(); +public: // List functions + int __fastcall QueryList(LPCSTR pFilter); + int __fastcall GetCount(void){return m_pList->Count;}; + LPCSTR __fastcall GetItemName(int n); + LPCSTR __fastcall GetFileName(int n); + int __fastcall IndexOf(LPCSTR pKey); + inline BOOL __fastcall IsQuery(void){return m_pList != NULL;}; +}; + +class CMMLink +{ +private: + AnsiString m_ItemName; + + HWND m_hWnd; + UINT m_uMsg; + + HINSTANCE m_hLib; //ja7ude 0521 + DWORD m_Caps; + + int m_Connected; + AnsiString m_SessionName; + + SYSTEMTIME m_TimeLogON; + SYSTEMTIME m_TimeLogOFF; +private: + tmmlOpen fmmlOpen; + tmmlClose fmmlClose; + tmmlSetHandle fmmlSetHandle; + tmmlIsCap fmmlIsCap; + tmmlIsConnected fmmlIsConnected; + tmmlGetSessionName fmmlGetSessionName; + tmmlQuery fmmlQuery; + tmmlSetFreq fmmlSetFreq; + tmmlLog fmmlLog; + tmmlLogClear fmmlLogClear; + tmmlSetPTT fmmlSetPTT; + tmmlOnCopyData fmmlOnCopyData; + tmmlEventVFO fmmlEventVFO; +private: + void __fastcall FreeLib(void); + FARPROC __fastcall GetProc(LPCSTR pName); + void __fastcall ConvFormat(mmLOGDATA *pLog, const SDMMLOG *sp); +public: + __fastcall CMMLink(HWND hWnd, UINT uMsg); + __fastcall ~CMMLink(); +public: // LogLink functions + BOOL __fastcall Open(LPCSTR pLibName); + void __fastcall Close(void); + void __fastcall SetHandle(HWND hWnd, UINT uMsg); + inline BOOL __fastcall IsLib(void){ return (m_hLib != NULL);}; + inline LPCSTR __fastcall GetItemName(void){return m_ItemName.c_str();}; + + void __fastcall NotifySession(LPCSTR pSession); + + BOOL __fastcall IsConnected(void); + LPCSTR __fastcall GetSessionName(void); + void __fastcall Query(LPCSTR pCall); + void __fastcall SetFreq(LPCSTR pFreq); + void __fastcall SetPTT(int ptt); + void __fastcall LogWrite(SDMMLOG *sp, int sw); + void __fastcall Clear(void); + void __fastcall EventVFO(void); + LONG __fastcall OnCopyData(HWND hSender, const COPYDATASTRUCT *pcds); + inline DWORD __fastcall GetCaps(void){return m_Caps;}; + void __fastcall SetTime(SYSTEMTIME *tp, int sw); + +}; + + +class CMMRadio +{ +private: + AnsiString m_ItemName; + + HINSTANCE m_hLib; //ja7ude 0521 + HWND m_hWnd; + UINT m_uMsg; + +private: + tmmrpSetHandle fmmrpSetHandle; + tmmrpOpen fmmrpOpen; + tmmrpClose fmmrpClose; + tmmrpGetStatus fmmrpGetStatus; + tmmrpSetPTT fmmrpSetPTT; + tmmrpPutChar fmmrpPutChar; + tmmrpGetChar fmmrpGetChar; + tmmrpPolling fmmrpPolling; + tmmrpGetFreq fmmrpGetFreq; + tmmrpGetDefCommand fmmrpGetDefCommand; + +private: + void __fastcall FreeLib(void); + FARPROC __fastcall GetProc(LPCSTR pName); +public: + __fastcall CMMRadio(HWND hWnd, UINT uMsg); + __fastcall ~CMMRadio(); +public: + void __fastcall SetHandle(HWND hWnd, UINT uMsg); + BOOL __fastcall Open(LPCSTR pLibName); + void __fastcall Close(void); + inline BOOL __fastcall IsLib(void){ return (m_hLib != NULL);}; + inline LPCSTR __fastcall GetItemName(void){return m_ItemName.c_str();}; + + void __fastcall SetPTT(int ptt); + void __fastcall PutChar(BYTE c); + BYTE __fastcall GetChar(void); + DWORD __fastcall GetStatus(void); + void __fastcall Polling(void); + DWORD __fastcall GetFreq(void); + DWORD __fastcall GetDefCommand(void); +}; +#endif diff --git a/MacroKey.cpp b/MacroKey.cpp new file mode 100644 index 0000000..dc6f401 --- /dev/null +++ b/MacroKey.cpp @@ -0,0 +1,162 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "MacroKey.h" +#include "ComLib.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TMacroKeyDlg *MacroKeyDlg; +MACKEY mackeycom[]={ + {1, "%m","My callsign", NULL}, + {1, "%c","His/her callsign", NULL}, + {1, "%r","His/her RSV", NULL}, + {1, "%n","His/her name", NULL}, + {2, "%J","His/her name (+サン)", NULL}, + {1, "%q","His/her QTH", NULL}, + {1, "%s","My RSV", NULL}, + {1, "%R","His/her RSVのRSV部分のみ","Only the RSV part of his/her RSV"}, + {1, "%N","His/her RSVのコンテストナンバ部分のみ","Only the contest number part of his/her RSV"}, + {1, "%M","My RSVのコンテストナンバ部分のみ","Only the contest number part of my RSV"}, + {1, "%g","GOOD MORNING/AFTERNOON/EVENING", NULL}, + {1, "%f","GM/GA/GE", NULL}, + {1, "%D","UTC date (e.g., 2000-SEP-05)", NULL}, + {1, "%T","UTC time (e.g., 12:34)", NULL}, + {1, "%t","UTC time (e.g., 1234)", NULL}, + {1, "%L","Local date (e.g., 2000-SEP-05)", NULL}, + {1, "%U","Local time (e.g., 12:34)", NULL}, + {1, "%u","Local time (e.g., 1234)", NULL}, + {1, "%B","周波数", "frequency"}, + {1, "%b","バンド", "band"}, + {1, "%o","Note", NULL}, + {1, "%X","Receipt time(UTC) of the current image", NULL}, + {1, "%v","MMSSTV version", NULL}, + {1, "%V","Beta version", NULL}, + {0, NULL, NULL}, +}; +static int intPos; //ja7ude 0521 +static int TopPos; +//--------------------------------------------------------------------- +__fastcall TMacroKeyDlg::TMacroKeyDlg(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + if( MsgEng ){ + CancelBtn->Caption = "Cancel"; + OKBtn->Caption = "Insert"; + } +} +//--------------------------------------------------------------------- +void __fastcall TMacroKeyDlg::UpdateUI(int row) +{ + int r = row - 1; + if( r >= 0 ){ + OKBtn->Enabled = TRUE; + } + else { + OKBtn->Enabled = FALSE; + } +} +//--------------------------------------------------------------------- +int __fastcall TMacroKeyDlg::AddMacKey(MACKEY *mp, int n) +{ + for( ; mp->r; mp++){ + if( (mp->r == 2) && MsgEng ) continue; + mackey[n] = *mp; + n++; + } + return n; +} +//--------------------------------------------------------------------- +int __fastcall TMacroKeyDlg::Execute(AnsiString &as) +{ + int n = 0; + n = AddMacKey(mackeycom, n); + Grid->RowCount = 1 + n; + if( (intPos > 0) && (intPos < Grid->RowCount) ){ //ja7ude 0521 + Grid->Row = intPos; + Grid->TopRow = TopPos; + } + UpdateUI(Grid->Row); + int r = ShowModal(); + intPos = Grid->Row; //ja7ude 0521 + TopPos = Grid->TopRow; + if( r == IDOK ){ + if( intPos ){ //ja7ude 0521 + r = intPos - 1; + as = mackey[r].pKey; + return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------- +void __fastcall TMacroKeyDlg::GridDrawCell(TObject *Sender, int Col, + int Row, TRect &Rect, TGridDrawState State) +{ + char bf[256]; + + Grid->Canvas->FillRect(Rect); + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + + if( Row ){ + Row--; + bf[0] = 0; + LPCSTR pCom; + switch(Col){ + case 0: + strcpy(bf, mackey[Row].pKey); + break; + case 1: + if( MsgEng ){ + pCom = mackey[Row].pEng; + if( pCom == NULL ){ + pCom = mackey[Row].pJpn; + } + } + else { + pCom = mackey[Row].pJpn; + } + strcpy(bf, pCom); + break; + } + Grid->Canvas->TextOut(X, Y, bf); + } + else { // タイトル + LPCSTR _tt[]={ + "Key","Comments", + }; + Grid->Canvas->TextOut(X, Y, _tt[Col]); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMacroKeyDlg::GridSelectCell(TObject *Sender, int Col, + int Row, bool &CanSelect) +{ + UpdateUI(Row); +} +//--------------------------------------------------------------------------- + + diff --git a/MacroKey.dfm b/MacroKey.dfm new file mode 100644 index 0000000000000000000000000000000000000000..c4cd276782de91185b8b8ac6d4d62cc97ea0a954 GIT binary patch literal 835 zcmZuvO>fgM7b{d~NxT$D_^;XE3jz3xxWQE+r>B9zPqfuBrCD)<;~ z`!x6d+8<2dTAII*neY{+UXP0mL@aM9SoT%fF9_wi6_S-KIBR$G#gmjTmxN`dAJPJt z972&Vr1{418hlw~a$$ZnS|O)gSWZfNk_|`-{(v+2FkBE(g0zm};b@S&7{%|xVRs&% zC2mvJm;97o7A)hN1a73K3k?na>1cF8mT+t%gifo+)d>o!ufezANAM+RUeOLb)QM;o z3Lp}q+LvR`cv;j|tj>zZsQ_T1asa}eiGs;ECCYbu#VX`0WBmW~3yZExEj?2O=LZ`iBeexeSE7 zB$g_P{9F{-fnMtWft&Av8b4~ZTSMj}qt&HF&a4)pN{g)~9`ZGl7&`-%TBdM`kv->| z=GeC){gX=XFz34C6$m*g80_$ni@O@TIp3Akc6aLKT)ha{)TKRklsrA5(!fv6C(1rTzX5x~39bMD literal 0 HcmV?d00001 diff --git a/MacroKey.h b/MacroKey.h new file mode 100644 index 0000000..3d14c01 --- /dev/null +++ b/MacroKey.h @@ -0,0 +1,67 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef MacroKeyH +#define MacroKeyH +//---------------------------------------------------------------------------- +//ja7ude 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +typedef struct { + int r; + LPCSTR pKey; + LPCSTR pJpn; + LPCSTR pEng; +}MACKEY; + +class TMacroKeyDlg : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TStringGrid *Grid; + void __fastcall GridDrawCell(TObject *Sender, int Col, int Row, + TRect &Rect, TGridDrawState State); + void __fastcall GridSelectCell(TObject *Sender, int Col, int Row, + bool &CanSelect); +private: + MACKEY mackey[32]; + int __fastcall AddMacKey(MACKEY *mp, int n); + void __fastcall UpdateUI(int row); + +public: + virtual __fastcall TMacroKeyDlg(TComponent* AOwner); + + int __fastcall Execute(AnsiString &as); +}; +//---------------------------------------------------------------------------- +//extern TMacroKeyDlg *MacroKeyDlg; +//---------------------------------------------------------------------------- +#endif diff --git a/Main.cpp b/Main.cpp new file mode 100644 index 0000000..be5e3f0 --- /dev/null +++ b/Main.cpp @@ -0,0 +1,14464 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include +#include +#include "Clipbrd.hpp" +#include "Main.h" +#include "Scope.h" +#include "PlayDlg.h" +#include "Option.h" +#include "LogFile.h" +#include "LogList.h" +#include "LogConv.h" +#include "LogLink.h" +#include "country.h" +#include "Qsodlg.h" +#include "Mmcg.h" +#include "VerDsp.h" +#include "LogSet.h" +#include "PicRect.h" +#include "ZoomView.h" +#include "TextEdit.h" +#include "ListText.h" +#include "PicFilte.h" +#include "ExtCmd.h" +#include "PerSpect.h" +#include "RepSet.h" +#include "MmcgDlg.h" +#include "radioset.h" +#include "RMenuDlg.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TMmsstv *Mmsstv; +#define MEASCWSPEED FALSE + +#define FSKIDMAX 32 +//ウインドウメッセージのハンドラ--------------------------------------------- +void __fastcall TMmsstv::WndProc(TMessage &Message) +{ + switch(Message.Msg){ + case WM_COPYDATA: + WndCopyData(Message); + break; + default: + TForm::WndProc(Message); + break; + } +} +//--------------------------------------------------------------------------- +// WM_COPYDATAの処理 +void __fastcall TMmsstv::WndCopyData(TMessage &Message) +{ + COPYDATASTRUCT *cp = (COPYDATASTRUCT *)Message.LParam; + if( LogLink.IsCopyData() ){ + Message.Result = LogLink.m_pLink->OnCopyData(HWND(Message.WParam), cp); + return; + } + switch(cp->dwData){ + case 0: + case 1: // Hamlogからの返信 + if( sys.m_LogLink != 1 ) return; + switch(LogLink.AnaData(&Log.m_sd, cp)){ + case 115: + UpdateTextData(); + break; + case 106: + LogFreq->Text = Log.GetFreqString(Log.m_sd.band, Log.m_sd.fq); + break; + } + Message.Result = TRUE; + break; + case 0x80001212: // 周波数データの指定 + if( cp->cbData && (cp->lpData != NULL) ){ + char bf[16]; + int len = cp->cbData; + if( len > 15 ) len = 15; + memcpy(bf, cp->lpData, len); + bf[len] = 0; + LogFreq->Text = bf; + } + Message.Result = TRUE; + break; + case 0x80001213: // クリップボードからのロード + KESClick(NULL); + Message.Result = TRUE; + break; + case 0x80001214: // 画像サイズの問い合わせ + Message.Result = m_TXW + (m_TXH << 16); + break; + case 0x80001215: // 履歴画像のコピー + SBCopyClick(NULL); + Message.Result = TRUE; + break; + case 0x80001216: // 受信画像のコピー + KERClick(NULL); + Message.Result = TRUE; + break; + case 0x80001217: // 送信/受信の切り替え + if( cp->cbData && (cp->lpData != NULL) ){ + if( *(const BYTE *)(cp->lpData) ){ + if( !SBTX->Down ){ + AdjustPage(pgTX); + ToTX(); + } + } + else if( SBTX->Down ){ + ToRX(); + } + } + Message.Result = TRUE; + break; + case 0x80001218: + m_ChangeTemp = 1; + SBULog->Enabled = TRUE; + UpdateUI(); + Message.Result = TRUE; + break; + case 0x80001219: // REMデータの指定 + if( cp->cbData && (cp->lpData != NULL) ){ + EditNote->Text = (LPCSTR)cp->lpData; + EditNoteChange(NULL); + } + Message.Result = TRUE; + break; + case 0x8000121a: // PTT + if( cp->cbData && (cp->lpData != NULL) ){ + BOOL bPTT = *(const BYTE *)(cp->lpData); + if( pRadio != NULL ) pRadio->SetPTT(bPTT); + if( pComm != NULL ) pComm->SetPTT(bPTT); + } + break; + case 0x8000121b: // status + { + DWORD dw = SBTX->Down ? 1 : 0; + dw |= SBTune->Down ? 2 : 0; + dw |= pDem->m_Sync ? 4 : 0; + Message.Result = dw; + } + break; + default: + Message.Result = FALSE; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OnMSG(tagMSG &Msg, bool &Handled) +{ +/* +Msg.hwnd := Handle; +Msg.message := WM_KEYDOWN; +Msg.wParam := Message.WParam; +Msg.lParam := Message.LParam; +*/ + if( Msg.message != WM_DROPFILES ) return; + + DropFile(Msg); + Handled = true; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OnMini(TObject *Sender) +{ + if( pSound != NULL ){ + if( pSound->m_susp ){ + pSound->m_susp = 1; + } + } +} +//--------------------------------------------------------------------------- +// アプリケーション例外 +void __fastcall TMmsstv::AppException(TObject *Sender, Exception *E) +{ + if( m_AppErr < 3 ){ + m_AppErr++; + ErrorMB(MsgEng? + "The indistinct error was detected.": + "原因不明のエラーが発生しました." + ); + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- +__fastcall TMmsstv::TMmsstv(TComponent* Owner) + : TForm(Owner) +{ + ::VirtualLock(this, sizeof(TMmsstv)); + ::VirtualLock(&sys, sizeof(sys)); + + m_AppErr = 0; + m_InitFirst = TRUE; + m_DisEvent = 1; + SampFreq = 11025.0; + pDraw = NULL; + pPaste = NULL; + pRxView = NULL; + pSyncView = NULL; + pHistView = NULL; + pPreView = NULL; + pCalibration = NULL; + pUndo = NULL; + pCtrBtn = NULL; + pStockView = NULL; + pWaterView = NULL; + pLogView = NULL; + + int i; + for( i = 0; i < 8; i++ ){ + pFileView[i] = NULL; + } + m_TimerRXV = 0; + m_TimerRXS = 0; + m_FileViewClose = 0; + m_ClientHeight[0] = m_ClientHeight[1] = 0; + m_ClientWidth[0] = m_ClientWidth[1] = 0; + m_SpecDown = 0; + + m_dwVersion = ::GetVersion(); + if( m_dwVersion < 0x80000000 ){ + WinNT = TRUE; // NT,2000,XP,Vista + + OSVERSIONINFO osvi; + + ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + + GetVersionEx(&osvi); + if (osvi.dwMajorVersion == 5) { + WinVista=FALSE; + } + else { + WinVista=TRUE; + } + } + else { // win95/98/ME + WinNT = FALSE; + WinVista=FALSE; + } + +#if 0 +// Get major and minor version numbers of Windows +dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); +dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); +// Get build numbers for Windows NT or Win32s +if (dwVersion < 0x80000000) // Windows NT + dwBuild = (DWORD)(HIWORD(dwVersion)); +else if (dwWindowsMajorVersion < 4) // Win32s + dwBuild = (DWORD)(HIWORD(dwVersion) & ~0x8000); +else // Windows 95 -- No build numbers provided + dwBuild = 0; +#endif + + InitFFT(); + + EntryAlign(); + lcid = GetThreadLocale() & 0x00ff; + if( lcid != LANG_JAPANESE ){ // English + sys.m_WinFontName = "Times New Roman"; + sys.m_WinFontCharset = ANSI_CHARSET; + Log.m_LogSet.m_TimeZone = 'Z'; + sys.m_LogLink = 0; + MsgEng = 1; + } + else { // Japanese + sys.m_WinFontName = "MS Pゴシック"; + sys.m_WinFontCharset = SHIFTJIS_CHARSET; + sys.m_LogLink = 1; + MsgEng = 0; + } + SetMBCP(); + sys.m_WinFontStyle = 0; + LogLink.SetHandle(Handle, CM_CMML); + + sys.m_BitPixel = ::GetDeviceCaps(Canvas->Handle, BITSPIXEL); + sys.m_Palette = sys.m_BitPixel < 16 ? 1 : 0; + sys.m_DivMode = 0; + sys.m_UseB24 = 0; + sys.m_DisFontSmooth = WinNT; + sys.m_TempDelay = 3; + + pBitmapNearest = NULL; + if( sys.m_BitPixel < 24 ){ + pBitmapNearest = new Graphics::TBitmap; + pBitmapNearest->Width = 1; + pBitmapNearest->Height = 1; + } + + pBitmapFFT = new Graphics::TBitmap(); + pBitmapFFT->Width = PBoxFFT->Width; + pBitmapFFT->Height = PBoxFFT->Height; + + pBitmapWater = new Graphics::TBitmap(); + pBitmapWater->PixelFormat = pf24bit; + pBitmapWater->Width = PBoxWater->Width; + pBitmapWater->Height = PBoxWater->Height; + + PBoxRX->Width = 320; + PBoxRX->Height = 256; + PBoxHist->Width = 320; + PBoxHist->Height = 256; + PBoxTX->Width = 320; + PBoxTX->Height = 256; + PBoxTemp->Width = 320; + PBoxTemp->Height = 256; + + pBitmapSS = NULL; + for( i = 0; i < STOCKPAGE; i++ ){ + pBitmapST[i] = NULL; + } + + m_TXW = m_RXW = 320; m_TXH = m_TXPH = m_RXH = m_RXPH = 256; + m_SMax = 6; + + pBitmapD12 = CreateBitmap(PBoxD12->Width, PBoxD12->Height, pf24bit); + + pBitmapLvl = new Graphics::TBitmap(); + pBitmapLvl->Width = PBoxLvl->Width; + pBitmapLvl->Height = PBoxLvl->Height; + + SBDPaste->Glyph->Assign(SBPaste->Glyph); + SBRView->Glyph->Assign(SBHView->Glyph); + SBTView->Glyph->Assign(SBHView->Glyph); + SBTXFil->Glyph->Assign(SBHistFil->Glyph); + SBRXFil->Glyph->Assign(SBHistFil->Glyph); + m_Slant = 0; +// m_Timer1S = 0; + m_DSEL = 0; + m_Dupe = 0; + m_DrawTrans = 0; +// m_DrawCmd = -1; + m_DrawCmd = CM_SELECT; + SBDSel->Down = TRUE; + m_DragNo = 0; + m_DragDataNo = 0; + m_DragPMax = 50; + m_TxSPage = -1; + m_PSPage = m_APSPage = 0; + for( i = 0; i < STOCKPAGE; i++ ){ + m_TSPage[i] = m_ATSPage[i] = 0; + } + m_ReqSampChg = 0; + m_TuneTimer = 0; + m_pRowBuf = NULL; + m_ReqHistF = 0; + m_SyncAccuracy = 1; + + m_TempTimer = 0; + m_TempHold = 0; + m_SuspMinimized = 0; + + InitProfile(); + + for( i = 0; i < 9; i++ ){ + m_ModeAssignTX[i] = m_ModeAssignRX[i] = i; + } + for( i = 0; i < 8; i++ ){ + sys.m_ExtMode[i] = 0; + sys.m_ExtName[i] = ""; + sys.m_ExtCmd[i] = ""; + } + char bf[256]; + ::GetWindowsDirectory(bf, sizeof(bf)); + char drv = bf[0]; + sprintf(bf, "%c:\\Program Files\\SSTV-PAL\\SSTV-Pal.exe", drv); + sys.m_ExtName[0] = "SSTV-PAL"; + sys.m_ExtCmd[0] = bf; + sys.m_ExtMode[0] = 1; + + sprintf(bf, "%c:\\Program Files\\MMTTY\\MMTTY.EXE", drv); + if( !IsFile(bf) ){ + sprintf(bf, "%c:\\MMTTY\\MMTTY.EXE", drv); + } + sys.m_ExtName[7] = "MMTTY"; + sys.m_ExtCmd[7] = bf; + sys.m_ExtMode[7] = 2; + + pComm = NULL; + pRadio = NULL; + +#if 1 + StartOption(); +#else + if( ParamCount() >= 0 ){ + SetDirName(BgnDir, ParamStr(0).c_str()); + } + else { + SetCurDir(BgnDir, sizeof(BgnDir)); + } + strcpy(BitmapDir, BgnDir); + strcpy(SBitmapDir, BgnDir); + strcpy(TemplateDir, BgnDir); + strcpy(RecDir, BgnDir); + strcpy(ExtLogDir, BgnDir); + sprintf(HistDir, "%sHistory\\", BgnDir); + sprintf(StockDir, "%sStock\\", BgnDir); +#endif + + Caption = VERTTL2; + InitSampType(); + InitCOMMPara(); + InitRADIOPara(); + sys.m_Priority = 0; + sys.m_SoundFifoRX = 12; + sys.m_SoundFifoTX = 8; + sys.m_SoundPriority = 1; + sys.m_SoundDevice = "-1"; + sys.m_SoundStereo = 0; + sys.m_StereoTX = 0; + sys.m_FFTType = 2; + sys.m_FFTGain = 5; + sys.m_FFTResp = 0; + sys.m_FFTStg = 1; + sys.m_FFTAGC = 1; + sys.m_FFTWidth = 1; + sys.m_FFTPriority = 0; + sys.m_Call = "NOCALL"; + sys.m_TxRxName = "NONE"; + sys.m_TxRxLock = 1; + sys.m_RTSonRX = 0; + + sys.m_ColorLow = clBlack; + sys.m_ColorHigh = clWhite; + sys.m_ColorFFTB = TColor(4227327); + sys.m_ColorFFT = clYellow; + sys.m_ColorFFTStg = clBlue; + sys.m_ColorFFTSync = clLime; + sys.m_ColorFFTFreq = clYellow; + sys.m_LogName = "Temp.mdt"; + sys.m_WindowState = wsNormal; + sys.m_TestDem = 0; + sys.m_TuneTXTime = -1; + sys.m_TuneSat = 0; + sys.m_ColorRXB = clWhite; + + sys.m_HDDSize = 2; + + sys.m_VOX = 0; +// sys.m_VOXSound = "1100,300,1500,100,1900,200,1500,200"; + sys.m_VOXSound = "1500,100,1700,100,2300,100,2100,100,1900,100,1500,100"; + + sys.m_Sharp2D = 0; + sys.m_Differentiator = 0; + sys.m_DiffLevelP = 1.0; + sys.m_DiffLevelM = sys.m_DiffLevelP / 3; + + sys.m_ColText[0] = TColor(255); + sys.m_ColText[1] = TColor(16711935); + sys.m_ColText[2] = TColor(65535); + sys.m_ColText[3] = TColor(16776960); + sys.m_ColText[4] = clBlack; + sys.m_ColText[5] = clBlack; + + sys.m_TextGrade = 0; + sys.m_TextShadow = 2; + sys.m_TextZero = 0; + sys.m_TextRot = 0; + sys.m_TextVert = 0; + sys.m_TextVertH = -6; + sys.m_TextStack = 0x0000fc04; + + sys.m_PicShape = 0; + sys.m_PicAdjust = 0; + sys.m_PicLineStyle = 5; + sys.m_PicLineColor = clWhite; + + sys.m_ColBar[0] = clBlack; + sys.m_ColBar[1] = TColor(0x00f0f0f0); + sys.m_ColBar[2] = clRed; + sys.m_ColBar[3] = clGreen; + + sys.m_PicSelCurCol = clWhite; + sys.m_PicSelSmooz = 0; + sys.m_PicSelRTM = 1; + + const DWORD _tbl[]={ + 16776960, 65535, 16711935, 255, + 255, 16711935, 65535, 16776960, + 12615935, 8454143, 16776960, 65280, + 16776960, 4259584, 65535, 16711935, + 255, 16711935, 65535, 65280, + 255, 4227327, 65535, 16777088, + 16776960, 65535, 4227327, 255, + 65280, 65535, 33023, 255, + }; + + for( i = 0; i < 32; i++ ){ + sys.m_ColorSet[i] = TColor(_tbl[i]); + } + + sys.m_DemOff = 0; + sys.m_DemWhite = 128.0/16384.0; + sys.m_DemBlack = 128.0/16384.0; + sys.m_DemCalibration = 0; + + for( i = 0; i < 17; i++ ){ + sys.m_Dem17[i] = m_DemPro[8].Dem17[i]; + } + + sys.m_ShowSizeRX = 0; + sys.m_ShowSizeHist = 0; + sys.m_ShowSizeTX = 0; + sys.m_ShowSizeTemp = 0; + sys.m_ShowSizeStock = 0; + + sys.m_PicClipType = 0; + sys.m_PicClipRatio = 1; + sys.m_PicClipMode = 0; + sys.m_PicClipView = 1; + sys.m_PicClipColor = clBlack; + + sys.m_Way240 = 1; + + sys.m_HistMax = 32; + sys.m_UseRxBuff = 1; + sys.m_AutoStop = 0; + sys.m_AutoSync = 1; + sys.m_CWID = 0; + sys.m_TXFSKID = 0; + sys.m_CWIDSpeed = 10; + sys.m_CWIDWPM = 28; + sys.m_CWIDText = "DE %m"; + sys.m_CWIDFreq = 1000; + sys.m_MMVID = ""; + sys.m_UseJPEG = 0; + sys.m_JPEGQuality = 80; + sys.m_CWText = "%m"; + + sys.m_nCWMenu = 7; + sys.m_CWMenu[0] = "QSL 73 TU"; + sys.m_CWMenu[1] = "NR? AGN"; + sys.m_CWMenu[2] = "QRZ?"; + sys.m_CWMenu[3] = "UR %N %N"; + sys.m_CWMenu[4] = "%c de %m"; + sys.m_CWMenu[5] = "73 TU"; + sys.m_CWMenu[6] = "VVV"; + + sys.m_FixedTxMode = 1; + + sys.m_TextList[0] = "CQ SSTV"; + sys.m_TextList[1] = "%c"; + sys.m_TextList[2] = "ur %r"; + sys.m_TextList[3] = "ur %R-%N"; + sys.m_TextList[4] = "73"; + sys.m_TextList[5] = "de %m"; + sys.m_TextList[6] = "%D %tZ"; + sys.m_TextList[7] = "%L %u Local"; + + for( i = 0; i < 4; i++ ) sys.m_RegFont[i].m_Height = 0; + + sys.m_Temp24 = TRUE; + + sys.m_MaskUserPage = 0; + sys.m_MaskCol1 = clYellow; + sys.m_MaskCol2 = clBlack; + + m_nRadioMenu = 5; + m_RadioMenu[0].strTTL = "7.033 LSB (FT847)"; + m_RadioMenu[0].strCMD = "\\$0070330001\\w10\\$0000000007\\w10"; + m_RadioMenu[1].strTTL = "14.230 USB (FT847)"; + m_RadioMenu[1].strCMD = "\\$0142300001\\w10\\$0100000007\\w10"; + m_RadioMenu[2].strTTL = "21.340 USB (FT847)"; + m_RadioMenu[2].strCMD = "\\$0213400001\\w10\\$0100000007\\w10"; + m_RadioMenu[3].strTTL = "28.680 USB (FT847)"; + m_RadioMenu[3].strCMD = "\\$0286800001\\w10\\$0100000007\\w10"; + m_RadioMenu[4].strTTL = "144.450 USB (FT847)"; + m_RadioMenu[4].strCMD = "\\$1444500001\\w10\\$0100000007\\w10"; + + ReadSampFreq(); + pSound = NULL; + pSound = new TSound(TRUE); + pDem = &pSound->SSTVDEM; + pMod = &pSound->SSTVMOD; + + pMod->m_vco.SetSampleFreq(sys.m_SampFreq + sys.m_TxSampOff); + pSound->fftIN.m_Handle = Handle; + ReadRegister(); + + pBitmapRX = CreateBitmap(PBoxRX->Width, PBoxRX->Height, pf24bit); + + pBitmapHist = CreateBitmap(PBoxHist->Width, PBoxHist->Height, -1); + pBitmapHistF = pBitmapHist; + pBitmapTemp = CreateBitmap(PBoxTemp->Width, PBoxTemp->Height, -1); + pBitmapTX = CreateBitmap(PBoxTX->Width, PBoxTX->Height, -1); + pBitmapTXM = CreateBitmap(PBoxTX->Width, PBoxTX->Height, -1); + + PanelFFT->Color = sys.m_ColorFFTB; + PanelWater->Color = sys.m_ColorLow; + FillBitmap(pBitmapRX, sys.m_ColorRXB); + FillBitmap(pBitmapHist, sys.m_ColorRXB); + + sprintf(bf, "%s"HISTNAME, HistDir); + if( !IsFile(bf) ){ + strcpy(bf, HistDir); + if( *lastp(bf) == '\\' ) *lastp(bf) = 0; + mkdir(bf); + } + sprintf(bf, "%sCurrent.bmp", StockDir); + if( !IsFile(bf) ){ + strcpy(bf, StockDir); + if( *lastp(bf) == '\\' ) *lastp(bf) = 0; + mkdir(bf); + } + + UpdateSystemFont(); + + InitColorTable(sys.m_ColorLow, sys.m_ColorHigh); + DrawFFT(1); + if( KVW->Checked ) DrawWater(1); + UpdateRecentMenu(); + UpdateModeBtn(); + DispSyncStat(); + RxHist.Open(); + UpdateHist(); + UpdateTxClip(); + Application->OnMessage = OnMSG; + Application->OnMinimize = OnMini; +#if !DEBUG + Application->OnException = AppException; +#endif + m_DisEvent = 0; + if( int(WindowState) != sys.m_WindowState ) WindowState = TWindowState(sys.m_WindowState); + pSound->fftIN.m_Handle = Handle; + SBTX->Font->Color = clRed; + + sprintf(bf, "%sMmsstv.chm", BgnDir); + if( IsFile(bf) ){ + JanHelp = "MMSSTV.CHM"; + } + else { + sprintf(bf, "%sMmsstv.hlp", BgnDir); + if( IsFile(bf) ) JanHelp = "MMSSTV.HLP"; + } + if( !JanHelp.IsEmpty() ){ + TMenuItem *pm = new TMenuItem (this); + sprintf(bf, "MMSSTV &Help (%s)", JanHelp.c_str()); + pm->Caption = bf; + pm->OnClick = KHlpMainClick; + KHelp->Insert(0, pm); + } + UpdateProFileMenu(); + ::DragAcceptFiles(PanelTX->Handle, TRUE); + ::DragAcceptFiles(PanelTemp->Handle, TRUE); + m_hClipNext = ::SetClipboardViewer(Handle); + MakeCalibrationTable(); + m_FFTWINDOW = (3010 * FFT_SIZE / FFTSamp); + + m_OrgTop = Top; + m_OrgLeft = Left; + + DivControl(sys.m_DivMode); + + m_RepBeaconCount = 0; + m_RepBeaconPos = m_RepTXPos = 0; + if( sys.m_Repeater ) SetBeaconTick(); + if( sys.m_Priority ) UpdatePriority(); + + LoadCurrentTemp(); + ChangeTxMode(SSTVSET.m_TxMode); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::StartOption(void) +{ + AnsiString as; + if( ParamCount() >= 0 ){ + as = ParamStr(0).c_str(); + SetDirName(BgnDir, as.c_str()); + } + else { + SetCurDir(BgnDir, sizeof(BgnDir)); + } + strcpy(BitmapDir, BgnDir); + strcpy(SBitmapDir, BgnDir); + strcpy(TemplateDir, BgnDir); + strcpy(MMLogDir, BgnDir); + strcpy(RecDir, BgnDir); + strcpy(ExtLogDir, BgnDir); + sprintf(HistDir, "%sHistory\\", BgnDir); + sprintf(StockDir, "%sStock\\", BgnDir); + + sys.m_bCQ100 = FALSE; + g_dblToneOffset = 0.0; + + sys.m_Repeater = 0; + for( int i = 0; i <= ParamCount(); i++ ){ + as = ParamStr(i); + if( as == "-r" ){ + sys.m_Repeater = 1; + } + else if( as == "-i" ){ + sys.m_bCQ100 = TRUE; + g_dblToneOffset = -1000.0; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FormCloseQuery(TObject *Sender, bool &CanClose) +{ + Application->OnException = NULL; + ::DragAcceptFiles(PanelS->Handle, FALSE); //ja7ude 0521 + ::DragAcceptFiles(PanelTX->Handle, FALSE); //ja7ude 0521 + ::ChangeClipboardChain(Handle, m_hClipNext); + + if( SBTX->Down ) ToRX(); + Timer->Enabled = FALSE; + Application->OnIdle = NULL; + if( pRadio != NULL ){ + pRadio->ReqClose(); + } + + int DivMode = sys.m_DivMode; + KVSDClick(NULL); + DivControl(0); + sys.m_DivMode = DivMode; + + KVR->Checked = pRxView != NULL; + if( pRxView != NULL ){ + pRxView->GetViewPos(sys.m_RxViewLeft, sys.m_RxViewTop, sys.m_RxViewWidth, sys.m_RxViewHeight); + delete pRxView; + pRxView = NULL; + } + KVS->Checked = pSyncView != NULL; + if( pSyncView != NULL ){ + pSyncView->GetViewPos(sys.m_SyncViewLeft, sys.m_SyncViewTop, sys.m_SyncViewWidth, sys.m_SyncViewHeight); + delete pSyncView; + pSyncView = NULL; + } + KVH->Checked = pHistView != NULL; + if( pHistView != NULL ){ + CloseHistView(); + } + KVC->Checked = pCtrBtn != NULL; + if( pCtrBtn != NULL ){ + if( pCtrBtn->SBLock->Down ){ + pCtrBtn->SBLock->Down = FALSE; + pCtrBtn->SBLockClick(NULL); + } + pCtrBtn->GetViewPos(sys.m_CtrBtnLeft, sys.m_CtrBtnTop, sys.m_CtrBtnWidth, sys.m_CtrBtnHeight); + delete pCtrBtn; + pCtrBtn = NULL; + } + int i; + for( i = 0; i < 8; i++ ){ + if( pFileView[i] != NULL ){ + int Flag = (pFileView[i]->Visible || pFileView[i]->m_Suspend) ? pFileView[i]->m_TitleBar ? 1 : 2 : 0; + CloseFileView(i); + sys.m_FileViewFlag[i] = Flag; + } + else { + sys.m_FileViewFlag[i] = 0; + } + } + if( pSound != NULL ){ + pSound->ReqStop(); + Log.Close(); + WriteRegister(); + WaveStg.Close(); + Log.DoBackup(); + } + DeleteUndo(); + DrawMain.FreeItem(); + DrawText.FreeItem(); + DrawPara.FreeItem(); + DrawTemp.FreeItem(); + + delete pBitmapFFT; + pBitmapFFT = NULL; + + if( pBitmapWater != NULL ){ + delete pBitmapWater; + pBitmapWater = NULL; + } + + if( pBitmapSS != NULL ){ + delete pBitmapSS; + pBitmapSS = NULL; + } + for( i = 0; i < STOCKPAGE; i++ ){ + if( pBitmapST[i] != NULL ){ + delete pBitmapST[i]; + pBitmapST[i] = NULL; + } + } + + delete pBitmapRX; + pBitmapRX = NULL; + + if( (pBitmapHistF != NULL) && (pBitmapHistF != pBitmapHist) ){ + delete pBitmapHistF; + pBitmapHistF = NULL; + } + delete pBitmapHist; + pBitmapHist = NULL; + + delete pBitmapTX; + pBitmapTX = NULL; + delete pBitmapTXM; + pBitmapTXM = NULL; + delete pBitmapTemp; + pBitmapTemp = NULL; + + delete pBitmapD12; + pBitmapD12 = NULL; + + delete pBitmapLvl; + pBitmapLvl = NULL; + + if( pBitmapNearest != NULL ) delete pBitmapNearest; + + if( pPaste != NULL ){ + delete pPaste; + pPaste = NULL; + } + if( pComm != NULL ){ + pComm->SetScan(0); + pComm->Close(); + delete pComm; + pComm = NULL; + } + if( pCalibration != NULL ){ + delete pCalibration; + pCalibration = NULL; + } + ::VirtualUnlock(&sys, sizeof(sys)); + ::VirtualUnlock(this, sizeof(TMmsstv)); + CanClose = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FormDestroy(TObject *Sender) +{ + if( pSound != NULL ){ + pSound->WaitStop(); + delete pSound; + pSound = NULL; + } + if( pRadio != NULL ){ + pRadio->WaitClose(); + delete pRadio; + pRadio = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateToneFreq(void) +{ + int fq = pMod->m_TuneFreq; + char bf[128]; + sprintf(bf, MsgEng ? "Send %uHz tone" : "%uHzトーンの送信", fq); + SBTune->Hint = bf; + SBTune->Caption = fq; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateSystemFont(void) +{ + TFontStyles fsw = Code2FontStyle(sys.m_WinFontStyle); + if( (sys.m_WinFontName != Font->Name)|| + (sys.m_WinFontCharset != Font->Charset)|| + (fsw != Font->Style) + ){ + Font->Name = sys.m_WinFontName; + Font->Charset = sys.m_WinFontCharset; + Font->Style = fsw; + GBMode->Font->Name = sys.m_WinFontName; + GBMode->Font->Charset = sys.m_WinFontCharset; + GBMode->Font->Style = fsw; + GB1->Font->Name = sys.m_WinFontName; + GB1->Font->Charset = sys.m_WinFontCharset; + GB1->Font->Style = fsw; + GBLog->Font->Name = sys.m_WinFontName; + GBLog->Font->Charset = sys.m_WinFontCharset; + GBLog->Font->Style = fsw; + AlignPCS.NewFont(sys.m_WinFontName, sys.m_WinFontCharset, fsw); + SBTX->Font->Name = sys.m_WinFontName; + SBTX->Font->Charset = sys.m_WinFontCharset; + SBTX->Font->Style = fsw; + } + if( Font->Charset != SHIFTJIS_CHARSET ){ + MsgEng = 1; + KFile->Caption = "&File"; + KView->Caption = "&View"; + KOpt->Caption = "&Option"; +// KExtCmd->Caption = "Program(&P)"; + KHelp->Caption = "&Help"; +// File Nenu for english + KLogOpen->Caption = "Open &Log file..."; + KLogFlush->Caption = "Save data now(&F)"; + KFRecTim->Caption = "Record sound to the file with a time stamp(&A)"; + KFRec->Caption = "Record sound to the file(&W)..."; + KFPlay->Caption = "&Play sound from the file..."; + KFPlayPos->Caption = "Play positsion"; + KFRecRew->Caption = "Rewind"; + KFRecStop->Caption = "Close Record / Play"; + KExit->Caption = "Exit MMSSTV(&X)"; + + KEdit->Caption = "&Edit"; + KEC->Caption = "&Copy from history window"; + KEE->Caption = "&Edit TX image..."; + KER->Caption = "Copy from &RX window"; + KEA->Caption = "&Auto copy"; + KEP->Caption = "&Paste to TX window..."; + KES->Caption = "&Stretch paste to TX window"; + KEX->Caption = "Paste via Clipper..."; + KEW->Caption = "Handling of 320x240"; + KEW1->Caption = "Vertical stretching"; + KEW2->Caption = "Auto stretching"; + KEW3->Caption = "No stretching"; + KEW4->Caption = "Shift picture for the header"; + + KVR->Caption = "Always show RX viewer"; + KVS->Caption = "Always show Sync viewer"; + KVH->Caption = "Always show thumbnails of history"; + KVF->Caption = "Always show thumbnails of files folder"; + KVC->Caption = "Always show control buttons"; + KVSD->Caption = "Design"; + KVSD1->Caption = "Standard"; + KVSD2->Caption = "Separate stock view"; + KVSD3->Caption = "Separate all views"; + KRCD->Caption = "Child of a desktop window"; + KVL->Caption = "Level indicator"; + KVLSG->Caption = "Receipt signals"; + KVLSY->Caption = "Sync signals"; + KVSE1->Caption = "Stock view"; + KVSE2->Caption = "Tuning view"; + KVSE3->Caption = "Log view"; + + KS->Caption = "Spectral display"; + KSFQ->Caption = "FM demodulator"; + KFFTW->Caption = "Spectral display range"; + KFFTS->Caption = "Spectral trail"; + KFSQ->Caption = "Quick"; + KFSS->Caption = "Short"; + KFSL->Caption = "Long"; + KF->Caption = "Spectral sensitivity"; + KR->Caption = "Spectral response"; + KRS->Caption = "Slow"; + KRM->Caption = "Medium"; + KRF->Caption = "Fast"; + KFTD->Caption = "Calculation priority"; + KFTD1->Caption = "Lower"; + KFTD2->Caption = "Normal"; + KFTD3->Caption = "A little higher"; + KFTD4->Caption = "Higher"; + KFTD5->Caption = "Highest"; + KOSC->Caption = "&Oscilloscope..."; + KVOut->Caption = "Soundcard output level(&V)..."; + KVIn->Caption = "Soundcard &Input level..."; + KORep->Caption = "Setup repeater..."; + KOL->Caption = "Setup &Logging..."; + KOM->Caption = "Setup MMSSTV(&O)..."; + + KP->Caption = "P&Rofiles"; + KPDef->Caption = "MMSSTV Default"; + KPInit->Caption = "Initialize all menus as MMSSTV default"; + KPA->Caption = "Assign profile"; + KPD->Caption = "Delete profile"; + + KX->Caption = "&Program"; + KXP->Caption = "MS &Paint"; + KXA->Caption = "Assign program"; + KXD->Caption = "Delete program"; + KXR->Caption = "Restore"; + KXS->Caption = "&Suspend"; + KXSM->Caption = "Suspend+&Minimize"; + + KRadio->Caption = "Radio&Command"; + KRadioS->Caption = "Edit menu"; + KRLoad->Caption = "&Load..."; + KRSet->Caption = "&Setup..."; + KRadioAdd->Caption = "&Add menu..."; + + KHlpUp->Caption = "Version-up information..."; + KHlpPad->Caption = "Use NotePad"; + KHJ->Caption = "JASTA Activity Contest (August)"; + KHN->Caption = "NVCG Contest (July)"; + KVer->Caption = "Version information(&A)..."; + + TabSync->Caption = "Sync"; + TabRX->Caption = "RX"; + TabHist->Caption = "History"; + TabTX->Caption = "TX"; + TabTemp->Caption = "Template"; + SBPhase->Caption = "Phase"; + SBSlant->Caption = "Slant"; + SBSampSet->Caption = "Mem"; + TabS->Tabs->Strings[0] = "S.pix"; + TabS->Tabs->Strings[1] = "S.templates 1"; + + CBSTemp->Caption = "Show with template"; + CBSDraft->Caption = "Draft"; + + KRFS->Caption = "ReSync"; + KRC->Caption = "&Copy"; + KRCC->Caption = "Clear"; + KRCS->Caption = "High accuracy slant adjustment"; + KRCR->Caption = "High accuracy re-sync"; + KRSR->Caption = "Return to the settings sampling frequency"; + KRI->Caption = "Accuracy of initial sync"; + KRI1->Caption = "Normal"; + KRI2->Caption = "Higher"; + KRI3->Caption = "Highest"; + KRAS->Caption = "Auto stop"; + KRAR->Caption = "Auto restart"; + KRASY->Caption = "Auto resync"; + KRSW->Caption = "Auto switch to RX window"; + KRSA->Caption = "Auto slant adjustment"; + KRH->Caption = "Copy to the history"; + KRR->Caption = "Resize to RX size"; + KRRC->Caption = "Resize to 320x256"; + KRB->Caption = "Background color..."; + KRCan->Caption = "Cancel"; + KRD->Caption = "Auto clear"; + + KSP->Caption = "&Paste"; + KSD->Caption = "&Delete"; + KSL->Caption = "&Load from file..."; + KSS->Caption = "&Save to file..."; + KSE->Caption = "&Edit image..."; + KSCD->Caption = "&Move folder..."; + KSFJ->Caption = "Use JPEG format"; + KSFB->Caption = "Use Windows bitmap format"; + KSMS->Caption = "Create a catalog image"; + KSTP->Caption = "Test pattern"; + KSAI->Caption = "Image adjustment..."; + KSAM->Caption = "Auto margin"; + KSIS->Caption = "Stretch TX image by different size"; + KSRR->Caption = "Auto switch to RX window"; + KSCan->Caption = KRCan->Caption; + KSF->Caption = "High quality resizing with pasted thumbnail"; + KSA->Caption = "Add the items to the template"; + + KTPA->Caption = KSAI->Caption; + KTPI->Caption = "Paste image"; + KTPB->Caption = "Bitmap"; + KTPO->Caption = "Overlay"; + KTKA->Caption = "Keep aspect ratio"; + KTOS->Caption = "Resize to the original size"; + KTU->Caption = "&Undo"; + KTC->Caption = "&Cut"; + KTP->Caption = "&Paste"; + KTD->Caption = "&Delete"; + KTO->Caption = "&Object"; + KTOI->Caption = "&Insert..."; + KTCI->Caption = "Insert custom item"; + KTOCB->Caption = "Copy as bitmap"; + KTOB->Caption = "Stretch as bitmap"; + KTOR->Caption = "Properties"; + KTE->Caption = "Add text to the list..."; + KTB->Caption = "Go to &Back"; + KTF->Caption = "Go to &Front"; + KTTD->Caption = "Show transparent point"; + KTT->Caption = "&Transparent point"; + KTAP->Caption = "Auto transparent point"; + KTTC->Caption = "Back&Ground (transparent) color..."; + KTAC->Caption = "Find unique color as background"; + KTLI->Caption = "Items"; + KTSA->Caption = "All"; + KTSI->Caption = "Selected item"; + KTA->Caption = "&All delete"; + KTDF->Caption = "Samples"; + KTMD->Caption = "Draw dummy text of macro"; + KTBT->Caption = "Show TX picture"; + KTSZ->Caption = "Size"; + KTSZT->Caption = "Adapt with TX image"; + KTSD->Caption = "Show size"; + KTX->Caption = "Options"; + KTFS->Caption = "Disable font smoothing"; + KTH->Caption = "Use fast code"; + KTCan->Caption = KRCan->Caption; + + KHCD->Caption = "&Move folder..."; + KHAP->Caption = KTPA->Caption; + KHS->Caption = "&Save to file..."; + KHT->Caption = "Save to file with &Time stamp..."; + KHD->Caption = "&Delete"; + KHDA->Caption = "All delete"; + KHFJ->Caption = KSFJ->Caption; + KHFB->Caption = KSFB->Caption; + KHAC->Caption = "Auto copy to the another folder"; + KHACD->Caption = "Assign another folder name..."; + KHACT->Caption = "Write time stamp in the copied picture"; + KHACJ->Caption = "Copy as JPEG format"; + KHDS->Caption = "Drag && Drop size"; + KHTB->Caption = "Show title bar"; + KHVS->Caption = "Thumbnail size"; + KHCan->Caption = KRCan->Caption; + + KHWeb->Caption = "MMSSTV Web site"; + KHRef->Caption = "MMSSTV Reflector"; + + KCWM->Caption = "Edit menu"; + KCWCancel->Caption = "Cancel"; + KCWS->Caption = "Speed"; + KCWADD->Caption = "Add menu..."; + + SBPL->Hint = "Shift left"; + SBPR->Hint = "Shift right"; + SBPhase->Hint = "Manual sync adjustment"; + SBSlant->Hint = "Manual slant adjustment"; + CBASave->Caption = "Auto history"; + CBASave->Hint = "Auto save to the history"; + SBSampSet->Hint = "Memory sampling freq."; + SBTO->Hint = "Memory TX offset"; + SBLK->Caption = "Lock"; + SBLK->Hint = "Lock RX"; + SBWHist->Hint = "Save to the history"; + SBRView->Hint = "Picture viewer"; + SBCopy->Hint = "Copy"; + SBHView->Hint = "Picture viewer"; + + SBCW->Hint = "Output CW (Right click for CW menu)"; + SBUseTemp->Hint = "Use template"; + SBUS240->Hint = "Shift picture and template for 240 line mode"; + SBDS240->Hint = "Shift picture for the header color bar"; + SBUA240->Hint = "Adjustment picture and template for 240 line mode"; + SBDA240->Hint = "Adjustment picture for the header color bar"; + SBPaste->Hint = "Paste"; + SBTView->Hint = "Picture viewer"; + SBDSel->Hint = "Select item"; + SBDline->Hint = "Draw line"; + SBDBox->Hint = "Draw box"; + SBDBoxS->Hint = "Draw filled box"; + SBDText->Hint = "Draw text"; + SBDPic->Hint = "Draw picture"; + SBDHead->Hint = "Draw Color bar"; + SBDList->Hint = "Draw text from defined list"; + SBDDel->Hint = "Cut"; + SBDPaste->Hint = "Paste"; + SBDCol->Hint = "Set color"; + SBDLineset->Hint = "Set line style"; + SBDFont->Hint = "Set font"; + + SBQSO->Hint = "Start/End QSO"; + SBData->Hint = "Data window"; + SBFind->Hint = "Find callsign"; + SBInit->Hint = "Clear data"; + SBList->Hint = "Log list window"; + SBULog->Hint = "Update template"; + + SBHistFil->Hint = "Image adjustment"; + SBRXID->Hint = "Decode FSKID"; + SBTXID->Hint = "Encode FSKID"; + SBAdj->Hint = "High accuracy slant adjustment (Right click for Sync adjustment)"; + } + else { + MsgEng = 0; + } + KHMT->Caption = KSMS->Caption; + KHC->Caption = KRC->Caption; + KHE->Caption = KSE->Caption; + KSC->Caption = KRC->Caption; + KTOC->Caption = KRC->Caption; + KTOE->Caption = KEdit->Caption; + KTOP->Caption = KTP->Caption; + KTOT->Caption = KTPO->Caption; + KSB->Caption = KRB->Caption; + KSTS->Caption = CBSTemp->Caption; + KSTD->Caption = CBSDraft->Caption; + KSSZ->Caption = KTSZ->Caption; + KSS1->Caption = KTSZ1->Caption; + KSS2->Caption = KTSZ2->Caption; + KSS3->Caption = KTSZ3->Caption; + KSS4->Caption = KTSZ4->Caption; + SBTXFil->Hint = SBHistFil->Hint; + SBRXFil->Hint = SBHistFil->Hint; + KSSD->Caption = KTSD->Caption; + KHSD->Caption = KTSD->Caption; + KRSD->Caption = KTSD->Caption; + KTL->Caption = KSL->Caption; + KTLA->Caption = KTSA->Caption; + KTS->Caption = KSS->Caption; + SBFS->Caption = KRFS->Caption; + KORep->Enabled = sys.m_Repeater; + UpdateToneFreq(); +} +//--------------------------------------------------------------------------- +// ファイルメニューの更新 +void __fastcall TMmsstv::KFileClick(TObject *Sender) +{ + if( pSound != NULL ){ + KFRecTim->Enabled = pSound->m_playmode ? FALSE : TRUE; + KFRec->Enabled = KFRecTim->Enabled; + KFPlay->Enabled = KFRecTim->Enabled; + KFRecRew->Enabled = !KFRecTim->Enabled; + KFRecStop->Enabled = KFRecRew->Enabled; + KFPlayPos->Enabled = (pSound->m_playmode == 1) ? TRUE : FALSE; + if(pSound->WaveFile.m_mode != 2){ + KFRec->Checked = FALSE; + KFRecTim->Checked = FALSE; + } + MultProc(); + } + if( Log.IsOpen() ){ + KLogFlush->Enabled = Log.IsEdit(); + } +} +//--------------------------------------------------------------------------- +//void __fastcall TMmsstv::OnIdle(TObject *Sender, bool &Done) +// アイドル処理 +void __fastcall TMmsstv::UpdateUI(void) +{ + if( sys.m_AutoStop || pDem->m_SyncRestart || sys.m_AutoSync ){ + SBLK->Down = FALSE; + } + else { + SBLK->Down = TRUE; + } + if( Log.IsOpen() ){ + if( Log.m_CurChg ){ + Log.SetLastPos(); + UpdateTextData(); + Log.m_CurChg = 0; + SBQSO->Down = Log.m_sd.btime ? 1 : 0; + } + + SBQSO->Enabled = !HisCall->Text.IsEmpty(); + SBData->Enabled = TRUE; + SBFind->Enabled = SBQSO->Enabled; + SBInit->Enabled = TRUE; + SBList->Enabled = TRUE; + } + else { + SBQSO->Enabled = FALSE; + SBData->Enabled = FALSE; + SBFind->Enabled = FALSE; + SBInit->Enabled = FALSE; + SBList->Enabled = FALSE; + } +} +//--------------------------------------------------------------------------- +// レジストリからの読み出し +void __fastcall TMmsstv::ReadSampFreq(void) +{ + char bf[256]; + AnsiString as, ws; + + sprintf(bf, "%sMmsstv.ini", BgnDir); + TMemIniFile *pIniFile = new TMemIniFile(bf); + + SampFreq = ReadDoubleIniFile(pIniFile, "SoundCard", "SampFreq", SampFreq); + if( (SampFreq > CLOCKMAX) || (SampFreq < 5000.0) ) SampFreq = 11025.0; + sys.m_TxSampOff = ReadDoubleIniFile(pIniFile, "SoundCard", "TxSampOffset", 0.0); + InitSampType(); + sys.m_SampFreq = SampFreq; + SSTVSET.m_SampFreq = SampFreq; + SSTVSET.m_TxSampFreq = SampFreq + sys.m_TxSampOff; + SSTVSET.InitIntervalPara(); + delete pIniFile; + + m_ASLmt[0] = 25.0 * SampFreq / 11025; + m_ASLmt[1] = 10.0 * SampFreq / 11025; + m_ASLmt[2] = 2.0 * SampFreq / 11025; + m_ASLmt[3] = 0.5 * SampFreq / 11025; // 64 + m_ASLmt[4] = 0.2 * SampFreq / 11025; // 128 + m_ASLmt[5] = 0.2 * SampFreq / 11025; // 160 + m_ASLmt[6] = 0.08 * SampFreq / 11025; // 220 +} +//--------------------------------------------------------------------------- +// レジストリからの読み出し +void __fastcall TMmsstv::ReadCombList(TMemIniFile *tp, AnsiString &as, LPCSTR pKey, LPCSTR pDef) +{ + as = tp->ReadString("ComboList", pKey, pDef); + if( as.IsEmpty() ) as = pDef; +} +#define INIVER 2 +#define PROVER 1 +#define LCVER 2 +#define PLLVER 2 +//--------------------------------------------------------------------------- +// レジストリからの読み出し +void __fastcall TMmsstv::ReadRegister(void) +{ + char bf[256]; + int i; + AnsiString as, ws; + + sprintf(bf, "%sMmsstv.ini", BgnDir); + TMemIniFile *pIniFile = new TMemIniFile(bf); + + int IniVer = pIniFile->ReadInteger("Version", "INI", 0); + ReadCombList(pIniFile, as, "LogFreq", ( lcid != LANG_JAPANESE ) ? + "1.8,3.5,3.8,7,10,14,14.230,18,21,21.340,24,28,28.680,50,144,220,430,1200,2400": + "1.8,3.5,3.8,7,7.033,10,14,14.230,18,21,21.340,24,28,28.680,50,144,430,1200,2400" + ); + SetComboBox(LogFreq, as.c_str()); + ReadCombList(pIniFile, as, "LogRST", "595,575,555,594,574,554,444,333"); + SetComboBox(HisRST, as.c_str()); + SetComboBox(MyRST, as.c_str()); + + sys.m_WindowState = pIniFile->ReadInteger("Window", "WindowState", sys.m_WindowState); + sys.m_MemWindow = pIniFile->ReadInteger("Window", "MemoryWindow", sys.m_MemWindow); + sys.m_UseB24 = pIniFile->ReadInteger("Window", "UseB24", sys.m_UseB24); + if( sys.m_MemWindow ){ + Top = pIniFile->ReadInteger("Window", "Top", Top); + Left = pIniFile->ReadInteger("Window", "Left", Left); + Width = pIniFile->ReadInteger("Window", "Width", Width); + Height = pIniFile->ReadInteger("Window", "Height", Height); + } + sys.m_RxViewTop = pIniFile->ReadInteger("Window", "RxViewTop", 0); + sys.m_RxViewLeft = pIniFile->ReadInteger("Window", "RxViewLeft", 0); + sys.m_RxViewWidth = pIniFile->ReadInteger("Window", "RxViewWidth", PBoxRX->Width); + sys.m_RxViewHeight = pIniFile->ReadInteger("Window", "RxViewHeight", PBoxRX->Height); + KVR->Checked = pIniFile->ReadInteger("Window", "RxView", 0); + KRCD->Checked = pIniFile->ReadInteger("Window", "RxViewInd", 0); + + sys.m_SyncViewTop = pIniFile->ReadInteger("Window", "SyncViewTop", 0); + sys.m_SyncViewLeft = pIniFile->ReadInteger("Window", "SyncViewLeft", 0); + sys.m_SyncViewWidth = pIniFile->ReadInteger("Window", "SyncViewWidth", PBoxD12->Width); + sys.m_SyncViewHeight = pIniFile->ReadInteger("Window", "SyncViewHeight", PBoxD12->Height); + KVS->Checked = pIniFile->ReadInteger("Window", "SyncView", 0); + sys.m_HistViewTB = pIniFile->ReadInteger("Window", "HistViewTB", 1); + sys.m_HistViewTop = pIniFile->ReadInteger("Window", "HistViewTop", 0); + sys.m_HistViewLeft = pIniFile->ReadInteger("Window", "HistViewLeft", 0); + sys.m_HistViewWidth = pIniFile->ReadInteger("Window", "HistViewWidth", 516); + sys.m_HistViewHeight = pIniFile->ReadInteger("Window", "HistViewHeight", 70); + sys.m_HistViewSize = pIniFile->ReadInteger("Window", "HistViewSize", 2); + KVH->Checked = pIniFile->ReadInteger("Window", "HistView", 0); + + sys.m_StockViewTop = pIniFile->ReadInteger("Window", "StockViewTop", Top+TabS->Top); + sys.m_StockViewLeft = pIniFile->ReadInteger("Window", "StockViewLeft", Left); + sys.m_StockViewWidth = pIniFile->ReadInteger("Window", "StockViewWidth", 470); + sys.m_StockViewHeight = pIniFile->ReadInteger("Window", "StockViewHeight", 156); + + sys.m_WaterViewTop = pIniFile->ReadInteger("Window", "WaterViewTop", 0); + sys.m_WaterViewLeft = pIniFile->ReadInteger("Window", "WaterViewLeft", GBLog->Left); + sys.m_WaterViewWidth = pIniFile->ReadInteger("Window", "WaterViewWidth", GBLog->Width); + sys.m_WaterViewHeight = pIniFile->ReadInteger("Window", "WaterViewHeight", PanelLvl->Height); + + sys.m_LogViewTop = pIniFile->ReadInteger("Window", "LogViewTop", GBLog->Top); + sys.m_LogViewLeft = pIniFile->ReadInteger("Window", "LogViewLeft", GBLog->Left); + sys.m_LogViewWidth = pIniFile->ReadInteger("Window", "LogViewWidth", GBLog->Width); + sys.m_LogViewHeight = pIniFile->ReadInteger("Window", "LogViewHeight", GBLog->Height); + + sys.m_DivMode = pIniFile->ReadInteger("Window", "DivMode", sys.m_DivMode); + i = pIniFile->ReadInteger("Window", "DivSW", 7); + KVSE1->Checked = i & 1; + KVSE2->Checked = (i >> 1) & 1; + KVSE3->Checked = (i >> 2) & 1; + + sys.m_CtrBtnTop = pIniFile->ReadInteger("Window", "CtrBtnTop", 0); + sys.m_CtrBtnLeft = pIniFile->ReadInteger("Window", "CtrBtnLeft", 0); + sys.m_CtrBtnWidth = pIniFile->ReadInteger("Window", "CtrBtnWidth", 128); + sys.m_CtrBtnHeight = pIniFile->ReadInteger("Window", "CtrBtnHeight", 198); + KVC->Checked = pIniFile->ReadInteger("Window", "CtrBtn", 0); + + sys.m_FileViewShowSize = pIniFile->ReadInteger("FileView", "ShowSize", 0); + sys.m_FileViewKeep = pIniFile->ReadInteger("FileView", "KeepA", 0); + for( i = 0; i < 8; i++ ){ + sprintf(bf, "FileView%d", i+1); + sys.m_FileViewFlag[i] = pIniFile->ReadInteger(bf, "Flag", 0); + sys.m_FileViewSize[i] = pIniFile->ReadInteger(bf, "Size", 2); + sys.m_FileViewMode[i] = pIniFile->ReadInteger(bf, "Mode", 1); + sys.m_FileViewTop[i] = pIniFile->ReadInteger(bf, "Top", 0); + sys.m_FileViewLeft[i] = pIniFile->ReadInteger(bf, "Left", 0); + sys.m_FileViewWidth[i] = pIniFile->ReadInteger(bf, "Width", 516); + sys.m_FileViewHeight[i] = pIniFile->ReadInteger(bf, "Height", 70); + sys.m_FileViewMaxPage[i] = pIniFile->ReadInteger(bf, "MaxPage", 1); + sys.m_FileViewCurPage[i] = pIniFile->ReadInteger(bf, "CurPage", 0); + if( sys.m_FileViewMaxPage[i] > FPAGEMAX ) sys.m_FileViewMaxPage[i] = 10; + if( sys.m_FileViewMaxPage[i] < 1 ) sys.m_FileViewMaxPage[i] = 1; + for( int j = 0; j < sys.m_FileViewMaxPage[i]; j++ ){ + char bff[32]; + sprintf(bff, "FMPage%u", j+1); + sys.m_FileViewFMPage[i][j] = pIniFile->ReadInteger(bf, bff, 0x80000000); + sprintf(bff, j ? "Folder%u" : "Folder", j+1); + sys.m_FileViewFolder[i][j] = pIniFile->ReadString(bf, bff, ""); + sprintf(bff, "Name%u", j+1); + sys.m_FileViewName[i][j] = pIniFile->ReadString(bf, bff, ""); + } + } + sys.m_PreViewTop = pIniFile->ReadInteger("Window", "PreViewTop", 0); + sys.m_PreViewLeft = pIniFile->ReadInteger("Window", "PreViewLeft", 0); + sys.m_PreViewWidth = pIniFile->ReadInteger("Window", "PreViewWidth", 160); + sys.m_PreViewHeight = pIniFile->ReadInteger("Window", "PreViewHeight", 128); + + m_MainPage = pIniFile->ReadInteger("Window", "MainPage", pgRX); + Page->ActivePage = Page->Pages[m_MainPage]; + + TabS->TabIndex = pIniFile->ReadInteger("Window", "StockPage", 0); + m_PSPage = pIniFile->ReadInteger("Window", "StockPicPosition", m_PSPage); + for( i = 0; i < STOCKPAGE; i++ ){ + sprintf(bf, "StockTempPos%u", i + 1); + m_TSPage[i] = pIniFile->ReadInteger("Window", bf, m_TSPage[i]); + } + UDStock->Position = short(TabS->TabIndex ? m_TSPage[TabS->TabIndex-1] : m_PSPage); + KSF->Checked = pIniFile->ReadInteger("Window", "HQResizing", KSF->Checked); + SBUseTemp->Down = pIniFile->ReadInteger("Window", "UseTemplate", SBUseTemp->Down); + CBSTemp->Checked = pIniFile->ReadInteger("Window", "ShowSuperimpos", 0); + CBSDraft->Checked = pIniFile->ReadInteger("Window", "DraftSuperimpos", CBSDraft->Checked); + sys.m_ShowSizeRX = pIniFile->ReadInteger("Window", "ShowSizeRX", sys.m_ShowSizeRX); + sys.m_ShowSizeHist = pIniFile->ReadInteger("Window", "ShowSizeHist", sys.m_ShowSizeHist); + sys.m_ShowSizeTX = pIniFile->ReadInteger("Window", "ShowSizeTX", sys.m_ShowSizeTX); + sys.m_ShowSizeTemp = pIniFile->ReadInteger("Window", "ShowSizeTemp", sys.m_ShowSizeTemp); + sys.m_ShowSizeStock = pIniFile->ReadInteger("Window", "ShowSizeStock", sys.m_ShowSizeStock); + KSIS->Checked = pIniFile->ReadInteger("Window", "StretchTXimage", KSIS->Checked); + KSRR->Checked = pIniFile->ReadInteger("Window", "SwitchRX", KSRR->Checked); + + sys.m_PicClipType = pIniFile->ReadInteger("Window", "PicClipType", sys.m_PicClipType); + sys.m_PicClipRatio = pIniFile->ReadInteger("Window", "PicClipRatio", sys.m_PicClipRatio); + sys.m_PicClipMode = pIniFile->ReadInteger("Window", "PicClipMode", sys.m_PicClipMode); + sys.m_PicClipView = pIniFile->ReadInteger("Window", "PicClipView", sys.m_PicClipView); + sys.m_PicClipColor = (TColor)pIniFile->ReadInteger("Window", "PicClipColor", sys.m_PicClipColor); + sys.m_Way240 = pIniFile->ReadInteger("Window", "Way240", sys.m_Way240); + + sys.m_Priority = pIniFile->ReadInteger("Window", "Priority", sys.m_Priority); + + KSAM->Checked = pIniFile->ReadInteger("Window", "AutoMargin", TRUE); + m_TxClipType = pIniFile->ReadInteger("Window", "TxClipType", m_TxClipType); + sys.m_HistMax = pIniFile->ReadInteger("Window", "HistMax", sys.m_HistMax); + KRD->Checked = pIniFile->ReadInteger("Window", "AutoRxClear", 1); + CBASave->Checked = pIniFile->ReadInteger("Window", "AutoRxSave", CBASave->Checked); + KEA->Checked = pIniFile->ReadInteger("Window", "AutoCopy", KEA->Checked); + KTBT->Checked = pIniFile->ReadInteger("Window", "TempSuperimpos", KTBT->Checked); + KTMD->Checked = pIniFile->ReadInteger("Window", "DummyMacro", KTMD->Checked); + KTTD->Checked = pIniFile->ReadInteger("Window", "ShowTransPoint", KTTD->Checked); + KTAP->Checked = pIniFile->ReadInteger("Window", "AutoTransPoint", KTAP->Checked); + sys.m_HDDSize = pIniFile->ReadInteger("Window", "HistDDSize", sys.m_HDDSize); + + sys.m_WinFontName = pIniFile->ReadString("WindowFont", "Name", sys.m_WinFontName); + sys.m_WinFontCharset = (BYTE)pIniFile->ReadInteger("WindowFont", "Charset", sys.m_WinFontCharset); + sys.m_WinFontStyle = pIniFile->ReadInteger("WindowFont", "Style", sys.m_WinFontStyle); + sys.m_FontAdjSize = pIniFile->ReadInteger("WindowFont", "Adjust", sys.m_FontAdjSize); + sys.m_FFTType = pIniFile->ReadInteger("Define", "FFTType", sys.m_FFTType); + sys.m_FFTGain = pIniFile->ReadInteger("Define", "FFTGain", sys.m_FFTGain); + sys.m_FFTResp = pIniFile->ReadInteger("Define", "FFTResp", sys.m_FFTResp); + sys.m_FFTStg = pIniFile->ReadInteger("Define", "FFTStgv", sys.m_FFTStg); + sys.m_FFTWidth = pIniFile->ReadInteger("Define", "FFTWidth", sys.m_FFTWidth); + sys.m_FFTAGC = pIniFile->ReadInteger("Define", "FFTAGC", sys.m_FFTAGC); + sys.m_FFTPriority = pIniFile->ReadInteger("Define", "FFTPriority", sys.m_FFTPriority); + KVW->Checked = pIniFile->ReadInteger("Define", "WaterSW", KVW->Checked); + pDem->m_LevelType = pIniFile->ReadInteger("Define", "LevelType", pDem->m_LevelType); + + sys.m_HelpNotePad = pIniFile->ReadInteger("Help", "UseNotePad", sys.m_HelpNotePad); + KHlpPad->Checked = sys.m_HelpNotePad; + + sys.m_Sharp2D = pIniFile->ReadInteger("ImageAdj", "Sharp2D", sys.m_Sharp2D); + + sys.m_ColorLow = (TColor)pIniFile->ReadInteger("Color", "WaterLow", sys.m_ColorLow); + sys.m_ColorHigh = (TColor)pIniFile->ReadInteger("Color", "WaterHigh", sys.m_ColorHigh); + sys.m_ColorFFTB = (TColor)pIniFile->ReadInteger("Color", "FFTB", sys.m_ColorFFTB); + sys.m_ColorFFT = (TColor)pIniFile->ReadInteger("Color", "FFT", sys.m_ColorFFT); + sys.m_ColorFFTStg = (TColor)pIniFile->ReadInteger("Color", "FFTStg", sys.m_ColorFFTStg); + sys.m_ColorFFTSync = (TColor)pIniFile->ReadInteger("Color", "FFTSync", sys.m_ColorFFTSync); + sys.m_ColorFFTFreq = (TColor)pIniFile->ReadInteger("Color", "FFTFreq", sys.m_ColorFFTFreq); + + sys.m_ColorRXB = (TColor)pIniFile->ReadInteger("Color", "RxWindow", sys.m_ColorRXB); + PanelRX->Color = sys.m_ColorRXB; + PanelHist->Color = sys.m_ColorRXB; + + sys.m_echo = pIniFile->ReadInteger("Define", "TXLoopBack", sys.m_echo); + + sys.m_UseRxBuff = pIniFile->ReadInteger("Define", "UseRxBuff", sys.m_UseRxBuff); + pDem->m_bpf = pIniFile->ReadInteger("Define", "DEMBPF", pDem->m_bpf); + pDem->m_MSync = pIniFile->ReadInteger("Define", "SyncStart", pDem->m_MSync); + pDem->m_SyncRestart = pIniFile->ReadInteger("Define", "SyncReStart", pDem->m_SyncRestart); + pDem->CalcBPF(); + sys.m_AutoStop = pIniFile->ReadInteger("Define", "AutoStop", sys.m_AutoStop); + sys.m_AutoSync = pIniFile->ReadInteger("Define", "AutoSync", sys.m_AutoSync); + m_SyncAccuracy = pIniFile->ReadInteger("Define", "SyncAccuracy", m_SyncAccuracy); + KRSW->Checked = pIniFile->ReadInteger("Define", "AutoSwirchRX", KRSW->Checked); + KRSA->Checked = pIniFile->ReadInteger("Define", "AutoSlant", KRSA->Checked); + + pDem->m_SenseLvl = pIniFile->ReadInteger("Define", "DEMSLVL", pDem->m_SenseLvl); + pDem->SetSenseLvl(); + sys.m_Differentiator = pIniFile->ReadInteger("Define", "Differentiator", sys.m_Differentiator); + sys.m_DiffLevelP = ReadDoubleIniFile(pIniFile, "Define", "DiffLevel", sys.m_DiffLevelP); + sys.m_DiffLevelM = sys.m_DiffLevelP / 3.0; + + sys.m_FixedTxMode = pIniFile->ReadInteger("Define", "FixedTxMode", sys.m_FixedTxMode); + SSTVSET.m_TxMode = pIniFile->ReadInteger("Define", "SSTVMode", SSTVSET.m_TxMode); + SSTVSET.SetMode(SSTVSET.m_TxMode); + SSTVSET.SetTxMode(SSTVSET.m_TxMode); + for( i = 0; i < 9; i++ ){ + sprintf(bf, "Button%d", i); + m_ModeAssignTX[i] = pIniFile->ReadInteger("Mode", bf, m_ModeAssignTX[i]); + m_ModeAssignRX[i] = m_ModeAssignTX[i]; + } + pDem->m_fskdecode = pIniFile->ReadInteger("Define", "RXFSKID", pDem->m_fskdecode); + SBRXID->Down = pDem->m_fskdecode; + sys.m_TXFSKID = pIniFile->ReadInteger("Define", "TXFSKID", sys.m_TXFSKID); + SBTXID->Down = sys.m_TXFSKID; + sys.m_CWID = pIniFile->ReadInteger("Define", "CWID", sys.m_CWID); + sys.m_CWIDWPM = pIniFile->ReadInteger("Define", "CWIDWPM", 0); + if( sys.m_CWIDWPM <= 0 ){ + sys.m_CWIDSpeed = pIniFile->ReadInteger("Define", "CWIDSpeed", sys.m_CWIDSpeed); + sys.m_CWIDWPM = (1110.0 / (sys.m_CWIDSpeed + 30)) + 0.5; + } + sys.m_CWIDFreq = pIniFile->ReadInteger("Define", "CWIDFreq", sys.m_CWIDFreq); + sys.m_CWIDText = pIniFile->ReadString("Define", "CWIDText", sys.m_CWIDText); + sys.m_MMVID = pIniFile->ReadString("Define", "MMVID", sys.m_MMVID); + pMod->m_TuneFreq = pIniFile->ReadInteger("Define", "TuneFreq", pMod->m_TuneFreq); + sys.m_TuneTXTime = pIniFile->ReadInteger("Define", "TuneTime", sys.m_TuneTXTime); + sys.m_TuneSat = pIniFile->ReadInteger("Define", "TuneSat", sys.m_TuneSat); + sys.m_CWText = pIniFile->ReadString("Define", "CWText", sys.m_CWText); + sys.m_VOX = pIniFile->ReadInteger("Define", "VOX", sys.m_VOX); + as = pIniFile->ReadString("Define", "VOXTone", sys.m_VOXSound); + Yen2CrLf(sys.m_VOXSound, as); + + pMod->m_VariOut = pIniFile->ReadInteger("Vari", "Enabled", 0); + pMod->m_VariOut = 0; + pMod->m_VariR = pIniFile->ReadInteger("Vari", "R", 298); + pMod->m_VariG = pIniFile->ReadInteger("Vari", "G", 588); + pMod->m_VariB = pIniFile->ReadInteger("Vari", "B", 110); + if( pMod->m_VariB == 11 ) pMod->m_VariB = 110; + + pMod->m_outgain = pIniFile->ReadInteger("Define", "TXGAIN", pMod->m_outgain); + pMod->InitGain(); + pMod->m_bpf = pIniFile->ReadInteger("Define", "TXBPF", pMod->m_bpf); + pMod->m_lpf = pIniFile->ReadInteger("Define", "TXLPF", pMod->m_lpf); + pMod->m_bpftap = pIniFile->ReadInteger("Define", "TXBPFTAP", pMod->m_bpftap); + pMod->m_lpffq = pIniFile->ReadInteger("Define", "TXLPFFQ", pMod->m_lpffq); + pMod->CalcFilter(); + + pDem->m_afc = pIniFile->ReadInteger("Define", "RXAFC", pDem->m_afc); + SBAFC->Down = pDem->m_afc; + pSound->m_lms = pIniFile->ReadInteger("Define", "RXLMS", pSound->m_lms); + pSound->m_lms_AN = pIniFile->ReadInteger("Define", "RXLMSAN", pSound->m_lms_AN); + pSound->lms.SetAN(pSound->m_lms_AN); + UpdateLMS(); + + sys.m_SoundFifoRX = pIniFile->ReadInteger("Define", "SoundFifoRX", sys.m_SoundFifoRX); + sys.m_SoundFifoTX = pIniFile->ReadInteger("Define", "SoundFifoTX", sys.m_SoundFifoTX); + if( sys.m_SoundFifoRX > WAVE_FIFO_MAX ) sys.m_SoundFifoRX = WAVE_FIFO_MAX; + if( sys.m_SoundFifoTX > WAVE_FIFO_MAX ) sys.m_SoundFifoTX = WAVE_FIFO_MAX; + sys.m_SoundPriority = pIniFile->ReadInteger("Define", "SoundPriority", sys.m_SoundPriority); + sys.m_SoundDevice = pIniFile->ReadString("Define", "SoundDevice", sys.m_SoundDevice); + sys.m_SoundMMW = pIniFile->ReadString("Define", "SoundMMW", sys.m_SoundMMW); + pSound->m_FifoSizeRX = sys.m_SoundFifoRX; + pSound->m_FifoSizeTX = sys.m_SoundFifoTX; + pSound->SetDeviceID(); + sys.m_SoundStereo = pIniFile->ReadInteger("Define", "SoundStereo", sys.m_SoundStereo); + sys.m_StereoTX = pIniFile->ReadInteger("Define", "StereoTX", sys.m_StereoTX); + pSound->InitWFX(); + + pDem->m_Type = pIniFile->ReadInteger("Define", "DemType", pDem->m_Type); + pDem->m_fqc.m_outOrder = pIniFile->ReadInteger("Define", "fqcOutOrder", pDem->m_fqc.m_outOrder); + pDem->m_fqc.m_outFC = ReadDoubleIniFile(pIniFile, "Define", "fqcOutFC", pDem->m_fqc.m_outFC); + pDem->m_fqc.m_Type = pIniFile->ReadInteger("Define", "fqcType", pDem->m_fqc.m_Type); + pDem->m_fqc.m_SmoozFq = ReadDoubleIniFile(pIniFile, "Define", "fqcSmooth", pDem->m_fqc.m_SmoozFq); + pDem->m_fqc.CalcLPF(); + + int LCVer = pIniFile->ReadInteger("Version", "LinearCalibration", 0); + int PLLVer = pIniFile->ReadInteger("Version", "PLL", 0); + sys.m_DemOff = pIniFile->ReadInteger("Define", "ColorOffset", sys.m_DemOff); + sys.m_DemWhite = ReadDoubleIniFile(pIniFile, "Define", "ColorWhite", sys.m_DemWhite); + sys.m_DemBlack = ReadDoubleIniFile(pIniFile, "Define", "ColorBlack", sys.m_DemBlack); + sys.m_DemCalibration = pIniFile->ReadInteger("Define", "ColorCalibration", sys.m_DemCalibration); + for( i = 0; i < 17; i++ ){ + sprintf(bf, "Value%d", i); + sys.m_Dem17[i] = ReadDoubleIniFile(pIniFile, "Polynomial", bf, sys.m_Dem17[i]); + } + + pDem->m_pll.SetVcoGain(ReadDoubleIniFile(pIniFile, "Define", "pllVcoGain", pDem->m_pll.m_vcogain)); + pDem->m_pll.m_loopOrder = pIniFile->ReadInteger("Define", "pllLoopOrder", pDem->m_pll.m_loopOrder); + pDem->m_pll.m_loopFC = ReadDoubleIniFile(pIniFile, "Define", "pllLoopFC", pDem->m_pll.m_loopFC); + pDem->m_pll.m_outOrder = pIniFile->ReadInteger("Define", "pllOutOrder", pDem->m_pll.m_outOrder); + pDem->m_pll.m_outFC = ReadDoubleIniFile(pIniFile, "Define", "pllOutFC", pDem->m_pll.m_outFC); + pDem->m_pll.MakeLoopLPF(); + pDem->m_pll.MakeOutLPF(); + + sys.m_TxRxName = pIniFile->ReadString("Define", "PTT", sys.m_TxRxName); + sys.m_TxRxLock = pIniFile->ReadInteger("Define", "PTTLock", sys.m_TxRxLock); + sys.m_RTSonRX = pIniFile->ReadInteger("Define", "RTSonRX", sys.m_RTSonRX); + + sys.m_Call = pIniFile->ReadString("Define", "Call", sys.m_Call); + + sys.m_TempDelay = pIniFile->ReadInteger("Log", "TempDelay", sys.m_TempDelay); + sys.m_AutoTimeOffset = pIniFile->ReadInteger("Log", "AutoUTCOffset", sys.m_AutoTimeOffset); + sys.m_TimeOffset = pIniFile->ReadInteger("Log", "UTCOffset", sys.m_TimeOffset); + sys.m_TimeOffsetMin = pIniFile->ReadInteger("Log", "UTCOffsetMin", sys.m_TimeOffsetMin); + sys.m_LogLink = pIniFile->ReadInteger("Log", "LogLink", sys.m_LogLink); + LogLink.LoadMMLink(pIniFile); + LogLink.SetPolling(pIniFile->ReadInteger("Log", "LinkPoll", 0)); + LogLink.SetPTTEnabled(pIniFile->ReadInteger("Log", "LinkPTT", FALSE)); + Log.m_FileName = pIniFile->ReadString("LogFile", "Name", Log.m_FileName); + Log.MakeName(Log.m_FileName.c_str()); + + sys.m_JPEGQuality = pIniFile->ReadInteger("Window", "JPEG", sys.m_JPEGQuality); + + RxHist.m_UseJPEG = pIniFile->ReadInteger("Dir", "HistoryFormat", RxHist.m_UseJPEG); + as = pIniFile->ReadString("Dir", "History", HistDir); + strcpy(HistDir, as.c_str()); + sys.m_UseJPEG = pIniFile->ReadInteger("Dir", "StockFormat", sys.m_UseJPEG); + as = pIniFile->ReadString("Dir", "Stock", StockDir); + strcpy(StockDir, as.c_str()); + as = pIniFile->ReadString("Dir", "RecSound", RecDir); + strcpy(RecDir, as.c_str()); + as = pIniFile->ReadString("Dir", "Bitmap", BitmapDir); + strcpy(BitmapDir, as.c_str()); + as = pIniFile->ReadString("Dir", "SaveBitmap", SBitmapDir); + strcpy(SBitmapDir, as.c_str()); + as = pIniFile->ReadString("Dir", "Template", TemplateDir); + strcpy(TemplateDir, as.c_str()); + sys.m_AutoSaveDir = pIniFile->ReadString("Dir", "AutoSaveDir", sys.m_AutoSaveDir); +// PBoxHist->DragMode = sys.m_AutoSaveDir.IsEmpty() ? dmManual : dmAutomatic; + KHAC->Checked = pIniFile->ReadInteger("Dir", "AutoSave", KHAC->Checked); + KHACT->Checked = pIniFile->ReadInteger("Dir", "AutoSaveTime", KHACT->Checked); + KHACJ->Checked = pIniFile->ReadInteger("Dir", "AutoSaveFormat", KHACJ->Checked); + + as = pIniFile->ReadString("Dir", "ExtLog", ExtLogDir); + strcpy(ExtLogDir, as.c_str()); + for( i = 0; i < TEXTCONVMAX; i++ ){ + sprintf(bf, "WDEF%d", i+1); + LogText.m_tConv[i].Key = pIniFile->ReadString("ExtConv", bf, LogText.m_tConv[i].Key); + sprintf(bf, "WLEN%d", i+1); + LogText.m_tConv[i].w = pIniFile->ReadInteger("ExtConv", bf, LogText.m_tConv[i].w); + } + for( i = 0; i < TEXTCONVMAX; i++ ){ + sprintf(bf, "RDEF%d", i+1); + LogText.m_rConv[i].Key = pIniFile->ReadString("ExtConv", bf, LogText.m_rConv[i].Key); + sprintf(bf, "RLEN%d", i+1); + LogText.m_rConv[i].w = pIniFile->ReadInteger("ExtConv", bf, LogText.m_rConv[i].w); + } + for( i = 0; i < 8; i++ ){ + sprintf(bf, "Program%d", i+1); + sys.m_ExtMode[i] = pIniFile->ReadInteger(bf, "Flag", sys.m_ExtMode[i]); + sys.m_ExtName[i] = pIniFile->ReadString(bf, "Name", sys.m_ExtName[i]); + sys.m_ExtCmd[i] = pIniFile->ReadString(bf, "File", sys.m_ExtCmd[i]); + } + + for( i = 0; i < RECMENUMAX; i++ ){ + sprintf(bf, "File%d", i + 1); + as = pIniFile->ReadString("Recent File", bf, ""); + RecentMenu.SetItemText(i, as.c_str()); + } + Log.ReadIniFile("LogSet", pIniFile); + + LoadRADIOSetup(pIniFile); + + for( i = 0; i < 6; i++ ){ + sprintf(bf, "Color%d", i+1); + sys.m_ColText[i] = (TColor)pIniFile->ReadInteger("DrawText", bf, sys.m_ColText[i]); + } + for( i = 0; i < 4; i++ ){ + sprintf(bf, "Color%d", i+1); + sys.m_ColBar[i] = (TColor)pIniFile->ReadInteger("DrawBar", bf, sys.m_ColBar[i]); + } + for( i = 0; i < 32; i++ ){ + sprintf(bf, "Color%d", i+1); + sys.m_ColorSet[i] = (TColor)pIniFile->ReadInteger("ColorSet", bf, sys.m_ColorSet[i]); + } + + for( i = 0; i < 16; i++ ){ + sprintf(bf, "Text%d", i+1); + sys.m_TextList[i] = pIniFile->ReadString("TextList", bf, sys.m_TextList[i]); + } + + sys.m_TextGrade = pIniFile->ReadInteger("Text", "Grade", sys.m_TextGrade); + sys.m_TextShadow = pIniFile->ReadInteger("Text", "Shadow", sys.m_TextShadow); + sys.m_TextZero = pIniFile->ReadInteger("Text", "Zero", sys.m_TextZero); + sys.m_TextRot = pIniFile->ReadInteger("Text", "Rot", sys.m_TextRot); + sys.m_TextVert = pIniFile->ReadInteger("Text", "Vert", sys.m_TextVert); + sys.m_TextVertH = pIniFile->ReadInteger("Text", "VertH", sys.m_TextVertH); + sys.m_TextStack = pIniFile->ReadInteger("Text", "3D", sys.m_TextStack); + as = pIniFile->ReadString("Text", "MSG", sys.m_Msg); + Yen2CrLf(sys.m_Msg, as); + sys.m_DisFontSmooth = pIniFile->ReadInteger("Text", "DisFontSmooth", sys.m_DisFontSmooth); + i = pIniFile->ReadInteger("Text", "Temp24", sys.m_Temp24); + if( (i >> 16) != sys.m_BitPixel ){ + sys.m_Temp24 = (sys.m_BitPixel >= 24); + } + else { + sys.m_Temp24 = i & 1; + } + + sys.m_PicShape = pIniFile->ReadInteger("Pic", "Shape", sys.m_PicShape); + sys.m_PicAdjust = pIniFile->ReadInteger("Pic", "Adjust", sys.m_PicAdjust); + sys.m_PicLineStyle = pIniFile->ReadInteger("Pic", "LineStyle", sys.m_PicLineStyle); + sys.m_PicLineColor = (TColor)pIniFile->ReadInteger("Pic", "LineColor", sys.m_PicLineColor); + + sys.m_PicSelRTM = pIniFile->ReadInteger("PicSel", "RTM", sys.m_PicSelRTM); + sys.m_PicSelSmooz = pIniFile->ReadInteger("PicSel", "Smooz", sys.m_PicSelSmooz); + sys.m_PicSelCurCol = (TColor)pIniFile->ReadInteger("PicSel", "Color", sys.m_PicSelCurCol); + + int ProVER = pIniFile->ReadInteger("ProFile", "Version", 0); + PRODEM *pPD = m_DemPro; + for( i = 0; i < 8; i++, pPD++ ){ + sprintf(bf, "ProFile%d", i+1); + as = pIniFile->ReadString(bf, "Name", pPD->Name); + if( as.IsEmpty() ) continue; + + pPD->Name = as.c_str(); + pPD->VCOGain = ReadDoubleIniFile(pIniFile, bf, "VcoGain", pPD->VCOGain); + pPD->loopOrder = pIniFile->ReadInteger(bf, "loopOrder", pPD->loopOrder); + pPD->loopFC = ReadDoubleIniFile(pIniFile, bf, "loopFC", pPD->loopFC); + pPD->OutOrder = pIniFile->ReadInteger(bf, "OutOrder", pPD->OutOrder); + pPD->OutFC = ReadDoubleIniFile(pIniFile, bf, "OutFC", pPD->OutFC); + + pPD->Type = pIniFile->ReadInteger(bf, "DemType", pPD->Type); + pPD->crossOutOrder = pIniFile->ReadInteger(bf, "fqcOutOrder", pPD->crossOutOrder); + pPD->crossOutFC = ReadDoubleIniFile(pIniFile, bf, "fqcOutFC", pPD->crossOutFC); + + pPD->crossType = pIniFile->ReadInteger(bf, "fqcType", pPD->crossType); + pPD->crossSmooz = ReadDoubleIniFile(pIniFile, bf, "fqcSmooth", pPD->crossSmooz); + + pPD->DemOff = ReadDoubleIniFile(pIniFile, bf, "DemOff", pPD->DemOff); + pPD->DemWhite = ReadDoubleIniFile(pIniFile, bf, "DemWhite", pPD->DemWhite); + pPD->DemBlack = ReadDoubleIniFile(pIniFile, bf, "DemBlack", pPD->DemBlack); + pPD->DemCalibration = pIniFile->ReadInteger(bf, "DemCalibration", pPD->DemCalibration); + char bff[64]; + double *dp = pPD->Dem17; + for( int j = 0; j < 17; j++, dp++ ){ + sprintf(bff, "DemPolynomial%d", j); + *dp = ReadDoubleIniFile(pIniFile, bf, bff, *dp); + } + pPD->Differentiator = pIniFile->ReadInteger(bf, "Differentiator", pPD->Differentiator); + pPD->DiffLevel = ReadDoubleIniFile(pIniFile, bf, "DiffLevel", pPD->DiffLevel); + } + if( (ProVER < PROVER) || (LCVer < LCVER) || (PLLVer < PLLVER) ){ + InitProfile(); + SetProFile(8); + } + for( i = 0; i < FSKIDMAX; i++ ){ + sprintf(bf, "Item%d", i+1); + as = pIniFile->ReadString("Calls", bf, ""); + if( as.IsEmpty() ) break; + LPSTR p; + for( p = as.c_str(); *p; p++ ){ + if( *p == '_' ) *p = '\t'; + } + TMenuItem *pm = new TMenuItem(this); + pm->Caption = as.c_str(); + pm->RadioItem = FALSE; + pm->OnClick = KCClick; + pm->Checked = FALSE; + pm->Enabled = TRUE; + PopupC->Items->Add(pm); + } + for( i = 0; i < 4; i++ ){ + sprintf(bf, "Font.%d", i+1); + sys.m_RegFont[i].m_Name = pIniFile->ReadString(bf, "Name", sys.m_RegFont[i].m_Name); + sys.m_RegFont[i].m_Charset = (BYTE)pIniFile->ReadInteger(bf, "Charset", sys.m_RegFont[i].m_Charset); + sys.m_RegFont[i].m_Height = pIniFile->ReadInteger(bf, "Height", sys.m_RegFont[i].m_Height); + sys.m_RegFont[i].m_Style = pIniFile->ReadInteger(bf, "Style", sys.m_RegFont[i].m_Style); + } +//CWMenu + sys.m_nCWMenu = pIniFile->ReadInteger("CWMenu", "Menus", sys.m_nCWMenu); + for( i = 0; i < sys.m_nCWMenu; i++ ){ + sprintf(bf, "M%d", i+1); + sys.m_CWMenu[i] = pIniFile->ReadString("CWMenu", bf, sys.m_CWMenu[i]); + } +//RadioMenu + m_nRadioMenu = pIniFile->ReadInteger("RadioMenu", "Menus", m_nRadioMenu); + for( i = 0; i < m_nRadioMenu; i++ ){ + sprintf(bf, "Cap%d", i+1); + m_RadioMenu[i].strTTL = pIniFile->ReadString("RadioMenu", bf, m_RadioMenu[i].strTTL); + sprintf(bf, "Cmd%d", i+1); + m_RadioMenu[i].strCMD = pIniFile->ReadString("RadioMenu", bf, m_RadioMenu[i].strCMD); + } + +// リピータ + if( sys.m_Repeater ){ + pDem->m_Repeater = pIniFile->ReadInteger("Repeater", "Enabled", 0); + + pDem->m_RepTone = pIniFile->ReadInteger("Repeater", "Tone", 1750); + pDem->InitRepeater(); + pDem->m_RepSQ = pIniFile->ReadInteger("Repeater", "SQLVL", 6000); + + sys.m_RepSenseLvl = pIniFile->ReadInteger("Repeater", "Sense", 2); + pDem->SetRepSenseLvl(); + sys.m_RepTimeA = pIniFile->ReadInteger("Repeater", "TimeA", 1500); + sys.m_RepTimeB = pIniFile->ReadInteger("Repeater", "TimeB", 500); + sys.m_RepTimeC = pIniFile->ReadInteger("Repeater", "TimeC", 10000); + sys.m_RepTimeD = pIniFile->ReadInteger("Repeater", "TimeD", 2000); + sys.m_RepAnsCW = pIniFile->ReadString("Repeater", "AnsCW", "%m K"); + + sys.m_RepBeacon = pIniFile->ReadInteger("Repeater", "Beacon", 0); + sys.m_RepBeaconMode = pIniFile->ReadInteger("Repeater", "BeaconMode", smSCT1); + sys.m_RepBeaconFilter = pIniFile->ReadInteger("Repeater", "BeaconFilter", 1); + sys.m_RepTempTX = pIniFile->ReadString("Repeater", "TempReplay", "0"); + sys.m_RepTempBeacon = pIniFile->ReadString("Repeater", "TempBeacon", "0"); + sys.m_RepBottomAdj = pIniFile->ReadInteger("Repeater", "BottomAdj", 1); + sys.m_RepQuietnessTime = pIniFile->ReadInteger("Repeater", "QuietnessTime", 300); + sys.m_RepFolder = pIniFile->ReadString("Repeater", "Folder", ""); + } + else { + pDem->m_Repeater = 0; + } + delete pIniFile; + if( IniVer < INIVER ){ + sys.m_PicClipView = 1; + sys.m_PicClipColor = clBlack; + } +} +//--------------------------------------------------------------------------- +// レジストリへの書き込み +void __fastcall TMmsstv::WriteRegister(void) +{ + CWaitCursor wait; + int i; + char bf[256]; + sprintf(bf, "%sMmsstv.ini", BgnDir); + + try{ + TMemIniFile *pIniFile = new TMemIniFile(bf); + + WriteDoubleIniFile(pIniFile, "SoundCard", "SampFreq", sys.m_SampFreq); + WriteDoubleIniFile(pIniFile, "SoundCard", "TxSampOffset", sys.m_TxSampOff); + + AnsiString as; + GetComboBox(as, LogFreq); + if( !as.IsEmpty() ) pIniFile->WriteString("ComboList", "LogFreq", as); + GetComboBox(as, HisRST); + if( !as.IsEmpty() ) pIniFile->WriteString("ComboList", "LogRST", as); + + pIniFile->WriteInteger("Version", "INI", INIVER); + pIniFile->WriteInteger("Version", "LinearCalibration", LCVER); + pIniFile->WriteInteger("Version", "PLL", PLLVER); + + pIniFile->WriteInteger("Window", "Priority", sys.m_Priority); + pIniFile->WriteInteger("Window", "WindowState", WindowState); + pIniFile->WriteInteger("Window", "MemoryWindow", sys.m_MemWindow); + pIniFile->WriteInteger("Window", "UseB24", sys.m_UseB24); + if( (WindowState == wsNormal) && sys.m_MemWindow ){ + pIniFile->WriteInteger("Window", "Top", Top); + pIniFile->WriteInteger("Window", "Left", Left); + if( sys.m_DivMode != 2 ){ + pIniFile->WriteInteger("Window", "Width", Width); + } + if( !sys.m_DivMode ){ + pIniFile->WriteInteger("Window", "Height", Height); + } + } + pIniFile->WriteInteger("Window", "RxViewInd", KRCD->Checked); + pIniFile->WriteInteger("Window", "RxView", KVR->Checked); + pIniFile->WriteInteger("Window", "RxViewTop", sys.m_RxViewTop); + pIniFile->WriteInteger("Window", "RxViewLeft", sys.m_RxViewLeft); + pIniFile->WriteInteger("Window", "RxViewWidth", sys.m_RxViewWidth); + pIniFile->WriteInteger("Window", "RxViewHeight", sys.m_RxViewHeight); + pIniFile->WriteInteger("Window", "SyncView", KVS->Checked); + pIniFile->WriteInteger("Window", "SyncViewTop", sys.m_SyncViewTop); + pIniFile->WriteInteger("Window", "SyncViewLeft", sys.m_SyncViewLeft); + pIniFile->WriteInteger("Window", "SyncViewWidth", sys.m_SyncViewWidth); + pIniFile->WriteInteger("Window", "SyncViewHeight", sys.m_SyncViewHeight); + pIniFile->WriteInteger("Window", "HistView", KVH->Checked); + pIniFile->WriteInteger("Window", "HistViewTB", sys.m_HistViewTB); + pIniFile->WriteInteger("Window", "HistViewTop", sys.m_HistViewTop); + pIniFile->WriteInteger("Window", "HistViewLeft", sys.m_HistViewLeft); + pIniFile->WriteInteger("Window", "HistViewWidth", sys.m_HistViewWidth); + pIniFile->WriteInteger("Window", "HistViewHeight", sys.m_HistViewHeight); + pIniFile->WriteInteger("Window", "HistViewSize", sys.m_HistViewSize); + + pIniFile->WriteInteger("Window", "CtrBtn", KVC->Checked); + pIniFile->WriteInteger("Window", "CtrBtnTop", sys.m_CtrBtnTop); + pIniFile->WriteInteger("Window", "CtrBtnLeft", sys.m_CtrBtnLeft); + pIniFile->WriteInteger("Window", "CtrBtnWidth", sys.m_CtrBtnWidth); + pIniFile->WriteInteger("Window", "CtrBtnHeight", sys.m_CtrBtnHeight); + + pIniFile->WriteInteger("Window", "StockViewTop", sys.m_StockViewTop); + pIniFile->WriteInteger("Window", "StockViewLeft", sys.m_StockViewLeft); + pIniFile->WriteInteger("Window", "StockViewWidth", sys.m_StockViewWidth); + pIniFile->WriteInteger("Window", "StockViewHeight", sys.m_StockViewHeight); + + pIniFile->WriteInteger("Window", "WaterViewTop", sys.m_WaterViewTop); + pIniFile->WriteInteger("Window", "WaterViewLeft", sys.m_WaterViewLeft); + pIniFile->WriteInteger("Window", "WaterViewWidth", sys.m_WaterViewWidth); + pIniFile->WriteInteger("Window", "WaterViewHeight", sys.m_WaterViewHeight); + + pIniFile->WriteInteger("Window", "LogViewTop", sys.m_LogViewTop); + pIniFile->WriteInteger("Window", "LogViewLeft", sys.m_LogViewLeft); + pIniFile->WriteInteger("Window", "LogViewWidth", sys.m_LogViewWidth); + pIniFile->WriteInteger("Window", "LogViewHeight", sys.m_LogViewHeight); + + pIniFile->WriteInteger("Window", "DivMode", sys.m_DivMode); + pIniFile->WriteInteger("Window", "DivSW", KVSE1->Checked | (KVSE2->Checked << 1) | (KVSE3->Checked << 2) ); + + pIniFile->WriteInteger("FileView", "ShowSize", sys.m_FileViewShowSize); + pIniFile->WriteInteger("FileView", "KeepA", sys.m_FileViewKeep); + for( i = 0; i < 8; i++ ){ + sprintf(bf, "FileView%d", i+1); + pIniFile->WriteInteger(bf, "Flag", sys.m_FileViewFlag[i]); + pIniFile->WriteInteger(bf, "Mode", sys.m_FileViewMode[i]); + pIniFile->WriteInteger(bf, "Size", sys.m_FileViewSize[i]); + pIniFile->WriteInteger(bf, "Top", sys.m_FileViewTop[i]); + pIniFile->WriteInteger(bf, "Left", sys.m_FileViewLeft[i]); + pIniFile->WriteInteger(bf, "Width", sys.m_FileViewWidth[i]); + pIniFile->WriteInteger(bf, "Height", sys.m_FileViewHeight[i]); + pIniFile->WriteInteger(bf, "MaxPage", sys.m_FileViewMaxPage[i]); + pIniFile->WriteInteger(bf, "CurPage", sys.m_FileViewCurPage[i]); + for( int j = 0; j < sys.m_FileViewMaxPage[i]; j++ ){ + char bff[32]; + sprintf(bff, "FMPage%u", j+1); + pIniFile->WriteInteger(bf, bff, sys.m_FileViewFMPage[i][j]); + sprintf(bff, j ? "Folder%u" : "Folder", j+1); + pIniFile->WriteString(bf, bff, sys.m_FileViewFolder[i][j]); + sprintf(bff, "Name%u", j+1); + pIniFile->WriteString(bf, bff, sys.m_FileViewName[i][j]); + } + } + + pIniFile->WriteInteger("Window", "PreViewTop", sys.m_PreViewTop); + pIniFile->WriteInteger("Window", "PreViewLeft", sys.m_PreViewLeft); + pIniFile->WriteInteger("Window", "PreViewWidth", sys.m_PreViewWidth); + pIniFile->WriteInteger("Window", "PreViewHeight", sys.m_PreViewHeight); + + pIniFile->WriteInteger("Window", "StayOnTop", sys.m_StayOnTop); + pIniFile->WriteInteger("Window", "MainPage", m_MainPage); + pIniFile->WriteInteger("Window", "StockPage", TabS->TabIndex); + pIniFile->WriteInteger("Window", "StockPicPosition", m_PSPage); + for( i = 0; i < STOCKPAGE; i++ ){ + sprintf(bf, "StockTempPos%u", i + 1); + pIniFile->WriteInteger("Window", bf, m_TSPage[i]); + } + pIniFile->WriteInteger("Window", "HQResizing", KSF->Checked); + pIniFile->WriteInteger("Window", "UseTemplate", SBUseTemp->Down); + pIniFile->WriteInteger("Window", "ShowSuperimpos", CBSTemp->Checked); + pIniFile->WriteInteger("Window", "DraftSuperimpos", CBSDraft->Checked); + pIniFile->WriteInteger("Window", "PicClipType", sys.m_PicClipType); + pIniFile->WriteInteger("Window", "PicClipRatio", sys.m_PicClipRatio); + pIniFile->WriteInteger("Window", "PicClipMode", sys.m_PicClipMode); + pIniFile->WriteInteger("Window", "PicClipView", sys.m_PicClipView); + pIniFile->WriteInteger("Window", "PicClipColor", sys.m_PicClipColor); + pIniFile->WriteInteger("Window", "Way240", sys.m_Way240); + pIniFile->WriteInteger("Window", "AutoMargin", KSAM->Checked); + pIniFile->WriteInteger("Window", "TxClipType", m_TxClipType); + pIniFile->WriteInteger("Window", "HistMax", sys.m_HistMax); + pIniFile->WriteInteger("Window", "AutoRxClear", KRD->Checked); + pIniFile->WriteInteger("Window", "AutoRxSave", CBASave->Checked); + pIniFile->WriteInteger("Window", "AutoCopy", KEA->Checked); + pIniFile->WriteInteger("Window", "JPEG", sys.m_JPEGQuality); + pIniFile->WriteInteger("Window", "TempSuperimpos", KTBT->Checked); + pIniFile->WriteInteger("Window", "DummyMacro", KTMD->Checked); + pIniFile->WriteInteger("Window", "ShowTransPoint", KTTD->Checked); + pIniFile->WriteInteger("Window", "AutoTransPoint", KTAP->Checked); + pIniFile->WriteInteger("Window", "HistDDSize", sys.m_HDDSize); + pIniFile->WriteInteger("Window", "ShowSizeRX", sys.m_ShowSizeRX); + pIniFile->WriteInteger("Window", "ShowSizeHist", sys.m_ShowSizeHist); + pIniFile->WriteInteger("Window", "ShowSizeTX", sys.m_ShowSizeTX); + pIniFile->WriteInteger("Window", "ShowSizeTemp", sys.m_ShowSizeTemp); + pIniFile->WriteInteger("Window", "ShowSizeStock", sys.m_ShowSizeStock); + pIniFile->WriteInteger("Window", "StretchTXimage", KSIS->Checked); + pIniFile->WriteInteger("Window", "SwitchRX", KSRR->Checked); + + pIniFile->WriteString("WindowFont", "Name", sys.m_WinFontName); + pIniFile->WriteInteger("WindowFont", "Charset", sys.m_WinFontCharset); + pIniFile->WriteInteger("WindowFont", "Style", sys.m_WinFontStyle); + pIniFile->WriteInteger("WindowFont", "Adjust", sys.m_FontAdjSize); + + pIniFile->WriteInteger("Help", "UseNotePad", sys.m_HelpNotePad); + pIniFile->WriteInteger("ImageAdj", "Sharp2D", sys.m_Sharp2D); + + pIniFile->WriteInteger("Define", "FFTType", sys.m_FFTType); + pIniFile->WriteInteger("Define", "FFTGain", sys.m_FFTGain); + pIniFile->WriteInteger("Define", "FFTResp", sys.m_FFTResp); + pIniFile->WriteInteger("Define", "FFTStgv", sys.m_FFTStg); + pIniFile->WriteInteger("Define", "FFTWidth", sys.m_FFTWidth); + pIniFile->WriteInteger("Define", "FFTAGC", sys.m_FFTAGC); + pIniFile->WriteInteger("Define", "FFTPriority", sys.m_FFTPriority); + pIniFile->WriteInteger("Define", "WaterSW", KVW->Checked); + pIniFile->WriteInteger("Define", "LevelType", pDem->m_LevelType); + + pIniFile->WriteInteger("Color", "WaterLow", sys.m_ColorLow); + pIniFile->WriteInteger("Color", "WaterHigh", sys.m_ColorHigh); + pIniFile->WriteInteger("Color", "FFTB", sys.m_ColorFFTB); + pIniFile->WriteInteger("Color", "FFT", sys.m_ColorFFT); + pIniFile->WriteInteger("Color", "FFTStg", sys.m_ColorFFTStg); + pIniFile->WriteInteger("Color", "FFTSync", sys.m_ColorFFTSync); + pIniFile->WriteInteger("Color", "FFTFreq", sys.m_ColorFFTFreq); + pIniFile->WriteInteger("Color", "RxWindow", sys.m_ColorRXB); + + pIniFile->WriteInteger("Define", "UseRxBuff", sys.m_UseRxBuff); + + pIniFile->WriteInteger("Define", "SoundFifoRX", sys.m_SoundFifoRX); + pIniFile->WriteInteger("Define", "SoundFifoTX", sys.m_SoundFifoTX); + pIniFile->WriteInteger("Define", "SoundPriority", sys.m_SoundPriority); + pIniFile->WriteString("Define", "SoundDevice", sys.m_SoundDevice); + pIniFile->WriteInteger("Define", "SoundStereo", sys.m_SoundStereo); + pIniFile->WriteInteger("Define", "StereoTX", sys.m_StereoTX); + pIniFile->WriteString("Define", "SoundMMW", sys.m_SoundMMW); + + pIniFile->WriteString("Define", "PTT", sys.m_TxRxName); + pIniFile->WriteInteger("Define", "PTTLock", sys.m_TxRxLock); + pIniFile->WriteInteger("Define", "RTSonRX", sys.m_RTSonRX); + + pIniFile->WriteInteger("Define", "TXLoopBack", sys.m_echo); + + pIniFile->WriteInteger("Define", "ColorOffset", sys.m_DemOff); + WriteDoubleIniFile(pIniFile, "Define", "ColorWhite", sys.m_DemWhite); + WriteDoubleIniFile(pIniFile, "Define", "ColorBlack", sys.m_DemBlack); + pIniFile->WriteInteger("Define", "ColorCalibration", sys.m_DemCalibration); + for( i = 0; i < 17; i++ ){ + sprintf(bf, "Value%d", i); + WriteDoubleIniFile(pIniFile, "Polynomial", bf, sys.m_Dem17[i]); + } + + pIniFile->WriteInteger("Define", "FixedTxMode", sys.m_FixedTxMode); + pIniFile->WriteInteger("Define", "SSTVMode", SSTVSET.m_TxMode); + for( i = 0; i < 9; i++ ){ + sprintf(bf, "Button%d", i); + pIniFile->WriteInteger("Mode", bf, m_ModeAssignTX[i]); + } + pIniFile->WriteInteger("Define", "RXFSKID", pDem->m_fskdecode); + pIniFile->WriteInteger("Define", "TXFSKID", sys.m_TXFSKID); + pIniFile->WriteInteger("Define", "CWID", sys.m_CWID); + pIniFile->WriteInteger("Define", "CWIDWPM", sys.m_CWIDWPM); + pIniFile->WriteInteger("Define", "CWIDFreq", sys.m_CWIDFreq); + pIniFile->WriteString("Define", "CWIDText", sys.m_CWIDText); + pIniFile->WriteString("Define", "MMVID", sys.m_MMVID); + pIniFile->WriteInteger("Define", "TuneFreq", pMod->m_TuneFreq); + pIniFile->WriteInteger("Define", "TuneTime", sys.m_TuneTXTime); + pIniFile->WriteInteger("Define", "TuneSat", sys.m_TuneSat); + pIniFile->WriteString("Define", "CWText", sys.m_CWText); + + pIniFile->WriteInteger("Define", "VOX", sys.m_VOX); + CrLf2Yen(as, sys.m_VOXSound); + pIniFile->WriteString("Define", "VOXTone", as); + + pIniFile->WriteInteger("Vari", "Enabled", pMod->m_VariOut); + pIniFile->WriteInteger("Vari", "R", pMod->m_VariR); + pIniFile->WriteInteger("Vari", "G", pMod->m_VariG); + pIniFile->WriteInteger("Vari", "B", pMod->m_VariB); + + pIniFile->WriteInteger("Define", "TXGAIN", pMod->m_outgain); + pIniFile->WriteInteger("Define", "TXBPF", pMod->m_bpf); + pIniFile->WriteInteger("Define", "TXLPF", pMod->m_lpf); + pIniFile->WriteInteger("Define", "TXBPFTAP", pMod->m_bpftap); + pIniFile->WriteInteger("Define", "TXLPFFQ", pMod->m_lpffq); + pIniFile->WriteInteger("Define", "DEMSLVL", pDem->m_SenseLvl); + pIniFile->WriteInteger("Define", "Differentiator", sys.m_Differentiator); + WriteDoubleIniFile(pIniFile, "Define", "DiffLevel", sys.m_DiffLevelP); + + pIniFile->WriteInteger("Define", "RXAFC", pDem->m_afc); + pIniFile->WriteInteger("Define", "RXLMS", pSound->m_lms); + pIniFile->WriteInteger("Define", "RXLMSAN", pSound->m_lms_AN); + pIniFile->WriteInteger("Define", "DEMBPF", pDem->m_bpf); + pIniFile->WriteInteger("Define", "SyncStart", pDem->m_MSync); + pIniFile->WriteInteger("Define", "SyncReStart", pDem->m_SyncRestart); + pIniFile->WriteInteger("Define", "AutoStop", sys.m_AutoStop); + pIniFile->WriteInteger("Define", "AutoSync", sys.m_AutoSync); + pIniFile->WriteInteger("Define", "SyncAccuracy", m_SyncAccuracy); + pIniFile->WriteInteger("Define", "AutoSwirchRX", KRSW->Checked); + pIniFile->WriteInteger("Define", "AutoSlant", KRSA->Checked); + + pIniFile->WriteInteger("Define", "DemType", pDem->m_Type); + pIniFile->WriteInteger("Define", "fqcOutOrder", pDem->m_fqc.m_outOrder); + WriteDoubleIniFile(pIniFile, "Define", "fqcOutFC", pDem->m_fqc.m_outFC); + pIniFile->WriteInteger("Define", "fqcType", pDem->m_fqc.m_Type); + WriteDoubleIniFile(pIniFile, "Define", "fqcSmooth", pDem->m_fqc.m_SmoozFq); + + WriteDoubleIniFile(pIniFile, "Define", "pllVcoGain", pDem->m_pll.m_vcogain); + pIniFile->WriteInteger("Define", "pllLoopOrder", pDem->m_pll.m_loopOrder); + WriteDoubleIniFile(pIniFile, "Define", "pllLoopFC", pDem->m_pll.m_loopFC); + pIniFile->WriteInteger("Define", "pllOutOrder", pDem->m_pll.m_outOrder); + WriteDoubleIniFile(pIniFile, "Define", "pllOutFC", pDem->m_pll.m_outFC); + + pIniFile->WriteString("Define", "Call", sys.m_Call); + + pIniFile->WriteInteger("Log", "TempDelay", sys.m_TempDelay); + pIniFile->WriteInteger("Log", "AutoUTCOffset", sys.m_AutoTimeOffset); + pIniFile->WriteInteger("Log", "UTCOffset", sys.m_TimeOffset); + pIniFile->WriteInteger("Log", "UTCOffsetMin", sys.m_TimeOffsetMin); + pIniFile->WriteInteger("Log", "LogLink", sys.m_LogLink); + pIniFile->WriteInteger("Log", "LinkPoll", LogLink.IsPolling()); + pIniFile->WriteInteger("Log", "LinkPTT", LogLink.GetPTTEnabled()); + LogLink.SaveMMLink(pIniFile); + + pIniFile->WriteString("LogFile", "Name", Log.m_FileName); + + for( i = 0; i < 8; i++ ){ + sprintf(bf, "Program%d", i+1); + pIniFile->WriteInteger(bf, "Flag", sys.m_ExtMode[i]); + pIniFile->WriteString(bf, "Name", sys.m_ExtName[i]); + pIniFile->WriteString(bf, "File", sys.m_ExtCmd[i]); + } + + pIniFile->WriteInteger("Dir", "HistoryFormat", RxHist.m_UseJPEG); + pIniFile->WriteString("Dir", "History", HistDir); + pIniFile->WriteInteger("Dir", "StockFormat", sys.m_UseJPEG); + pIniFile->WriteString("Dir", "Stock", StockDir); + pIniFile->WriteString("Dir", "RecSound", RecDir); + pIniFile->WriteString("Dir", "Bitmap", BitmapDir); + pIniFile->WriteString("Dir", "SaveBitmap", SBitmapDir); + pIniFile->WriteString("Dir", "Template", TemplateDir); + pIniFile->WriteString("Dir", "AutoSaveDir", sys.m_AutoSaveDir); + pIniFile->WriteInteger("Dir", "AutoSave", KHAC->Checked); + pIniFile->WriteInteger("Dir", "AutoSaveTime", KHACT->Checked); + pIniFile->WriteInteger("Dir", "AutoSaveFormat", KHACJ->Checked); + + pIniFile->WriteString("Dir", "ExtLog", ExtLogDir); + for( i = 0; i < TEXTCONVMAX; i++ ){ + sprintf(bf, "WDEF%d", i+1); + pIniFile->WriteString("ExtConv", bf, LogText.m_tConv[i].Key); + sprintf(bf, "WLEN%d", i+1); + pIniFile->WriteInteger("ExtConv", bf, LogText.m_tConv[i].w); + } + for( i = 0; i < TEXTCONVMAX; i++ ){ + sprintf(bf, "RDEF%d", i+1); + pIniFile->WriteString("ExtConv", bf, LogText.m_rConv[i].Key); + sprintf(bf, "RLEN%d", i+1); + pIniFile->WriteInteger("ExtConv", bf, LogText.m_rConv[i].w); + } + + for( i = 0; i < RecentMenu.GetCount(); i++ ){ + sprintf(bf, "File%d", i + 1); + pIniFile->WriteString("Recent File", bf, RecentMenu.GetItemText(i)); + } + Log.WriteIniFile("LogSet", pIniFile); + + SaveRADIOSetup(pIniFile); + + for( i = 0; i < 6; i++ ){ + sprintf(bf, "Color%d", i+1); + pIniFile->WriteInteger("DrawText", bf, sys.m_ColText[i]); + } + for( i = 0; i < 4; i++ ){ + sprintf(bf, "Color%d", i+1); + pIniFile->WriteInteger("DrawBar", bf, sys.m_ColBar[i]); + } + for( i = 0; i < 32; i++ ){ + sprintf(bf, "Color%d", i+1); + pIniFile->WriteInteger("ColorSet", bf, sys.m_ColorSet[i]); + } + + for( i = 0; i < 16; i++ ){ + sprintf(bf, "Text%d", i+1); + pIniFile->WriteString("TextList", bf, sys.m_TextList[i]); + } + + pIniFile->WriteInteger("Text", "Grade", sys.m_TextGrade); + pIniFile->WriteInteger("Text", "Shadow", sys.m_TextShadow); + pIniFile->WriteInteger("Text", "Zero", sys.m_TextZero); + pIniFile->WriteInteger("Text", "Rot", sys.m_TextRot); + pIniFile->WriteInteger("Text", "Vert", sys.m_TextVert); + pIniFile->WriteInteger("Text", "VertH", sys.m_TextVertH); + pIniFile->WriteInteger("Text", "3D", sys.m_TextStack); + CrLf2Yen(as, sys.m_Msg); + pIniFile->WriteString("Text", "MSG", as); + pIniFile->WriteInteger("Text", "DisFontSmooth", sys.m_DisFontSmooth); + pIniFile->WriteInteger("Text", "Temp24", sys.m_Temp24 | (sys.m_BitPixel << 16)); + + pIniFile->WriteInteger("Pic", "Shape", sys.m_PicShape); + pIniFile->WriteInteger("Pic", "Adjust", sys.m_PicAdjust); + pIniFile->WriteInteger("Pic", "LineStyle", sys.m_PicLineStyle); + pIniFile->WriteInteger("Pic", "LineColor", sys.m_PicLineColor); + + pIniFile->WriteInteger("PicSel", "RTM", sys.m_PicSelRTM); + pIniFile->WriteInteger("PicSel", "Smooz", sys.m_PicSelSmooz); + pIniFile->WriteInteger("PicSel", "Color", sys.m_PicSelCurCol); + + pIniFile->WriteInteger("ProFile", "Version", PROVER); + PRODEM *pPD = m_DemPro; + for( i = 0; i < 8; i++, pPD++ ){ + sprintf(bf, "ProFile%d", i+1); + pIniFile->WriteString(bf, "Name", pPD->Name); + WriteDoubleIniFile(pIniFile, bf, "VcoGain", pPD->VCOGain); + pIniFile->WriteInteger(bf, "loopOrder", pPD->loopOrder); + WriteDoubleIniFile(pIniFile, bf, "loopFC", pPD->loopFC); + pIniFile->WriteInteger(bf, "OutOrder", pPD->OutOrder); + WriteDoubleIniFile(pIniFile, bf, "OutFC", pPD->OutFC); + pIniFile->WriteInteger(bf, "DemType", pPD->Type); + pIniFile->WriteInteger(bf, "fqcOutOrder", pPD->crossOutOrder); + WriteDoubleIniFile(pIniFile, bf, "fqcOutFC", pPD->crossOutFC); + pIniFile->WriteInteger(bf, "fqcType", pPD->crossType); + WriteDoubleIniFile(pIniFile, bf, "fqcSmooth", pPD->crossSmooz); + + WriteDoubleIniFile(pIniFile, bf, "DemOff", pPD->DemOff); + WriteDoubleIniFile(pIniFile, bf, "DemWhite", pPD->DemWhite); + WriteDoubleIniFile(pIniFile, bf, "DemBlack", pPD->DemBlack); + + pIniFile->WriteInteger(bf, "DemCalibration", pPD->DemCalibration); + char bff[64]; + double *dp = pPD->Dem17; + for( int j = 0; j < 17; j++ ){ + sprintf(bff, "DemPolynomial%d", j); + WriteDoubleIniFile(pIniFile, bf, bff, *dp++); + } + + pIniFile->WriteInteger(bf, "Differentiator", pPD->Differentiator); + WriteDoubleIniFile(pIniFile, bf, "DiffLevel", pPD->DiffLevel); + } + for( i = 0; i < PopupC->Items->Count; i++ ){ + sprintf(bf, "Item%d", i+1); + char bbf[64]; + StrCopy(bbf, AnsiString(PopupC->Items->Items[i]->Caption).c_str(), 63); //ja7ude 0428 + LPSTR p; + for( p = bbf; *p; p++ ){ + if( *p == '\t' ) *p = '_'; + } + pIniFile->WriteString("Calls", bf, bbf); + } +// Fonts + for( i = 0; i < 4; i++ ){ + sprintf(bf, "Font.%d", i+1); + if( sys.m_RegFont[i].m_Height ){ + pIniFile->WriteString(bf, "Name", sys.m_RegFont[i].m_Name); + pIniFile->WriteInteger(bf, "Charset", sys.m_RegFont[i].m_Charset); + pIniFile->WriteInteger(bf, "Height", sys.m_RegFont[i].m_Height); + pIniFile->WriteInteger(bf, "Style", sys.m_RegFont[i].m_Style); + } + } +//CWMenu + try{ + pIniFile->EraseSection("CWMenu"); + } + catch(...){ + } + pIniFile->WriteInteger("CWMenu", "Menus", sys.m_nCWMenu); + for( i = 0; i < sys.m_nCWMenu; i++ ){ + sprintf(bf, "M%d", i+1); + pIniFile->WriteString("CWMenu", bf, sys.m_CWMenu[i]); + } + +//RadioMenu + try{ + pIniFile->EraseSection("RadioMenu"); + } + catch(...){ + } + pIniFile->WriteInteger("RadioMenu", "Menus", m_nRadioMenu); + for( i = 0; i < m_nRadioMenu; i++ ){ + sprintf(bf, "Cap%d", i+1); + pIniFile->WriteString("RadioMenu", bf, m_RadioMenu[i].strTTL); + sprintf(bf, "Cmd%d", i+1); + pIniFile->WriteString("RadioMenu", bf, m_RadioMenu[i].strCMD); + } + +// リピータ + if( sys.m_Repeater ){ + pIniFile->WriteInteger("Repeater", "Enabled", pDem->m_Repeater); + pIniFile->WriteInteger("Repeater", "Tone", pDem->m_RepTone); + pIniFile->WriteInteger("Repeater", "SQLVL", pDem->m_RepSQ); + pIniFile->WriteInteger("Repeater", "Sense", sys.m_RepSenseLvl); + pIniFile->WriteInteger("Repeater", "TimeA", sys.m_RepTimeA); + pIniFile->WriteInteger("Repeater", "TimeB", sys.m_RepTimeB); + pIniFile->WriteInteger("Repeater", "TimeC", sys.m_RepTimeC); + pIniFile->WriteInteger("Repeater", "TimeD", sys.m_RepTimeD); + pIniFile->WriteString("Repeater", "AnsCW", sys.m_RepAnsCW); + pIniFile->WriteInteger("Repeater", "Beacon", sys.m_RepBeacon); + pIniFile->WriteInteger("Repeater", "BeaconMode", sys.m_RepBeaconMode); + pIniFile->WriteInteger("Repeater", "BeaconFilter", sys.m_RepBeaconFilter); + pIniFile->WriteString("Repeater", "TempReplay", sys.m_RepTempTX); + pIniFile->WriteString("Repeater", "TempBeacon", sys.m_RepTempBeacon); + pIniFile->WriteInteger("Repeater", "BottomAdj", sys.m_RepBottomAdj); + pIniFile->WriteInteger("Repeater", "QuietnessTime", sys.m_RepQuietnessTime); + pIniFile->WriteString("Repeater", "Folder", sys.m_RepFolder); + } + pIniFile->UpdateFile(); + delete pIniFile; + + } + catch(...){ + ErrorMB(MsgEng?"Cannot update MMSSTV.INI":"MMSSTV.INIを更新できません."); + } + sprintf(bf, "%s"TEMPV106C, StockDir); + SaveTemplate(&DrawMain, bf); + sprintf(bf, "%s"TEMPV106L, StockDir); + SaveTemplate(&DrawText, bf); + sprintf(bf, "%sCurrent.bmp", StockDir); + SaveBitmap(pBitmapTXM, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateTitle(void) +{ + char bbf[64]; + char bf[512]; + bf[0] = 0; + if( IsCall(sys.m_Call.c_str()) ){ + sprintf(bf, "%s (%s) - ", sys.m_Call.c_str(), Log.GetName() ); + } + strcat(bf, "MMSSTV "); + if( sys.m_Repeater && (pSound != NULL) && pDem->m_Repeater ){ + strcat(bf, "Repeater "); + } + strcat(bf, VERID VERBETA); + if( SampType ){ + sprintf(bbf, " [based on %.lfHz]", SampBase); + strcat(bf, bbf); + } + if( sys.m_BitPixel < 24 ){ + sprintf(bbf, " [%u colors]", int(pow(2, sys.m_BitPixel))); + strcat(bf, bbf); + } + if( sys.m_bCQ100 ){ + strcat(bf, " for Internet"); + } + Caption = bf; + UpdateCallsign(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateLMS(void) +{ + SBLMS->Down = pSound->m_lms; + int an = pSound->m_lms_AN; + if( an ){ + SBLMS->Caption = (an == 1) ? "ANF" : "ANS"; + } + else { + SBLMS->Caption = "LMS"; + } + SBLMS->Font->Color = an ? clRed : clBlack; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustFocus(void) +{ + Page->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FormPaint(TObject *Sender) +{ + if( m_InitFirst ){ + m_InitFirst = 0; + int f1stInst = FALSE; + if( (sys.m_Call == "NOCALL") || sys.m_Call.IsEmpty() ){ + f1stInst = TRUE; + AnsiString as = ""; + if( sys.m_Call != "NOCALL" ){ + as = sys.m_Call; + } + if( InputMB("MMSSTV", MsgEng ? "Please enter your callsign":"あなたのコールサインを入力して下さい.", as) == TRUE ){ + if( !as.IsEmpty() ){ + char bf[MLCALL+1]; + StrCopy(bf, as.c_str(), MLCALL); + jstrupr(bf); + sys.m_Call = bf; + Log.MakePathName(ClipCall(bf)); + } + } + } + char bf[256]; + sprintf(bf, "%sARRL.DX", BgnDir); + Cty.Load(bf); + sprintf(bf, "%sMMCG.DEF", BgnDir); + mmcg.LoadDef(bf); + + if( !f1stInst ) Log.DoBackup(); + Log.Open(NULL, !f1stInst); + LogLink.UpdateLink(sys.m_LogLink); + UpdateTextData(); + if( Log.m_sd.btime ) SBQSO->Down = TRUE; + UpdateTitle(); + OpenCloseCom(); + if( sys.m_UseRxBuff == 2 ){ + WaveStg.Open(); + } + if( pSound != NULL ){ + pDem->OpenCloseRxBuff(); + pSound->Resume(); + } + sprintf(bf, "%sCurrent.bmp", StockDir); + if( IsFile(bf) ){ + LoadBitmap(pBitmapTXM, bf); + pBitmapTX->Width = pBitmapTXM->Width; + pBitmapTX->Height = pBitmapTXM->Height; + } + else { + FillBitmap(pBitmapTXM, sys.m_PicClipColor); + } + ChangeTxMode(SSTVSET.m_TxMode); + if( m_TxSPage == -1 ) TabSChange(NULL); + m_ChangeTemp = 1; + SBULog->Enabled = TRUE; + UpdatePic(); + UpdateUI(); + if( KVS->Checked ) KVSClick(NULL); + for( int i = 0; i < 8; i++ ){ + if( sys.m_FileViewFlag[i] ){ + ShowFileView(i, 1); + } + } + if( KVH->Checked ) KVHClick(NULL); + if( KVR->Checked ) KVRClick(NULL); + if( KVC->Checked ) KVCClick(NULL); + if( KSF->Checked ) m_ReqHistF = 10; + DisPaint = 0; + AdjustFocus(); + } + else if( pSound != NULL ){ + if( (pSound->m_susp == 1) && m_SuspMinimized ) KXRClick(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::EntryAlign(void) +{ + RECT rc; + rc.left = 0; + rc.top = 0; + rc.right = 792-1; + rc.bottom = 548-1; + + AlignFix.EntryControl(GBMode, &rc, GBMode->Font); + AlignFix.EntryControl(GB1, &rc, GB1->Font); + AlignFix.EntryControl(PanelLvl, &rc, NULL); + AlignFix.EntryControl(PanelFFT, &rc, NULL); + AlignFix.EntryControl(PanelWater, &rc, NULL); + AlignFix.EntryControl(GBLog, &rc, GBLog->Font); + + AlignMode.EntryControl(SBAuto, GBMode, NULL); + AlignMode.EntryControl(SBM1, GBMode, NULL); + AlignMode.EntryControl(SBM2, GBMode, NULL); + AlignMode.EntryControl(SBM3, GBMode, NULL); + AlignMode.EntryControl(SBM4, GBMode, NULL); + AlignMode.EntryControl(SBM5, GBMode, NULL); + AlignMode.EntryControl(SBM6, GBMode, NULL); + AlignMode.EntryControl(SBM7, GBMode, NULL); + AlignMode.EntryControl(SBM8, GBMode, NULL); + AlignMode.EntryControl(SBM9, GBMode, NULL); + + AlignDsp.EntryControl(SBAFC, GB1, NULL); + AlignDsp.EntryControl(SBLMS, GB1, NULL); + + AlignLog.EntryControl(L1, GBLog, NULL); + AlignLog.EntryControl(L2, GBLog, NULL); + AlignLog.EntryControl(L3, GBLog, NULL); + AlignLog.EntryControl(L4, GBLog, NULL); + AlignLog.EntryControl(L5, GBLog, NULL); + AlignLog.EntryControl(L6, GBLog, NULL); + AlignLog.EntryControl(L7, GBLog, NULL); + AlignLog.EntryControl(HisCall, GBLog, NULL); + AlignLog.EntryControl(HisRST, GBLog, NULL); + AlignLog.EntryControl(MyRST, GBLog, NULL); + AlignLog.EntryControl(HisName, GBLog, NULL); + AlignLog.EntryControl(HisQTH, GBLog, NULL); + AlignLog.EntryControl(EditNote, GBLog, NULL); + AlignLog.EntryControl(EditQSL, GBLog, NULL); + AlignLog.EntryControl(SBULog, GBLog, NULL); + AlignLog.EntryControl(SBRXID, GBLog, NULL); + AlignLog.EntryControl(SBTXID, GBLog, NULL); + AlignLog.EntryControl(SBQSO, GBLog, NULL); + AlignLog.EntryControl(SBData, GBLog, NULL); + AlignLog.EntryControl(SBFind, GBLog, NULL); + AlignLog.EntryControl(SBInit, GBLog, NULL); + AlignLog.EntryControl(SBList, GBLog, NULL); + AlignLog.EntryControl(LogFreq, GBLog, NULL); + + AlignPCS.EntryControl(CBSTemp, PCS, CBSTemp->Font); + AlignPCS.EntryControl(CBSDraft, PCS, CBSDraft->Font); + AlignPCS.EntryControl(LS, PCS, LS->Font); + AlignPCS.EntryControl(UDStock, PCS, NULL); + + int CX = ::GetSystemMetrics(SM_CXFULLSCREEN); + int CY = ::GetSystemMetrics(SM_CYFULLSCREEN); +// int CX = ::GetSystemMetrics(SM_CXSCREEN); +// int CY = ::GetSystemMetrics(SM_CYSCREEN); + if( (CX < Width)||(CY < Height) ){ + Top = 0; + Left = 0; + Width = CX; + Height = CY; + } + if( CY < 500 ){ + TabS->TabHeight = 20; + } + FormCenter(this, CX, CY); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustStockView(void) +{ + if( pStockView == NULL ){ + TabS->Height = ClientHeight - Page->Height; + PCS->Left = GBMode->Left; + PCS->Top = TabS->Top; + PCS->Height = TabS->TabHeight; + PCS->Width = ClientWidth - PCS->Left; + AlignPCS.NewAlign(PCS); + } + else { + if( !pStockView->Visible ) return; + PCS->Left = pStockView->ClientWidth - PCS->Width; +// AlignPCS.NewAlign(PCS); + } + MultProc(); + double h = PBoxS->ClientHeight; + double w = PBoxS->ClientWidth; + double k = w / h; + int smax = m_SMax; + if( k < 3.2 ){ + m_SMax = 18; + } + else if( k < 6.0 ){ + m_SMax = 12; + } + else { + m_SMax = 6; + } + MultProc(); + if( pBitmapSS != NULL ){ + delete pBitmapSS; + pBitmapSS = NULL; + } + for( int i = 0; i < STOCKPAGE; i++ ){ + if( pBitmapST[i] != NULL ){ + delete pBitmapST[i]; + pBitmapST[i] = NULL; + } + } + if( smax != m_SMax ){ + m_DragPMax = STOCKMAX / m_SMax; + if( STOCKMAX % m_SMax ) m_DragPMax++; + if( UDStock->Position >= m_DragPMax ){ + UDStock->Position = 0; + } + UDStock->Max = SHORT(m_DragPMax - 1); + if( !m_InitFirst ){ + m_TxSPage = -1; + TabSChange(NULL); + } + } + char bf[64]; + sprintf(bf, "%u/%u", UDStock->Position + 1, m_DragPMax); + LS->Caption = bf; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FormResize(TObject *Sender) +{ + if( Timer->Enabled == FALSE ) return; + + if( WindowState != wsMinimized ){ + int n = (WindowState == wsNormal) ? 0 : 1; + if( pStockView != NULL ){ + if( !m_ClientHeight[n] ){ + m_ClientHeight[n] = ClientHeight; + } + if( ClientHeight != Page->Height ){ + ClientHeight = Page->Height; + } + } + else if( m_ClientHeight[n] ){ + ClientHeight = m_ClientHeight[n]; + m_ClientHeight[n] = 0; + } + + if( pWaterView != NULL ){ + if( !m_ClientWidth[n] ){ + m_ClientWidth[n] = ClientWidth; + } + if( ClientWidth != GBMode->Left + GBMode->Width ){ + ClientWidth = GBMode->Left + GBMode->Width; + } + } + else if( m_ClientWidth[n] ){ + ClientWidth = m_ClientWidth[n]; + m_ClientWidth[n] = 0; + } + } + + CWaitCursor wait; + if( pWaterView == NULL ){ + AlignFix.NewFixAlign(this, GBMode->Left); MultProc(); + } + else { + PanelLvl->Left = 0; + int w = 30; + PanelLvl->Width = w; + PanelFFT->Left = w; + PanelWater->Left = w; + w = pWaterView->ClientWidth - PanelLvl->Width; + PanelFFT->Width = w; + PanelWater->Width = w; + + w = pWaterView->ClientHeight - PBoxG->Height; + PanelLvl->Height = w; + PanelFFT->Height = w * 24 / 35; + PanelWater->Top = PanelFFT->Top + PanelFFT->Height; + PanelWater->Height = pWaterView->ClientHeight - PanelFFT->Height - PanelFFT->Top; + HisCall->ParentFont = TRUE; + } + AlignMode.NewAlign(GBMode); MultProc(); + AlignDsp.NewAlign(GB1); MultProc(); + AlignLog.NewAlign(GBLog); MultProc(); +// UDStock->Left = PCS->Width - UDStock->Width; +// LS->Left = UDStock->Left - LS->Width - 5; + PanelFFT->Height = KVW->Checked ? PanelLvl->Height - PanelWater->Height : PanelLvl->Height; + if( pBitmapLvl != NULL ){ + delete pBitmapLvl; + pBitmapLvl = new Graphics::TBitmap(); + pBitmapLvl->Width = PBoxLvl->Width; + pBitmapLvl->Height = PBoxLvl->Height; + MultProc(); + delete pBitmapFFT; + pBitmapFFT = new Graphics::TBitmap(); + pBitmapFFT->Width = PBoxFFT->Width > DFFTSIZE ? DFFTSIZE : PBoxFFT->Width; + pBitmapFFT->Height = PBoxFFT->Height; + delete pBitmapWater; + MultProc(); + pBitmapWater = NULL; + if( KVW->Checked ){ + pBitmapWater = CreateBitmap(PBoxWater->Width > DFFTSIZE ? DFFTSIZE : PBoxWater->Width, PBoxWater->Height, pf24bit); + PanelWater->Visible = TRUE; + } + else { + PanelWater->Visible = FALSE; + } + if( pSound != NULL ){ + MultProc(); + InitDrawFFT(); + DrawFFT(1); + if( KVW->Checked ) DrawWater(1); + } + } + PBoxG->Width = PBoxFFT->Width; + PBoxG->Left = PanelFFT->Left + (PanelFFT->Width - PBoxFFT->Width)/2; + PBoxG->Top = 0; + PBoxG->Height = PanelFFT->Top - 1; + + if( pStockView != NULL ) pStockView->Visible = KVSE1->Checked; + if( pWaterView != NULL ) pWaterView->Visible = KVSE2->Checked; + if( pLogView != NULL ) pLogView->Visible = KVSE3->Checked; + + AdjustStockView(); + m_MW = Height - ClientHeight; +} +//--------------------------------------------------------------------------- +// 現在の論理パレットを返す(TControl::GetPaletteのオーバライド関数) +HPALETTE __fastcall TMmsstv::GetPalette(void) +{ + sys.m_Palette = 1; + switch(m_MainPage){ + case pgRX: + return pBitmapRX->Palette; + case pgHist: + return pBitmapHist->Palette; + case pgTX: + return pBitmapTX->Palette; + case pgTemp: + return pBitmapTemp->Palette; + default: + return NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CloseFileView(int i) +{ + TFileViewDlg *fp = pFileView[i]; + sys.m_FileViewMaxPage[i] = fp->m_MaxPage; + sys.m_FileViewCurPage[i] = fp->m_CurPage; + for( int j = 0; j < fp->m_MaxPage; j++ ){ + CFILEV *cp = fp->pFileV[j]; + sys.m_FileViewFolder[i][j] = cp->m_Folder.c_str(); + sys.m_FileViewName[i][j] = cp->m_Name.c_str(); + sys.m_FileViewFMPage[i][j] = cp->m_CurPage | (cp->m_UseIndex ? 0x80000000 : 0) | (cp->m_Type << 16); + } + sys.m_FileViewFlag[i] = 0; + sys.m_FileViewSize[i] = fp->m_SSize | (fp->KBP->Checked ? 0x00010000 : 0); + sys.m_FileViewMode[i] = fp->SBMode->Down; + fp->GetViewPos(sys.m_FileViewLeft[i], sys.m_FileViewTop[i], sys.m_FileViewWidth[i], sys.m_FileViewHeight[i]); + delete fp; + pFileView[i] = NULL; + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustFileView(void) +{ + int i; + int f = FALSE; + for( i = 0; i < 8; i++ ){ + if( (pFileView[i] != NULL) && (!pFileView[i]->Visible) && (!pFileView[i]->m_Suspend) ){ + CloseFileView(i); + } + if( pFileView[i] == NULL ) f = TRUE; + } + KVF->Enabled = f; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LoadAllFileView(void) +{ + for( int i = 0; i < 8; i++ ){ + if( pFileView[i] != NULL ){ + pFileView[i]->Reset(); + pFileView[i]->LoadImage(); + MultProc(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ReOpenFileView(TFileViewDlg *pView) +{ + for( int i = 0; i < 8; i++ ){ + if( pFileView[i] == pView ){ + CWaitCursor w; + CloseFileView(i); + ShowFileView(i, 0); + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::InitDrawFFT(void) +{ + GetFFTRect(m_FM, m_low); + + m_XW = pBitmapFFT->Width; + if( m_XW > DFFTSIZE ) m_XW = DFFTSIZE; + m_FX[0] = int(((1900-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + m_FX[1] = int(((1500-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + m_FX[2] = int(((2300-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + m_FX[3] = int(((1201-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + m_FX[6] = int(((2044-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + if( pSound != NULL ){ + int fq; + if( sys.m_Repeater ){ + fq = pDem->m_RepTone; + m_FX[4] = int(((fq-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + } + fq = pSound->notch.m_freq; + m_FX[5] = int(((fq-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + } + m_of = m_low * FFT_SIZE / FFTSamp; + InitFFT(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::InitFFT(void) +{ + memset(m_FFTMAX, 0, sizeof(m_FFTMAX)); + memset(m_fft, 0, sizeof(m_fft)); + + m_FFTMax = 512; + m_FFTSumMax = m_FFTMax*4; + + m_WaterMax = 128; + m_WaterSumMax = m_WaterMax*8; + m_WaterMin = 0; + + m_FFTFlag = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CalcFFT(void) +{ + CFFT *fp = &pSound->fftIN; + if( fp->IsData() ){ + switch(sys.m_FFTGain){ + case 0: + fp->CalcFFT(m_FFTWINDOW, 30.0, sys.m_FFTResp); + break; + case 1: + fp->CalcFFT(m_FFTWINDOW, 34.0, sys.m_FFTResp); + break; + case 2: + fp->CalcFFT(m_FFTWINDOW, 42.0, sys.m_FFTResp); + break; + case 3: + fp->CalcFFT(m_FFTWINDOW, 54.0, sys.m_FFTResp); + break; + default: + if( sys.m_FFTType == 2 ){ + fp->CalcFFT(m_FFTWINDOW, 10.0, sys.m_FFTResp); + } + else { + fp->CalcFFT(m_FFTWINDOW, (SBTX->Down && (sys.m_echo != 2)) ? 0.5 : 10.0, sys.m_FFTResp); + } + break; + } + int *ip = m_fft; + int i, d; + if( (sys.m_FFTType == 1) && (g_dblToneOffset < -10.0) ){ + int of = (m_low + g_dblToneOffset) * FFT_SIZE / FFTSamp; + int n; + for( i = 0; i < m_XW; i++, ip++ ){ + n = (i * m_FM)/m_XW + of; + if( n >= 0 ){ + d = fp->m_fft[n]; + } + else { + d = 0; + } + if( !sys.m_FFTPriority || (d > *ip) ){ + *ip = d; + } + } + } + else { + if( sys.m_FFTPriority ){ + for( i = 0; i < m_XW; i++, ip++ ){ + d = fp->m_fft[(i * m_FM)/m_XW + m_of]; + if( d > *ip ) *ip = d; + } + } + else { + for( i = 0; i < m_XW; i++, ip++ ){ + *ip = fp->m_fft[(i * m_FM)/m_XW + m_of]; + } + } + } + m_FFTFlag++; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawFFT(int sw) +{ + TCanvas *tp = pBitmapFFT->Canvas; + TRect rc; + int XR = pBitmapFFT->Width - 1; + int YB = pBitmapFFT->Height - 1; + rc.Left = 0; + rc.Top = 0; + rc.Right = XR; + rc.Bottom = pBitmapFFT->Height; + tp->Brush->Color = sys.m_ColorFFTB; + tp->FillRect(rc); + + int i, x; + char bf[64]; + if( pSound->m_Err || pDem->m_OverFlow ){ + if( pSound->m_Err || !SBTX->Down ){ + tp->Font->Color = clWhite; + tp->Font->Height = -16; + strcpy(bf, pSound->m_Err ? "Lost sound" : "Overflow"); + x = tp->TextWidth(bf); + tp->TextOut(XR - x - 3, 0, bf); + } + pDem->m_OverFlow = 0; + if( pSound->m_Err ) pSound->m_Err--; + } + else if( pSound->WaveFile.m_mode ){ + tp->Font->Color = clWhite; + tp->Font->Height = -16; + LPCSTR p = ""; + if( pSound->WaveFile.m_pause ){ + p = "Pause"; + } + else { + switch(pSound->WaveFile.m_mode){ + case 1: + p = "Play"; + break; + case 2: + p = "Rec."; + break; + } + } + if( *p ){ + x = tp->TextWidth(p); + tp->TextOut(XR - x - 3, 0, p); + } + } + if( pDem->m_Tick ){ + tp->Pen->Color = clLime; + x = int(((pDem->m_TickFreq-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + tp->MoveTo(x, 0); + tp->LineTo(x, YB); + } + else { + int fNarrow = FALSE; + if( SBTX->Down ){ + fNarrow = SSTVSET.m_fTxNarrow; + } + else if( pDem->m_Sync ){ + fNarrow = pDem->m_fNarrow; + } + if( fNarrow ){ + tp->Pen->Color = sys.m_ColorFFTSync; + tp->Pen->Style = psSolid; + tp->MoveTo(m_FX[0], 0); // 1900 + tp->LineTo(m_FX[0], YB); + tp->Pen->Color = sys.m_ColorFFTFreq; + tp->Pen->Style = psDot; + tp->MoveTo(m_FX[3], 0); // 1200 + tp->LineTo(m_FX[3], YB); + tp->MoveTo(m_FX[1], 0); // 1500 + tp->LineTo(m_FX[1], YB); + tp->MoveTo(m_FX[6], 0); // 2044 + tp->LineTo(m_FX[6], YB); + } + else { + tp->Pen->Color = sys.m_ColorFFTSync; + tp->Pen->Style = psSolid; + tp->MoveTo(m_FX[3], 0); // 1200 + tp->LineTo(m_FX[3], YB); + tp->Pen->Color = sys.m_ColorFFTFreq; + tp->Pen->Style = psDot; + tp->MoveTo(m_FX[0], 0); // 1900 + tp->LineTo(m_FX[0], YB); + tp->Pen->Style = psSolid; + tp->MoveTo(m_FX[1], 0); // 1500 + tp->LineTo(m_FX[1], YB); + } + tp->Pen->Style = psSolid; + tp->MoveTo(m_FX[2], 0); // 2300 + tp->LineTo(m_FX[2], YB); + if( sys.m_Repeater ){ + tp->Pen->Style = psDot; + tp->MoveTo(m_FX[4], 0); + tp->LineTo(m_FX[4], YB); + tp->Pen->Style = psSolid; + } + } + if( pDem->m_Sync && pDem->m_afc ){ + tp->Pen->Color = clWhite; + tp->Pen->Style = psSolid; +#if NARROW_SYNC == 1200 + int fq = 1200 + pDem->m_AFCFQ; +#else + int fq = (pDem->m_fNarrow ? NARROW_SYNC : 1200) + pDem->m_AFCFQ; +#endif + TPoint ary[3]; + x = int(((fq-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + ary[0].x = x, ary[0].y = 0; + ary[1].x = x-3, ary[1].y = 7; + ary[2].x = x+3, ary[2].y = 7; + tp->Brush->Color = pDem->m_AFCFlag ? clBlue : clRed; + tp->Polygon(ary, 2); + if( pDem->m_AFCFlag ) pDem->m_AFCFlag--; + } + if( sw || (!sys.m_FFTType) ) return; + + + tp->Pen->Color = sys.m_ColorFFT; + + int d; + double k = double(YB)/256.0; + if( sys.m_FFTAGC ){ + if( sys.m_FFTType == 1 ){ + switch(sys.m_FFTGain){ + case 0: + case 1: + case 2: + case 3: + k = k * 64 / m_FFTMax; + break; + case 4: + k = k * 80 / m_FFTMax; + break; + case 5: + k = k * 128 / m_FFTMax; + break; + case 6: + k = k * 384 / m_FFTMax; + break; + case 7: + k = k * 768 / m_FFTMax; + break; + } + } + else { + k = k * 128 / m_FFTMax; + } + } + else if( sys.m_FFTGain >= 4 ){ + k = k * 0.25; + } + int max = 0; + int *mp = &m_fft[1]; + int *wp = &m_FFTMAX[1]; + for( i = 1; i < m_XW; i++, mp++, wp++ ){ + d = *mp * k; + if( d > max ) max = d; + if( d >= YB ) d = YB - 1; + if( *wp < d ) *wp = d; + if( i > 1 ){ + tp->LineTo(i, YB-d); + } + else { + tp->MoveTo(i, YB-d); + } + } + if( sys.m_FFTAGC ){ + m_FFTSumMax -= m_FFTMax; + m_FFTSumMax += max; + switch(sys.m_FFTGain){ + case 4: + if( m_FFTSumMax < 2048 ) m_FFTSumMax = 2048; + break; + case 5: + if( m_FFTSumMax < 1024 ) m_FFTSumMax = 1024; + break; + case 6: + if( m_FFTSumMax < 256 ) m_FFTSumMax = 256; + break; + case 7: + if( m_FFTSumMax < 128 ) m_FFTSumMax = 128; + break; + default: + if( m_FFTSumMax < 160 ) m_FFTSumMax = 160; + break; + } + m_FFTMax = m_FFTSumMax / 4; + } + + if( sys.m_FFTStg ){ + tp->Pen->Color = sys.m_ColorFFTStg; + + mp = &m_FFTMAX[1]; + for( i = 1; i < XR; i++, mp++ ){ + d = *mp; + if( i > 1 ){ + tp->LineTo(i, YB-d); + } + else { + tp->MoveTo(i, YB-d); + } + + switch(sys.m_FFTStg){ + case 1: + (*mp) -= 8; + if( *mp < 0 ) *mp = 0; + break; + case 2: + (*mp) -= 4; + if( *mp < 0 ) *mp = 0; + break; + case 3: + (*mp) -= 2; + if( *mp < 0 ) *mp = 0; + break; + } + } + } + if( pSound->m_notch ){ +// tp->Brush->Color = sys.m_ColorFFTB; + tp->Font->Color = clWhite; + tp->Font->Height = -16; + int tm = ::SetBkMode(tp->Handle, TRANSPARENT); + tp->TextOut(0, 0, "Notch"); + ::SetBkMode(tp->Handle, tm); + tp->Pen->Color = clWhite; + tp->Pen->Style = psSolid; + TPoint ary[3]; + x = m_FX[5]; + ary[0].x = x, ary[0].y = YB; + ary[1].x = x-5, ary[1].y = YB-9; + ary[2].x = x+5, ary[2].y = YB-9; + tp->Brush->Color = clRed; + tp->Polygon(ary, 2); + } +#if SHOWAFCFQ + else if( pDem->m_Sync && pDem->m_AFCFlag ){ + tp->Font->Color = clWhite; + tp->Font->Height = -16; + int tm = ::SetBkMode(tp->Handle, TRANSPARENT); + int fq = (pDem->m_fNarrow ? NARROW_SYNC : 1200) + pDem->m_AFCFQ; + sprintf(bf, "%u", fq); + tp->TextOut(0, 0, bf); + ::SetBkMode(tp->Handle, tm); + } +#endif +} +//--------------------------------------------------------------------------- +// スレッド内でコールしてはいけない +void __fastcall TMmsstv::DrawWater(int sw) +{ + TCanvas *tp = pBitmapWater->Canvas; + TRect rc; + int XR = pBitmapWater->Width - 1; + int YB = pBitmapWater->Height - 1; + rc.Left = 0; + rc.Top = 0; + rc.Right = XR; + rc.Bottom = YB+1; + if( sw ){ + tp->Brush->Color = sys.m_ColorLow; + tp->FillRect(rc); + return; + } + int i; + + TRect src(rc); + src.Bottom--; + rc.Top++; + tp->CopyRect(rc, tp, src); + + int d; + int mx = -MAXINT; + int mi = 0; + int micnt = 0; + double k1 = 128.0/double(m_WaterMax - m_WaterMin); + BYTE *bp = (BYTE *)pBitmapWater->ScanLine[0]; + BYTE *cp; + for( i = 0; i < m_XW; i++ ){ + if( sys.m_FFTStg ){ + d = m_FFTMAX[i] * 2; + } + else { + d = m_fft[i] / 2; + } + if( mx < d ) mx = d; + mi += d; + micnt++; + + d -= m_WaterMin; + d = double(d) * k1; + + if( d >= 128 ) d = 127; + if( d < 0 ) d = 0; + + cp = ((BYTE *)&ColorTable[127-d]) + 2; + *bp++ = *cp--; + *bp++ = *cp--; + *bp++ = *cp; + } + if( sys.m_FFTGain < 4 ){ + m_WaterSumMax -= m_WaterMax; + m_WaterSumMax += mx; + if( m_WaterSumMax < 64 ) m_WaterSumMax = 64; + m_WaterMax = m_WaterSumMax / 4; + if( micnt ){ + m_WaterMin = mi/micnt; + } + if( m_WaterMin >= (m_WaterMax - 16) ) m_WaterMax = m_WaterMin + 16; + } + else if( sys.m_FFTStg ){ + m_WaterMin = 0; + m_WaterMax = 48; + } + else { + m_WaterMin = 0; + m_WaterMax = 64; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CMfft(TMessage *Message) +{ + if( pSound != NULL ){ + CalcFFT(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::TimerTimer(TObject *Sender) +{ + if( pSound != NULL ){ + if( !pSound->IsBusy() && sys.m_FFTType && !DisPaint ){ + if( !sys.m_FFTPriority ){ + CalcFFT(); + } + if( m_FFTFlag ){ + DrawFFT(0); + PBoxFFT->Canvas->Draw(0, 0, pBitmapFFT); + if( KVW->Checked ){ + DrawWater(0); + PBoxWater->Canvas->Draw(0, 0, pBitmapWater); + } + if( sys.m_FFTPriority ) memset(m_fft, 0, sizeof(m_fft)); + m_FFTFlag = 0; + } + } + SendSSTV(); + DrawSSTV(); + DrawLvl(); + + if( pSound->IsBusy() ) return; + + if( pDem->m_Sync && m_SyncAccuracy && !m_ReqSampChg && (SSTVSET.m_Mode != smAVT) ){ + if( (m_SyncAccuracy == 2) && !(m_SyncAccuracyN & 2) && (m_AY >= 32) ){ + m_SyncAccuracyN = 3; + RedrawSampFreq(FALSE); + } + else if( !(m_SyncAccuracyN & 1) && (m_AY >= 16) ){ + m_SyncAccuracyN = 1; + RedrawSampFreq(FALSE); + } + } +#if 0 + if( (m_MainPage == pgTX) && (!SBTX->Down) ){ + if( !m_Timer1S ){ + m_Timer1S = 20; + UpdateUI(); + } + m_Timer1S--; + } +#endif + if( pRxView != NULL ){ + if( pRxView->Visible ){ + if( !SBTX->Down || sys.m_echo ){ + if( !m_TimerRXV ){ + m_TimerRXV = 5; + pRxView->PBoxPaint(NULL); + } + m_TimerRXV--; + } +// ::SetWindowPos(pRxView->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE ); + } + else { + pRxView->GetViewPos(sys.m_RxViewLeft, sys.m_RxViewTop, sys.m_RxViewWidth, sys.m_RxViewHeight); + delete pRxView; + pRxView = NULL; + } + } + if( pSyncView != NULL ){ + if( pSyncView->Visible ){ + if( !m_TimerRXS ){ + m_TimerRXS = 5; + pSyncView->PBoxPaint(NULL); + } + m_TimerRXS--; + } + else { + pSyncView->GetViewPos(sys.m_SyncViewLeft, sys.m_SyncViewTop, sys.m_SyncViewWidth, sys.m_SyncViewHeight); + delete pSyncView; + pSyncView = NULL; + } + } + if( m_FileViewClose ){ + m_FileViewClose = 0; + AdjustFileView(); + if( pHistView != NULL ){ + if( !pHistView->Visible ){ + CloseHistView(); + } + } + } + if( (pCtrBtn != NULL) && !pCtrBtn->Visible ){ + pCtrBtn->GetViewPos(sys.m_CtrBtnLeft, sys.m_CtrBtnTop, sys.m_CtrBtnWidth, sys.m_CtrBtnHeight); + delete pCtrBtn; + pCtrBtn = NULL; + } + + if( pDem->m_fskrec ){ + pDem->m_fskrec = 0; + if( pDem->m_Sync && ((pCtrBtn == NULL) || (!pCtrBtn->SBLock->Down)) ){ // 強制停止 + if( pDem->m_LoopBack != 1 ){ + pDem->m_SyncMode = 0; + RxAutoPush(TRUE); +// SBAuto->Down = TRUE; +// SBAutoClick(NULL); + } + } + if( strcmp(sys.m_Call.c_str(), pDem->m_fskcall) ){ + AddCall(pDem->m_fskcall); + if( !SBTX->Down && (!SBQSO->Down || HisCall->Text.IsEmpty()) ){ + if( strcmp(AnsiString(HisCall->Text).c_str(), pDem->m_fskcall) ){ //ja7ude 0428 + HisCall->Text = pDem->m_fskcall; + FindCall(); + HisCallChange(NULL); + } + } + } + } + if( pDem->m_fskNRrec ){ + pDem->m_fskNRrec = 0; +#if DEBUGFSKID + if( (!SBQSO->Down || (strlen(MyRST->Text.c_str()) <= 3)) ){ +#else + if( !SBTX->Down && (!SBQSO->Down || (strlen(AnsiString(MyRST->Text).c_str()) <= 3) || !strcmp(AnsiString(HisCall->Text).c_str(), pDem->m_fskcall)) ){ //ja7ude 0428 +#endif + char bf[MLRST+1]; + sprintf(bf, "595%s", pDem->m_fskNRS); + if( strcmp(AnsiString(MyRST->Text).c_str(), bf) ){ //ja7ude 0428 + MyRST->Text = bf; + HisCallChange(NULL); + } + } + } + } + if( pRadio != NULL ){ + pRadio->Timer(SBTX->Down, Timer->Interval); + if( pRadio->IsFreqChange(AnsiString(LogFreq->Text).c_str()) ){ //ja7ude 0428 + LogFreq->Text = pRadio->GetFreq(); + LogFreqChange(NULL); + } + } + if( m_ChangeTemp && !SBTX->Down && (SBUseTemp->Down || (KTBT->Checked && (m_MainPage == pgTemp)) ) ){ + m_ChangeTemp--; + if( !m_ChangeTemp ){ + m_ChangeTemp = 1; + UpdatePic(); + } + } + if( m_ReqSampChg ){ + if( m_ReqSampChg < 0 ){ + m_ReqSampChg = 0; + RedrawSampFreq(FALSE); + } + else { + m_ReqSampChg--; + if( !m_ReqSampChg ){ + RedrawSampFreq(TRUE); + } + } + } + if( m_ReqHistF && !SBTX->Down && !m_TempHold && ((m_MainPage == pgTX) || (m_MainPage == pgTemp)) ){ + m_ReqHistF--; + if( !m_ReqHistF ){ + AdjustHistF(); + UpdatePic(); + } + } + if( m_TuneTimer && SBTune->Down ){ + if( ::GetTickCount() >= m_TuneTimer ){ + m_TuneTimer = 0; + if( sys.m_TuneSat && (sys.m_TuneTXTime >= 0) ){ + ToTX(); + } + else { + ToRX(); + } + } + } + if( m_TempTimer ) m_TempTimer--; + + if( LogLink.IsEnabled() ){ + if( LogLink.TimerLogLink() ){ + UpdateLogLink(); + } + if( LogLink.IsPolling() && LogLink.IsLink() && !SBTX->Down && !pDem->m_Sync ){ + LogLink.EventGetFreq(); + } + } + + if( sys.m_Repeater && !SBTX->Down && pDem->m_Repeater ){ + Repeater(); + } + g_ExecPB.Timer(); +#if 0 + CSSTVDEM *dp = &pSound->SSTVDEM; + CSYNCINT *si = &dp->m_sint2; + char bf[128]; + sprintf(bf, "%d, %d, %d, %d", si->m_MSyncList[5], si->m_MSyncList[4], si->m_MSyncList[3], si->m_MSyncList[2]); +// sprintf(bf, "%d, %d, %s, %s", pDem->m_fskmode, pDem->m_fskcnt, pDem->m_fskdata, pDem->m_fskcall); +// sprintf(bf, "%d", pDem->m_VisTrig); +// sprintf(bf, "%d", dp->m_repsig); + EditNote->Text = bf; +#endif +#if 0 + char bf[128]; + sprintf(bf, "%d,%d,%d", m_SyncMax, m_SyncRPos, int(SSTVSET.m_OFP)); + EditNote->Text = bf; +#endif +#if 0 + char bf[128]; + sprintf(bf, "%d", _getmbcp()); + EditNote->Text = bf; +// _setmbcp(932); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateLogLink(void) +{ + LogLink.UpdateLink(sys.m_LogLink); + char bf[256]; + if( LogLink.IsLink() ){ + sprintf(bf, "Log [Link to %s]", LogLink.GetSessionName()); + GBLog->Caption = bf; + } + else { + GBLog->Caption = "Log"; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SyncSSTV(void) +{ + CSSTVDEM *dp = pDem; + if( SSTVSET.m_Mode == smAVT ){ + SSTVSET.m_IOFS = SSTVSET.m_OFS = 0; + dp->m_wBgn = 0; + return; + } + int e = 4; + if( m_SyncAccuracy && sys.m_UseRxBuff && (SSTVSET.m_TW >= SSTVSET.m_SampFreq) ) e = 3; + if( dp->m_wLine >= e ){ + int i, pg, x; + int n = 0; + int wd = int(SSTVSET.m_TW) + 2; + int *bp = new int[wd]; + memset(bp, 0, sizeof(int)*(wd)); + for( pg = 0; pg < e; pg++ ){ + short *sp = &dp->m_B12[pg * dp->m_BWidth]; + for( i = 0; i < SSTVSET.m_WD; i++, sp++ ){ + x = fmod(n, SSTVSET.m_TW); + bp[x] += *sp; + n++; + } + } + n = 0; + int max = 0; + for( i = 0; i < wd; i++ ){ + if( max < bp[i] ){ + max = bp[i]; + n = i; + } + } + n -= SSTVSET.m_OFP; + n = -n; + switch(SSTVSET.m_Mode){ + case smSCT1: + case smSCT2: + case smSCTDX: + if( n < 0 ) n += SSTVSET.m_WD; + break; + default: + break; + } + if( dp->m_Type == 2 ) n -= dp->m_hill.m_htap/4; + SSTVSET.m_IOFS = SSTVSET.m_OFS = dp->m_rBase = n; + delete bp; + dp->m_wBgn = 0; + } +} + +void __fastcall TMmsstv::InitAutoStop(void) +{ + memset(m_AutoStopAPos, 0, sizeof(m_AutoStopAPos)); + m_AutoStopCnt = 0; + m_AutoStopACnt = 0; + m_AutoStopPos = 0; + m_ASBgnPos = 0x7fffffff; + m_ASDis = 0; + m_ASBitMask = 0; + m_ASAvg.SetCount(16); + m_Z[0] = m_Z[1] = m_Z[2] = 0; + m_ASPos[0] = 64; + m_ASPos[1] = 128; + m_ASPos[2] = 160; + m_ASPos[3] = (SSTVSET.m_L - 36); + switch(SSTVSET.m_Mode){ + case smPD50: + case smPD90: // Max 128 + case smMP73: + case smMP115: + case smMP140: + case smMP175: + case smR24: + case smRM8: + case smRM12: + case smMN73: + case smMN110: + case smMN140: + m_ASPos[0] = 48; + m_ASPos[1] = 64; + m_ASPos[2] = 72; + m_ASPos[3] = 110; + break; + case smPD160: // Max 200 + m_ASPos[0] = 48; + m_ASPos[1] = 80; + m_ASPos[2] = 126; + m_ASPos[3] = 160; + break; + case smPD290: // Max 308 Limit 288 + m_ASPos[3] = 240; + break; + case smP3: // Max496 + m_ASPos[1] = 200; + m_ASPos[2] = 360; + m_ASPos[3] = 496-48; + break; + case smP5: // Max496 Limit 439 + m_ASPos[1] = 200; + m_ASPos[2] = 300; + m_ASPos[3] = 380; + break; + case smP7: // Max496 Limit 330 + m_ASPos[1] = 128; + m_ASPos[2] = 220; + m_ASPos[3] = 280; + break; + } + m_AutoSyncPos = 0x7fffffff; + m_Mult = int(SSTVSET.m_TW / 320.0); + m_AutoSyncDiff = m_Mult * 3; + if( m_AutoSyncDiff > (45 * SampBase / 11025) ) m_AutoSyncDiff = (45 * SampBase / 11025); +} + +//--------------------------------------------------------------------------- +// 最小2乗近似 +int __fastcall TMmsstv::GetSqerrPos(int n) +{ + double T, L, TT, TL; + T = L = TT = TL = 0; + for( int i = 0; i < n; i++ ){ + T += i; + int l = m_AutoStopAPos[15-i]; + L += l; + TT += i * i; + TL += i * l; + } + double l0 = (L * TT - T * TL) / (n * TT - T*T); +// double k0 = (5 * TL - L * T) / (5 * TT - T*T); + return l0; +} + +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::AutoStopJob(void) +{ + if( (sys.m_AutoStop || sys.m_AutoSync || KRSA->Checked) && (SSTVSET.m_Mode != smAVT) ){ // 自動停止のチェック + m_AutoStopPos = m_SyncPos - int(SSTVSET.m_OFP); + int h = SSTVSET.m_TW/2; + m_AutoStopPos = m_AutoStopPos > h ? m_AutoStopPos - SSTVSET.m_TW : m_AutoStopPos; + if( m_AutoStopACnt >= 8 ){ + int i, n; + for( n = i = 0; i < 16; i++ ){ + int df = ABS(m_AutoStopPos - m_AutoStopAPos[i]); + if( m_AutoStopACnt >= 16 ){ + if( df <= (14*m_Mult) ) n++; + } + else { + if( df <= (10*m_Mult) ) n++; + } + } +#if 0 + char bf[128]; + sprintf(bf, "%d, %d", m_AutoStopPos, m_SyncMax - m_SyncMin); + EditNote->Text = bf; +#endif + if( n < 4 ){ + if( sys.m_AutoSync && !m_ASDis && (n >= 2) && (m_AutoSyncPos != 0x7fffffff) && !m_AutoSyncCount && sys.m_UseRxBuff ){ + if( (m_SyncMax - m_SyncMin) > 5000 ){ + int df = m_AutoStopPos - m_AutoStopAPos[15]; + if( ABS(df) <= ((KRSA->Checked ? 5 : 2)*m_Mult) ){ + if( m_AutoSyncCount || !sys.m_UseRxBuff ){ + df = m_AutoStopPos; + } + else { + df = m_AutoStopPos - m_AutoSyncPos; + } + if( ABS(df) >= ((KRSA->Checked ? 5 : 2)*m_Mult) ){ + df = m_AutoStopPos; + if( df < 0 ) df += SSTVSET.m_TW; + pDem->m_Skip = df; + m_SyncPos = m_SyncRPos = -1; + m_AutoSyncPos = 0x7fffffff; + m_AutoSyncDis = 6; + m_AutoSyncCount++; + if( m_AutoStopCnt ) m_AutoStopCnt--; + } + } + } + } + if( (n < 2) || ((m_SyncMax - m_SyncMin) < 8192) ){ + m_AutoStopCnt++; + } + if( sys.m_AutoStop && !m_ASDis && (m_AutoStopCnt >= 8) ){ + RxAutoPush(TRUE); +// SBAuto->Down = TRUE; +// SBAutoClick(NULL); + return TRUE; + } + } + else { + m_AutoSyncPos = m_AutoStopPos; + m_AutoStopCnt -= 2; + if( m_AutoStopCnt < 0 ) m_AutoStopCnt = 0; + } + if( sys.m_AutoSync && !m_ASDis && (!m_AutoSyncDis) && (m_AutoSyncPos != 0x7fffffff) && (m_AutoSyncCount || !sys.m_UseRxBuff) ){ + if( (m_SyncMax - m_SyncMin) > 5000 ){ + int df = m_AutoStopPos - m_AutoStopAPos[15]; + if( ABS(df) <= m_AutoSyncDiff ){ + df = m_AutoStopPos; + if( ABS(df) >= m_AutoSyncDiff ){ + if( df < 0 ) df += SSTVSET.m_TW; + pDem->m_Skip = df; + m_SyncPos = m_SyncRPos = -1; + m_AutoSyncPos = 0x7fffffff; + m_AutoSyncDis = 6; + m_AutoSyncCount++; + if( m_AutoStopCnt ) m_AutoStopCnt--; + } + } + } + } + } + if( m_AutoSyncDis ) m_AutoSyncDis--; + m_AutoStopACnt++; + memcpy(m_AutoStopAPos, &m_AutoStopAPos[1], sizeof(m_AutoStopAPos) - sizeof(int)); + m_AutoStopAPos[15] = m_AutoStopPos; + + if( KRSA->Checked && !m_AutoSyncCount && (!SBTX->Down || (sys.m_echo == 2) || sys.m_TxSampOff) ){ + if( m_AutoStopACnt >= 5 ){ + int df, cf; + df = ABS(m_AutoStopAPos[15] - m_AutoStopAPos[14]); + cf = ABS(m_AutoStopAPos[14] - m_AutoStopAPos[13]); + if( df < cf ) df = cf; + cf = ABS(m_AutoStopAPos[13] - m_AutoStopAPos[12]); + if( df < cf ) df = cf; + cf = ABS(m_AutoStopAPos[12] - m_AutoStopAPos[11]); + if( df < cf ) df = cf; + cf = ABS(m_AutoStopAPos[11] - m_AutoStopAPos[10]); + if( df < cf ) df = cf; + int pos; + if( df < (8*m_Mult) ){ +// pos = m_AutoStopAPos[15]; + pos = GetSqerrPos(5); +#if 0 + char bf[64]; + sprintf(bf, "%d, %d", pos, m_AutoStopAPos[15]); + EditNote->Text = bf; +#endif + if( m_ASBgnPos == 0x7fffffff ){ + m_ASBgnPos = pos; + m_ASCurY = 0; + } + else if( m_ASCurY >= 3){ + double d = (m_ASBgnPos - pos) * SSTVSET.m_SampFreq / SSTVSET.m_TW; + d /= m_ASCurY; + double smp = m_ASAvg.Avg(SSTVSET.m_SampFreq - d); + d = SSTVSET.m_SampFreq - smp; + if( (!(m_ASBitMask & 1) && (ABS(d) >= m_ASLmt[0]) )|| + (!(m_ASBitMask & 1) && (m_ASCurY >= 16) && (ABS(d) >= m_ASLmt[1]))|| + (!(m_ASBitMask & 1) && (m_ASCurY >= 32) && (ABS(d) >= m_ASLmt[2]))|| + (!(m_ASBitMask & 2) && (m_ASCurY >= m_ASPos[0]) && (ABS(d) >= m_ASLmt[3]))|| + (!(m_ASBitMask & 4) && (m_ASCurY >= m_ASPos[1]) && (ABS(d) >= m_ASLmt[4]))|| + (!(m_ASBitMask & 8) && (m_ASCurY >= m_ASPos[2]) && (ABS(d) >= m_ASLmt[5]))|| + (!(m_ASBitMask & 16) && (m_ASCurY >= m_ASPos[3]) && (ABS(d) >= m_ASLmt[6])) + ){ + if( m_ASCurY >= 32 ) m_ASBitMask |= 1; + if( m_ASCurY >= m_ASPos[0] ) m_ASBitMask |= 2; + if( m_ASCurY >= m_ASPos[1] ) m_ASBitMask |= 4; + if( m_ASCurY >= m_ASPos[2] ) m_ASBitMask |= 8; + if( m_ASCurY >= m_ASPos[3] ) m_ASBitMask |= 16; + if( !m_ASDis ){ + if( smp > (SampFreq * 1100/1060) ){ + smp = SampFreq * 1100/1060; + } + SSTVSET.m_SampFreq = NormalSampFreq(smp, 50); + m_ReqSampChg = 1; + } + } +#if 0 + if( !m_ASDis && (m_AutoStopACnt >= 16) ){ + char bf[32]; + sprintf(bf, "%8.2lf", NormalSampFreq(smp, 50)); + pBitmapD12->Canvas->Brush->Color = clBlack; + pBitmapD12->Canvas->Font->Color = clWhite; + pBitmapD12->Canvas->TextOut(250, 3, bf); + } +#endif + } + } + } + } + m_ASCurY++; + } + return FALSE; +} + +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::GetPixelLevel(short *ip) +{ + if( sys.m_DemCalibration && (pCalibration != NULL) ){ + int d = (*ip / 8) + 2048; + if( d < 0 ) d = 0; + if( d > 4096 ) d = 4096; + return pCalibration[d]; + } + else { + int d = (*ip - sys.m_DemOff); + if( d >= 0 ){ + d *= sys.m_DemWhite; + } + else { + d *= sys.m_DemBlack; + } + return d; + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::GetPictureLevel(short *ip) +{ + int d; + if( sys.m_UseRxBuff != 2 ){ + if( *ip < *(ip+SSTVSET.m_KSB) ){ + d = GetPixelLevel(ip+SSTVSET.m_KSB); + } + else { + d = GetPixelLevel(ip); + } + } + else { + d = GetPixelLevel(ip); + } + return d; +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::GetPictureLevelDiff(short *ip) +{ + int d; + if( sys.m_UseRxBuff != 2 ){ + if( *ip < *(ip+SSTVSET.m_KSB) ){ + d = GetPixelLevel(ip+SSTVSET.m_KSB); + } + else { + d = GetPixelLevel(ip); + } + } + else { + d = GetPixelLevel(ip); + } + double o = (d * -0.5 + m_Z[0] + m_Z[1] * -0.5); + if( o > 0.0 ){ + o *= sys.m_DiffLevelP; + } + else { + o *= sys.m_DiffLevelM; + } + o += m_Z[2]; + m_Z[1] = m_Z[0]; + m_Z[2] = m_Z[0] = d; + return o; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MultProc(void) +{ + if( pSound == NULL ) return; + + if( pDem->m_Sync || pSound->m_Tx ){ + if( pSound->m_Tx && IsSR() ) SendSSTV(); + ::Sleep(pSound->IsBusy() ? 100 : 1); + DrawSSTV(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawSSTV(short *ip, short *sp) +{ + if( sys.m_Differentiator && (SSTVSET.m_Mode != smSCTDX) ){ + DrawSSTVDiff(ip, sp); + } + else { + DrawSSTVNormal(ip, sp); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawSSTVNormal(short *ip, short *sp) +{ + CSSTVDEM *dp = pDem; + BYTE *gp = NULL; + BYTE *bp = NULL; + BYTE *wp; + BYTE *gp2 = NULL; + int R,G,B; + int i, n; + int bx = -1; + n = dp->m_rBase; + + int ay = -5; + for( i = 0; i < SSTVSET.m_WD; i++, ip++, sp++, n++ ){ + if( n < 0 ) continue; + double ps = fmod(double(n), SSTVSET.m_TW); + int y = int(double(n)/SSTVSET.m_TW); + if( ay != y ){ + m_AY = ay = y; + if( (SSTVSET.m_Mode == smSCT1)||(SSTVSET.m_Mode == smSCT2)||(SSTVSET.m_Mode == smSCTDX) ){ + if( (y > 0) && (y <= 256) ){ + gp = (BYTE *)pBitmapRX->ScanLine[y-1]; + } + else { + gp = NULL; + } + } + else if( ((SSTVSET.m_Mode >= smPD50)&&(SSTVSET.m_Mode <= smPD290)) || + ((SSTVSET.m_Mode >= smMP73)&&(SSTVSET.m_Mode <= smMP175)) || + ((SSTVSET.m_Mode >= smMN73)&&(SSTVSET.m_Mode <= smMN140)) || + ((SSTVSET.m_Mode >= smR24)&&(SSTVSET.m_Mode <= smRM12)) + ){ + if( (y >= 0) && (y < SSTVSET.m_L) ){ + R = y * 2; + gp = (BYTE *)pBitmapRX->ScanLine[R]; + gp2 = (BYTE *)pBitmapRX->ScanLine[R+1]; + } + else { + gp = NULL; + gp2 = NULL; + } + } + else if( (y >= 0) && (y < pBitmapRX->Height) ){ + gp = (BYTE *)pBitmapRX->ScanLine[y]; + } + else { + gp = NULL; + } + if( (y >= 0) && (y < 256) ){ + bp = (BYTE *)pBitmapD12->ScanLine[y]; + } + else { + bp = NULL; + } + } + if( !int(ps) ){ + if( (sys.m_AutoStop || sys.m_AutoSync || KRSA->Checked) && dp->m_Sync && (m_SyncPos != -1) ){ + AutoStopJob(); + } + m_SyncMin = m_SyncMax = *sp; + m_SyncRPos = m_SyncPos; + } + else if( m_SyncMax < *sp ){ + m_SyncMax = *sp; + m_SyncPos = ps; + } + else if( m_SyncMin > *sp ){ + m_SyncMin = *sp; + } + int d, x; + x = ps * pBitmapD12->Width / SSTVSET.m_TW; + if( (x != bx) && (x < pBitmapD12->Width) && (x >= 0) ){ + if( bp != NULL ){ + d = (*sp * 256) / 4096; + d = Limit256(d); + wp = bp + (x * 3); + *wp++ = BYTE(d); + *wp++ = BYTE(d); + *wp = BYTE(d); + } + bx = x; + } + if( ps >= SSTVSET.m_OF ){ + ps -= SSTVSET.m_OF; + switch(SSTVSET.m_Mode){ + case smSCT1: + case smSCT2: + case smSCTDX: + if( ps < SSTVSET.m_KS ){ // R + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < 320) ){ + m_AX = x; + if( SSTVSET.m_Mode == smSCTDX ){ + d = GetPixelLevel(ip); + } + else { + d = GetPictureLevel(ip); + } + d += 128; + d = Limit256(d); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(m_D36[1][x]); // B + *wp++ = BYTE(m_D36[0][x]); // G + *wp = BYTE(d); // R + } + } + } + else if( ps < SSTVSET.m_CG ){ // G + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < 320) ){ + m_AX = x; + if( SSTVSET.m_Mode == smSCTDX ){ + d = GetPixelLevel(ip); + } + else { + d = GetPictureLevel(ip); + } + d += 128; + d = Limit256(d); + m_D36[0][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < 320) ){ + m_AX = x; + if( SSTVSET.m_Mode == smSCTDX ){ + d = GetPixelLevel(ip); + } + else { + d = GetPictureLevel(ip); + } + d += 128; + d = Limit256(d); + m_D36[1][x] = short(d); + } + } + break; + case smR36: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < 320) ){ + m_AX = x; + d = GetPictureLevel(ip); + d += 128; + d = Limit256(d); + m_Y36[x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // TCS + ps -= SSTVSET.m_SG; + if( ps >= 0 ){ + d = GetPixelLevel(ip); + if( (d >= 64) || (d < -64) ){ + m_DSEL = (d >= 0) ? 1 : 0; // RY=1500 m_D36[0], BY=2300 m_D36[1] + } + else { + m_DSEL = m_DSEL ? 0 : 1; + } + } + } + else if( ps < SSTVSET.m_CB ){ // 色差 + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KS2S; + if( (m_AX != x) && (x >= 0) && (x < 320) && (y < 240) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[m_DSEL][x] = short(d); + YCtoRGB(R, G, B, m_Y36[x], m_D36[0][x], m_D36[1][x]); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + } + } + } + break; + case smR24: + case smR72: + case smMR73: + case smMR90: + case smMR115: + case smMR140: + case smMR175: + case smML180: + case smML240: + case smML280: + case smML320: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPictureLevel(ip); + d += 128; + d = Limit256(d); + m_Y36[x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // R-Y + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KS2S; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[1][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B-Y + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KS2S; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) && (y < SSTVSET.m_L) ){ + m_AX = x; + d = GetPixelLevel(ip); + YCtoRGB(R, G, B, m_Y36[x], m_D36[1][x], d); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + if( SSTVSET.m_Mode == smR24 ){ + wp = gp2 + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + } + } + } + } + break; + case smPD50: + case smPD90: + case smPD120: + case smPD160: + case smPD180: + case smPD240: + case smPD290: + case smMP73: + case smMP115: + case smMP140: + case smMP175: + case smMN73: + case smMN110: + case smMN140: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPictureLevel(ip); + d += 128; + d = Limit256(d); + m_Y36[x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // R-Y + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[1][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B-Y + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[0][x] = short(d); + } + } + else if( ps < (SSTVSET.m_CB + SSTVSET.m_KS) ){ // Y(even) + ps -= SSTVSET.m_CB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) && (y < SSTVSET.m_L) ){ + m_AX = x; + if( gp != NULL ){ + YCtoRGB(R, G, B, m_Y36[x], m_D36[1][x], m_D36[0][x]); + wp = gp + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + d = GetPictureLevel(ip); + d += 128; + YCtoRGB(R, G, B, d, m_D36[1][x], m_D36[0][x]); + wp = gp2 + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + } + } + } + break; + case smRM8: + case smRM12: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) && (y < SSTVSET.m_L) ){ + m_AX = x; + d = GetPictureLevel(ip); + d *= (256.0 / (256.0 - 32.0)); + d += 128; + d = Limit256(d); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(d); // B + *wp++ = BYTE(d); // G + *wp = BYTE(d); // R + wp = gp2 + (x * 3); + *wp++ = BYTE(d); // B + *wp++ = BYTE(d); // G + *wp = BYTE(d); // R + } + } + } + break; + default: + if( ps < SSTVSET.m_KS ){ // R or G(MRT) + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPictureLevel(ip); + d += 128; + d = Limit256(d); + m_D36[0][x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // G or B(MRT) + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPictureLevel(ip); + d += 128; + d = Limit256(d); + m_D36[1][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B or R(MRT) + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPictureLevel(ip); + d += 128; + d = Limit256(d); + if( (SSTVSET.m_Mode == smMRT1)||(SSTVSET.m_Mode == smMRT2) ){ + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(m_D36[1][x]); // B + *wp++ = BYTE(m_D36[0][x]); // G + *wp = BYTE(d); // R + } + } + else { + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(d); // B + *wp++ = BYTE(m_D36[1][x]); // G + *wp = BYTE(m_D36[0][x]); // R + } + } + } + } + break; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawSSTVDiff(short *ip, short *sp) +{ + CSSTVDEM *dp = pDem; + BYTE *gp = NULL; + BYTE *bp = NULL; + BYTE *wp; + BYTE *gp2 = NULL; + int R,G,B; + int i, n; + int bx = -1; + n = dp->m_rBase; + + int ay = -5; + for( i = 0; i < SSTVSET.m_WD; i++, ip++, sp++, n++ ){ + if( n < 0 ) continue; + double ps = fmod(double(n), SSTVSET.m_TW); + int y = int(double(n)/SSTVSET.m_TW); + if( ay != y ){ + m_AY = ay = y; + if( (SSTVSET.m_Mode == smSCT1)||(SSTVSET.m_Mode == smSCT2)||(SSTVSET.m_Mode == smSCTDX) ){ + if( (y > 0) && (y <= 256) ){ + gp = (BYTE *)pBitmapRX->ScanLine[y-1]; + } + else { + gp = NULL; + } + } + else if( ((SSTVSET.m_Mode >= smPD50)&&(SSTVSET.m_Mode <= smPD290)) || + ((SSTVSET.m_Mode >= smMP73)&&(SSTVSET.m_Mode <= smMP175)) || + ((SSTVSET.m_Mode >= smMN73)&&(SSTVSET.m_Mode <= smMN140)) || + ((SSTVSET.m_Mode >= smR24)&&(SSTVSET.m_Mode <= smRM12)) + ){ + if( (y >= 0) && (y < SSTVSET.m_L) ){ + R = y * 2; + gp = (BYTE *)pBitmapRX->ScanLine[R]; + gp2 = (BYTE *)pBitmapRX->ScanLine[R+1]; + } + else { + gp = NULL; + gp2 = NULL; + } + } + else if( (y >= 0) && (y < pBitmapRX->Height) ){ + gp = (BYTE *)pBitmapRX->ScanLine[y]; + } + else { + gp = NULL; + } + if( (y >= 0) && (y < 256) ){ + bp = (BYTE *)pBitmapD12->ScanLine[y]; + } + else { + bp = NULL; + } + } + if( !int(ps) ){ + if( (sys.m_AutoStop || sys.m_AutoSync || KRSA->Checked) && dp->m_Sync && (m_SyncPos != -1) ){ + AutoStopJob(); + } + m_SyncMin = m_SyncMax = *sp; + m_SyncRPos = m_SyncPos; + } + else if( m_SyncMax < *sp ){ + m_SyncMax = *sp; + m_SyncPos = ps; + } + else if( m_SyncMin > *sp ){ + m_SyncMin = *sp; + } + int d, x; + x = ps * pBitmapD12->Width / SSTVSET.m_TW; + if( (x != bx) && (x < pBitmapD12->Width) && (x >= 0) ){ + if( bp != NULL ){ + d = (*sp * 256) / 4096; + d = Limit256(d); + wp = bp + (x * 3); + *wp++ = BYTE(d); + *wp++ = BYTE(d); + *wp = BYTE(d); + } + bx = x; + } + if( ps >= SSTVSET.m_OF ){ + ps -= SSTVSET.m_OF; + switch(SSTVSET.m_Mode){ + case smSCT1: + case smSCT2: + if( ps < SSTVSET.m_KS ){ // R + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < 321) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + if( m_AX ){ + d += 128; + d = Limit256(d); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(m_D36[1][x]); // B + *wp++ = BYTE(m_D36[0][x]); // G + *wp = BYTE(d); // R + } + } + } + } + else if( ps < SSTVSET.m_CG ){ // G + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < 321) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_D36[0][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < 321) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_D36[1][x] = short(d); + } + } + break; + case smR36: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < 321) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_Y36[x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // TCS + ps -= SSTVSET.m_SG; + if( ps >= 0 ){ + d = GetPixelLevel(ip); + if( (d >= 64) || (d < -64) ){ + m_DSEL = (d >= 0) ? 1 : 0; // RY=1500 m_D36[0], BY=2300 m_D36[1] + } + else { + m_DSEL = m_DSEL ? 0 : 1; + } + } + } + else if( ps < SSTVSET.m_CB ){ // 色差 + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KS2S; + if( (m_AX != x) && (x >= 0) && (x < 320) && (y < 240) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[m_DSEL][x] = short(d); + YCtoRGB(R, G, B, m_Y36[x], m_D36[0][x], m_D36[1][x]); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + } + } + } + break; + case smR24: + case smR72: + case smMR73: + case smMR90: + case smMR115: + case smMR140: + case smMR175: + case smML180: + case smML240: + case smML280: + case smML320: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x <= pBitmapRX->Width) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_Y36[x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // R-Y + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KS2S; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[1][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B-Y + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KS2S; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) && (y < SSTVSET.m_L) ){ + m_AX = x; + d = GetPixelLevel(ip); + YCtoRGB(R, G, B, m_Y36[x], m_D36[1][x], d); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + if( SSTVSET.m_Mode == smR24 ){ + wp = gp2 + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + } + } + } + } + break; + case smPD50: + case smPD90: + case smPD120: + case smPD180: + case smPD240: + case smPD290: + case smMP73: + case smMP115: + case smMP140: + case smMP175: + case smMN73: + case smMN110: + case smMN140: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < (pBitmapRX->Width + 1)) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_Y36[x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // R-Y + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[1][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B-Y + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < pBitmapRX->Width) ){ + m_AX = x; + d = GetPixelLevel(ip); + m_D36[0][x] = short(d); + } + } + else if( ps < (SSTVSET.m_CB + SSTVSET.m_KS) ){ // Y(even) + ps -= SSTVSET.m_CB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < (pBitmapRX->Width + 1)) && (y < SSTVSET.m_L) ){ + m_AX = x; + x = x ? x - 1 : 0; + if( gp != NULL ){ + YCtoRGB(R, G, B, m_Y36[x], m_D36[1][x], m_D36[0][x]); + wp = gp + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + d = GetPictureLevelDiff(ip); + d += 128; + YCtoRGB(R, G, B, d, m_D36[1][x], m_D36[0][x]); + wp = gp2 + (x * 3); + *wp++ = BYTE(B); // B + *wp++ = BYTE(G); // G + *wp = BYTE(R); // R + } + } + } + break; + case smRM8: + case smRM12: + if( ps < SSTVSET.m_KS ){ // 輝度 + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (m_AX != x) && (x >= 0) && (x < (pBitmapRX->Width + 1)) && (y < SSTVSET.m_L) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d *= (256.0 / (256.0 - 32.0)); + d += 128; + d = Limit256(d); + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(d); // B + *wp++ = BYTE(d); // G + *wp = BYTE(d); // R + wp = gp2 + (x * 3); + *wp++ = BYTE(d); // B + *wp++ = BYTE(d); // G + *wp = BYTE(d); // R + } + } + } + break; + default: + if( ps < SSTVSET.m_KS ){ // R or G(MRT) + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < (pBitmapRX->Width + 1)) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_D36[0][x] = short(d); + } + } + else if( ps < SSTVSET.m_CG ){ // G or B(MRT) + ps -= SSTVSET.m_SG; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < (pBitmapRX->Width + 1)) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + d += 128; + d = Limit256(d); + m_D36[1][x] = short(d); + } + } + else if( ps < SSTVSET.m_CB ){ // B or R(MRT) + ps -= SSTVSET.m_SB; + x = ps * pBitmapRX->Width / SSTVSET.m_KSS; + if( (x != m_AX) && (x >= 0) && (x < (pBitmapRX->Width + 1)) ){ + m_AX = x; + x = x ? x - 1 : 0; + d = GetPictureLevelDiff(ip); + if( m_AX ){ + d += 128; + d = Limit256(d); + if( (SSTVSET.m_Mode == smMRT1)||(SSTVSET.m_Mode == smMRT2) ){ + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(m_D36[1][x]); // B + *wp++ = BYTE(m_D36[0][x]); // G + *wp = BYTE(d); // R + } + } + else { + if( gp != NULL ){ + wp = gp + (x * 3); + *wp++ = BYTE(d); // B + *wp++ = BYTE(m_D36[1][x]); // G + *wp = BYTE(m_D36[0][x]); // R + } + } + } + } + } + break; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::WriteHistory(int sw) +{ + if( !pDem->m_Sync ){ + PBoxRXPaint(NULL); + DrawSync(); + } + if( pComm != NULL ) pComm->SetScan(0); + int f = sw; + if( m_AY > (SSTVSET.m_L * 65/100) ){ + f = 1; + TrackTxMode(0); + } + if( f && KEA->Checked ){ + CopyBitmap(pBitmapRX); + } + if( CBASave->Checked && f ){ + SBWHistClick(NULL); // Write history + } + else { + SBWHist->Enabled = TRUE; + } + if( sys.m_Repeater ){ + SetBeaconTick(); + if( f ) MakeReplay(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::TrackTxMode(int sw) +{ + if( (!sys.m_FixedTxMode) && (!SBTX->Down) && (SSTVSET.m_Mode != SSTVSET.m_TxMode) ){ + if( (m_RXW == pBitmapTX->Width) || sw ){ + ChangeTxMode(SSTVSET.m_Mode); + UpdateModeBtn(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawSSTV(void) +{ + CSSTVDEM *dp = pDem; + if( dp->m_Sync && (dp->m_wPage != dp->m_rPage) ){ + while( dp->m_Sync && (dp->m_wPage != dp->m_rPage) ){ + if( dp->m_wBgn ){ + if( dp->m_wBgn != 1 ){ + m_SyncRPos = m_SyncPos = -1; + m_SyncAccuracyN = 0; + SBTO->Enabled = FALSE; + dp->m_fskcall[0] = 0; + m_DSEL = 0; + m_AX = -1; + m_AY = -5; + if( dp->m_ReqSave ){ + dp->m_ReqSave = 0; + WriteHistory(1); + } + SSTVSET.GetPictureSize(m_RXW, m_RXH, m_RXPH, SSTVSET.m_Mode); + if( KRSW->Checked ){ + if( pRxView != NULL ){ + if( pRxView->Handle != ::GetForegroundWindow() ){ + ::SetForegroundWindow(pRxView->Handle); + } + } + else if( m_MainPage != pgRX ){ + AdjustPage(pgRX); + } + } + if( pBitmapRX->Width != m_RXW ){ + pBitmapRX->Width = m_RXW; + pBitmapRX->Height = m_RXH; + PBoxRX->Invalidate(); + } + UpdateModeBtn(); + dp->m_LoopBack = SBTX->Down ? sys.m_echo : 0; + ::GetUTC(&m_StartTime); + dp->m_SyncAVT = 0; + WaveStg.WInit(); + RxHist.ClearAddFlag(); + dp->m_wStgLine = 0; + DispSyncStat(); + SBWHist->Enabled = FALSE; + KRH->Enabled = FALSE; + int rf = 0; + if( sys.m_Repeater && dp->m_Repeater ){ + dp->m_repRX++; + SetBeaconTick(); + if( dp->m_repmode == 5 ){ + dp->m_repmode++; + dp->m_repRLY++; + rf = 1; + } + else if( dp->m_repmode <= 2 ){ + dp->m_repmode = 0; + } + } + if( pRxView != NULL ){ + pRxView->UpdateTitle(SSTVSET.m_Mode, rf); + } + if( pComm != NULL ) pComm->SetScan(pDem->m_Sync); + } + dp->m_wBgn = 1; + SyncSSTV(); + if( dp->m_wBgn ) return; + m_HistM = SSTVSET.m_Mode; + if( KRD->Checked ){ + ClearDraw(pBitmapRX, PBoxRX, sys.m_ColorRXB); + } + ClearDraw(pBitmapD12, PBoxD12, clWhite); + InitAutoStop(); + m_AutoSyncCount = m_AutoSyncDis = 0; + } + short *ip = &dp->m_Buf[dp->m_rPage * dp->m_BWidth]; + short *sp = &dp->m_B12[dp->m_rPage * dp->m_BWidth]; + if( dp->m_StgBuf ){ + if( ((dp->m_wStgLine + 1) * SSTVSET.m_WD) < dp->m_RxBufAllocSize ){ + memcpy(&dp->m_StgBuf[dp->m_wStgLine * SSTVSET.m_WD], ip, SSTVSET.m_WD*sizeof(short)); + memcpy(&dp->m_StgB12[dp->m_wStgLine * SSTVSET.m_WD], sp, SSTVSET.m_WD*sizeof(short)); + dp->m_wStgLine++; + if( dp->m_wStgLine == 16 ) UpdateSBTO(); + } + } + else if( WaveStg.IsOpen() ){ + WaveStg.Write(ip, SSTVSET.m_WD*sizeof(short)); + WaveStg.Write(sp, SSTVSET.m_WD*sizeof(short)); + dp->m_wStgLine++; + if( dp->m_wStgLine == 16 ) UpdateSBTO(); + } + DrawSSTV(ip, sp); + dp->m_rBase += SSTVSET.m_WD; + if( m_AY > SSTVSET.m_L ){ + if( dp->m_Sync ){ + int lost = dp->m_Lost; + dp->Stop(); + if( dp->m_LoopBack != 1 ){ + WriteHistory(1); + } + else { + SBWHist->Enabled = TRUE; + } + TrackTxMode(0); + UpdateModeBtn(); + if( lost ) InfoRxLost(); + UpdateUI(); + } + break; + } + dp->m_rPage++; + if( dp->m_rPage >= SSTVDEMBUFMAX ){ + dp->m_rPage = 0; + } + } + if( !pSound->IsBusy() ){ + PBoxRXPaint(NULL); + DrawSync(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::InfoRxLost(void) +{ + InfoMB( MsgEng ? + "MMSSTV lost some sound during the receiving by the CPU overload.\r\n\r\n" + "Do increase FIFO on sound in the Misc page of Setup MMSSTV." : + "受信中にCPU過負荷によりサウンドを一部欠落しました.\r\n\r\n" + "設定画面の「その他」ページのサウンドカードのFIFOを増やして下さい" + ); +} +void __fastcall TMmsstv::InfoTxLost(void) +{ + InfoMB( MsgEng ? + "MMSSTV lost some sound during the transmission by the CPU overload.\r\n\r\n" + "Do increase FIFO on sound in the Misc page of Setup MMSSTV." : + "送信中にCPU過負荷によりサウンドを一部欠落しました.\r\n\r\n" + "設定画面の「その他」ページのサウンドカードのFIFOを増やして下さい" + ); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxFFTPaint(TObject *Sender) +{ + PBoxFFT->Canvas->Draw(0, 0, pBitmapFFT); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxWaterPaint(TObject *Sender) +{ + if( KVW->Checked ) PBoxWater->Canvas->Draw(0, 0, pBitmapWater); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxRXPaint(TObject *Sender) +{ + if( m_MainPage != pgRX ) return; + + DrawBitmap(PBoxRX, pBitmapRX); + if( sys.m_ShowSizeRX ){ + ShowSize(PBoxRX, m_RXW, m_RXPH, 12, clGreen); + } +#if 0 + if( sys.m_Repeater ){ + CSSTVDEM *dp = pDem; + if( dp->m_Repeater && (dp->m_repmode == 6) ){ + PBoxRX->Canvas->Brush->Color = clBlue; + PBoxRX->Canvas->Font->Color = clWhite; + PBoxRX->Canvas->Font->Height = -12; + LPCSTR dp = "Repeater"; + int fw = PBoxRX->Canvas->TextWidth(dp); + int fh = PBoxRX->Canvas->TextHeight(dp); + PBoxRX->Canvas->TextOut(PBoxRX->Width - fw, PBoxRX->Height - fh, dp); + } + } +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFRecTimClick(TObject *Sender) +{ + if( pSound == NULL ) return; + SYSTEMTIME now; + GetLocal(&now); + + char bf[256]; + sprintf(bf, "%s%02u%02u%02u%02u.mmv", RecDir, now.wMonth, now.wDay, now.wHour, now.wMinute); + pSound->WaveFile.Rec(bf); + if( pSound->WaveFile.m_mode == 2 ){ + KFRecTim->Checked = TRUE; + RecentAdd(pSound->WaveFile.m_FileName.c_str(), TRUE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFRecClick(TObject *Sender) +{ + if( pSound == NULL ) return; + if( MsgEng ){ + SaveDialog->Title = "Record MMSSTV Sound file"; + SaveDialog->Filter = "MMSSTV Sound Files(*.mmv)|*.mmv|"; + } + else { + SaveDialog->Title = "MMSSTVサウンドファイルの作成"; + SaveDialog->Filter = "MMSSTVサウンドファイル(*.mmv)|*.mmv|"; + } + SaveDialog->FileName = "Recv.mmv"; + SaveDialog->DefaultExt = "mmv"; + SaveDialog->InitialDir = RecDir; + SetDisPaint(); + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + pSound->WaveFile.Rec(AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + if( pSound->WaveFile.m_mode == 2 ){ + KFRec->Checked = TRUE; + RecentAdd(pSound->WaveFile.m_FileName.c_str(), TRUE); + } + SetDirName(RecDir, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0428 + } + TopWindow(this); + ResDisPaint(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFPlayClick(TObject *Sender) +{ + if( pSound == NULL ) return; + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options << ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Play MMSSTV Sound file"; + OpenDialog->Filter = "MMSSTV Sound Files(*.mmv)|*.mmv|"; + } + else { + OpenDialog->Title = "MMSSTVサウンドファイルの再生"; + OpenDialog->Filter = "MMSSTVサウンドファイル(*.mmv)|*.mmv|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "mmv"; + OpenDialog->InitialDir = RecDir; + SetDisPaint(); + NormalWindow(this); + if( OpenDialogExecute(FALSE) == TRUE ){ + pSound->WaveFile.Play(AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0428 + SetDirName(RecDir, AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0428 + } + ResDisPaint(); + if( pSound->WaveFile.m_mode == 1 ){ + KFPlayPosClick(NULL); + RecentAdd(pSound->WaveFile.m_FileName.c_str(), TRUE); + } + TopWindow(this); +} +//--------------------------------------------------------------------------- +// Recent Menu Click +void __fastcall TMmsstv::OnRecentClick(TObject *Sender) +{ + if( pSound == NULL ) return; + LPCSTR pName = RecentMenu.FindItemText((TMenuItem *)Sender); + if( pName != NULL ){ + char bf[256]; + strcpy(bf, pName); + RecentAdd(bf, pSound->WaveFile.Play(bf)); + if( pSound->WaveFile.m_mode == 1 ){ + KFPlayPosClick(NULL); + } + } +} +//--------------------------------------------------------------------------- +// Recent Menu Click +void __fastcall TMmsstv::RecentAdd(LPCSTR pNew, int f) +{ + if( RecentMenu.IsAdd(pNew) ){ + RecentMenu.Delete(); + if( f != FALSE ){ + RecentMenu.Add(pNew); + } + else { + RecentMenu.Delete(pNew); + } + RecentMenu.Insert(NULL, OnRecentClick); + } +} +//--------------------------------------------------------------------------- +// Recent Menu Update +void __fastcall TMmsstv::UpdateRecentMenu(void) +{ + RecentMenu.Delete(); + RecentMenu.Init(KExit, KFile, RECMENUMAX); + RecentMenu.ExtFilter("MMV"); + RecentMenu.Insert(NULL, OnRecentClick); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFPlayPosClick(TObject *Sender) +{ + if( pSound == NULL ) return; + TPlayDlgBox *pBox = new TPlayDlgBox(this); + + pBox->Execute(&pSound->WaveFile); + delete pBox; + TopWindow(this); +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::KFRecRewClick(TObject *Sender) +{ + if( pSound == NULL ) return; + pSound->WaveFile.Rewind(); +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::KFRecStopClick(TObject *Sender) +{ + if( pSound == NULL ) return; + pSound->WaveFile.FileClose(); +} + +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CopyStgBuf(void) +{ + CSSTVDEM *dp = pDem; + + while( dp->m_rPage != dp->m_wPage ){ + short *ip = &dp->m_Buf[dp->m_rPage * dp->m_BWidth]; + short *sp = &dp->m_B12[dp->m_rPage * dp->m_BWidth]; + if( dp->m_StgBuf != NULL ){ + if( ((dp->m_wStgLine + 1) * SSTVSET.m_WD) < dp->m_RxBufAllocSize ){ + memcpy(&dp->m_StgBuf[dp->m_wStgLine * SSTVSET.m_WD], ip, SSTVSET.m_WD*sizeof(short)); + memcpy(&dp->m_StgB12[dp->m_wStgLine * SSTVSET.m_WD], sp, SSTVSET.m_WD*sizeof(short)); + dp->m_wStgLine++; + } + else { + break; + } + } + else if( WaveStg.IsOpen() ){ + WaveStg.Write(ip, SSTVSET.m_WD*sizeof(short)); + WaveStg.Write(sp, SSTVSET.m_WD*sizeof(short)); + dp->m_wStgLine++; + } + if( dp->m_wStgLine == 16 ) UpdateSBTO(); + dp->m_rPage++; + if( dp->m_rPage >= SSTVDEMBUFMAX ){ + dp->m_rPage = 0; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CorrectSlant(void) +{ + CSSTVDEM *dp = pDem; + if( ((dp->m_StgBuf != NULL) || WaveStg.IsOpen()) && (dp->m_wStgLine >= 16) && (SSTVSET.m_Mode != smAVT) ){ + if( (dp->m_StgBuf != NULL) && (((dp->m_wStgLine + 1) * SSTVSET.m_WD) >= dp->m_RxBufAllocSize) ){ + return; + } + CWaitCursor w; + double StartSamp = SSTVSET.m_SampFreq; + int LW = SSTVSET.m_TW * 0.1; // 10%の揺れを許容 + int z; + for( z = 0; z < 5; z++ ){ + // 基準位置を探す + WaveStg.RInit(); + int i, j; + int wd = int(SSTVSET.m_TW); + int *bp = new int[wd]; + memset(bp, 0, sizeof(int) * wd); + short *sp; + int n = 0; + for( i = 0; i < dp->m_wStgLine && (i < 32); i++ ){ + if( dp->m_StgBuf != NULL ){ + sp = &dp->m_StgB12[i * SSTVSET.m_WD]; + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + sp = WaveStg.pSync; + } + for( j = 0; j < SSTVSET.m_WD; j++, sp++ ){ + bp[n] += *sp; + n++; + if( n >= wd ) n = 0; + } + if( dp->m_Sync ) ::Sleep(pSound->IsBusy() ? 100 : 1); + if( SBTX->Down && IsSR() ) SendSSTV(); + } + double bpos = 0; + int max = 0; + for( i = 0; i < wd; i++ ){ + if( max < bp[i] ){ + max = bp[i]; + bpos = i; + } + } + delete bp; + + // 傾き調整 + WaveStg.RInit(); + int base = 0; + int yy; + int y = 0; + max = 0; + int min = 16384; + n = 0; + int m = 0; + double xx; + double ps = 0; + double T, L, TT, TL; + T = L = TT = TL = 0; + for( i = 0; i < dp->m_wStgLine; i++ ){ + if( dp->m_StgBuf != NULL ){ + sp = &dp->m_StgB12[i * SSTVSET.m_WD]; + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + sp = WaveStg.pSync; + } + for( j = 0; j < SSTVSET.m_WD; j++, sp++, base++ ){ + yy = base / SSTVSET.m_TW; + xx = fmod(base, SSTVSET.m_TW); + if( yy != y ){ + if( bpos < 0 ){ + if( ps >= (SSTVSET.m_TW/4) ){ // 左方向への周りこみ + ps -= SSTVSET.m_TW; + } + else if( ps >= (SSTVSET.m_TW/8) ){ + goto _nx; + } + } + else if( bpos >= SSTVSET.m_TW ){ // 右方向への周りこみ + if( ps < (SSTVSET.m_TW*3/4) ){ + ps += SSTVSET.m_TW; + } + else if( ps < (SSTVSET.m_TW*7/8) ){ + goto _nx; + } + } + else if( bpos >= (SSTVSET.m_TW*3/4) ){ // 右側 + if( (ps < SSTVSET.m_TW/4) ){ + ps += SSTVSET.m_TW; + } + } + else if( bpos <= (SSTVSET.m_TW/4) ){ // 左側 + if( ps >= (SSTVSET.m_TW*3/4) ){ + ps -= SSTVSET.m_TW; + } + } + if( (y >= 0) && ((max - min) >= 4800) && (ABS(ps - bpos) <= LW) ){ + bpos = ps; + if( n >= 2 ){ + T += y; + L += ps; + TT += y * y; + TL += y * ps; + m++; + } + n++; + if( n >= dp->m_wStgLine ) goto _nx; + } + y = yy; + max = 0; + min = 16384; + ps = 0; + } + if( max < *sp ){ + max = *sp; + ps = xx; + } + if( min > *sp ){ + min = *sp; + } + } + if( dp->m_Sync ) ::Sleep(pSound->IsBusy() ? 100 : 1); + if( SBTX->Down && IsSR() ) SendSSTV(); + } +_nx:; + double fq = SSTVSET.m_SampFreq; + if( m >= 6 ){ + double k0 = (m * TL - L * T) / (m * TT - T*T); + fq = SSTVSET.m_SampFreq + (k0 * SSTVSET.m_SampFreq / SSTVSET.m_TW); +#if 0 + char bf[64]; + sprintf(bf, "%lf, %lf", fq, k0 ); + EditNote->Text = bf; +#endif + fq = NormalSampFreq(fq, 100); + } + if( fabs(fq-SSTVSET.m_SampFreq) < (0.1/11025.0 * SSTVSET.m_SampFreq) ){ + SSTVSET.m_SampFreq = fq; + SSTVSET.SetSampFreq(); + break; + } + SSTVSET.m_SampFreq = StartSamp; + SSTVSET.SetSampFreq(); + MultProc(); + SSTVSET.m_SampFreq = fq; + SSTVSET.SetSampFreq(); + LW *= 0.5; + } + if( (SSTVSET.m_SampFreq != StartSamp) && + ( (dp->m_StgBuf == NULL)||(((dp->m_wStgLine + 32) * SSTVSET.m_WD) < dp->m_RxBufAllocSize) ) + ){ + RedrawSampFreq(FALSE); + } + else if( SSTVSET.m_SampFreq != StartSamp ){ + SSTVSET.m_SampFreq = StartSamp; + SSTVSET.SetSampFreq(); + } + DrawSlantInfo(); + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::AdjustSyncPos(int n) +{ + n -= SSTVSET.m_OFP; + n = -n; + switch(SSTVSET.m_Mode){ + case smSCT1: + case smSCT2: + case smSCTDX: + if( n < 0 ) n += int(SSTVSET.m_TW); + break; + case smMRT1: // 原因不明のタイミングズレを補正 + case smSC2_180: + case smSC2_120: + case smP3: + case smP5: + case smP7: + case smMC110: + case smMC140: + case smMC180: + n += (0.45/1000.0) * SSTVSET.m_SampFreq; + break; + case smMRT2: + case smSC2_60: + if( pDem->m_wStgLine < 20 ){ + n += (0.30/1000.0) * SSTVSET.m_SampFreq; + } + else { + n += (0.40/1000.0) * SSTVSET.m_SampFreq; + } + break; + case smR36: + case smR72: + n += (0.16/1000.0) * SSTVSET.m_SampFreq; + break; + case smMP73: + case smMP115: + case smMP140: + case smMP175: + case smMN73: + case smMN110: + case smMN140: + case smMR73: + case smMR90: + case smMR115: + case smMR140: + case smMR175: + case smML180: + case smML240: + case smML280: + case smML320: + n += (0.2/1000.0) * SSTVSET.m_SampFreq; + break; + case smR24: + case smRM8: + case smRM12: + n += (0.5/1000.0) * SSTVSET.m_SampFreq; + break; + default: + break; + } + return n; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ReSyncSSTV(void) +{ + CSSTVDEM *dp = pDem; + SSTVSET.SetSampFreq(); + if( (dp->m_StgBuf != NULL) || WaveStg.IsOpen() ){ +// int ZS = SSTVSET.m_OFS; + WaveStg.RInit(); + int i; + int wd = int(SSTVSET.m_TW); + int *bp = new int[wd+2]; + memset(bp, 0, sizeof(int) * (wd+2)); + short *sp; + int n = 0; + for( i = 0; i < dp->m_wStgLine && (i < 32); i++ ){ + if( dp->m_StgBuf != NULL ){ + sp = &dp->m_StgB12[i * SSTVSET.m_WD]; + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + sp = WaveStg.pSync; + } + for( int j = 0; j < SSTVSET.m_WD; j++, sp++ ){ + int x = fmod(n, SSTVSET.m_TW); + bp[x] += *sp; + n++; + } + } + n = 0; + int max = 0; + for( i = 0; i < wd; i++ ){ + if( max < bp[i] ){ + max = bp[i]; + n = i; + } + } + n = AdjustSyncPos(n); + if( dp->m_Type == 2 ) n -= dp->m_hill.m_htap/4; + SSTVSET.m_IOFS = SSTVSET.m_OFS = dp->m_rBase = n; + delete bp; +#if 0 + char bf[64]; + sprintf(bf, "%d, %d", ZS, SSTVSET.m_OFS); + EditNote->Text = bf; +#endif + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawSlantInfo(void) +{ + double df = SSTVSET.m_SampFreq - sys.m_SampFreq; + double m = (SSTVSET.m_SampFreq - sys.m_SampFreq) * 1000000.0 / sys.m_SampFreq; + char bf[64]; + sprintf(bf, "%+.2lfHz (%+.0lfppm)", df, m); + pBitmapD12->Canvas->Font->Height = -16; + int fw = pBitmapD12->Canvas->TextWidth(bf) + 1; + int fh = pBitmapD12->Canvas->TextHeight(bf) + 4; + int xw = 200; + TRect rc; + int xl = pBitmapD12->Width - xw; + int xr = pBitmapD12->Width - 1; + int yt = 1; + int yb = fh + 1; + if( (m_AY >= 0) && (m_AY < yb) ) return; + pBitmapD12->Canvas->Pen->Color = clBlack; + pBitmapD12->Canvas->RoundRect(xl, yt, xr, yb, 10, 5); + pBitmapD12->Canvas->TextOut(xl + (xw - fw)/2, yt + 2, bf); + if( m_MainPage == pgSync) PBoxD12->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawShiftInfo(void) +{ + int td = SSTVSET.m_IOFS - SSTVSET.m_OFS; + char bf[32]; + sprintf(bf, "%.2lfms", td * 1000.0 / SampFreq); + pBitmapD12->Canvas->Font->Height = -16; + int fw = pBitmapD12->Canvas->TextWidth(bf) + 1; + int fh = pBitmapD12->Canvas->TextHeight(bf) + 4; + int xw = fw + 16; + int xl = pBitmapD12->Width - xw; + int xr = pBitmapD12->Width - 1; + int yt = 1; + int yb = fh + 1; + if( (m_AY >= 0) && (m_AY < yb) ) return; + pBitmapD12->Canvas->Pen->Color = clBlack; + pBitmapD12->Canvas->RoundRect(xl, yt, xr, yb, 10, 5); + pBitmapD12->Canvas->TextOut(xl + (xw - fw)/2, yt + 2, bf); + if( m_MainPage == pgSync) PBoxD12->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::RedrawSampFreq(int sw) +{ + CWaitCursor w; + + UpdateSampFreq(); + SSTVSET.SetSampFreq(); + DispSyncStat(); + DrawSSTV(); + if( !pDem->m_Sync ) PBoxRXPaint(NULL); + if( sw ) DrawSlantInfo(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateSampFreq(void) +{ + CSSTVDEM *dp = pDem; + SSTVSET.SetSampFreq(); + if( (dp->m_StgBuf != NULL) || WaveStg.IsOpen() ){ + ReSyncSSTV(); + WaveStg.RInit(); + InitAutoStop(); + m_ASDis = 1; + dp->m_rBase = SSTVSET.m_OFS; + for( int i = 0; i < dp->m_wStgLine; i++ ){ + if( dp->m_StgBuf != NULL ){ + DrawSSTV(&dp->m_StgBuf[i * SSTVSET.m_WD], &dp->m_StgB12[i * SSTVSET.m_WD]); + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + DrawSSTV(WaveStg.pData, WaveStg.pSync); + } + dp->m_rBase += SSTVSET.m_WD; + if( dp->m_Sync ){ + ::Sleep(pSound->IsBusy() ? 100 : 1); + CopyStgBuf(); + } + if( SBTX->Down && IsSR() ) SendSSTV(); + } + if( (!dp->m_Sync) && RxHist.IsAddFlag() ){ + RxHist.Update(pBitmapRX); + ::CopyBitmap(pBitmapHist, pBitmapRX); + TrigHistF(); + UpdatePic(); + } + DrawSync(); + pSound->fftIN.TrigFFT(); + m_ASDis = 0; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBAdjMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + RedrawAdjustSync(); + } +} +//--------------------------------------------------------------------------- +#define MAKEPOSLOG FALSE +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::RedrawAdjustSync(void) +{ + CWaitCursor wc; + + CSSTVDEM *dp = pDem; + if( (dp->m_StgBuf != NULL) || WaveStg.IsOpen() ){ + int pos, w, n, j; + SSTVSET.GetBitmapSize(w, n, SSTVSET.m_Mode); +#if MAKEPOSLOG + FILE *fp = fopen("\\mmsstv\\zzz.txt", "wt"); + fprintf(fp, "PixelDots=%.1lf\n", SSTVSET.m_KS / double(w) + 0.5); +#endif + double k = 0.5; + switch(SSTVSET.m_Mode){ + case smPD50: + case smPD120: + k = 3.0; + break; + case smPD160: + k = 2.0; + break; + case smRM8: + k = 1.5; + break; + case smRM12: + case smR24: + case smPD90: + case smSCT2: + case smMRT2: + k = 1.0; + break; + default: + break; + } + w = SSTVSET.m_KS * k / double(w) + 0.5; + short *pData, *pSync, *sp; + short max; + ReSyncSSTV(); + InitAutoStop(); + m_ASDis = 1; + WaveStg.RInit(); + dp->m_rBase = SSTVSET.m_OFS; + for( int i = 0; i < dp->m_wStgLine; i++ ){ + if( dp->m_StgBuf != NULL ){ + pData = &dp->m_StgBuf[i * SSTVSET.m_WD]; + pSync = &dp->m_StgB12[i * SSTVSET.m_WD]; + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + pData = WaveStg.pData; + pSync = WaveStg.pSync; + } + pos = 0; + max = 0; + n = dp->m_rBase; + if( n >= 0 ){ + sp = pSync; + for( j = 0; j < SSTVSET.m_WD; j++, n++, sp++ ){ + if( *sp > max ){ + max = *sp; + pos = fmod(n, SSTVSET.m_TW); + } + } + pos = AdjustSyncPos(pos); + if( pos >= (int(SSTVSET.m_TW)/2) ) pos -= int(SSTVSET.m_TW); +#if MAKEPOSLOG + fprintf(fp, "%d\n", pos); +#endif + } + DrawSSTV(pData, pSync); + dp->m_rBase += SSTVSET.m_WD; + if( (m_AY >= 2) && (ABS(pos) > w) ) dp->m_rBase += pos; + if( dp->m_Sync ){ + ::Sleep(pSound->IsBusy() ? 100 : 1); + CopyStgBuf(); + } + } +#if MAKEPOSLOG + fclose(fp); +#endif + m_ASDis = 0; + DrawSync(); + if( (!dp->m_Sync) && RxHist.IsAddFlag() ){ + RxHist.Update(pBitmapRX); + ::CopyBitmap(pBitmapHist, pBitmapRX); + TrigHistF(); + UpdatePic(); + } + DrawSSTV(); + if( SSTVSET.m_SampFreq != sys.m_SampFreq ) DrawSlantInfo(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::RedrawSSTV(void) +{ + CWaitCursor w; + + CSSTVDEM *dp = pDem; + if( (dp->m_StgBuf != NULL) || WaveStg.IsOpen() ){ + InitAutoStop(); + m_ASDis = 1; + WaveStg.RInit(); + dp->m_rBase = SSTVSET.m_OFS; + for( int i = 0; i < dp->m_wStgLine; i++ ){ + if( dp->m_StgBuf != NULL ){ + DrawSSTV(&dp->m_StgBuf[i * SSTVSET.m_WD], &dp->m_StgB12[i * SSTVSET.m_WD]); + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + DrawSSTV(WaveStg.pData, WaveStg.pSync); + } + dp->m_rBase += SSTVSET.m_WD; + if( dp->m_Sync ){ + ::Sleep(pSound->IsBusy() ? 100 : 1); + CopyStgBuf(); + } + } + m_ASDis = 0; + DrawSync(); + if( (!dp->m_Sync) && RxHist.IsAddFlag() ){ + RxHist.Update(pBitmapRX); + ::CopyBitmap(pBitmapHist, pBitmapRX); + TrigHistF(); + UpdatePic(); + } + DrawSSTV(); + if( SSTVSET.m_OFS != SSTVSET.m_IOFS ) DrawShiftInfo(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ShiftSSTV(TObject *Sender, int step) +{ + if( !step ) step++; + + if( Sender == SBPL ){ + SSTVSET.m_OFS -= step; + } + else { + SSTVSET.m_OFS += step; + } + int e = 0; + switch(SSTVSET.m_Mode){ + case smSCT1: + case smSCT2: + case smSCTDX: + e = SSTVSET.m_WD; + break; + default: + break; + } + while( (SSTVSET.m_OFS + SSTVSET.m_WD) < e ){ + SSTVSET.m_OFS += SSTVSET.m_WD; + } + RedrawSSTV(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBPLClick(TObject *Sender) +{ + int h, w; + SSTVSET.GetBitmapSize(w, h, SSTVSET.m_Mode); + ShiftSSTV(Sender, (SSTVSET.m_KS / double(w)) + 0.5); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBPLMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + ShiftSSTV(Sender, 1); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxD12MouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( pSound == NULL ) return; + if( m_ReqSampChg ){ // サンプリング周波数変更要求中 + m_ReqSampChg = 0; + RedrawSampFreq(FALSE); + return; + } + CSSTVDEM *dp = pDem; + if( SBPhase->Down ){ + if( Button != mbLeft ) return; + CWaitCursor wait; + SSTVSET.m_OFS -= (X * SSTVSET.m_TW / PBoxD12->Width); + int e = 0; + switch(SSTVSET.m_Mode){ + case smSCT1: + case smSCT2: + case smSCTDX: + e = SSTVSET.m_WD; + break; + default: + break; + } + while( (SSTVSET.m_OFS + SSTVSET.m_WD) < e ){ + SSTVSET.m_OFS += SSTVSET.m_WD; + } + if( (dp->m_StgBuf != NULL) || WaveStg.IsOpen() ){ +#if 1 + RedrawSSTV(); +#else + InitAutoStop(); + m_ASDis = 1; + WaveStg.RInit(); + dp->m_rBase = SSTVSET.m_OFS; + for( int i = 0; i < dp->m_wStgLine; i++ ){ + if( dp->m_StgBuf != NULL ){ + DrawSSTV(&dp->m_StgBuf[i * SSTVSET.m_WD], &dp->m_StgB12[i * SSTVSET.m_WD]); + } + else { + WaveStg.Read(WaveStg.pData, SSTVSET.m_WD*sizeof(short)); + WaveStg.Read(WaveStg.pSync, SSTVSET.m_WD*sizeof(short)); + DrawSSTV(WaveStg.pData, WaveStg.pSync); + } + dp->m_rBase += SSTVSET.m_WD; + if( dp->m_Sync ){ + ::Sleep(pSound->IsBusy() ? 100 : 1); + CopyStgBuf(); + } + } + m_ASDis = 0; + DrawSync(); + if( (!dp->m_Sync) && RxHist.IsAddFlag() ){ + RxHist.Update(pBitmapRX); + ::CopyBitmap(pBitmapHist, pBitmapRX); + TrigHistF(); + UpdatePic(); + } + DrawSSTV(); + if( SSTVSET.m_SampFreq != sys.m_SampFreq ) DrawSlantInfo(); +#endif + } + else { + int n = (X * SSTVSET.m_TW / PBoxD12->Width); + while( n >= SSTVSET.m_WD ){ + n -= SSTVSET.m_WD; + } + while( n < 0 ){ + n += SSTVSET.m_WD; + } + dp->m_Skip = n; + } + } + else if( SBSlant->Down ){ + if( Button == mbRight ){ + if( m_Slant ){ + m_Slant = 0; + DrawSync(); + DispSyncStat(); + } + } + else if( m_Slant ){ + CWaitCursor wait; + m_Slant = 0; + double samp = GetSyncSamp(X, Y); + if( samp != SSTVSET.m_SampFreq ){ + SSTVSET.m_SampFreq = samp; + UpdateSampFreq(); + } + SSTVSET.SetSampFreq(); + DispSyncStat(); + DrawSSTV(); + DrawSlantInfo(); + } + else { + m_SlantX = X; + m_SlantY = Y; + m_Slant++; + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::PBoxD12Paint(TObject *Sender) +{ + DrawSync(); +} +//--------------------------------------------------------------------------- +TSpeedButton *__fastcall TMmsstv::GetModeBtn(int n) +{ + TSpeedButton *tp[]={ + SBM1, SBM2, SBM3, SBM4, SBM5, SBM6, SBM7, SBM8, SBM9, + }; + return tp[n]; +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::GetButtonNo(TSpeedButton *tp) +{ + for( int i = 0; i < 9; i++ ){ + if( GetModeBtn(i) == tp ){ + return i; + } + } + return 8; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateModeCaption(void) +{ + int *ip = ((m_MainPage == pgTX)||(m_MainPage == pgTemp)) ? m_ModeAssignTX : m_ModeAssignRX; + int i; + for( i = 0; i < 9; i++, ip++ ){ + TSpeedButton *tp = GetModeBtn(i); + if( tp->Caption != SSTVModeList[*ip] ){ + tp->Caption = SSTVModeList[*ip]; + } + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::FindModeAssign(int *ip, int m) +{ + int f = -1; + for( int i = 0; i < 9; i++, ip++ ){ + if( *ip == m ){ + f = i; + break; + } + } + return f; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateModeBtn(void) +{ + if( pSound == NULL ) return; + + int i, f; + if( (m_MainPage == pgTX)||(m_MainPage == pgTemp) ){ + GBMode->Caption = "TX Mode"; + GBMode->Font->Color = clBlue; +// SBAuto->Enabled = FALSE; + SBAuto->GroupIndex = 1; + SBAuto->Down = !sys.m_FixedTxMode; + f = FindModeAssign(m_ModeAssignTX, SSTVSET.m_TxMode); + if( f < 0 ){ + m_ModeAssignTX[8] = SSTVSET.m_TxMode; + f = 8; + } + GetModeBtn(f)->Down = TRUE; + AdjustPBoxSize((m_TXPH == 240) ? 240 : 256); + } + else { + GBMode->Caption = "RX Mode"; + GBMode->Font->Color = clBlack; +// SBAuto->Enabled = TRUE; + SBAuto->GroupIndex = 2; + SBAuto->Down = (pDem->m_SyncMode >= 0); + if( pDem->m_Sync ){ + f = FindModeAssign(m_ModeAssignRX, SSTVSET.m_Mode); + if( f < 0 ){ + m_ModeAssignRX[8] = SSTVSET.m_Mode; + f = 8; + } + GetModeBtn(f)->Down = TRUE; + } + else if( pDem->m_SyncMode < 0 ){ + for( i = 0; i < 9; i++ ){ + GetModeBtn(i)->Down = FALSE; + } + } + else { + SBAuto->Down = TRUE; + } + } + UpdateModeCaption(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); + SBFS->Enabled = pDem->m_Sync && (SSTVSET.m_Mode != smAVT) ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBAFCClick(TObject *Sender) +{ + pDem->m_afc = SBAFC->Down; + if( !pDem->m_afc ){ + pDem->InitAFC(); + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::GetLMSDelay(void) +{ + if( !pSound->m_lms || pSound->m_lms_AN ) return 0; + return pSound->lms.m_Tap / 2; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBLMSClick(TObject *Sender) +{ +#if 1 + // Tap数を増やした場合の処理 + // 2003/11/28に実験し、結果Tap数は従来通りの4に戻した + // のでこの処理をキャンセルした + int d = GetLMSDelay(); + pSound->m_lms = SBLMS->Down; + if( pSound->m_lms && pSound->m_lms_AN ) pSound->lms.SetAN(pSound->m_lms_AN); + if( pDem->m_Sync ) pDem->m_Skip = GetLMSDelay() - d; +#else + pSound->m_lms = SBLMS->Down; + if( pSound->m_lms && pSound->m_lms_AN ) pSound->lms.SetAN(pSound->m_lms_AN); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::RxAutoPush(int sw) +{ + if( pSound == NULL ) return; + + int sc = pDem->m_Sync; + pDem->Stop(); + if( sc ) WriteHistory(0); + if( !sw ){ + pDem->m_SyncMode = -1; + } + else { + pDem->m_SyncMode = 0; + } + if( (m_MainPage != pgTX) && (m_MainPage != pgTemp) ){ + SBAuto->Down = sw; + } + UpdateModeBtn(); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBAutoClick(TObject *Sender) +{ + if( pSound == NULL ) return; + + if( (m_MainPage == pgTX)||(m_MainPage == pgTemp) ){ + sys.m_FixedTxMode = !SBAuto->Down; + TrackTxMode(0); + } + else { + RxAutoPush(SBAuto->Down); + } +#if 0 + int sc = pDem->m_Sync; + pDem->Stop(); + if( sc ) WriteHistory(0); + if( !SBAuto->Down ){ + pDem->m_SyncMode = -1; + } + else { + pDem->m_SyncMode = 0; + } + UpdateModeBtn(); + UpdateUI(); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustPBoxSize(int l) +{ + if( (l <= 256) && (l != PBoxTX->Height) ){ + PBoxTX->Height = l; + PBoxTX->Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBMClick(TObject *Sender) +{ + if( pSound == NULL ) return; + + TSpeedButton *tp = (TSpeedButton *)Sender; + if( !SBTX->Down && !tp->Down && ((m_MainPage == pgTX)||(m_MainPage == pgTemp)) ){ + tp->Down = TRUE; + m_ExtMode = GetButtonNo(tp); + PopupM->Popup(Left + GBMode->Left + tp->Left + tp->Width/2, Top + GBMode->Top + tp->Top + tp->Height); + return; + } + if( !SBTX->Down || (sys.m_echo == 2) ){ + m_ExtMode = GetButtonNo(tp); + if( ((m_MainPage == pgTX)||(m_MainPage == pgTemp)) ){ + if( !SBTX->Down ){ + ChangeTxMode(m_ModeAssignTX[m_ExtMode]); + } + } + else if( !pDem->m_Sync || (SSTVSET.m_Mode != m_ModeAssignRX[m_ExtMode] ) ){ + if( pDem->m_Sync ) WriteHistory(0); + int mode = m_ModeAssignRX[m_ExtMode]; + pDem->Start(mode, tp->Down); + } + } + UpdateModeBtn(); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ClearDraw(Graphics::TBitmap *pBitmap, TPaintBox *pBox, TColor col) +{ + FillBitmap(pBitmap, col); + if( pBox == NULL ) return; + + if( pBox == PBoxRX ){ + if( m_MainPage != pgRX ) return; + } + else if( pBox == PBoxD12 ){ + if( m_MainPage != pgSync ) return; + } + else if( pBox == PBoxHist ){ + if( m_MainPage != pgHist ) return; + } + pBox->Canvas->Draw(0, 0, pBitmap); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawLvl(void) +{ + if( pSound == NULL ) return; + if( DisPaint ) return; + + TCanvas *pCanvas = pBitmapLvl->Canvas; + + TRect rc; + int XL = 0; + int XR = pBitmapLvl->Width - 1; + int YT = 0; + int YB = pBitmapLvl->Height - 1; + rc.Left = XL; + rc.Right = XR; + rc.Top = YT; + rc.Bottom = YB+1; + pCanvas->Brush->Color = clBlack; + pCanvas->FillRect(rc); + + double k; + pDem->m_lvl.Fix(); + if( pDem->m_LevelType ){ + pDem->m_SyncLvl.Fix(); + k = double(YB) / 16384.0; + rc.Top = YB - (pDem->m_SyncLvl.m_Lvl * k); + } + else { + k = double(YB) / 24578.0; + rc.Top = YB - (pDem->m_lvl.m_CurMax * k); + } + if( pSound->m_Tx ){ + pCanvas->Brush->Color = pDem->m_Sync ? TColor(0x00ffff00) : clYellow; + } + else if( pDem->m_lvl.m_CurMax >= 24578 ){ + pCanvas->Brush->Color = clRed; + } + else if( pDem->m_Sync ){ + pCanvas->Brush->Color = clLime; + } + else { + pCanvas->Brush->Color = clGray; + } + if( rc.Top < 0 ) rc.Top = 0; + pCanvas->FillRect(rc); + if( !pDem->m_LevelType ){ + rc.Top = YB - (pDem->m_lvl.m_PeakMax * k); + if( rc.Top < 0 ) rc.Top = 0; + rc.Bottom = rc.Top + 1; + if( pSound->m_Tx ){ + pCanvas->Brush->Color = clWhite; + } + else if( pDem->m_lvl.m_PeakMax < 24578 ){ + pCanvas->Brush->Color = clWhite; + } + else { + pCanvas->Brush->Color = clRed; + } + pCanvas->FillRect(rc); + } + PBoxLvl->Canvas->Draw(0, 0, pBitmapLvl); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DispHistStat(void) +{ + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + char bf1[128], bf2[128]; + char bbf[64]; + char tm[2]; + tm[0] = 'Z'; + tm[1] = 0; + SYSTEMTIME tim = RxHist.m_File[RxHist.m_CurRead].m_UTC; + if( Log.m_LogSet.m_TimeZone == 'I' ){ + UTCtoJST(&tim); + tm[0] = 0; + } + int mm = RxHist.m_File[RxHist.m_CurRead].m_Flag >> 16; + if( mm ){ + mm--; + int dm, w, h; + SSTVSET.GetPictureSize(w, dm, h, mm); + if( ((mm >= smR24) && (mm <= smRM12)) ){ + w /= 2; + h /= 2; + } + sprintf(bbf, "%s (%ux%u)", SSTVModeList[mm], w, h); + mm++; + } + else { + strcpy(bbf, "???"); + } + + sprintf(bf1, "%s\r\n%u %04u/%02u/%02u %02u%02u%s", + bbf, + UDHist->Position + 1, + tim.wYear, + tim.wMonth, + tim.wDay, + tim.wHour, + tim.wMinute, + tm + ); + sprintf(bf2, "%u %04u/%02u/%02u %02u%02u%s", + UDHist->Position + 1, + tim.wYear, + tim.wMonth, + tim.wDay, + tim.wHour, + tim.wMinute, + tm + ); + HistStat->Caption = bf1; + if( pHistView != NULL ){ + if( mm ) sprintf(&bf2[strlen(bf2)], " %s", bbf); + pHistView->UpdateTitle(pHistView->Active ? bf2 : NULL); + } + } + else { + HistStat->Caption = "No data"; + if( pHistView != NULL ) pHistView->UpdateTitle(NULL); + } + SBLatest->Enabled = UDHist->Position ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DispSyncStat(void) +{ + char bf[128]; + sprintf(bf, "%.2lfHz", SSTVSET.m_SampFreq); + SyncStat->Caption = bf; + SBSampSet->Enabled = (sys.m_SampFreq != SSTVSET.m_SampFreq) ? TRUE : FALSE; + UpdateSBTO(); + if( pSyncView != NULL ) pSyncView->UpdateSyncTitle(SSTVSET.m_SampFreq); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateHist(void) +{ + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + int n = (RxHist.m_Head.m_wPnt - 1) - UDHist->Position; + if( n < 0 ) n += RxHist.m_Head.m_Max; + if( n >= RxHist.m_Head.m_Max ) n -= RxHist.m_Head.m_Max; + RxHist.Read(pBitmapHist, n); + } + else { + ClearDraw(pBitmapHist, PBoxHist, sys.m_ColorRXB); + } + TrigHistF(); + UpdatePic(); + DispHistStat(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UDHistClick(TObject *Sender, TUDBtnType Button) +{ + if( m_DisEvent ) return; + + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + UpdateHist(); + } + else { + UDHist->Position--; + } +} +//--------------------------------------------------------------------------- +// ヒストリの削除 +void __fastcall TMmsstv::KHDClick(TObject *Sender) +{ + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + if( YesNoMB( MsgEng ? "Delete the picture, are you sure?" : "ほんまに消しますか?" ) == IDYES ){ + RxHist.Delete(UDHist->Position); + if( UDHist->Position >= RxHist.m_Head.m_Cnt ) UDHist->Position--; + UpdateHist(); + if( pHistView != NULL ){ + pHistView->LoadHist(0); + } + } + } +} +//--------------------------------------------------------------------------- +// 全ヒストリの削除 +void __fastcall TMmsstv::KHDAClick(TObject *Sender) +{ + if( RxHist.m_Head.m_Cnt ){ + if( YesNoMB( MsgEng ? "Delete all pictures, are you sure?" : "全ての履歴を削除します." ) == IDYES ){ + RxHist.DeleteAll(); + UDHist->Position = 0; + UpdateHist(); + if( pHistView != NULL ) pHistView->LoadHist(0); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DateBitmap(Graphics::TBitmap *pBitmap, SYSTEMTIME &tim) +{ + pBitmap->Canvas->Font->Name = Font->Name; + pBitmap->Canvas->Font->Charset = Font->Charset; + pBitmap->Canvas->Font->Size = 8; + pBitmap->Canvas->Font->Color = clWhite; + pBitmap->Canvas->Brush->Color = clBlack; + char bf[64]; + switch(Log.m_LogSet.m_DateType){ + case 2: + case 3: + sprintf(bf, "%02u-%s-%04u %02u%02u", tim.wDay, MONT1[tim.wMonth], tim.wYear, tim.wHour, tim.wMinute); + break; + case 4: + case 5: + sprintf(bf, "%s-%02u-%04u %02u%02u", MONT1[tim.wMonth], tim.wDay, tim.wYear, tim.wHour, tim.wMinute); + break; + default: + sprintf(bf, "%04u-%s-%02u %02u%02u", tim.wYear, MONT1[tim.wMonth], tim.wDay, tim.wHour, tim.wMinute); + break; + } + int y = pBitmap->Height - pBitmap->Canvas->TextHeight(bf) - 1; + pBitmap->Canvas->TextOut(0, y, bf); +} +//--------------------------------------------------------------------------- +// ヒストリのファイルへのセーブ +void __fastcall TMmsstv::KHSClick(TObject *Sender) +{ + char bf[128]; + bf[0] = 0; + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + SYSTEMTIME tim = RxHist.m_File[RxHist.m_CurRead].m_UTC; + if( Log.m_LogSet.m_TimeZone == 'I' ){ + UTCtoJST(&tim); + } + sprintf(bf, "%04u%02u%02u%02u%02u", + tim.wYear, + tim.wMonth, + tim.wDay, + tim.wHour, + tim.wMinute + ); + if( Sender == KHT ){ + Graphics::TBitmap *pBitmap = DupeBitmap(pBitmapHist, pf24bit); + DateBitmap(pBitmap, tim); + SaveBitmapMenu(pBitmap, bf, NULL); + delete pBitmap; + } + else { + SaveBitmapMenu(pBitmapHist, bf, NULL); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxHistPaint(TObject *Sender) +{ + DrawBitmap(PBoxHist, pBitmapHist); + if( sys.m_ShowSizeHist ){ + ShowSize(PBoxHist, pBitmapHist->Width, pBitmapHist->Height, 12, clGreen); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBLatestClick(TObject *Sender) +{ + if( UDHist->Position ){ + UDHist->Position = 0; + UpdateHist(); + } +} +//--------------------------------------------------------------------------- +double __fastcall TMmsstv::GetSyncSamp(int X, int Y) +{ + if( m_SlantY == Y ) return SSTVSET.m_SampFreq; + double d = (X - m_SlantX); + d = d * SSTVSET.m_SampFreq / pBitmapD12->Width; + d /= (m_SlantY - Y); + d = SSTVSET.m_SampFreq - d; + d = NormalSampFreq(d, 10); + if( d > (SampFreq * 1100/1060) ){ + d = SampFreq * 1100/1060; + } + return d; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawSync(void) +{ + if( m_MainPage != pgSync ) return; + + PBoxD12->Canvas->Draw(0, 0, pBitmapD12); + if( m_Slant ){ + PBoxD12->Canvas->Pen->Color = clBlue; + PBoxD12->Canvas->Pen->Style = psSolid; + PBoxD12->Canvas->MoveTo(m_SlantX, m_SlantY); + int Sop = ::SetROP2(PBoxD12->Canvas->Handle, R2_MERGEPENNOT); + PBoxD12->Canvas->LineTo(m_SlantX2, m_SlantY2); + ::SetROP2(PBoxD12->Canvas->Handle, Sop); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxD12MouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_Slant ){ + m_SlantX2 = X; + m_SlantY2 = Y; + DrawSync(); + char bf[32]; + sprintf(bf, "%.2lfHz", GetSyncSamp(X, Y)); + SyncStat->Caption = bf; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBSampSetClick(TObject *Sender) +{ + sys.m_SampFreq = SSTVSET.m_SampFreq; + SBSampSet->Enabled = FALSE; + InfoSampFreq(); + SSTVSET.InitIntervalPara(); + UpdateSBTO(); + DrawSlantInfo(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBPasteClick(TObject *Sender) +{ + if( PasteBitmap(pBitmapTXM, (Sender == KEX) ? 2 : 0) == TRUE ){ + AdjustPage(pgTX); + MakeTxBitmap(0); + PBoxTXPaint(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ShowSize(TPaintBox *pBox, int w, int h, int fs, TColor col) +{ + pBox->Canvas->Brush->Color = col; + pBox->Canvas->Font->Color = clWhite; + pBox->Canvas->Font->Height = -fs; + char bf[64]; + sprintf(bf, "%ux%u", w, h); + int fh = pBox->Canvas->TextHeight(bf); + pBox->Canvas->TextOut(0, pBox->Height - fh, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ShowSize(Graphics::TBitmap *pBitmap, int x, int y, int w, int h, int fs, TColor col) +{ + pBitmap->Canvas->Brush->Color = col; + pBitmap->Canvas->Font->Color = clWhite; + pBitmap->Canvas->Font->Height = -fs; + char bf[64]; + sprintf(bf, "%ux%u", w, h); + int fh = pBitmap->Canvas->TextHeight(bf); + pBitmap->Canvas->TextOut(x, y - fh, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ShowNo(Graphics::TBitmap *pBitmap, int x, int y, int n, int fs, TColor col) +{ + pBitmap->Canvas->Brush->Color = col; + pBitmap->Canvas->Font->Color = clBlack; + pBitmap->Canvas->Font->Height = -fs; + char bf[64]; + sprintf(bf, "%u", n); + pBitmap->Canvas->TextOut(x+1, y+1, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTXPaint(TObject *Sender) +{ + if( m_MainPage != pgTX ) return; + + DrawBitmap(PBoxTX, pBitmapTX); + m_SendY = -1; + if( sys.m_ShowSizeTX ){ + ShowSize(PBoxTX, m_TXW, m_TXPH, 12, clGreen); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBCopyClick(TObject *Sender) +{ + CopyBitmap(pBitmapHist); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRCCClick(TObject *Sender) +{ + ClearDraw(pBitmapRX, PBoxRX, sys.m_ColorRXB); + ClearDraw(pBitmapD12, PBoxD12, clWhite); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineR24(CSSTVMOD *mp) +{ + int x; + int Y, RY[320], BY[320]; + mp->Write(1200, 6); + mp->Write(1500, 2); + for( x = 0; x < 320; x++ ){ // Y + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), 92.0/320.0); + } + mp->Write(1500, 3.0); + mp->Write(1900, 1.0); + for( x = 0; x < 320; x++ ){ // R-Y + mp->Write(short(ColorToFreq(RY[x])), 46.0/320.0); + } + mp->Write(2300, 3.0); + mp->Write(1900, 1.0); + for( x = 0; x < 320; x++ ){ // B-Y + mp->Write(short(ColorToFreq(BY[x])), 46.0/320.0); + } + mp->m_wLine++; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineR36(CSSTVMOD *mp) +{ + int x; + int Y, RY[320], BY[320]; + mp->Write(1200, 9); + mp->Write(1500, 3); + for( x = 0; x < 320; x++ ){ // Y + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), 88.0/320.0); + } + mp->Write(short(mp->m_wLine & 1 ? 2300 : 1500), 4.5); // RY=1500, BY=2300 + mp->Write(1900, 1.5); + for( x = 0; x < 320; x++ ){ // DeffColor + if( !(mp->m_wLine & 1) ){ // R-Y + Y = RY[x]; + } + else { // B-Y + Y = BY[x]; + } + mp->Write(short(ColorToFreq(Y)), 44.0/320.0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineR72(CSSTVMOD *mp) +{ + int x; + int Y, RY[320], BY[320]; + mp->Write(1200, 9); + mp->Write(1500, 3); + for( x = 0; x < 320; x++ ){ // Y + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), 138.0/320.0); + } + mp->Write(1500, 4.5); + mp->Write(1900, 1.5); + for( x = 0; x < 320; x++ ){ // R-Y + mp->Write(short(ColorToFreq(RY[x])), 69.0/320.0); + } + mp->Write(2300, 4.5); + mp->Write(1900, 1.5); + for( x = 0; x < 320; x++ ){ // B-Y + mp->Write(short(ColorToFreq(BY[x])), 69.0/320.0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineAVT(CSSTVMOD *mp) +{ + int x; + COLD col[320]; + COLD *cp; + for( cp = col, x = 0; x < 320; x++, cp++ ){ // R + cp->c = pBitmapTX->Canvas->Pixels[x][mp->m_wLine]; + mp->Write(short(ColorToFreq(cp->b.r)+0x1000), 125.0/320.0); + } + for( cp = col, x = 0; x < 320; x++, cp++ ){ // G + mp->Write(short(ColorToFreq(cp->b.g)+0x2000), 125.0/320.0); + } + for( cp = col, x = 0; x < 320; x++, cp++ ){ // B + mp->Write(short(ColorToFreq(cp->b.b)+0x3000), 125.0/320.0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineSCT(CSSTVMOD *mp, double tw) +{ + int x; + COLD col[320]; + COLD *cp; + mp->Write(1500+0x2000, 1.5); + tw /= 320.0; + for( cp = col, x = 0; x < 320; x++, cp++ ){ // G + cp->c = pBitmapTX->Canvas->Pixels[x][mp->m_wLine]; + mp->Write(short(ColorToFreq(cp->b.g)+0x2000), tw); + } + mp->Write(1500+0x3000, 1.5); + for( cp = col, x = 0; x < 320; x++, cp++ ){ // B + mp->Write(short(ColorToFreq(cp->b.b)+0x3000), tw); + } + mp->Write(1200, 9); + mp->Write(1500+0x1000, 1.5); + for( cp = col, x = 0; x < 320; x++, cp++ ){ // R + mp->Write(short(ColorToFreq(cp->b.r)+0x1000), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineMRT(CSSTVMOD *mp, double tw) +{ + int x; + COLD col[320]; + COLD *cp; + mp->Write(1200, 4.862); + mp->Write(1500+0x2000, 0.572); + tw /= 320.0; + for( cp = col, x = 0; x < 320; x++, cp++ ){ // G + cp->c = pBitmapTX->Canvas->Pixels[x][mp->m_wLine]; + mp->Write(short(ColorToFreq(cp->b.g)+0x2000), tw); + } + mp->Write(1500+0x3000, 0.572); + for( cp = col, x = 0; x < 320; x++, cp++ ){ // B + mp->Write(short(ColorToFreq(cp->b.b)+0x3000), tw); + } + mp->Write(1500+0x1000, 0.572); + for( cp = col, x = 0; x < 320; x++, cp++ ){ // R + mp->Write(short(ColorToFreq(cp->b.r)+0x1000), tw); + } + mp->Write(1500, 0.572); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineSC2180(CSSTVMOD *mp, double S, double tw) +{ +// 0.711043693634973869144258914710309 + int x; + COLD col[320]; + COLD *cp; + mp->Write(1200, S); + mp->Write(1500+0x1000, 0.5); + tw /= 320.0; + for( cp = col, x = 0; x < 320; x++, cp++ ){ // R + cp->c = pBitmapTX->Canvas->Pixels[x][mp->m_wLine]; + mp->Write(short(ColorToFreq(cp->b.r)+0x1000), tw); + } + for( cp = col, x = 0; x < 320; x++, cp++ ){ // G + mp->Write(short(ColorToFreq(cp->b.g)+0x2000), tw); + } + for( cp = col, x = 0; x < 320; x++, cp++ ){ // B + mp->Write(short(ColorToFreq(cp->b.b)+0x3000), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LinePD(CSSTVMOD *mp, double tw) +{ + int x; + int Y, RY[800], BY[800]; + mp->Write(1200, 20.000); + mp->Write(1500, 2.080); + tw /= double(pBitmapTX->Width); + for( x = 0; x < pBitmapTX->Width; x++ ){ // Y(odd) + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), tw); + } + for( x = 0; x < pBitmapTX->Width; x++ ){ // R-Y + mp->Write(short(ColorToFreq(RY[x])), tw); + } + for( x = 0; x < pBitmapTX->Width; x++ ){ // B-Y + mp->Write(short(ColorToFreq(BY[x])), tw); + } + mp->m_wLine++; + for( x = 0; x < pBitmapTX->Width; x++ ){ // Y(even) + GetRY(Y, RY[0], BY[0], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineP(CSSTVMOD *mp, double S, double P, double C) +{ + int x; + COLD col[640]; + COLD *cp; + mp->Write(1200, S); + mp->Write(1500+0x1000, P); + double tw = C / 640.0; + for( cp = col, x = 0; x < 640; x++, cp++ ){ // R + cp->c = pBitmapTX->Canvas->Pixels[x][mp->m_wLine]; + mp->Write(short(ColorToFreq(cp->b.r)+0x1000), tw); + } + mp->Write(1500+0x2000, P); + for( cp = col, x = 0; x < 640; x++, cp++ ){ // G + mp->Write(short(ColorToFreq(cp->b.g)+0x2000), tw); + } + mp->Write(1500+0x3000, P); + for( cp = col, x = 0; x < 640; x++, cp++ ){ // B + mp->Write(short(ColorToFreq(cp->b.b)+0x3000), tw); + } + mp->Write(1500, P); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineMP(CSSTVMOD *mp, double tw) +{ + int x; + int Y, RY[320], BY[320]; + mp->Write(1200, 9.000); + mp->Write(1500, 1.000); + tw /= double(pBitmapTX->Width); + for( x = 0; x < pBitmapTX->Width; x++ ){ // Y(odd) + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), tw); + } + for( x = 0; x < pBitmapTX->Width; x++ ){ // R-Y + mp->Write(short(ColorToFreq(RY[x])), tw); + } + for( x = 0; x < pBitmapTX->Width; x++ ){ // B-Y + mp->Write(short(ColorToFreq(BY[x])), tw); + } + mp->m_wLine++; + for( x = 0; x < pBitmapTX->Width; x++ ){ // Y(even) + GetRY(Y, RY[0], BY[0], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreq(Y)), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineMR(CSSTVMOD *mp, double tw) +{ + int x; + int Y, RY[640], BY[640]; + int TXW = pBitmapTX->Width; + mp->Write(1200, 9); + mp->Write(1500, 1); + double ty = tw / double(TXW); + double tc = ty / 2.0; + short d; + for( x = 0; x < TXW; x++ ){ // Y + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + d = short(ColorToFreq(Y)); + mp->Write(d, ty); + } + mp->Write(d, 0.1); + for( x = 0; x < TXW; x++ ){ // R-Y + d = short(ColorToFreq(RY[x])); + mp->Write(d, tc); + } + mp->Write(d, 0.1); + for( x = 0; x < TXW; x++ ){ // B-Y + d = short(ColorToFreq(BY[x])); + mp->Write(d, tc); + } + mp->Write(d, 0.1); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineRM(CSSTVMOD *mp, double ts, double tw) +{ + int x; + int Y[320], YY, RY, BY; + mp->Write(1200, ts); + mp->Write(1500, ts/3.0); + tw /= 320.0; + for( x = 0; x < 320; x++ ){ // Y + GetRY(Y[x], RY, BY, pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + } + mp->m_wLine++; + for( x = 0; x < 320; x++ ){ // Y + GetRY(YY, RY, BY, pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + YY = (YY + Y[x]) / 2; + mp->Write(short(ColorToFreq(YY)), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineMN(CSSTVMOD *mp, double tw) +{ + int x; + int Y, RY[320], BY[320]; + mp->Write(NARROW_SYNC, 9.000); + mp->Write(NARROW_LOW, 1.000); + tw /= double(pBitmapTX->Width); + for( x = 0; x < pBitmapTX->Width; x++ ){ // Y(odd) + GetRY(Y, RY[x], BY[x], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreqNarrow(Y)), tw); + } + for( x = 0; x < pBitmapTX->Width; x++ ){ // R-Y + mp->Write(short(ColorToFreqNarrow(RY[x])), tw); + } + for( x = 0; x < pBitmapTX->Width; x++ ){ // B-Y + mp->Write(short(ColorToFreqNarrow(BY[x])), tw); + } + mp->m_wLine++; + for( x = 0; x < pBitmapTX->Width; x++ ){ // Y(even) + GetRY(Y, RY[0], BY[0], pBitmapTX->Canvas->Pixels[x][mp->m_wLine]); + mp->Write(short(ColorToFreqNarrow(Y)), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LineMC(CSSTVMOD *mp, double tw) +{ + int x; + COLD col[320]; + COLD *cp; + mp->Write(NARROW_SYNC, 8.0); + mp->Write(NARROW_LOW, 0.5); + tw /= 320.0; + for( cp = col, x = 0; x < 320; x++, cp++ ){ // R + cp->c = pBitmapTX->Canvas->Pixels[x][mp->m_wLine]; + mp->Write(short(ColorToFreqNarrow(cp->b.r)), tw); + } + for( cp = col, x = 0; x < 320; x++, cp++ ){ // G + mp->Write(short(ColorToFreqNarrow(cp->b.g)), tw); + } + for( cp = col, x = 0; x < 320; x++, cp++ ){ // B + mp->Write(short(ColorToFreqNarrow(cp->b.b)), tw); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OutputMMV(void) +{ + CSSTVMOD *mp = pMod; + if( mp->GetRowCnt() ) return; + CWaitCursor wait; + BYTE head[4]; + + FILE *fp = fopen(sys.m_MMVID.c_str(), "rb"); + if( fp != NULL ){ + int len = filelength(fileno(fp)); + if( (len >= 4) && (fread(head, 1, 4, fp) == 4) ){ + int Samp; + if( (head[0] == 0x55) && (head[1] == 0xaa) ){ + len -= 4; + Samp = head[2]; + if( Samp > 8 ) Samp = 0; + } + else { + fseek(fp, 0L, SEEK_SET); + Samp = head[0]; + } + if( m_pRowBuf != NULL ) delete m_pRowBuf; + BYTE *bp = new BYTE[len+2]; + int pos = 0; + while(len > 0){ + int rlen = fread(&bp[pos], 1, 16384, fp); + len -= rlen; + pos += rlen; + if( rlen < 16384 ) break; + } + if( Samp != SampType ){ + double sfq = SampTable[Samp]; + len = int(double(pos) * SampBase / sfq); + len &= 0xfffffffe; + m_pRowBuf = new BYTE[len+2]; + short *tp = (short *)m_pRowBuf; + short *sp = (short *)bp; + len /= 2; + int i, r; + CIIR iir; + iir.MakeIIR(2700, SampBase, 4, 0, 0); + for( i = 0; i < len; i++ ){ + r = int(double(i) * sfq / SampBase); + *tp++ = iir.Do(sp[r]); + } + pos = len * 2; + delete bp; + } + else { + m_pRowBuf = bp; + } + mp->SetRow((short *)m_pRowBuf, pos/2); + } + fclose(fp); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OutputFSKID(void) +{ + CSSTVMOD *mp = pMod; + CWaitCursor wait; + + char bf[128]; + LPSTR p; + strcpy(bf, sys.m_Call.c_str()); p = bf; + mp->Write(FSKSPACE, FSKGARD); + mp->Write(1900, FSKINTVAL); + mp->WriteFSK(0x2a); // STX + BYTE s = 0; + BYTE c; + for(; *p; p++ ){ + while(mp->GetBufCnt() >= ((mp->m_TXBufLen-2) * SampFreq)) ::Sleep(1000); + c = BYTE((*p) - 0x20); + s = BYTE(c ^ s); + mp->WriteFSK(c); + } + mp->WriteFSK(0x01); // EOT + mp->WriteFSK(s); // check sum + + if( Log.m_LogSet.m_FSKNR ){ + char ubf[256]; + strcpy(ubf, AnsiString(HisRST->Text).c_str()); //ja7ude 0428 + LPCSTR sp = ubf; + for(p = bf; *sp; *sp++ ){ + if( *sp >= '0' ) *p++ = *sp; + } + *p = 0; + p = bf; + while(mp->GetBufCnt() >= ((mp->m_TXBufLen-2) * SampFreq)) ::Sleep(1000); + if( strlen(p) > 3 ){ + p += 3; + int l = strlen(p); + int d; + if( !IsAlphas(p) && (l >= 3) && (sscanf(p, "%u", &d) == 1) && (d < 4096) && ((l < 4)||(d >= 1000)) ){ + s = 0x02; + mp->WriteFSK(s); + c = BYTE((d >> 6) & 0x3f); + s = s ^ c; + mp->WriteFSK(c); + c = BYTE(d & 0x3f); + s = s ^ c; + mp->WriteFSK(c); + } + else { + jstrupr(p); + s = 0; + for(; *p; p++ ){ + while(mp->GetBufCnt() >= ((mp->m_TXBufLen-2) * SampFreq)) ::Sleep(1000); + c = BYTE((*p) - 0x20); + s = BYTE(c ^ s); + mp->WriteFSK(c); + } + mp->WriteFSK(0x01); // EOT + } + mp->WriteFSK(s); // check sum + } + } + mp->Write(FSKSPACE, FSKGARD); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OutputCWID(void) +{ + if( !sys.m_CWIDText.IsEmpty() ){ + CWaitCursor wait; + CSSTVMOD *mp = pMod; + char bf[80]; + bf[0] = '@'; + MacroText(&bf[1], sys.m_CWIDText.c_str(), sizeof(bf)-2); + LPCSTR p = bf; + for(; *p; p++ ){ + while(mp->GetBufCnt() >= ((mp->m_TXBufLen-2) * SampFreq)) ::Sleep(1000); + mp->WriteCWID(*p); + } + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::IsSR(void) +{ + return pMod->GetBufCnt() < ((pMod->m_TXBufLen-2) * SampFreq); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SendSSTV(void) +{ + if( !SBTX->Down ) return; + + CSSTVMOD *mp = pMod; + if( IsSR() ){ + if( mp->m_wLine >= SSTVSET.m_TL ){ + if( mp->m_wLine == SSTVSET.m_TL ){ + // MMSSTV フッター + if( !sys.m_TXFSKID ){ // FSKIDなし + double tw = SampFreq/2; + if( !sys.m_VOX && !SSTVSET.m_fTxNarrow ){ + mp->WriteC(1500, SSTVSET.m_TW > tw ? tw : SSTVSET.m_TW); + mp->Write(1900, 100); + mp->Write(1500, 100); + mp->Write(1900, 100); + mp->Write(1500, 100); + } + else { + mp->WriteC(1900, SSTVSET.m_TW > tw ? tw : SSTVSET.m_TW); + } + } + else { // FSKIDあり + mp->Write(WORD(SSTVSET.m_fTxNarrow ? 1900 : 1500), 300); + } + mp->m_wLine++; + } + else if( mp->m_wLine == (SSTVSET.m_TL + 1) ){ + if( mp->GetBufCnt() < (2 * SampFreq) ){ + if( sys.m_TXFSKID && !sys.m_Call.IsEmpty() ){ + OutputFSKID(); + } + if( sys.m_CWID == 1 ){ + OutputCWID(); + } + else if( (sys.m_CWID == 2) && !sys.m_MMVID.IsEmpty() ){ + OutputMMV(); + } + mp->m_wLine++; + } + } + else if( mp->m_wLine == (SSTVSET.m_TL + 2) ){ + if( !mp->m_Cnt && !mp->m_RowCnt ){ + pSound->TrigBCC(); + mp->m_wLine++; + } + } + else if( pSound->GetBCC() < 0 ){ + int lost = mp->m_Lost; + ToRX(); + if( lost ) InfoTxLost(); + if( KSRR->Checked && (m_MainPage == pgTX) ){ + AdjustPage(pgRX); + } + return; + } +#if 0 + else if( !mp->m_Cnt && !mp->m_RowCnt ){ + int lost = mp->m_Lost; +// ::Sleep( (pSound->m_BuffSize * pSound->m_FifoSize * 1000) / SSTVSET.m_TxSampFreq ); // バッファ送信完了待ち + ToRX(); + if( lost ) InfoTxLost(); + return; + } +#endif + } + else { + while( (mp->GetBufCnt() < ((mp->m_TXBufLen-2) * SampFreq)) && (mp->m_wLine < SSTVSET.m_TL) ){ + switch(SSTVSET.m_TxMode){ + case smR36: + LineR36(mp); + break; + case smR72: + LineR72(mp); + break; + case smAVT: + LineAVT(mp); + break; + case smSCT1: + LineSCT(mp, 138.24); + break; + case smSCT2: + LineSCT(mp, 88.064); + break; + case smSCTDX: + LineSCT(mp, 345.6); + break; + case smMRT1: + LineMRT(mp, 146.432); + break; + case smMRT2: + LineMRT(mp, 73.216); + break; + case smSC2_180: + LineSC2180(mp, 5.5437, 235.0); + break; + case smSC2_120: + LineSC2180(mp, 5.52248, 156.5); + break; + case smSC2_60: + LineSC2180(mp, 5.5006, 78.128); // 6.0006 + break; + case smPD50: + LinePD(mp, 91.520); + break; + case smPD90: + LinePD(mp, 170.240); + break; + case smPD120: + LinePD(mp, 121.600); + break; + case smPD160: + LinePD(mp, 195.584); + break; + case smPD180: + LinePD(mp, 183.040); + break; + case smPD240: + LinePD(mp, 244.480); + break; + case smPD290: + LinePD(mp, 228.800); + break; + case smP3: + LineP(mp, 5.208, 1.042, 133.333); + break; + case smP5: + LineP(mp, 7.813, 1.562375, 200.000); + break; + case smP7: + LineP(mp, 10.417, 2.083, 266.667); + break; + case smMR73: + LineMR(mp, 138.0); + break; + case smMR90: + LineMR(mp, 171.0); + break; + case smMR115: + LineMR(mp, 220.0); + break; + case smMR140: + LineMR(mp, 269.0); + break; + case smMR175: + LineMR(mp, 337.0); + break; + case smMP73: + LineMP(mp, 140.0); + break; + case smMP115: + LineMP(mp, 223.0); + break; + case smMP140: + LineMP(mp, 270.0); + break; + case smMP175: + LineMP(mp, 340.0); + break; + case smML180: + LineMR(mp, 176.5); + break; + case smML240: + LineMR(mp, 236.5); + break; + case smML280: + LineMR(mp, 277.5); + break; + case smML320: + LineMR(mp, 317.5); + break; + case smR24: + LineR24(mp); + break; + case smRM8: + LineRM(mp, 6.0, 58.89709); + break; + case smRM12: + LineRM(mp, 6.0, 92.0); + break; + case smMN73: + LineMN(mp, 140.0); + break; + case smMN110: + LineMN(mp, 212.0); + break; + case smMN140: + LineMN(mp, 270.0); + break; + case smMC110: + LineMC(mp, 140.0); + break; + case smMC140: + LineMC(mp, 180.0); + break; + case smMC180: + LineMC(mp, 232.0); + break; + } + mp->m_wLine++; + } + } + } + // 送信位置マーカー + if( mp->m_sCnt < mp->m_rCnt ){ + int l = mp->m_rCnt - mp->m_sCnt; + if( mp->m_wLine >= (SSTVSET.m_TL + 3) ){ + l -= pSound->GetOutCount(1); + } + else { + l -= pSound->GetOutCount(0); + } + l /= SSTVSET.m_TWD; +// int l = (mp->m_rCnt - mp->m_sCnt - ) / SSTVSET.m_TWD; + switch(SSTVSET.m_TxMode){ + case smR24: + case smRM8: + case smRM12: + case smPD50: + case smPD90: + case smMP73: + case smMP115: + case smMP140: + case smMP175: + case smMN73: + case smMN110: + case smMN140: + l *= 2; + break; + case smPD120: + case smPD180: + case smPD240: + l = l * 512 / 496; + if( l > 256 ) l = 256; + break; + case smPD160: + l = l * 512 / 400; + if( l > 256 ) l = 256; + break; + case smPD290: + l = l * 512 / 616; + if( l > 256 ) l = 256; + break; + case smP3: + case smP5: + case smP7: + case smML180: + case smML240: + case smML280: + case smML320: + l = l * 256 / 496; + if( l > 256 ) l = 256; + break; + } + if( l > SSTVSET.m_TL ) l = SSTVSET.m_TL; + if( l < 0 ) l = 0; + DrawTXCursor(l); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateTXUI(void) +{ + int f = SBTX->Down ? FALSE : TRUE; + SBTune->Enabled = f; + SBCW->Enabled = f; +// SBUseTemp->Enabled = f; + SBUA240->Enabled = (m_TXW == 320) ? f : FALSE; + SBUS240->Enabled = (m_TXW == 320) ? f : FALSE; + SBDA240->Enabled = f; + SBDS240->Enabled = f; + SBTXFil->Enabled = f; + SBPaste->Enabled = f && ::IsClipboardFormatAvailable(CF_BITMAP); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OutHEAD(void) +{ + CSSTVMOD *mp = pMod; + + switch(sys.m_VOX){ + case 0: + if( SSTVSET.m_fTxNarrow ){ + mp->Write(1900, 100); + mp->Write(2300, 100); + mp->Write(1900, 100); + mp->Write(2300, 100); + } + else { + mp->Write(1900, 100); + mp->Write(1500, 100); + mp->Write(1900, 100); + mp->Write(1500, 100); + mp->Write(2300, 100); + mp->Write(1500, 100); + mp->Write(2300, 100); + mp->Write(1500, 100); + } + break; + case 1: + if( !sys.m_VOXSound.IsEmpty() ){ + CTextString cs(sys.m_VOXSound.c_str()); + char bf[1024]; + if( cs.LoadText(bf, sizeof(bf)-1) ){ + DeleteComment(bf); + if( bf[0] == '#' ){ + if( !strcmp(&bf[1], "id") ){ + mp->Write(WORD(SSTVSET.m_fTxNarrow ? 1900 : 1500), 300); + OutputFSKID(); + break; + } + else if( !strcmp(&bf[1], "cw") ){ + OutputCWID(); + break; + } + else { + int n = atoin(&bf[1], -1); + while(n--){ + if( !cs.LoadText(bf, sizeof(bf)-1) ) break; + } + DeleteComment(bf); + } + } + LPSTR t, p; + p = bf; + int ttm = 0; + int lmt = (SSTVSET.m_TxMode == smAVT) ? 1800 : 8000; + while(*p){ + p = StrDlm(t, p); + if( *t ){ + int fq = atoin(t, -1); + if( fq < 0 ) fq = 0; + if( fq > 2800 ) fq = 2800; + p = StrDlm(t, p); + int tm = atoin(t, -1); + if( tm <= 0 ) tm = 100; + ttm += tm; + if( ttm > lmt ){ + ttm -= tm; + tm = lmt - ttm; + if( tm > 0 ) mp->Write(short(fq), tm); + break; + } + else { + mp->Write(short(fq), tm); + } + } + else { + break; + } + } + } + } + break; + default: + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ToTX(void) +{ + CWaitCursor wait; + + m_TuneTimer = 0; + if( !sys.m_echo ){ + int f = pDem->m_Sync; + pDem->Stop(); + pDem->FreeRxBuff(); + if( f ) WriteHistory(0); + } + if( m_ReqHistF || m_ChangeTemp || DrawMain.IsTimeMacro() ){ + if( m_ReqHistF ) AdjustHistF(); + UpdatePic(); + } + int rep = (sys.m_Repeater && pDem->m_Repeater) ? 1 : 0; + if( SBUseTemp->Down && DrawMain.m_Cnt && (pBitmapTXM->Width != DrawMain.m_SX) && (!rep) ){ + SBTX->Down = FALSE; + if( + YesNoMB( MsgEng ? + "The template image quality is no good, because the size of template is different from the TX image.\r\n\r\nContinue processing?" : + "テンプレートのサイズが送信画像と異なるためテンプレートの画質は良くありません.\r\n\r\nこのまま送信しますか?" ) == IDNO + ){ + return; + } + SBTX->Down = TRUE; + } + + m_SendY = -1; + SBTX->Down = 1; + UpdateTXUI(); + CSSTVMOD *mp = pMod; + SSTVSET.SetTxMode(SSTVSET.m_TxMode); + + mp->OpenTXBuf(10); + mp->InitTXBuf(); + + // MMSSTV ヘッダー + OutHEAD(); + // VIS + if( SSTVSET.m_fTxNarrow ){ // 狭帯域モードの送信 + mp->Write(1900, 300); + mp->Write(FSKSPACE, FSKGARD); + mp->Write(1900, FSKINTVAL); + mp->WriteFSK(0x2d); // STX + mp->WriteFSK(0x15); // STX + BYTE d = 0; + switch(SSTVSET.m_TxMode){ + case smMN73: + d = 0x02; + break; + case smMN110: + d = 0x04; + break; + case smMN140: + d = 0x05; + break; + case smMC110: + d = 0x14; + break; + case smMC140: + d = 0x15; + break; + case smMC180: + d = 0x16; + break; + } + mp->WriteFSK(d); + mp->WriteFSK(BYTE(d^0x15)); +// mp->Write(FSKSPACE, FSKGARD); + } + else { + int i; + int n; + int d; + int e = (SSTVSET.m_TxMode == smAVT) ? 3 : 1; + for( n = 0; n < e; n++ ){ + mp->Write(1900, 300); + mp->Write(1200, 10); + mp->Write(1900, 300); + mp->Write(1200, 30); + switch(SSTVSET.m_TxMode){ + case smR36: + d = 0x88; + break; + case smR72: + d = 0x0c; + break; + case smAVT: + d = 0x44; + break; + case smSCT1: + d = 0x3c; + break; + case smSCT2: + d = 0xb8; + break; + case smSCTDX: + d = 0xcc; + break; + case smMRT1: + d = 0xac; + break; + case smMRT2: + d = 0x28; + break; + case smSC2_180: + d = 0xb7; + break; + case smSC2_120: + d = 0x3f; + break; + case smSC2_60: + d = 0xbb; + break; + case smPD50: + d = 0xdd; + break; + case smPD90: + d = 0x63; + break; + case smPD120: + d = 0x5f; + break; + case smPD160: + d = 0xe2; + break; + case smPD180: + d = 0x60; + break; + case smPD240: + d = 0xe1; + break; + case smPD290: + d = 0xde; + break; + case smP3: + d = 0x71; + break; + case smP5: + d = 0x72; + break; + case smP7: + d = 0xf3; + break; + case smMR73: + d = 0x4523; + break; + case smMR90: + d = 0x4623; + break; + case smMR115: + d = 0x4923; + break; + case smMR140: + d = 0x4a23; + break; + case smMR175: + d = 0x4c23; + break; + case smMP73: + d = 0x2523; + break; + case smMP115: + d = 0x2923; + break; + case smMP140: + d = 0x2a23; + break; + case smMP175: + d = 0x2c23; + break; + case smML180: + d = 0x8523; + break; + case smML240: + d = 0x8623; + break; + case smML280: + d = 0x8923; + break; + case smML320: + d = 0x8a23; + break; + case smR24: + d = 0x84; + break; + case smRM8: + d = 0x82; + break; + case smRM12: + d = 0x86; + break; + } + if( d >= 0x100 ){ + for( i = 0; i < 16; i++ ){ + mp->Write(short(d & 0x0001 ? 1100 : 1300), 30); + d = d >> 1; + } + } + else { + for( i = 0; i < 8; i++ ){ + mp->Write(short(d & 0x0001 ? 1100 : 1300), 30); + d = d >> 1; + } + } + mp->Write(1200, 30); + } + if( SSTVSET.m_TxMode == smAVT ){ // 同期信号 + int sd = 0x5fa0; + for( i = 0; i < 32; i++ ){ + mp->Write(1900, 9.7646); + d = sd; + for( n = 0; n < 16; n++ ){ + mp->Write(short(d & 0x8000 ? 1600 : 2200), 9.7646); + d = d << 1; + } + sd = ((sd & 0xff00) - 0x0100) | ((sd & 0x00ff) + 0x0001); + } + mp->Write(0, 0.30514375); + } + else if( (SSTVSET.m_TxMode == smSCT1) || (SSTVSET.m_TxMode == smSCT2) || (SSTVSET.m_TxMode == smSCTDX) ){ + mp->Write(1200, 9.0); + } + } + mp->m_sCnt = mp->m_Cnt; + SendSSTV(); + if( pRadio != NULL ) pRadio->SetPTT(1); + if( pComm != NULL ){ + pComm->SetPTT(1); + pComm->SetScan(pDem->m_Sync); + } + LogLink.SetPTT(1); + ::Sleep(10); // 10msのウエイト + pSound->m_ReqTx = 1; + pMod->m_tune = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ToRX(void) +{ + CWaitCursor w; + + m_TuneTimer = 0; + CSSTVDEM *dp = pDem; + if( sys.m_Repeater ){ + if( dp->m_repmode >= 6 ){ + dp->m_repmode = 0; + } + SetBeaconTick(); + } + if( (dp->m_LoopBack == 1 ) && dp->m_Sync && +// (pDem->m_rBase < (SSTVSET.m_LM * 90/100)) ){ + (m_AY < (SSTVSET.m_L * 90/100)) ){ + dp->Stop(); + dp->m_SyncMode = 0; + } + pSound->m_ReqTx = 0; + int tout = (pSound->m_BuffSize * pSound->m_FifoSizeTX * 10) / SSTVSET.m_TxSampFreq; + tout += 10; + int lost = pDem->m_Lost; + for( int i = 0; i < tout; i++ ){ + if( !pSound->m_Tx ) break; + DrawSSTV(); + ::Sleep(100); + } + if( !lost ) pDem->m_Lost = 0; + pMod->SetRow(NULL, 0); + if( m_pRowBuf != NULL ){ + delete m_pRowBuf; + m_pRowBuf = NULL; + } + if( !sys.m_echo ){ + pDem->OpenCloseRxBuff(); + } + pMod->m_tune = 0; + if( pRadio != NULL ) pRadio->SetPTT(0); + if( pComm != NULL ){ + pComm->SetScan(dp->m_Sync); + pComm->SetPTT(0); + } + LogLink.SetPTT(0); + SBTX->Down = 0; + SBTune->Down = 0; + UpdateTXUI(); + DeleteTXCursor(); + pMod->CloseTXBuf(); + UpdateSBTO(); + UpdateModeBtn(); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBTXClick(TObject *Sender) +{ + if( SBTX->Down ){ + ToTX(); + } + else { + ToRX(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBTuneClick(TObject *Sender) +{ + if( SBTune->Down ){ + SBCW->Enabled = FALSE; + if( pRadio != NULL ) pRadio->SetPTT(1); + if( pComm != NULL ) pComm->SetPTT(1); + LogLink.SetPTT(1); + pMod->m_tune = 1; + pSound->m_ReqTx = 1; + for( int i = 0; i < 20; i++ ){ + if( pSound->m_Tx ) break; + ::Sleep(100); + } + m_TuneTimer = ::GetTickCount(); + if( sys.m_TuneTXTime >= 0 ){ + m_TuneTimer += sys.m_TuneTXTime * 1000; + } + else { + m_TuneTimer += 30 * 1000; + } + } + else { + ToRX(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBCWClick(TObject *Sender) +{ + if( SBCW->Down ){ + SendCWID(sys.m_CWText.c_str()); + Application->ProcessMessages(); + SBCW->Down = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawTXCursor_(int y) +{ + if( m_MainPage != pgTX ) return; + + PBoxTX->Canvas->MoveTo(0, y); + int Sop = ::SetROP2(PBoxTX->Canvas->Handle, R2_NOT); + PBoxTX->Canvas->LineTo(320, y); + ::SetROP2(PBoxTX->Canvas->Handle, Sop); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DrawTXCursor(int y) +{ + if( m_SendY == -1 ){ + PBoxTXPaint(NULL); + } + if( y != m_SendY ){ + DeleteTXCursor(); + m_SendY = y; + DrawTXCursor_(m_SendY); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DeleteTXCursor(void) +{ + if( m_SendY >= 0 ){ + DrawTXCursor_(m_SendY); + m_SendY = -1; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PageChange(TObject *Sender) +{ + m_MainPage = GetActiveIndex(Page); + MultProc(); + m_TempHold = 0; + UpdateModeBtn(); + if( (m_MainPage == pgTX) && (!SBTX->Down) ){ + MultProc(); + UpdateTemp(); + MakeTxBitmap(0); + } + if( m_MainPage == pgTemp ) UpdateUITemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateTxClip(void) +{ + switch(m_TxClipType){ + case 0: + SBDS240->Down = FALSE; + SBUS240->Down = FALSE; + SBDA240->Down = FALSE; + SBUA240->Down = FALSE; + break; + case 1: // DS + SBDS240->Down = TRUE; + break; + case 2: // US + SBUS240->Down = TRUE; + break; + case 3: // DA + SBDA240->Down = TRUE; + break; + case 4: // UA + SBUA240->Down = TRUE; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDS240Click(TObject *Sender) +{ + m_TxClipType = SBDS240->Down ? 1 : 0; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBUS240Click(TObject *Sender) +{ + m_TxClipType = SBUS240->Down ? 2 : 0; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDA240Click(TObject *Sender) +{ + m_TxClipType = SBDA240->Down ? 3 : 0; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBUA240Click(TObject *Sender) +{ + m_TxClipType = SBUA240->Down ? 4 : 0; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MakeTxBitmap(int sw) +{ + if( !sw && pSound->m_Tx && !SBTune->Down ) return; + CWaitCursor wait; + + int sf = pBitmapTX->Width != pBitmapTemp->Width ? 1 : 0; + int Sop; + FillBitmap(pBitmapTX, sys.m_PicClipColor); + TRect rc; + int rep = 0; + if( sys.m_Repeater && pDem->m_Repeater ){ + rep = 1; + } + switch(m_TxClipType){ + case 0: +_n1:; + pBitmapTX->Canvas->Draw(0, 0, pBitmapTXM); + break; + case 1: // DS + if( rep ) goto _n1; + pBitmapTX->Canvas->Draw(0, 16, pBitmapTXM); + break; + case 2: // US + if( sf || rep ) goto _n1; + pBitmapTX->Canvas->Draw(0, -16, pBitmapTXM); + break; + case 3: // DA + if( rep ) goto _n1; + rc.Left = 0; rc.Right = pBitmapTX->Width; + rc.Top = 16; rc.Bottom = pBitmapTX->Height; + Sop = ::SetStretchBltMode(pBitmapTX->Canvas->Handle, HALFTONE); + pBitmapTX->Canvas->StretchDraw(rc, pBitmapTXM); + ::SetStretchBltMode(pBitmapTX->Canvas->Handle, Sop); + break; + case 4: // UA + if( sf || rep ) goto _n1; + rc.Left = 0; rc.Right = pBitmapTX->Width; + rc.Top = 0; rc.Bottom = pBitmapTX->Height - 16; + Sop = ::SetStretchBltMode(pBitmapTX->Canvas->Handle, HALFTONE); + pBitmapTX->Canvas->StretchDraw(rc, pBitmapTXM); + ::SetStretchBltMode(pBitmapTX->Canvas->Handle, Sop); + break; + } + if( SBUseTemp->Down || (m_MainPage == pgTemp) ){ + pBitmapTemp->Transparent = TRUE; + pBitmapTemp->TransparentMode = tmFixed; + pBitmapTemp->TransparentColor = pBitmapTemp->Canvas->Pixels[DrawMain.m_TransX][DrawMain.m_TransY]; + if( rep && sys.m_RepBottomAdj ){ // 伸縮なし + DrawMain.FillPic(pBitmapTX->Canvas, pBitmapTemp->TransparentColor, -1, 1.0, 1.0, m_TXPH - pBitmapTemp->Height); + pBitmapTX->Canvas->Draw(0, m_TXPH - pBitmapTemp->Height, pBitmapTemp); + } + else { + DrawMain.FillPic(pBitmapTX->Canvas, pBitmapTemp->TransparentColor, m_TxClipType, double(m_TXW)/double(DrawMain.m_SX), double(m_TXH)/double(DrawMain.m_SY), 0); + switch(m_TxClipType){ + case 2: + if( sf ) goto _n2; + pBitmapTX->Canvas->Draw(0, -16, pBitmapTemp); + break; + case 4: + if( sf ) goto _n2; + rc.Left = 0; rc.Right = pBitmapTX->Width; + rc.Top = 0; rc.Bottom = pBitmapTX->Height - 16; + Sop = ::SetStretchBltMode(pBitmapTX->Canvas->Handle, HALFTONE); + pBitmapTX->Canvas->StretchDraw(rc, pBitmapTemp); + ::SetStretchBltMode(pBitmapTX->Canvas->Handle, Sop); + break; + default: +_n2:; + if( sf ){ + StretchCopy(pBitmapTX, pBitmapTemp, HALFTONE); + } + else { + pBitmapTX->Canvas->Draw(0, 0, pBitmapTemp); + } + break; + } + } + pBitmapTemp->Transparent = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBUseTempClick(TObject *Sender) +{ + if( pSound->m_Tx && !SBTune->Down && !SBUseTemp->Down ){ + SBUseTemp->Down = TRUE; + } + if( m_ReqHistF ) AdjustHistF(); + UpdateTemp(); + MakeTxBitmap(1); + PBoxTXPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KOSCClick(TObject *Sender) +{ + if( pSound == NULL ) return; + TTScope *pBox = new TTScope(this); + pBox->Execute(pDem); + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KOLClick(TObject *Sender) +{ + TLogSetDlg *pBox = new TLogSetDlg(this); + pBox->Execute(); + delete pBox; + UpdateLogLink(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::InfoSampFreq(void) +{ + if( fabs(sys.m_SampFreq - SampFreq) >= 50.0 ){ + if( (pSound != NULL) && (sys.m_SampFreq > (SampFreq * 1100/1060)) ){ + pDem->Start(smSCT1, 0); + UpdateModeBtn(); + GBMode->Enabled = FALSE; + } + InfoMB( + MsgEng ? + "Restart MMSSTV for the new sampling rate.\r\n(Does not have to restart your PC)\r\n\r\n" + "Now MMSSTV is running on %.2lfHz, and was requested to change to %.2lfHz." + " This difference are too large for the DSP of MMSSTV." : + "新しいサンプリングレートを適用します。MMSSTVを再起動して下さい\r\n" + "(パソコンを再起動する必要はありません)\r\n\r\n" + "現在MMSSTVは%.2lfHzで動作しており、%.2lfHzへの変更を要請されています。" + " 再起動しないと正常な動作を維持することができません。" + , SampFreq, sys.m_SampFreq + ); + } + else { + GBMode->Enabled = TRUE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KOMClick(TObject *Sender) +{ + TOptionDlg *pBox = new TOptionDlg(this); + int stereo = sys.m_SoundStereo; + int stereoTX = sys.m_StereoTX; + int fontadj = sys.m_FontAdjSize; + int cal = sys.m_DemCalibration; + int AppPriority = sys.m_Priority; + AnsiString DevID = sys.m_SoundDevice; + AnsiString MMW = sys.m_SoundMMW; + if( Sender == NULL ) pBox->SetPageIndex(1); + if( pBox->Execute(pDem, pMod) == TRUE ){ + if( cal != sys.m_DemCalibration ) MakeCalibrationTable(); + if( (sys.m_UseRxBuff == 2) && !WaveStg.IsOpen() ) WaveStg.Open(); + if( (sys.m_UseRxBuff != 2) && WaveStg.IsOpen() ) WaveStg.Close(); + + if( !SBTX->Down ){ + pMod->m_vco.SetSampleFreq(sys.m_SampFreq + sys.m_TxSampOff); + } + UpdateSystemFont(); + InitColorTable(sys.m_ColorLow, sys.m_ColorHigh); + if( (pSound->m_FifoSizeTX != sys.m_SoundFifoTX) || + (pSound->m_FifoSizeRX != sys.m_SoundFifoRX) || + (DevID != sys.m_SoundDevice) || + (MMW != sys.m_SoundMMW) || + (stereo != sys.m_SoundStereo) || + (stereoTX != sys.m_StereoTX) ){ +// pSound->m_IDDevice = sys.m_SoundDevice; + pSound->InitSound(); + } + DispSyncStat(); + InfoSampFreq(); + UpdateTitle(); + if( sys.m_HistMax != RxHist.m_Head.m_Max ){ + RxHist.ChangeMax(sys.m_HistMax); + m_DisEvent++; + UDHist->Position = 0; + UpdateHist(); + m_DisEvent--; + } + if( fontadj != sys.m_FontAdjSize ){ + FormResize(NULL); + } + SBRXID->Down = pDem->m_fskdecode; + SBTXID->Down = sys.m_TXFSKID; + if( AppPriority != sys.m_Priority ) UpdatePriority(); + } + if( COMM.change || RADIO.change ){ + OpenCloseCom(); + } + delete pBox; + UpdateModeBtn(); + UpdateUI(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OpenCloseCom(void) +{ + if( pComm != NULL ){ + delete pComm; + pComm = NULL; + } + if( pRadio != NULL ){ + delete pRadio; + pRadio = NULL; + } + if( strcmpi(sys.m_TxRxName.c_str(), "NONE") ){ + pComm = new CComm(); + pComm->Open(sys.m_TxRxName.c_str()); + if( !pComm->IsOpen() ){ + if( sys.m_TxRxLock ){ + delete pComm; + pComm = NULL; + ErrorMB( "Could not open '%s' for the PTT controls", sys.m_TxRxName.c_str()); + } + } + if( pComm != NULL ){ + pComm->SetPTT(SBTX->Down); + pComm->SetScan(pDem->m_Sync); + } +// if( !sys.m_TxRxLock ) pComm->Close(); + } + RADIO.change = 0; + if( strcmp(RADIO.StrPort, "NONE" ) ){ + pRadio = new CCradio(TRUE); + pRadio->Open(&RADIO, Handle, CM_CMMR, CM_CRADIO); + if( pRadio->m_CreateON != TRUE ){ + delete pRadio; + pRadio = NULL; + ErrorMB( MsgEng ? "Could not open '%s' for Radio commands":"Radioコマンドポート'%s'がオープンできません.", RADIO.StrPort); + } + else { + pRadio->SendCommand(RADIO.CmdInit.c_str()); + if( RADIO.PollScan ){ + m_DisEvent++; + LogFreq->Text = "???"; + m_DisEvent--; + RADIO.Cmdxx = 0x00; + pRadio->m_ScanAddr = 1; + } + } + } + RADIO.change = COMM.change = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KExitClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBListClick(TObject *Sender) +{ + TLogListDlg *pBox = new TLogListDlg(this); + MultProc(); + pBox->Execute(); +// Application->OnIdle = NULL; + delete pBox; + AutoLogSave(); + UpdateLogLink(); + UpdateTitle(); + AdjustFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateCallsign(void) +{ + if( HisCall->Text.IsEmpty() ) m_Dupe = 0; + HisCall->Font->Color = m_Dupe ? clRed : clBlack; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateLogData(void) +{ + StrCopy(Log.m_sd.call, AnsiString(HisCall->Text).c_str(), MLCALL); //ja7ude 0428 + clipsp(Log.m_sd.call); + jstrupr(Log.m_sd.call); + StrCopy(Log.m_sd.name, AnsiString(HisName->Text).c_str(), MLNAME); //ja7ude 0428 + StrCopy(Log.m_sd.qth, AnsiString(HisQTH->Text).c_str(), MLQTH); //ja7ude 0428 + StrCopy(Log.m_sd.my, AnsiString(MyRST->Text).c_str(), MLRST); //ja7ude 0428 + jstrupr(Log.m_sd.my); + StrCopy(Log.m_sd.ur, AnsiString(HisRST->Text).c_str(), MLRST); //ja7ude 0428 + jstrupr(Log.m_sd.ur); + StrCopy(Log.m_sd.rem, AnsiString(EditNote->Text).c_str(), MLREM); //ja7ude 0428 + StrCopy(Log.m_sd.qsl, AnsiString(EditQSL->Text).c_str(), MLQSL); //ja7ude 0428 + Log.SetFreq(&Log.m_sd, AnsiString(LogFreq->Text).c_str()); //ja7ude 0428 +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateTextData(void) +{ + HisCall->Text = Log.m_sd.call; + HisName->Text = Log.m_sd.name; + HisQTH->Text = Log.m_sd.qth; + HisRST->Text = Log.m_sd.ur; + MyRST->Text = Log.m_sd.my; + EditNote->Text = Log.m_sd.rem; + EditQSL->Text = Log.m_sd.qsl; + LogFreq->Text = Log.GetFreqString(Log.m_sd.band, Log.m_sd.fq); + Log.m_CurChg = 0; + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FindCall(void) +{ + CWaitCursor w; + m_Dupe = 0; + StrCopy(Log.m_sd.call, AnsiString(HisCall->Text).c_str(), MLCALL); //ja7ude 0428 + clipsp(Log.m_sd.call); + + if( IsCall(Log.m_sd.call) ) AddCall(Log.m_sd.call); + + AnsiString His = HisRST->Text; + if( Log.FindSet(&Log.m_Find, Log.m_sd.call) ){ // 見つかった時 + MultProc(); + Log.SetFreq(&Log.m_sd, AnsiString(LogFreq->Text).c_str()); //ja7ude 0428 + SDMMLOG sd; + Log.GetData(&sd, Log.m_Find.pFindTbl[0]); // 一番最新のデータ + if( Log.m_Find.m_FindCmp1Max ){ + switch(Log.m_LogSet.m_CheckBand){ + case 1: + if( Log.FindSameBand() ) m_Dupe = 1; + break; + case 2: + if( Log.FindSameDate() ) m_Dupe = 1; + break; + default: + m_Dupe = 1; + break; + } + } +#if 0 + if( Log.m_Find.m_FindCmp1Max && ((!Log.m_LogSet.m_CheckBand) || Log.FindSameBand()) ){ + m_Dupe = 1; + } + else { + m_Dupe = 0; + } +#endif + if( (!SBQSO->Down || !Log.m_sd.name[0] ) && Log.m_LogSet.m_CopyName ) strcpy(Log.m_sd.name, sd.name); + if( (!SBQSO->Down || !Log.m_sd.qth[0] ) && Log.m_LogSet.m_CopyQTH ) strcpy(Log.m_sd.qth, sd.qth); + if( (!SBQSO->Down || !Log.m_sd.rem[0] ) && Log.m_LogSet.m_CopyREM ) strcpy(Log.m_sd.rem, sd.rem); + if( (!SBQSO->Down || !Log.m_sd.qsl[0] ) && Log.m_LogSet.m_CopyQSL ) strcpy(Log.m_sd.qsl, sd.qsl); + UpdateTextData(); + if( SBQSO->Down ){ + Log.m_Find.Ins(Log.m_CurNo); + UpdateTextData(); + Log.PutData(&Log.m_sd, Log.m_CurNo); + } + } + else { // 見つからなかった時 + if( !SBQSO->Down && Log.m_LogSet.m_CopyName ) Log.m_sd.name[0] = 0; + if( !SBQSO->Down && Log.m_LogSet.m_CopyQTH ) Log.m_sd.qth[0] = 0; + if( !SBQSO->Down && Log.m_LogSet.m_CopyREM ) Log.m_sd.rem[0] = 0; + if( !SBQSO->Down && Log.m_LogSet.m_CopyQSL ) Log.m_sd.qsl[0] = 0; + UpdateTextData(); + } + LPCSTR pCC = ClipCC(Log.m_sd.call); + Log.SetOptStr(0, &Log.m_sd, Cty.GetCountry(pCC)); + Log.SetOptStr(1, &Log.m_sd, Cty.GetCont(pCC)); + if( !His.IsEmpty() ) HisRST->Text = His; + UpdateCallsign(); + UpdateUI(); + if( !SBQSO->Down ){ + LogLink.SetMode("SSTV"); + LogLink.SetFreq(AnsiString(LogFreq->Text).c_str()); //ja7ude 0428 + LogLink.FindCall(Log.m_sd.call); + } + else { + LogLink.Write(&Log.m_sd, 1); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBFindClick(TObject *Sender) +{ + if( !Log.IsOpen() ){ + if( Log.Open(NULL, TRUE) == FALSE ){ + UpdateUI(); + return; + } + } + FindCall(); + TQSODlgBox *pBox = new TQSODlgBox(this); + pBox->ShowFind(&Log.m_Find); + delete pBox; + AutoLogSave(); + TopWindow(this); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBFindMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + AnsiString as; + if( InputMB("MMSSTV", "Callsign", as) == TRUE ){ + jstrupr(as.c_str()); + CLogFind find; + Log.FindSet(&find, as.c_str() ); + TQSODlgBox *pBox = new TQSODlgBox(this); + pBox->ShowFind(&find); + delete pBox; + TopWindow(this); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDataClick(TObject *Sender) +{ + SDMMLOG sd; + + UpdateLogData(); + if( strcmp(Log.m_Find.GetText(), Log.m_sd.call) ){ + CWaitCursor w; + Log.FindSet(&Log.m_Find, Log.m_sd.call); + } + TQSODlgBox *pBox = new TQSODlgBox(this); + MultProc(); + memcpy(&sd, &Log.m_sd, sizeof(sd)); + if( pBox->Execute(&Log.m_Find, &Log.m_sd, Log.m_CurNo) == TRUE ){ + if( memcmp(&sd, &Log.m_sd, sizeof(sd)) ){ + AdjustFocus(); + UpdateTextData(); + HisCallChange(NULL); + LogLink.Write(&Log.m_sd, 0); + } + } + delete pBox; + TopWindow(this); + AdjustFocus(); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDataMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + int n = Log.m_CurNo - 1; + if( n < 0 ){ + SBDataClick(NULL); + return; + } + + TQSODlgBox *pBox = new TQSODlgBox(this); + SDMMLOG sd; + Log.GetData(&sd, n); + CLogFind Find; + + Log.FindSet(&Find, sd.call); + + pBox->Execute(&Find, &sd, n); + delete pBox; + TopWindow(this); + if( !SBQSO->Down && Log.m_CurNo && Log.IsEdit() ){ + Log.SetLastPos(); + UpdateTextData(); + } + AutoLogSave(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBInitClick(TObject *Sender) +{ + AdjustFocus(); + AnsiString as = LogFreq->Text; + if( SBQSO->Down ){ + Log.DeleteLast(); + Log.m_Find.Clear(); + Log.InitCur(); + SBQSO->Down = FALSE; + UpdateTextData(); + } + else { + Log.InitCur(); + Log.m_sd.call[0] = 0; + Log.m_sd.name[0] = 0; + Log.m_sd.qth[0] = 0; + UpdateTextData(); + UpdateCallsign(); + } + if( !as.IsEmpty() ){ + LogFreq->Text = as; + Log.SetFreq(&Log.m_sd, as.c_str()); + } + HisCallChange(NULL); + LogLink.Clear(); + if( HisCall->CanFocus() ) HisCall->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::TempDelay(void) +{ + int delay; + switch(sys.m_TempDelay){ + case 0: + delay = 500; + break; + case 1: + delay = 1000; + break; + case 2: + delay = 2000; + break; + default: + delay = 3000; + break; + } + m_ChangeTemp = delay / Timer->Interval; +} +//--------------------------------------------------------------------------- +// バンドの変更 +void __fastcall TMmsstv::LogFreqChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + Log.SetFreq(&Log.m_sd, AnsiString(LogFreq->Text).c_str()); //ja7ude 0428 + LogLink.SetFreq(AnsiString(LogFreq->Text).c_str()); //ja7ude 0428 +#if 0 + if( !HisCall->Text.IsEmpty() ){ + FindCall(); + } +#endif + if( DrawMain.IsMacro("%b") || DrawMain.IsMacro("%B") ){ + TempDelay(); + SBULog->Enabled = TRUE; + UpdateUI(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisCallKeyPress(TObject *Sender, char &Key) +{ + if( Key == VK_RETURN ){ + Key = 0; + } + else { + Key = char(toupper(Key)); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisNameKeyPress(TObject *Sender, char &Key) +{ + if( Key == VK_RETURN ){ + Key = 0; + if( (Sender == HisQTH) && IsJA(AnsiString(HisCall->Text).c_str()) ){ + TMmcgDlgBox *pBox = new TMmcgDlgBox(this); + + AnsiString qth = HisQTH->Text; + AnsiString opt = Log.m_sd.opt1; + AnsiString hc = HisCall->Text; + if( pBox->Execute(hc, qth, opt) == TRUE ){ //ja7ude 0521 + HisQTH->Text = qth; + StrCopy(Log.m_sd.opt1, opt.c_str(), MLOPT); + } + delete pBox; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBQSOClick(TObject *Sender) +{ + UpdateLogData(); + SYSTEMTIME now; + GetUTC(&now); + int Year = now.wYear % 100; + int Month = now.wMonth; + int Day = now.wDay; + int Hour = now.wHour; + UTCtoJST(Year, Month, Day, Hour); + +// Log.m_sd.cq = m_Running ? 'A' : 'C'; + if( SBQSO->Down ){ // Start QSO + LogLink.SetTime(&now, 0); + Log.m_sd.year = char(Year % 100); + Log.m_sd.date = WORD(Month * 100 + Day); + Log.m_sd.btime = WORD((Hour * 60 + now.wMinute) * 30 + now.wSecond/2); + if( !Log.m_sd.btime ) Log.m_sd.btime++; + CWaitCursor w; + if( Log.FindSet(&Log.m_Find, Log.m_sd.call) ){ + MultProc(); + SDMMLOG sd; + Log.GetData(&sd, Log.m_Find.pFindTbl[0]); // 一番最新のデータ + if( !Log.m_sd.name[0] && Log.m_LogSet.m_CopyName ) strcpy(Log.m_sd.name, sd.name); + if( !Log.m_sd.qth[0] && Log.m_LogSet.m_CopyQTH ) strcpy(Log.m_sd.qth, sd.qth); + if( !Log.m_sd.rem[0] && Log.m_LogSet.m_CopyREM ) strcpy(Log.m_sd.rem, sd.rem); + if( !Log.m_sd.qsl[0] && Log.m_LogSet.m_CopyQSL ) strcpy(Log.m_sd.qsl, sd.qsl); + } + Log.CopyAF(); + if( Log.m_sd.call[0] ){ + LPCSTR pCC = ClipCC(Log.m_sd.call); + Log.SetOptStr(0, &Log.m_sd, Cty.GetCountry(pCC)); + Log.SetOptStr(1, &Log.m_sd, Cty.GetCont(pCC)); + } + UpdateTextData(); + if( Log.PutData(&Log.m_sd, Log.m_CurNo) == FALSE ){ + SBQSO->Down = FALSE; + } + + if( Log.m_Find.m_FindCmp1Max && ((!Log.m_LogSet.m_CheckBand) || Log.FindSameBand()) ){ + m_Dupe = 1; + } + else { + m_Dupe = 0; + } + Log.m_Find.Ins(Log.m_CurNo); + Log.m_CurChg = 0; + LogLink.Write(&Log.m_sd, 1); + if( HisName->CanFocus() ) HisName->SetFocus(); + } + else { // Finish QSO + LogLink.SetTime(&now, 1); + Log.m_sd.etime = WORD((Hour * 60 + now.wMinute) * 30 + now.wSecond/2); + if( !Log.m_sd.etime ) Log.m_sd.etime++; + if( !Log.m_sd.ur[0] ){ + strcpy(Log.m_sd.ur, "595"); + } + if( !Log.m_sd.my[0] ){ + strcpy(Log.m_sd.my, "595"); + } + Log.PutData(&Log.m_sd, Log.m_CurNo); + LogLink.Write(&Log.m_sd, 2); + + memcpy(&Log.m_asd, &Log.m_sd, sizeof(Log.m_asd)); + Log.m_CurNo++; + Log.m_CurChg = 0; + Log.m_Find.Clear(); + Log.InitCur(); + UpdateTextData(); + AutoLogSave(); + if( HisCall->CanFocus() ) HisCall->SetFocus(); + } + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AutoLogSave(void) +{ + if( Log.IsOpen() && Log.m_LogSet.m_AutoSave && Log.IsEdit() ) KLogFlushClick(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KLogFlushClick(TObject *Sender) +{ + Log.Close(); + Log.Open(NULL, TRUE); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KLogOpenClick(TObject *Sender) +{ + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options >> ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Open LogData File"; + OpenDialog->Filter = "MMLOG Data Files(*.mdt)|*.mdt|"; + } + else { + OpenDialog->Title = "ログファイルのオープン"; + OpenDialog->Filter = "MMLOGデータファイル(*.mdt)|*.mdt|"; + } + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "mdt"; + OpenDialog->InitialDir = MMLogDir; + NormalWindow(this); + if( OpenDialogExecute(FALSE) == TRUE ){ + Log.Close(); + Log.DoBackup(); + Log.MakeName(AnsiString(OpenDialog->FileName).c_str()); + Log.Open(NULL, TRUE); + UpdateTextData(); + UpdateTitle(); + } + TopWindow(this); + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVerClick(TObject *Sender) +{ + TVerDspDlg *pBox = new TVerDspDlg(this); + pBox->ShowModal(); + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTempCursor(int X, int Y) +{ + int cr = crDefault; + if( m_DrawTrans ){ + cr = crCross; + } + else if( m_DrawCmd == CM_SELECT ){ + if( DrawMain.pSel != NULL ){ + switch(DrawMain.pSel->HitTest(X, Y)){ + case HT_LT: + case HT_RB: + cr = crSizeNWSE; + break; + case HT_T: + case HT_B: + cr = crSizeNS; + break; + case HT_RT: + case HT_LB: + cr = crSizeNESW; + break; + case HT_R: + case HT_L: + cr = crSizeWE; + break; + case HT_NONE: + break; + default: + cr = crHandPoint; + break; + } + } + } + else if( m_DrawCmd != -1 ) { + cr = crCross; + } + if( PBoxTemp->Cursor != cr ) PBoxTemp->Cursor = (TCursor)cr; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustTempSC(int &X, int &Y) +{ + if( ((DrawMain.m_SX != 320) || (DrawMain.m_SY != 320)) ){ + X = X * DrawMain.m_SX / 320; + Y = Y * DrawMain.m_SY / 256; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTempMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ +// AdjustFocus(); + if( Button == mbRight ){ + m_TempX = X; + m_TempY = Y; + return; + } + + m_TempHold = 1; + + SetDrawSize(DrawMain.m_SX, DrawMain.m_SY); + AdjustTempSC(X, Y); + if( m_DrawTrans ){ + SaveUndo(); + KTAP->Checked = FALSE; + m_DrawTrans = 0; + DrawMain.m_TransX = X; + DrawMain.m_TransY = Y; + UpdateTemp(); + } + else if( m_DrawCmd == CM_SELECT ){ + m_TempTimer = 2; // 0.4[s] + m_TempX = X; + m_TempY = Y; + CDraw *pSel = DrawMain.pSel; + if( (DrawMain.pSel == NULL) || ((DrawMain.m_Hit = DrawMain.pSel->HitTest(X, Y)) == HT_NONE) ){ + DrawMain.pSel = DrawMain.SelectItem(X, Y); + } + if( pSel != DrawMain.pSel ) UpdateTemp(); + if( DrawMain.pSel != NULL ){ + AdjustTempView(1); + DrawMain.pSel->StartMove(PBoxTemp->Canvas, X, Y, DrawMain.m_Hit); + AdjustTempView(0); + PBoxTempCursor(X, Y); + } +#if 0 + else { + PBoxTemp->BeginDrag(TRUE); + } +#endif + } + else if( m_DrawCmd != CM_TLIST ){ + pDraw = DrawMain.MakeItem(m_DrawCmd); + if( pDraw != NULL ){ + AdjustTempView(1); + pDraw->Start(PBoxTemp->Canvas, X, Y); + AdjustTempView(0); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTempMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + AdjustTempSC(X, Y); + + TShiftState sc1, sc2; + sc1 << ssLeft; + sc2 << ssLeft; + sc1 *= Shift; + if( sc1 == sc2 ){ // Left button + AdjustTempView(1); + if( pDraw != NULL ){ // 新規作成中 + pDraw->Making(X, Y); + } + else if( DrawMain.pSel != NULL ){ // 移動/サイズ変更中 + if( !m_TempTimer || (ABS(X-m_TempX)+ABS(Y-m_TempY)) > 5 ){ + m_TempTimer =0; + DrawMain.pSel->Moving(X, Y); + } + } + else if( !PBoxTemp->Dragging() ){ // ドラッグ + //PBoxTemp->BeginDrag(TRUE); + PBoxTemp->BeginDrag(true,0); + } + AdjustTempView(0); + } + else { + PBoxTempCursor(X, Y); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTempMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ) return; + + m_TempHold = 0; + AdjustTempSC(X, Y); + if( pDraw != NULL ){ // アイテム作成中 + if( pDraw->Finish(X, Y) ){ + TMemoryStream *ps = SaveUndo(NULL); + DrawMain.AddItem(pDraw); + DrawMain.pSel = pDraw; + m_DrawCmd = CM_SELECT; + SBDSel->Down = TRUE; + if( (DrawMain.pSel->m_Command == CM_PIC) || (DrawMain.pSel->m_Command == CM_TITLE) ){ + KTBClick(NULL); + } + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateUndo(ps); + } + else { + delete pDraw; + } + pDraw = NULL; + UpdateTemp(); + } + else if( m_DrawCmd == CM_TLIST ){ + TListTextDlg *pBox = new TListTextDlg(this); + pDraw = pBox->Execute(&DrawText, 0); + delete pBox; + if( pDraw != NULL ){ + SaveUndo(); + DrawMain.pSel = DrawMain.AddItemCopy(pDraw); + pDraw = DrawMain.pSel; + int xw = pDraw->m_X2 - pDraw->m_X1; + int yw = pDraw->m_Y2 - pDraw->m_Y1; + pDraw->m_X1 = X; + pDraw->m_Y1 = Y; + pDraw->m_X2 = X + xw; + pDraw->m_Y2 = Y + yw; +// TempGrid.Align(pDraw); + pDraw->UpdateText(); + pDraw = NULL; + m_DrawCmd = CM_SELECT; + SBDSel->Down = TRUE; + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + } + } + else if( DrawMain.pSel != NULL ){ // 移動/サイズ変更中 + if( DrawMain.pSel->IsMove() && !m_TempTimer ){ + SaveUndo(); + DrawMain.pSel->Move(X, Y); +// TempGrid.Align(DrawMain.pSel); + if( (DrawMain.pSel->m_Command == CM_PIC) && (DrawMain.m_Hit != HT_I) ){ +// DrawMain.pSel->UpdatePic(pBitmapHistF); + TShiftState sc1, sc2; + sc1 << ssShift; + sc2 << ssShift; + sc1 *= Shift; + if( sc1 == sc2 ){ // +Shift key + ((CDrawPic *)DrawMain.pSel)->KeepAspect(); + } + } + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + } + } + UpdateUITemp(); + PBoxTempCursor(X, Y); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DeleteUndo(void) +{ + if( pUndo != NULL ){ + delete pUndo; + pUndo = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateUndo(TMemoryStream *ps) +{ + if( pUndo != ps ){ + if( pUndo != NULL ) delete pUndo; + pUndo = ps; + } +} +//--------------------------------------------------------------------------- +TMemoryStream *__fastcall TMmsstv::SaveUndo(TMemoryStream *ps) +{ + if( ps == NULL ){ + ps = new TMemoryStream; + } + ps->Seek(0, soFromBeginning); + DrawMain.SaveToStream(ps); + return ps; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SaveUndo(void) +{ + pUndo = SaveUndo(pUndo); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTempPaint(TObject *Sender) +{ + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDSelClick(TObject *Sender) +{ + m_DrawCmd = SBDSel->Down ? CM_SELECT : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDlineClick(TObject *Sender) +{ + m_DrawCmd = SBDline->Down ? CM_LINE : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDBoxClick(TObject *Sender) +{ + m_DrawCmd = SBDBox->Down ? CM_BOX : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDBoxSClick(TObject *Sender) +{ + m_DrawCmd = SBDBoxS->Down ? CM_BOXS : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDTextClick(TObject *Sender) +{ + m_DrawCmd = SBDText->Down ? CM_TEXT : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDPicClick(TObject *Sender) +{ + m_DrawCmd = SBDPic->Down ? CM_PIC : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDHeadClick(TObject *Sender) +{ + m_DrawCmd = SBDHead->Down ? CM_TITLE : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDListClick(TObject *Sender) +{ + m_DrawCmd = SBDList->Down ? CM_TLIST : -1; + DrawMain.pSel = NULL; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDDelClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + SaveUndo(); + if( pPaste != NULL ){ + delete pPaste; + } + pPaste = DrawMain.pSel; + DrawMain.ReleaseItem(DrawMain.pSel); + DrawMain.pSel = DrawMain.GetLastItem(); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDPasteClick(TObject *Sender) +{ + if( pPaste != NULL ){ + SaveUndo(); + DrawMain.pSel = DrawMain.AddItemCopy(pPaste); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTFXClick(TObject *Sender) +{ +#if 1 + SaveUndo(); + DrawMain.ConvBitmap(DrawMain.pSel); + UpdateTemp(); +#else + if( (DrawMain.pSel != NULL) && (DrawMain.pSel->m_Command == CM_PIC) ){ + SaveUndo(); + CDrawPic *pI = (CDrawPic *)DrawMain.pSel; + pI->m_Type = 1; + UpdateTemp(); + } +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTDClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + SaveUndo(); + DrawMain.ReleaseItem(DrawMain.pSel); + delete DrawMain.pSel; + DrawMain.pSel = NULL; + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTEClick(TObject *Sender) +{ + if( DrawMain.pSel == NULL ) return; + + DrawText.AddItemCopy(DrawMain.pSel); + CDraw *pItem = DrawText.GetLastItem(); + TListTextDlg *pBox = new TListTextDlg(this); + if( pBox->Execute(&DrawText, -1) == NULL ){ + DrawText.DeleteItem(pItem); + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTBClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + SaveUndo(); + DrawMain.BackItem(DrawMain.pSel); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTFClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + SaveUndo(); + DrawMain.FrontItem(DrawMain.pSel); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTTDClick(TObject *Sender) +{ + InvMenu(KTTD); + UpdateTemp(); +} +//--------------------------------------------------------------------------- +// テンプレート 透過ポイントの指定 +void __fastcall TMmsstv::KTTClick(TObject *Sender) +{ + m_DrawTrans = 1; + UpdateUITemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTTCClick(TObject *Sender) +{ + InitCustomColor(ColorDialog); + AddCustomColor(ColorDialog, DrawMain.m_TransCol); + ColorDialog->Color = DrawMain.m_TransCol; + SetDisPaint(); + if( ColorDialog->Execute() == TRUE ){ + SaveUndo(); + DrawMain.m_TransCol = ColorDialog->Color; +#if 0 + FillBitmap(pBitmapTemp, DrawMain.m_TransCol); + DrawMain.m_TransCol = pBitmapTemp->Canvas->Pixels[0][0]; +#else + DrawMain.m_TransCol = GetNearestColor(DrawMain.m_TransCol); +#endif + DrawMain.UpdateText(); + DrawMain.UpdatePic(pBitmapHistF); + UpdateTemp(); + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTMDClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + InvMenu(KTMD); + DrawMain.UpdateText(); + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTBTClick(TObject *Sender) +{ + InvMenu(KTBT); + UpdateTemp(); +} +//--------------------------------------------------------------------------- +// テンプレート のロード +void __fastcall TMmsstv::KTLClick(TObject *Sender) +{ + if( LoadTemplateMenu(&DrawMain, 0) == TRUE ){ + DrawMain.pSel = NULL; + if( !DrawMain.m_Cnt ){ + DrawMain.m_SX = m_TXW; + DrawMain.m_SY = m_TXH; + } + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +// テンプレート アイテムのロード +void __fastcall TMmsstv::AddTemplate(CDrawGroup *pGroup) +{ + SaveUndo(); + CDraw *pItem = NULL; + while(pGroup->m_Cnt){ + pItem = pGroup->pBase[0]; + DrawMain.AddItem(pItem); + pGroup->ReleaseItem(pItem); + MultProc(); + } + if( pItem != NULL ){ + DrawMain.pSel = pItem; + } + pGroup->FreeItem(); +} +//--------------------------------------------------------------------------- +// テンプレート アイテムのロード +void __fastcall TMmsstv::KTLIClick(TObject *Sender) +{ + if( LoadTemplateMenu(&DrawTemp, 1) == TRUE ){ + AddTemplate(&DrawTemp); + UpdateTemp(); + } + MultProc(); + DrawTemp.FreeItem(); +} +//--------------------------------------------------------------------------- +// テンプレート 全部のセーブ +void __fastcall TMmsstv::KTSAClick(TObject *Sender) +{ + SaveTemplateMenu(&DrawMain, 0); +} +//--------------------------------------------------------------------------- +// テンプレート アイテムのセーブ +void __fastcall TMmsstv::KTSIClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + DrawTemp.m_TransCol = DrawMain.m_TransCol; + DrawTemp.AddItemCopy(DrawMain.pSel); + SaveTemplateMenu(&DrawTemp, 1); + DrawTemp.FreeItem(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTAClick(TObject *Sender) +{ + DrawMain.FreeItem(); + DrawMain.m_SX = m_TXW; + DrawMain.m_SY = m_TXH; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +// テンプレート画面のUI更新処理 +void __fastcall TMmsstv::UpdateUITemp(void) +{ + int cmd = DrawMain.pSel != NULL ? DrawMain.pSel->m_Command : 0; + SBDDel->Enabled = cmd; + SBDPaste->Enabled = pPaste != NULL; + SBDFont->Enabled = (cmd == CM_TEXT) || ((cmd == CM_LIB)&&((((CDrawLib *)DrawMain.pSel)->m_Type & 0x0003)==2) ); + SBDCol->Enabled = cmd; + if( cmd && (cmd != CM_TITLE) ){ + if( ( (cmd == CM_TEXT) && (((CDrawText *)DrawMain.pSel)->m_Shadow != 1)&&(((CDrawText *)DrawMain.pSel)->m_Shadow != 6) )|| + ((cmd == CM_PIC) && (((CDrawPic *)DrawMain.pSel)->m_Type == 2)) + ){ + SBDLineset->Enabled = FALSE; + } + else { + SBDLineset->Enabled = TRUE; + } + } + else { + SBDLineset->Enabled = FALSE; + } + TDragMode dm; + if( ((m_DrawCmd != -1) || m_DrawTrans) ){ + dm = dmManual; + } + else { + dm = dmAutomatic; + } + if( PBoxTemp->DragMode != dm ) PBoxTemp->DragMode = dm; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustTempView(int sw) +{ + if( pBitmapTemp->Width == 320 ) return; + if( sw ){ + ::SetMapMode(PBoxTemp->Canvas->Handle, MM_ANISOTROPIC); + ::SetWindowExtEx(PBoxTemp->Canvas->Handle, pBitmapTemp->Width, pBitmapTemp->Height, NULL); + ::SetViewportExtEx(PBoxTemp->Canvas->Handle, 320, 256, NULL); + } + else { + ::SetMapMode(PBoxTemp->Canvas->Handle, MM_TEXT); + ::SetWindowExtEx(PBoxTemp->Canvas->Handle, 320, 256, NULL); + ::SetViewportExtEx(PBoxTemp->Canvas->Handle, 320, 256, NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateTemp(void) +{ + if( (pBitmapTemp->Width != DrawMain.m_SX)||(pBitmapTemp->Height != DrawMain.m_SY) ){ + pBitmapTemp->Width = DrawMain.m_SX; + pBitmapTemp->Height = DrawMain.m_SY; + } + TRect rc; + rc.Left = 0; + rc.Top = 0; + rc.Right = pBitmapTemp->Width; + rc.Bottom = pBitmapTemp->Height; + pBitmapTemp->Canvas->Brush->Style = bsSolid; + pBitmapTemp->Canvas->Brush->Color = DrawMain.m_TransCol; + pBitmapTemp->Canvas->Pen->Color = DrawMain.m_TransCol; + pBitmapTemp->Canvas->FillRect(rc); + + MultProc(); + if( m_ChangeTemp ){ + DrawMain.UpdateText(); + m_ChangeTemp = 0; + SBULog->Enabled = FALSE; + } + else { + DrawMain.UpdateTimeText(); + } + MultProc(); +// DrawMain.UpdatePic(pBitmapHistF); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + if( m_MainPage == pgTemp ){ + DrawMain.DrawNotSel(pBitmapTemp->Canvas); + if( DrawMain.pSel != NULL ) DrawMain.pSel->DrawSel(pBitmapTemp->Canvas, 0); + } + else { + DrawMain.Draw(pBitmapTemp->Canvas); + } + MultProc(); + if( KTBT->Checked && !SBTX->Down ){ + int sv = m_TxClipType; + if( (m_TxClipType == 4) || (m_TxClipType == 2) ) m_TxClipType = 0; + MakeTxBitmap(0); + m_TxClipType = sv; + DrawBitmap(PBoxTemp, pBitmapTX); + if( DrawMain.pSel != NULL ){ + AdjustTempView(1); + DrawMain.pSel->DrawSel(PBoxTemp->Canvas, KTBT->Checked); + AdjustTempView(0); + } + } + else { + DrawBitmap(PBoxTemp, pBitmapTemp); +// PBoxTemp->Canvas->Draw(0, 0, pBitmapTemp); + } + + MultProc(); + rc.Right = PBoxTemp->Width; + rc.Bottom = PBoxTemp->Height; + PBoxTemp->Canvas->Brush->Color = clGreen; + PBoxTemp->Canvas->FrameRect(rc); + if( KTTD->Checked ){ + AdjustTempView(1); + DrawMain.DrawTrans(PBoxTemp->Canvas); + AdjustTempView(0); + } +#if 0 + if( m_MainPage == pgTemp ){ + TempGrid.Draw(PBoxTemp->Canvas, DrawMain.m_SX, DrawMain.m_SY); + } +#endif + if( sys.m_ShowSizeTemp ){ + TColor col = (DrawMain.m_SX != pBitmapTXM->Width) ? clRed : clGreen; + ShowSize(PBoxTemp, DrawMain.m_SX, DrawMain.m_SY, 12, col); + } + UpdateUITemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBULogClick(TObject *Sender) +{ + if( m_ReqHistF ) AdjustHistF(); + UpdatePic(1); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdatePic(void) +{ + UpdatePic(0); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdatePic(int sw) +{ + if( m_MainPage == pgHist ){ + PBoxHist->Invalidate(); + } + UpdateTemp(); + MakeTxBitmap(sw); + PBoxTXPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTempDblClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + TMemoryStream *sp = SaveUndo(NULL); + if( DrawMain.pSel->Edit() == TRUE ){ + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + UpdateUndo(sp); + } + else { + delete sp; + } + } + if( PBoxTemp->Dragging() ) PBoxTemp->EndDrag(FALSE); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDFontClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + if( DrawMain.pSel->m_Command == CM_TEXT ){ + CDrawText *pText = (CDrawText *)(DrawMain.pSel); + FontDialog->Font->Assign(pText->pFont); + FontDialog->Font->Color = pText->m_Col1; + SetDisPaint(); + TMemoryStream *sp = SaveUndo(NULL); + if( FontDialog->Execute() == TRUE ){ + pText->m_Col1 = FontDialog->Font->Color; + pText->UpdateFont(FontDialog->Font); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + UpdateUndo(sp); + } + else { + delete sp; + } + ResDisPaint(); + } + else if( DrawMain.pSel->m_Command == CM_LIB ){ + CDrawLib *pLib = (CDrawLib *)DrawMain.pSel; + TMemoryStream *sp = SaveUndo(NULL); + if( pLib->Font() ){ + UpdateTemp(); + UpdateUndo(sp); + } + else { + delete sp; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDLinesetClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + TMemoryStream *sp = SaveUndo(NULL); + if( DrawMain.pSel->CDraw::Edit() == TRUE ){ + if( DrawMain.pSel->m_Command == CM_TEXT ){ + DrawMain.pSel->UpdateText(); + } + else if( DrawMain.pSel->m_Command == CM_PIC ){ + CDrawPic *pPic = (CDrawPic *)DrawMain.pSel; + if( pPic->m_Shape != 5 ){ + sys.m_PicLineStyle = pPic->m_LineStyle; + sys.m_PicLineColor = pPic->m_LineColor; + } + } + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + UpdateUndo(sp); + } + else { + delete sp; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDColClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + TMemoryStream *sp = SaveUndo(NULL); + if( DrawMain.pSel->Color() == TRUE ){ + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + UpdateUndo(sp); + } + else { + delete sp; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTXDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept) +{ + Accept = FALSE; + if( Source == PBoxS ){ + if( SBTX->Down ) return; + if( (m_MainPage != pgTemp ) && TabS->TabIndex ){ + AdjustPage(pgTemp); + } + else if( (m_MainPage != pgTX) && !TabS->TabIndex ){ + AdjustPage(pgTX); + } + Accept = TRUE; + } + else if( (pHistView != NULL) && (pHistView->IsPBox(Source) >= 0) ){ + AdjustPage(pgTemp); + Accept = TRUE; + } + else { + if( SBTX->Down ) return; + for( int i = 0; i < 8; i++ ){ + TFileViewDlg *fp = pFileView[i]; + if( (fp != NULL) && (fp->IsPBox(Source) >= 0) ){ + AdjustPage(fp->pCurPage->m_Type ? pgTemp : -1); + Accept = TRUE; + break; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::GetTempHistSize(int &x, int &y) +{ + switch(sys.m_HDDSize){ + case 0: // 1/16 + x += (80-1); + y += (64-1); + break; + case 1: // 1/12 + x += (92-1); + y += (74-1); + break; + case 2: // 1/9 + x += (107-1); + y += (85-1); + break; + case 3: // 1/6 + x += (131-1); + y += (105-1); + break; + case 4: // 1/4 + x += (160-1); + y += (128-1); + break; + default: // 1/3 + x += (185-1); + y += (148-1); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTXDragDrop(TObject *Sender, TObject *Source, + int X, int Y) +{ + CWaitCursor w; + + if( Source == PBoxS ){ + if( m_DragNo >= 0 ){ + if( CBSTemp->Checked || TabS->TabIndex ){ + SaveUndo(); + LoadStockTemp(&DrawMain, m_DragDataNo, NULL); + if( !KSIS->Checked || !DrawMain.m_Cnt ){ + if( !sys.m_Repeater || !pDem->m_Repeater){ + DrawMain.m_SX = m_TXW; + DrawMain.m_SY = m_TXH; + } + } + } + if( !TabS->TabIndex ){ + Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + if( KSIS->Checked ){ + StretchCopyBitmapHW(pBitmapTXM, pBitmap); + } + else { + FillBitmap(pBitmapTXM, sys.m_PicClipColor); + pBitmapTXM->Canvas->Draw(0, 0, pBitmap); + } + delete pBitmap; + } + UpdatePic(); + } + } + else if( (pHistView != NULL) && (pHistView->IsPBox(Source) >= 0) ){ + CDrawPic *pDraw = (CDrawPic *)DrawMain.MakeItem(CM_PIC); + if( pDraw != NULL ){ + AdjustTempSC(X, Y); + AdjustTempView(1); + pDraw->Start(PBoxTemp->Canvas, X, Y); + GetTempHistSize(X, Y); + pDraw->Making(X, Y); + if( pDraw->FinishR(X, Y) ){ +#if 0 + SaveUndo(); + DrawMain.AddItem(pDraw); + DrawMain.pSel = pDraw; + m_DrawCmd = CM_SELECT; + SBDSel->Down = TRUE; + KTBClick(NULL); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); +#else + AddItem(pDraw, 0); +#endif + } + else { + delete pDraw; + } + AdjustTempView(0); + UpdateTemp(); + } + } + else { + for( int i = 0; i < 8; i++ ){ + TFileViewDlg *fp = pFileView[i]; + if( (fp != NULL) && (fp->IsPBox(Source) >= 0) ){ + if( fp->pCurPage->m_Type ){ + AnsiString as; + fp->GetCurFileName(as); + switch(fp->pCurPage->m_Type){ + case 2: + LoadTemplate(&DrawTemp, as.c_str(), NULL); + AddTemplate(&DrawTemp); + break; + case 3: + DropLib(X, Y, as.c_str()); + break; + case 4: + DropOle(X, Y, as.c_str(), 1); + break; + default: + SaveUndo(); + LoadTemplate(&DrawMain, as.c_str(), NULL); + break; + } + UpdateTemp(); + } + else if( m_MainPage == pgTX ){ + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + if( pFileView[i]->CopyBitmap(pBitmapTXM) == TRUE ){ + UpdatePic(); + } + } + else { + int w, h; + pFileView[i]->GetSize(w, h); + Graphics::TBitmap *pBitmap = CreateBitmap(w, h, -1); + if( pFileView[i]->CopyBitmap(pBitmap) == TRUE ){ + DropPic(X, Y, pBitmap, pFileView[i]->GetType()); + } + delete pBitmap; + } + break; + } + } + } + AdjustFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxSDragDrop(TObject *Sender, + TObject *Source, int X, int Y) +{ + if( (Source == PBoxTemp) || (Source == PBoxTX) ){ + int n = GetStockNo(X, Y); + int nn = n + UDStock->Position * m_SMax; + if( (n >= 0) && (nn < STOCKMAX) ){ + int Off = m_StockOff; + if( !TabS->TabIndex ) Off = 0; + if( CBSTemp->Checked || (Source == PBoxTemp) ){ + SaveStockTemp(&DrawMain, nn + Off); + } + if( !TabS->TabIndex ){ + SaveBitmapS(pBitmapTXM, n); + } + UpdateTabS(); + } + } + else { + for( int i = 0; i < 8; i++ ){ + TFileViewDlg *fp = pFileView[i]; + if( (fp != NULL) && (fp->IsPBox(Source) >= 0) ){ + if( !TabS->TabIndex ){ + int n = GetStockNo(X, Y); + int nn = n + UDStock->Position * m_SMax; + if( (n >= 0) && (nn < STOCKMAX) ){ + Graphics::TBitmap *pBitmap = CreateBitmap(m_PSSize[n] & 0x0000ffff, m_PSSize[n]>>16, -1); + if( fp->CopyBitmap(pBitmap) == TRUE ){ + SaveBitmapS(pBitmap, n); + UpdateTabS(); + } + delete pBitmap; + } + } + break; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxSDragOver(TObject *Sender, + TObject *Source, int X, int Y, TDragState State, bool &Accept) +{ + Accept = FALSE; + if( GetStockNo(X, Y) >= 0 ){ + if( Source == PBoxTemp ){ + if( !TabS->TabIndex ){ + TabS->TabIndex = 1; + TabSChange(NULL); + PBoxS->Invalidate(); + } + Accept = TRUE; + } + else if( Source == PBoxTX ){ + if( TabS->TabIndex ){ + TabS->TabIndex = 0; + TabSChange(NULL); + PBoxS->Invalidate(); + } + Accept = TRUE; + } + else { + for( int i = 0; i < 8; i++ ){ + TFileViewDlg *fp = pFileView[i]; + if( (fp != NULL) && (fp->IsPBox(Source) >= 0) && !fp->pCurPage->m_Type ){ + if( TabS->TabIndex ){ + TabS->TabIndex = 0; + TabSChange(NULL); + PBoxS->Invalidate(); + } + Accept = TRUE; + break; + } + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxSMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_DragNo = GetStockNo(X, Y); + m_DragDataNo = UDStock->Position * m_SMax + m_DragNo; + if( m_DragDataNo >= STOCKMAX ){ + m_DragNo = -1; + m_DragDataNo = 0; + } + else if( TabS->TabIndex ){ + m_DragDataNo += m_StockOff; + } + if( Button == mbLeft ){ + m_TabSXX = X; + m_TabSYY = Y; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxSMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y) +{ + TShiftState sc1, sc2; + sc1 << ssLeft; + sc2 << ssLeft; + sc1 *= Shift; + if( sc1 == sc2 ){ // Left button + if( (ABS(m_TabSXX-X) + ABS(m_TabSYY-Y)) >= 10 ){ + if( m_DragNo >= 0 ) PBoxS->BeginDrag(TRUE,0); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxSDblClick(TObject *Sender) +{ + if( m_DragNo >= 0 ){ + if( TabS->TabIndex || !SBTX->Down ){ + AdjustPage( TabS->TabIndex ? pgTemp : pgTX); + PBoxTXDragDrop(Sender, PBoxS, 0, 0); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::GetStockXY(int &X1, int &Y1, int &X2, int &Y2, int n) +{ + int mm = m_SMax / 6; + if( !mm ) mm++; + int xw = (PBoxS->Width / 6) - 4; + int yw = (PBoxS->Height / mm) - 4; + + X1 = (((n % 6) * PBoxS->Width) / 6) + 2; + X2 = X1 + xw; + Y1 = (((n / 6) * PBoxS->Height) / mm) + 2; + Y2 = Y1 + yw; +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::GetStockNo(int X, int Y) +{ + int i, x1, y1, x2, y2; + for( i = 0; i < m_SMax; i++ ){ + GetStockXY(x1, y1, x2, y2, i); + if( (X > x1)&&(X < x2)&&(Y > y1)&&(Y < y2) ) return i; + } + return -1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateTabS(void) +{ + if( (pStockView != NULL) && !pStockView->Visible ) return; + + CWaitCursor wait; + + m_DisEvent++; + + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + MultProc(); + + int ktmd = KTMD->Checked; + KTMD->Checked = TRUE; + + TRect rc; + TRect sc; + int x1, x2, y1, y2; + int n; + if( TabS->TabIndex ){ // テンプレート + m_StockPage = TabS->TabIndex - 1; + m_StockOff = m_StockPage * STOCKMAX; + n = m_TSPage[m_StockPage] * m_SMax; + Graphics::TBitmap *pBmpStock = pBitmapST[m_StockPage]; + if( pBmpStock == NULL ){ + pBmpStock = new Graphics::TBitmap(); + AdjustBitmapFormat(pBmpStock); + pBitmapST[m_StockPage] = pBmpStock; + } + pBmpStock->Width = PBoxS->Width; + pBmpStock->Height = PBoxS->Height; + FillBitmap(pBmpStock, clWhite); + pBmpStock->Canvas->Brush->Color = clBlack; + pBmpStock->Canvas->Pen->Color = clBlack; + MultProc(); + for( int i = 0; i < m_SMax; i++, n++ ){ + if( n >= STOCKMAX ) break; + + GetStockXY(x1, y1, x2, y2, i); + rc.Top = y1; rc.Left = x1; rc.Right = x2; rc.Bottom = y2; + LoadStockTemp(&DrawTemp, n + m_StockOff, pBitmap->Canvas); + if( DrawTemp.m_Cnt ){ + pBitmap->Width = DrawTemp.m_SX; + pBitmap->Height = DrawTemp.m_SY; + FillBitmap(pBitmap, DrawTemp.m_TransCol); +// DrawTemp.UpdatePic(pBitmapHistF); + MultProc(); + if( CBSDraft->Checked ){ + DrawTemp.DrawFast(pBitmap->Canvas); + } + else { + DrawTemp.Draw(pBitmap->Canvas); + } + MultProc(); + pBmpStock->Canvas->StretchDraw(rc, (TGraphic*)pBitmap); + if( sys.m_ShowSizeStock ){ + TColor col = (DrawTemp.m_SX != pBitmapTXM->Width) ? clRed : clGreen; + ShowSize(pBmpStock, x1, y2, DrawTemp.m_SX, DrawTemp.m_SY, 11, col); + pBmpStock->Canvas->Brush->Color = clBlack; + } + if( sys.m_Repeater ){ + ShowNo(pBmpStock, x1, y1, n+m_StockOff+1, 11, clYellow); + pBmpStock->Canvas->Brush->Color = clBlack; + } + } + pBmpStock->Canvas->FrameRect(rc); + MultProc(); + } + m_ATSPage[m_StockPage] = m_TSPage[m_StockPage]; + } + else { + n = m_PSPage * m_SMax; + if( pBitmapSS == NULL ){ + pBitmapSS = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmapSS); + } + pBitmapSS->Width = PBoxS->Width; + pBitmapSS->Height = PBoxS->Height; + FillBitmap(pBitmapSS, clWhite); + pBitmapSS->Canvas->Brush->Color = clBlack; + pBitmapSS->Canvas->Pen->Color = clBlack; + MultProc(); + + pBitmap->Transparent = TRUE; + pBitmap->TransparentMode = tmFixed; + + Graphics::TBitmap *pBitmapSV = CreateBitmap(PBoxTX->Width, PBoxTX->Height, -1); + MultProc(); + + for( int i = 0; i < m_SMax; i++, n++ ){ + if( n >= STOCKMAX ) break; + Graphics::TBitmap *pBitmapPic = LoadBitmapS(i); + m_PSSize[i] = pBitmapPic->Width + (pBitmapPic->Height << 16); + + GetStockXY(x1, y1, x2, y2, i); + rc.Top = y1; rc.Left = x1; rc.Right = x2; rc.Bottom = y2; + + if( CBSTemp->Checked ){ + LoadStockTemp(&DrawTemp, n, pBitmap->Canvas); + } + if( !pBitmapPic->Modified ){ + if( CBSTemp->Checked && DrawTemp.m_Cnt ){ + FillBitmap(pBitmapSV, clWhite); + } + else { + pBitmapSS->Canvas->FrameRect(rc); + delete pBitmapPic; + continue; + } + } + else if( pBitmapPic->Width != pBitmapSV->Width ){ + StretchCopy(pBitmapSV, pBitmapPic, HALFTONE); + } + else { + pBitmapSV->Canvas->Draw(0, 0, pBitmapPic); + } + if( CBSTemp->Checked && DrawTemp.m_Cnt ){ + MultProc(); + pBitmap->Width = DrawTemp.m_SX; + pBitmap->Height = DrawTemp.m_SY; + FillBitmap(pBitmap, DrawTemp.m_TransCol); + DrawTemp.UpdatePic(pBitmapHistF); + MultProc(); + if( CBSDraft->Checked ){ + DrawTemp.DrawFast(pBitmap->Canvas); + } + else { + DrawTemp.Draw(pBitmap->Canvas); + } + MultProc(); + pBitmap->TransparentColor = pBitmap->Canvas->Pixels[DrawTemp.m_TransX][DrawTemp.m_TransY]; + if( pBitmapSV->Width != pBitmap->Width ){ + StretchCopy(pBitmapSV, pBitmap, HALFTONE); + } + else { + pBitmapSV->Canvas->Draw(0, 0, pBitmap); + } + } + pBitmapSS->Canvas->StretchDraw(rc, pBitmapSV); + pBitmapSS->Canvas->FrameRect(rc); + if( sys.m_ShowSizeStock && pBitmapPic->Modified ){ + TColor col = (pBitmapPic->Width != pBitmapTXM->Width) ? clRed : clGreen; + ShowSize(pBitmapSS, x1, y2, pBitmapPic->Width, pBitmapPic->Height, 11, col); + pBitmapSS->Canvas->Brush->Color = clBlack; + } + if( sys.m_Repeater ){ + ShowNo(pBitmapSS, x1, y1, n+1, 11, clYellow); + pBitmapSS->Canvas->Brush->Color = clBlack; + } + MultProc(); + delete pBitmapPic; + } + delete pBitmapSV; + MultProc(); + m_APSPage = m_PSPage; + } + DrawTemp.FreeItem(); + delete pBitmap; + KTMD->Checked = ktmd; + m_DisEvent--; + PBoxSPaint(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxSPaint(TObject *Sender) +{ + if( TabS->TabIndex ){ // テンプレート + m_StockPage = TabS->TabIndex - 1; + m_StockOff = m_StockPage * STOCKMAX; + if( pBitmapST[m_StockPage] == NULL ){ + UpdateTabS(); + } + else { + PBoxS->Canvas->Draw(0, 0, pBitmapST[m_StockPage]); + } + } + else { // ストック画像 + if( pBitmapSS == NULL ){ + UpdateTabS(); + } + else { + PBoxS->Canvas->Draw(0, 0, pBitmapSS); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSTPClick(TObject *Sender) +{ + CWaitCursor wait; + int x, y, n, l; + + const TColor bc[]={ + clBlack, clWhite, + clGreen, clBlue, + clBlue, clRed, + clRed, clYellow, + clYellow, clLime, + clLime, clPurple, + clPurple, clOlive, + clOlive, clBlack, + }; + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + TColor col; + int XW = pBitmapTXM->Width / 16; + int YW = pBitmapTXM->Height / 8; + for( n = l = 0; n < 16; n += 2, l += YW ){ + for( y = l; y < (l + YW); y++ ){ + for( x = 0; x < (pBitmapTXM->Width / 2); x++ ){ + col = GetCol(bc[n], bc[n+1], x, (pBitmapTXM->Width / 2)); + pBitmapTXM->Canvas->Pixels[x][y] = col; + } + } + } + l = pBitmapTXM->Width / 2; + for( n = 0; n < 16; n += 2, l += XW ){ + for( x = l; x < (l + XW); x++ ){ + for( y = 0; y < pBitmapTXM->Height; y++ ){ + col = GetCol(bc[n], bc[n+1], y, pBitmapTXM->Height); + pBitmapTXM->Canvas->Pixels[x][y] = col; + } + } + } + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSAIClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + SBTXFilClick(NULL); + return; + } + if( m_DragNo < 0 ) return; + if( !TabS->TabIndex ){ // ビットマップ + TPicFilterDlg *pBox = new TPicFilterDlg(this); + Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + if( pBox->Execute(pBitmap) == TRUE ){ + SaveBitmapS(pBitmap, m_DragNo); + UpdateTabS(); + } + delete pBitmap; + delete pBox; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::TabSChange(TObject *Sender) +{ + if( m_DisEvent ) return; + if( (pStockView != NULL) && !pStockView->Visible ) return; + + int i; + if( TabS->TabIndex == 0 ){ + if( !CBSTemp->Checked ) UDStock->Position = short(m_PSPage); + if( UDStock->Position != m_TxSPage ){ + CWaitCursor wait; + m_TxSPage = UDStock->Position; + } + ::DragAcceptFiles(PanelS->Handle, TRUE); + CBSTemp->Enabled = TRUE; + CBSDraft->Enabled = CBSTemp->Checked; + int f = 0; + for( i = 0; i < 8; i++ ){ + if( (pFileView[i] != NULL) && pFileView[i]->m_Overlap ){ + pFileView[i]->Visible = TRUE; + pFileView[i]->m_Suspend = 0; + f++; + MultProc(); + } + } + if( f && (pRxView != NULL) && (pRxView->Handle != ::GetForegroundWindow()) ){ + ::SetForegroundWindow(pRxView->Handle); + } + if( m_PSPage != m_APSPage ) UpdateTabS(); + } + else { + m_StockPage = TabS->TabIndex - 1; + if( !CBSTemp->Checked ) UDStock->Position = short(m_TSPage[m_StockPage]); + ::DragAcceptFiles(PanelS->Handle, FALSE); + CBSTemp->Enabled = FALSE; + CBSDraft->Enabled = TRUE; + for( i = 0; i < 8; i++ ){ + if( (pFileView[i] != NULL) && pFileView[i]->m_Overlap ){ + pFileView[i]->Visible = FALSE; + pFileView[i]->m_Suspend = 1; + MultProc(); + } + } + if( m_TSPage[m_StockPage] != m_ATSPage[m_StockPage] ) UpdateTabS(); + } + char bf[64]; + sprintf(bf, "%u/%u", UDStock->Position + 1, m_DragPMax); + LS->Caption = bf; + PBoxS->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UDStockClick(TObject *Sender, TUDBtnType Button) +{ + if( TabS->TabIndex ){ + m_TSPage[m_StockPage] = UDStock->Position; + if( CBSTemp->Checked && (TabS->TabIndex == 1) ) m_PSPage = m_TSPage[0]; + } + else { + m_PSPage = UDStock->Position; + if( CBSTemp->Checked ) m_TSPage[0] = m_PSPage; + } + TabSChange(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CopyBitmap(Graphics::TBitmap *pBitmap) +{ + //int DataHandle; //ja7ude 0521 + NativeUInt DataHandle; + HPALETTE APalette; + //unsigned short MyFormat; //ja7ude 0521 + System::Word MyFormat; //ja7ude 0521 + pBitmap->SaveToClipboardFormat(MyFormat, DataHandle, APalette); + Clipboard()->SetAsHandle(MyFormat,DataHandle); +// SBPaste->Enabled = TRUE; +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::PasteBitmap(Graphics::TBitmap *pBitmap, int rs) +{ + int r = FALSE; + TClipboard *pCB = Clipboard(); + if (pCB->HasFormat(CF_BITMAP)){ + TPicRectDlg *pBox = new TPicRectDlg(this); + try + { + pBox->pBitmap->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); + if( rs == 2 ){ + r = pBox->Execute(pBitmap); + } + else if( rs ){ + ::CopyBitmap(pBitmap, pBox->pBitmap); + r = TRUE; + } + else if( pBox->Copy(pBitmap) == TRUE ){ + r = TRUE; + } + } + catch (...) + { + ErrorMB( "Clipboard error." ); + } + delete pBox; + } + return r; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SaveBitmapS(Graphics::TBitmap *pBitmap, int n) +{ + SaveBitmapSN(pBitmap, m_PSPage * m_SMax + n + 1); +} +//--------------------------------------------------------------------------- +Graphics::TBitmap* __fastcall TMmsstv::LoadBitmapS(int n) +{ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + LoadBitmapSN(pBitmap, m_PSPage * m_SMax + n + 1); + return pBitmap; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SaveBitmapSN(Graphics::TBitmap *pBitmap, int n) +{ + CWaitCursor wait; + char bf[256]; + sprintf(bf, sys.m_UseJPEG ? "%sTxStock%u.jpg":"%sTxStock%u.bmp", StockDir, n); + if( sys.m_UseJPEG ){ + SaveJPEG(pBitmap, bf); + } + else { + SaveBitmap(pBitmap, bf); + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LoadBitmapSN(Graphics::TBitmap *pBitmap, int n) +{ + CWaitCursor wait; + MultProc(); + char bf[256]; + sprintf(bf, sys.m_UseJPEG ? "%sTxStock%u.jpg" : "%sTxStock%u.bmp", StockDir, n); + if( IsFile(bf) ){ + MultProc(); + if( sys.m_UseJPEG ){ + LoadJPEG(pBitmap, bf); + } + else { + LoadBitmap(pBitmap, bf); + } + pBitmap->Modified = TRUE; + } + else { + pBitmap->Width = 320; + pBitmap->Height = 256; + FillBitmap(pBitmap, clWhite); + pBitmap->Modified = FALSE; + } +} +//--------------------------------------------------------------------------- +// ファイルからロード +int __fastcall TMmsstv::LoadBitmapMenu(Graphics::TBitmap *pBitmap, int rs) +{ + int r = FALSE; + + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options << ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load picture from file"; + } + else { + OpenDialog->Title = "画像のロード"; + } + OpenDialog->Filter = GetPicFilter(); + OpenDialog->FileName = ""; + OpenDialog->DefaultExt = "jpg"; + OpenDialog->InitialDir = BitmapDir; + SetDisPaint(); + NormalWindow(this); + if( OpenDialogExecute(TRUE) == TRUE ){ + SetDirName(BitmapDir, AnsiString(OpenDialog->FileName).c_str()); + TPicRectDlg *pBox = new TPicRectDlg(this); + if( LoadImage(pBox->pBitmap, AnsiString(OpenDialog->FileName).c_str()) == TRUE ){ + if( rs ){ + ::CopyBitmap(pBitmap, pBox->pBitmap); + r = TRUE; + } + else if( pBox->Execute(pBitmap) == TRUE ){ + r = TRUE; + } + } + delete pBox; + } + ResDisPaint(); + TopWindow(this); + return r; +} + +int __fastcall TMmsstv::SaveBitmapMenu(Graphics::TBitmap *pBitmap, LPCSTR pName, LPCSTR pFolder) +{ + int r = FALSE; + + if( MsgEng ){ + SaveDialog->Title = "Save picture"; + } + else { + SaveDialog->Title = "画像をセーブ"; + } + SaveDialog->Filter = "JPEG files(*.jpg)|*.jpg|Bitmap files(*.bmp)|*.bmp|"; + SaveDialog->FileName = pName != NULL ? pName : "Picture"; + SaveDialog->DefaultExt = "jpg"; + SaveDialog->InitialDir = pFolder != NULL ? pFolder : SBitmapDir; + SetDisPaint(); + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + if( pFolder == NULL ){ + SetDirName(SBitmapDir, AnsiString(SaveDialog->FileName).c_str()); + } + if( SaveImage(pBitmap, AnsiString(SaveDialog->FileName).c_str()) == TRUE ){ + r = TRUE; + } + } + TopWindow(this); + ResDisPaint(); + return r; +} +//--------------------------------------------------------------------------- +// ファイルからロード +int __fastcall TMmsstv::LoadTemplateMenu(CDrawGroup *pItem, int isw) +{ + MultProc(); + int r = FALSE; + OpenDialog->Options >> ofCreatePrompt; + OpenDialog->Options << ofFileMustExist; + if( MsgEng ){ + OpenDialog->Title = "Load template from file"; + } + else { + OpenDialog->Title = "テンプレートファイルのロード"; + } + if( isw ){ + char bf[256]; + sprintf(bf, "%s|%s", GetTempIFilter(), GetTempMFilter()); + OpenDialog->Filter = bf; + OpenDialog->DefaultExt = "mti"; + } + else { + OpenDialog->Filter = GetTempMFilter(); + OpenDialog->DefaultExt = "mtm"; + } + OpenDialog->FileName = ""; + OpenDialog->InitialDir = TemplateDir; + SetDisPaint(); + MultProc(); + NormalWindow(this); + if( OpenDialogExecute(TRUE) == TRUE ){ + MultProc(); + SetDirName(TemplateDir, AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0521 + SaveUndo(); + r = LoadTemplate(pItem, AnsiString(OpenDialog->FileName).c_str(), NULL); //ja7ude 0521 + } + ResDisPaint(); + TopWindow(this); + MultProc(); + return r; +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::SaveTemplateMenu(CDrawGroup *pItem, int isw) +{ + return SaveTemplateMenu(pItem, NULL, NULL, isw); +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::SaveTemplateMenu(CDrawGroup *pItem, LPCSTR pName, LPCSTR pFolder, int isw) +{ + MultProc(); + int r = FALSE; + if( MsgEng ){ + SaveDialog->Title = "Save template"; + } + else { + SaveDialog->Title = "テンプレートをセーブ"; + } + if( isw ){ + SaveDialog->Filter = GetTempIFilter(); + SaveDialog->FileName = pName != NULL ? pName : "Item"; + SaveDialog->DefaultExt = "mti"; + } + else { + SaveDialog->Filter = GetTempFilter(); + SaveDialog->FileName = pName != NULL ? pName : "Template"; + SaveDialog->DefaultExt = "mtm"; + SaveDialog->FilterIndex = 1; + } + SaveDialog->InitialDir = pFolder != NULL ? pFolder : TemplateDir; + SetDisPaint(); + MultProc(); + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + MultProc(); + if( pFolder == NULL ){ + SetDirName(TemplateDir, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0521 + } + r = SaveTemplate(pItem, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0521 + } + TopWindow(this); + ResDisPaint(); + MultProc(); + return r; +} +//--------------------------------------------------------------------------- +// ファイルからロード +void __fastcall TMmsstv::KSLClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + if( LoadBitmapMenu(pBitmapTXM, 0) == TRUE ){ + SBUseTempClick(NULL); + } + return; + } + if( m_DragNo < 0 ) return; + if( TabS->TabIndex ){ // テンプレート + if( LoadTemplateMenu(&DrawTemp, 0) == TRUE ){ + SaveStockTemp(&DrawTemp, m_DragDataNo); + UpdateTabS(); + } + DrawTemp.FreeItem(); + } + else { // ビットマップ + Graphics::TBitmap *pBitmap = CreateBitmap(m_PSSize[m_DragNo] & 0x0000ffff, m_PSSize[m_DragNo]>>16, -1); +// Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + if( LoadBitmapMenu(pBitmap, 0) == TRUE ){ + SaveBitmapS(pBitmap, m_DragNo); + UpdateTabS(); + } + delete pBitmap; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSSClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + Graphics::TBitmap *pBitmap = pBitmapTX; + if( m_TXPH == 240 ){ + pBitmap = CreateBitmap(m_TXW, m_TXPH, pf24bit); + pBitmap->Canvas->Draw(0, 0, pBitmapTX); + } + SaveBitmapMenu(pBitmap, NULL, NULL); + if( pBitmap != pBitmapTX ) delete pBitmap; + return; + } + if( m_DragNo < 0 ) return; + if( TabS->TabIndex ){ // テンプレート + LoadStockTemp(&DrawTemp, m_DragDataNo, NULL); + SaveTemplateMenu(&DrawTemp, 0); + DrawTemp.FreeItem(); + } + else { // ビットマップ + Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + SaveBitmapMenu(pBitmap, NULL, NULL); + delete pBitmap; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSCClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + Graphics::TBitmap *pBitmap = pBitmapTX; + if( m_TXPH == 240 ){ + pBitmap = CreateBitmap(m_TXW, m_TXPH, pf24bit); + pBitmap->Canvas->Draw(0, 0, pBitmapTX); + } + CopyBitmap(pBitmap); + if( pBitmap != pBitmapTX ) delete pBitmap; + return; + } + if( m_DragNo < 0 ) return; + if( !TabS->TabIndex ){ // ビットマップ + Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + CopyBitmap(pBitmap); + delete pBitmap; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSPClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + if( PasteBitmap(pBitmapTXM, 0) == TRUE ){ + SBUseTempClick(NULL); + } + return; + } + if( m_DragNo < 0 ) return; + if( !TabS->TabIndex ){ // ビットマップ + Graphics::TBitmap *pBitmap = CreateBitmap(m_PSSize[m_DragNo] & 0x0000ffff, m_PSSize[m_DragNo]>>16, -1); +// Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + if( PasteBitmap(pBitmap, 0) == TRUE ){ + SaveBitmapS(pBitmap, m_DragNo); + UpdateTabS(); + } + delete pBitmap; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSDClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + FillBitmap(pBitmapTXM, sys.m_PicClipColor); + SBUseTempClick(NULL); + return; + } + if( m_DragNo < 0 ) return; + if( TabS->TabIndex ){ // テンプレート + DeleteStockTemp(m_DragDataNo); + UpdateTabS(); + } + else { // ビットマップ + CWaitCursor wait; + char bf[256]; + sprintf(bf, sys.m_UseJPEG ? "%sTxStock%u.jpg" : "%sTxStock%u.bmp", StockDir, m_DragDataNo + 1); + unlink(bf); + UpdateTabS(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSSZClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ) return; + if( m_DragNo < 0 ) return; + if( !TabS->TabIndex ){ // テンプレート + int w, h; + if( Sender == KSS1 ){ + w = 320; h = 256; + } + else if( Sender == KSS2 ){ + w = 512; h = 400; + } + else if( Sender == KSS3 ){ + w = 640; h = 496; + } + else { + w = 800; h = 616; + } + Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + ReSizeBitmap(pBitmap, w, h); + SaveBitmapS(pBitmap, m_DragNo); + delete pBitmap; + UpdateTabS(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PopupSPopup(TObject *Sender) +{ + MultProc(); + SBPaste->Enabled = ::IsClipboardFormatAvailable(CF_BITMAP); + KSTD->Checked = CBSDraft->Checked; + if( PopupS->PopupComponent == PBoxTX ){ // Tx Window + KSF->Enabled = TRUE; + KSB->Enabled = TRUE; + KSCD->Enabled = FALSE; + KSTP->Enabled = TRUE; + KSAM->Enabled = TRUE; + KSIS->Enabled = TRUE; + KSRR->Enabled = TRUE; + KSSD->Checked = sys.m_ShowSizeTX; + KSTS->Enabled = SBUseTemp->Enabled; + KSTD->Enabled = FALSE; + KSTS->Checked = SBUseTemp->Down; + } + else { + KSF->Enabled = FALSE; + KSB->Enabled = FALSE; + KSCD->Enabled = TRUE; + KSTP->Enabled = FALSE; + KSAM->Enabled = FALSE; + KSIS->Enabled = FALSE; + KSRR->Enabled = FALSE; + KSSD->Checked = sys.m_ShowSizeStock; + KSTS->Enabled = CBSTemp->Enabled; + KSTD->Enabled = CBSDraft->Enabled; + KSTS->Checked = CBSTemp->Checked; + } + MultProc(); + if( PopupS->PopupComponent == PBoxTX ){ // Tx Window + KSC->Enabled = TRUE; + KSP->Enabled = SBPaste->Enabled; + KSFJ->Enabled = FALSE; + KSFB->Enabled = FALSE; + KSAI->Enabled = TRUE; + KSSZ->Enabled = FALSE; + KSMS->Enabled = FALSE; + KSA->Enabled = FALSE; + KSE->Enabled = TRUE; + } + else if( TabS->TabIndex ){ // テンプレート + KSC->Enabled = FALSE; + KSP->Enabled = FALSE; + KSFJ->Enabled = FALSE; + KSFB->Enabled = FALSE; + KSAI->Enabled = FALSE; + KSSZ->Enabled = FALSE; + KSMS->Enabled = FALSE; + KSA->Enabled = TRUE; + KSE->Enabled = FALSE; + } + else { // ビットマップ + KSC->Enabled = TRUE; + KSP->Enabled = SBPaste->Enabled; + KSFJ->Enabled = !sys.m_UseJPEG; + KSFB->Enabled = sys.m_UseJPEG; + KSAI->Enabled = TRUE; + KSMS->Enabled = TRUE; + KSA->Enabled = FALSE; + if( m_DragNo >= 0 ){ + KSSZ->Enabled = TRUE; + switch(m_PSSize[m_DragNo] & 0x0000ffff){ + case 512: + KSS2->Checked = TRUE; + break; + case 640: + KSS3->Checked = TRUE; + break; + case 800: + KSS4->Checked = TRUE; + break; + default: + KSS1->Checked = TRUE; + break; + } + } + else { + KSSZ->Enabled = FALSE; + } + KSE->Enabled = TRUE; + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PopupHPopup(TObject *Sender) +{ + KHD->Enabled = UDHist->Position < RxHist.m_Head.m_Cnt; + KHDA->Enabled = RxHist.m_Head.m_Cnt; + KHFB->Enabled = RxHist.m_UseJPEG; + KHFJ->Enabled = !RxHist.m_UseJPEG; + switch(sys.m_HDDSize){ + case 0: + KHDS1->Checked = TRUE; + break; + case 1: + KHDS2->Checked = TRUE; + break; + case 2: + KHDS3->Checked = TRUE; + break; + case 3: + KHDS4->Checked = TRUE; + break; + case 4: + KHDS5->Checked = TRUE; + break; + default: + KHDS6->Checked = TRUE; + break; + } + KHTB->Checked = sys.m_HistViewTB; + if( PopupH->PopupComponent != PBoxHist ){ + KHDS->Enabled = TRUE; + KHTB->Enabled = TRUE; + KHSD->Enabled = FALSE; + KHVS->Enabled = TRUE; + } + else { + KHDS->Enabled = FALSE; + KHTB->Enabled = FALSE; + KHSD->Enabled = TRUE; + KHVS->Enabled = FALSE; + } + KHSD->Checked = sys.m_ShowSizeHist; + switch(sys.m_HistViewSize){ + case 0: + KHVS1->Checked = TRUE; + break; + case 1: + KHVS2->Checked = TRUE; + break; + case 2: + KHVS3->Checked = TRUE; + break; + default: + KHVS4->Checked = TRUE; + break; + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PopupTPopup(TObject *Sender) +{ + MultProc(); + int cmd = DrawMain.pSel ? DrawMain.pSel->m_Command : 0; + KTU->Enabled = pUndo != NULL ? TRUE : FALSE; + KTC->Enabled = cmd; + KTPA->Enabled = (cmd == CM_PIC); + if( cmd != CM_PIC ){ + KTFX->Caption = MsgEng ? "Convert to image item" : "画像アイテムに変換"; + } + else { + KTFX->Caption = MsgEng ? "Convert to bitmap" : "ビットマップに変換"; + } + KTFX->Enabled = DrawMain.IsConvBitmap(DrawMain.pSel); + KTD->Enabled = SBDDel->Enabled; + KTE->Enabled = (cmd == CM_TEXT)||((cmd == CM_LIB)&&((((CDrawLib *)DrawMain.pSel)->m_Type & 3)==2)); + KTB->Enabled = SBDDel->Enabled; + KTF->Enabled = SBDDel->Enabled; + KTP->Enabled = pPaste != NULL; + KTS->Enabled = DrawMain.m_Cnt ? TRUE : FALSE; + KTSI->Enabled = cmd ? TRUE : FALSE; + KTA->Enabled = KTS->Enabled; + KTBT->Enabled = !SBTX->Down; + KTPI->Enabled = Clipboard()->HasFormat(CF_BITMAP); + switch(DrawMain.m_SX){ + case 512: + KTSZ2->Checked = TRUE; + break; + case 640: + KTSZ3->Checked = TRUE; + break; + case 800: + KTSZ4->Checked = TRUE; + break; + default: + KTSZ1->Checked = TRUE; + break; + } + KTSZT->Enabled = pBitmapTemp->Width != pBitmapTXM->Width; + KTSD->Checked = sys.m_ShowSizeTemp; + KTKA->Enabled = cmd && (!DrawMain.pSel->IsOrgSize()); + KTOS->Enabled = KTKA->Enabled; + KTFS->Checked = sys.m_DisFontSmooth; + KTH->Checked = sys.m_Temp24; + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTOClick(TObject *Sender) +{ + int cmd = DrawMain.pSel ? DrawMain.pSel->m_Command : 0; + int fole = (cmd == CM_OLE); + int flib = (cmd == CM_LIB); + CDrawOle *pOle = (CDrawOle *)DrawMain.pSel; + if( fole ) fole = (pOle->pContainer != NULL); + KTOT->Enabled = fole; + KTOC->Enabled = fole; + KTOCB->Enabled = fole || flib; + KTOE->Enabled = fole; + KTOB->Enabled = fole; + KTOR->Enabled = fole || flib; + if( fole ){ + KTOT->Checked = pOle->m_Trans; + KTOB->Checked = pOle->m_Stretch; + } + TOleContainer *pO = new TOleContainer(this); + KTOP->Enabled = pO->CanPaste || ::IsClipboardFormatAvailable(CF_BITMAP); + delete pO; + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTOIClick(TObject *Sender) +{ + AdjustTempSC(m_TempX, m_TempY); + MultProc(); + CDrawOle *pDraw = (CDrawOle *)DrawMain.MakeItem(CM_OLE); + pDraw->Start(PBoxTemp->Canvas, m_TempX, m_TempY); + pDraw->Making(m_TempX, m_TempY); + if( pDraw->Finish(m_TempX+160, m_TempY + 128) ){ + AddItem(pDraw, 0); + } + else { + delete pDraw; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTCIClick(TObject *Sender) +{ + AdjustTempSC(m_TempX, m_TempY); + MultProc(); + CDrawLib *pDraw = (CDrawLib *)DrawMain.MakeItem(CM_LIB); + pDraw->Start(PBoxTemp->Canvas, m_TempX, m_TempY); + pDraw->Making(m_TempX, m_TempY); + if( pDraw->Finish(m_TempX+160, m_TempY + 128) ){ + AddItem(pDraw, 0); + } + else { + delete pDraw; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTOCClick(TObject *Sender) +{ + if( DrawMain.pSel == NULL ) return; +// if( DrawMain.pSel->m_Command != CM_OLE ) return; + CWaitCursor w; + CDrawOle *pDraw = (CDrawOle *)DrawMain.pSel; + if( Sender == KTOC ){ + pDraw->pContainer->Copy(); + } + else if( Sender == KTOE ){ + pDraw->DoPrimary(); + UpdateTemp(); + } + else if( Sender == KTOB ){ + pDraw->m_Stretch = pDraw->m_Stretch ? 0 : 1; + UpdateTemp(); + } + else if( Sender == KTOT ){ + pDraw->m_Trans = pDraw->m_Trans ? 0 : 1; + UpdateTemp(); + } + else if( Sender == KTOCB ){ + if( pDraw->m_Command == CM_OLE ){ + Graphics::TBitmap *pBitmap = pDraw->MakeBitmap(); + CopyBitmap(pBitmap); + delete pBitmap; + } + else { + CDrawLib *pLib = (CDrawLib *)DrawMain.pSel; + CopyBitmap(pLib->pBitmap); + } + } + else if( Sender == KTOR ){ + if( pDraw->m_Command == CM_OLE ){ + if( pDraw->ObjectProperties() ){ + UpdateTemp(); + } + } + else { + CDrawLib *pLib = (CDrawLib *)DrawMain.pSel; + pLib->ObjectProperties(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AddItem(CDraw *pItem, int b) +{ + MultProc(); + SaveUndo(); + DrawMain.AddItem(pItem); + DrawMain.pSel = pItem; + m_DrawCmd = CM_SELECT; + SBDSel->Down = TRUE; + if( b ) KTBClick(NULL); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTOPClick(TObject *Sender) +{ + CDrawOle *pDraw = (CDrawOle *)DrawMain.MakeItem(CM_OLE); + TOleContainer *pO = new TOleContainer(this); + int f = pO->CanPaste; + delete pO; + pDraw->m_X1 = m_TempX; pDraw->m_Y1 = m_TempY; + if( f ){ + if( !pDraw->Paste() ){ + delete pDraw; + pDraw = NULL; + } + } + else { + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + TClipboard *pCB = Clipboard(); + try{ + pBitmap->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); + pDraw->LoadFromBitmap(m_TempX, m_TempY, pBitmap); + } + catch(...){ + delete pDraw; + pDraw = NULL; + } + delete pBitmap; + } + if( pDraw != NULL ) AddItem(pDraw, 0); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTUClick(TObject *Sender) +{ + if( pUndo != NULL ){ + pUndo->Seek(0, soFromBeginning); + DrawMain.LoadFromStream(PBoxTemp->Canvas, pUndo); + UpdateTemp(); + DeleteUndo(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SetGreetingString(LPSTR t, LPCSTR pCall, int type) +{ + strcpy(t, type ? "Hi" : "HELLO"); + if( !Cty.IsData() ) return; + LPCSTR p = ClipCC(pCall); + if( *p ){ + int n; + if( (n = Cty.GetNoP(p))!=0 ){ + CTL *cp = Cty.GetCTL(n-1); + if( cp->TD != NULL ){ + SYSTEMTIME now; + GetUTC(&now); + + WORD tim = WORD((now.wHour * 60 + now.wMinute) * 30 + now.wSecond/2); + tim = AdjustRolTimeUTC(tim, *cp->TD); + if( tim ){ + tim /= WORD(30); + if( tim < 12*60 ){ + strcpy(t, type ? "GM" : "Good morning"); + } + else if( tim < 18*60 ){ + strcpy(t, type ? "GA" : "Good afternoon"); + } + else { + strcpy(t, type ? "GE" : "Good evening"); + } + } + } + } + + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MacroDate(LPSTR t, SYSTEMTIME &now) +{ + switch(Log.m_LogSet.m_DateType){ + case 2: + case 3: + sprintf(t, "%02u-%s-%04u", now.wDay, MONT1[now.wMonth], now.wYear); + break; + case 4: + case 5: + sprintf(t, "%s-%02u-%04u", MONT1[now.wMonth], now.wDay, now.wYear); + break; + default: + sprintf(t, "%04u-%s-%02u", now.wYear, MONT1[now.wMonth], now.wDay); + break; + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::MacroText(LPSTR t, LPCSTR p, int size) +{ + int r = 0; + int n, l; + char bf[256]; + SYSTEMTIME now; + int f = KTMD->Checked; + + for( n = 0;*p; p++ ){ + if( *p == '%' ){ + p++; + switch(*p){ + case 'm': + strcpy(t, sys.m_Call.c_str()); + break; + case 'C': + case 'c': + strcpy(t, HisCall->Text.IsEmpty() ? "ToCall" : AnsiString(HisCall->Text).c_str()); //ja7ude 0521 + if( *p == 'C' ) strlwr(t); + break; + case 'n': + strcpy(t, (f && HisName->Text.IsEmpty()) ? "OM" : AnsiString(HisName->Text).c_str()); //ja7ude 0521 + break; + case 'J': + if( !HisName->Text.IsEmpty() ){ + strcpy(bf, AnsiString(HisName->Text).c_str()); //ja7ude 0521 + LPSTR tt; + StrDlm(tt, bf); + if( IsJA(AnsiString(HisCall->Text).c_str()) || (*tt < 0) ){ //ja7ude 0521 + sprintf(t, "%sさん", tt); + } + else { + strcpy(t, tt); + } + } + else { + *t = 0; + } + break; + case 'q': + strcpy(t, (f && HisQTH->Text.IsEmpty()) ? "His/Her QTH" : AnsiString(HisQTH->Text).c_str()); //ja7ude 0521 + break; + case 'r': + strcpy(t, (f && HisRST->Text.IsEmpty()) ? "RSV" : AnsiString(HisRST->Text).c_str()); //ja7ude 0521 + break; + case 's': + strcpy(t, (f && MyRST->Text.IsEmpty()) ? "RSV" : AnsiString(MyRST->Text).c_str()); //ja7ude 0521 + break; + case 'R': + strcpy(bf, (f && HisRST->Text.IsEmpty()) ? "RST" : AnsiString(HisRST->Text).c_str()); //ja7ude 0521 + if( strlen(bf) >= 3 ){ + StrCopy(t, bf, 3); + } + else { + strcpy(t, "595"); + } + break; + case 'N': + strcpy(bf, (f && HisRST->Text.IsEmpty()) ? "RSVNR" : AnsiString(HisRST->Text).c_str()); //ja7ude 0521 + if( strlen(bf) > 3 ){ + strcpy(t, &bf[3]); + } + else { + *t = 0; + } + break; + case 'M': + strcpy(bf, (f && MyRST->Text.IsEmpty()) ? "RSV" : AnsiString(MyRST->Text).c_str()); + if( strlen(bf) > 3 ){ + strcpy(t, &bf[3]); + } + else { + *t = 0; + } + break; + case 'g': + SetGreetingString(t, AnsiString(HisCall->Text).c_str(), 0); //ja7ude 0521 + r = 1; + break; + case 'f': + SetGreetingString(t, AnsiString(HisCall->Text).c_str(), 1); //ja7ude 0521 + r = 1; + break; + case 'D': + GetUTC(&now); + MacroDate(t, now); + r = 1; + break; + case 'L': + ::GetLocalTime(&now); + MacroDate(t, now); + r = 1; + break; + case 'T': + GetUTC(&now); + sprintf(t, "%02u:%02u", now.wHour, now.wMinute); + r = 1; + break; + case 't': + GetUTC(&now); + sprintf(t, "%02u%02u", now.wHour, now.wMinute); + r = 1; + break; + case 'U': + ::GetLocalTime(&now); + sprintf(t, "%02u:%02u", now.wHour, now.wMinute); + r = 1; + break; + case 'u': + ::GetLocalTime(&now); + sprintf(t, "%02u%02u", now.wHour, now.wMinute); + r = 1; + break; + case 'v': + strcpy(t, VERID); + break; + case 'V': + strcpy(t, VERBETA); + break; + case 'B': + strcpy(t, (f && LogFreq->Text.IsEmpty()) ? "Freq" : AnsiString(LogFreq->Text).c_str()); //ja7ude 0521 + break; + case 'b': + strcpy(t, (f && LogFreq->Text.IsEmpty()) ? "Band" : _BandText[Log.m_sd.band]); + break; + case 'o': + { + AnsiString ws; + Yen2CrLf(ws, EditNote->Text); + strcpy(t, (f && EditNote->Text.IsEmpty()) ? "Note" : ws.c_str()); + } + break; + case 'X': + now = RxHist.m_File[RxHist.m_CurRead].m_UTC; + MacroDate(t, now); + sprintf(t+strlen(t), " %02u%02u", now.wHour, now.wMinute); + r = 1; + break; + default: + strcpy(t, "%%"); + break; + } + l = strlen(t); + t += l; + n += l; + } + else { + *t++ = *p; + n++; + } + if( n >= (size - 1) ) break; + } + *t = 0; + return r; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisCallChange(TObject *Sender) +{ + TempDelay(); + SBULog->Enabled = TRUE; + UpdateUI(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CBSTempClick(TObject *Sender) +{ + if( m_DisEvent ) return; + + if( Sender == KSTS ){ + if( PopupS->PopupComponent == PBoxTX ){ // Tx Window + SBUseTemp->Down = SBUseTemp->Down ? FALSE : TRUE; + SBUseTempClick(NULL); + return; + } + else { + m_DisEvent++; + CBSTemp->Checked = CBSTemp->Checked ? FALSE : TRUE; + m_DisEvent--; + } + } + else if( Sender == KSTD ){ + m_DisEvent++; + CBSDraft->Checked = CBSDraft->Checked ? FALSE : TRUE; + m_DisEvent--; + } + if( CBSTemp->Checked ){ + m_PSPage = m_TSPage[0] = UDStock->Position; + } + UpdateTabS(); + if( TabS->TabIndex ){ + CBSTemp->Enabled = FALSE; + CBSDraft->Enabled = TRUE; + } + else { + CBSTemp->Enabled = TRUE; + CBSDraft->Enabled = CBSTemp->Checked; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBHViewClick(TObject *Sender) +{ + TZoomViewDlg *pBox = new TZoomViewDlg(this); + pBox->Execute(pBitmapHist, FALSE); + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBRViewClick(TObject *Sender) +{ + TZoomViewDlg *pBox = new TZoomViewDlg(this); + pBox->Execute(pBitmapRX, TRUE); + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBTViewClick(TObject *Sender) +{ + TZoomViewDlg *pBox = new TZoomViewDlg(this); + pBox->Execute(pBitmapTX, FALSE); + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBLKClick(TObject *Sender) +{ + sys.m_AutoStop = !SBLK->Down; + if( SBLK->Down ){ + sys.m_AutoSync = 0; + } + else { + sys.m_AutoSync = TRUE; + } + pDem->m_SyncRestart = !SBLK->Down; + pDem->CalcBPF(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AutoCopyJob(SYSTEMTIME tim, Graphics::TBitmap *pSource) +{ + if( Log.m_LogSet.m_TimeZone == 'I' ){ + UTCtoJST(&tim); + } + char fname[256]; + char abf[2]; + abf[0] = abf[1] = 0; + if( LastC(sys.m_AutoSaveDir.c_str()) != '\\' ) abf[0] = '\\'; + sprintf(fname, "%s%s%04u%02u%02u%02u%02u", sys.m_AutoSaveDir.c_str(), abf, + tim.wYear, + tim.wMonth, + tim.wDay, + tim.wHour, + tim.wMinute + ); + if( KHACJ->Checked ){ + strcat(fname, ".jpg"); + } + else { + strcat(fname, ".bmp"); + } + int r; + if( KHACT->Checked ){ + Graphics::TBitmap *pBitmap = DupeBitmap(pSource, pf24bit); + DateBitmap(pBitmap, tim); + if( KHACJ->Checked ){ + r = SaveJPEG(pBitmap, fname); + } + else { + r = SaveBitmap24(pBitmap, fname); + } + delete pBitmap; + } + else { + if( KHACJ->Checked ){ + r = SaveJPEG(pSource, fname); + } + else { + r = SaveBitmap24(pSource, fname); + } + } + if( r ){ + char bf[256]; + sprintf(bf, "%02u%02u%02u%02u%02u", + tim.wYear % 100, + tim.wMonth, + tim.wDay, + tim.wHour, + tim.wMinute + ); + AnsiString as = EditQSL->Text; + if( SBQSO->Down ){ + if( !strstr(as.c_str(), bf) ){ + if( !as.IsEmpty() ) as += ","; + as += bf; + } + } + else { + as = bf; + } + EditQSL->Text = as; + StrCopy(Log.m_sd.qsl, AnsiString(EditQSL->Text).c_str(), MLQSL); //ja7ude 0521 + } +} +//--------------------------------------------------------------------------- +// ヒストリに書きこみ +void __fastcall TMmsstv::SBWHistClick(TObject *Sender) +{ + m_DisEvent++; + RxHist.Add(pBitmapRX, &m_StartTime, m_HistM); + if( pHistView != NULL ) pHistView->Add(pBitmapRX); + UDHist->Position = 0; + AdjustBitmapFormat(pBitmapHist); + ::CopyBitmap(pBitmapHist, pBitmapRX); + TrigHistF(); + UpdatePic(1); + DispHistStat(); + SBWHist->Enabled = FALSE; + if( KHAC->Checked ){ + AutoCopyJob(m_StartTime, pBitmapHist); + } + m_DisEvent--; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxTXMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + PBoxTX->BeginDrag(TRUE,0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHlpMainClick(TObject *Sender) +{ + if( Sender == KHlpMain ){ + ShowHelp(this, MsgEng ? "EMMSSTV.TXT":"MMSSTV.TXT"); + } + else { + ShowHelp(-1); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHlpUpClick(TObject *Sender) +{ + ShowHelp(this, MsgEng ? "EUPDATE.TXT":"UPDATE.TXT"); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHlpPadClick(TObject *Sender) +{ + sys.m_HelpNotePad = InvMenu(KHlpPad); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DropFile(tagMSG &Msg) +{ + HDROP hDrop = (HDROP)Msg.wParam; + POINT N; + char fname[256]; + if( Msg.hwnd == PanelS->Handle ){ + if( ::DragQueryPoint(hDrop, &N) ){ + m_DragNo = GetStockNo(N.x, N.y); + if( m_DragNo >= 0 ){ + m_DragDataNo = UDStock->Position * m_SMax + m_DragNo; + if( ::DragQueryFile(hDrop, 0, fname, sizeof(fname)) ){ + ::SetForegroundWindow(Handle); + LPCSTR pExt = GetEXT(fname); + if( IsPic(pExt) ){ + int r; + TPicRectDlg *pBox = new TPicRectDlg(this); + r = ::LoadImage(pBox->pBitmap, fname); + if( r == TRUE ){ + Graphics::TBitmap *pBitmap = CreateBitmap(m_PSSize[m_DragNo] & 0x0000ffff, m_PSSize[m_DragNo]>>16, -1); +// Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + if( pBox->Copy(pBitmap) == TRUE ){ + SaveBitmapS(pBitmap, m_DragNo); + UpdateTabS(); + } + delete pBitmap; + } + delete pBox; + } + else { + ErrorMB("'%s' is not supported.", fname); + } + } + } + } + ::DragFinish(hDrop); + } + else if( Msg.hwnd == PanelTX->Handle ){ // 送信画面へのドロップ + if( ::DragQueryFile(hDrop, 0, fname, sizeof(fname)) ){ + ::SetForegroundWindow(Handle); + LPCSTR pExt = GetEXT(fname); + if( IsPic(pExt) ){ + int r; + TPicRectDlg *pBox = new TPicRectDlg(this); + r = ::LoadImage(pBox->pBitmap, fname); + if( r == TRUE ){ + if( pBox->Copy(pBitmapTXM) == TRUE ){ + MakeTxBitmap(0); + PBoxTXPaint(NULL); + } + } + delete pBox; + } + else { + AdjustPage(pgTemp); + goto _tdrop; +// ErrorMB("'%s' is not supported.", fname); + } + } + ::DragFinish(hDrop); + } + else if( Msg.hwnd == PanelTemp->Handle ){ // テンプレートへのドロップ +_tdrop:; + if( ::DragQueryPoint(hDrop, &N) ){ + if( ::DragQueryFile(hDrop, 0, fname, sizeof(fname)) ){ + ::SetForegroundWindow(Handle); + LPCSTR pExt = GetEXT(fname); + int b; + if( ((b = !strcmpi(pExt, "BMP")) != 0) || IsPic(pExt) ){ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + if( ::LoadImage(pBitmap, fname) == TRUE ){ + DropPic(N.x, N.y, pBitmap, b ? 2 : 1); + } + delete pBitmap; + } + else if( !strcmpi(pExt, "MTM") ){ + SaveUndo(); + LoadTemplate(&DrawMain, fname, NULL); + UpdateTemp(); + } + else if( !strcmpi(pExt, "MTI") ){ + LoadTemplate(&DrawTemp, fname, NULL); + AddTemplate(&DrawTemp); + UpdateTemp(); + } + else if( !strcmpi(pExt, "DLL") ){ + DropLib(N.x, N.y, fname); + } + else { + DropOle(N.x, N.y, fname, 1); + } + } + } + ::DragFinish(hDrop); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LoadDefTemp(void) +{ + char fname[256]; + int i; + for( i = 0; i < 5; i++ ){ + sprintf(fname, "%sdef%d.mtm", BgnDir, i+1); + if( LoadTemplate(&DrawTemp, fname, NULL) != TRUE ) break; + SaveStockTemp(&DrawTemp, i); + if( i == 0 ) DrawMain.Copy(&DrawTemp); + } + DrawTemp.FreeItem(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFL1Click(TObject *Sender) +{ + sys.m_FFTGain = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFM1Click(TObject *Sender) +{ + sys.m_FFTGain = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFH1Click(TObject *Sender) +{ + sys.m_FFTGain = 2; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFT1Click(TObject *Sender) +{ + sys.m_FFTGain = 3; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFL2Click(TObject *Sender) +{ + sys.m_FFTGain = 4; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFM2Click(TObject *Sender) +{ + sys.m_FFTGain = 5; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFH2Click(TObject *Sender) +{ + sys.m_FFTGain = 6; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFT2Click(TObject *Sender) +{ + sys.m_FFTGain = 7; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRSClick(TObject *Sender) +{ + sys.m_FFTResp = 2; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRMClick(TObject *Sender) +{ + sys.m_FFTResp = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRFClick(TObject *Sender) +{ + sys.m_FFTResp = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KViewClick(TObject *Sender) +{ + switch(sys.m_FFTType){ + case 0: + KSOFF->Checked = TRUE; + break; + case 1: + KSFFT->Checked = TRUE; + break; + default: + KSFQ->Checked = TRUE; + break; + } + switch(sys.m_FFTWidth){ + case 0: + KFW30->Checked = TRUE; + break; + case 1: + KFW20->Checked = TRUE; + break; + default: + KFW15->Checked = TRUE; + break; + } + switch(sys.m_FFTResp){ + case 2: + KRS->Checked = TRUE; + break; + case 1: + KRM->Checked = TRUE; + break; + case 0: + KRF->Checked = TRUE; + break; + } + switch(sys.m_FFTGain){ + case 0: + KFL1->Checked = TRUE; + break; + case 1: + KFM1->Checked = TRUE; + break; + case 2: + KFH1->Checked = TRUE; + break; + case 3: + KFT1->Checked = TRUE; + break; + case 4: + KFL2->Checked = TRUE; + break; + case 5: + KFM2->Checked = TRUE; + break; + case 6: + KFH2->Checked = TRUE; + break; + case 7: + KFT2->Checked = TRUE; + break; + } + KFTA->Checked = sys.m_FFTAGC; + switch(sys.m_FFTStg){ + case 0: + KFSOF->Checked = TRUE; + break; + case 1: + KFSQ->Checked = TRUE; + break; + case 2: + KFSS->Checked = TRUE; + break; + case 3: + KFSL->Checked = TRUE; + break; + } + switch(sys.m_FFTPriority){ + case 0: + KFTD1->Checked = TRUE; + break; + case 1: + KFTD2->Checked = TRUE; + break; + case 2: + KFTD3->Checked = TRUE; + break; + case 3: + KFTD4->Checked = TRUE; + break; + default: + KFTD5->Checked = TRUE; + break; + } + if(pDem->m_LevelType){ + KVLSY->Checked = TRUE; + } + else { + KVLSG->Checked = TRUE; + } + KVR->Checked = pRxView != NULL ? TRUE : FALSE; + KVS->Checked = pSyncView != NULL ? TRUE : FALSE; + KVH->Checked = pHistView != NULL ? TRUE : FALSE; + KVC->Checked = pCtrBtn != NULL ? TRUE : FALSE; + switch(sys.m_DivMode){ + case 1: + KVSD2->Checked = TRUE; + break; + case 2: + KVSD3->Checked = TRUE; + break; + default: + KVSD1->Checked = TRUE; + break; + } + AdjustFileView(); + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if( m_MainPage == pgTemp ){ + if( DrawMain.pSel != NULL ){ + TShiftState sf1, sf2; + sf1 << ssShift; + sf2 << ssShift; + sf1 *= Shift; + int sft = (sf1 == sf2) ? TRUE : FALSE; + CDrawText *pText = NULL; + if( sft && (DrawMain.pSel->m_Command == CM_TEXT) ) pText = (CDrawText *)DrawMain.pSel; + switch(Key){ + case VK_UP: + AdjustTempView(1); + if( pText != NULL ){ + pText->pFont->Height++; + pText->UpdateText(); + } + else { + DrawMain.pSel->StartMove(PBoxTemp->Canvas, 0, 0, sft ? HT_B : HT_I); + DrawMain.pSel->Moving(0, -1); + DrawMain.pSel->Move(0, -1); + } + AdjustTempView(0); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + Key = 0; + break; + case VK_DOWN: + AdjustTempView(1); + if( pText != NULL ){ + pText->pFont->Height--; + pText->UpdateText(); + } + else { + DrawMain.pSel->StartMove(PBoxTemp->Canvas, 0, 0, sft ? HT_B : HT_I); + DrawMain.pSel->Moving(0, 1); + DrawMain.pSel->Move(0, 1); + } + AdjustTempView(0); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + Key = 0; + break; + case VK_LEFT: + AdjustTempView(1); + if( pText != NULL ){ + pText->pFont->Height++; + pText->UpdateText(); + } + else { + DrawMain.pSel->StartMove(PBoxTemp->Canvas, 0, 0, sft ? HT_R : HT_I); + DrawMain.pSel->Moving(-1, 0); + DrawMain.pSel->Move(-1, 0); + } + AdjustTempView(0); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + Key = 0; + break; + case VK_RIGHT: + AdjustTempView(1); + if( pText != NULL ){ + pText->pFont->Height--; + pText->UpdateText(); + } + else { + DrawMain.pSel->StartMove(PBoxTemp->Canvas, 0, 0, sft ? HT_R : HT_I); + DrawMain.pSel->Moving(1, 0); + DrawMain.pSel->Move(1, 0); + } + AdjustTempView(0); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + Key = 0; + break; + } + } + } + else if( m_MainPage == pgTX ){ + TShiftState sa1, sa2; + + sa1 << ssAlt; + sa2 << ssAlt; + sa1 *= Shift; + if( sa1 == sa2 ){ // ALT+Any + switch(Key){ + case 'T': + if( SBTX->Enabled ){ + SBTX->Down = SBTX->Down ? 0 : 1; + SBTXClick(NULL); + Key = 0; + } + break; + case 'U': + if( SBTune->Enabled ){ + SBTune->Down = SBTune->Down ? 0 : 1; + SBTuneClick(NULL); + Key = 0; + } + break; + } + } + } + if( pCtrBtn != NULL ){ + if( Key == VK_F9 ){ + pCtrBtn->SBTXClick(NULL); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::FormKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + TShiftState sa1, sa2; + + sa1 << ssAlt; + sa2 << ssAlt; + sa1 *= Shift; + if( sa1 == sa2 ){ // ALT+Any + switch(Key){ + case 'C': + if( HisCall->CanFocus() ) HisCall->SetFocus(); + Key = 0; + break; + case 'N': + if( HisName->CanFocus() ) HisName->SetFocus(); + Key = 0; + break; + case 'Q': + if( HisQTH->CanFocus() ) HisQTH->SetFocus(); + Key = 0; + break; + case 'L': + SBListClick(NULL); + Key = 0; + break; + } + } + else if( Key == VK_RETURN ){ + if( ActiveControl == HisCall ){ + if( !HisCall->Text.IsEmpty() ){ + FindCall(); + MultProc(); + SBULogClick(NULL); + } + Key = 0; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVOutClick(TObject *Sender) +{ + HWND hWnd = ::FindWindow("Volume Control", NULL); + if( hWnd != NULL ){ + ::PostMessage(hWnd, WM_CLOSE, 0, 0); + ::Sleep(200); + MultProc(); + } + char cmd[128]; + + if( WinVista ){ + if( Sender != KVOut ){ + strcpy(cmd, "control.exe mmsys.cpl,,1"); + } + else { + strcpy(cmd, "sndvol.exe"); + } + } + else { + strcpy(cmd, "SNDVOL32.EXE"); + if( WinNT && (Sender != KVOut) ) strcat(cmd, " /R"); + } + + WinExec(cmd, SW_SHOW); + MultProc(); + if( !WinNT && (Sender != KVOut) ){ + CWaitCursor w; + int i; + for( i = 0; i < 30; i++ ){ + ::Sleep(100); + hWnd = ::FindWindow("Volume Control", NULL); + if( hWnd != NULL ) break; + MultProc(); + } + if( i < 30 ){ + ::SetForegroundWindow(hWnd); + ::Sleep(100); + const short _tt[]={ + VK_MENU, 'P', 'P'|0x8000, VK_MENU|0x8000, + 'R', 'R'|0x8000, VK_TAB, VK_TAB|0x8000, + VK_DOWN, VK_DOWN|0x8000, VK_RETURN, VK_RETURN|0x8000, + 0 + }; + KeyEvent(_tt); + } + } +} +//--------------------------------------------------------------------------- +// 周波数範囲情報の取得 +void __fastcall TMmsstv::GetFFTRect(int &FM, int &low) +{ + switch(sys.m_FFTWidth){ + case 0: // 3K + FM = 3000 * FFT_SIZE / FFTSamp; + low = 0; + break; + case 1: // 2K + FM = 2000 * FFT_SIZE / FFTSamp; + low = 700; + break; + case 2: // 1.5K + FM = 1500 * FFT_SIZE / FFTSamp; + low = 1000; + break; + } +} +//--------------------------------------------------------------------------- +// 周波数ゲージの表示 +void __fastcall TMmsstv::PBoxGPaint(TObject *Sender) +{ + if( pSound == NULL ) return; + + TCanvas *tp = PBoxG->Canvas; + if( Width < 760 ){ + tp->Font->Size = 7; + } + else { + tp->Font->Size = 8; + } + tp->Font->Color = clBlack; + + int FM; + int low; + GetFFTRect(FM, low); + int fq = pDem->m_Tick ? pDem->m_TickFreq : 1200; + char bf[32]; + int x = int(((fq - low)*FFT_SIZE*double(PBoxG->Width)/double(FFTSamp*FM)) + 0.5); + sprintf(bf, "%u", int(fq + g_dblToneOffset)); + int FH = tp->TextHeight(bf); + int y = PBoxG->Height - FH; + int FW = tp->TextWidth(bf); + x -= FW/2; + tp->TextOut(x, y, bf); + if( pDem->m_Tick ) return; + + x = m_FX[1]; + sprintf(bf, "%u", int(1500 + g_dblToneOffset)); + FW = tp->TextWidth(bf); + x -= FW/2; + tp->TextOut(x, y, bf); + x = m_FX[0]; + sprintf(bf, "%u", int(1900 + g_dblToneOffset)); + x -= FW/2; + tp->TextOut(x, y, bf); + x = m_FX[2]; + sprintf(bf, "%u", int(2300 + g_dblToneOffset)); + x -= FW/2; + tp->TextOut(x, y, bf); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFSOFClick(TObject *Sender) +{ + sys.m_FFTStg = 0; + InitFFT(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFSQClick(TObject *Sender) +{ + sys.m_FFTStg = 1; + InitFFT(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFSSClick(TObject *Sender) +{ + sys.m_FFTStg = 2; + InitFFT(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFSLClick(TObject *Sender) +{ + sys.m_FFTStg = 3; + InitFFT(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UDSampClick(TObject *Sender, TUDBtnType Button) +{ + if( Button == btNext ){ + SSTVSET.m_SampFreq += 0.02; + } + else { + SSTVSET.m_SampFreq -= 0.02; + } + SSTVSET.m_SampFreq = NormalSampFreq(SSTVSET.m_SampFreq, 50); + if( (pDem->m_StgBuf != NULL) || WaveStg.IsOpen() ){ + m_ReqSampChg = 5; + } + else { // No buffer + UpdateSampFreq(); + } + DispSyncStat(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBPhaseClick(TObject *Sender) +{ + if( SBPhase->Down || SBSlant->Down ){ + PBoxD12->Cursor = crCross; + } + else { + PBoxD12->Cursor = crDefault; + } +} +//--------------------------------------------------------------------------- +// フォルダの変更 +void __fastcall TMmsstv::KHCDClick(TObject *Sender) +{ + if( MsgEng ){ + SaveDialog->Title = "Move history files folder"; + } + else { + SaveDialog->Title = "履歴ファイルのフォルダを変更"; + } + SaveDialog->Filter = ""; + SaveDialog->FileName = "History.bin"; + SaveDialog->DefaultExt = "bin"; + SaveDialog->InitialDir = HistDir; + SetDisPaint(); + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + char bf[256]; + SetDirName(bf, AnsiString(SaveDialog->FileName).c_str()); //ja7ude 0521 + if( strcmp(bf, HistDir) ){ + if( YesNoMB( "%s >>> %s, are you sure?", HistDir, bf ) == IDYES ){ + RxHist.MoveDir(bf); + } + } + } + TopWindow(this); + ResDisPaint(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSCDClick(TObject *Sender) +{ + if( MsgEng ){ + SaveDialog->Title = "Move stock files folder"; + } + else { + SaveDialog->Title = "ストックファイルのフォルダを変更"; + } + SaveDialog->Filter = ""; + SaveDialog->FileName = TEMPV106C; + SaveDialog->DefaultExt = "mtm"; + SaveDialog->InitialDir = StockDir; + SetDisPaint(); + NormalWindow(this); + if( SaveDialog->Execute() == TRUE ){ + char bf[256]; + SetDirName(bf, AnsiString(SaveDialog->FileName).c_str()); + if( strcmp(bf, StockDir) ){ + if( YesNoMB( "%s >>> %s, are you sure?", StockDir, bf ) == IDYES ){ + MoveStockDir(bf); + } + } + } + TopWindow(this); + ResDisPaint(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MoveStockDir(LPCSTR pNewDir) +{ + if( !strcmp(pNewDir, StockDir) ) return; + + CWaitCursor wait; + char tname[256]; + char sname[256]; + + sprintf(sname, "%s"TEMPV106C, StockDir); + sprintf(tname, "%s"TEMPV106C, pNewDir); + if( CopyFile(sname, tname, FALSE) == FALSE ){ + ErrorMB( "Copy fail..." ); + return; + } + int i; + for( i = 0; i < (STOCKMAX*STOCKPAGE); i++ ){ + sprintf(sname, "%st%d.mtm", StockDir, i + 1); + sprintf(tname, "%st%d.mtm", pNewDir, i + 1); + CopyFile(sname, tname, FALSE); + unlink(sname); + + sprintf(sname, sys.m_UseJPEG ? "%sTxStock%u.jpg" : "%sTxStock%u.bmp", StockDir, i + 1); + sprintf(tname, sys.m_UseJPEG ? "%sTxStock%u.jpg" : "%sTxStock%u.bmp", pNewDir, i + 1); + CopyFile(sname, tname, FALSE); + unlink(sname); + } + sprintf(sname, "%sCurrent.bmp", StockDir); + unlink(sname); + sprintf(sname, "%s"TEMPV106C, StockDir); + unlink(sname); + sprintf(sname, "%s"TEMPV106L, StockDir); + unlink(sname); + + if( *lastp(StockDir) == '\\' ) *lastp(StockDir) = 0; + _rmdir(StockDir); + strcpy(StockDir, pNewDir); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ChangeStockFormat(int sw) +{ + if( sw == sys.m_UseJPEG ) return; + + CWaitCursor wait; + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + + char tname[256]; + char sname[256]; + int i; + for( i = 0; i < STOCKMAX; i++ ){ + sprintf(sname, sw ? "%sTxStock%u.bmp" : "%sTxStock%u.jpg", StockDir, i + 1); + sprintf(tname, sw ? "%sTxStock%u.jpg" : "%sTxStock%u.bmp", StockDir, i + 1); + if( IsFile(sname) ){ + if( sw ){ + LoadBitmap(pBitmap, sname); + SaveJPEG(pBitmap, tname); + } + else { + LoadJPEG(pBitmap, sname); + SaveBitmap(pBitmap, tname); + } + unlink(sname); + } + } + delete pBitmap; + sys.m_UseJPEG = sw; +} + +void __fastcall TMmsstv::SBTuneMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + AnsiString as = pMod->m_TuneFreq; + if( InputMB("MMSSTV", MsgEng?"Enter tone frequency (Hz)":"トーン周波数(Hz)を入力", as) == TRUE ){ + int d; + sscanf(as.c_str(), "%u", &d); + if( (d >= 100) && (d <= 3000) ){ + pMod->m_TuneFreq = d; + UpdateToneFreq(); + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KEditClick(TObject *Sender) +{ + BOOL f = ::IsClipboardFormatAvailable(CF_BITMAP); + SBPaste->Enabled = f; + KEP->Enabled = f; + KES->Enabled = f; + KEX->Enabled = f; + switch(sys.m_Way240){ + case 0: + KEW1->Checked = TRUE; + break; + case 1: + KEW2->Checked = TRUE; + break; + case 2: + KEW3->Checked = TRUE; + break; + default: + KEW4->Checked = TRUE; + break; + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KERClick(TObject *Sender) +{ + CopyBitmap(pBitmapRX); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KESClick(TObject *Sender) +{ +// + TClipboard *pCB = Clipboard(); + if (pCB->HasFormat(CF_BITMAP)){ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + AdjustBitmapFormat(pBitmap); + try + { + pBitmap->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); + + MultProc(); + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + MultProc(); + CopyAutoSize(pBitmapTXM, pBitmap); + MultProc(); + } + catch (...) + { + ErrorMB( "Clipboard error." ); + } + delete pBitmap; + AdjustPage(pgTX); + MakeTxBitmap(0); + PBoxTXPaint(NULL); + } + AdjustFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHFJClick(TObject *Sender) +{ + if( RxHist.m_UseJPEG ) return; + + int r = IDYES; + if( RxHist.m_Head.m_Cnt ){ + r = YesNoMB( MsgEng ? "MMSSTV will convert the format in all the files which were stored already.\r\n\rThis processing may take a long time, are you sure?" : "既存のファイルのフォーマットを変更します.\r\n\r\nこの処理は時間がかかる可能性があります. ほんまに変換しますか?" ); + } + if( r == IDYES ){ + RxHist.ChangeFormat(1); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHFBClick(TObject *Sender) +{ + if( !RxHist.m_UseJPEG ) return; + + int r = IDYES; + if( RxHist.m_Head.m_Cnt ){ + r = YesNoMB( MsgEng ? "MMSSTV will convert the format in all the files which were stored already.\r\n\rThis processing may take a long time, are you sure?" : "既存のファイルのフォーマットを変更します.\r\n\r\nこの処理は時間がかかる可能性があります. ほんまに変換しますか?" ); + } + if( r == IDYES ){ + RxHist.ChangeFormat(0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSFJClick(TObject *Sender) +{ + if( sys.m_UseJPEG ) return; + + int r = YesNoMB( MsgEng ? "MMSSTV will convert the format in all the files which were stored already.\r\n\rThis processing may take a long time, are you sure?" : "既存のファイルのフォーマットを変更します.\r\n\r\nこの処理は時間がかかる可能性があります. ほんまに変換しますか?" ); + if( r == IDYES ){ + ChangeStockFormat(1); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSFBClick(TObject *Sender) +{ + if( !sys.m_UseJPEG ) return; + + int r = YesNoMB( MsgEng ? "MMSSTV will convert the format in all the files which were stored already.\r\n\rThis processing may take a long time, are you sure?" : "既存のファイルのフォーマットを変更します.\r\n\r\nこの処理は時間がかかる可能性があります. ほんまに変換しますか?" ); + if( r == IDYES ){ + ChangeStockFormat(0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRASClick(TObject *Sender) +{ + sys.m_AutoStop = sys.m_AutoStop ? 0 : 1; + UpdateUI(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRASYClick(TObject *Sender) +{ + sys.m_AutoSync = sys.m_AutoSync ? 0 : 1; + UpdateUI(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRARClick(TObject *Sender) +{ + pDem->m_SyncRestart = pDem->m_SyncRestart ? 0 : 1; + pDem->CalcBPF(); + UpdateUI(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PopupRPopup(TObject *Sender) +{ + CSSTVDEM *dp = pDem; + int f1 = (pRxView != NULL) && (PopupR->PopupComponent == pRxView->PBox); + int f2 = (pSyncView != NULL) && (PopupR->PopupComponent == pSyncView->PBox); + int f3 = (PopupR->PopupComponent == PBoxD12 ); + KRFS->Enabled = dp->m_Sync && (SSTVSET.m_Mode != smAVT); + KRAS->Checked = sys.m_AutoStop; + KRAR->Checked = dp->m_SyncRestart; + KRH->Enabled = SBWHist->Enabled; + KRSA->Enabled = sys.m_UseRxBuff ? TRUE : FALSE; + KRASY->Checked = sys.m_AutoSync; + KRCS->Enabled = ( ((dp->m_StgBuf != NULL) || WaveStg.IsOpen()) && (dp->m_wStgLine >= 16) && (SSTVSET.m_Mode != smAVT) ) ? TRUE : FALSE; + KRCR->Enabled = KRCS->Enabled; + KRSR->Enabled = (sys.m_SampFreq != SSTVSET.m_SampFreq); + + if( f1 ){ // 常時受信画面 + if( (pRxView->ClientWidth != pBitmapRX->Width) || + (pRxView->ClientHeight != pBitmapRX->Height) + ){ + KRR->Enabled = TRUE; + } + else { + KRR->Enabled = FALSE; + } + if( (pRxView->ClientWidth != 320) || + (pRxView->ClientHeight != 256) + ){ + KRRC->Enabled = TRUE; + } + else { + KRRC->Enabled = FALSE; + } + KRC->Enabled = TRUE; + KRSW->Enabled = TRUE; + KRSD->Enabled = FALSE; + KRB->Enabled = TRUE; + KRCD->Enabled = TRUE; + } + else if( f2 ){ // 常時Sync画面 + if( (pSyncView->ClientWidth != pBitmapD12->Width) || + (pSyncView->ClientHeight != pBitmapD12->Height) + ){ + KRRC->Enabled = TRUE; + } + else { + KRRC->Enabled = FALSE; + } + KRR->Enabled = FALSE; + KRC->Enabled = FALSE; + KRH->Enabled = FALSE; + KRSW->Enabled = FALSE; + KRSD->Enabled = FALSE; + KRB->Enabled = FALSE; + KRCD->Enabled = FALSE; + } + else if( f3 ){ // 同期画面 + KRR->Enabled = FALSE; + KRRC->Enabled = FALSE; + KRC->Enabled = FALSE; + KRH->Enabled = FALSE; + KRSW->Enabled = FALSE; + KRSD->Enabled = FALSE; + KRB->Enabled = FALSE; + KRCD->Enabled = FALSE; + } + else { // 受信画面 + KRR->Enabled = FALSE; + KRRC->Enabled = FALSE; + KRC->Enabled = TRUE; + KRSW->Enabled = TRUE; + KRSD->Enabled = TRUE; + KRB->Enabled = TRUE; + KRCD->Enabled = FALSE; + } + KRSD->Checked = sys.m_ShowSizeRX; + switch(m_SyncAccuracy){ + case 0: + KRI1->Checked = TRUE; + break; + case 1: + KRI2->Checked = TRUE; + break; + default: + KRI3->Checked = TRUE; + break; + } + KRI->Enabled = KRSA->Enabled; + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRRClick(TObject *Sender) +{ + if( pRxView != NULL ){ + if( PopupR->PopupComponent == pRxView->PBox ){ + pRxView->ClientWidth = pBitmapRX->Width; + pRxView->ClientHeight = pBitmapRX->Height; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRRCClick(TObject *Sender) +{ + if( pRxView != NULL ){ + if( PopupR->PopupComponent == pRxView->PBox ){ + pRxView->ClientWidth = 320; + pRxView->ClientHeight = 256; + } + } + if( pSyncView != NULL ){ + if( PopupR->PopupComponent == pSyncView->PBox ){ + pSyncView->ClientWidth = pBitmapD12->Width; + pSyncView->ClientHeight = pBitmapD12->Height; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVRClick(TObject *Sender) +{ + if( pRxView == NULL ){ + if( KRCD->Checked ){ + pRxView = new TRxViewDlg(NULL); + pRxView->ParentWindow = GetDesktopWindow(); + } + else { + pRxView = new TRxViewDlg(this); + } + pRxView->PBox->PopupMenu = PopupR; + pRxView->SetViewPos(sys.m_RxViewLeft, sys.m_RxViewTop, sys.m_RxViewWidth, sys.m_RxViewHeight, pBitmapRX); + if( (pSound != NULL) && pDem->m_Sync ){ + pRxView->UpdateTitle(SSTVSET.m_Mode, 0); + } + else { + pRxView->UpdateTitle(-1, 0); + } + pRxView->Visible = TRUE; + m_TimerRXV = 0; + } + else { + pRxView->GetViewPos(sys.m_RxViewLeft, sys.m_RxViewTop, sys.m_RxViewWidth, sys.m_RxViewHeight); + delete pRxView; + pRxView = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVSClick(TObject *Sender) +{ + if( pSyncView == NULL ){ + pSyncView = new TRxViewDlg(this); + pSyncView->UpdateSyncTitle(SSTVSET.m_SampFreq); + pSyncView->PBox->PopupMenu = PopupR; + pSyncView->SetViewPos(sys.m_SyncViewLeft, sys.m_SyncViewTop, sys.m_SyncViewWidth, sys.m_SyncViewHeight, pBitmapD12); + pSyncView->Visible = TRUE; + m_TimerRXS = 0; + } + else { + pSyncView->GetViewPos(sys.m_SyncViewLeft, sys.m_SyncViewTop, sys.m_SyncViewWidth, sys.m_SyncViewHeight); + delete pSyncView; + pSyncView = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVHClick(TObject *Sender) +{ + if( pHistView == NULL ){ + OpenHistView(); + } + else { + sys.m_HistViewTB = pHistView->m_TitleBar; + CloseHistView(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVCClick(TObject *Sender) +{ + if( pCtrBtn == NULL ){ + pCtrBtn = new TCtrBtnWnd(this); + pCtrBtn->SetViewPos(sys.m_CtrBtnLeft, sys.m_CtrBtnTop, sys.m_CtrBtnWidth, sys.m_CtrBtnHeight); + pCtrBtn->UpdateBtn(); + pCtrBtn->Visible = TRUE; + } + else { + pCtrBtn->GetViewPos(sys.m_CtrBtnLeft, sys.m_CtrBtnTop, sys.m_CtrBtnWidth, sys.m_CtrBtnHeight); + delete pCtrBtn; + pCtrBtn = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ShowFileView(int i, int ttl) +{ + CWaitCursor w; + + MultProc(); + TFileViewDlg *fp = pFileView[i] = new TFileViewDlg(this); + fp->m_MyIndex = i; + int MaxPage = sys.m_FileViewMaxPage[i]; + fp->m_MaxPage = MaxPage; + fp->MakeFileV(); + MultProc(); + fp->m_SSize = sys.m_FileViewSize[i] & 0x00000003; + fp->KBP->Checked = sys.m_FileViewSize[i] >> 16; + fp->UpdateSize(0); + MultProc(); + fp->m_CurPage = sys.m_FileViewCurPage[i]; + fp->SetCurPage(); + for( int j = 0; j < MaxPage; j++ ){ + CFILEV *cp = fp->pFileV[j]; + cp->m_Folder = sys.m_FileViewFolder[i][j].c_str(); + cp->m_Name = sys.m_FileViewName[i][j].c_str(); + cp->m_CurPage = sys.m_FileViewFMPage[i][j]; + cp->m_UseIndex = cp->m_CurPage & 0x80000000 ? 1 : 0; + cp->m_Type = (cp->m_CurPage >> 16) & 7; + cp->m_CurPage &= 0x0000ffff; + } + if( ttl ){ + fp->m_TitleBar = (sys.m_FileViewFlag[i] == 1) ? 1 : 0; + } + fp->SBMode->Down = sys.m_FileViewMode[i]; + fp->UD->Max = SHORT(pFileView[i]->pCurPage->m_CurPage + 1); + fp->UD->Position = SHORT(pFileView[i]->pCurPage->m_CurPage); + fp->SetViewPos(sys.m_FileViewLeft[i], sys.m_FileViewTop[i], sys.m_FileViewWidth[i], sys.m_FileViewHeight[i]); + if( ttl ){ + if( !fp->m_TitleBar ) fp->UpdateTitlebar(); + } + MultProc(); + pFileView[i] = fp; + if( ttl && TabS->TabIndex && fp->m_Overlap && + ((pStockView == NULL) || pStockView->Visible) + ){ + fp->Visible = FALSE; + fp->m_Suspend = 1; + } + else { + fp->Visible = TRUE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVFClick(TObject *Sender) +{ + int i; + for( i = 0; i < 8; i++ ){ + if( pFileView[i] == NULL ){ + ShowFileView(i, 0); + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHACDClick(TObject *Sender) +{ + AnsiString as; + + as = sys.m_AutoSaveDir; + if( InputMB("MMSSTV", MsgEng ? + "Please enter a copy folder name": + "コピー先のフォルダ名を入力して下さい.", as) == TRUE + ){ + jstrupr(as.c_str()); + sys.m_AutoSaveDir = as; + PBoxHist->DragMode = sys.m_AutoSaveDir.IsEmpty() ? dmManual : dmAutomatic; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHWebClick(TObject *Sender) +{ + WebRef.ShowHTML("http://mmhamsoft.amateur-radio.ca/"); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHRefClick(TObject *Sender) +{ + WebRef.ShowHTML(MsgEng ? "http://groups.yahoo.com/group/MM-SSTV/" : "http://www.egroups.co.jp/group/mmhamsoft/"); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::EditQSLDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept) +{ + Accept = FALSE; + if( sys.m_AutoSaveDir.IsEmpty() ) return; + + if( Source == PBoxHist ){ + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + Accept = TRUE; + } + } + else if( Source == PBoxTX ){ + Accept = TRUE; + } + else if( (pHistView != NULL) && (pHistView->IsPBox(Source) >= 0) ){ + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + Accept = TRUE; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::EditQSLDragDrop(TObject *Sender, TObject *Source, + int X, int Y) +{ + if( (Source == PBoxHist) || + ((pHistView != NULL) && (pHistView->IsPBox(Source) >= 0)) + ){ + if( UDHist->Position < RxHist.m_Head.m_Cnt ){ + SYSTEMTIME tim = RxHist.m_File[RxHist.m_CurRead].m_UTC; + AutoCopyJob(tim, pBitmapHist); + } + } + else if( Source == PBoxTX ){ + SYSTEMTIME tim; + GetUTC(&tim); + AutoCopyJob(tim, pBitmapTX); + } +} + +void __fastcall TMmsstv::InitProfile(void) +{ + int i; + PRODEM *mp = m_DemPro; + for( i = 0; i <= 8; i++, mp++ ){ + mp->Name = ""; + mp->VCOGain = 1.0; + mp->loopOrder = 1; + mp->loopFC = 1500; + mp->OutOrder = 3; + mp->OutFC = 900; + mp->Type = 2; + mp->crossOutOrder = 3; + mp->crossOutFC = 900; + mp->crossType = 0; + mp->crossSmooz = 2200; + mp->DemOff = 0; + mp->DemWhite = 128.0/16384.0; + mp->DemBlack = 128.0/16384.0; + mp->Differentiator = 0; + mp->DiffLevel = 0.8; + mp->DemCalibration = 0; + double *dp = mp->Dem17; + *dp++ = -1.636467e+04; + *dp++ = -1.428800e+04; + *dp++ = -1.223433e+04; + *dp++ = -1.019400e+04; + *dp++ = -8.179333e+03; + *dp++ = -6.145000e+03; + *dp++ = -4.088667e+03; + *dp++ = -2.063000e+03; + *dp++ = -1.233333e+01; + *dp++ = 2.050000e+03; + *dp++ = 4.105000e+03; + *dp++ = 6.209000e+03; + *dp++ = 8.332667e+03; + *dp++ = 1.045133e+04; + *dp++ = 1.256500e+04; + *dp++ = 1.463267e+04; + *dp = 1.663133e+04; + } + + mp = m_DemPro; + mp->Name = MsgEng ? "Hilbert transform" : "ヒルベルト変換"; + mp->Type = 2; + + mp++; + mp->Name = MsgEng ? "Zero crossing" : "ゼロクロス検波"; + mp->Type = 1; + mp->crossOutOrder = 3; + mp->crossOutFC = 900; + mp->DemCalibration = 1; + + mp++; + mp->Name = MsgEng ? "Zero crossing with Differentiator" : "ゼロクロス検波+微分処理"; + mp->Type = 1; + mp->crossOutOrder = 3; + mp->crossOutFC = 900; + mp->Differentiator = 1; + mp->DemCalibration = 1; + + m_DemPro[8].Type = 2; + m_DemPro[8].DemCalibration = 0; +} + +//--------------------------------------------------------------------------- +TMenuItem *__fastcall TMmsstv::GetKP(int n) +{ + TMenuItem *tbl[]={ + KP1, KP2, KP3, KP4, KP5, KP6, KP7, KP8, + }; + return tbl[n]; +} +//--------------------------------------------------------------------------- +TMenuItem *__fastcall TMmsstv::GetKPA(int n) +{ + TMenuItem *tbl[]={ + KPA1, KPA2, KPA3, KPA4, KPA5, KPA6, KPA7, KPA8, + }; + return tbl[n]; +} +//--------------------------------------------------------------------------- +TMenuItem *__fastcall TMmsstv::GetKPD(int n) +{ + TMenuItem *tbl[]={ + KPD1, KPD2, KPD3, KPD4, KPD5, KPD6, KPD7, KPD8, + }; + return tbl[n]; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateProFileMenu(void) +{ + int i; + for( i = 0; i < 8; i++ ){ + TMenuItem *tp = GetKP(i); + TMenuItem *dp = GetKPD(i); + if( m_DemPro[i].Name.IsEmpty() ){ + char bf[32]; + sprintf(bf, "Profile%d", i + 1); + tp->Caption = bf; + tp->Enabled = FALSE; + dp->Caption = bf; + dp->Enabled = FALSE; + } + else { + tp->Caption = m_DemPro[i].Name; + tp->Enabled = TRUE; + dp->Caption = tp->Caption; + dp->Enabled = TRUE; + } + GetKPA(i)->Caption = tp->Caption; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KPAClick(TObject *Sender) +{ + if( pSound == NULL ) return; + int i; + for( i = 0; i < 8; i++ ){ + TMenuItem *tp = GetKPA(i); + if( Sender == tp ){ + AnsiString as = tp->Caption; + if( InputMB(MsgEng ? "Assign profile" : "プロファイルの登録", (Font->Charset != SHIFTJIS_CHARSET) ? "Enter name" : "名前を入力", as) == TRUE ){ + m_DemPro[i].Name = as; + m_DemPro[i].VCOGain = pDem->m_pll.m_vcogain; + m_DemPro[i].loopOrder = pDem->m_pll.m_loopOrder; + m_DemPro[i].loopFC = pDem->m_pll.m_loopFC; + m_DemPro[i].OutOrder = pDem->m_pll.m_outOrder; + m_DemPro[i].OutFC = pDem->m_pll.m_outFC; + m_DemPro[i].Type = pDem->m_Type; + m_DemPro[i].crossOutOrder = pDem->m_fqc.m_outOrder; + m_DemPro[i].crossOutFC = pDem->m_fqc.m_outFC; + + m_DemPro[i].crossType = pDem->m_fqc.m_Type; + m_DemPro[i].crossSmooz = pDem->m_fqc.m_SmoozFq; + + m_DemPro[i].DemOff = sys.m_DemOff; + m_DemPro[i].DemWhite = sys.m_DemWhite; + m_DemPro[i].DemBlack = sys.m_DemBlack; + m_DemPro[i].DemCalibration = sys.m_DemCalibration; + for( int j = 0; j < 17; j++ ){ + m_DemPro[i].Dem17[j] = sys.m_Dem17[j]; + } + m_DemPro[i].Differentiator = sys.m_Differentiator; + m_DemPro[i].DiffLevel = sys.m_DiffLevelP; + UpdateProFileMenu(); + } + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KPDClick(TObject *Sender) +{ + if( pSound == NULL ) return; + int i; + for( i = 0; i < 8; i++ ){ + if( Sender == GetKPD(i) ){ + m_DemPro[i].Name = ""; + UpdateProFileMenu(); + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SetProFile(int n) +{ + pDem->m_pll.SetVcoGain(m_DemPro[n].VCOGain); + pDem->m_pll.m_loopOrder = m_DemPro[n].loopOrder; + pDem->m_pll.m_loopFC = m_DemPro[n].loopFC; + pDem->m_pll.m_outOrder = m_DemPro[n].OutOrder; + pDem->m_pll.m_outFC = m_DemPro[n].OutFC; + pDem->m_pll.MakeLoopLPF(); + pDem->m_pll.MakeOutLPF(); + pDem->m_Type = m_DemPro[n].Type; + pDem->m_fqc.m_outOrder = m_DemPro[n].crossOutOrder; + pDem->m_fqc.m_outFC = m_DemPro[n].crossOutFC; + pDem->m_fqc.m_Type = m_DemPro[n].crossType; + pDem->m_fqc.m_SmoozFq = m_DemPro[n].crossSmooz; + pDem->m_fqc.CalcLPF(); + + sys.m_DemOff = m_DemPro[n].DemOff; + sys.m_DemWhite = m_DemPro[n].DemWhite; + sys.m_DemBlack = m_DemPro[n].DemBlack; + sys.m_DemCalibration = m_DemPro[n].DemCalibration; + for( int j = 0; j < 17; j++ ){ + sys.m_Dem17[j] = m_DemPro[n].Dem17[j]; + } + MakeCalibrationTable(); + + sys.m_Differentiator = m_DemPro[n].Differentiator; + sys.m_DiffLevelP = m_DemPro[n].DiffLevel; + sys.m_DiffLevelM = sys.m_DiffLevelP / 3.0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KP1Click(TObject *Sender) +{ + if( pSound == NULL ) return; + int i; + for( i = 0; i < 8; i++ ){ + if( Sender == GetKP(i) ){ + SetProFile(i); + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KPDefClick(TObject *Sender) +{ + SetProFile(8); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KPInitClick(TObject *Sender) +{ + InitProfile(); + SetProFile(8); + UpdateProFileMenu(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KPClick(TObject *Sender) +{ + int i; + for( i = 0; i < 8; i++ ){ + int f = 0; + if(GetKP(i)->Enabled ){ + if( m_DemPro[i].VCOGain != pDem->m_pll.m_vcogain ) f++; + if( m_DemPro[i].loopOrder != pDem->m_pll.m_loopOrder ) f++; + if( m_DemPro[i].loopFC != pDem->m_pll.m_loopFC) f++; + if( m_DemPro[i].OutOrder != pDem->m_pll.m_outOrder) f++; + if( m_DemPro[i].OutFC != pDem->m_pll.m_outFC ) f++; + if( m_DemPro[i].Type != pDem->m_Type ) f++; + if( m_DemPro[i].crossOutOrder != pDem->m_fqc.m_outOrder ) f++; + if( m_DemPro[i].crossOutFC != pDem->m_fqc.m_outFC ) f++; + + if( m_DemPro[i].crossType != pDem->m_fqc.m_Type ) f++; + if( m_DemPro[i].crossSmooz != pDem->m_fqc.m_SmoozFq ) f++; + + if( m_DemPro[i].DemOff != sys.m_DemOff ) f++; + if( m_DemPro[i].DemWhite != sys.m_DemWhite ) f++; + if( m_DemPro[i].DemBlack != sys.m_DemBlack ) f++; + if( m_DemPro[i].DemCalibration != sys.m_DemCalibration ) f++; + + if( m_DemPro[i].Differentiator != sys.m_Differentiator ) f++; + if( m_DemPro[i].DiffLevel != sys.m_DiffLevelP ) f++; + + GetKP(i)->Checked = f ? FALSE : TRUE; + } + else { + GetKP(i)->Checked = FALSE; + } + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisNameChange(TObject *Sender) +{ + if( DrawMain.IsMacro("%n")||DrawMain.IsMacro("%J") ){ + TempDelay(); + SBULog->Enabled = TRUE; + UpdateUI(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisQTHChange(TObject *Sender) +{ + if( DrawMain.IsMacro("%q") ){ + TempDelay(); + SBULog->Enabled = TRUE; + UpdateUI(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::EditNoteChange(TObject *Sender) +{ + if( DrawMain.IsMacro("%o") ){ + TempDelay(); + SBULog->Enabled = TRUE; + UpdateUI(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBTXFilClick(TObject *Sender) +{ + TPicFilterDlg *pBox = new TPicFilterDlg(this); + if( pBox->Execute(pBitmapTXM) == TRUE ){ + MakeTxBitmap(0); + PBoxTXPaint(NULL); + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBHistFilClick(TObject *Sender) +{ + TPicFilterDlg *pBox = new TPicFilterDlg(this); + if( pBox->Execute(pBitmapHist) == TRUE ){ + PBoxHistPaint(NULL); + DrawMain.UpdatePic(pBitmapHistF); + UpdatePic(); + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFW30Click(TObject *Sender) +{ + sys.m_FFTWidth = 0; + InitDrawFFT(); + PBoxG->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFW20Click(TObject *Sender) +{ + sys.m_FFTWidth = 1; + InitDrawFFT(); + PBoxG->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFW15Click(TObject *Sender) +{ + sys.m_FFTWidth = 2; + InitDrawFFT(); + PBoxG->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRBClick(TObject *Sender) +{ + InitCustomColor(ColorDialog); + AddCustomColor(ColorDialog, sys.m_ColorRXB); + ColorDialog->Color = sys.m_ColorRXB; + SetDisPaint(); + if( ColorDialog->Execute() == TRUE ){ + sys.m_ColorRXB = ColorDialog->Color; + PanelRX->Color = sys.m_ColorRXB; + PanelHist->Color = sys.m_ColorRXB; + } + ResDisPaint(); +} +#if 0 +///---------------------------------------------------------------- +/// 多項式計算を行う +double Teira(double x, const double *p, int n) +{ + double y = *p++; + int i; + for( i = 1; i < n; i++, p++ ){ + y += pow(x, i)*(*p); + } + return y; +} +#endif +//--------------------------------------------------------------------------- +// 多項式変換テーブルを作成する +void __fastcall TMmsstv::MakeCalibrationTable(void) +{ + if( sys.m_DemCalibration ){ + if( pCalibration == NULL ){ + pCalibration = new short[4097]; + } + short *wp = pCalibration; + int i; +// FILE *fp = fopen("F:\\Color.TXT", "wt"); + for( i = 0; i <= 4096; i++, wp++ ){ + int d = (i - 2048) * 8; + int f = 0; + int c = -128; + int j; + for( j = 1; j <= 16; j++, c += 16 ){ + if( d < sys.m_Dem17[j] ){ + *wp = c + (d - sys.m_Dem17[j-1]) * (16.0 / (sys.m_Dem17[j] - sys.m_Dem17[j-1])); + f++; + break; + } + } + if( !f ){ + *wp = 128; + } +// fprintf(fp, "%4u:%d\n", i, *wp); + } +// fclose(fp); + } + else { + if( pCalibration != NULL ){ + delete pCalibration; + pCalibration = NULL; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHDS1Click(TObject *Sender) +{ + sys.m_HDDSize = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHDS2Click(TObject *Sender) +{ + sys.m_HDDSize = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHDS3Click(TObject *Sender) +{ + sys.m_HDDSize = 2; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHDS4Click(TObject *Sender) +{ + sys.m_HDDSize = 3; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHDS5Click(TObject *Sender) +{ + sys.m_HDDSize = 4; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHDS6Click(TObject *Sender) +{ + sys.m_HDDSize = 5; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVWClick(TObject *Sender) +{ + InvMenu(KVW); + FormResize(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFTAClick(TObject *Sender) +{ + sys.m_FFTAGC = sys.m_FFTAGC ? 0 : 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFTD1Click(TObject *Sender) +{ + sys.m_FFTPriority = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFTD2Click(TObject *Sender) +{ + sys.m_FFTPriority = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFTD3Click(TObject *Sender) +{ + sys.m_FFTPriority = 2; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFTD4Click(TObject *Sender) +{ + sys.m_FFTPriority = 3; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KFTD5Click(TObject *Sender) +{ + sys.m_FFTPriority = 4; +} +//--------------------------------------------------------------------------- +TMenuItem *__fastcall TMmsstv::GetKX(int n) +{ + TMenuItem *tbl[]={ + KX1, KX2, KX3, KX4, KX5, KX6, KX7, KX8, + }; + return tbl[n]; +} +//--------------------------------------------------------------------------- +TMenuItem *__fastcall TMmsstv::GetKXA(int n) +{ + TMenuItem *tbl[]={ + KXA1, KXA2, KXA3, KXA4, KXA5, KXA6, KXA7, KXA8, + }; + return tbl[n]; +} +//--------------------------------------------------------------------------- +TMenuItem *__fastcall TMmsstv::GetKXD(int n) +{ + TMenuItem *tbl[]={ + KXD1, KXD2, KXD3, KXD4, KXD5, KXD6, KXD7, KXD8, + }; + return tbl[n]; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateProgramMenu(void) +{ + int i; + for( i = 0; i < 8; i++ ){ + TMenuItem *tp = GetKX(i); + TMenuItem *dp = GetKXD(i); + if( sys.m_ExtName[i].IsEmpty() ){ + char bf[32]; + sprintf(bf, "Program%d", i + 1); + tp->Caption = bf; + dp->Caption = bf; + } + else { + tp->Caption = sys.m_ExtName[i]; + dp->Caption = sys.m_ExtName[i]; + } + if( sys.m_ExtMode[i] ){ + tp->Enabled = TRUE; + dp->Enabled = TRUE; + } + else { + tp->Enabled = FALSE; + dp->Enabled = FALSE; + } + GetKXA(i)->Caption = tp->Caption; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ExecExtCmd(int n) +{ + if( sys.m_ExtCmd[n].IsEmpty() || !IsFile(sys.m_ExtCmd[n].c_str()) ){ + if( !AssignExtCmd(n) ) return; + } + if( sys.m_ExtMode[n] == 2 ){ + KXSClick(NULL); + } + char bf[256]; + SetDirName(bf, sys.m_ExtCmd[n].c_str()); + ::SetCurrentDirectory(bf); + ::WinExec(sys.m_ExtCmd[n].c_str(), SW_SHOWDEFAULT); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KXRClick(TObject *Sender) +{ + CWaitCursor wait; + pDem->OpenCloseRxBuff(); + pSound->fftIN.TrigFFT(); + pSound->m_suspack = 0; + pSound->m_susp = 0; + for( int i = 0; (i < 20) && !pSound->m_suspack; i++ ) ::Sleep(100); + if( pSound->m_susp ){ // 解除に失敗 + m_SuspMinimized = FALSE; + return; + } + COMM.change = 1; + RADIO.change = 1; + OpenCloseCom(); + ::SetCurrentDirectory(BgnDir); + Log.Close(); + Log.Open(NULL, TRUE); + RxHist.Open(); + UpdateHist(); + UpdateModeBtn(); + DisPaint = FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KXSClick(TObject *Sender) +{ + CWaitCursor wait; + if( SBTX->Down ){ + ToRX(); + } + if( pDem->m_Sync ){ + pDem->Stop(); + } + pSound->m_suspack = 0; + pSound->m_susp = 1; + if( pComm != NULL ){ + delete pComm; + pComm = NULL; + } + if( pRadio != NULL ){ + delete pRadio; + pRadio = NULL; + } + Log.Close(); + Log.Open(NULL, TRUE); + RxHist.Close(); + int i; + for( i = 0; (i < 20) && !pSound->m_suspack; i++ ) ::Sleep(100); + pSound->m_suspack = 0; + pDem->FreeRxBuff(); + DisPaint = TRUE; + m_SuspMinimized = (Sender != KXS); + if( m_SuspMinimized ) Application->Minimize(); +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::AssignExtCmd(int n) +{ + int r = FALSE; + int Susp = sys.m_ExtMode[n] == 2 ? 1 : 0; + TExtCmdDlg *pBox = new TExtCmdDlg(this); + if( pBox->Execute(sys.m_ExtName[n], sys.m_ExtCmd[n], Susp) == TRUE ){ + sys.m_ExtMode[n] = Susp + 1; + r = TRUE; + } + delete pBox; + return r; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KX1Click(TObject *Sender) +{ + int i; + for( i = 0; i < 8; i++ ){ + if( Sender == GetKX(i) ){ + ExecExtCmd(i); + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KXA1Click(TObject *Sender) +{ + int i; + for( i = 0; i < 8; i++ ){ + if( Sender == GetKXA(i) ){ + AssignExtCmd(i); + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KXD1Click(TObject *Sender) +{ + int i; + for( i = 0; i < 8; i++ ){ + if( Sender == GetKXD(i) ){ + sys.m_ExtName[i] = ""; + sys.m_ExtMode[i] = 0; + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KXClick(TObject *Sender) +{ + KXR->Enabled = pSound->m_susp ? TRUE : FALSE; + KXS->Enabled = pSound->m_susp ? FALSE : TRUE; + KXSM->Enabled = KXS->Enabled; + UpdateProgramMenu(); + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTAPClick(TObject *Sender) +{ + InvMenu(KTAP); + if( KTAP->Checked ){ + DrawMain.AdjustTransPoint(); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTACClick(TObject *Sender) +{ + SaveUndo(); + DrawMain.AdjustTransColor(pBitmapTemp); + DrawMain.UpdatePic(pBitmapHistF); + UpdateTemp(); +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::KVLSGClick(TObject *Sender) +{ + pDem->m_LevelType = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVLSYClick(TObject *Sender) +{ + pDem->m_LevelType = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHTBClick(TObject *Sender) +{ + if( pHistView != NULL ){ + pHistView->m_TitleBar = pHistView->m_TitleBar ? 0 : 1; + sys.m_HistViewTB = pHistView->m_TitleBar; + pHistView->UpdateTitlebar(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OnMove(TMessage *Message) +{ + if( (pHistView != NULL) && !pHistView->m_TitleBar ){ + pHistView->Top += (Top - m_OrgTop); + pHistView->Left += (Left - m_OrgLeft); + } + for( int i = 0; i < 8; i++ ){ + if( pFileView[i] != NULL && !pFileView[i]->m_TitleBar ){ + pFileView[i]->Top += (Top - m_OrgTop); + pFileView[i]->Left += (Left - m_OrgLeft); + } + } + m_OrgTop = Top; + m_OrgLeft = Left; +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::OpenDialogExecute(int sw) +{ + MultProc(); + m_PreViewFlag = sw; + int r = OpenDialog->Execute(); + MultProc(); + return r; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OpenDialogSelectionChange(TObject *Sender) +{ + if( !m_PreViewFlag ) return; + + MultProc(); + char fname[256]; + StrCopy(fname, AnsiString(OpenDialog->FileName).c_str(), 255); //ja7ude 0521 + LPCSTR pExt = GetEXT(fname); + int f = 0; + if( IsPic(pExt) ){ + if( IsFile(fname) ){ + f = 1; + } + } + else if( !strcmpi(pExt, "MTM") || !strcmpi(pExt, "MTI") ){ + if( IsFile(fname) ){ + f = 2; + } + } + MultProc(); + if( f ){ + CWaitCursor w; + if( pPreView == NULL ){ + pPreView = new TPrevViewBox(NULL); + pPreView->SetViewPos(sys.m_PreViewLeft, sys.m_PreViewTop, sys.m_PreViewWidth, sys.m_PreViewHeight); + } + if( f == 2 ){ + CDrawGroup *pGroup = new CDrawGroup; + if( LoadTemplate(pGroup, fname, pPreView->pBitmap->Canvas) == TRUE ){ + pPreView->pBitmap->Width = pGroup->m_SX; + pPreView->pBitmap->Height = pGroup->m_SY; + FillBitmap(pPreView->pBitmap, pGroup->m_TransCol); + MultProc(); + pGroup->Draw(pPreView->pBitmap->Canvas); + } + pGroup->FreeItem(); + delete pGroup; + } + else { + ::LoadImage(pPreView->pBitmap, fname); + } + MultProc(); + pPreView->UpdateTitle(fname); + pPreView->Show(); + pPreView->Invalidate(); + MultProc(); + } + else { + OpenDialogClose(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OpenDialogClose(TObject *Sender) +{ + if( pPreView != NULL ){ + pPreView->GetViewPos(sys.m_PreViewLeft, sys.m_PreViewTop, sys.m_PreViewWidth, sys.m_PreViewHeight); + delete pPreView; + pPreView = NULL; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::KTPAClick(TObject *Sender) +{ + if(DrawMain.pSel->m_Command == CM_PIC){ + CDrawPic *pPic = (CDrawPic *)DrawMain.pSel; + if( !pPic->m_Type ){ + SBHistFilClick(NULL); + } + else { + TPicFilterDlg *pBox = new TPicFilterDlg(this); + if( pBox->Execute(pPic->pBitmap) == TRUE ){ + UpdatePic(); + DeleteUndo(); + } + delete pBox; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PopupMPopup(TObject *Sender) +{ + int *ip = ((m_MainPage == pgTX)||(m_MainPage == pgTemp)) ? m_ModeAssignTX : m_ModeAssignRX; + int n = 0; + int m = ip[m_ExtMode]; + int i; + int w, h; + char bf[128]; + TMenuItem *pm; + for( i = 0; i < smEND; i++ ){ + if( n < PopupM->Items->Count ){ + pm = PopupM->Items->Items[n]; + } + else { + pm = new TMenuItem (this); + } + int mm = SSTVModeOdr[i]; + int dm; + SSTVSET.GetPictureSize(w, dm, h, mm); + double tw = SSTVSET.GetTiming(mm); + if( ((mm >= smPD50) && (mm <= smPD290)) || ((mm >= smMP73) && (mm <= smMP175)) || ((mm >= smMN73) && (mm <= smMN140)) || ((mm >= smR24) && (mm <= smRM12))) tw *= 0.5; + tw = ((tw * h) / 1000.0) + 0.5; + if( ((mm >= smR24) && (mm <= smRM12)) ){ + w /= 2; + h /= 2; + } + sprintf(bf, "%s\t(%dx%d %us)", SSTVModeList[mm], w, h, int(tw)); +// pm->Break = mm == smMP73 ? mbBarBreak : mbNone; + pm->Caption = bf; + pm->RadioItem = TRUE; + pm->OnClick = KMClick; + pm->Checked = (m == mm) ? TRUE : FALSE; + pm->Enabled = ((m == mm) || (FindModeAssign(ip, mm) < 0)) ? TRUE : FALSE; + if( n >= PopupM->Items->Count ){ + PopupM->Items->Insert(n, pm); + } + n++; + } + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KMClick(TObject *Sender) +{ + int i; + for( i = 0; i < PopupM->Items->Count; i++ ){ + if( PopupM->Items->Items[i] == Sender ){ + int mode = SSTVModeOdr[i]; + if( ((m_MainPage == pgTX)||(m_MainPage == pgTemp)) ){ + m_ModeAssignTX[m_ExtMode] = mode; + if( GetModeBtn(m_ExtMode)->Down ){ + ChangeTxMode(mode); + } + if( !pDem->m_Sync || (SSTVSET.m_Mode != m_ModeAssignRX[m_ExtMode]) ){ + m_ModeAssignRX[m_ExtMode] = mode; + } + } + else { + m_ModeAssignRX[m_ExtMode] = mode; + if( !SBTX->Down || (SSTVSET.m_TxMode != m_ModeAssignTX[m_ExtMode]) ){ + if( SSTVSET.m_TxMode == m_ModeAssignTX[m_ExtMode] ){ + m_ModeAssignTX[m_ExtMode] = mode; + ChangeTxMode(mode); + } + else { + m_ModeAssignTX[m_ExtMode] = mode; + } + } + } + break; + } + } + UpdateModeBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBMMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + TSpeedButton *tp = (TSpeedButton *)Sender; + m_ExtMode = GetButtonNo(tp); + if( tp->Down ){ + if( SBTX->Down ) return; + } + PopupM->Popup(Left + GBMode->Left + tp->Left + tp->Width/2, Top + GBMode->Top + tp->Top + tp->Height); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::ChangeTxMode(int mode) +{ + SSTVSET.GetPictureSize(m_TXW, m_TXH, m_TXPH, mode); + UpdateTXUI(); + int rep = (sys.m_Repeater && pDem->m_Repeater) ? 1 : 0; + if( (pBitmapTXM->Width != m_TXW) || (pBitmapTXM->Height != m_TXH) ){ + if( KSIS->Checked || rep ){ + ReSizeBitmap(pBitmapTXM, m_TXW, m_TXH); + } + else { + pBitmapTXM->Width = m_TXW; + pBitmapTXM->Height = m_TXH; + } + pBitmapTX->Width = m_TXW; + pBitmapTX->Height = m_TXH; + if( !KSIS->Checked || !DrawMain.m_Cnt ){ + if( !rep ){ + DrawMain.m_SX = m_TXW; + DrawMain.m_SY = m_TXH; + } + } + UpdatePic(); + if( sys.m_ShowSizeStock ){ + UpdateTabS(); + } + } + else if( sys.m_Repeater && pDem->m_Repeater ){ + UpdatePic(); + } + if( (SSTVSET.m_TxMode != mode) && KSAM->Checked && !rep ){ + m_TxClipType = (m_TXPH == 240) ? 2 : 0; + UpdateTxClip(); + UpdatePic(); + } + SSTVSET.m_TxMode = mode; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSSDClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + sys.m_ShowSizeTX = sys.m_ShowSizeTX ? FALSE : TRUE; + PBoxTX->Invalidate(); + } + else { + sys.m_ShowSizeStock = sys.m_ShowSizeStock ? FALSE : TRUE; + UpdateTabS(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTSZClick(TObject *Sender) +{ + int w, h; + + if( Sender == KTSZ1 ){ + w = 320; h = 256; + } + else if( Sender == KTSZ2 ){ + w = 512; h = 400; + } + else if( Sender == KTSZ3 ){ + w = 640; h = 496; + } + else if( Sender == KTSZ4 ){ + w = 800; h = 616; + } + else { + w = m_TXW; h = m_TXH; + } + SaveUndo(); + DrawMain.m_SX = w; + DrawMain.m_SY = h; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTSDClick(TObject *Sender) +{ + sys.m_ShowSizeTemp = sys.m_ShowSizeTemp ? FALSE : TRUE; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHSDClick(TObject *Sender) +{ + sys.m_ShowSizeHist = sys.m_ShowSizeHist ? FALSE : TRUE; + PBoxHist->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRSDClick(TObject *Sender) +{ + sys.m_ShowSizeRX = sys.m_ShowSizeRX ? FALSE : TRUE; + PBoxRX->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdateSBTO(void) +{ + SBTO->Enabled = (!SBTX->Down && (pDem->m_LoopBack == 2) && (SSTVSET.m_SampFreq != sys.m_SampFreq)) ? TRUE : FALSE; + CSSTVDEM *dp = pDem; + BOOL f = ( ((dp->m_StgBuf != NULL) || WaveStg.IsOpen()) && (dp->m_wStgLine >= 16) && (SSTVSET.m_Mode != smAVT) ) ? TRUE : FALSE; + SBAdj->Enabled = f; + SBPL->Enabled = f; + SBPR->Enabled = f; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBTOClick(TObject *Sender) +{ + double r = (sys.m_SampFreq * SSTVSET.m_TxSampFreq)/ SSTVSET.m_SampFreq; + r -= sys.m_SampFreq; + r = NormalSampFreq(r, 100); + sys.m_TxSampOff = r; + pMod->m_vco.SetSampleFreq(sys.m_SampFreq + sys.m_TxSampOff); + SBTO->Enabled = FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRCSClick(TObject *Sender) +{ + CorrectSlant(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRCRClick(TObject *Sender) +{ + RedrawAdjustSync(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRSRClick(TObject *Sender) +{ + if( sys.m_SampFreq != SSTVSET.m_SampFreq ){ + CWaitCursor w; + + SSTVSET.m_SampFreq = sys.m_SampFreq; + RedrawSampFreq(FALSE); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBRXIDClick(TObject *Sender) +{ + pDem->m_fskdecode = SBRXID->Down; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSOFFClick(TObject *Sender) +{ + int type = sys.m_FFTType; + pSound->fftIN.TrigFFT(); + if( Sender == KSOFF ){ + sys.m_FFTType = 0; + } + else if( Sender == KSFFT ){ + sys.m_FFTType = 1; + } + else { + sys.m_FFTType = 2; + } + if( !sys.m_FFTType ){ + DrawFFT(1); + PBoxFFT->Invalidate(); + if( KVW->Checked ){ + DrawWater(1); + PBoxWater->Invalidate(); + } + } + else if( type != sys.m_FFTType ){ + switch(sys.m_FFTType){ + case 1: + if( sys.m_FFTGain >= 4 ) sys.m_FFTGain = 1; + break; + case 2: + if( sys.m_FFTGain < 4 ) sys.m_FFTGain = 5; + break; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBRXIDMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + if( PopupC->Items->Count ){ + TControl *tp = (TControl *)Sender; + PopupC->Popup(Left + GBLog->Left + tp->Left + SBRXID->Width/2, m_MW + Top + GBLog->Top + tp->Top); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCClick(TObject *Sender) +{ + TMenuItem *pm = (TMenuItem *)Sender; + if( strcmp(AnsiString(HisCall->Text).c_str(), (AnsiString(pm->Caption).c_str()+6)) ){ + HisCall->Text = pm->Caption.c_str() + 6; + FindCall(); + m_ChangeTemp = 2; + SBULog->Enabled = TRUE; + UpdateUI(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AddCall(LPCSTR p) +{ + SYSTEMTIME now; + GetLocal(&now); + char bf[128]; + sprintf(bf, "%02u:%02u\t%s", now.wHour, now.wMinute, p); + + int i; + TMenuItem *pm; + for( i = 0; i < PopupC->Items->Count; i++ ){ + pm = PopupC->Items->Items[i]; + if( !strcmp(AnsiString(pm->Caption).c_str() + 6, p) ){ + if( !i ){ + pm->Caption = bf; + return; + } + else { + PopupC->Items->Delete(i); + break; + } + } + } + pm = new TMenuItem (this); + pm->Caption = bf; + pm->RadioItem = FALSE; + pm->OnClick = KCClick; + pm->Checked = FALSE; + pm->Enabled = TRUE; + if( (i >= PopupC->Items->Count) && (PopupC->Items->Count == FSKIDMAX) ){ + PopupC->Items->Delete(FSKIDMAX-1); + } + PopupC->Items->Insert(0, pm); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DeleteHistF(void) +{ + if( (pBitmapHistF != NULL) && (pBitmapHistF != pBitmapHist) ){ + delete pBitmapHistF; + } + pBitmapHistF = pBitmapHist; + DrawMain.UpdatePic(pBitmapHistF); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustHistF(void) +{ + m_ReqHistF = 0; + if( KSF->Checked ){ + if( pBitmapHistF == pBitmapHist ) pBitmapHistF = NULL; + pBitmapHistF = MFilter(pBitmapHistF, pBitmapHist, 1); + DrawMain.UpdatePic(pBitmapHistF); + } + else { + DeleteHistF(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::TrigHistF(void) +{ + if( KSF->Checked ){ + DeleteHistF(); + m_ReqHistF = 10; + } + else { + DrawMain.UpdatePic(pBitmapHistF); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSFClick(TObject *Sender) +{ + InvMenu(KSF); + AdjustHistF(); + UpdatePic(1); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTF1Click(TObject *Sender) +{ + CWaitCursor w; + + SaveUndo(); + char fname[256]; + int n; + if( Sender == KTF1 ){ + n = 1; + } + else if( Sender == KTF2 ){ + n = 2; + } + else if( Sender == KTF3 ){ + n = 3; + } + else if( Sender == KTF4 ){ + n = 4; + } + else { + n = 5; + } + sprintf(fname, "%sdef%d.mtm", BgnDir, n); + LoadTemplate(&DrawMain, fname, NULL); + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTKAClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + SaveUndo(); + DrawMain.pSel->KeepAspect(); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTOSClick(TObject *Sender) +{ + if( DrawMain.pSel != NULL ){ + SaveUndo(); + DrawMain.pSel->SetOrgSize(); + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UDStockMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + int n = UDStock->Position; + int w = UDStock->Width/2; + int m = n % 5; + if( X >= w ){ + n += (5 - m); + } + else if( m ){ + n -= m; + } + else { + n -= 5; + } + int max = UDStock->Max + 1; + if( n < 0 ) n += max; + if( n >= max ) n -= max; + n = n - (n % 5); + UDStock->Position = SHORT(n); + UDStockClick(NULL, btNext); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRI1Click(TObject *Sender) +{ + if( Sender == KRI1 ){ + m_SyncAccuracy = 0; + } + else if( Sender == KRI2 ){ + m_SyncAccuracy = 1; + } + else { + m_SyncAccuracy = 2; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRCDClick(TObject *Sender) +{ + InvMenu(KRCD); + if( pRxView != NULL ){ + KVRClick(NULL); + if( !KRCD->Checked ) Application->Restore(); + KVRClick(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KORepClick(TObject *Sender) +{ + TRepSetDlg *pBox = new TRepSetDlg(this); + int r = pBox->Execute(); + if( r != mrCancel ){ + InitDrawFFT(); + PBoxG->Invalidate(); + UpdateTitle(); + if( (r == 1024) && pDem->m_Repeater ){ + SendBeacon(); + } + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KEWClick(TObject *Sender) +{ + if( Sender == KEW1 ){ + sys.m_Way240 = 0; + } + else if( Sender == KEW2 ){ + sys.m_Way240 = 1; + } + else if( Sender == KEW3 ){ + sys.m_Way240 = 2; + } + else { + sys.m_Way240 = 3; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustPage(int sw) +{ + switch(sw){ + case pgRX: + if( m_MainPage != pgRX ){ + m_MainPage = pgRX; + Page->ActivePage = TabRX; + PageChange(NULL); + } + break; + case pgHist: + if( m_MainPage != pgHist ){ + m_MainPage = pgHist; + Page->ActivePage = TabHist; + PageChange(NULL); + } + break; + case pgTX: + if( m_MainPage != pgTX ){ + m_MainPage = pgTX; + Page->ActivePage = TabTX; + PageChange(NULL); + } + break; + case pgTemp: + if( m_MainPage != pgTemp ){ + m_MainPage = pgTemp; + Page->ActivePage = TabTemp; + PageChange(NULL); + } + break; + default: + if( (m_MainPage != pgTX) && (m_MainPage != pgTemp) ){ + m_MainPage = pgTX; + Page->ActivePage = TabTX; + PageChange(NULL); + } + break; + } +} +// +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::Repeater(void) +{ + CSSTVDEM *dp = pDem; + switch(dp->m_repmode){ + case 3: + SetBeaconDelay(); + dp->m_repANS++; + SendCWID(sys.m_RepAnsCW.c_str()); + if( dp->m_SyncMode < 0 /* !SBAuto->Down*/ ){ + dp->Stop(); + dp->m_SyncMode = 0; + UpdateModeBtn(); + UpdateUI(); + } + dp->m_repmode++; + break; + case 9: + SetBeaconTick(); + if( !sys.m_RepFolder.IsEmpty() ){ + SYSTEMTIME tim; + ::GetUTC(&tim); + if( Log.m_LogSet.m_TimeZone == 'I' ){ + UTCtoJST(&tim); + } + char fname[256]; + char abf[2]; + abf[0] = abf[1] = 0; + if( LastC(sys.m_RepFolder.c_str()) != '\\' ) abf[0] = '\\'; + sprintf(fname, "%s%s%04u%02u%02u%02u%02u.jpg", sys.m_RepFolder.c_str(), abf, + tim.wYear, + tim.wMonth, + tim.wDay, + tim.wHour, + tim.wMinute + ); + SaveJPEG(pBitmapTX, fname); + } + AdjustPage(pgTX); + ToTX(); + dp->m_repTX++; + dp->m_repmode++; + m_RepTXPos++; + break; + } + if( sys.m_RepBeacon ){ + DWORD NTick = ::GetTickCount(); + DWORD CTick = m_RepTick + (sys.m_RepBeacon * 1000); + if( dp->m_RepSQ && (dp->m_repsig > dp->m_RepSQ) ){ // 信号検出中 + if( CTick < (NTick + sys.m_RepQuietnessTime*1000) ){ // 300s前の時は延長 + m_RepTick = NTick - ((sys.m_RepBeacon - sys.m_RepQuietnessTime) * 1000); + } + } + else if( (CTick < NTick) && !dp->m_repmode ){ + m_RepTick = NTick; + SendBeacon(); + } + } +} +//--------------------------------------------------------------------------- +int __fastcall TMmsstv::LoadRepTemplate(LPCSTR pList, int &Pos) +{ + char bf[256]; + StrCopy(bf, pList, sizeof(bf)-1); + LPSTR t, p; + int max, n; + for( max = 0, p = bf; *p; max++ ){ + p = StrDlm(t, p); + if( !*SkipSpace(t) ) break; + } + if( Pos >= max ) Pos = 0; + StrCopy(bf, pList, sizeof(bf)-1); + for( n = 0, p = bf; n < Pos; n++ ){ + p = StrDlm(t, p); + } + StrDlm(t, p); + t = SkipSpace(t); + clipsp(t); + int gf = 0; + if( *t ){ + if( *t == '#' ){ + t++; + gf = 1; + } + n = atoin(t, -1); + if( (n >= 1) && (n <= STOCKMAX) ){ + if( gf ) gf = n; + + LoadStockTemp(&DrawMain, n-1, NULL); + if( !DrawMain.m_Cnt ){ + DrawMain.m_SX = m_TXW; + DrawMain.m_SY = m_TXH; + } + if( !SBUseTemp->Down ){ + SBUseTemp->Down = TRUE; + SBUseTempClick(NULL); + } + } + else { + gf = 0; + } + } + return gf; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SendBeacon(void) +{ + if( pDem->m_repmode >= 2 ) return; + if( SBTX->Down ) ToRX(); + ChangeTxMode(sys.m_RepBeaconMode); + UpdateModeBtn(); + int gf = LoadRepTemplate(sys.m_RepTempBeacon.c_str(), m_RepBeaconPos); + if( gf ){ // 画像のロード + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + LoadBitmapSN(pBitmap, gf); + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + StretchCopyBitmapHW(pBitmapTXM, pBitmap); + UpdatePic(); + delete pBitmap; + } + else { + MakeBeacon(0, sys.m_RepBeaconFilter, 0); + } + AdjustPage(pgTX); + SetBeaconTick(); + if( pDem->m_repmode >= 2 ) return; + m_RepBeaconCount++; + ToTX(); + m_RepBeaconPos++; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SetBeaconTick(void) +{ + m_RepTick = ::GetTickCount(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SetBeaconDelay(void) +{ + DWORD NTick = ::GetTickCount(); + DWORD CTick = m_RepTick + (sys.m_RepBeacon * 1000); + int qtime = sys.m_RepQuietnessTime; + if( qtime < 300 ) qtime = 300; + if( CTick < (NTick + qtime*1000) ){ // 300s前の時は延長 + m_RepTick = NTick - ((sys.m_RepBeacon - qtime) * 1000); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::GetBeaconBitmap(Graphics::TBitmap *pBitmap, int n) +{ + n = (RxHist.m_Head.m_wPnt - 1) - n; + if( n < 0 ) n += RxHist.m_Head.m_Max; + if( n >= RxHist.m_Head.m_Max ) n -= RxHist.m_Head.m_Max; + RxHist.Read(pBitmap, n); +} +//--------------------------------------------------------------------------- +// 0 : 4 pix -> TX +// 1 : 3 pix -> TX +void __fastcall TMmsstv::MakeBeacon(int sw, int fsw, int nn) +{ + if( nn < RxHist.m_Head.m_Cnt ){ + Graphics::TBitmap *pBTX = NULL; + if( sw ) pBTX = DupeBitmap(pBitmapTXM, -1); + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + FillBitmap(pBitmapTXM, sys.m_PicClipColor); + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + Graphics::TBitmap *pBitmapQ = new Graphics::TBitmap(); + + int Y1 = 0; +// int Y2 = pBitmapTXM->Height; + int Y2 = m_TXPH; + if( SBUseTemp->Down && DrawMain.m_Cnt ){ + DrawMain.GetColorBarPos(Y1, Y2); + } + int XW = pBitmapTXM->Width / 2; + int YW = (Y2-Y1) / 2; + pBitmapQ->Width = XW; + pBitmapQ->Height = YW; + int x, y, i; + for( i = 3; i >= 0; i-- ){ + x = (i & 1) ? XW : 0; + y = Y1 + ((i / 2) ? YW : 0); + if( !sw || (i < 3) ){ + if( (i + nn) < RxHist.m_Head.m_Cnt ){ + GetBeaconBitmap(pBitmap, i + nn); + } + else { + GetBeaconBitmap(pBitmap, RxHist.m_Head.m_Cnt - 1); + } + if( fsw && (XW <= (pBitmap->Width / 2)) ){ + Graphics::TBitmap *pBitmapF = MFilter(NULL, pBitmap, 1); + delete pBitmap; + pBitmap = pBitmapF; + } + } + else { + ::CopyBitmap(pBitmap, pBTX); + } + MultProc(); + StretchCopyBitmap(pBitmapQ, pBitmap); + pBitmapTXM->Canvas->Draw(x, y, pBitmapQ); + MultProc(); + } + delete pBitmapQ; + delete pBitmap; + UpdatePic(); + if( pBTX != NULL ) delete pBTX; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MakeReplay(void) +{ + CSSTVDEM *dp = pDem; + if( dp->m_repmode == 6 ){ + if( !CBASave->Checked ) SBWHistClick(NULL); + TrackTxMode(1); + StretchCopyBitmap(pBitmapTXM, pBitmapRX); + int gf = LoadRepTemplate(sys.m_RepTempTX.c_str(), m_RepTXPos); + if( gf ){ // 画像のロード + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + LoadBitmapSN(pBitmap, gf); + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + StretchCopyBitmapHW(pBitmapTXM, pBitmap); + delete pBitmap; + } + UpdatePic(); + dp->m_repmode++; + } + else { + dp->m_repmode = 0; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SendCWID(LPCSTR p) +{ + if( !p || !*p ) return; + CWaitCursor w; + + sys.m_CWIDSpeed = (1110.0 / sys.m_CWIDWPM) - 30.0 + 0.5; + if( pRadio != NULL ) pRadio->SetPTT(1); + if( pComm != NULL ) pComm->SetPTT(1); + LogLink.SetPTT(1); + CSSTVMOD *mp = pMod; + SBTX->Down = TRUE; + SBTX->Update(); + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); + + char bf[256]; + MacroText(bf, p, sizeof(bf)-1); + +#if MEASCWSPEED +DWORD dwBgn = ::GetTickCount(); +#endif + + mp->OpenTXBuf(10); + mp->InitTXBuf(); + for( p = bf; *p; p++ ){ + if( mp->GetBufCnt() >= (9*SampFreq) ){ + break; + } + else { + mp->WriteCWID(*p); + } + } + pSound->m_ReqTx = 1; + for( int i = 0; i < 200; i++ ){ + if( pSound->m_Tx ) break; + ::Sleep(10); + } + while(*p){ // 残留テキストの送出 + if( mp->GetBufCnt() < (3*SampFreq) ){ + mp->WriteCWID(*p); + p++; + } + DrawLvl(); PBoxLvl->Update(); + ::Sleep(200); + if( !pSound->Wave.IsOutOpen() ) break; + } + while( mp->GetBufCnt() ){ + DrawLvl(); PBoxLvl->Update(); + ::Sleep(200); + if( !pSound->Wave.IsOutOpen() ) break; + } + pSound->TrigBCC(); + while( pSound->GetBCC() >= 0 ){ + DrawLvl(); PBoxLvl->Update(); + if( !pSound->Wave.IsOutOpen() ) break; + ::Sleep(200); + } +#if MEASCWSPEED +char bbf[128]; +dwBgn = ::GetTickCount() - dwBgn; +p = bf; +int l; +for(l = 0; *p; p++ ){ + if( *p != ' ' ) l++; +} +double cp = double(l)*60.0*1000.0/double(dwBgn); +double wp = 10.0*60.0*1000.0/double(dwBgn); +sprintf(bbf, "%d, %.3lfcpm, %.3lfwpm, %.3lf", sys.m_CWIDSpeed, cp, wp, wp * (sys.m_CWIDSpeed+30.0)); +Caption = bbf; +#endif + pSound->m_ReqTx = 0; + int tout = (pSound->m_BuffSize * pSound->m_FifoSizeTX * 10) / SSTVSET.m_TxSampFreq; + tout += 10; + for( int i = 0; i < tout; i++ ){ + if( !pSound->m_Tx ) break; + DrawLvl(); PBoxLvl->Update(); + ::Sleep(100); + } + if( pRadio != NULL ) pRadio->SetPTT(0); + if( pComm != NULL ) pComm->SetPTT(0); + LogLink.SetPTT(0); + pMod->CloseTXBuf(); + SBTX->Down = 0; + if( pCtrBtn != NULL ) pCtrBtn->UpdateBtn(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisCallDblClick(TObject *Sender) +{ + TShiftState Shift; + SBRXIDMouseUp(Sender, mbRight, Shift, 0, 0); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::HisQTHDblClick(TObject *Sender) +{ + char Key = VK_RETURN; + HisNameKeyPress(HisQTH, Key); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MoveParent(TWinControl *pNew, TWinControl *pOld, TWinControl *pCtr) +{ + pOld->RemoveControl(pCtr); + pNew->InsertControl(pCtr); + pCtr->Parent = pNew; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DivStockView(void) +{ + if( pStockView == NULL ){ + pStockView = new TStockView(this); + pStockView->SetViewPos(sys.m_StockViewLeft, sys.m_StockViewTop, sys.m_StockViewWidth, sys.m_StockViewHeight); + pStockView->Caption = KVSE1->Caption; + MultProc(); + MoveParent(pStockView, this, TabS); + TabS->Align = alClient; + MultProc(); + MoveParent(pStockView, this, PCS); + MultProc(); + PCS->Top = 0; + CBSTemp->Visible = FALSE; + CBSDraft->Visible = FALSE; + PCS->Width = 100; + UDStock->Left = PCS->Width - UDStock->Width; + LS->Left = UDStock->Left - 4 - LS->Width; + pStockView->Visible = KVSE1->Checked; + } + else { + pStockView->GetViewPos(sys.m_StockViewLeft, sys.m_StockViewTop, sys.m_StockViewWidth, sys.m_StockViewHeight); + MoveParent(this, pStockView, TabS); + TabS->Align = alBottom; + MoveParent(this, pStockView, PCS); + MultProc(); + CBSTemp->Visible = TRUE; + CBSDraft->Visible = TRUE; + + MultProc(); + delete pStockView; + pStockView = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DivWaterView(void) +{ + if( pWaterView == NULL ){ + pWaterView = new TStockView(this); + pWaterView->SetViewPos(sys.m_WaterViewLeft, sys.m_WaterViewTop, sys.m_WaterViewWidth, sys.m_WaterViewHeight); + pWaterView->Caption = KVSE2->Caption; + MultProc(); + PBoxG->Parent = pWaterView; + MoveParent(pWaterView, this, PanelLvl); + MoveParent(pWaterView, this, PanelFFT); + MoveParent(pWaterView, this, PanelWater); + + pLogView = new TStockView(this); + pLogView->SetViewPos(sys.m_LogViewLeft, sys.m_LogViewTop, sys.m_LogViewWidth, sys.m_LogViewHeight); + pLogView->Caption = KVSE3->Caption; + MultProc(); + MoveParent(pLogView, this, GBLog); + GBLog->Align = alClient; + + AlignFix.Resume(GBLog); + pLogView->AlignList.EntryControl(GBLog, 367, 164, GBLog->Font); + AlignFix.Resume(GBMode); + AlignFix.Resume(GB1); + pWaterView->Visible = KVSE2->Checked; + pLogView->Visible = KVSE3->Checked; + } + else { + pWaterView->GetViewPos(sys.m_WaterViewLeft, sys.m_WaterViewTop, sys.m_WaterViewWidth, sys.m_WaterViewHeight); + pLogView->GetViewPos(sys.m_LogViewLeft, sys.m_LogViewTop, sys.m_LogViewWidth, sys.m_LogViewHeight); + + PBoxG->Parent = this; + MoveParent(this, pWaterView, PanelLvl); + MoveParent(this, pWaterView, PanelFFT); + MoveParent(this, pWaterView, PanelWater); + + MoveParent(this, pLogView, GBLog); + GBLog->Align = alNone; + + delete pWaterView; + pWaterView = NULL; + delete pLogView; + pLogView = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DivControl(int sw) +{ + switch(sw){ + case 1: // ストック画面のみ分離 + if( pWaterView != NULL ) DivWaterView(); + if( pStockView == NULL ) DivStockView(); + break; + case 2: // すべて分離 + if( pStockView == NULL ) DivStockView(); + if( pWaterView == NULL ) DivWaterView(); + break; + default: // すべて合体 + if( pWaterView != NULL ) DivWaterView(); + if( pStockView != NULL ) DivStockView(); + break; + } + sys.m_DivMode = sw; + FormResize(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVSD1Click(TObject *Sender) +{ + if( Sender == KVSD2 ){ + sys.m_DivMode = 1; + } + else if( Sender == KVSD3 ){ + sys.m_DivMode = 2; + } + else { + sys.m_DivMode = 0; + } + DivControl(sys.m_DivMode); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OpenHistView(void) +{ + MultProc(); + pHistView = new THistViewDlg(this); + MultProc(); + pHistView->m_TitleBar = sys.m_HistViewTB; + pHistView->UpdateTitle(NULL); + pHistView->SetViewPos(sys.m_HistViewLeft, sys.m_HistViewTop, sys.m_HistViewWidth, sys.m_HistViewHeight); + if( !pHistView->m_TitleBar ) pHistView->UpdateTitlebar(); + pHistView->LoadHist(0); + MultProc(); + pHistView->SetPopup(PopupH); + MultProc(); + pHistView->Visible = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CloseHistView(void) +{ + if( pHistView != NULL ){ + pHistView->GetViewPos(sys.m_HistViewLeft, sys.m_HistViewTop, sys.m_HistViewWidth, sys.m_HistViewHeight); + delete pHistView; + pHistView = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHVSClick(TObject *Sender) +{ + if( Sender == KHVS1 ){ + sys.m_HistViewSize = 0; + } + else if( Sender == KHVS2 ){ + sys.m_HistViewSize = 1; + } + else if( Sender == KHVS3 ){ + sys.m_HistViewSize = 2; + } + else { + sys.m_HistViewSize = 3; + } + if( pHistView != NULL ){ + CloseHistView(); + OpenHistView(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRFSClick(TObject *Sender) +{ + CSSTVDEM *dp = pDem; + if( dp->m_Sync && (SSTVSET.m_Mode != smAVT) && (m_SyncRPos >= 0) ){ + if( ABS(m_SyncPos - int(SSTVSET.m_OFP)) >= 5 ){ + int Skip = m_SyncRPos - int(SSTVSET.m_OFP); + if( Skip < 0 ) Skip += int(SSTVSET.m_TW); + dp->m_Skip = Skip; + m_SyncPos = m_SyncRPos = -1; + m_AutoSyncPos = 0x7fffffff; + m_AutoStopCnt = 0; + m_AutoStopACnt = 0; + m_AutoSyncDis = 6; + m_AutoSyncCount++; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSBClick(TObject *Sender) +{ + InitCustomColor(ColorDialog); + AddCustomColor(ColorDialog, sys.m_PicClipColor); + ColorDialog->Color = sys.m_PicClipColor; + SetDisPaint(); + if( ColorDialog->Execute() == TRUE ){ + sys.m_PicClipColor = ColorDialog->Color; + } + if( Sender == KSB ){ + MultProc(); + MakeTxBitmap(1); + PBoxTX->Invalidate(); + } + ResDisPaint(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::UpdatePriority(void) +{ + switch(sys.m_Priority){ + case 1: + ::SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); + break; + case 2: + ::SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); + break; + default: + ::SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHMT3Click(TObject *Sender) +{ + MakeBeacon(Sender == KHMT3 ? 1 : 0, 1, UDHist->Position); + AdjustPage(pgTX); +} + +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::MakeThImage(int mm) +{ + if( m_DragNo < 0 ) return; + + pBitmapTXM = RemakeBitmap(pBitmapTXM, -1); + FillBitmap(pBitmapTXM, sys.m_PicClipColor); + Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); + Graphics::TBitmap *pBitmapQ = new Graphics::TBitmap(); + + int Y1 = 0; +// int Y2 = pBitmapTXM->Height; + int Y2 = m_TXPH; + int X2 = pBitmapTXM->Width; + if( SBUseTemp->Down && DrawMain.m_Cnt ){ + DrawMain.GetColorBarPos(Y1, Y2); + } + int XW = pBitmapTXM->Width / mm; + int YW = (Y2-Y1) / mm; + int x, y, i; + int n = m_DragDataNo; + int m = 0; + for( i = 0; i < STOCKMAX; i++, n++ ){ + MultProc(); + if( n >= STOCKMAX ) n = 0; + LoadBitmapSN(pBitmap, n+1); + if( pBitmap->Modified != FALSE ){ + x = (m % mm) * XW; + y = Y1 + ((m / mm) * YW); + if( ((m % mm) == (mm - 1)) && (x + XW) != X2 ){ + pBitmapQ->Width = X2 - x; + } + else { + pBitmapQ->Width = XW; + } + if( ((m / mm) == (mm - 1)) && (y + YW) != Y2 ){ + pBitmapQ->Height = Y2 - y; + } + else { + pBitmapQ->Height = YW; + } + MultProc(); + StretchCopyBitmapHW(pBitmapQ, pBitmap); + pBitmapTXM->Canvas->Draw(x, y, pBitmapQ); + MultProc(); + m++; + if( m >= (mm*mm) ) break; + } + } + delete pBitmapQ; + delete pBitmap; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSMS4Click(TObject *Sender) +{ + int n; + if( Sender == KSMS4 ){ + n = 2; + } + else if( Sender == KSMS9 ){ + n = 3; + } + else { + n = 4; + } + MakeThImage(n); + AdjustPage(pgTX); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHelpClick(TObject *Sender) +{ + MultProc(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DropOle(int X, int Y, LPCSTR pName, int trans) +{ + CDrawOle *pDraw = (CDrawOle *)DrawMain.MakeItem(CM_OLE); + if( pDraw != NULL ){ + if( X >= 0 ) AdjustTempSC(X, Y); + pDraw->m_Trans = trans; + if( pDraw->LoadFromFile(X, Y, pName) ){ + AddItem(pDraw, 0); + } + else { + delete pDraw; + } + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DropLib(int X, int Y, LPCSTR pName) +{ + AdjustPage(pgTemp); + MultProc(); + CDrawLib *pDraw = (CDrawLib *)DrawMain.MakeItem(CM_LIB); + if( pDraw != NULL ){ + AdjustTempSC(X, Y); + if( X < 0 ){ + X = (DrawMain.m_SX - 160) / 2; + Y = (DrawMain.m_SY - 128) / 2; + } + pDraw->m_X1 = X; pDraw->m_Y1 = Y; + pDraw->m_X2 = X + 160; pDraw->m_Y2 = Y + 128; + if( pDraw->MakeR(pName) ){ + AddItem(pDraw, 0); + } + else { + delete pDraw; + } + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DropPic(int X, int Y, Graphics::TBitmap *pSrc, int type) +{ + AdjustPage(pgTemp); + MultProc(); + CDrawPic *pDraw = (CDrawPic *)DrawMain.MakeItem(CM_PIC); + MultProc(); + if( pDraw != NULL ){ + AdjustTempSC(X, Y); + int lx = DrawMain.m_SX; + int ly = DrawMain.m_SY; + int w = pSrc->Width; + int h = pSrc->Height; + if( (w > lx) || (h > ly) ){ + KeepAspect(lx, ly, w, h); + w = lx; h = ly; + } + if( X < 0 ){ + X = (DrawMain.m_SX - w) / 2; + Y = (DrawMain.m_SY - h) / 2; + } + w++; h++; + AdjustTempView(1); + pDraw->Start(PBoxTemp->Canvas, X, Y); + AdjustTempView(0); + X += w; + Y += h; + pDraw->Making(X, Y); + if( pDraw->FinishR(X, Y) ){ + pDraw->m_Type = type; + pDraw->m_Shape = 0; + pDraw->m_LineStyle = TPenStyle(-1); + ::StretchCopy(pDraw->pBitmap, pSrc, type == 2 ? COLORONCOLOR : HALFTONE); + AddItem(pDraw, 1); + } + else { + delete pDraw; + } + UpdateTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTPBClick(TObject *Sender) +{ + TClipboard *pCB = Clipboard(); + if(pCB->HasFormat(CF_BITMAP)){ + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + try + { + pBitmap->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); + DropPic(-1, 0, pBitmap, (Sender == KTPB) ? 1 : 2); + } + catch (...) + { + } + delete pBitmap; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LoadStockTemp(CDrawGroup *pItem, int n, TCanvas *tp) +{ + char tname[256]; + sprintf(tname, "%st%d.mtm", StockDir, n+1); + if( IsFile(tname) ){ + LoadTemplate(pItem, tname, tp); + } + else { + pItem->FreeItem(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SaveStockTemp(CDrawGroup *pItem, int n) +{ + char tname[256]; + sprintf(tname, "%st%d.mtm", StockDir, n+1); + SaveTemplate(pItem, tname); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::DeleteStockTemp(int n) +{ + char tname[256]; + sprintf(tname, "%st%d.mtm", StockDir, n+1); + unlink(tname); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LoadCurrentTemp(void) +{ + char bf[256]; + sprintf(bf, "%s"TEMPV106C, StockDir); // Current.mtm + if( IsFile(bf) ){ // Ver1.06 + LoadTemplate(&DrawMain, bf, NULL); + sprintf(bf, "%s"TEMPV106L, StockDir); // StrList.mtl + LoadTemplate(&DrawText, bf, NULL); + return; + } + sprintf(bf, "%s"TEMPV105, StockDir); // CurTemp.bin + if( IsFile(bf) ){ // Ver1.05 + try { + char fname[256]; + TFileStream *tp = new TFileStream(bf, fmOpenRead); + if( DrawMain.LoadFromStream(PBoxTemp->Canvas, tp) == TRUE ){ + int i; + for( i = 0; i < STOCKMAX; i++ ){ + if( DrawTemp.LoadFromStream(PBoxTemp->Canvas, tp) == FALSE ) break; + if( DrawTemp.m_Cnt ){ + sprintf(fname, "%st%d.mtm", StockDir, i+1); + if( SaveTemplate(&DrawTemp, fname) == FALSE ) break; + } + } + if( i >= STOCKMAX ){ + DrawText.LoadFromStream(PBoxTemp->Canvas, tp); + } + } + delete tp; + sprintf(fname, "%s"TEMPV105B, StockDir); // CurTemp.105 + chmod(bf, S_IREAD|S_IWRITE); + rename(bf, fname); // CurTemp.bin -> CurTemp.bak + unlink(bf); + DrawTemp.FreeItem(); + } + catch(...){ + } + return; + } + else { // 初期起動 + LoadDefTemp(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBRXFilClick(TObject *Sender) +{ + Graphics::TBitmap *pBitmap = DupeBitmap(pBitmapRX, pf24bit); + TPicFilterDlg *pBox = new TPicFilterDlg(this); + pBox->OKBtn->Enabled = FALSE; + pBox->Execute(pBitmap); + delete pBox; + delete pBitmap; +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::UDHistMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + if( !RxHist.m_Head.m_Cnt ) return; + int n = UDHist->Position; + int w = UDHist->Width/2; + if( X < w ){ + n += 5; + } + else { + n -= 5; + } + int max = RxHist.m_Head.m_Cnt - 1; + if( n < 0 ) n = 0; + if( n >= max ) n = max; + UDHist->Position = SHORT(n); + UDHistClick(NULL, btNext); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::IMenuClick(TObject *Sender) +{ + InvMenu((TMenuItem *)Sender); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVSDClick(TObject *Sender) +{ + KVSE1->Enabled = (pStockView != NULL) ? TRUE : FALSE; + KVSE1->Checked = (pStockView == NULL) || pStockView->Visible ? TRUE : FALSE; + KVSE2->Enabled = (pWaterView != NULL) ? TRUE : FALSE; + KVSE2->Checked = (pWaterView == NULL) || pWaterView->Visible ? TRUE : FALSE; + KVSE3->Enabled = (pLogView != NULL) ? TRUE : FALSE; + KVSE3->Checked = (pLogView == NULL) || pLogView->Visible ? TRUE : FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KVSE1Click(TObject *Sender) +{ + IMenuClick(Sender); + FormResize(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxFFTMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + int notch = pSound->m_notch; + if( Button == mbLeft ){ +// m_FX[4] = int(((fq-m_low)*FFT_SIZE*double(m_XW)/double(FFTSamp*m_FM)) + 0.5); + m_FX[5] = X; + double f = X * double(FFTSamp*m_FM) / (FFT_SIZE*double(m_XW)); + pSound->notch.SetNotchFreq(f + m_low); + pSound->m_notch = 1; + m_SpecDown = 1; + } + else { + pSound->m_notch = pSound->m_notch ? 0 : 1; + } + if( (notch != pSound->m_notch) && pDem->m_Sync ){ + int delay = pSound->notch.m_tap / 2; + if( notch ) delay = -delay; + pDem->m_Skip = delay; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxFFTMouseMove(TObject *Sender, + TShiftState Shift, int X, int Y) +{ + if( m_SpecDown && pSound->m_notch ){ + m_FX[5] = X; + double f = X * double(FFTSamp*m_FM) / (FFT_SIZE*double(m_XW)); + pSound->notch.SetNotchFreq(f + m_low); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PBoxFFTMouseUp(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + m_SpecDown = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBTXMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + KOMClick(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBLMSMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + switch(pSound->m_lms_AN){ + case 1: + KLM2->Checked = TRUE; + break; + case 2: + KLM3->Checked = TRUE; + break; + default: + KLM1->Checked = TRUE; + break; + } + PopupL->Popup(Left + GB1->Left + SBLMS->Left + X + 4, m_MW + Top + GB1->Top + SBLMS->Top); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KLM1Click(TObject *Sender) +{ + int d = GetLMSDelay(); + int n = 0; + if( Sender == KLM2 ){ + n = 1; + } + else if( Sender == KLM3 ){ + n = 2; + } + pSound->lms.SetAN(n); + pSound->m_lms_AN = n; + if( pDem->m_Sync ) pDem->m_Skip = GetLMSDelay() - d; + UpdateLMS(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSAClick(TObject *Sender) +{ + if( m_DragNo >= 0 ){ + AdjustPage(pgTemp); + LoadStockTemp(&DrawTemp, m_DragDataNo, NULL); + AddTemplate(&DrawTemp); + UpdateTemp(); + } +// +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTFSClick(TObject *Sender) +{ + sys.m_DisFontSmooth = sys.m_DisFontSmooth ? FALSE : TRUE; + m_ChangeTemp = 1; + UpdateTemp(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CMMML(TMessage Message) +{ + if( sys.m_LogLink != 2 ) return; + if( LogLink.m_pLink == NULL ) return; + + switch(Message.WParam){ + case MML_NOTIFYSESSION: + LogLink.NotifySession((LPCSTR)Message.LParam); + UpdateLogLink(); + break; + case MML_QRETURN: + if( !LogLink.IsLink() ) return; + if( LogLink.QReturn(&Log.m_sd, (const mmLOGDATA *)Message.LParam) ){ + UpdateTextData(); + } + break; + case MML_VFO: + if( !LogLink.IsLink() ) return; + if( Message.LParam ){ + LogFreq->Text = (LPCSTR)Message.LParam; + } + break; + } + Message.Result = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::CMMMR(TMessage Message) +{ + if( pRadio == NULL ) return; + + switch(Message.WParam){ + case MMR_DEFCOMMAND: + { + LPCSTR p; + switch(Message.LParam){ + case 1: + p = RADIO.CmdRx.c_str(); + break; + case 2: + p = RADIO.CmdTx.c_str(); + break; + default: + p = RADIO.CmdInit.c_str(); + break; + } + pRadio->SendCommand(p); + } + break; + case MMR_VFO: + pRadio->UpdateFreq(double(Message.LParam)/10000.0); + break; + } + Message.Result = TRUE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OnDrawClipboard(TMessage Message) +{ + SBPaste->Enabled = !SBTX->Down && ::IsClipboardFormatAvailable(CF_BITMAP); + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_DRAWCLIPBOARD, Message.WParam, Message.LParam); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OnChangeCbChain(TMessage Message) +{ + if( (HWND)Message.WParam == m_hClipNext ){ + m_hClipNext = (HWND)Message.LParam; + } + if( m_hClipNext ) ::SendMessage(m_hClipNext, WM_CHANGECBCHAIN, Message.WParam, Message.LParam); + Message.Result = 0; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHJClick(TObject *Sender) +{ + ShowHelp(this, "JASTA.TXT", MsgEng); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHNClick(TObject *Sender) +{ + ShowHelp(this, "NVCG.TXT", MsgEng); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBCWMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ +#if 1 + RECT rc; + ::GetWindowRect(TabTX->Handle, &rc); + PopupCW->Popup(rc.left + SBCW->Left + SBCW->Width/2, rc.top + SBCW->Top + SBCW->Height/2); +#else + AnsiString as = sys.m_CWText; + if( InputMB("MMSSTV", MsgEng ? "Enter text" : "テキストを入力", as, TRUE) == TRUE ){ + sys.m_CWText = as; + } +#endif + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSAMClick(TObject *Sender) +{ + KSAM->Checked = !KSAM->Checked; + if( KSAM->Checked ) ChangeTxMode(SSTVSET.m_TxMode); +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::SBListMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ) KOLClick(NULL); +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::PBoxLvlMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbLeft ){ + KVOutClick(NULL); + } + else { + KVOutClick(KVOut); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TMmsstv::SBTXIDClick(TObject *Sender) +{ + sys.m_TXFSKID = SBTXID->Down; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::SBDFontMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y) +{ + if( Button == mbRight ){ + if( DrawMain.pSel != NULL ){ + if( DrawMain.pSel->m_Command == CM_TEXT ){ + SaveUndo(); + CDrawText *pText = (CDrawText *)(DrawMain.pSel); + FontDialog->Font->Assign(pText->pFont); + InvFontCharset(FontDialog->Font); + pText->UpdateFont(FontDialog->Font); + if( KTAP->Checked ) DrawMain.AdjustTransPoint(); + UpdateTemp(); + } + else if( DrawMain.pSel->m_Command == CM_LIB ){ + CDrawLib *pLib = (CDrawLib *)DrawMain.pSel; + LOGFONT lf; + TMemoryStream *sp = SaveUndo(NULL); + if( pLib->GetFont(&lf) ){ + lf.lfCharSet = InvFontCharset(lf.lfCharSet); + pLib->SetFont(&lf); + UpdateTemp(); + UpdateUndo(sp); + } + else { + delete sp; + } + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KTHClick(TObject *Sender) +{ + sys.m_Temp24 = !sys.m_Temp24; + m_ChangeTemp = 1; + UpdatePic(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KEEClick(TObject *Sender) +{ + g_ExecPB.Exec(pBitmapTXM, (HWND)Handle, CM_EDITEXIT, 0); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::OnEditExit(TMessage Message) +{ + if( Message.LParam & 0x40000000 ){ + if( g_ExecPB.IsChanged() ){ + int no = (Message.LParam & 0x00007fff); + if( no == UDHist->Position ){ + if( g_ExecPB.LoadBitmap(pBitmapHist, FALSE) ){ + PBoxHistPaint(NULL); + DrawMain.UpdatePic(pBitmapHistF); + UpdatePic(); + } + } + } + } + else if( Message.LParam & 0x80000000 ){ + if( g_ExecPB.IsChanged() ){ + int no = (Message.LParam & 0x00007fff) + 1; + Graphics::TBitmap *pBitmap = new Graphics::TBitmap; + LoadBitmapSN(pBitmap, no); + if( g_ExecPB.LoadBitmap(pBitmap, FALSE) ){ + SaveBitmapSN(pBitmap, no); + UpdateTabS(); + } + delete pBitmap; + } + } + else if( g_ExecPB.LoadBitmap(pBitmapTXM, FALSE) ){ + AdjustPage(pgTX); + MakeTxBitmap(0); + PBoxTXPaint(NULL); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KSEClick(TObject *Sender) +{ + if( PopupS->PopupComponent == PBoxTX ){ + KEEClick(NULL); + } + else { + if( m_DragNo < 0 ) return; + Graphics::TBitmap *pBitmap = LoadBitmapS(m_DragNo); + g_ExecPB.Exec(pBitmap, (HWND)Handle, CM_EDITEXIT, 0x80000000 + m_DragDataNo); + delete pBitmap; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KXPClick(TObject *Sender) +{ + ExecPB(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KHEClick(TObject *Sender) +{ + g_ExecPB.Exec(pBitmapHist, (HWND)Handle, CM_EDITEXIT, 0x40000000 + UDHist->Position); +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustCWMenu(void) +{ + int max = PopupCW->Items->IndexOf(NCW); + TMenuItem *pm; + AnsiString as; + int i; + for( i = 0; i < sys.m_nCWMenu; i++ ){ + if( i >= max ){ + TMenuItem *pm = new TMenuItem (this); + PopupCW->Items->Insert(i, pm); + max++; + } + pm = PopupCW->Items->Items[i]; + char bf[256]; + MacroText(bf, sys.m_CWMenu[i].c_str(), sizeof(bf)-1); + as = bf; + if( pm->Caption != as ){ + pm->Caption = as; + } + pm->OnClick = KCWSendClick; + } + int N = i; + for( ; i < max; i++ ){ + PopupCW->Items->Delete(N); + } + + max = KCWM->IndexOf(NCWE); + for( i = 0; i < sys.m_nCWMenu; i++ ){ + if( i >= max ){ + TMenuItem *pm = new TMenuItem (this); + KCWM->Insert(i, pm); + max++; + } + pm = KCWM->Items[i]; + if( pm->Caption != sys.m_CWMenu[i] ){ + pm->Caption = sys.m_CWMenu[i]; + } + pm->OnClick = KCWEditClick; + } + N = i; + for( ; i < max; i++ ){ + KCWM->Delete(N); + } + BOOL f = sys.m_nCWMenu != 0; + NCW->Visible = f; + NCWE->Visible = f; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWClick(TObject *Sender) +{ + AnsiString as = sys.m_CWText; + if( InputMB(MsgEng ? "CW button" : "CWボタン", MsgEng ? "Enter text" : "テキストを入力", as, TRUE) == TRUE ){ + sys.m_CWText = as; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::PopupCWPopup(TObject *Sender) +{ + AdjustCWMenu(); + KCWADD->Enabled = sys.m_nCWMenu < CWMENUMAX; + + char bf[256]; + MacroText(bf, sys.m_CWText.c_str(), sizeof(bf)-1); + AnsiString as = MsgEng ? "Set button text... (" : "ボタンの送信テキストの設定... ("; + as += bf; + as += ")"; + KCW->Caption = as; + + switch(sys.m_CWIDWPM){ + case 28: + KCWSH->Checked = TRUE; + break; + case 24: + KCWSM->Checked = TRUE; + break; + case 20: + KCWSL->Checked = TRUE; + break; + case 18: + KCWSLL->Checked = TRUE; + break; + default: + KCWSI->Checked = TRUE; + break; + } + if( KCWSI->Checked ){ + as = sys.m_CWIDWPM; + as += " WPM "; + } + else { + as = ""; + } + as += MsgEng ? "Enter PARIS speed..." : "PARIS速度で入力..."; + KCWSI->Caption = as; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWADDClick(TObject *Sender) +{ + if( sys.m_nCWMenu >= CWMENUMAX ) return; + + AnsiString as; + if( InputMB(MsgEng ? "Add CW menu" : "CWメニュー追加", MsgEng ? "Enter text" : "テキストを入力", as, TRUE) == TRUE ){ + if( !as.IsEmpty() ){ + sys.m_CWMenu[sys.m_nCWMenu++] = as; + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWSendClick(TObject *Sender) +{ + int n = PopupCW->Items->IndexOf((TMenuItem *)Sender); + if( (n >= 0) && (n < sys.m_nCWMenu) ){ + SendCWID(sys.m_CWMenu[n].c_str()); + Application->ProcessMessages(); + SBCW->Down = FALSE; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWEditClick(TObject *Sender) +{ + int n = KCWM->IndexOf((TMenuItem *)Sender); + if( (n >= 0) && (n < sys.m_nCWMenu) ){ + AnsiString as = sys.m_CWMenu[n]; + if( InputMB(MsgEng ? "Edit CW menu" : "CWメニュー編集", MsgEng ? "Enter text (NULL for delete)" : "テキストを入力(NULLでメニューを削除)", as, TRUE) == TRUE ){ + if( as.IsEmpty() ){ + for( int i = n; i < (sys.m_nCWMenu - 1); i++ ){ + sys.m_CWMenu[i] = sys.m_CWMenu[i+1]; + } + sys.m_nCWMenu--; + } + else { + sys.m_CWMenu[n] = as; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWSHClick(TObject *Sender) +{ + sys.m_CWIDWPM = 28; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWSMClick(TObject *Sender) +{ + sys.m_CWIDWPM = 24; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWSLClick(TObject *Sender) +{ + sys.m_CWIDWPM = 20; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWSLLClick(TObject *Sender) +{ + sys.m_CWIDWPM = 18; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KCWSIClick(TObject *Sender) +{ + AnsiString as = sys.m_CWIDWPM; + if( InputMB("MMSSTV", "CW Speed (PARIS 10 - 50 WPM)", as, FALSE) == TRUE ){ + int d; + if( sscanf(as.c_str(), "%d", &d) == 1 ){ + if( (d >= 10) && (d <= 50) ){ + sys.m_CWIDWPM = d; + } + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRSetClick(TObject *Sender) +{ + TRADIOSetDlg *pBox = new TRADIOSetDlg(this); + + if( (sys.m_TxRxName != "NONE") && !strcmp(sys.m_TxRxName.c_str(), RADIO.StrPort) ){ + strcpy(RADIO.StrPort, "NONE"); + RADIO.change = 1; + } + if( pBox->Execute() == TRUE ){ + if( (sys.m_TxRxName != "NONE") && !strcmp(sys.m_TxRxName.c_str(), RADIO.StrPort) ){ + sys.m_TxRxName = "NONE"; + COMM.change = 1; + } + } + delete pBox; + if( COMM.change || RADIO.change ){ + OpenCloseCom(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::LoadRadioDef(LPCSTR pName) +{ + CWaitCursor w; + try { + TMemIniFile *pIniFile = new TMemIniFile(pName); + RADIO.CmdInit = pIniFile->ReadString("RADIO", "CmdInit", RADIO.CmdInit); + RADIO.CmdRx = pIniFile->ReadString("RADIO", "CmdRx", RADIO.CmdRx); + RADIO.CmdTx = pIniFile->ReadString("RADIO", "CmdTx", RADIO.CmdTx); + char bf[32]; + sprintf( bf, "%02X", RADIO.Cmdxx); + AnsiString as = pIniFile->ReadString("RADIO", "Cmdxx", bf); + int d; + sscanf(as.c_str(), "%X", &d); + RADIO.Cmdxx = d; + RADIO.PollType = pIniFile->ReadInteger("RADIO", "PollType", 0); + RADIO.PollInterval = pIniFile->ReadInteger("RADIO", "PollInterval", 0); + delete pIniFile; + OpenCloseCom(); + } + catch(...){ + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRLoadClick(TObject *Sender) +{ + TOpenDialog *pBox = Mmsstv->OpenDialog; + pBox->Options >> ofCreatePrompt; + pBox->Options << ofFileMustExist; + if( MsgEng ){ + pBox->Title = "Open command file"; + pBox->Filter = "Command files(*.rcm)|*.rcm|"; + } + else { + pBox->Title = "コマンド定義ファイルを開く"; + pBox->Filter = "コマンド定義ファイル(*.rcm)|*.rcm|"; + } + pBox->FileName = ""; + pBox->DefaultExt = "rcm"; + pBox->InitialDir = BgnDir; + NormalWindow(this); + if( pBox->Execute() == TRUE ){ + LoadRadioDef(AnsiString(pBox->FileName).c_str()); + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::AdjustRadioMenu(void) +{ + int max = KRadio->IndexOf(NRadio); + TMenuItem *pm; + int i; + for( i = 0; i < m_nRadioMenu; i++ ){ + if( i >= max ){ + TMenuItem *pm = new TMenuItem (this); + KRadio->Insert(i, pm); + max++; + } + pm = KRadio->Items[i]; + if( pm->Caption != m_RadioMenu[i].strTTL ){ + pm->Caption = m_RadioMenu[i].strTTL; + } + pm->OnClick = KRadioCmdClick; + pm->Enabled = pRadio != NULL; + } + int N = i; + for( ; i < max; i++ ){ + KRadio->Delete(N); + } + + max = KRadioS->IndexOf(NRadioE); + for( i = 0; i < m_nRadioMenu; i++ ){ + if( i >= max ){ + TMenuItem *pm = new TMenuItem (this); + KRadioS->Insert(i, pm); + max++; + } + pm = KRadioS->Items[i]; + if( pm->Caption != m_RadioMenu[i].strTTL ){ + pm->Caption = m_RadioMenu[i].strTTL; + } + pm->OnClick = KRadioEditClick; + } + N = i; + for( ; i < max; i++ ){ + KRadioS->Delete(N); + } + BOOL f = m_nRadioMenu != 0; + NRadio->Visible = f; + NRadioE->Visible = f; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRadioCmdClick(TObject *Sender) +{ + if( !pRadio ) return; + + int n = KRadio->IndexOf((TMenuItem *)Sender); + if( (n >= 0) && (n < RADIOMENUMAX) ){ + LPCSTR p = m_RadioMenu[n].strCMD.c_str(); + if( CheckEXT(p, "RCM") && IsFile(p) ){ + LoadRadioDef(p); + } + else { + pRadio->SendCommand(p); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRadioEditClick(TObject *Sender) +{ + int n = KRadioS->IndexOf((TMenuItem *)Sender); + if( (n >= 0) && (n < RADIOMENUMAX) ){ + AnsiString strTTL = m_RadioMenu[n].strTTL; + AnsiString strCMD = m_RadioMenu[n].strCMD; + + TRMenuDialog *pBox = new TRMenuDialog(this); + int r = pBox->Execute(strTTL, strCMD); + BOOL fNull = strTTL.IsEmpty() && strCMD.IsEmpty(); + if( (r == IDOK) && !fNull ){ + if( !strCMD.IsEmpty() ){ + if( strTTL.IsEmpty() ){ + char bf[64]; + sprintf(bf, "Radio command #d", n + 1); + strTTL = bf; + } + m_RadioMenu[n].strTTL = strTTL; + m_RadioMenu[n].strCMD = strCMD; + AdjustRadioMenu(); + } + } + else if( (r == 1024) || fNull ){ + for( int i = n; i < (m_nRadioMenu - 1); i++ ){ + m_RadioMenu[i].strTTL = m_RadioMenu[i+1].strTTL; + m_RadioMenu[i].strCMD = m_RadioMenu[i+1].strCMD; + } + m_nRadioMenu--; + AdjustRadioMenu(); + } + else if( r == 1025 ){ + if( m_nRadioMenu < RADIOMENUMAX ){ + for( int i = m_nRadioMenu; i > n; i-- ){ + m_RadioMenu[i].strTTL = m_RadioMenu[i-1].strTTL; + m_RadioMenu[i].strCMD = m_RadioMenu[i-1].strCMD; + } + m_RadioMenu[n].strTTL = strTTL; + m_RadioMenu[n].strCMD = strCMD; + m_nRadioMenu++; + AdjustRadioMenu(); + } + } + delete pBox; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRadioAddClick(TObject *Sender) +{ + if( m_nRadioMenu >= RADIOMENUMAX ) return; + + AnsiString strTTL, strCMD; + + TRMenuDialog *pBox = new TRMenuDialog(this); + if( pBox->Execute(strTTL, strCMD, TRUE) ){ + if( !strCMD.IsEmpty() ){ + if( strTTL.IsEmpty() ){ + char bf[64]; + sprintf(bf, "Radio command #d", m_nRadioMenu + 1); + strTTL = bf; + } + m_RadioMenu[m_nRadioMenu].strTTL = strTTL; + m_RadioMenu[m_nRadioMenu].strCMD = strCMD; + m_nRadioMenu++; + AdjustRadioMenu(); + } + } + delete pBox; +} +//--------------------------------------------------------------------------- +void __fastcall TMmsstv::KRadioClick(TObject *Sender) +{ + AdjustRadioMenu(); + KRadioAdd->Enabled = m_nRadioMenu < RADIOMENUMAX; +} +//--------------------------------------------------------------------------- + diff --git a/Main.dfm b/Main.dfm new file mode 100644 index 0000000000000000000000000000000000000000..079a853ab7307a930945d3ff81eb89975b73cb78 GIT binary patch literal 42296 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 Ju`LhA`2TF=E|dTO literal 0 HcmV?d00001 diff --git a/Main.h b/Main.h new file mode 100644 index 0000000..a888c8d --- /dev/null +++ b/Main.h @@ -0,0 +1,1435 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#ifndef MainH +#define MainH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +#include "Sound.h" +#include "Comm.h" +#include "CRadio.h" +#include "Draw.h" +#include "InputWin.h" +#include "RxView.h" +#include "HistView.h" +#include "FileView.h" +#include "PrevView.h" +#include "CtrBtn.h" +#include "StockVew.h" +//#include +#define STOCKPAGE 4 +#define STOCKMAX 300 +#define DFFTSIZE 768 +//--------------------------------------------------------------------------- +class TMmsstv : public TForm +{ +__published: // IDE 管理のコンポーネント + TPageControl *Page; + TMainMenu *MainMenu; + TMenuItem *KFile; + TTabSheet *TabRX; + TTabSheet *TabHist; + TPanel *PanelRX; + TPaintBox *PBoxRX; + TPanel *PanelFFT; + TPanel *PanelWater; + TTimer *Timer; + TPaintBox *PBoxFFT; + TPaintBox *PBoxWater; + TMenuItem *KOpt; + TMenuItem *KHelp; + TMenuItem *KFRecTim; + TMenuItem *KFRec; + TMenuItem *KFPlay; + TOpenDialog *OpenDialog; + TSaveDialog *SaveDialog; + TMenuItem *N1; + TMenuItem *KExit; + TMenuItem *KFPlayPos; + TMenuItem *KFRecRew; + TMenuItem *KFRecStop; + TTabSheet *TabSync; + TPanel *PanelSync; + TPaintBox *PBoxD12; + TGroupBox *GBMode; + TSpeedButton *SBAuto; + TSpeedButton *SBM1; + TSpeedButton *SBM2; + TSpeedButton *SBM3; + TSpeedButton *SBM4; + TSpeedButton *SBM7; + TSpeedButton *SBLK; + TPanel *PanelLvl; + TPaintBox *PBoxLvl; + TPanel *PanelHist; + TPaintBox *PBoxHist; + TUpDown *UDHist; + TSpeedButton *SBLatest; + TLabel *HistStat; + TSpeedButton *SBPhase; + TSpeedButton *SBSlant; + TSpeedButton *SBSampSet; + TTabSheet *TabTX; + TTabSheet *TabTemp; + TPanel *PanelTX; + TPaintBox *PBoxTX; + TPanel *PanelTemp; + TPaintBox *PBoxTemp; + TSpeedButton *SBPaste; + TSpeedButton *SBCopy; + TSpeedButton *SBTX; + TMenuItem *KOSC; + TMenuItem *KView; + TMenuItem *KOM; + TGroupBox *GBLog; + TEdit *HisCall; + TLabel *L1; + TLabel *L2; + TEdit *HisName; + TLabel *L3; + TComboBox *HisRST; + TLabel *L4; + TComboBox *MyRST; + TLabel *L5; + TEdit *HisQTH; + TLabel *L6; + TEdit *EditNote; + TSpeedButton *SBQSO; + TSpeedButton *SBData; + TSpeedButton *SBFind; + TSpeedButton *SBList; + TComboBox *LogFreq; + TSpeedButton *SBInit; + TMenuItem *N2; + TMenuItem *KLogFlush; + TMenuItem *KLogOpen; + TMenuItem *KVer; + TSpeedButton *SBDSel; + TSpeedButton *SBDline; + TSpeedButton *SBDBox; + TSpeedButton *SBDDel; + TSpeedButton *SBDText; + TSpeedButton *SBDPic; + TSpeedButton *SBDPaste; + TSpeedButton *SBDFont; + TFontDialog *FontDialog; + TGroupBox *GB1; + TSpeedButton *SBAFC; + TTabControl *TabS; + TPanel *PanelS; + TPaintBox *PBoxS; + TSpeedButton *SBTune; + TPanel *PCS; + TUpDown *UDStock; + TLabel *LS; + TEdit *EditQSL; + TLabel *L7; + TColorDialog *ColorDialog; + TSpeedButton *SBDLineset; + TSpeedButton *SBDCol; + TPopupMenu *PopupS; + TMenuItem *KSL; + TMenuItem *KSC; + TMenuItem *KSP; + TMenuItem *N3; + TMenuItem *KSS; + TMenuItem *KSCan; + TMenuItem *N4; + TMenuItem *KSD; + TSpeedButton *SBDBoxS; + TCheckBox *CBSTemp; + TMenuItem *KOL; + TPopupMenu *PopupT; + TMenuItem *KTC; + TMenuItem *KTP; + TMenuItem *KTD; + TMenuItem *N5; + TMenuItem *KTB; + TMenuItem *KTF; + TMenuItem *N6; + TMenuItem *KTCan; + TSpeedButton *SBDHead; + TSpeedButton *SBM5; + TSpeedButton *SBM6; + TSpeedButton *SBM8; + TSpeedButton *SBM9; + TMenuItem *KTT; + TMenuItem *KTTC; + TSpeedButton *SBHView; + TSpeedButton *SBRView; + TSpeedButton *SBTView; + TSpeedButton *SBDS240; + TMenuItem *N8; + TMenuItem *KHlpMain; + TMenuItem *N9; + TMenuItem *KHlpPad; + TMenuItem *N10; + TMenuItem *KS; + TMenuItem *KF; + TMenuItem *KR; + TMenuItem *KFL1; + TMenuItem *KFM1; + TMenuItem *KFH1; + TMenuItem *KFT1; + TMenuItem *N11; + TMenuItem *KFL2; + TMenuItem *KFM2; + TMenuItem *KFH2; + TMenuItem *KFT2; + TMenuItem *KRS; + TMenuItem *KRM; + TMenuItem *KRF; + TSpeedButton *SBWHist; + TMenuItem *N12; + TSpeedButton *SBUseTemp; + TSpeedButton *SBDA240; + TSpeedButton *SBUS240; + TSpeedButton *SBUA240; + TMenuItem *N13; + TMenuItem *KTL; + TMenuItem *KTS; + TPaintBox *PBoxG; + TMenuItem *KFFTS; + TMenuItem *KFSOF; + TMenuItem *KFSS; + TMenuItem *KFSL; + TUpDown *UDSamp; + TLabel *SyncStat; + TPopupMenu *PopupH; + TMenuItem *KHCD; + TOpenDialog *DirDialog; + TMenuItem *N14; + TMenuItem *KSCD; + TMenuItem *KHD; + TMenuItem *N15; + TMenuItem *KHS; + TMenuItem *KEdit; + TMenuItem *KER; + TMenuItem *KEC; + TMenuItem *KEP; + TMenuItem *KES; + TMenuItem *N17; + TMenuItem *KEA; + TMenuItem *N16; + TMenuItem *KHCan; + TMenuItem *N18; + TMenuItem *KHT; + TMenuItem *KHFJ; + TMenuItem *KHFB; + TMenuItem *KSFJ; + TMenuItem *KSFB; + TPopupMenu *PopupR; + TMenuItem *KRAS; + TMenuItem *KRAR; + TMenuItem *N19; + TMenuItem *KRCan; + TMenuItem *N20; + TMenuItem *KRC; + TMenuItem *KRSW; + TMenuItem *KTA; + TMenuItem *N21; + TMenuItem *KVR; + TMenuItem *N22; + TMenuItem *KRR; + TMenuItem *N23; + TMenuItem *KTBT; + TCheckBox *CBASave; + TMenuItem *N24; + TMenuItem *KHACD; + TMenuItem *KHAC; + TCheckBox *CBSDraft; + TMenuItem *KRH; + TSpeedButton *SBULog; + TMenuItem *KHDA; + TMenuItem *N25; + TMenuItem *KHWeb; + TMenuItem *KHRef; + TMenuItem *KHACT; + TMenuItem *KVS; + TMenuItem *KFSQ; + TMenuItem *KP; + TMenuItem *KP1; + TMenuItem *KP2; + TMenuItem *KP3; + TMenuItem *KP4; + TMenuItem *KP5; + TMenuItem *KP6; + TMenuItem *KP7; + TMenuItem *KP8; + TMenuItem *N26; + TMenuItem *KPA; + TMenuItem *KPD; + TMenuItem *N27; + TMenuItem *KPDef; + TMenuItem *KPA1; + TMenuItem *KPA2; + TMenuItem *KPA3; + TMenuItem *KPA4; + TMenuItem *KPA5; + TMenuItem *KPA6; + TMenuItem *KPA7; + TMenuItem *KPA8; + TMenuItem *KPD1; + TMenuItem *KPD2; + TMenuItem *KPD3; + TMenuItem *KPD4; + TMenuItem *KPD5; + TMenuItem *KPD6; + TMenuItem *KPD7; + TMenuItem *KPD8; + TMenuItem *KHACJ; + TMenuItem *KVH; + TSpeedButton *SBDList; + TMenuItem *N28; + TMenuItem *KTE; + TMenuItem *KTTD; + TMenuItem *N29; + TMenuItem *KRSA; + TSpeedButton *SBTXFil; + TSpeedButton *SBHistFil; + TMenuItem *N30; + TMenuItem *KSTP; + TMenuItem *KVF; + TMenuItem *KRASY; + TMenuItem *N31; + TMenuItem *KFFTW; + TMenuItem *KFW30; + TMenuItem *KFW20; + TMenuItem *KFW15; + TMenuItem *N32; + TMenuItem *KTFX; + TMenuItem *N33; + TMenuItem *KRB; + TMenuItem *N34; + TMenuItem *KHDS; + TMenuItem *KHDS1; + TMenuItem *KHDS2; + TMenuItem *KHDS3; + TMenuItem *KHDS4; + TMenuItem *KHDS5; + TMenuItem *KHDS6; + TMenuItem *N35; + TMenuItem *KVW; + TMenuItem *N36; + TMenuItem *KFTA; + TMenuItem *N37; + TMenuItem *KFTD; + TMenuItem *KFTD1; + TMenuItem *KFTD2; + TMenuItem *KFTD3; + TMenuItem *KFTD4; + TMenuItem *KX; + TMenuItem *KX1; + TMenuItem *KX2; + TMenuItem *KX3; + TMenuItem *KX4; + TMenuItem *KX5; + TMenuItem *KX6; + TMenuItem *KX7; + TMenuItem *KX8; + TMenuItem *N38; + TMenuItem *KXA; + TMenuItem *KXD; + TMenuItem *N40; + TMenuItem *KXR; + TMenuItem *KXSM; + TMenuItem *KXA1; + TMenuItem *KXA2; + TMenuItem *KXA3; + TMenuItem *KXA4; + TMenuItem *KXA5; + TMenuItem *KXA6; + TMenuItem *KXA7; + TMenuItem *KXA8; + TMenuItem *KXD1; + TMenuItem *KXD2; + TMenuItem *KXD3; + TMenuItem *KXD4; + TMenuItem *KXD5; + TMenuItem *KXD6; + TMenuItem *KXD7; + TMenuItem *KXD8; + TMenuItem *KFTD5; + TMenuItem *KTAP; + TMenuItem *KTAC; + TMenuItem *N39; + TSpeedButton *SBLMS; + TMenuItem *KPInit; + TMenuItem *KVL; + TMenuItem *KVLSG; + TMenuItem *KVLSY; + TMenuItem *KTPA; + TMenuItem *KHTB; + TMenuItem *N42; + TMenuItem *KHAP; + TMenuItem *N43; + TMenuItem *KSAI; + TPopupMenu *PopupM; + TMenuItem *KRRC; + TMenuItem *KSSZ; + TMenuItem *KSS1; + TMenuItem *KSS2; + TMenuItem *KSS3; + TMenuItem *KSS4; + TMenuItem *KHlpUp; + TMenuItem *KSSD; + TMenuItem *N41; + TMenuItem *KTSZ; + TMenuItem *KTSZ1; + TMenuItem *KTSZ2; + TMenuItem *KTSZ3; + TMenuItem *KTSZ4; + TMenuItem *N45; + TMenuItem *KTSZT; + TMenuItem *KSIS; + TMenuItem *KTSD; + TMenuItem *KHSD; + TMenuItem *KRSD; + TSpeedButton *SBTO; + TMenuItem *KVOut; + TMenuItem *KVIn; + TMenuItem *N44; + TMenuItem *KRCS; + TMenuItem *KRSR; + TSpeedButton *SBAdj; + TMenuItem *KTU; + TSpeedButton *SBRXID; + TMenuItem *KSOFF; + TMenuItem *KSFFT; + TMenuItem *KSFQ; + TPopupMenu *PopupC; + TMenuItem *N46; + TMenuItem *KSF; + TMenuItem *KTDF; + TMenuItem *KTF1; + TMenuItem *KTF3; + TMenuItem *KTKA; + TMenuItem *KRI; + TMenuItem *KRI1; + TMenuItem *KRI2; + TMenuItem *KRI3; + TMenuItem *KVC; + TMenuItem *KRCD; + TMenuItem *KORep; + TMenuItem *KTMD; + TMenuItem *KEW; + TMenuItem *KEW2; + TMenuItem *KEW3; + TMenuItem *KEW4; + TMenuItem *KEW1; + TMenuItem *KVSD; + TMenuItem *KSTD; + TMenuItem *KSTS; + TMenuItem *KVSD1; + TMenuItem *KVSD2; + TMenuItem *KVSD3; + TMenuItem *N47; + TMenuItem *KHVS; + TMenuItem *KHVS1; + TMenuItem *KHVS2; + TMenuItem *KHVS3; + TMenuItem *KHVS4; + TMenuItem *N48; + TMenuItem *KRFS; + TMenuItem *KSB; + TMenuItem *KHC; + TMenuItem *N49; + TMenuItem *KSRR; + TMenuItem *KHMT; + TMenuItem *KHMT3; + TMenuItem *KHMT4; + TMenuItem *KSMS; + TMenuItem *KSMS4; + TMenuItem *KSMS9; + TMenuItem *KSMSX; + TMenuItem *KTF4; + TMenuItem *KTSA; + TMenuItem *KTSI; + TMenuItem *KTLA; + TMenuItem *KTLI; + TMenuItem *KTPI; + TMenuItem *KTPB; + TMenuItem *KTPO; + TMenuItem *KTF2; + TMenuItem *Report31; + TMenuItem *KRD; + TSpeedButton *SBRXFil; + TSpeedButton *SBFS; + TMenuItem *KTO; + TMenuItem *KTOI; + TMenuItem *KTOT; + TMenuItem *KTOP; + TMenuItem *KTOC; + TMenuItem *KTOE; + TMenuItem *KTOS; + TMenuItem *KTOB; + TMenuItem *N50; + TMenuItem *KTOCB; + TMenuItem *KTOR; + TMenuItem *KTX; + TMenuItem *N51; + TMenuItem *KVSE1; + TMenuItem *KVSE2; + TMenuItem *KVSE3; + TMenuItem *KTCI; + TPopupMenu *PopupL; + TMenuItem *KLM1; + TMenuItem *KLM2; + TMenuItem *KLM3; + TMenuItem *N52; + TMenuItem *KSA; + TMenuItem *KTFS; + TMenuItem *N7; + TMenuItem *KHN; + TMenuItem *KHJ; + TSpeedButton *SBCW; + TMenuItem *KSAM; + TMenuItem *KXS; + TMenuItem *KEX; + TSpeedButton *SBTXID; + TMenuItem *KTH; + TMenuItem *N53; + TMenuItem *KEE; + TMenuItem *KSE; + TMenuItem *N54; + TMenuItem *KXP; + TMenuItem *KHE; + TMenuItem *KRCC; + TSpeedButton *SBPL; + TSpeedButton *SBPR; + TMenuItem *KRCR; + TPopupMenu *PopupCW; + TMenuItem *KCW; + TMenuItem *KCWM; + TMenuItem *NCW; + TMenuItem *N55; + TMenuItem *KCWCancel; + TMenuItem *KCWS; + TMenuItem *KCWSH; + TMenuItem *KCWSM; + TMenuItem *KCWSL; + TMenuItem *KCWSLL; + TMenuItem *N57; + TMenuItem *KCWSI; + TMenuItem *KRadio; + TMenuItem *KRSet; + TMenuItem *KRLoad; + TMenuItem *N58; + TMenuItem *NRadio; + TMenuItem *KRadioS; + TMenuItem *KRadioAdd; + TMenuItem *NRadioE; + TMenuItem *NCWE; + TMenuItem *KCWADD; + void __fastcall FormPaint(TObject *Sender); + + void __fastcall TimerTimer(TObject *Sender); + void __fastcall PBoxFFTPaint(TObject *Sender); + void __fastcall PBoxWaterPaint(TObject *Sender); + void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); + void __fastcall PBoxRXPaint(TObject *Sender); + void __fastcall KFRecTimClick(TObject *Sender); + void __fastcall KFRecClick(TObject *Sender); + void __fastcall KFPlayClick(TObject *Sender); + void __fastcall KFPlayPosClick(TObject *Sender); + void __fastcall KFRecRewClick(TObject *Sender); + void __fastcall KFRecStopClick(TObject *Sender); + + + void __fastcall PBoxD12MouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxD12Paint(TObject *Sender); + void __fastcall SBAutoClick(TObject *Sender); + void __fastcall UDHistClick(TObject *Sender, TUDBtnType Button); + void __fastcall PBoxHistPaint(TObject *Sender); + void __fastcall SBLatestClick(TObject *Sender); + void __fastcall PBoxD12MouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall SBSampSetClick(TObject *Sender); + void __fastcall SBPasteClick(TObject *Sender); + void __fastcall PBoxTXPaint(TObject *Sender); + void __fastcall SBCopyClick(TObject *Sender); + void __fastcall SBTXClick(TObject *Sender); + void __fastcall PageChange(TObject *Sender); + void __fastcall PBoxTempPaint(TObject *Sender); + void __fastcall KOSCClick(TObject *Sender); + void __fastcall KOMClick(TObject *Sender); + + void __fastcall KExitClick(TObject *Sender); + void __fastcall SBListClick(TObject *Sender); + void __fastcall SBFindClick(TObject *Sender); + void __fastcall SBFindMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBDataClick(TObject *Sender); + void __fastcall SBDataMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBInitClick(TObject *Sender); + void __fastcall TempDelay(void); + void __fastcall LogFreqChange(TObject *Sender); + void __fastcall HisCallKeyPress(TObject *Sender, char &Key); + void __fastcall SBQSOClick(TObject *Sender); + void __fastcall KLogOpenClick(TObject *Sender); + void __fastcall KLogFlushClick(TObject *Sender); + void __fastcall KVerClick(TObject *Sender); + void __fastcall PBoxTempMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxTempMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxTempMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBDlineClick(TObject *Sender); + void __fastcall SBDBoxClick(TObject *Sender); + void __fastcall SBDSelClick(TObject *Sender); + void __fastcall SBDDelClick(TObject *Sender); + void __fastcall SBDTextClick(TObject *Sender); + void __fastcall SBDPicClick(TObject *Sender); + void __fastcall SBDPasteClick(TObject *Sender); + void __fastcall PBoxTempDblClick(TObject *Sender); + void __fastcall SBDFontClick(TObject *Sender); + void __fastcall PBoxSDragDrop(TObject *Sender, TObject *Source, + int X, int Y); + void __fastcall PBoxSDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept); + void __fastcall PBoxSPaint(TObject *Sender); + void __fastcall SBAFCClick(TObject *Sender); + + + + + + void __fastcall PBoxSMouseDown(TObject *Sender, + TMouseButton Button, TShiftState Shift, int X, int Y); + void __fastcall TabSChange(TObject *Sender); + void __fastcall PBoxTXDragOver(TObject *Sender, TObject *Source, int X, + int Y, TDragState State, bool &Accept); + void __fastcall PBoxTXDragDrop(TObject *Sender, TObject *Source, int X, + int Y); + void __fastcall UDStockClick(TObject *Sender, TUDBtnType Button); + void __fastcall SBTuneClick(TObject *Sender); + void __fastcall SBDLinesetClick(TObject *Sender); + void __fastcall SBDColClick(TObject *Sender); + + void __fastcall KSLClick(TObject *Sender); + void __fastcall KSSClick(TObject *Sender); + void __fastcall KSCClick(TObject *Sender); + + void __fastcall KSPClick(TObject *Sender); + void __fastcall KSDClick(TObject *Sender); + void __fastcall PopupSPopup(TObject *Sender); + void __fastcall SBDBoxSClick(TObject *Sender); + void __fastcall FormResize(TObject *Sender); + void __fastcall HisCallChange(TObject *Sender); + void __fastcall CBSTempClick(TObject *Sender); + void __fastcall KOLClick(TObject *Sender); + void __fastcall KTDClick(TObject *Sender); + void __fastcall KTBClick(TObject *Sender); + void __fastcall KTFClick(TObject *Sender); + void __fastcall SBDHeadClick(TObject *Sender); + void __fastcall SBMClick(TObject *Sender); + void __fastcall KTTClick(TObject *Sender); + void __fastcall KTTCClick(TObject *Sender); + void __fastcall SBHViewClick(TObject *Sender); + void __fastcall SBRViewClick(TObject *Sender); + void __fastcall SBTViewClick(TObject *Sender); + void __fastcall SBDS240Click(TObject *Sender); + void __fastcall SBLKClick(TObject *Sender); + void __fastcall PopupTPopup(TObject *Sender); + void __fastcall PBoxTXMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KHlpMainClick(TObject *Sender); + void __fastcall KHlpPadClick(TObject *Sender); + void __fastcall KFileClick(TObject *Sender); + void __fastcall KFL1Click(TObject *Sender); + void __fastcall KFM1Click(TObject *Sender); + void __fastcall KFH1Click(TObject *Sender); + void __fastcall KFT1Click(TObject *Sender); + void __fastcall KFL2Click(TObject *Sender); + void __fastcall KFM2Click(TObject *Sender); + void __fastcall KFH2Click(TObject *Sender); + void __fastcall KFT2Click(TObject *Sender); + void __fastcall KRSClick(TObject *Sender); + void __fastcall KRMClick(TObject *Sender); + void __fastcall KRFClick(TObject *Sender); + void __fastcall KViewClick(TObject *Sender); + void __fastcall FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall FormKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall SBWHistClick(TObject *Sender); + void __fastcall KVOutClick(TObject *Sender); + + void __fastcall SBUseTempClick(TObject *Sender); + void __fastcall SBDA240Click(TObject *Sender); + void __fastcall SBUS240Click(TObject *Sender); + void __fastcall SBUA240Click(TObject *Sender); + void __fastcall KTLClick(TObject *Sender); + void __fastcall KTSAClick(TObject *Sender); + void __fastcall PBoxGPaint(TObject *Sender); + + void __fastcall KFSOFClick(TObject *Sender); + void __fastcall KFSSClick(TObject *Sender); + void __fastcall KFSLClick(TObject *Sender); + + void __fastcall UDSampClick(TObject *Sender, TUDBtnType Button); + void __fastcall SBPhaseClick(TObject *Sender); + void __fastcall KHCDClick(TObject *Sender); + void __fastcall KSCDClick(TObject *Sender); + + void __fastcall SBTuneMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KHDClick(TObject *Sender); + void __fastcall KHSClick(TObject *Sender); + void __fastcall KEditClick(TObject *Sender); + void __fastcall KERClick(TObject *Sender); + void __fastcall KESClick(TObject *Sender); + void __fastcall PopupHPopup(TObject *Sender); + void __fastcall KHFJClick(TObject *Sender); + void __fastcall KHFBClick(TObject *Sender); + void __fastcall KSFJClick(TObject *Sender); + void __fastcall KSFBClick(TObject *Sender); + void __fastcall KRASClick(TObject *Sender); + void __fastcall KRARClick(TObject *Sender); + void __fastcall PopupRPopup(TObject *Sender); + void __fastcall KTAClick(TObject *Sender); + void __fastcall KVRClick(TObject *Sender); + void __fastcall KRRClick(TObject *Sender); + void __fastcall KTBTClick(TObject *Sender); + + void __fastcall KHACDClick(TObject *Sender); + void __fastcall SBULogClick(TObject *Sender); + void __fastcall KHDAClick(TObject *Sender); + void __fastcall KHWebClick(TObject *Sender); + void __fastcall KHRefClick(TObject *Sender); + void __fastcall KVSClick(TObject *Sender); + + void __fastcall KFSQClick(TObject *Sender); + void __fastcall EditQSLDragDrop(TObject *Sender, TObject *Source, + int X, int Y); + void __fastcall EditQSLDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept); + void __fastcall KPAClick(TObject *Sender); + void __fastcall KPDClick(TObject *Sender); + void __fastcall KP1Click(TObject *Sender); + + void __fastcall KPDefClick(TObject *Sender); + void __fastcall KPClick(TObject *Sender); + void __fastcall KVHClick(TObject *Sender); + void __fastcall SBDListClick(TObject *Sender); + void __fastcall KTEClick(TObject *Sender); + void __fastcall KTTDClick(TObject *Sender); + void __fastcall HisNameChange(TObject *Sender); + void __fastcall HisQTHChange(TObject *Sender); + void __fastcall EditNoteChange(TObject *Sender); + void __fastcall SBTXFilClick(TObject *Sender); + void __fastcall SBHistFilClick(TObject *Sender); + void __fastcall KSTPClick(TObject *Sender); + void __fastcall KVFClick(TObject *Sender); + void __fastcall KRASYClick(TObject *Sender); + void __fastcall KFW30Click(TObject *Sender); + void __fastcall KFW20Click(TObject *Sender); + void __fastcall KFW15Click(TObject *Sender); + void __fastcall KTFXClick(TObject *Sender); + void __fastcall KRBClick(TObject *Sender); + + void __fastcall KHDS1Click(TObject *Sender); + void __fastcall KHDS2Click(TObject *Sender); + void __fastcall KHDS3Click(TObject *Sender); + void __fastcall KHDS4Click(TObject *Sender); + void __fastcall KHDS5Click(TObject *Sender); + void __fastcall KHDS6Click(TObject *Sender); + void __fastcall KVWClick(TObject *Sender); + void __fastcall KFTAClick(TObject *Sender); + void __fastcall KFTD1Click(TObject *Sender); + void __fastcall KFTD2Click(TObject *Sender); + void __fastcall KFTD3Click(TObject *Sender); + void __fastcall KFTD4Click(TObject *Sender); + void __fastcall KXRClick(TObject *Sender); + void __fastcall KXSClick(TObject *Sender); + void __fastcall KX1Click(TObject *Sender); + void __fastcall KXA1Click(TObject *Sender); + void __fastcall KXD1Click(TObject *Sender); + void __fastcall KXClick(TObject *Sender); + void __fastcall KFTD5Click(TObject *Sender); + void __fastcall KTAPClick(TObject *Sender); + void __fastcall KTACClick(TObject *Sender); + void __fastcall SBLMSClick(TObject *Sender); + void __fastcall KPInitClick(TObject *Sender); + void __fastcall KVLSGClick(TObject *Sender); + void __fastcall KVLSYClick(TObject *Sender); + void __fastcall KHTBClick(TObject *Sender); + void __fastcall OpenDialogSelectionChange(TObject *Sender); + void __fastcall KTPAClick(TObject *Sender); + + void __fastcall KSAIClick(TObject *Sender); + void __fastcall PopupMPopup(TObject *Sender); + + void __fastcall SBMMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KRRCClick(TObject *Sender); + void __fastcall KSSZClick(TObject *Sender); + void __fastcall KHlpUpClick(TObject *Sender); + void __fastcall KSSDClick(TObject *Sender); + void __fastcall KTSZClick(TObject *Sender); + void __fastcall KTSDClick(TObject *Sender); + void __fastcall KHSDClick(TObject *Sender); + void __fastcall KRSDClick(TObject *Sender); + void __fastcall SBTOClick(TObject *Sender); + void __fastcall KRCSClick(TObject *Sender); + void __fastcall KRSRClick(TObject *Sender); + + void __fastcall KTUClick(TObject *Sender); + + void __fastcall SBRXIDClick(TObject *Sender); + void __fastcall KSOFFClick(TObject *Sender); + void __fastcall SBRXIDMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KSFClick(TObject *Sender); + void __fastcall KTF1Click(TObject *Sender); + void __fastcall KTKAClick(TObject *Sender); + void __fastcall UDStockMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KRI1Click(TObject *Sender); + + void __fastcall HisNameKeyPress(TObject *Sender, char &Key); + void __fastcall KVCClick(TObject *Sender); + void __fastcall KRCDClick(TObject *Sender); + void __fastcall KORepClick(TObject *Sender); + void __fastcall KTMDClick(TObject *Sender); + void __fastcall KEWClick(TObject *Sender); + void __fastcall PBoxSMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxSDblClick(TObject *Sender); + void __fastcall HisCallDblClick(TObject *Sender); + void __fastcall HisQTHDblClick(TObject *Sender); + + void __fastcall KVSD1Click(TObject *Sender); + void __fastcall KHVSClick(TObject *Sender); + void __fastcall KRFSClick(TObject *Sender); + void __fastcall KSBClick(TObject *Sender); + void __fastcall KSMS4Click(TObject *Sender); + + void __fastcall KHMT3Click(TObject *Sender); + + void __fastcall KHelpClick(TObject *Sender); + void __fastcall OpenDialogClose(TObject *Sender); + void __fastcall KTSIClick(TObject *Sender); + void __fastcall KTLIClick(TObject *Sender); + void __fastcall KTPBClick(TObject *Sender); + + + void __fastcall SBRXFilClick(TObject *Sender); + + void __fastcall UDHistMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall KTOIClick(TObject *Sender); + void __fastcall KTOClick(TObject *Sender); + void __fastcall KTOPClick(TObject *Sender); + void __fastcall KTOCClick(TObject *Sender); + + + + + + + + + + + + + void __fastcall IMenuClick(TObject *Sender); + void __fastcall KVSDClick(TObject *Sender); + void __fastcall KVSE1Click(TObject *Sender); + void __fastcall KTCIClick(TObject *Sender); + void __fastcall KTOSClick(TObject *Sender); + void __fastcall FormDestroy(TObject *Sender); + void __fastcall PBoxFFTMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall PBoxFFTMouseMove(TObject *Sender, TShiftState Shift, + int X, int Y); + void __fastcall PBoxFFTMouseUp(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBTXMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBLMSMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KLM1Click(TObject *Sender); + + void __fastcall KSAClick(TObject *Sender); + void __fastcall KTFSClick(TObject *Sender); + void __fastcall KHNClick(TObject *Sender); + void __fastcall KHJClick(TObject *Sender); + void __fastcall SBCWClick(TObject *Sender); + void __fastcall SBCWMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + + void __fastcall KSAMClick(TObject *Sender); + + void __fastcall SBListMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall PBoxLvlMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall SBTXIDClick(TObject *Sender); + void __fastcall SBDFontMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KTHClick(TObject *Sender); + void __fastcall KEEClick(TObject *Sender); + void __fastcall KSEClick(TObject *Sender); + void __fastcall KXPClick(TObject *Sender); + void __fastcall KHEClick(TObject *Sender); + void __fastcall KRCCClick(TObject *Sender); + + void __fastcall SBPLClick(TObject *Sender); + + + + + void __fastcall SBPLMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + + void __fastcall SBAdjMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y); + void __fastcall KRCRClick(TObject *Sender); + void __fastcall KCWClick(TObject *Sender); + void __fastcall PopupCWPopup(TObject *Sender); + void __fastcall KCWSHClick(TObject *Sender); + void __fastcall KCWSMClick(TObject *Sender); + void __fastcall KCWSLClick(TObject *Sender); + void __fastcall KCWSLLClick(TObject *Sender); + void __fastcall KCWSIClick(TObject *Sender); + void __fastcall KRSetClick(TObject *Sender); + void __fastcall KRLoadClick(TObject *Sender); + + void __fastcall KRadioAddClick(TObject *Sender); + void __fastcall KRadioClick(TObject *Sender); + void __fastcall KCWADDClick(TObject *Sender); +private: // ユーザー宣言 + int m_InitFirst; + int m_DisEvent; +// int m_Timer1S; + int m_ChangeTemp; + + int m_SMax; + + short m_Y36[800]; + short m_D36[2][800]; + int m_DSEL; + + CAlignList AlignFix; + CAlignList AlignMode; + CAlignList AlignDsp; + CAlignList AlignLog; + CAlignList AlignPCS; + void __fastcall EntryAlign(void); + void __fastcall StartOption(void); + + void __fastcall UpdateLogLink(void); + void __fastcall UpdateTitle(void); + void __fastcall UpdateLMS(void); + void __fastcall AdjustFocus(void); + + void __fastcall UpdateSBTO(void); + void __fastcall UpdateUI(void); + void __fastcall UpdateUITemp(void); + +// void __fastcall OnIdle(TObject *Sender, bool &Done); + void __fastcall UpdateToneFreq(void); + void __fastcall UpdateSystemFont(void); + void __fastcall ReadSampFreq(void); + void __fastcall ReadCombList(TMemIniFile *tp, AnsiString &as, LPCSTR pKey, LPCSTR pDef); + void __fastcall ReadRegister(void); + void __fastcall WriteRegister(void); + + void __fastcall UpdateModeBtn(void); + + void __fastcall ClearDraw(Graphics::TBitmap *pBitmap, TPaintBox *pBox, TColor col); + void __fastcall SyncSSTV(void); + int __fastcall GetPixelLevel(short *ip); + int __fastcall GetPictureLevel(short *ip); + int __fastcall GetPictureLevelDiff(short *ip); + void __fastcall DrawSSTV(short *ip, short *sp); + void __fastcall DrawSSTVNormal(short *ip, short *sp); + void __fastcall DrawSSTVDiff(short *ip, short *sp); + void __fastcall InfoRxLost(void); + void __fastcall InfoTxLost(void); + void __fastcall TrackTxMode(int sw); + void __fastcall WriteHistory(int sw); + void __fastcall DrawSSTV(void); + void __fastcall DrawLvl(void); + void __fastcall AdjustPBoxSize(int l); + void __fastcall KMClick(TObject *Sender); + +public: + Graphics::TBitmap *pBitmapFFT; + Graphics::TBitmap *pBitmapWater; + Graphics::TBitmap *pBitmapRX; + Graphics::TBitmap *pBitmapD12; + Graphics::TBitmap *pBitmapLvl; + Graphics::TBitmap *pBitmapHist; + Graphics::TBitmap *pBitmapHistF; + Graphics::TBitmap *pBitmapTX; + Graphics::TBitmap *pBitmapTXM; + Graphics::TBitmap *pBitmapTemp; + Graphics::TBitmap *pBitmapNearest; + + Graphics::TBitmap *pBitmapSS; + Graphics::TBitmap *pBitmapST[STOCKPAGE]; + + int m_MW; // タイトルバーとメニューバーの幅 + int m_ReqHistF; + void __fastcall DeleteHistF(void); + void __fastcall AdjustHistF(void); + void __fastcall TrigHistF(void); + +private: + CRecentMenu RecentMenu; + void __fastcall OnRecentClick(TObject *Sender); + void __fastcall RecentAdd(LPCSTR pNew, int f); + void __fastcall UpdateRecentMenu(void); + + int m_Slant; + int m_SlantX, m_SlantY; + int m_SlantX2, m_SlantY2; + void __fastcall DispSyncStat(void); + double __fastcall GetSyncSamp(int X, int Y); + void __fastcall DrawSync(void); + +// void __fastcall GetRY(int &Y, int &RY, int &BY, TColor col); + void __fastcall LineR24(CSSTVMOD *mp); + void __fastcall LineR36(CSSTVMOD *mp); + void __fastcall LineR72(CSSTVMOD *mp); + void __fastcall LineAVT(CSSTVMOD *mp); + void __fastcall LineSCT(CSSTVMOD *mp, double tw); + void __fastcall LineMRT(CSSTVMOD *mp, double tw); + void __fastcall LineSC2180(CSSTVMOD *mp, double S, double tw); + void __fastcall LinePD(CSSTVMOD *mp, double tw); + void __fastcall LineP(CSSTVMOD *mp, double S, double P, double C); + void __fastcall LineMP(CSSTVMOD *mp, double tw); + void __fastcall LineMR(CSSTVMOD *mp, double tw); + void __fastcall LineRM(CSSTVMOD *mp, double ts, double tw); + void __fastcall LineMN(CSSTVMOD *mp, double tw); + void __fastcall LineMC(CSSTVMOD *mp, double tw); + + BYTE *m_pRowBuf; + void __fastcall OutputMMV(void); + void __fastcall OutputFSKID(void); + void __fastcall OutputCWID(void); + int __fastcall IsSR(void); + void __fastcall SendSSTV(void); + void __fastcall OutHEAD(void); + + int m_SendY; + void __fastcall DrawTXCursor_(int y); + void __fastcall DrawTXCursor(int y); + void __fastcall DeleteTXCursor(void); + void __fastcall MakeTxBitmap(int sw); + + void __fastcall AutoCopyJob(SYSTEMTIME tim, Graphics::TBitmap *pSource); + + void __fastcall UpdateTxClip(void); + int m_TxClipType; +//calibration + short *pCalibration; +public: + void __fastcall MakeCalibrationTable(void); + +//Hist + CBitmapHist RxHist; + void __fastcall UpdateHist(void); + void __fastcall DispHistStat(void); + void __fastcall GetTempHistSize(int &x, int &y); +public: +//Mode + int m_ExtMode; + int m_HistM; + int m_RXW, m_RXH, m_RXPH; + int m_TXW, m_TXH, m_TXPH; + int m_ModeAssignTX[9]; + int m_ModeAssignRX[9]; +private: + TSpeedButton *__fastcall GetModeBtn(int n); + int __fastcall GetButtonNo(TSpeedButton *tp); + void __fastcall UpdateModeCaption(void); + void __fastcall ChangeTxMode(int mode); + int __fastcall FindModeAssign(int *ip, int m); + void __fastcall AdjustTempSC(int &X, int &Y); + void __fastcall AdjustTempView(int sw); + void __fastcall ShowSize(TPaintBox *pBox, int w, int h, int fs, TColor col); + void __fastcall ShowSize(Graphics::TBitmap *pBitmap, int x, int y, int w, int h, int fs, TColor col); + void __fastcall ShowNo(Graphics::TBitmap *pBitmap, int x, int y, int n, int fs, TColor col); + +//Recv +public: + SYSTEMTIME m_StartTime; +private: + double m_Z[3]; + int m_AX, m_AY; +//Tune + DWORD m_TuneTimer; + int m_TuneTX; +//Susp + int m_SuspMinimized; +//Sync + void __fastcall CopyStgBuf(void); + void __fastcall InfoSampFreq(void); + CWaveStrage WaveStg; + int m_ReqSampChg; + double m_SampFreq; + void __fastcall DrawSlantInfo(void); + void __fastcall DrawShiftInfo(void); + void __fastcall CorrectSlant(void); + int __fastcall AdjustSyncPos(int n); + void __fastcall ReSyncSSTV(void); + void __fastcall RedrawSampFreq(int sw); + void __fastcall UpdateSampFreq(void); + void __fastcall RedrawSSTV(void); + void __fastcall RedrawAdjustSync(void); + void __fastcall ShiftSSTV(TObject *Sender, int step); + +//FFT + void __fastcall InitDrawFFT(void); + void __fastcall CalcFFT(void); + void __fastcall DrawFFT(int sw); + void __fastcall DrawWater(int sw); +public: + void __fastcall InitFFT(void); +private: + int m_FFTWINDOW; + int m_XW; + int m_FM; + int m_low; + int m_of; + int m_FX[7]; + int m_fft[DFFTSIZE]; + + int m_FFTFlag; + + int m_FFTMax; + int m_FFTSumMax; + + int m_FFTMAX[DFFTSIZE]; + + int m_WaterMax; + int m_WaterSumMax; + int m_WaterMin; + + int m_MainPage; +//Log + void __fastcall AddCall(LPCSTR p); + void __fastcall KCClick(TObject *Sender); + int m_Dupe; + void __fastcall UpdateCallsign(void); + void __fastcall UpdateLogData(void); + void __fastcall UpdateTextData(void); + void __fastcall FindCall(void); + void __fastcall AutoLogSave(void); + void __fastcall SetGreetingString(LPSTR t, LPCSTR pCall, int type); + + void __fastcall DateBitmap(Graphics::TBitmap *pBitmap, SYSTEMTIME &tim); + +// Draw + int m_TempHold; + int m_TempTimer; + int m_TempX, m_TempY; + int m_DrawTrans; + int m_DrawCmd; + CDraw *pDraw; + CDraw *pPaste; +public: + CDrawGroup DrawMain; + CDrawGroup DrawText; + CDrawGroup DrawTemp; + TMemoryStream *pUndo; +// CGrid TempGrid; +private: + void __fastcall DeleteUndo(void); + void __fastcall SaveUndo(void); + TMemoryStream *__fastcall SaveUndo(TMemoryStream *ps); + void __fastcall UpdateUndo(TMemoryStream *ps); + void __fastcall PBoxTempCursor(int X, int Y); + + +public: + void __fastcall RxAutoPush(int sw); + void __fastcall UpdateTemp(void); + void __fastcall UpdatePic(void); + void __fastcall UpdatePic(int sw); + void __fastcall DropOle(int X, int Y, LPCSTR pName, int trans); + void __fastcall DropLib(int X, int Y, LPCSTR pName); + void __fastcall DropPic(int X, int Y, Graphics::TBitmap *pSrc, int type); +private: +// Stock + void __fastcall GetStockXY(int &X1, int &Y1, int &X2, int &Y2, int n); + int __fastcall TMmsstv::GetStockNo(int X, int Y); + int m_DragNo; + int m_DragDataNo; + int m_DragPMax; + int m_TabSXX, m_TabSYY; + + int m_TxSPage; + int m_PSPage; + int m_TSPage[STOCKPAGE]; + int m_APSPage; + int m_ATSPage[STOCKPAGE]; + DWORD m_PSSize[18]; + + int m_StockPage; + int m_StockOff; + + void __fastcall UpdateTabS(void); + void __fastcall SaveBitmapS(Graphics::TBitmap *pBitmap, int n); + void __fastcall SaveBitmapSN(Graphics::TBitmap *pBitmap, int n); + Graphics::TBitmap* __fastcall LoadBitmapS(int n); + void __fastcall LoadBitmapSN(Graphics::TBitmap *pBitmap, int n); + +public: + int __fastcall LoadBitmapMenu(Graphics::TBitmap *pBitmap, int rs); + int __fastcall SaveBitmapMenu(Graphics::TBitmap *pBitmap, LPCSTR pName, LPCSTR pFolder); + int __fastcall LoadTemplateMenu(CDrawGroup *pItem, int isw); + int __fastcall SaveTemplateMenu(CDrawGroup *pItem, int isw); + int __fastcall SaveTemplateMenu(CDrawGroup *pItem, LPCSTR pName, LPCSTR pFolder, int isw); + void __fastcall AddTemplate(CDrawGroup *pGroup); + void __fastcall AddItem(CDraw *pItem, int b); + + void __fastcall LoadCurrentTemp(void); + void __fastcall LoadStockTemp(CDrawGroup *pItem, int n, TCanvas *tp); + void __fastcall SaveStockTemp(CDrawGroup *pItem, int n); + void __fastcall DeleteStockTemp(int n); + +private: + + void __fastcall LoadDefTemp(void); + void __fastcall MoveStockDir(LPCSTR pNewDir); + void __fastcall ChangeStockFormat(int sw); + void __fastcall ReleaseStockResource(void); + + int m_SyncAccuracy; + int m_SyncAccuracyN; + + void __fastcall InitAutoStop(void); + int __fastcall GetSqerrPos(int n); + int __fastcall AutoStop(int x, short *sp); + int __fastcall AutoStopJob(void); + + int m_SpecDown; +//Auto + int m_Mult; +//AutoStop + int m_AutoStopPos; + int m_AutoStopAPos[16]; + int m_AutoStopCnt; + int m_AutoStopACnt; +//AutoSync + int m_AutoSyncCount; + int m_AutoSyncPos; + int m_AutoSyncDis; + int m_AutoSyncDiff; +//AutoSlant + int m_ASBgnPos; + int m_ASCurY; + int m_ASDis; + int m_ASBitMask; + double m_ASLmt[7]; + int m_ASPos[4]; + CSmooz m_ASAvg; +//Palette + DYNAMIC HPALETTE __fastcall GetPalette(void); +//RxView + int m_TimerRXV; + int m_TimerRXS; + TRxViewDlg *pRxView; + TRxViewDlg *pSyncView; +//HistView + THistViewDlg *pHistView; + void __fastcall OpenHistView(void); + void __fastcall CloseHistView(void); + +//ImageView + void __fastcall AdjustFileView(void); + void __fastcall ShowFileView(int i, int ttl); + void __fastcall CloseFileView(int n); + +public: + void __fastcall ReOpenFileView(TFileViewDlg *pView); + void __fastcall LoadAllFileView(void); + TFileViewDlg *pFileView[8]; + int m_FileViewClose; +//Preview + int m_PreViewFlag; + TPrevViewBox *pPreView; + int __fastcall OpenDialogExecute(int sw); +private: +//PROFILE + PRODEM m_DemPro[9]; + TMenuItem *__fastcall GetKP(int n); + TMenuItem *__fastcall GetKPA(int n); + TMenuItem *__fastcall GetKPD(int n); + void __fastcall UpdateProFileMenu(void); + void __fastcall SetProFile(int n); + void __fastcall InitProfile(void); + +//PROGRAM + TMenuItem *__fastcall GetKX(int n); + TMenuItem *__fastcall GetKXA(int n); + TMenuItem *__fastcall GetKXD(int n); + void __fastcall UpdateProgramMenu(void); + void __fastcall ExecExtCmd(int n); + int __fastcall AssignExtCmd(int n); + +//LMSDelay + int __fastcall GetLMSDelay(void); + +// WebRef + CWebRef WebRef; + +// Comm + void __fastcall OpenCloseCom(void); + + CComm *pComm; + CCradio *pRadio; + +//コントロールWnd + TCtrBtnWnd *pCtrBtn; + + int m_SyncPos, m_SyncRPos; + int m_SyncMax, m_SyncMin; +public: // ユーザー宣言 + __fastcall TMmsstv(TComponent* Owner); + + TSound *pSound; + CSSTVDEM *pDem; + CSSTVMOD *pMod; + void __fastcall MacroDate(LPSTR t, SYSTEMTIME &now); + int __fastcall MacroText(LPSTR t, LPCSTR p, int size); + + void __fastcall WndProc(TMessage &Message); + void __fastcall WndCopyData(TMessage &Message); + void __fastcall OnMini(TObject *Sender); + void __fastcall OnMSG(tagMSG &Msg, bool &Handled); + void __fastcall AppException(TObject *Sender, Exception *E); + void __fastcall DropFile(tagMSG &Msg); + + void __fastcall UpdateTXUI(void); + void __fastcall ToTX(void); + void __fastcall ToRX(void); + + void __fastcall CopyBitmap(Graphics::TBitmap *pBitmap); + int __fastcall PasteBitmap(Graphics::TBitmap *pBitmap, int rs); + + void __fastcall GetFFTRect(int &FM, int &low); + void __fastcall MultProc(void); + void __fastcall AdjustPage(int sw); + + + DWORD m_RepTick; + int m_RepBeaconCount; + int m_RepBeaconPos; + int m_RepTXPos; + + void __fastcall Repeater(void); + void __fastcall SendCWID(LPCSTR p); + int __fastcall LoadRepTemplate(LPCSTR pList, int &Pos); + void __fastcall SendBeacon(void); + void __fastcall SetBeaconTick(void); + void __fastcall SetBeaconDelay(void); + void __fastcall GetBeaconBitmap(Graphics::TBitmap *pBitmap, int n); + void __fastcall MakeBeacon(int sw, int fsw, int nn); + void __fastcall MakeReplay(void); + void __fastcall MakeThImage(int mm); + + int m_OrgTop; + int m_OrgLeft; + DWORD m_dwVersion; + +//ウインドウの分離 + int m_ClientHeight[2]; + int m_ClientWidth[2]; + TStockView *pStockView; + TStockView *pWaterView; + TStockView *pLogView; + void __fastcall DivStockView(void); + void __fastcall AdjustStockView(void); + void __fastcall MoveParent(TWinControl *pNew, TWinControl *pOld, TWinControl *pCtr); + void __fastcall DivWaterView(void); + void __fastcall DivControl(int sw); + + void __fastcall UpdatePriority(void); + + int m_AppErr; + + HWND m_hClipNext; +//CWMenu + void __fastcall AdjustCWMenu(void); + void __fastcall KCWSendClick(TObject *Sender); + void __fastcall KCWEditClick(TObject *Sender); + +//RadioMenu +public: + int m_nRadioMenu; +private: + RADIOMENU m_RadioMenu[RADIOMENUMAX]; + + void __fastcall LoadRadioDef(LPCSTR pName); + void __fastcall AdjustRadioMenu(void); + void __fastcall KRadioCmdClick(TObject *Sender); + void __fastcall KRadioEditClick(TObject *Sender); + +//#define CM_FFT WM_USER+403 +#define CM_CRADIO WM_USER+400 +#define CM_CMML WM_USER+401 +#define CM_CMMR WM_USER+402 +#define CM_EDITEXIT WM_USER+404 +protected: + void __fastcall CMfft(TMessage *Message); + void __fastcall OnMove(TMessage *Message); + void __fastcall CMMML(TMessage Message); + void __fastcall CMMMR(TMessage Message); + void __fastcall OnEditExit(TMessage Message); + void __fastcall OnDrawClipboard(TMessage Message); + void __fastcall OnChangeCbChain(TMessage Message); + +BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(CM_FFT, TMessage*, CMfft) + MESSAGE_HANDLER(WM_MOVE, TMessage*, OnMove) + MESSAGE_HANDLER(CM_CMML, TMessage, CMMML) + MESSAGE_HANDLER(CM_CMMR, TMessage, CMMMR) + MESSAGE_HANDLER(CM_EDITEXIT, TMessage, OnEditExit) + MESSAGE_HANDLER(WM_DRAWCLIPBOARD, TMessage, OnDrawClipboard) + MESSAGE_HANDLER(WM_CHANGECBCHAIN, TMessage, OnChangeCbChain) +END_MESSAGE_MAP(TForm) +}; +//--------------------------------------------------------------------------- +extern PACKAGE TMmsstv *Mmsstv; +//--------------------------------------------------------------------------- +#endif + + diff --git a/Mmcg.cpp b/Mmcg.cpp new file mode 100644 index 0000000..83a1194 --- /dev/null +++ b/Mmcg.cpp @@ -0,0 +1,1521 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +/************************************************************************ + MMCG + + Copyright (C) JE3HHT 1993. + Modifed on 2000 for MMTTY by JE3HHT +************************************************************************/ +#include //ja7ude 0521 +#pragma hdrstop + +#include "ComLib.h" +#include "Mmcg.h" +#include "string.h" +#include "stdlib.h" +#include "Country.h" + +CMMCG mmcg; + +static LPCSTR ptbl[]={ + "", + "北海道", "青森県","岩手県","秋田県","山形県","宮城県","福島県","新潟県", + "長野県", "東京都","神奈川県","千葉県","埼玉県","茨城県","栃木県","群馬県", + "山梨県","静岡県","岐阜県","愛知県","三重県","京都府","滋賀県","奈良県", + "大阪府","和歌山県","兵庫県","富山県","福井県","石川県","岡山県","島根県", + "山口県","鳥取県","広島県","香川県","徳島県","愛媛県","高知県","福岡県", + "佐賀県","長崎県","熊本県","大分県","宮崎県","鹿児島県","沖縄県" +}; + +static LPCSTR ptbleng[]={ + "", + "Hokkaido", "Aomori","Iwate","Akita","Yamagata","Miyazaki","Fukushima","Nigata", + "Nagano", "Tokyo","Kanagawa","Chiba","Saitama","Ibaragi","Tochigi","Gunma", + "Yamanashi","Shizuoka","Gifu","Aichi","Mie","Kyoto","Shiga","Nara", + "Osaka","Wakayama","Hyogo","Toyama","Fukui","Ishikawa","Okayama","Shimane", + "Yamaguchi","Tottri","Hiroshima","Kagawa","Tokushima","Ehime","Kochi","Fukuoka", + "Saga","Nagasaki","Kumamoto","Oita","Miyazaki","Kagoshima","Okinawa" +}; + +CMMCG::CMMCG() +{ + m_bp = NULL; + m_Max = 0; + m_Cnt = 0; + m_sinc = 0; + m_mask = -1; +} + +CMMCG::~CMMCG() +{ + Free(); +} + +void CMMCG::Free(void) +{ + if( m_bp != NULL ){ + int i; + MMCG *mp; + + for( mp = m_bp, i = 0; i < m_Cnt; i++, mp++ ){ + if( mp->Code != NULL ) delete mp->Code; + if( mp->QTH != NULL ) delete mp->QTH; + if( mp->Key != NULL ) delete mp->Key; + } + m_bp = NULL; + } + if( m_fp != NULL ){ + delete m_fp; + m_fp = NULL; + } + m_Max = m_Cnt = m_FindCnt = 0; +} + +void CMMCG::Alloc(int n) +{ + if( n >= m_Max ){ + int max = m_Max ? m_Max * 2 : 256; + MMCG *np = (MMCG *)new BYTE[sizeof(MMCG) * max]; + if( m_bp != NULL ){ + memcpy(np, m_bp, sizeof(MMCG) * m_Cnt); + delete m_bp; + } + m_bp = np; + m_Max = max; + } +} + +/*#$% +====================================================== + ローマ綴りを調整する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +LPSTR CMMCG::adjspl(LPSTR p) +{ + static char bf[50]; + LPCSTR tp[]={ + "TSU","TU", + "CHA","CYA", + "CHI","CI", + "CHU","CYU", + "CHO","CYO", + "JYA","JA", + "JYU","JU", + "JYO","JO", + "SHA","SYA", + "SHI","SI", + "SHU","SYU", + "SHE","SYE", + "SHO","SYO", + }; + int i, f; + char *t; + + for( t = bf; *p;){ + for( f = 0, i = 0; i < AN(tp); i+=2 ){ + if( !strncmp(p, tp[i], strlen(tp[i])) ){ + strcpy(t, tp[i+1]); + t += strlen(t); + p += strlen(tp[i]); + f++; + break; + } + } + if( !f ){ + *t++ = *p++; + } + } + *t = 0; + return(bf); +} + +/*#$% +====================================================== + 最後のローマ綴りで検索起動を断念する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int CMMCG::chkspl(LPCSTR p) +{ + static char *tp[]={ + "TS","CH","JY","SH", + }; + int i; + + i = strlen(p); + if( i >= 2 ){ + p += (i-2); + for( i = 0; i < AN(tp); i++ ){ + if( !strcmp(tp[i], p) ) return 0; + } + } + return 1; +} + +/*#$% +====================================================== + 文字列の最後の一致を調べる +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int CMMCG::LastMatch(LPSTR t, LPSTR s) +{ + t = lastp(t) - strlen(s) + 1; + return !strcmp(t, s); +} + +/*#$% +====================================================== + 入力されたQTHを正規化する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int CMMCG::NormQth(LPSTR p) +{ + int i; + LPCSTR *cp; + + for( i = 1, cp = &ptbl[1]; i < AN(ptbl); i++, cp++ ){ + if( !strncmp(p, *cp, strlen(*cp)) ){ + if( *(p + strlen(*cp)) ){ + strcpy(p, p + strlen(*cp)); + return 1; + } + } + } + return 0; +} + +/*#$% +====================================================== + エリアマスクを設定する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::SetMask(void) +{ + LPCSTR p; + + m_mask = -1; + if( m_Call[0] ){ /* エリアマスク */ + p = m_Call; + if( (m_Call[0] == '7') && (m_Call[1] != 'J') ){ + m_mask = 1; + p += 3; + } + for( ; *p; p++ ){ + if( isdigit(*(LPUSTR)p) ) m_mask = ((*p) & 0x0f); + } + } +} + +/*#$% +====================================================== + コードから検索対象にするかどうか調べる +------------------------------------------------------ + p : コードのポインタ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int CMMCG::isfind(LPCSTR p) +{ + const char _tt[]={ + -1, + 8, /* 01 */ + 7, 7, 7, 7, 7, 7, /* 02-07 */ + 0, 0, /* 08-09 */ + 1, 1, 1, 1, 1, 1, 1, 1, /* 10-17 */ + 2, 2, 2, 2, /* 18-21 */ + 3, 3, 3, 3, 3, 3, /* 22-27 */ + 9, 9, 9, /* 28-30 */ + 4, 4, 4, 4, 4, /* 31-35 */ + 5, 5, 5, 5, /* 36-39 */ + 6, 6, 6, 6, 6, 6, 6, 6, /* 40-47 */ + }; + + if( m_mask == -1 ){ + return 1; + } + else { + return( (_tt[atoin(p, 2)] == m_mask) ? 1 : 0 ); + } +} + + +/*#$% +====================================================== + 指定位置の文字の種類を得る +------------------------------------------------------ + p : バッファのポインタ + x : 位置 +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int CMMCG::_ischrtyp(char *p, int x) +{ + int xx, jis; + + for( jis = xx = 0; xx < x; xx++, p++ ){ + if( jis ){ + jis = 0; + } + else if( _mbsbtype((unsigned char *)p, 0) == _MBC_LEAD ){ + jis = 1; + } + } + if( jis ){ /* KANJI2 */ + return 2; + } + else if( _mbsbtype((unsigned char *)p, 0) == _MBC_LEAD ){ /* KANJI1 */ + return 1; + } + else { /* ANK */ + return 0; + } +} + +/*#$% +====================================================== + データファイルを読み込む +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::LoadDef(LPCSTR pFileName) +{ + FILE *fp; + char hbf[512]; + LPSTR t, p; + + Free(); + if( (fp = fopen(pFileName, "rt"))!=NULL ){ + while( !feof(fp) ){ + if( fgets(hbf, 512, fp)!=NULL ){ + if( hbf[0] == '$' ) break; + ClipLF(hbf); + if( hbf[0] != '!' ){ + p = StrDlm(t, hbf, TAB); + clipsp(t); + Alloc(m_Cnt); + m_bp[m_Cnt].Code = StrDupe(t); + if( p != NULL ){ + p = StrDlm(t, p, TAB); + if( *t == '%' ) *t = 0; + clipsp(t); + m_bp[m_Cnt].QTH = StrDupe(SkipSpace(t)); + } + else { + m_bp[m_Cnt].QTH = StrDupe(""); + } + if( p != NULL ){ + clipsp(p); + m_bp[m_Cnt].Key = StrDupe(SkipSpace(p)); + } + else { + m_bp[m_Cnt].Key = StrDupe(""); + } + m_Cnt++; + } + } + } + fclose(fp); + m_fp = (MMCG **)new BYTE[sizeof(MMCG*)*m_Cnt]; + } + else { + WarningMB(MsgEng ? "'%s' was not found.\r\n\r\nYou cannot use a JCC/JCG list function.\r\nThis is not a problem if you do not need it":"'%s'が見つかりません.", pFileName); + } +} + +/*#$% +====================================================== + コードから県名を得る +------------------------------------------------------ + code : コードのポインタ +------------------------------------------------------ + 県名のポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR CMMCG::getprf(LPCSTR pCode) +{ + int n; + + n = atoin(pCode, 2); + return(MsgEng ? ptbleng[n] : ptbl[n]); +} + +/*#$% +====================================================== + 郡名を得る +------------------------------------------------------ + p : 町村コードのポインタ +------------------------------------------------------ + QTHのポインタ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::GetGun(LPSTR t, LPCSTR pCode) +{ + strcpy(wbf, pCode); + wbf[5] = 0; + MMCG *mp = m_bp; + int i; + for( i = 0; i < m_Cnt; i++, mp++ ){ + if( !strcmp(mp->Code, wbf) ){ + strcpy(t, mp->QTH); + return; + } + } + *t = 0; +} + +/*#$% +====================================================== + QTHの文字列を得る +------------------------------------------------------ + cp : データのポインタ +------------------------------------------------------ + QTHのポインタ +------------------------------------------------------ +====================================================== +*/ +LPCSTR CMMCG::GetQTH(MMCG *mp) +{ + char bf[512]; + + if( MsgEng ){ + char qth[128]; + strcpy(qth, mp->Key); + LPSTR t; + LPSTR p = qth; + while(*p){ + p = StrDlm(t, p, ','); + } + if( strlen(mp->Code) == 6 ){ + if( isalpha((unsigned char)LastC(mp->Code)) ){ /* 町村コード */ + strcpy(bf, t); + strcat(bf, ","); + GetGun(qth, mp->Code); + strcat(bf, qth); + } + else { /* 政令指定都市 */ + strcpy(bf, t); + } + } + else { /* 都道府県を追加 */ + if( *t ){ + sprintf( bf, "%s,%s", t, getprf(mp->Code)); + } + else { + sprintf( bf, "%s", getprf(mp->Code)); + } + } + } + else { + if( strlen(mp->Code) == 6 ){ + if( isalpha((unsigned char)LastC(mp->Code)) ){ /* 町村コード */ + GetGun(bf, mp->Code); + strcat(bf, mp->QTH); + } + else { /* 政令指定都市 */ + strcpy(bf, mp->QTH); + } + } + else { /* 都道府県を追加 */ + sprintf( bf, "%s%s", getprf(mp->Code), mp->QTH); + } + } + bf[MLQTH] = 0; + m_QTH = bf; + return m_QTH.c_str(); + + +} + + +/*#$% +====================================================== + データの検索を行う(すべて) +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::FindAll(void) +{ + MMCG *mp; + int i; + + m_FindCnt = 0; + mp = m_bp; + for( i = 0; i < m_Cnt; i++, mp++ ){ + if( isfind(mp->Code) ){ + m_fp[m_FindCnt] = mp; + m_FindCnt++; + } + } +} + +/*#$% +====================================================== + 同一データが存在するか調べる +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int CMMCG::isEnt(MMCG *mp) +{ + int i; + + for( i = 0; i < m_FindCnt; i++ ){ + if( m_fp[i] == mp ) return 1; + } + return 0; +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::FindQTH(LPSTR pKey) +{ + MMCG *mp; + int i; + int len, kj; + LPSTR t, p; + + kj = _mbsbtype((unsigned char *)pKey, 0) == _MBC_LEAD ? 1 : 0; + if( kj ) NormQth(pKey); + len = strlen(pKey); + m_FindCnt = 0; + mp = m_bp; + char bf[256]; + for( i = 0; i < m_Cnt; i++, mp++ ){ + if( isfind(mp->Code) ){ + if( kj ){ + if( strstr(mp->QTH, pKey) != NULL ){ + m_fp[m_FindCnt] = mp; + m_FindCnt++; + goto _nx; + } + } + strcpy(bf, mp->Key); + for( p = bf; *p; ){ + p = StrDlm(t, p, ','); + if( (!strncmp(t, pKey, len)) || (m_sinc && (strstr(t, pKey)!=NULL)) ){ + m_fp[m_FindCnt] = mp; + m_FindCnt++; + break; + } + } +_nx:; + } + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::FindNumb(LPSTR pKey) +{ + MMCG *mp; + int i; + int len; + + m_FindCnt = 0; + len = strlen(pKey); + mp = m_bp; + for( i = 0; i < m_Cnt; i++, mp++ ){ + if( (!strncmp(mp->Code, pKey, len)) || (m_sinc && (strstr(mp->Code, pKey)!=NULL)) ){ + m_fp[m_FindCnt] = mp; + m_FindCnt++; + } + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void CMMCG::Find(LPSTR p) +{ + if( *p ){ + if( isdigit(*(LPUSTR)p) ){ + FindNumb(p); + } + else { + jstrupr(p); + if( chkspl(p) ) FindQTH(adjspl(p)); + } + } + else { + FindAll(); + } +} + +#if 0 +/*#$% +====================================================== + 定義領域を確保する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int allocdef(int blk) +{ + if( cseg == 0 ){ + if( (cseg=__malloc(blk))!=0 ){ /* メモリの確保 */ + return(NOERR); + } + return(ERR); + } + return(NOERR); +} + +/*#$% +====================================================== + 定義領域を開放する +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void freedef(void) +{ + if( cseg ){ + __free(cseg); + cseg = 0; + } +} + +#define XW 60 +#define YW 16 +/*#$% +====================================================== + 検索データのメニュー表示をオープンする +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +VEWP *opencc(void) +{ + cc.xw = XW-1; + cc.yw = YW-1; + cc.x = (crt.hmax-cc.xw+2)/2; + cc.y = (crt.vmax-cc.yw+2)/2; + cc.yt = cc.y; + cc.ye = cc.y + cc.yw; + cc.tb = cc.cy = 0; + cc.xe = cc.x + cc.xw - 1; + if( (cc.vp=openvew(cc.x, cc.y, cc.x+cc.xw, cc.ye, _menuwcol))!=NULL ){ + _dprintf( cc.x, cc.yt, " 検索>" ); + cc.x++; + cc.y++; +/* _dprintf( cc.x, cc.ye, "中止, 決定, <↓><↑>選択, クリア, エリア/ALL" );*/ + _dprintf( cc.x, cc.ye, "中止,決定,クリア,検索方法,エリア/ALL" ); + } + return(cc.vp); +} + +/*#$% +====================================================== + 検索データのメニュー表示をクローズする +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void closecc(void) +{ + if( cc.vp ){ + closevew(cc.vp); + cc.vp = NULL; + } +} + +/*#$% +====================================================== + 1行の表示を行う +------------------------------------------------------ + y : 表示位置 + tp: テーブル番号 +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near dspone(int y, int tp) +{ + CD cd; + int l; + uchar bf[60]; + +/*0123456789012345678901234567890123456789012345678901234567*/ +/*250119__ 大阪府__ 大阪市阿倍野区______ ABENO______________*/ +/*12345678 12345678 12345678901234567890 1234567890123456789*/ + + _fills(cc.x, y, cc.xe, y); + if( tp < cc.fn ){ + getdat(cc.ctbl[tp], &cd); + l = strlen(cd.code); + _dprintf(cc.x, y, "%-.8s", cd.code ); + _dprintf(cc.x+9, y, "%-.8s", getprf(cd.code)); + if( l == 6 ){ + if( isalpha(lastc(cd.code)) ){ /* 町村 */ + GetGun(bf, cd.code); + } + else { /* 制令 */ + bf[0] = 0; + } + strcat(bf, cd.qth); + _dprintf(cc.x+18, y, "%-.20s", bf ); + } + else { + _dprintf(cc.x+18, y, "%-.20s", cd.qth ); + } + _dprintf(cc.x+39, y, "%-.19s", cd.key ); + } +} + +/*#$% +====================================================== + 検索データの表示をする +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near dspcc(void) +{ + int y, cp; + CD cd; + + for( cp = cc.tb, y = cc.y; y < cc.ye; y++, cp++ ){ + dspone(y, cp); + } +} + +/*#$% +====================================================== + カーソルの表示 +------------------------------------------------------ + sw : 0-OFF, 1-ON +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near ecursor(int sw) +{ + int at; + + at = sw ? _menuccol : CRT_ATTR_NORMAL; + _afill(cc.x, cc.y + cc.cy, cc.xe, cc.y + cc.cy, at ); +} + +/*#$% +====================================================== + カーソルのアップ +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near cup(void) +{ + if( cc.cy ){ + cc.cy--; + } + else if( cc.tb ){ + cc.tb--; + _scrdwn(cc.x, cc.y, cc.xe, cc.ye-1); + dspone(cc.y, cc.tb); + } +} + +/*#$% +====================================================== + カーソルのダウン +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near cdown(void) +{ + if( (cc.tb + cc.cy) < (cc.fn - 1) ){ + if( cc.cy < (cc.yw - 2) ){ + cc.cy++; + } + else { + cc.tb++; + _scrup(cc.x, cc.y, cc.xe, cc.ye-1); + dspone(cc.ye-1, cc.tb+cc.cy); + } + } +} + +/*#$% +====================================================== + 指定位置へのSEEK +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near cdseek(int tp) +{ + if( tp >= cc.fn ) tp = cc.fn - 1; + if( tp < 0 ) tp = 0; + cc.tb = tp; + cc.cy = 0; + dspcc(); +} + +/*#$% +====================================================== + ページアップ +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near pup(void) +{ + CD cd; + int tp, m; + + tp = cc.tb + cc.cy; + getdat(cc.ctbl[tp], &cd); + m = atoin(cd.code, 2); + for( tp--; tp >= 0; tp-- ){ + getdat(cc.ctbl[tp], &cd); + if( m != atoin(cd.code, 2) ){ + cdseek(tp); + return; + } + } + cdseek(0); +} + +/*#$% +====================================================== + ページダウン +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near pdown(void) +{ + CD cd; + int tp, m; + + tp = cc.tb + cc.cy; + getdat(cc.ctbl[tp], &cd); + m = atoin(cd.code, 2); + for( tp++; tp < cc.fn; tp++ ){ + getdat(cc.ctbl[tp], &cd); + if( m != atoin(cd.code, 2) ){ + cdseek(tp); + return; + } + } + cdseek(32767); +} + +/*#$% +====================================================== + バッファ内容の表示 +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +static void near dspbf(void) +{ + _dprintf(cc.x+5, cc.yt, "%-40s", kbf ); + _dprintf(cc.xe - 15, cc.yt, sinc ? "含み":"先頭"); + _dprintf(cc.xe - 10, cc.yt, (m_mask != -1) ? "%uエリア" : "ALL ", m_mask ); + _dprintf(cc.xe-4, cc.yt, "%4u", cc.fn ); +} + +/*#$% +====================================================== + MMCGの処理を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void mmcg(void) +{ + int c; + int xx; + + loaddat(); + if( nosel == 1 ){ + strcpy(kbf, _dspopt(optnmb, &cc.sd)); + findnosel(jstrupr(kbf)); + setdat(); + return; + } + if( opencc() == NULL ) return; + find1st(); + if( nosel == 2 ){ + if( cc.fn == 1 ) setdat(); + closecc(); + return; + } + dspcc(); + xx = strlen(kbf); + _cursor(ON); + while(1){ + dspbf(); + _locate(cc.x+5 + xx, cc.yt); + ecursor(ON); + c = _bgetch(); + ecursor(OFF); + switch(c){ + case K_RU: + pdown(); + break; + case K_RD: + pup(); + break; + case K_UP: + cup(); + break; + case K_DOWN: + cdown(); + break; + case ESC: + goto _ex; + case K_CR: + setdat(); + goto _ex; + case K_BS: + if( xx ){ + xx--; + if( xx && (_ischrtyp(kbf, xx)==2) ) xx--; + kbf[xx] = 0; + find(kbf); + dspcc(); + } + break; + case ' ': + kbf[0] = 0; + xx = 0; + findall(); + dspcc(); + break; + case K_F1: + sinc = sinc ? 0 : 1; + find(kbf); + dspcc(); + break; + case K_F2: + case K_HOME: + if( mask == -1 ){ + setmask(); + } + else { + mask = -1; + } + find(kbf); + dspcc(); + break; + default: + if( (c > 0x0020) && (c <= 0x00ff) ){ + if( xx < 40 ){ + kbf[xx] = c; + xx++; + kbf[xx] = 0; + if( _ischrtyp(kbf, xx-1) != 1 ){ + finds(kbf); + } + dspcc(); + } + } + break; + } + } +_ex:; + closecc(); +} + +/*#$% +====================================================== + データの検索を行う(すべて) +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void findall(void) +{ + CD cd; + int cp, np; + + cc.tb = cc.cy = cc.fn = 0; + for( cp = 0; cp < cc.cwp; cp = np){ + np = getdat(cp, &cd); + if( isfind(cd.code) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + if( cc.fn >= CTMAX ) break; + } + } +} + +/*#$% +====================================================== + 同一データが存在するか調べる +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +int isEnt(int n) +{ + int i; + + for( i = 0; i < cc.fn; i++ ){ + if( cc.ctbl[i] == n ){ + return(ON); + } + } + return(OFF); +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void findqth(uchar *key) +{ + CD cd; + int cp, np; + int len, kj; + uchar *t, *p; + + if( (kj = iskanji(*key))!=0 ) NormQth(key); + len = strlen(key); + cc.tb = cc.cy = cc.fn = 0; + for( cp = 0; cp < cc.cwp; cp = np){ + np = getdat(cp, &cd); + if( isfind(cd.code) ){ + if( kj ){ + if( jstrstr(cd.qth, key) != NULL ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + goto _nx; + } + } + for( p = cd.key; *p; ){ + p = strdm(&t, p); + if( (!strncmp(t, key, len)) || (sinc && (strstr(t, key)!=NULL)) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + break; + } + } +_nx:; + if( cc.fn >= CTMAX ) break; + } + if( _bkbhit() ) break; + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void findqths(uchar *key) +{ + CD cd; + int cp; + int len, fn, nn, f, kj; + uchar *t, *p; + + if( (kj = iskanji(*key))!=0 ){ + if( NormQth(key) ){ + findqth(key); + return; + } + } + len = strlen(key); + fn = cc.fn; + cc.tb = cc.cy = cc.fn = 0; + f = OFF; + if( lastc(key) == '\\' ){ + f = ON; + *lastp(key) = 0; + } + for( nn = 0; nn < fn; nn++){ + cp = cc.ctbl[nn]; + getdat(cp, &cd); + if( kj ){ + if( jstrstr(cd.qth, key) != NULL ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + goto _nx; + } + } + for( p = cd.key; *p; ){ + p = strdm(&t, p); + if( f ){ + if( (!strcmp(t, key)) || (sinc && (LastMatch(t,key))) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + break; + } + } + else { + if( (!strncmp(t, key, len)) || (sinc && (strstr(t, key)!=NULL)) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + break; + } + } + } +_nx:; + if( cc.fn >= CTMAX ) break; + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void findnmb(uchar *key) +{ + CD cd; + int cp, np; + int len; + + cc.tb = cc.cy = cc.fn = 0; + len = strlen(key); + for( cp = 0; cp < cc.cwp; cp = np){ + np = getdat(cp, &cd); + if( (!strncmp(cd.code, key, len)) || (sinc && (strstr(cd.code, key)!=NULL)) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + if( cc.fn >= CTMAX ) break; + } + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void findnmbs(uchar *key) +{ + CD cd; + int cp; + int len, fn, nn, f; + + fn = cc.fn; + cc.tb = cc.cy = cc.fn = 0; + f = OFF; + if( lastc(key) == '\\' ){ + f = ON; + *lastp(key) = 0; + } + len = strlen(key); + for( nn = 0; nn < fn; nn++){ + cp = cc.ctbl[nn]; + getdat(cp, &cd); + if( f ){ + if( (!strcmp(cd.code, key)) || (sinc && LastMatch(cd.code, key)) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + } + } + else { + if( (!strncmp(cd.code, key, len)) || (sinc && (strstr(cd.code, key)!=NULL)) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + } + } + } + if( f ) strcat(key, "\\"); +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void findnosel(uchar *key) +{ + CD cd; + int cp, np; + + cc.tb = cc.cy = cc.fn = 0; + for( cp = 0; cp < cc.cwp; cp = np){ + np = getdat(cp, &cd); + if( !strcmp(cd.code, key) ){ + cc.ctbl[cc.fn] = cp; + cc.fn++; + break; + } + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void find(uchar *p) +{ + dspbf(); + if( *p ){ + if( isdigit(*p) ){ + findnmb(p); + } + else { + jstrupr(p); + if( chkspl(p) ) findqth(adjspl(p)); + } + } + else { + findall(); + } +} + +/*#$% +====================================================== + データの検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void finds(uchar *p) +{ + dspbf(); + if( *p ){ + if( isdigit(*p) ){ + findnmbs(p); + if( !cc.fn ) findnmb(p); + } + else { + jstrupr(p); + if( chkspl(p) ) findqths(adjspl(p)); + } + } + else { + findall(); + } +} + +/*#$% +====================================================== + 最初の検索を行う +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void find1st(void) +{ + uchar *p; + uchar far *s; + + setmask(); + kbf[0] = 0; + if( setmac ){ + if( dtname[0] && (ishex(dtname)==NOERR) ){ + s = (uchar far *)htoln(dtname, -1); + for( p = kbf; *s; s++, p++ ){ + *p = *s; + } + *p = 0; + } + } + else { + p = _dspopt(optnmb, &cc.sd); + if( *p && isdigit(*p) ){ + strcpy(kbf, p); + } + else if( cc.sd.qth[0] ){ + strcpy(kbf, cc.sd.qth); + } + } + find(jstrupr(kbf)); +} + +/*#$% +====================================================== + データをセットする +------------------------------------------------------ +------------------------------------------------------ +------------------------------------------------------ +====================================================== +*/ +void setdat(void) +{ + CD cd; + uchar far *t; + uchar *p; + + if( cc.fn ){ + if( !dtname[0] ) return; + getdat(cc.ctbl[cc.tb+cc.cy], &cd); + if( setmac ){ + if( ishex(dtname)!=NOERR ) return; + t = (uchar far *)htoln(dtname,-1); + if( ocpy ){ + for( p = cd.code; *p; p++, t++ ){ + *t = *p; + } + *t = 0; + } + if( qcpy ){ + for( p = getqth(&cd); *p; p++, t++ ){ + *t = *p; + } + *t = 0; + } + } + else { + if( ocpy ) strcpy(_ptropt(optnmb, &cc.sd), cd.code); + if( qcpy ) strcpy(cc.sd.qth, getqth(&cd)); + savedat(); + } + } +} + +/*#$% +================================================================ + 1行のアスキーセーブの処理を行う +---------------------------------------------------------------- + fp : ファイルポインタ + sp : データのポインタ +---------------------------------------------------------------- + ERR +---------------------------------------------------------------- +================================================================ +*/ +void _sputdat(uchar *bf, SD *sp) +{ + sinit(bf); + sputf("\042%s\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,", + _strydate(sp->year, sp->date), _strtimes(sp->btime), sp->call, sp->ur, sp->my, _strband(sp->band, sp->fq)); + sputf("\042%s\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,\042%s\042,", + _strmode(sp->mode), sp->pow, sp->name, sp->qth, sp->rem, sp->qsl ); + sputf("\042%s\042,\042%.1s\042,\042%.1s\042,\042%.1s\042,\042%u\042,", _strtime(sp->etime), &sp->send, &sp->recv, &sp->cq, sp->env); + sputf("\042%s\042,\042%s\042,", sp->opt1, sp->opt2 ); + sputf("\042%s\042,", _dspopt(2, sp)); + sputf("\042%s\042", _dspopt(3, sp)); +} + +/*#$% +================================================================ + 1行のアスキーセーブの処理を行う +---------------------------------------------------------------- + fp : ファイルポインタ + sp : データのポインタ +---------------------------------------------------------------- + ERR +---------------------------------------------------------------- +================================================================ +*/ +int _fputdat(FILE *fp, SD *sp) +{ + _sputdat(hbf, sp); + fputs(hbf, fp); + fputs("\r\n", fp); + return(ferror(fp)); +} + +/*#$% +================================================================ + アスキーデータを登録する +---------------------------------------------------------------- + p : バッファのポインタ +---------------------------------------------------------------- + ERR +---------------------------------------------------------------- +================================================================ +*/ +int _aputdat(uchar *p, SD *sp) +{ + uchar *t; + int y, m, d; + + _fillmem(sp, sizeof(SD), 0); + p = strdm(&t, p); /* DATE */ + if( sscanf(t, "%u.%u.%u", &y, &m, &d )!=3 ) return(ERR); + sp->year = y; + sp->date = (m * 100) + d; + p = strdm(&t, p); /* BGN */ + if( sscanf(t, "%u.%u", &d, &y) != 2 ){ + d = atoin(t, -1); + y = 0; + } + m = d / 100; + d = d % 100; + y /= 2; + sp->btime = (((m * 60) + d) * 30) + y; + p = strdm(&t, p); /* CALL */ + strcpy(sp->call, t); + p = strdm(&t, p); /* UR */ + strcpy(sp->ur, t); + p = strdm(&t, p); /* MY */ + strcpy(sp->my, t); + p = strdm(&t, p); /* BAND */ + sp->band = _bandno(&sp->fq, t); + p = strdm(&t, p); /* MODE */ + sp->mode = _modeno(t); + p = strdm(&t, p); /* POW */ + strcpy(sp->pow, t); + p = strdm(&t, p); /* NAME */ + strcpy(sp->name, t); + p = strdm(&t, p); /* QTH */ + strcpy(sp->qth, t); + p = strdm(&t, p); /* REM */ + strcpy(sp->rem, t); + p = strdm(&t, p); /* QSL */ + strcpy(sp->qsl, t); + p = strdm(&t, p); /* ETIME*/ + d = atoin(t, -1); + m = d / 100; + d = d % 100; + sp->etime = ((m * 60) + d) * 30; + p = strdm(&t, p); /* S */ + sp->send = *t; + p = strdm(&t, p); /* R */ + sp->recv = *t; + p = strdm(&t, p); /* M */ + sp->cq = *t; + p = strdm(&t, p); /* ENV */ + sp->env = atoin(t, -1); + p = strdm(&t, p); /* OPT1 */ + strcpy(sp->opt1, t); + p = strdm(&t, p); /* OPT2 */ + strcpy(sp->opt2, t); + p = strdm(&t, p); /* USR1 */ + if( *t ) strcpy(_ptropt(2,sp), t); + p = strdm(&t, p); /* USR2 */ + if( *t ) strcpy(_ptropt(3,sp), t); + return(NOERR); +} + +/*#$% +================================================================ + 引渡データを読み込む +---------------------------------------------------------------- +---------------------------------------------------------------- +---------------------------------------------------------------- +================================================================ +*/ +int loaddat(void) +{ + int r; + FILE *fp; + + r = ERR; + _fillmem(&cc.sd, sizeof(SD), 0); + if( !dtname[0] ) return(NOERR); + if( setmac ) return(NOERR); + if( (fp = fopen(dtname, "rt"))!=NULL ){ + if( (fgets(hbf, 256, fp))!=NULL ){ + cliplf(hbf); + _aputdat(hbf, &cc.sd); + r = NOERR; + } + fclose(fp); + } + return(r); +} + +/*#$% +================================================================ + 指定のデータを書き込む +---------------------------------------------------------------- +---------------------------------------------------------------- +---------------------------------------------------------------- +================================================================ +*/ +void savedat(void) +{ + FILE *fp; + + if( (fp = fopen(dtname, "wb"))!=NULL ){ + _fputdat(fp, &cc.sd); + fclose(fp); + } +} +#endif + diff --git a/Mmcg.h b/Mmcg.h new file mode 100644 index 0000000..4c62bf9 --- /dev/null +++ b/Mmcg.h @@ -0,0 +1,81 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +#ifndef MmcgH +#define MmcgH +#include "LogFile.h" + +#ifndef LPCUSTR +typedef const unsigned char * LPCUSTR; +typedef unsigned char * LPUSTR; +#endif + +typedef struct { + LPSTR Code; + LPSTR QTH; + LPSTR Key; +}MMCG; + +class CMMCG +{ +private: + int m_Max; // 現在確保しているスロット数 + int m_Cnt; // 現在記憶しているスロット数 + MMCG *m_bp; // MMCGの配列 + + + char wbf[512]; + +public: + int m_mask; + int m_sinc; + int m_FindCnt; + MMCG **m_fp; + + AnsiString m_QTH; + char m_Call[MLCALL+1]; +private: + void Free(void); + void Alloc(int n); + LPSTR adjspl(LPSTR p); + int chkspl(LPCSTR p); + int LastMatch(LPSTR t, LPSTR s); + int NormQth(LPSTR p); + int isfind(LPCSTR p); + int _ischrtyp(char *p, int x); + LPCSTR getprf(LPCSTR pCode); + void GetGun(LPSTR t, LPCSTR pCode); + int isEnt(MMCG *mp); + +public: + CMMCG(); + ~CMMCG(); + + void LoadDef(LPCSTR pFileName); + void FindAll(void); + void FindQTH(LPSTR pKey); + void FindNumb(LPSTR pKey); + void Find(LPSTR p); + void SetMask(void); + + LPCSTR GetQTH(MMCG *mp); +}; + +extern CMMCG mmcg; +#endif diff --git a/MmcgDlg.cpp b/MmcgDlg.cpp new file mode 100644 index 0000000..1df884b --- /dev/null +++ b/MmcgDlg.cpp @@ -0,0 +1,245 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "MmcgDlg.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +//TMmcgDlgBox *MmcgDlgBox; +//--------------------------------------------------------------------- +__fastcall TMmcgDlgBox::TMmcgDlgBox(TComponent* AOwner) + : TForm(AOwner) +{ + FormStyle = ((TForm *)AOwner)->FormStyle; + Font->Name = ((TForm *)AOwner)->Font->Name; + Font->Charset = ((TForm *)AOwner)->Font->Charset; + + if( MsgEng ){ + SBInc->Caption = "String"; + SBMask->Caption = "Area"; + CancelBtn->Caption = "Cancel"; + } + + m_DisEvent = 0; +} +//--------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::UpdateCaption(void) +{ + char bf[256]; + + if( MsgEng ){ + if( mmcg.m_Call[0] ){ + sprintf(bf, "MMCG [%s] Find: %d", mmcg.m_Call, mmcg.m_FindCnt); + } + else { + sprintf(bf, "MMCG Find: %d", mmcg.m_FindCnt); + } + } + else { + if( mmcg.m_Call[0] ){ + sprintf(bf, "MMCG [%s] 候補 : %d", mmcg.m_Call, mmcg.m_FindCnt); + } + else { + sprintf(bf, "MMCG 候補: %d", mmcg.m_FindCnt); + } + } + Caption = bf; +} + +//--------------------------------------------------------------------- +int __fastcall TMmcgDlgBox::Execute(AnsiString &call, AnsiString &qth, AnsiString &op) +{ + StrCopy(mmcg.m_Call, call.c_str(), MLCALL); + mmcg.SetMask(); + SBMask->Down = TRUE; + if( mmcg.m_mask == -1 ) SBMask->Enabled = FALSE; + + char bf[256]; + + bf[0] = 0; + if( isdigit(*op.c_str()) ){ + strcpy(bf, op.c_str()); + } + else if( !qth.IsEmpty() ){ + strcpy(bf, qth.c_str()); + } + m_DisEvent++; + EditYomi->Text = bf; + mmcg.Find(bf); + UpdateCaption(); + m_DisEvent--; + Grid->RowCount = mmcg.m_FindCnt ? mmcg.m_FindCnt + 1 : 2; + if( ShowModal() == IDOK ){ + int n = Grid->Row - 1; + if( (n >= 0)&&(n < mmcg.m_FindCnt) ){ + qth = mmcg.GetQTH(mmcg.m_fp[n]); + op = mmcg.m_fp[n]->Code; + return TRUE; + } + } + return FALSE; +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::GridDrawCell(TObject *Sender, int Col, + int Row, TRect &Rect, TGridDrawState State) +{ + char bf[256]; + MMCG *mp; + + Grid->Canvas->FillRect(Rect); + int X = Rect.Left + 4; + int Y = Rect.Top + 2; + + if( Row ){ + Row--; + bf[0] = 0; + if( Row < mmcg.m_FindCnt ){ + mp = mmcg.m_fp[Row]; + } + else { + mp = NULL; + } + switch(Col){ + case 0: // Code + if( mp != NULL ) strcpy(bf, mp->Code); + break; + case 1: // QTH + if( mp != NULL ) strcpy(bf, mmcg.GetQTH(mp)); + break; + case 2: // Key + if( mp != NULL ) strcpy(bf, mp->Key); + break; + } + Grid->Canvas->TextOut(X, Y, bf); + } + else { // タイトル + LPCSTR _tt[]={ + "Code","QTH","Key", + }; + Grid->Canvas->TextOut(X, Y, _tt[Col]); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::EditYomiChange(TObject *Sender) +{ + if( m_DisEvent ) return; + + char bf[256]; + + strcpy(bf, AnsiString(EditYomi->Text).c_str()); //ja7ude 0428 + mmcg.Find(bf); + UpdateCaption(); + Grid->RowCount = mmcg.m_FindCnt ? mmcg.m_FindCnt + 1 : 2; + Grid->Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::EditYomiKeyPress(TObject *Sender, char &Key) +{ + if( Key == 0x20 ){ + EditYomi->Text = ""; + Key = 0; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::EditYomiKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + switch(Key){ + case VK_UP: + if( Grid->Row >= 2 ) Grid->Row--; + Key = 0; + break; + case VK_DOWN: + if( Grid->Row < Grid->RowCount - 1 ) Grid->Row++; + Key = 0; + break; + case VK_HOME: + Grid->Row = 1; + Key = 0; + break; + case VK_END: + Grid->Row = Grid->RowCount - 1; + Key = 0; + break; + case VK_F1: + SBInc->Down = SBInc->Down ? 0 : 1; + SBIncClick(NULL); + Key = 0; + break; + case VK_F2: + SBMask->Down = SBMask->Down ? 0 : 1; + SBMaskClick(NULL); + Key = 0; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::EditYomiKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + switch(Key){ + case VK_UP: + Key = 0; + break; + case VK_DOWN: + Key = 0; + break; + case VK_HOME: + Key = 0; + break; + case VK_END: + Key = 0; + break; + case VK_F1: + Key = 0; + break; + case VK_F2: + Key = 0; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::SBMaskClick(TObject *Sender) +{ + if( SBMask->Down ){ + mmcg.SetMask(); + } + else { + mmcg.m_mask = -1; + } + EditYomiChange(NULL); +} +//--------------------------------------------------------------------------- +void __fastcall TMmcgDlgBox::SBIncClick(TObject *Sender) +{ + if( SBInc->Down ){ + mmcg.m_sinc = 1; + } + else { + mmcg.m_sinc = 0; + } + EditYomiChange(NULL); +} +//--------------------------------------------------------------------------- + + diff --git a/MmcgDlg.dfm b/MmcgDlg.dfm new file mode 100644 index 0000000000000000000000000000000000000000..ef39597986c62095ad22166fab0b9b3c7b7fb088 GIT binary patch literal 1323 zcma)*zi-?&6vrv*?x-IZ+whQ}L($ud7D~FLLyP)!KHt?oOR(hpm{MAzb%J@MK=E)+ zhoWQug$`Xhb?Z`~OSk+R`3r(99g2=BMV@L0Nq{T_zkK9-pZEA)*%@@rG1kE48pTUdZ z_rQ43+&Tqovr*(QK?DxPG55EiNoi11=jGMQvpWjm<&DQ9G$Rqou0 z%WFdGn20&cmhd~TMcTsbf?=9egyiG3l&UPrc!BFHQ^`xKt)%_6)z<}q)4}%9$Gw?~ zHSm)q7cyMS(e#0LKq=p-<-BseBf;0zoaN*iT3x~SZI$Y8!K>icU?;{xF{{^`){o z(=#r(xanaCW7T!A&Bz7qN-Jn~+e7hHV<1aut#8 z=h}ja{V%XztIB|WdYG5eX_u#bRqFCWq^tYQ_W$gCs~doOXucxt01x&SWhQvdFXd>y zI2?WX@CE@ms+*UX6$I^cevNh`c1)g6_=cg~&aypF*lHIGQrBqjmd%`K<9UVd+_Ick G3jaS4tDnvQ literal 0 HcmV?d00001 diff --git a/MmcgDlg.h b/MmcgDlg.h new file mode 100644 index 0000000..5c84561 --- /dev/null +++ b/MmcgDlg.h @@ -0,0 +1,71 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- +#ifndef MmcgDlgH +#define MmcgDlgH +//---------------------------------------------------------------------------- +//ja7ude 0428 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +#include "Mmcg.h" +//---------------------------------------------------------------------------- +class TMmcgDlgBox : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TStringGrid *Grid; + TEdit *EditYomi; + TSpeedButton *SBMask; + TSpeedButton *SBInc;void __fastcall EditYomiChange(TObject *Sender); + + + + + void __fastcall EditYomiKeyDown(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall EditYomiKeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall SBMaskClick(TObject *Sender); + void __fastcall SBIncClick(TObject *Sender); + void __fastcall EditYomiKeyPress(TObject *Sender, char &Key); + void __fastcall GridDrawCell(TObject *Sender, int Col, int Row, + TRect &Rect, TGridDrawState State); +private: + int m_DisEvent; + + void __fastcall UpdateCaption(void); +public: + virtual __fastcall TMmcgDlgBox(TComponent* AOwner); + + int __fastcall Execute(AnsiString &call, AnsiString &qth, AnsiString &op); +}; +//---------------------------------------------------------------------------- +//extern TMmcgDlgBox *MmcgDlgBox; +//---------------------------------------------------------------------------- +#endif diff --git a/Mmsstv English.ini b/Mmsstv English.ini new file mode 100644 index 0000000..371c3d8 --- /dev/null +++ b/Mmsstv English.ini @@ -0,0 +1,1118 @@ +[SoundCard] +SampFreq=1.102500e+04 +TxSampOffset=0.000000e+00 + +[ComboList] +LogFreq=1.8,3.5,3.8,7,7.033,10,14,14.230,18,21,21.340,24,28,28.680,50,144,430,1200,2400 +LogRST=595,575,555,594,574,554,444,333 + +[Version] +INI=2 +LinearCalibration=2 +PLL=2 + +[Window] +Priority=0 +WindowState=0 +MemoryWindow=0 +UseB24=0 +RxViewInd=0 +RxView=0 +RxViewTop=0 +RxViewLeft=0 +RxViewWidth=320 +RxViewHeight=256 +SyncView=0 +SyncViewTop=0 +SyncViewLeft=0 +SyncViewWidth=326 +SyncViewHeight=259 +HistView=0 +HistViewTB=1 +HistViewTop=0 +HistViewLeft=0 +HistViewWidth=516 +HistViewHeight=70 +HistViewSize=2 +CtrBtn=0 +CtrBtnTop=0 +CtrBtnLeft=0 +CtrBtnWidth=128 +CtrBtnHeight=198 +StockViewTop=592 +StockViewLeft=556 +StockViewWidth=470 +StockViewHeight=156 +WaterViewTop=0 +WaterViewLeft=424 +WaterViewWidth=367 +WaterViewHeight=138 +LogViewTop=162 +LogViewLeft=424 +LogViewWidth=367 +LogViewHeight=164 +DivMode=0 +DivSW=7 +PreViewTop=0 +PreViewLeft=0 +PreViewWidth=160 +PreViewHeight=128 +StayOnTop=0 +MainPage=3 +StockPage=1 +StockPicPosition=0 +StockTempPos1=0 +StockTempPos2=0 +StockTempPos3=0 +StockTempPos4=0 +HQResizing=0 +UseTemplate=1 +ShowSuperimpos=0 +DraftSuperimpos=1 +PicClipType=0 +PicClipRatio=1 +PicClipMode=0 +PicClipView=1 +PicClipColor=0 +Way240=1 +AutoMargin=1 +TxClipType=0 +HistMax=32 +AutoRxClear=1 +AutoRxSave=1 +AutoCopy=1 +JPEG=80 +TempSuperimpos=1 +DummyMacro=1 +ShowTransPoint=0 +AutoTransPoint=1 +HistDDSize=2 +ShowSizeRX=0 +ShowSizeHist=0 +ShowSizeTX=0 +ShowSizeTemp=0 +ShowSizeStock=0 +StretchTXimage=0 +SwitchRX=0 + +[FileView] +ShowSize=0 +KeepA=0 + +[FileView1] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView2] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView3] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView4] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView5] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView6] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView7] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView8] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[WindowFont] +Name=Arial +Charset=0 +Style=0 +Adjust=0 + +[Help] +UseNotePad=0 + +[ImageAdj] +Sharp2D=0 + +[Define] +FFTType=2 +FFTGain=5 +FFTResp=0 +FFTStgv=1 +FFTWidth=1 +FFTAGC=1 +FFTPriority=0 +WaterSW=1 +LevelType=0 +UseRxBuff=1 +SoundFifoRX=12 +SoundFifoTX=8 +SoundPriority=1 +SoundDevice=-1 +SoundStereo=0 +StereoTX=0 +SoundMMW= +PTT=NONE +PTTLock=1 +RTSonRX=0 +TXLoopBack=0 +ColorOffset=0 +ColorWhite=7.812500e-03 +ColorBlack=7.812500e-03 +ColorCalibration=0 +FixedTxMode=1 +SSTVMode=3 +RXFSKID=0 +TXFSKID=0 +CWID=0 +CWIDWPM=28 +CWIDFreq=1000 +CWIDText=DE %m +MMVID= +TuneFreq=1750 +TuneTime=-1 +TuneSat=0 +CWText=%m +VOX=0 +VOXTone="1500,100,1700,100,2300,100,2100,100,1900,100,1500,100" +TXGAIN=24578 +TXBPF=1 +TXLPF=0 +TXBPFTAP=24 +TXLPFFQ=2000 +DEMSLVL=1 +Differentiator=0 +DiffLevel=8.000000e-01 +RXAFC=1 +RXLMS=0 +RXLMSAN=0 +DEMBPF=1 +SyncStart=1 +SyncReStart=1 +AutoStop=0 +AutoSync=1 +SyncAccuracy=1 +AutoSwirchRX=0 +AutoSlant=0 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +pllVcoGain=1.000000e+00 +pllLoopOrder=1 +pllLoopFC=1.500000e+03 +pllOutOrder=3 +pllOutFC=9.000000e+02 +Call= + +[Color] +WaterLow=0 +WaterHigh=16777215 +FFTB=4227327 +FFT=65535 +FFTStg=16711680 +FFTSync=65280 +FFTFreq=65535 +RxWindow=16777215 + +[Polynomial] +Value0=-1.636467e+04 +Value1=-1.428800e+04 +Value2=-1.223433e+04 +Value3=-1.019400e+04 +Value4=-8.179333e+03 +Value5=-6.145000e+03 +Value6=-4.088667e+03 +Value7=-2.063000e+03 +Value8=-1.233333e+01 +Value9=2.050000e+03 +Value10=4.105000e+03 +Value11=6.209000e+03 +Value12=8.332667e+03 +Value13=1.045133e+04 +Value14=1.256500e+04 +Value15=1.463267e+04 +Value16=1.663133e+04 + +[Mode] +Button0=0 +Button1=1 +Button2=2 +Button3=3 +Button4=4 +Button5=5 +Button6=6 +Button7=7 +Button8=8 + +[Vari] +Enabled=0 +R=298 +G=588 +B=110 + +[Log] +TempDelay=3 +AutoUTCOffset=0 +UTCOffset=0 +UTCOffsetMin=0 +LogLink=1 +LinkPoll=0 +LinkPTT=0 + +[MMLink] +Name= + +[LogFile] +Name= + +[Program1] +Flag=1 +Name=SSTV-PAL +File=C:\Program Files\SSTV-PAL\SSTV-Pal.exe + +[Program2] +Flag=0 +Name= +File= + +[Program3] +Flag=0 +Name= +File= + +[Program4] +Flag=0 +Name= +File= + +[Program5] +Flag=0 +Name= +File= + +[Program6] +Flag=0 +Name= +File= + +[Program7] +Flag=0 +Name= +File= + +[Program8] +Flag=2 +Name=MMTTY +File=C:\MMTTY\MMTTY.EXE + +[Dir] +HistoryFormat=0 +History= +StockFormat=0 +Stock= +RecSound= +Bitmap= +SaveBitmap= +Template= +AutoSaveDir= +AutoSave=0 +AutoSaveTime=1 +AutoSaveFormat=1 +ExtLog= + +[ExtConv] +WDEF1=%YYYY-MM-DD +WLEN1=0 +WDEF2=%HHMM +WLEN2=0 +WDEF3=%EHHMM +WLEN3=0 +WDEF4=%CALL +WLEN4=0 +WDEF5=%HIS +WLEN5=0 +WDEF6=%MY +WLEN6=0 +WDEF7=%FREQ +WLEN7=0 +WDEF8=%MODE +WLEN8=0 +WDEF9=%POWER +WLEN9=0 +WDEF10=%NAME +WLEN10=0 +WDEF11=%QTH +WLEN11=0 +WDEF12=%REM +WLEN12=0 +WDEF13=%QSL +WLEN13=0 +WDEF14=%S +WLEN14=0 +WDEF15=%R +WLEN15=0 +WDEF16=%EOD +WLEN16=0 +WDEF17= +WLEN17=0 +WDEF18= +WLEN18=0 +WDEF19= +WLEN19=0 +WDEF20= +WLEN20=0 +WDEF21= +WLEN21=0 +WDEF22= +WLEN22=0 +WDEF23= +WLEN23=0 +WDEF24= +WLEN24=0 +WDEF25= +WLEN25=0 +WDEF26= +WLEN26=0 +WDEF27= +WLEN27=0 +WDEF28= +WLEN28=0 +WDEF29= +WLEN29=0 +WDEF30= +WLEN30=0 +WDEF31= +WLEN31=0 +WDEF32= +WLEN32=0 +WDEF33= +WLEN33=0 +WDEF34= +WLEN34=0 +WDEF35= +WLEN35=0 +WDEF36= +WLEN36=0 +WDEF37= +WLEN37=0 +WDEF38= +WLEN38=0 +WDEF39= +WLEN39=0 +WDEF40= +WLEN40=0 +WDEF41= +WLEN41=0 +WDEF42= +WLEN42=0 +WDEF43= +WLEN43=0 +WDEF44= +WLEN44=0 +WDEF45= +WLEN45=0 +WDEF46= +WLEN46=0 +WDEF47= +WLEN47=0 +WDEF48= +WLEN48=0 +WDEF49= +WLEN49=0 +WDEF50= +WLEN50=0 +WDEF51= +WLEN51=0 +WDEF52= +WLEN52=0 +WDEF53= +WLEN53=0 +WDEF54= +WLEN54=0 +WDEF55= +WLEN55=0 +WDEF56= +WLEN56=0 +WDEF57= +WLEN57=0 +WDEF58= +WLEN58=0 +WDEF59= +WLEN59=0 +WDEF60= +WLEN60=0 +WDEF61= +WLEN61=0 +WDEF62= +WLEN62=0 +WDEF63= +WLEN63=0 +WDEF64= +WLEN64=0 +RDEF1=%YYYY-MM-DD +RLEN1=0 +RDEF2=%HHMM +RLEN2=0 +RDEF3=%EHHMM +RLEN3=0 +RDEF4=%CALL +RLEN4=0 +RDEF5=%HIS +RLEN5=0 +RDEF6=%MY +RLEN6=0 +RDEF7=%FREQ +RLEN7=0 +RDEF8=%MODE +RLEN8=0 +RDEF9=%POWER +RLEN9=0 +RDEF10=%NAME +RLEN10=0 +RDEF11=%QTH +RLEN11=0 +RDEF12=%REM +RLEN12=0 +RDEF13=%QSL +RLEN13=0 +RDEF14=%S +RLEN14=0 +RDEF15=%R +RLEN15=0 +RDEF16=%EOD +RLEN16=0 +RDEF17= +RLEN17=0 +RDEF18= +RLEN18=0 +RDEF19= +RLEN19=0 +RDEF20= +RLEN20=0 +RDEF21= +RLEN21=0 +RDEF22= +RLEN22=0 +RDEF23= +RLEN23=0 +RDEF24= +RLEN24=0 +RDEF25= +RLEN25=0 +RDEF26= +RLEN26=0 +RDEF27= +RLEN27=0 +RDEF28= +RLEN28=0 +RDEF29= +RLEN29=0 +RDEF30= +RLEN30=0 +RDEF31= +RLEN31=0 +RDEF32= +RLEN32=0 +RDEF33= +RLEN33=0 +RDEF34= +RLEN34=0 +RDEF35= +RLEN35=0 +RDEF36= +RLEN36=0 +RDEF37= +RLEN37=0 +RDEF38= +RLEN38=0 +RDEF39= +RLEN39=0 +RDEF40= +RLEN40=0 +RDEF41= +RLEN41=0 +RDEF42= +RLEN42=0 +RDEF43= +RLEN43=0 +RDEF44= +RLEN44=0 +RDEF45= +RLEN45=0 +RDEF46= +RLEN46=0 +RDEF47= +RLEN47=0 +RDEF48= +RLEN48=0 +RDEF49= +RLEN49=0 +RDEF50= +RLEN50=0 +RDEF51= +RLEN51=0 +RDEF52= +RLEN52=0 +RDEF53= +RLEN53=0 +RDEF54= +RLEN54=0 +RDEF55= +RLEN55=0 +RDEF56= +RLEN56=0 +RDEF57= +RLEN57=0 +RDEF58= +RLEN58=0 +RDEF59= +RLEN59=0 +RDEF60= +RLEN60=0 +RDEF61= +RLEN61=0 +RDEF62= +RLEN62=0 +RDEF63= +RLEN63=0 +RDEF64= +RLEN64=0 + +[LogSet] +TimeZone=73 +DateType=0 +UpperName=0 +UpperQTH=0 +UpperREM=0 +UpperQSL=0 +DefMyRST=0 +CopyFreq=1 +CopyHis=0 +CopyName=1 +CopyQTH=1 +CopyREM=0 +CopyQSL=0 +CopyREMB4=0 +CheckBand=1 +AutoSave=1 +THRTTY=RTY +THSSTV=STV +THTZ=0 +ClipRSTADIF=1 +FSKNR=1 +Backup=1 +TH5Fields=3,3,7,4,12,28,54 + +[RADIO] +PortName=NONE +BaudRate=4800 +BitLen=1 +Stop=1 +Parity=0 +flwXON=0 +flwCTS=0 +usePTT=0 +ByteWait=0 +Cmdxx=0 +CmdInit= +CmdRx=\$000000000F +CmdTx=\$000000010F\w10 +FileGNR= +OpenGNR=0 +PollType=0 +PollInterval=5 + +[DrawText] +Color1=255 +Color2=16711935 +Color3=65535 +Color4=16776960 +Color5=0 +Color6=0 + +[DrawBar] +Color1=0 +Color2=15790320 +Color3=255 +Color4=32768 + +[ColorSet] +Color1=16776960 +Color2=65535 +Color3=16711935 +Color4=255 +Color5=255 +Color6=16711935 +Color7=65535 +Color8=16776960 +Color9=12615935 +Color10=8454143 +Color11=16776960 +Color12=65280 +Color13=16776960 +Color14=4259584 +Color15=65535 +Color16=16711935 +Color17=255 +Color18=16711935 +Color19=65535 +Color20=65280 +Color21=255 +Color22=4227327 +Color23=65535 +Color24=16777088 +Color25=16776960 +Color26=65535 +Color27=4227327 +Color28=255 +Color29=65280 +Color30=65535 +Color31=33023 +Color32=255 + +[TextList] +Text1=CQ SSTV +Text2=%c +Text3=ur %r +Text4=ur %R-%N +Text5=73 +Text6=de %m +Text7=%D %tZ +Text8=%L %u Local +Text9= +Text10= +Text11= +Text12= +Text13= +Text14= +Text15= +Text16= + +[Text] +Grade=0 +Shadow=2 +Zero=0 +Rot=0 +Vert=0 +VertH=-6 +3D=64516 +MSG="" +DisFontSmooth=1 +Temp24=2097153 + +[Pic] +Shape=0 +Adjust=0 +LineStyle=5 +LineColor=16777215 + +[PicSel] +RTM=1 +Smooz=0 +Color=16777215 + +[ProFile] +Version=1 + +[ProFile1] +Name=ヒルベルト変換 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile2] +Name=ゼロクロス検波 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=1 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=1 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile3] +Name=ゼロクロス検波+微分処理 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=1 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=1 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=1 +DiffLevel=8.000000e-01 + +[ProFile4] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile5] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile6] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile7] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile8] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[CWMenu] +Menus=7 +M1=QSL 73 TU +M2=NR? AGN +M3=QRZ? +M4=UR %N %N +M5=%c de %m +M6=73 TU +M7=VVV + +[RadioMenu] +Menus=5 +Cap1=7.033 LSB (FT847) +Cmd1=\$0070330001\w10\$0000000007\w10 +Cap2=14.230 USB (FT847) +Cmd2=\$0142300001\w10\$0100000007\w10 +Cap3=21.340 USB (FT847) +Cmd3=\$0213400001\w10\$0100000007\w10 +Cap4=28.680 USB (FT847) +Cmd4=\$0286800001\w10\$0100000007\w10 +Cap5=144.450 USB (FT847) +Cmd5=\$1444500001\w10\$0100000007\w10 + diff --git a/Mmsstv Japanese.ini b/Mmsstv Japanese.ini new file mode 100644 index 0000000..b82008f --- /dev/null +++ b/Mmsstv Japanese.ini @@ -0,0 +1,1118 @@ +[SoundCard] +SampFreq=1.102500e+04 +TxSampOffset=0.000000e+00 + +[ComboList] +LogFreq=1.8,3.5,3.8,7,7.033,10,14,14.230,18,21,21.340,24,28,28.680,50,144,430,1200,2400 +LogRST=595,575,555,594,574,554,444,333 + +[Version] +INI=2 +LinearCalibration=2 +PLL=2 + +[Window] +Priority=0 +WindowState=0 +MemoryWindow=0 +UseB24=0 +RxViewInd=0 +RxView=0 +RxViewTop=0 +RxViewLeft=0 +RxViewWidth=320 +RxViewHeight=256 +SyncView=0 +SyncViewTop=0 +SyncViewLeft=0 +SyncViewWidth=326 +SyncViewHeight=259 +HistView=0 +HistViewTB=1 +HistViewTop=0 +HistViewLeft=0 +HistViewWidth=516 +HistViewHeight=70 +HistViewSize=2 +CtrBtn=0 +CtrBtnTop=0 +CtrBtnLeft=0 +CtrBtnWidth=128 +CtrBtnHeight=198 +StockViewTop=592 +StockViewLeft=556 +StockViewWidth=470 +StockViewHeight=156 +WaterViewTop=0 +WaterViewLeft=424 +WaterViewWidth=367 +WaterViewHeight=138 +LogViewTop=162 +LogViewLeft=424 +LogViewWidth=367 +LogViewHeight=164 +DivMode=0 +DivSW=7 +PreViewTop=0 +PreViewLeft=0 +PreViewWidth=160 +PreViewHeight=128 +StayOnTop=0 +MainPage=3 +StockPage=1 +StockPicPosition=0 +StockTempPos1=0 +StockTempPos2=0 +StockTempPos3=0 +StockTempPos4=0 +HQResizing=0 +UseTemplate=1 +ShowSuperimpos=0 +DraftSuperimpos=1 +PicClipType=0 +PicClipRatio=1 +PicClipMode=0 +PicClipView=1 +PicClipColor=0 +Way240=1 +AutoMargin=1 +TxClipType=0 +HistMax=32 +AutoRxClear=1 +AutoRxSave=1 +AutoCopy=1 +JPEG=80 +TempSuperimpos=1 +DummyMacro=1 +ShowTransPoint=0 +AutoTransPoint=1 +HistDDSize=2 +ShowSizeRX=0 +ShowSizeHist=0 +ShowSizeTX=0 +ShowSizeTemp=0 +ShowSizeStock=0 +StretchTXimage=0 +SwitchRX=0 + +[FileView] +ShowSize=0 +KeepA=0 + +[FileView1] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView2] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView3] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView4] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView5] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView6] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView7] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView8] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[WindowFont] +Name=MS Pゴシック +Charset=128 +Style=0 +Adjust=0 + +[Help] +UseNotePad=0 + +[ImageAdj] +Sharp2D=0 + +[Define] +FFTType=2 +FFTGain=5 +FFTResp=0 +FFTStgv=1 +FFTWidth=1 +FFTAGC=1 +FFTPriority=0 +WaterSW=1 +LevelType=0 +UseRxBuff=1 +SoundFifoRX=12 +SoundFifoTX=8 +SoundPriority=1 +SoundDevice=-1 +SoundStereo=0 +StereoTX=0 +SoundMMW= +PTT=NONE +PTTLock=1 +RTSonRX=0 +TXLoopBack=0 +ColorOffset=0 +ColorWhite=7.812500e-03 +ColorBlack=7.812500e-03 +ColorCalibration=0 +FixedTxMode=1 +SSTVMode=3 +RXFSKID=0 +TXFSKID=0 +CWID=0 +CWIDWPM=28 +CWIDFreq=1000 +CWIDText=DE %m +MMVID= +TuneFreq=1750 +TuneTime=-1 +TuneSat=0 +CWText=%m +VOX=0 +VOXTone="1500,100,1700,100,2300,100,2100,100,1900,100,1500,100" +TXGAIN=24578 +TXBPF=1 +TXLPF=0 +TXBPFTAP=24 +TXLPFFQ=2000 +DEMSLVL=1 +Differentiator=0 +DiffLevel=8.000000e-01 +RXAFC=1 +RXLMS=0 +RXLMSAN=0 +DEMBPF=1 +SyncStart=1 +SyncReStart=1 +AutoStop=0 +AutoSync=1 +SyncAccuracy=1 +AutoSwirchRX=0 +AutoSlant=0 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +pllVcoGain=1.000000e+00 +pllLoopOrder=1 +pllLoopFC=1.500000e+03 +pllOutOrder=3 +pllOutFC=9.000000e+02 +Call=NOCALL + +[Color] +WaterLow=0 +WaterHigh=16777215 +FFTB=4227327 +FFT=65535 +FFTStg=16711680 +FFTSync=65280 +FFTFreq=65535 +RxWindow=16777215 + +[Polynomial] +Value0=-1.636467e+04 +Value1=-1.428800e+04 +Value2=-1.223433e+04 +Value3=-1.019400e+04 +Value4=-8.179333e+03 +Value5=-6.145000e+03 +Value6=-4.088667e+03 +Value7=-2.063000e+03 +Value8=-1.233333e+01 +Value9=2.050000e+03 +Value10=4.105000e+03 +Value11=6.209000e+03 +Value12=8.332667e+03 +Value13=1.045133e+04 +Value14=1.256500e+04 +Value15=1.463267e+04 +Value16=1.663133e+04 + +[Mode] +Button0=0 +Button1=1 +Button2=2 +Button3=3 +Button4=4 +Button5=5 +Button6=6 +Button7=7 +Button8=8 + +[Vari] +Enabled=0 +R=298 +G=588 +B=110 + +[Log] +TempDelay=3 +AutoUTCOffset=0 +UTCOffset=0 +UTCOffsetMin=0 +LogLink=1 +LinkPoll=0 +LinkPTT=0 + +[MMLink] +Name= + +[LogFile] +Name= + +[Program1] +Flag=1 +Name=SSTV-PAL +File=C:\Program Files\SSTV-PAL\SSTV-Pal.exe + +[Program2] +Flag=0 +Name= +File= + +[Program3] +Flag=0 +Name= +File= + +[Program4] +Flag=0 +Name= +File= + +[Program5] +Flag=0 +Name= +File= + +[Program6] +Flag=0 +Name= +File= + +[Program7] +Flag=0 +Name= +File= + +[Program8] +Flag=2 +Name=MMTTY +File=C:\MMTTY\MMTTY.EXE + +[Dir] +HistoryFormat=0 +History= +StockFormat=0 +Stock= +RecSound= +Bitmap= +SaveBitmap= +Template= +AutoSaveDir= +AutoSave=0 +AutoSaveTime=1 +AutoSaveFormat=1 +ExtLog= + +[ExtConv] +WDEF1=%YYYY-MM-DD +WLEN1=0 +WDEF2=%HHMM +WLEN2=0 +WDEF3=%EHHMM +WLEN3=0 +WDEF4=%CALL +WLEN4=0 +WDEF5=%HIS +WLEN5=0 +WDEF6=%MY +WLEN6=0 +WDEF7=%FREQ +WLEN7=0 +WDEF8=%MODE +WLEN8=0 +WDEF9=%POWER +WLEN9=0 +WDEF10=%NAME +WLEN10=0 +WDEF11=%QTH +WLEN11=0 +WDEF12=%REM +WLEN12=0 +WDEF13=%QSL +WLEN13=0 +WDEF14=%S +WLEN14=0 +WDEF15=%R +WLEN15=0 +WDEF16=%EOD +WLEN16=0 +WDEF17= +WLEN17=0 +WDEF18= +WLEN18=0 +WDEF19= +WLEN19=0 +WDEF20= +WLEN20=0 +WDEF21= +WLEN21=0 +WDEF22= +WLEN22=0 +WDEF23= +WLEN23=0 +WDEF24= +WLEN24=0 +WDEF25= +WLEN25=0 +WDEF26= +WLEN26=0 +WDEF27= +WLEN27=0 +WDEF28= +WLEN28=0 +WDEF29= +WLEN29=0 +WDEF30= +WLEN30=0 +WDEF31= +WLEN31=0 +WDEF32= +WLEN32=0 +WDEF33= +WLEN33=0 +WDEF34= +WLEN34=0 +WDEF35= +WLEN35=0 +WDEF36= +WLEN36=0 +WDEF37= +WLEN37=0 +WDEF38= +WLEN38=0 +WDEF39= +WLEN39=0 +WDEF40= +WLEN40=0 +WDEF41= +WLEN41=0 +WDEF42= +WLEN42=0 +WDEF43= +WLEN43=0 +WDEF44= +WLEN44=0 +WDEF45= +WLEN45=0 +WDEF46= +WLEN46=0 +WDEF47= +WLEN47=0 +WDEF48= +WLEN48=0 +WDEF49= +WLEN49=0 +WDEF50= +WLEN50=0 +WDEF51= +WLEN51=0 +WDEF52= +WLEN52=0 +WDEF53= +WLEN53=0 +WDEF54= +WLEN54=0 +WDEF55= +WLEN55=0 +WDEF56= +WLEN56=0 +WDEF57= +WLEN57=0 +WDEF58= +WLEN58=0 +WDEF59= +WLEN59=0 +WDEF60= +WLEN60=0 +WDEF61= +WLEN61=0 +WDEF62= +WLEN62=0 +WDEF63= +WLEN63=0 +WDEF64= +WLEN64=0 +RDEF1=%YYYY-MM-DD +RLEN1=0 +RDEF2=%HHMM +RLEN2=0 +RDEF3=%EHHMM +RLEN3=0 +RDEF4=%CALL +RLEN4=0 +RDEF5=%HIS +RLEN5=0 +RDEF6=%MY +RLEN6=0 +RDEF7=%FREQ +RLEN7=0 +RDEF8=%MODE +RLEN8=0 +RDEF9=%POWER +RLEN9=0 +RDEF10=%NAME +RLEN10=0 +RDEF11=%QTH +RLEN11=0 +RDEF12=%REM +RLEN12=0 +RDEF13=%QSL +RLEN13=0 +RDEF14=%S +RLEN14=0 +RDEF15=%R +RLEN15=0 +RDEF16=%EOD +RLEN16=0 +RDEF17= +RLEN17=0 +RDEF18= +RLEN18=0 +RDEF19= +RLEN19=0 +RDEF20= +RLEN20=0 +RDEF21= +RLEN21=0 +RDEF22= +RLEN22=0 +RDEF23= +RLEN23=0 +RDEF24= +RLEN24=0 +RDEF25= +RLEN25=0 +RDEF26= +RLEN26=0 +RDEF27= +RLEN27=0 +RDEF28= +RLEN28=0 +RDEF29= +RLEN29=0 +RDEF30= +RLEN30=0 +RDEF31= +RLEN31=0 +RDEF32= +RLEN32=0 +RDEF33= +RLEN33=0 +RDEF34= +RLEN34=0 +RDEF35= +RLEN35=0 +RDEF36= +RLEN36=0 +RDEF37= +RLEN37=0 +RDEF38= +RLEN38=0 +RDEF39= +RLEN39=0 +RDEF40= +RLEN40=0 +RDEF41= +RLEN41=0 +RDEF42= +RLEN42=0 +RDEF43= +RLEN43=0 +RDEF44= +RLEN44=0 +RDEF45= +RLEN45=0 +RDEF46= +RLEN46=0 +RDEF47= +RLEN47=0 +RDEF48= +RLEN48=0 +RDEF49= +RLEN49=0 +RDEF50= +RLEN50=0 +RDEF51= +RLEN51=0 +RDEF52= +RLEN52=0 +RDEF53= +RLEN53=0 +RDEF54= +RLEN54=0 +RDEF55= +RLEN55=0 +RDEF56= +RLEN56=0 +RDEF57= +RLEN57=0 +RDEF58= +RLEN58=0 +RDEF59= +RLEN59=0 +RDEF60= +RLEN60=0 +RDEF61= +RLEN61=0 +RDEF62= +RLEN62=0 +RDEF63= +RLEN63=0 +RDEF64= +RLEN64=0 + +[LogSet] +TimeZone=73 +DateType=0 +UpperName=0 +UpperQTH=0 +UpperREM=0 +UpperQSL=0 +DefMyRST=0 +CopyFreq=1 +CopyHis=0 +CopyName=1 +CopyQTH=1 +CopyREM=0 +CopyQSL=0 +CopyREMB4=0 +CheckBand=1 +AutoSave=1 +THRTTY=RTY +THSSTV=STV +THTZ=0 +ClipRSTADIF=1 +FSKNR=1 +Backup=1 +TH5Fields=3,3,7,4,12,28,54 + +[RADIO] +PortName=NONE +BaudRate=4800 +BitLen=1 +Stop=1 +Parity=0 +flwXON=0 +flwCTS=0 +usePTT=0 +ByteWait=0 +Cmdxx=0 +CmdInit= +CmdRx=\$000000000F +CmdTx=\$000000010F\w10 +FileGNR= +OpenGNR=0 +PollType=0 +PollInterval=5 + +[DrawText] +Color1=255 +Color2=16711935 +Color3=65535 +Color4=16776960 +Color5=0 +Color6=0 + +[DrawBar] +Color1=0 +Color2=15790320 +Color3=255 +Color4=32768 + +[ColorSet] +Color1=16776960 +Color2=65535 +Color3=16711935 +Color4=255 +Color5=255 +Color6=16711935 +Color7=65535 +Color8=16776960 +Color9=12615935 +Color10=8454143 +Color11=16776960 +Color12=65280 +Color13=16776960 +Color14=4259584 +Color15=65535 +Color16=16711935 +Color17=255 +Color18=16711935 +Color19=65535 +Color20=65280 +Color21=255 +Color22=4227327 +Color23=65535 +Color24=16777088 +Color25=16776960 +Color26=65535 +Color27=4227327 +Color28=255 +Color29=65280 +Color30=65535 +Color31=33023 +Color32=255 + +[TextList] +Text1=CQ SSTV +Text2=%c +Text3=ur %r +Text4=ur %R-%N +Text5=73 +Text6=de %m +Text7=%D %tZ +Text8=%L %u Local +Text9= +Text10= +Text11= +Text12= +Text13= +Text14= +Text15= +Text16= + +[Text] +Grade=0 +Shadow=2 +Zero=0 +Rot=0 +Vert=0 +VertH=-6 +3D=64516 +MSG="" +DisFontSmooth=1 +Temp24=2097153 + +[Pic] +Shape=0 +Adjust=0 +LineStyle=5 +LineColor=16777215 + +[PicSel] +RTM=1 +Smooz=0 +Color=16777215 + +[ProFile] +Version=1 + +[ProFile1] +Name=ヒルベルト変換 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile2] +Name=ゼロクロス検波 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=1 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=1 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile3] +Name=ゼロクロス検波+微分処理 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=1 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=1 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=1 +DiffLevel=8.000000e-01 + +[ProFile4] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile5] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile6] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile7] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile8] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[CWMenu] +Menus=7 +M1=QSL 73 TU +M2=NR? AGN +M3=QRZ? +M4=UR %N %N +M5=%c de %m +M6=73 TU +M7=VVV + +[RadioMenu] +Menus=5 +Cap1=7.033 LSB (FT847) +Cmd1=\$0070330001\w10\$0000000007\w10 +Cap2=14.230 USB (FT847) +Cmd2=\$0142300001\w10\$0100000007\w10 +Cap3=21.340 USB (FT847) +Cmd3=\$0213400001\w10\$0100000007\w10 +Cap4=28.680 USB (FT847) +Cmd4=\$0286800001\w10\$0100000007\w10 +Cap5=144.450 USB (FT847) +Cmd5=\$1444500001\w10\$0100000007\w10 + diff --git a/Mmsstv.bpr b/Mmsstv.bpr new file mode 100644 index 0000000..3747cb2 --- /dev/null +++ b/Mmsstv.bpr @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1041 +CodePage=932 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlRunParameters] +Count=1 +Item0=-r + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/Mmsstv.cbproj b/Mmsstv.cbproj new file mode 100644 index 0000000..4921daa --- /dev/null +++ b/Mmsstv.cbproj @@ -0,0 +1,784 @@ +サソ + + {A96F1C7C-EA53-4893-AAB3-9F1974AE105E} + CppVCLApplication + Mmsstv.cpp + True + Debug + 14.6 + Application + VCL + Win32 + 1 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1041 + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + rtl.lib;vcl.lib;inet.lib + jpeg\;$(IncludePath) + vclx.bpi;rtl.bpi;vcl.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;bcbsmp.bpi;teeui.bpi;vclsmp.bpi;teedb.bpi;tee.bpi;ibsmp.bpi;inetdb.bpi;inet.bpi;$(PackageImports) + .\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_UnitSearchPath) + Windows + true + c:\program files\borland\cbuilder3\projects;jpeg;$(BDS)\include;$(BDS)\include\vcl;$(BRCC_IncludePath) + true + jpeg;$(BDS)\include;$(BCC_IncludePath) + .\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_IncludePath) + c:\program files\borland\cbuilder3\projects;jpeg;$(BDS)\include;$(BDS)\include\vcl;$(TASM_IncludePath) + . + true + rtl.lib;vcl.lib;inet.lib + None + /w2 + exe + JPHNE + -M + jpeg\;c:\program files\borland\cbuilder3\projects;jpeg;$(BDS)\lib\obj;$(BDS)\lib;$(BDS)\lib\psdk;$(ILINK_LibraryPath) + + + Mmsstv_Icon.ico + true + 1033 + -tWM -Tkh30000 -Vx -d -Ve + $(BDS)\bin\default_app.manifest + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + + + Mmsstv_Icon.ico + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + + + $(BDS)\lib\debug;$(ILINK_LibraryPath);$(ILINK_LibraryPath) + DEBUG;$(DCC_Define);$(DCC_Define) + true + Debug_Build + true + true + true + true + Full + -M -V + true + true + false + + + _DEBUG;$(BCC_Defines);$(BCC_Defines) + -tWM -Tkh30000 -Vx -d -Ve -k + 1033 + true + None + false + true + true + true + + + _DEBUG;$(BCC_Defines);$(BCC_Defines) + + + Release_Build + -M -$O+ + $(BDS)\lib\release;$(ILINK_LibraryPath);$(ILINK_LibraryPath) + + + -tWM -Tkh30000 -Vx -d -Ve -r + NDEBUG;$(BCC_Defines);$(BCC_Defines) + + + NDEBUG;$(BCC_Defines);$(BCC_Defines) + + + + 94 +

      BitMaskDlg + BitMask.h + 30 + + + 86 +
      ClockAdjDlg
      + ClockAdj.h + 42 +
      + + 88 +
      ColorBarDlg
      + ColorBar.h + 50 +
      + + 62 +
      ColorSetDlg
      + ColorSet.h + 24 +
      + + 8 + ComLib.h + 78 + + + 74 + Comm.h + 10 + + + 82 +
      ConvDefDlg
      + ConvDef.h + 44 +
      + + 99 + country.h + 29 + + + 75 + cradio.h + 11 + + + 55 +
      CtrBtnWnd
      + CtrBtn.h + 17 +
      + + 9 + Draw.h + 79 + + + 95 +
      ExtCmdDlg
      + ExtCmd.h + 31 +
      + + 77 + Fft.h + 7 + + + 54 +
      FileViewDlg
      + fileview.h + 16 +
      + + 68 + fir.h + 4 + + + 90 +
      FreqDispDlg
      + FreqDisp.h + 52 +
      + + 35 + Hamlog5.h + 105 + + + 59 +
      HistViewDlg
      + HistView.h + 15 +
      + + 87 +
      InputWinDlg
      + InputWin.h + 46 +
      + + 76 + 12 + + + 96 + 32 + + + 33 + 100 + + + 34 + 104 + + + 35 + 105 + + + 36 + jpeg\Jchuff.h + 106 + + + 37 + 101 + + + 38 + 102 + + + 39 + 103 + + + 84 + 40 + + + 85 + 41 + + + 86 + 42 + + + 81 + 43 + + + 82 + 44 + + + 83 + 45 + + + 87 + 46 + + + 91 + 47 + + + 92 + 48 + + + 93 + 49 + + + 88 + 50 + + + 89 + 51 + + + 90 + 52 + + + 53 + + + 54 + jpeg\Jdhuff.h + 16 + + + 55 + 17 + + + 56 + 18 + + + 57 + 13 + + + 58 + 14 + + + 59 + 15 + + + 60 + 19 + + + 61 + 23 + + + 62 + 24 + + + 63 + 25 + + + 64 + jpeg\Jerror.h + 20 + + + 65 + 21 + + + 66 + 22 + + + 67 + 3 + + + 77 + jpeg\jhandle.h + 7 + + + 68 + 4 + + + 69 + 5 + + + 70 + 0 + + + 71 + 1 + + + 72 + 2 + + + 73 + 6 + + + 74 + 10 + + + 75 + 11 + + + 95 + 31 + + + 89 +
      LinearDspDlg
      + LinearDs.h + 51 +
      + + 63 +
      LineSetDlg
      + LineSet.h + 25 +
      + + 60 +
      ListTextDlg
      + ListText.h + 19 +
      + + 84 + LogConv.h + 40 + + + 97 + LogFile.h + 27 + + + 98 + Loglink.h + 28 + + + 9 +
      LogListDlg
      + LogList.h + 79 +
      + + 93 +
      LogPicDlg
      + LogPic.h + 49 +
      + + 80 +
      LogSetDlg
      + LogSet.h + 26 +
      + + 61 +
      MacroKeyDlg
      + MacroKey.h + 23 +
      + + 72 +
      Mmsstv
      + Main.h + 2 +
      + + 94 + Mmcg.h + 30 + + + 83 +
      MmcgDlgBox
      + MmcgDlg.h + 45 +
      + + 37 + 101 + + + 33 + MMlink.h + 100 + + + 38 + 102 + + + -1 + 0 + + + -1 + 1 + + + 39 + 103 + + + 58 +
      OptionDlg
      + Option.h + 14 +
      + + 96 +
      PerSpectDlg
      + PerSpect.h + 32 +
      + + 64 +
      PicFilterDlg
      + PicFilte.h + 20 +
      + + 80 +
      PicRectDlg
      + PicRect.h + 26 +
      + + 66 +
      PicSelDlg
      + PicSel.h + 22 +
      + + 99 +
      PlayDlgBox
      + PlayDlg.h + 29 +
      + + 8 +
      PrevViewBox
      + PrevView.h + 78 +
      + + 81 +
      QSODlgBox
      + Qsodlg.h + 43 +
      + + 91 +
      RADIOSetDlg
      + RadioSet.h + 47 +
      + + 97 +
      RepSetDlg
      + RepSet.h + 27 +
      + + 36 +
      RMenuDialog
      + RMenuDlg.h + 106 +
      + + 57 +
      RxViewDlg
      + RxView.h + 13 +
      + + 98 +
      TScope
      + Scope.h + 28 +
      + + 67 + Sound.h + 3 + + + 69 + sstv.h + 5 + + + 65 +
      StockView
      + StockVew.h + 21 +
      + + 92 +
      TextEditDlg
      + TextEdit.h + 48 +
      + + 76 +
      TextInDlg
      + TextIn.h + 12 +
      + + 34 +
      TH5LenDlg
      + TH5Len.h + 104 +
      + + 85 +
      VerDspDlg
      + VerDsp.h + 41 +
      + + 73 + Wave.h + 6 + + + 56 +
      ZoomViewDlg
      + ZoomView.h + 18 +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + + + + + + CPlusPlusBuilder.Personality.12 + CppVCLApplication + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1041 + 932 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + 1 + -r + + + $(BCB)\source\vcl + + + + + 0 + + + 0 + 0 + 0 + + + False + True + True + + + Mmsstv.cpp + + + + True + False + + + 12 + + diff --git a/Mmsstv.cbproj.local b/Mmsstv.cbproj.local new file mode 100644 index 0000000..b3811b7 --- /dev/null +++ b/Mmsstv.cbproj.local @@ -0,0 +1,2 @@ +サソ + diff --git a/Mmsstv.cpp b/Mmsstv.cpp new file mode 100644 index 0000000..7103cd7 --- /dev/null +++ b/Mmsstv.cpp @@ -0,0 +1,156 @@ +//Copyright+LGPL + +//----------------------------------------------------------------------------------------------------------------------------------------------- +// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba +//----------------------------------------------------------------------------------------------------------------------------------------------- +// This file is part of MMSSTV. + +// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see +// . +//----------------------------------------------------------------------------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("Mmsstv.res"); +USEFORM("Main.cpp", Mmsstv); +USEUNIT("Sound.cpp"); +USEUNIT("fir.cpp"); +USEUNIT("sstv.cpp"); +USEUNIT("Wave.cpp"); +USEUNIT("Fft.cpp"); +USEUNIT("ComLib.cpp"); +USEUNIT("Draw.cpp"); +USEUNIT("Comm.cpp"); +USEUNIT("cradio.cpp"); +USEFORM("TextIn.cpp", TextInDlg); +USEFORM("RxView.cpp", RxViewDlg); +USEFORM("Option.cpp", OptionDlg); +USEFORM("HistView.cpp", HistViewDlg); +USEFORM("fileview.cpp", FileViewDlg); +USEFORM("CtrBtn.cpp", CtrBtnWnd); +USEFORM("ZoomView.cpp", ZoomViewDlg); +USEFORM("ListText.cpp", ListTextDlg); +USEFORM("PicFilte.cpp", PicFilterDlg); +USEFORM("StockVew.cpp", StockView); +USEFORM("PicSel.cpp", PicSelDlg); +USEFORM("MacroKey.cpp", MacroKeyDlg); +USEFORM("ColorSet.cpp", ColorSetDlg); +USEFORM("LineSet.cpp", LineSetDlg); +USEFORM("PicRect.cpp", PicRectDlg); +USEUNIT("LogFile.cpp"); +USEUNIT("Loglink.cpp"); +USEUNIT("country.cpp"); +USEUNIT("Mmcg.cpp"); +USEUNIT("jpeg\Jutils.c"); +USEUNIT("jpeg\Jcapistd.c"); +USEUNIT("jpeg\Jccoefct.c"); +USEUNIT("jpeg\Jccolor.c"); +USEUNIT("jpeg\Jcdctmgr.c"); +USEUNIT("jpeg\Jchuff.c"); +USEUNIT("jpeg\Jcinit.c"); +USEUNIT("jpeg\Jcmainct.c"); +USEUNIT("jpeg\Jcmarker.c"); +USEUNIT("jpeg\Jcmaster.c"); +USEUNIT("jpeg\Jcomapi.c"); +USEUNIT("jpeg\Jcparam.c"); +USEUNIT("jpeg\Jcphuff.c"); +USEUNIT("jpeg\Jcprepct.c"); +USEUNIT("jpeg\Jcsample.c"); +USEUNIT("jpeg\Jctrans.c"); +USEUNIT("jpeg\Jdapimin.c"); +USEUNIT("jpeg\Jdapistd.c"); +USEUNIT("jpeg\Jdatadst.c"); +USEUNIT("jpeg\Jdatasrc.c"); +USEUNIT("jpeg\Jdcoefct.c"); +USEUNIT("jpeg\Jdcolor.c"); +USEUNIT("jpeg\Jddctmgr.c"); +USEUNIT("jpeg\Jdhuff.c"); +USEUNIT("jpeg\Jdinput.c"); +USEUNIT("jpeg\Jdmainct.c"); +USEUNIT("jpeg\Jdmarker.c"); +USEUNIT("jpeg\Jdmaster.c"); +USEUNIT("jpeg\Jdmerge.c"); +USEUNIT("jpeg\Jdphuff.c"); +USEUNIT("jpeg\Jdpostct.c"); +USEUNIT("jpeg\Jdsample.c"); +USEUNIT("jpeg\Jdtrans.c"); +USEUNIT("jpeg\Jerror.c"); +USEUNIT("jpeg\Jfdctflt.c"); +USEUNIT("jpeg\Jfdctfst.c"); +USEUNIT("jpeg\Jfdctint.c"); +USEUNIT("jpeg\Jidctflt.c"); +USEUNIT("jpeg\Jidctfst.c"); +USEUNIT("jpeg\Jidctint.c"); +USEUNIT("jpeg\Jidctred.c"); +USEUNIT("jpeg\Jmemmgr.c"); +USEUNIT("jpeg\Jmemnobs.c"); +USEUNIT("jpeg\Jquant1.c"); +USEUNIT("jpeg\Jquant2.c"); +USEUNIT("jpeg\Jcapimin.c"); +USEUNIT("jpeg\jhandle.C"); +USEFORM("PrevView.cpp", PrevViewBox); +USEFORM("LogList.cpp", LogListDlg); +USEFORM("LogSet.cpp", LogSetDlg); +USEFORM("Qsodlg.cpp", QSODlgBox); +USEFORM("ConvDef.cpp", ConvDefDlg); +USEFORM("MmcgDlg.cpp", MmcgDlgBox); +USEUNIT("LogConv.cpp"); +USEFORM("VerDsp.cpp", VerDspDlg); +USEFORM("ClockAdj.cpp", ClockAdjDlg); +USEFORM("InputWin.cpp", InputWinDlg); +USEFORM("ColorBar.cpp", ColorBarDlg); +USEFORM("LinearDs.cpp", LinearDspDlg); +USEFORM("FreqDisp.cpp", FreqDispDlg); +USEFORM("RadioSet.cpp", RADIOSetDlg); +USEFORM("TextEdit.cpp", TextEditDlg); +USEFORM("LogPic.cpp", LogPicDlg); +USEFORM("BitMask.cpp", BitMaskDlg); +USEFORM("ExtCmd.cpp", ExtCmdDlg); +USEFORM("PerSpect.cpp", PerSpectDlg); +USEFORM("RepSet.cpp", RepSetDlg); +USEFORM("Scope.cpp", TScope); +USEFORM("PlayDlg.cpp", PlayDlgBox); +USEUNIT("MMlink.cpp"); +USEFILE("mml.h"); +USEFILE("mmrp.h"); +USEFILE("mmw.h"); +USEFORM("TH5Len.cpp", TH5LenDlg); +USEUNIT("Hamlog5.cpp"); +USEFORM("RMenuDlg.cpp", RMenuDialog); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + LPSTR pCmd = GetCommandLine(); + if( strstr(pCmd, "-Z") == NULL ){ + HWND hWnd = ::FindWindow("TMmsstv", NULL); + if( hWnd != NULL ){ + hWnd = ::FindWindow("TAppBuilder", NULL); + if( hWnd == NULL ){ + return 0; + } + } + } + + try + { + Application->Initialize(); + Application->CreateForm(__classid(TMmsstv), &Mmsstv); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- + diff --git a/Mmsstv.ini b/Mmsstv.ini new file mode 100644 index 0000000..371c3d8 --- /dev/null +++ b/Mmsstv.ini @@ -0,0 +1,1118 @@ +[SoundCard] +SampFreq=1.102500e+04 +TxSampOffset=0.000000e+00 + +[ComboList] +LogFreq=1.8,3.5,3.8,7,7.033,10,14,14.230,18,21,21.340,24,28,28.680,50,144,430,1200,2400 +LogRST=595,575,555,594,574,554,444,333 + +[Version] +INI=2 +LinearCalibration=2 +PLL=2 + +[Window] +Priority=0 +WindowState=0 +MemoryWindow=0 +UseB24=0 +RxViewInd=0 +RxView=0 +RxViewTop=0 +RxViewLeft=0 +RxViewWidth=320 +RxViewHeight=256 +SyncView=0 +SyncViewTop=0 +SyncViewLeft=0 +SyncViewWidth=326 +SyncViewHeight=259 +HistView=0 +HistViewTB=1 +HistViewTop=0 +HistViewLeft=0 +HistViewWidth=516 +HistViewHeight=70 +HistViewSize=2 +CtrBtn=0 +CtrBtnTop=0 +CtrBtnLeft=0 +CtrBtnWidth=128 +CtrBtnHeight=198 +StockViewTop=592 +StockViewLeft=556 +StockViewWidth=470 +StockViewHeight=156 +WaterViewTop=0 +WaterViewLeft=424 +WaterViewWidth=367 +WaterViewHeight=138 +LogViewTop=162 +LogViewLeft=424 +LogViewWidth=367 +LogViewHeight=164 +DivMode=0 +DivSW=7 +PreViewTop=0 +PreViewLeft=0 +PreViewWidth=160 +PreViewHeight=128 +StayOnTop=0 +MainPage=3 +StockPage=1 +StockPicPosition=0 +StockTempPos1=0 +StockTempPos2=0 +StockTempPos3=0 +StockTempPos4=0 +HQResizing=0 +UseTemplate=1 +ShowSuperimpos=0 +DraftSuperimpos=1 +PicClipType=0 +PicClipRatio=1 +PicClipMode=0 +PicClipView=1 +PicClipColor=0 +Way240=1 +AutoMargin=1 +TxClipType=0 +HistMax=32 +AutoRxClear=1 +AutoRxSave=1 +AutoCopy=1 +JPEG=80 +TempSuperimpos=1 +DummyMacro=1 +ShowTransPoint=0 +AutoTransPoint=1 +HistDDSize=2 +ShowSizeRX=0 +ShowSizeHist=0 +ShowSizeTX=0 +ShowSizeTemp=0 +ShowSizeStock=0 +StretchTXimage=0 +SwitchRX=0 + +[FileView] +ShowSize=0 +KeepA=0 + +[FileView1] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView2] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView3] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView4] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView5] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView6] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView7] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[FileView8] +Flag=0 +Mode=1 +Size=2 +Top=0 +Left=0 +Width=516 +Height=70 +MaxPage=1 +CurPage=0 +FMPage1=-2147483648 +Folder= +Name1= + +[WindowFont] +Name=Arial +Charset=0 +Style=0 +Adjust=0 + +[Help] +UseNotePad=0 + +[ImageAdj] +Sharp2D=0 + +[Define] +FFTType=2 +FFTGain=5 +FFTResp=0 +FFTStgv=1 +FFTWidth=1 +FFTAGC=1 +FFTPriority=0 +WaterSW=1 +LevelType=0 +UseRxBuff=1 +SoundFifoRX=12 +SoundFifoTX=8 +SoundPriority=1 +SoundDevice=-1 +SoundStereo=0 +StereoTX=0 +SoundMMW= +PTT=NONE +PTTLock=1 +RTSonRX=0 +TXLoopBack=0 +ColorOffset=0 +ColorWhite=7.812500e-03 +ColorBlack=7.812500e-03 +ColorCalibration=0 +FixedTxMode=1 +SSTVMode=3 +RXFSKID=0 +TXFSKID=0 +CWID=0 +CWIDWPM=28 +CWIDFreq=1000 +CWIDText=DE %m +MMVID= +TuneFreq=1750 +TuneTime=-1 +TuneSat=0 +CWText=%m +VOX=0 +VOXTone="1500,100,1700,100,2300,100,2100,100,1900,100,1500,100" +TXGAIN=24578 +TXBPF=1 +TXLPF=0 +TXBPFTAP=24 +TXLPFFQ=2000 +DEMSLVL=1 +Differentiator=0 +DiffLevel=8.000000e-01 +RXAFC=1 +RXLMS=0 +RXLMSAN=0 +DEMBPF=1 +SyncStart=1 +SyncReStart=1 +AutoStop=0 +AutoSync=1 +SyncAccuracy=1 +AutoSwirchRX=0 +AutoSlant=0 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +pllVcoGain=1.000000e+00 +pllLoopOrder=1 +pllLoopFC=1.500000e+03 +pllOutOrder=3 +pllOutFC=9.000000e+02 +Call= + +[Color] +WaterLow=0 +WaterHigh=16777215 +FFTB=4227327 +FFT=65535 +FFTStg=16711680 +FFTSync=65280 +FFTFreq=65535 +RxWindow=16777215 + +[Polynomial] +Value0=-1.636467e+04 +Value1=-1.428800e+04 +Value2=-1.223433e+04 +Value3=-1.019400e+04 +Value4=-8.179333e+03 +Value5=-6.145000e+03 +Value6=-4.088667e+03 +Value7=-2.063000e+03 +Value8=-1.233333e+01 +Value9=2.050000e+03 +Value10=4.105000e+03 +Value11=6.209000e+03 +Value12=8.332667e+03 +Value13=1.045133e+04 +Value14=1.256500e+04 +Value15=1.463267e+04 +Value16=1.663133e+04 + +[Mode] +Button0=0 +Button1=1 +Button2=2 +Button3=3 +Button4=4 +Button5=5 +Button6=6 +Button7=7 +Button8=8 + +[Vari] +Enabled=0 +R=298 +G=588 +B=110 + +[Log] +TempDelay=3 +AutoUTCOffset=0 +UTCOffset=0 +UTCOffsetMin=0 +LogLink=1 +LinkPoll=0 +LinkPTT=0 + +[MMLink] +Name= + +[LogFile] +Name= + +[Program1] +Flag=1 +Name=SSTV-PAL +File=C:\Program Files\SSTV-PAL\SSTV-Pal.exe + +[Program2] +Flag=0 +Name= +File= + +[Program3] +Flag=0 +Name= +File= + +[Program4] +Flag=0 +Name= +File= + +[Program5] +Flag=0 +Name= +File= + +[Program6] +Flag=0 +Name= +File= + +[Program7] +Flag=0 +Name= +File= + +[Program8] +Flag=2 +Name=MMTTY +File=C:\MMTTY\MMTTY.EXE + +[Dir] +HistoryFormat=0 +History= +StockFormat=0 +Stock= +RecSound= +Bitmap= +SaveBitmap= +Template= +AutoSaveDir= +AutoSave=0 +AutoSaveTime=1 +AutoSaveFormat=1 +ExtLog= + +[ExtConv] +WDEF1=%YYYY-MM-DD +WLEN1=0 +WDEF2=%HHMM +WLEN2=0 +WDEF3=%EHHMM +WLEN3=0 +WDEF4=%CALL +WLEN4=0 +WDEF5=%HIS +WLEN5=0 +WDEF6=%MY +WLEN6=0 +WDEF7=%FREQ +WLEN7=0 +WDEF8=%MODE +WLEN8=0 +WDEF9=%POWER +WLEN9=0 +WDEF10=%NAME +WLEN10=0 +WDEF11=%QTH +WLEN11=0 +WDEF12=%REM +WLEN12=0 +WDEF13=%QSL +WLEN13=0 +WDEF14=%S +WLEN14=0 +WDEF15=%R +WLEN15=0 +WDEF16=%EOD +WLEN16=0 +WDEF17= +WLEN17=0 +WDEF18= +WLEN18=0 +WDEF19= +WLEN19=0 +WDEF20= +WLEN20=0 +WDEF21= +WLEN21=0 +WDEF22= +WLEN22=0 +WDEF23= +WLEN23=0 +WDEF24= +WLEN24=0 +WDEF25= +WLEN25=0 +WDEF26= +WLEN26=0 +WDEF27= +WLEN27=0 +WDEF28= +WLEN28=0 +WDEF29= +WLEN29=0 +WDEF30= +WLEN30=0 +WDEF31= +WLEN31=0 +WDEF32= +WLEN32=0 +WDEF33= +WLEN33=0 +WDEF34= +WLEN34=0 +WDEF35= +WLEN35=0 +WDEF36= +WLEN36=0 +WDEF37= +WLEN37=0 +WDEF38= +WLEN38=0 +WDEF39= +WLEN39=0 +WDEF40= +WLEN40=0 +WDEF41= +WLEN41=0 +WDEF42= +WLEN42=0 +WDEF43= +WLEN43=0 +WDEF44= +WLEN44=0 +WDEF45= +WLEN45=0 +WDEF46= +WLEN46=0 +WDEF47= +WLEN47=0 +WDEF48= +WLEN48=0 +WDEF49= +WLEN49=0 +WDEF50= +WLEN50=0 +WDEF51= +WLEN51=0 +WDEF52= +WLEN52=0 +WDEF53= +WLEN53=0 +WDEF54= +WLEN54=0 +WDEF55= +WLEN55=0 +WDEF56= +WLEN56=0 +WDEF57= +WLEN57=0 +WDEF58= +WLEN58=0 +WDEF59= +WLEN59=0 +WDEF60= +WLEN60=0 +WDEF61= +WLEN61=0 +WDEF62= +WLEN62=0 +WDEF63= +WLEN63=0 +WDEF64= +WLEN64=0 +RDEF1=%YYYY-MM-DD +RLEN1=0 +RDEF2=%HHMM +RLEN2=0 +RDEF3=%EHHMM +RLEN3=0 +RDEF4=%CALL +RLEN4=0 +RDEF5=%HIS +RLEN5=0 +RDEF6=%MY +RLEN6=0 +RDEF7=%FREQ +RLEN7=0 +RDEF8=%MODE +RLEN8=0 +RDEF9=%POWER +RLEN9=0 +RDEF10=%NAME +RLEN10=0 +RDEF11=%QTH +RLEN11=0 +RDEF12=%REM +RLEN12=0 +RDEF13=%QSL +RLEN13=0 +RDEF14=%S +RLEN14=0 +RDEF15=%R +RLEN15=0 +RDEF16=%EOD +RLEN16=0 +RDEF17= +RLEN17=0 +RDEF18= +RLEN18=0 +RDEF19= +RLEN19=0 +RDEF20= +RLEN20=0 +RDEF21= +RLEN21=0 +RDEF22= +RLEN22=0 +RDEF23= +RLEN23=0 +RDEF24= +RLEN24=0 +RDEF25= +RLEN25=0 +RDEF26= +RLEN26=0 +RDEF27= +RLEN27=0 +RDEF28= +RLEN28=0 +RDEF29= +RLEN29=0 +RDEF30= +RLEN30=0 +RDEF31= +RLEN31=0 +RDEF32= +RLEN32=0 +RDEF33= +RLEN33=0 +RDEF34= +RLEN34=0 +RDEF35= +RLEN35=0 +RDEF36= +RLEN36=0 +RDEF37= +RLEN37=0 +RDEF38= +RLEN38=0 +RDEF39= +RLEN39=0 +RDEF40= +RLEN40=0 +RDEF41= +RLEN41=0 +RDEF42= +RLEN42=0 +RDEF43= +RLEN43=0 +RDEF44= +RLEN44=0 +RDEF45= +RLEN45=0 +RDEF46= +RLEN46=0 +RDEF47= +RLEN47=0 +RDEF48= +RLEN48=0 +RDEF49= +RLEN49=0 +RDEF50= +RLEN50=0 +RDEF51= +RLEN51=0 +RDEF52= +RLEN52=0 +RDEF53= +RLEN53=0 +RDEF54= +RLEN54=0 +RDEF55= +RLEN55=0 +RDEF56= +RLEN56=0 +RDEF57= +RLEN57=0 +RDEF58= +RLEN58=0 +RDEF59= +RLEN59=0 +RDEF60= +RLEN60=0 +RDEF61= +RLEN61=0 +RDEF62= +RLEN62=0 +RDEF63= +RLEN63=0 +RDEF64= +RLEN64=0 + +[LogSet] +TimeZone=73 +DateType=0 +UpperName=0 +UpperQTH=0 +UpperREM=0 +UpperQSL=0 +DefMyRST=0 +CopyFreq=1 +CopyHis=0 +CopyName=1 +CopyQTH=1 +CopyREM=0 +CopyQSL=0 +CopyREMB4=0 +CheckBand=1 +AutoSave=1 +THRTTY=RTY +THSSTV=STV +THTZ=0 +ClipRSTADIF=1 +FSKNR=1 +Backup=1 +TH5Fields=3,3,7,4,12,28,54 + +[RADIO] +PortName=NONE +BaudRate=4800 +BitLen=1 +Stop=1 +Parity=0 +flwXON=0 +flwCTS=0 +usePTT=0 +ByteWait=0 +Cmdxx=0 +CmdInit= +CmdRx=\$000000000F +CmdTx=\$000000010F\w10 +FileGNR= +OpenGNR=0 +PollType=0 +PollInterval=5 + +[DrawText] +Color1=255 +Color2=16711935 +Color3=65535 +Color4=16776960 +Color5=0 +Color6=0 + +[DrawBar] +Color1=0 +Color2=15790320 +Color3=255 +Color4=32768 + +[ColorSet] +Color1=16776960 +Color2=65535 +Color3=16711935 +Color4=255 +Color5=255 +Color6=16711935 +Color7=65535 +Color8=16776960 +Color9=12615935 +Color10=8454143 +Color11=16776960 +Color12=65280 +Color13=16776960 +Color14=4259584 +Color15=65535 +Color16=16711935 +Color17=255 +Color18=16711935 +Color19=65535 +Color20=65280 +Color21=255 +Color22=4227327 +Color23=65535 +Color24=16777088 +Color25=16776960 +Color26=65535 +Color27=4227327 +Color28=255 +Color29=65280 +Color30=65535 +Color31=33023 +Color32=255 + +[TextList] +Text1=CQ SSTV +Text2=%c +Text3=ur %r +Text4=ur %R-%N +Text5=73 +Text6=de %m +Text7=%D %tZ +Text8=%L %u Local +Text9= +Text10= +Text11= +Text12= +Text13= +Text14= +Text15= +Text16= + +[Text] +Grade=0 +Shadow=2 +Zero=0 +Rot=0 +Vert=0 +VertH=-6 +3D=64516 +MSG="" +DisFontSmooth=1 +Temp24=2097153 + +[Pic] +Shape=0 +Adjust=0 +LineStyle=5 +LineColor=16777215 + +[PicSel] +RTM=1 +Smooz=0 +Color=16777215 + +[ProFile] +Version=1 + +[ProFile1] +Name=ヒルベルト変換 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile2] +Name=ゼロクロス検波 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=1 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=1 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile3] +Name=ゼロクロス検波+微分処理 +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=1 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=1 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=1 +DiffLevel=8.000000e-01 + +[ProFile4] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile5] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile6] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile7] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[ProFile8] +Name= +VcoGain=1.000000e+00 +loopOrder=1 +loopFC=1.500000e+03 +OutOrder=3 +OutFC=9.000000e+02 +DemType=2 +fqcOutOrder=3 +fqcOutFC=9.000000e+02 +fqcType=0 +fqcSmooth=2.200000e+03 +DemOff=0.000000e+00 +DemWhite=7.812500e-03 +DemBlack=7.812500e-03 +DemCalibration=0 +DemPolynomial0=-1.636467e+04 +DemPolynomial1=-1.428800e+04 +DemPolynomial2=-1.223433e+04 +DemPolynomial3=-1.019400e+04 +DemPolynomial4=-8.179333e+03 +DemPolynomial5=-6.145000e+03 +DemPolynomial6=-4.088667e+03 +DemPolynomial7=-2.063000e+03 +DemPolynomial8=-1.233333e+01 +DemPolynomial9=2.050000e+03 +DemPolynomial10=4.105000e+03 +DemPolynomial11=6.209000e+03 +DemPolynomial12=8.332667e+03 +DemPolynomial13=1.045133e+04 +DemPolynomial14=1.256500e+04 +DemPolynomial15=1.463267e+04 +DemPolynomial16=1.663133e+04 +Differentiator=0 +DiffLevel=8.000000e-01 + +[CWMenu] +Menus=7 +M1=QSL 73 TU +M2=NR? AGN +M3=QRZ? +M4=UR %N %N +M5=%c de %m +M6=73 TU +M7=VVV + +[RadioMenu] +Menus=5 +Cap1=7.033 LSB (FT847) +Cmd1=\$0070330001\w10\$0000000007\w10 +Cap2=14.230 USB (FT847) +Cmd2=\$0142300001\w10\$0100000007\w10 +Cap3=21.340 USB (FT847) +Cmd3=\$0213400001\w10\$0100000007\w10 +Cap4=28.680 USB (FT847) +Cmd4=\$0286800001\w10\$0100000007\w10 +Cap5=144.450 USB (FT847) +Cmd5=\$1444500001\w10\$0100000007\w10 + diff --git a/Mmsstv.map b/Mmsstv.map new file mode 100644 index 0000000..9619249 --- /dev/null +++ b/Mmsstv.map @@ -0,0 +1,6 @@ + + Start Length Name Class + 0001:00401000 0003CAF44H _TEXT CODE + 0002:007CC000 000048450H _DATA DATA + 0003:00814450 000022B74H _BSS BSS + 0004:00000000 0000000F8H _TLS TLS diff --git a/Mmsstv.res b/Mmsstv.res new file mode 100644 index 0000000000000000000000000000000000000000..66d13f0df8c05522ee018ad0928910edffb7fce7 GIT binary patch literal 1636 zcmbtV&59F25dN~};7Ty_2thpTNg@-n2ofXy5%7;}*sFxqgaz5au98a*d5v7e7ZC>b z;ANP3h!Nsm+B`sG`&IXJG8rPcSUcTSUsu)FmHt}*Xs{XM8qF=~R=hu83<0Hy{i+Y@ zR$4TVafEm5pP^5yhc|dl+++Wow#c{Yuit>=I}WcOSuY@j-jfgEs~tPSC!FIHXBd<1 z6d&<{%x4&3LjTOhG|^&J57=6)K`LtECi#5)F>}sw!R!e$MegGsV|)X1B>pXCc#WR{<4QyFmA{;C1JL(Y1^%73})`4`*AT7AIF-=O90 zfji*kdl1ksG5#Jzw0Fy#cYq$Ad8^pdyxu)Xb*gz(Z6`W5u{LSUL(ac67R<93^OTC{ z%l2qA8c%0Qc+wt?d7iQ`vsiUhTkw^lrk}f-EmvB!TJl_RTrKN0zaOmnzvK?Hn{3A1 z#w$FwZ*UJ!?2GJ)n}zp9R&x)HMqpP}UZVUaHT&DuLV1kiKN_dd`2{?5{iwf4-trrguZn)L76woigF zrmCrEI(R&|tG?%%s?6#W8^u}?2kMrnE^ip@)ga>$a5uQzNq5d#Q(^16|*YxT-AIUc}_NMcL(w* zW?|$x)jS`0PBUp=1~S#m)W~ynvmx?a!|aPZr<U&e+ZwYY zkZEUzM4sE5Rgvco=F`Y?N7MGrK)#b%7xW3@;%Io$a7D#EArgSG<`de>1~Q5&spY)$a5c4@tr`XuNfbC&Nk~J&pBpKjo(Guvy8@YkW>(~Rkl7r09&F;?3uK0v5s~MiW_9FwnAsh99&S3m zAIOg|izClRo0lTbBTf1Tfy^i~Bl0}jY>YgQG5aIWW6gjM1Nm`gW#oCh`7rW)jA{8% zATzs%*wpW6%-BXU zk2Cd)lo8HS?1-;+I4YeK{c6|Gy9)0W?z!b%bU^Ls0XXcyu6vTHO}lS zC-ZpoM7gkO@Se=$&ED6Hd1<=L6U?THapp(sPJ-DJ7iYG_%e;b_)g{j4HI{q@v${!~ zc?CBcdx_?euj0%RHDsP>X0$eDs&zlfq}MEGZs&KVmtlA1D4FZ;icl^UXbp zW({eVspmTrjfs=_5$5@)63r}{nM|H9d@RxQu;w+*;x`h_?g}!mX*zC8G(*CYuVwap zmS|3{F7sOE`1cacxi((4OJZ@%sbLi(mZ8+}RzDa17WLDdF)i-U6;>7bck$tDh!j;WhY0*fPB)X6LFT zv(CDcX}-B3$vkhvnQ8W1pJaZu;cRLWZb>rv=rGf3YBt@JWJX&(G&4i)NixfAxoBpJ zZ%Z;eZ9Z&no_I0ItgR^d=4RJ(N#(CWFh$w{qhzO&|SOzkhro8p%8 zw~cvzS9vp%Ff{hsnhR^joAP9vOrBTZ;C`!zc4mFEcr)3Cvz=L)5pUA0zwOQF9`R
      =4b1EC$nT;ym{Ql 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

      {lE1($IH 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

      I{SJZeZRBN9z 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%0AX2f7-<^~bC{YBc%^)utzs>f&yuiKMWo+6fW; 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 z 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⪼QGFX!R%x6z(piM6 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

      0B8tt%*SEDos0QNb`n>AG}`Cdz(yoM^) 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 z zXLbFr4bw=Pji|I`3wI1F%OtH-N?KX8rYl+2boI^u*2=r#EqH$a^Xj>jnTc9G0_T!< zY_oxn1deA_?!U*6vWUY`7F&7B?4!0YEyZ&uoZH=RdcgHj-BSU#uX0aYjxE#gb1@^( z?Wek#0k^+$vn^CseqV3^@AnX9;UJAHv)CLz>j%^hC?&^%uV#`VX z4jm~r_zF1I+qtN>zQ_yl`M~R!3$6wJQ%8@)sj;4SI|g0^{s0Yo3Gji6M*zDKCV4l) zBtA$rqk!G+f#mxI@f@u9a`62XUj@9W&Mr`2gYq)Z*8snvcl_4^KaUlgj-OW7<0a6P zWq4IAF^}qf;S#Nb>k-cFM?VJmu~8E4Cg2lMUyN@o@G!-<0LwR0@GS)3X*#oT2k>;o z zEmiX1a! zoq17}>CECRdRdX=j;S#owq@qwRs6!-@w%EeuLWV+TOGqJ0qaZT^JT-N-q0{qQsraM zRlb#toi)(_J&lzAZSYCyyrX(a=UsJC$=)_hCsLaC17)0de>SAN9|X!c&Rpe(1(ms_ z{8*LW;I7?d=EKF2G-u~o;*NBvn|_;T-JBVG1J^xs zghJZqTp(xJ#6RMf+dfm~C$K!IWWKyIZN{N)dC;=)-RwX~6Z1+x<0Z=9R4HxopdFL) zkutxlO2Yh6B=)N?E5t*Te+5dGKFmivr(r&qaQS76+ah)V4U}=&{Q3(?JyTE_?|YLn zWkrY~f>L=OU)=})+6p8(-x5L=CEuwrj zI@jAr`BISxo)TzGk89rJKFjylqTW;0J)joG z^>+{J++AbidaJL&h{f@`!g`70PMO{so5Zw_x+Vp4eqrAotM^s)Lj~0F%Dw$n?dMfp zzUL&C+wY(wc{@Jl^K!|7$=J!I z#xYrPiWzfAl;WYzWpm6qV0X21Uo`g&zi7@}J_s+!#OKogi{XeMnAD`P2 zvp6cz5Dm+(l*e{cU+X`%=iIsTq1m*h*D1+fktH^FWg3mx*aAw7v(z}XSCCs_+<4+F zgorgaXpT4z4(%^|`!?4vUSD~Y+C-@082c10g{-eUNnPluu)gwSbyZiMnk}ncO{Xr- zyE30mvLm6#wC1Nq`HaUSX>+EA=lRX8;{z^5(l{jEvsL+LHYL|09{`g-ul^YB8+g!% zmgB#B{&?WS6+hXdwia37k6~h;OThA%pUx9OZ0vP8>b6HM*N#qwuM6XSxZd1C4tIvzk(~WbHx98Po%;sV3 za0Tof_2Jdu*V`lTnVXo-O!&-8^tk~(^AmkufX@qwJ}<&&f%<%=_cLN4<;XREtewvz zpN3%hqtBO-55L}SfAIM_@~MIke+=_O8^IyC|KmVEM}rGYBky>;c#_xjrrIk=SQeH=3Y5K#6^7b30sVvr{zdcZcP6 zj<|7_tBJVrmg^RAN$(%`pTIPF=pCudUJkHa&xrfCpMd<6_m2nK{Oua$?| zLvFO?hCCl~*IKSiloc5bhnDqz20(LM_kf+@_({V#SJ!%|GaiQ z>7C^7Y-4Yu2z1FROn=4PeuHvr1EfjADd=PA$VRrx?p?M%4 zsd#7L3oXu=p1>8DC!>Bh;7PLu?*aU)=4UTpxAwRf@Oqlo-oWmQ)qQ~7le+zY*H=wn z;P>lFoCg5AwaNzpZ=jm~z#A$a2s{MsoB25mxJvm!z^xP?4%}Mtk-*i82LrcJd=&6d zjpu0K!J{P3V}LhOd@Ql*i8oe!9PmeVMSnc-Cd!`x{JEaT6M@}R&0)Yl*}6)b(|~u; zraure7q<4M($$LE)+B7;u>0V^H%_1)8scX{vKS}TUB<*c+u}!06 zHjUEE-C$PPJ%{Aog_RgD^B5F-5%qKBh6dd26GeB7LoI?Hnq&N-yv*J?V zUjqJD#dW~{7U0zZ{yo5d1lYZU!LWZSUl;hV0ROGH9(aTE&-^z4PAOiSSo=rvQ|E|= ze2Hor0gs#~JaIY*n^D{Ze5qo_Qx@Plfxcv>ufwBoPMM!|pkMu*VAi4R#~}4wu3@RE ztC*S!#XJ}F0!{ru(?Buv(^t<|bLQ<7NsD#0mTFkuwFBHRz;0y-HEv}HaU<2R{u?Xi zxo)DEHdCp%1^7cIO1dq9?@_zj0QlXy!nXomNA=`0TIbck)AZW25%4HoNzxX0Ce}K! z4%-8}_h+bYs_}FHo`JBXnR|d_*P%(MYaE#y?8sQ2brXkcrjF^(7P0U3R%zr7GifC+ z!lHPDZ<8%lE_|EpCFSI8vU6+?uo_oW9`ZJsv|{%yA9-^u{zkgIIVR~g(-tdljtRF& z)0h;z5w=*lhb_k$h?IF*xkoI=`3k%-s#gwq>x?rzDYFyK3J>{yx$LgJi*oWNnsD8f zlQ+zSdqvZbx5*@buPP^RlL>dGj?8BTd45fGvn?mR*6Yg2x5_1~d)rOkL=$e=vy$fp zL3~Rz?2DF@@464s9`q&4$#=B}D<^NUiS7*zyCl%PsT|*IE6a%PE#=+|bW4?6ZaFE( zw+keH^8Iqj^V_OhX?0?2?g@>Y**R}ZiVuO6 zl^_p7$GJ4lyAwZzAJ?JXgR{p&o_RIcIbX%I`>>`WyJt^QS9RqhirjM;A9L=E{^UT( z7E)OGm?}9ZC^PgngP1jbMC->r6-bK1J{2gRs&Tk=-z=9?hvktO#A&MjXW!PaE0D5l zIo-E49!1D|N>VE1i}$ARVB8czV_e_P{8u#Mc4PRG3#53@->kXSrEy`1)XTb94fM34apF2@Mr)r+JnCYV7JHpa^YFKeL0UkI+ zJzK-GO)xda+y)gF-q@a7)vXRZg`w!*W|MX zQszYMl}3T%d43jgSL+CBCU6_Yvw$~J{5)`l;<>=X5C_-aE&x8s;*@z2_+-T|0iOa) z+i74H!R2kI9&&#I{6=dZu^7Ir%icA{5WkEc&zW0m${I+SSHSXcXR@&JwLr<*@yguQ zVoL%gug6}QoBEr9GB?gCYU7g6rA3tSyL9gqQO2vu-YcSv*L5r_qWt>~)}K7{#nrip za)^#>r9>YUQMxbDi1L#_$?GV`UnS|VI^<=5(x)|#7MoZs9puC3Cr<%o&b6WSIY zyU9`e7;K*heK@+Kt=prP?elT?(x+py(1-Q(g!)kB!!&?vs`|uFRolSlN%i?NdOpei zXj)=yH09}uK5N0}sYIWK@OfH&SW=(2O1Neu`mm0lN%X0L&$Ef?bb!xui9VabXQukl z?tBiqz-LwvrVMU-)XoO`y!yns#?6kI10UKYEyr1LXfd?+>PG1=B(g)%E0<;d##v9B zR}oSU-VGQi(&qKLA(yh;R}oiYx$uoA_RJZuuOYq_c8`=b`8E=*244xSko08NJn8jU z=-o_%;7V|V=5?)rYo)ri18%PB!Y|aiFWJf$Y9)<%stdnRJ4>H)$v2r;(|Aisxhk86 z+#$N}G_|oD?G4f4_pbE-T#1l)X0cQebycjuifCwJ4sHEb8lNnX<0*L4lT zUa#@(5a@c2lyqyr@!Y(Mvwc2v#IFO7LEH|%p!^%)$0~jc_?9!h=5?J%e;fR8oG*rb z7kF)y+2Ol1?EBys1h|jReNewG&X?1_7--yEMbs=*{sUn7-WBe|fcMipP;3M}W%&%4-^XGeJ_lZ;VZQ)gY;lSC26%yvM!yAqQSo=c6YFsf z`+K0==Yc<1uIKqu?;PcnWq!0=yif8^mTRT9BD$X~7w?Jui{-xP7smIiHhr zk!}wiE!BaqyJ8ZT#}{di zb7S8?Rg&Wki^Lv}Gh0QmS9VQ4*VR$%ZHmMmkNGw(qKrqeZHp-5_4e(HDC74mI;c{< zTUQEOo37=H&v%LGm{sx~Ve=q`*p_qOC)grT=AMyw?7d|XWxV2lt0KyH#s4-%ls}=p z^ALO3wumxblfQit5_%P0HMU>MbW%nY=cwKhSg38==*}JLo zab$_TLVWIX*Jbaa>K;(b{e|l-xh^}Y$BfrU_tNk)^1{#2^tUh2=Sgb&X!y4^HTGp; zf3wvwhz18Opv3H}>NuzM;h&$=+?Bw6vteCHosEu843ECTt8L2)O)r3CWk93s!(9V1q?udF>qR&M5T&_Ox zx>N3zdWHJL_kvuNdu3v5TrGQ5q7U~Yy&68OY1X*2s<5VMRn?7-)f#=%-nsn$XGPv| zDAyF!fLo!{5AN0&dGUSJLs(|aTXLj&C~%45!+^QkqAW8AC~Z#2j>!_i)4|?Q;50Rx~87FicvBSk;2%Ju52jnts9K-(F!j*w#xt>KwyOE^TdP%GBhT5=`qjDte)_RQ9Z80&lp``s$l2+Ww z4zA5dg<;opCEfp})y7FX%;v5lF3lW|np$aRMGk0cOI-AM{Y5qG0k6^em*@2|Q!-jP zd0x+JK+0UJ+!*_8G@eb6XZW2OQuo7sQrGefpCeOzk6go!55l_H1bK$fYevernV0Yx z{um8A(T0tmOUrZp__?$^o0s@*)Ufg#UbxNGj$}vJQj99_^=sA1jU^kmWe79;g1$L`zHUoC6YpA(L zHN^KSX4&1!oKC>^DbMoWuedX?TM^U+c%t&Gs|OTs4SWdB59_Kcuv_u69q{D3!V^zX zyaTXX*|HPxgbLBr0N<&Yak^Ef4106HKd9;M0^Y3KY6roj6}mjb_?etK5Pd(bn26uxL2D*YUdjOEW#B?hh8yAB_3?)THrQFTkC z&RnpKd$o^S?i$Wjwah*A)|_92zdj6hI*L?(B&b+}wW^Y*@E547y7EFr`E}xRBO~^U zRT)05@%iv-<~?mL4dM;YCeM+33Mw+gsv;aPHCHBu;Y0sx1%vp%t?V)uxFb|m#?_I-G&QVTg z#Q6?&$_!VoN@tf(Lp<)g?q>qK@4BB2yc=esnbvUN8TAC82YfE#;4|5afLG`Y>m|US zDINh_i>x#3DB$y;FUwp8gs(1Y`Z8mAx#hwym@&+iU@w4cH^E? z=KH11b0v6O3dwj3zeb7EGif-V_q)e z_p16yAMzM#G`ALLxwq>%xP)ytbFI44nd`FX`YgI3i^gQpjahV47LCoKo3rSaEV?y| zZc|iUd50qAkge07d*8cAUo>8ot}kM_oH{Iz^Z|FOdQVt&MP@ke7;$7CL(RB8fH>>} z8klhivxF9jHZuYE4aIi>zX{CtQ)cdl%eNn{r+FQI&DD;v@ClhK8GY`>k5``i z@RtYknlksRD_`mBK$H)tQqJrVdS?6Mua6y1-y+r92`bjt!>ZCXTI#|YEk*gc$$eTr zIh&63*U?jK)Cb=ESd{CNvZYS)!4wE)^^$ye#wrtiIETY2()@Hv!SY%{AF&@-cg}uT zFRs?Y`VjkhO3QXibPbtZ>+Ofw+Yjap5FhqgX2LkQab9UWvQ77rCfiW0iwlsVtl}}@uPLc zPv@Qo%Y(`Xadj@NoU2M{scfOHJ^3(Lb*3t5-7iF87=Kcj7o#u>qcGhzP7bpu3bR;U zNwLRc=~s#<-evS#W_ry6{_Z!Ra=-()g}9)e5Nk$ zU1DeAQFGa&mfz*#k3O_zwhVjJ^7~(J+w0#}hPBOJTzuXE%Y$KP3w~bzUHH7GVd&#y z;~f3_i9VcFU#32^avx?qd_G7F!+HJX>chJ6VYr*ahlydhZ^cK6VP?YTWA$Op`q<{c z=aWRAx$yZk(PtifRwVk&htFr~^PHX))}yJldqcpNH99Nuc?B$gv`b!xyv_T4%#-}$ zXFVSxWUh+Wv_CX0dDgR9UGl8wcXd@){;5c=wyq`0vmRRK>8P+H8zFD#t(gk1>OP-v zeQ8T+$3*z5ySk`kzML}5k6fwKs_cxB9-kKcg?!ZL74C1~Zi-8wYpGY74DkBEeE+{9 zMpK>x|DcqOJ$xI||80#37 zlUYa6eXX3#Fw$;Q<{RZ?=1_FsDmTrhE4o$6arV#M$!?@;8^SkkzEj=YK=-|J^8)S% z<>p(C)|fIsD))lrXouJlQn^>a@k%}i?9bpF{w2V_DxL?;Z;BTHuU7mL@b3ZsBfx(u zei@p-0{(BsuYxyvju}r%G5He3uLEy_I$_@41m5{xkJEuB6X4PSmnmL~uyqu_4P37H z9pI@I66brsb(LQRT%mY5a6QEz1J}2>#H<8v09=;&9H_*s1uO^8=NFb+JL0~yT*HX_ z%5pmo48wkHxyi?d+&7kM6oviPa*ZQymF1d5+;^6%jJWSDw@$?UV7aCd_oLXUjE@xL+){Zp8g+xfT)ko8{Kaa#*Lu_K#kB7gGl0N0xv0!Y<3OpQSnle;M#D4KiM6O>r6A}BxGZC?0JQET7#WNAPe&I|+ z>=(~O!5~t$V^0Cb)_>ESyV5J>Ss}dELtmz*3P1aS=1O$*UT_X zD^)DdRDFW7AR99JA-E{U|-(FCLROHk~vkj>#LFE!4#^ zIm7AE*aT%QCD^4){2-1+H9d(Zc^S=m9Awl zU8fGyla{fasw*(Zf}NV|nue?DApv{vig&2xu8z2*=ghnU;7dlZejk=sfVA;f0LC}i z#y2{O?`X?i8*xJ|cU{B{v)q`7JIQi4M%xF1vd+&QY)H zC5XdbB4w%&=B5hiC8~kl^TCaP-7~&TfdABIg6)9aGrmoM-Nc2eaP-} zqp@E+8jbzp(P*w;I2w)p;?ZcXUpyLpNw0~air1)Ks9_#58m&=RI@2wScFCgdS=1wo zdS=nCS+rXg?Vd$@WYL~kw3njl%Dol2Ypy@{@yMo0`97+2*Ibs%sl)QfHFsZC|G$hz zdn3$NdY$S6ytU%}fVTmb(dhngc{}E4vwd zcyvWr7w--^@$Q%tZ()BQ?*SU`_CdTm=fqo+6K`REAMb%0?@mFyyX3^%JtyA6{yyG= zG~R9q8$ao2+8EDJcEt4@&rAF_K1$8O2q8~8`T;qsA|8Mr=Q86b9RtDgppx@Vg_Vb@ zQtlu&z~C`I_LLclX+!GzxP}6lT2w zVUCN!9IvjV^2SeTPAsB~zZ7v&5oLVmc8V&c-scB*ZeeYnrYfn;(~HFJR$7Si%s|O| zr7+H4n$t4eGncbfNmA~fob8}9O|*shKJHu%&-=JI{G2?-z30JuJ)a|QyAr-uV+`;0 zygGhT)7V_3>hNCAt8?%5E>U%OujkeI_j=wh_g-&=#w7Q8Bh}^Z^-e%9?!(6Sdbxh_ zy%bM7g52v}rY;yd-q^TYUDcIWD&jK+p7-og`+kXF`mmL=&#*`BQuy?= zJ(28p?tPl0aqp@=>_z-Dpxwaku0Bl1hxrb%?UCs74t(}hAGT^A=3V&gr9SKPEL|O!MrXhDmQ0+yF(|9D&@*!MofsmOC=y{wMB${>h!qjW*AhUlNuh z>28N}%(-_qH`%a*qw*%*?flzs7Od%81poG(P10KgNq08$9%fx#iQTchZH%>b6~Aqe z^flI-t?r5_?7w*jL_7T_Gd}-!W^&3hx7fNG64)PScWwoH6gcABfsY23*&X-1vGD9p zS%y62;$@Nv;a?45B1C(18a0e>)o#ogUrp!Ug{c1URQ{i}LTfuH`?(GHH zwN7-$sZMsSll>t2X?)zZj`e#8QfUSq@nOIR!=LyF;QopS18<3XB7ZdS0OgMb9;o;P z;EQL9hWbN-u!kxh2L6CYMRPLnle%jDRA9G?pV-aJodN7-=FS2>OyfBRcv6MLGaT4G zOFR$Q&C;C@?4BiF0PI%lUkL1G?=A**vv-#QyV<)@z;5>LD&V8->>Zy2rcL}D@M`#` z%~kGv*i~w4I?LD0&L9n|XUzrwv0XQ}+({AF!g8lX+`5)KIpWr{+^G?lG(&jJm(24Z z)TJCucTHyvlV%7<+xW)eI_=}T)^d*?8*n+z^+aTY4xC0FDicd7-fc#xC zpEdSC*s64m-WAWBsjh{cg2PM{oUYrq`_k-Vs`N!8|0Aj9;a>>Z()BQ?*xta z7=#_K`5pVbq{TDMcu&ZQ_e6EO)#1a`?RHkYS;M=X75}~XnD0_kh3ws_`928Cyt>@I?T@?QjW=-4&cb)~bN%8wzbkPs!Sq5EufFp&1-bK^t1g;*ib9Aq1N~t=H^9J(K6Czp}O4NB02;)?7F~{(f;Ve*5-Y}4WCoh zhvN$$hVT2ImKfVu_?)gjw0j@sHu#*87-l?t&Qza!v;;QWwOldCpWLfCdvNz^tY23b zVZE|0svEtjF+E_PX5PFmuTM?uNp;9|G3hDAnvUg@#^_0J|Nd`{(f`SKeC9aT)t|S8 zb(QqZpCzc_w7F(xs9W==t#2Uo`8eww|Gfo#0kDk6J7LW%j!e7pjGyPKuEqXot6NJ~ zPshcw{*QKzZ+9ps>;K~Y&t(0djFrzqdOYNfWeM9+!^)aK+Amrw_V(ftzMXvGWx~li zK?!@d#wTwl(~j}R-%QbQ?I6oJ5v&_~J_vk{mVXj(Bcx5uBfvW;rpE0pM$K^5Q!{z2 z=%)a;yUvHL)wkLn2Y;^Wrvi`HvF$WqH!gk(*u9lH1K7Ql`Yf;;^F9ac#=NtD-J7Lz zfGba7x@ofj_)?5#ng5r7`(pjpnm?Idgb;WlsdX=HbKeQ%cDP0APq@Wa*E7;3&A}u+ znSR-ZjrT13pV-~u6`SsPY8z6Hq^H$Mb2YEpu)9X(ea&+Ht_|y@udS<{qq_Q^m|J<> z=4ArxO%9Ivlb$%|&bO3imLep_#o?u@8ZX?UOeOd z9#|f1*D~Ymm@Z(F!n?V3QGcM}+Z0eQ!3t>}qW)0TZL^FE-#p8>^gDn_O5cqZCB{!R z#>xWfIk*SoL3I=JnX36dm%ExSDarmEUCjWVMoy-H&T+$;wx$(p}$~np20V$o2huRkyZp zgt-+uzrE+L8N}f=L;C5j^}agXNAqHBpH=pLS#;knK=yHPA5Hda?<2iSpd(%e{HM-u zEC=qa^B5li|A05nsQDOpPwk680e1UHt^nRc`IW#E>)G|iKxq?yW9F z)thOvhX0ti67wzC5t_H}fJZ9+0eBQJ+ghdh5iZ}>xU!)Zer@#*>nHfSb4&a)eqmda zdyikh@^Dt|l_jS8h2kex{hKO7tM=;LHvGG)*@p9T;VnhRxqqsbFJpqS3uM=rKbyewF4^wmMFcoP%^;CT?<`F6~Zb#h4 z@B7w6>{|~l`d8H56>3?lfzKHsmi`B@d$0a4;93mYs81n{S=S3r1M`cqWtj{RX2G@A zoCTMIy-MS*0KQsrec)?=X~7Ll1Gu~e55VlfW$<$rycT?U7OvX{vk1UzAE9McA0R4NQJYCFY6X zI?&j((D3Z-^VR;jy~N#8)m@;Ll23%KGTfc`>vNeh8>muLFR9IjDq2&Os^o3u4b@d$ z*-BAmO%hkYd5uK0AqpAX@~I-^CpQiPT${n}2N=0$c?;J!ii#jCzwBli7TS%xX$ ziG_}0xyv>Cu11LGBcw=N34E&dV@-imbA@jXe4dU1)&=gY{CdFm))US8!1q~PVp;<) z)w`rNz;7$w7`PTy$+X%6yFRl$a3|bplHU|~2i0r_{0#b1@|y#{ajD=ffbY_Dw*;OH zOQ)s_@I@MSYv8+8vkh=tT%oAx3fx)K+76g~HTms@~sI?OKcl^I?lp5N~HOWXs$u=hrPgnv%o-s}p0 z>7#Z7$`6?`yMyN;s^OiJReP$cJ!jA|J=MkWgB@d4K%ETC=%H_0=#`vMo6!OBh}q z)2RbhX~UI-;X3XZ<~=vu!9fb_r(7xXQZNGoEfn_yUQcm<;FgL90>6xOXv>EJuMeKK zTwxA_%iA(@u@3w)))#xQVhkD|*Td3NYUzUzRxF)}XW|I_B|Z|ru=HZ-PT$@Pfxp=B zQ9$`2aZLixBgt=w=Bmot_h40~GefiJ7)6phrp9=97MX|R@C$QiEyEliglTVe409q_ zUm~9`vBF^*hDxe@?77O5v$38bcdk(O>KAj7^qw?ni->Z7! z`+(V&nwSgVYAr?7|F45zs$g51WPPoTnp%VvYbD}&z6gJbFUBvlR%uI4-`-pbf3c+z zK=~n4W+ZqXNq%u#xm`)86VB=4!CML_S|) zJe z{8WISR(vBgGXngK;<4aeTe=0X_*vBxKL;#rX&hW}TY3n7dgaM30Xc1wB=?W&lhI7{#EYLKN zkpy+_oaRDR_ehKzyL4dwiU-dgb{EXX%`@ccd^G&?^M!sKYe{)X*jF?xm7Le{wG^*Z z&-IJfE4;3)E>y7>S)#GadWF~21u@nuysob5$~P3*xrcIhHaWXvnQSYW0)}_^gP>fHC*Jd)E5DytpLo8YC4A zvn}ImIbZTp-|9NSfu3TvaIzYdXD(&V)F&*JR>xXSnZIrooqX4r^_wz_H81O0oy^0$ ztXxaW$%@lgl#}lt3-_vW{Qfb=y>}wU_Bt1HH?Z4V`d(nS7xn$XT~+fS@TS+vn0XTL zYlx5WJPQ1};wivO6h999hT^HfZz`S+{FdUUf$NNwc%Gp~-}5G(iT;=IKL_kq0FYm* zVP^rmC+@R>-4plcflKjZmtp4u*VFjt0lT@U`M?)wxn2N1U-65;?rHr?z?Uk&7})KN z{W383hi3e*0uQ>6IBnhpeq=x4-=bdeQs4uTpR&x`Kxy+f@-GMHgWj>+NTlPrcP$rx zQ{X+zh4V&bnfEQXa};)&<@#S6#`l5c-i^{-Zn^g&ZV`IOw0S?^SjLZ_Tn3KgrtQtg zaQXZBzk3;TE&MvA2jPy4?PX#Rn(hbG?N)6*sBX8qa?SNz9VvV7eu6ykxF2zi*K{Ar zN%zs5bSLMeJ4M}YRp(>scB?x7z4-j9&QCSp4gy(TyZRcd zZkO+y)$Q_qi@HlSzFXB@rtbf_^jPjXrV8h2g_ipUP*{OI|kTy4AE?N%uAKh^cOq-h@54km4QC5~o>Syx%Blc}y zqgqri_WL-dzi$7q zPLjT*le8*-O;<;4V9&)F(Yg4){)XDl)>bZyt{2@bw+PoWIcQUB`sUfjwhqpZ>fnE3 zKaSkhQOtAFYSkyL9mHS2P5SoDnyzY1x@KOEXJgn0WK>vxNpG_K+pAx9vF9y*yDk6v zU6vVO&(RgpIT~oWD=5aX^jv0mzR7xVP~q=m$EbrGNhszOHX2{s}+! z?+f0Sddm01N^JGx-mZeE>j>G-9 z4#=Ggs?zvn@D54_e|fMBDO0L0DtjM;l{{IcuNzU;36#7mDy*yENIusNl)T&Zapo!;1xlVVugooblY&aWra@9)r=T*PM@pGyMU>$@ z686|rrR=!u&U5~`Eivn zlXCJ+beUQCSvmRsxy+*cqMUsHT)1DAlkcC)?8tA*$@kBNTdmxV7*V?S7=Bl7r-1uI zxt+mrq+0eh)|`SPE(bmvD=~;GfN#H1aDCv1U-0-G)vN{nuSLQ)1pZrbW8mScsRTBQ zMbi{GrI>t);^x4&=z9b$fZa?6`KNS-gZLiR5I?K4AnOBPp=oUhe2d~%z$;YW8u*2K zBoEcVX-&5ca7OV)z?`ut%WMo(Vy;F!aiI21>R%uZ*7% zU~NzlWjG(6GTn+O<98Rk7g63k9@)Vm*Q%aHlyQ&0n<|?ltn}TE;iZ?g9GBCd4^i)_ z;k#tRI|fy*F}i%$WEq!+zlJzX@)e_8?VMK(o^?#3%TZf5@ZnkZJ{5rv&#L#SSJ0=v z`mo&Fp*IfCZ`}J&)!si;v1dInTk~Awe1N*DkbZULLF$s;-_?`r{TZW6FN{fg|Na`b zx9$DA^tHt=+WSi{y#FGr#HiBu!i#1K*UoZr?=M$`xc3jQ2(I^+D}toaKx-|$BCMs{ zwn4gUE4N+1HB@fE)9rwuOi7S<_0d~Fj zF2Jt$?g9L;_SnRa>D(~!IPIl(1$Mpq?!XJ~k@)ujc0KuC#LD*q{!H=Sz^*6n4eWaO zeSoD`?*oLL*Y#X*-lZ(FujS(1X!f(*k&EPQ|7HQF;D0$EXw}h-~5LWqTUw;h$BmPr!{+uCL`zLx_}FAJ)X9pXH?2-$1#6;AqV! zAzvGUbGRzNtrVXEjkEI8fFIEw_)Or|syPdIA@aa@&H=7gemJme6&C;>p{?RV;3E}Z z4BQ5Kwu(w~30%Ha@SV$+@EfG9;!^n1a(HJ*JOaP`@#aXdJg8({6jojqC|};DnDUB1 zSyMF5s{$p*VLtVg88;pT4jJ)XQ$!h$_^wqY&!V&?$8^bK8iH}HD@@z<{1SeQ#+W>I z+Zc7u!>xGmZ(F2)s^G2e$vi;?78iHf+}4*XKGFzrXub9E>-Urwey{V`+eg0>M{ypI-s;{ zJC_4*7U1LbewqBSimwE2eVyp92JRT>FTfop;~5QpwzkvjfHzmo^}wAJ-vI1JL^lG< z2dt9_)$Q zC)^3#S@U@}@Rq>rADWwc;EMZ)jo??M{lmTRb+%7@AAY=QzS~^#B<=2guso8K@m2GI zK*_cj#u>M#hg4Z8-nczKtZKGZX^)PnERe4_waFUZT?v%27H|j5xRUsGEm2&_1GOZerFH5P&8K_#zXg_SR>vY~O`UpyJnF$}{_8XJa9n^#pWJ=SYMDjfUxRC1r9 zED4nCoI|Cv6p8cABFeZITv|jK-#ffhMEQBt2ftTD8QcFdRrnWxC?~T(@d`%(pvzw~pED+nyV&tI)9Pul_KQ9#gI&e4T z-vD0vgz#?xySekXfnAUKF0i{Ncpv!A3ekT6?AqpXU^f%*x~fnPJg?9CNq_HS_jSNl*rfbVRk}97)SNm@McTmMs-9~5`}g)jVmMjF`}=PY zria?*D&U?0-c|AU;CEB}Be1hsVrQE_13TON1=!i5tY4!R-yN3b%39|P5MM)H{v9ABT-`4pVkF-wpkC@^_2~PoozM(zDaGfG4MW%CH_j_ zKESli#%3M3V%yvkejU^{o5I(fYvN}3v9FA;{msGhNK!hhkRGswDys~4Q7trY$U4lA ztBz@@p~b@1S65A*VTt0F(JGsg8$Gz3JA1wZ_8f+f`_L`bo{QhRfQ5%S8kk5ll`R2ud`>y=+X;g5_@i^VdFcdV)iWKg8ddFX&m8LVSnW~R^WAi zUBvC|k=WTI@zZLv#LhO?19tuC2EcCquL{`NX=`9-ztzCbW;X#IuQuBjxbI@I+4jH( z0LvZIrf_+i<@J4E_;pg7?EqhAJ;a;gN1Kf;u_IU>Ny^w3I;oPqq*$H{>ug~$Y#~f3 zwuM1z3!#cM#|tlWkQkPd41H zNyV?HnJ9%??lfROZ|Y`+_FsggaSXNBVtHmVV6kw=TTY&t3{>u<>I$+ge}XrxYIueB@$jYfa5TaQU{z^*R0Fcb2xbe(-g+O?)tZ z`Tb>ousp<4oXgo&E1bD7Y-}k{tEGf0p5H??PO+3j)K!I4sw)r6`biJyW6$jY4_BqL zBBtilVJc!pN2>ZnJMvqzXS)LsX2@bWbHqm}9tiAuy+Oc7D}My=P{o6Rj{#<{SJw=I z%by88&m9au_dNF~__{Med^CPM6Y&?lhJxiGs};A}HaX0(s*?WiICUk(9`}DI6ja9b z-q;LNCEvjot8mP>S;oaygZwgWwmx67+!#;Q7<;Iiy_Hw{E4ZX~x~g|qHAggFU1Fy0 z3Id0y&r~&gaz3%*yju3C9SX=FeNNBP0JV(WrLZe3%ctPqkCHQSCc15wF;vn1&efE~ z%7?3qeSCH0dFo;wo0PlybCw*J-`5sXiTzT>_2gWy-vkS8r4W7aXFYSFy86PEWC6_^ zirVJFT&!xISJns5S&0ZxAIB{g=$`sH4^zvl27mO4-!kq8mOrM=T5@$5){eB!QJVJu z$KG3j>rrH3gLQ>V_^^ZocY=OcAh-qyu7eNmF2MtVaDgPa26rd8y9IZ58yMUMw*dzB zee0a_R`bERM7H=eCZF za$mN}vW7d-aoc4aW3MIc;WoG~aXr}?Z66Ch!n*<96ZF78+-}Owx4*`5I?2~6N zz{4Hh8*r=@`vN{|PvhAi@Q`N>9twCbz#Z)e0%}cr1Ga9jki(brEs(UuliXe1m+fY!}p=$B^&!J*u)t zX1-r8FF3aQXkhn!*0O8=bPTRacI9rTT|gU>1|ipT9QMbR9ro+a1N=IE-8pVLe?8fX z>J&SGVS~qhkY!HCb3&^N!Z2hjWKMoQbpQ9p@*0*;tWjWv^Wl~*~Zed*@}T(!Yle(8rTu6{L(wECBR&H!d1L>FWKY{2oQ zpYs4O?0CY9RNzG`@L~>M0G`Dw@DdexNrx{1&r%h5X@@TZKECvG1$p2;{kalweCg+E zz{@y4;bj4Hw)9Qc;A$4Mw;T(C){a%0Z@hMxDy6R$@A}tf+tRg=vf0-C8+FS=KE6?R zJ@_o12{96G#J_}Z!dZ=Hn{C10Ot*k;v+Y(u-6dPnZNT&BiB_L&H#=ur`|X16aLBx) zHR|DPqYroCta@kBcXvgmnfWMlFR-OW#V?x$_qhx?$yKy>Hs`9>6i%?gu>B@q|~bz$;bYl^uQnJgZdTRV(mn4nG2()hqBC4nGEb%(f>0 z$838FaLl%60I%u%gx3OWv+Y@2)o0sspv8B!jsunBcgu@3B?R*Z+d^xGAcfZ~g^m{i|MYJEvua zSCN?_-m4z}!?`#!TGP7~?Tq5WS)$nPN&e}aU!l^b-g-}T<^I6A|E0UDzcoi+>Dp*y73nVoNj&crC*VgmH4>(G$xyr?v`EP09Q{i9y3e31${ME16n!dea^s9G^ReSY2!vDDJ z`q0!jMdYo6E8edyMFVkko(YI2DV*`;?(e{7jVUM`{d{x|!9NFqN(%Fdj?Uu%@(fBx zkUEzGxGc_~1R-?}1;~>W_I>f-%!zQ<;}qH{+J?dU8K6>zwV#eoYT!u<*C`#Hj|1dM z%7fPmpHk-?xZp`j{ciRKV0n^qT}|6qV0m)%IleI()p6x~=-+3eufc|665N?^b(t8~ z7s3CJ^VhZF*(UFkW3?h&z3=6?;MoFXc-S*bwz?&)i06|29T~?_!uK{EH#XxK2QBF+$332L{JuQy zDINDTa2%T#ziUR8T7vZpXT_l0mn0dZvmg~`0oM7 z)61U$pONvc={LaN`F;NHfWP=Pe5(y%x7(E!Hqaeh+y0w)^IHucXkce znsMjUaBUek8oKSEzV?ipj1w&%#EqA6=hkF9GVZ(@Zv2cJf5NJ4uZ%mt#y91K^!Xc) zWoyR-neT!c-^B2uEj^2Iw1d7(lyT41aE&bcLJc=z#$70VI(Pl69n7wg z9SN80$fs5PAY)IZTGLd3FL~Bx?KFTdb$B|!mjUKzjGv~*RT&Mwk-QkR=hKD$^yms) z*}tP`Z-f2cr>}g|YzDM}$K|j!UE+kAsCPzG{&!dQ zV_bLB*Mb^%(=$Vx-LDd2%=E{f5r^cBUt8mtRFQZ}YU82HS*V&bGsc~|4 zZRIk~X?N4J;3{SyTU@=HCar!qJvT7dA-cGB&IdT|rWXKwz2gbrP=Rl(z&ANO5Ii?m z;9Dy2tqv~=p4%$$?G7&veB4bh2{`Vimj)bn)5`+B!}$r{3E1wY2jQxIH+>CgaW_2^ zs2o4`2;t>$GGEv4J(mZT2RXMGROhT`;O9Z@%0+7{N(1i@2K$v|;FUz{>PH!K%fPER zXJlYTNY(4Et4yI4O}5Ic=9+AkS>3PJfj(Bqi}eN&N4`rKf-6#34VL?dp}^jQ-Xw+5 zuS3;4`+|KEo>cpS5#PVhIxffPEMIrp;j0p*gv&b7(N6DL(u}8=HLId&y=xV1mFvCm zj|Z!0M)3;Zybn08H!B04a3zcGRRK?w;nuVUV5^$e1k{#(@ao*Ejh^0!td;rhcU#7{ zcE(jJ8ruIGuw%i;=$tgIi>vzjbvJ08xOuX-9}iYE^4|6#zmE0mVZV;`>k+?>_3Kf; zj`iy?zm9KPKJM4?ZObS8dVKU2?LFz&z5Mzqzn;LapZ4p9Uq9p56Z-YDem#+2Kj+sI z`}OmFJ&9kx;MbG-_5XL<&-$QuetWeZVuZ&7=$oy)uKB0;6C;h|^uAw5Tzufy5f}eG zKkeE#V%K-O??IPU9;@{=Ps;ya07ZEYvSnZGgqCH!}saI#C~5&X@xDd@KH zZU(5kB>qws@H~2=)hmxpoU^Tc3qe~tWZuyl^|11w4_o7`dS@%~HWis>=A+DZz?K#j zzpNtI-et&1uA;pw=Z@0O%40cI9y$KcIDh_oSa=-xsP*N<*^a2qViyitCa_7^~z%_U|vRaF=uWII4X}F0KejR!mn1~ z*DCPq4(|k>H!AR(75FWOcLUGc75E*8_W(XBk0F4g^4J@2R37^R{)h7ueiyJ+9{b^{ zUU|F-T5IL48J}J7Y2_sN%Vg}CcKm;TNLie20Ei<@3gMwRtM`%|x0ZAuusnL=JaV+r zjB}WC+Duz@*`8$%aW0b??pO9KHf&X&eOEoJKe;{3We2%;yG>hfN4;{IV>$Du%EdK( zgln;T*CYJODyNa6b?v1RvsO7B>73Qdsp@&x%Bj$bCaau|c1>0}9phK)ppC4824FOq zOY)H`r;jk^q%2RD<4}D>3bTZc&iw%LB;|k_Whk&bInwN{@UhxU9JT&^PI9@c@~_b1 z7dU@aQ_*kiQmoZf^tdH`4F7r9lS%qo>a6{+`gF9@%a-(s^HrZ#e(Jc+%*TA&l0I{s zJ((Pkai2TRo=h6<3&$M|S>}L)VC75T2pn8fa6KoD8Q3> zop%)AzFy}Y3)t$s;{dg#gKJNpj?cImI^kkI*w()Jdoo|SZ&v5^%eb#=xD&E$wf5_1 zKQZIJsqoSNlY#vfIOdFL(kZwq^&o$B^dV>`c}5rwYUF&vr{b(;gzmJi(R&&scv$qF z?pNyoL)iwRs;aj>Ll5^ETIJ%1p5hMwtH4EO&1&KAvPXwhCgvl)7>bH)s%wcxH= zu?Rokx$94t#vS3T_RoM!JY6~m@b~Chj=*_RKI&J@fq4bb7W{vma51mBq;Q6mwS5Gx zenvJ3ic6$adtO2r9i4m!8t*|Fr8+tf1jw_y2L}Pmla$2}CptQZ0p!`;16t+Dewq$> zwDd*SH`=2;r&qZ+Dle#~`Mm0Rzgi4B`}ccMw65b-dfIaO%gz}&oz}vasuj+;{(W9` z?k98A62EgAcTSIQ>i&XJ;9*aK*lxU$cbru%oWb}lwBxKoVgHv(=D=K`7~gNscTmQ$ z&s);(jvH2~Wd7s0>buxK99OM){&XBG9?su~Vfo7YIG0<~V}Pv!c^nX;|2ejV2dj-I zGVV6;+Ckit8P`(ddn)5vYdEV^+G@C`Ghe+bc_!o9YkbdU+;}zIa~aoB!O{PhfE^z= zw(AwZy&QfG@C1OZs(Bq(^>y?o^vO}aj&^^lus5b%JXLrTvbItYVnn}Xv$|5* zIvV`V^e*VOj=l$|yJSoHC-6LaqSe>Ye>i7b`}=}EaLBx)HR@sf(T9(4R=u-z<>QJ> zGxJgAQ(#MrieI+AedaRcBv;YimGcW}=Q_HC*3o|f-;g(u-!0dzQV!VC=IM&h6 z0q^U0!uwU={VVVR4u1)rp%wVR3Ve{m-+*UW1wPo}?|_eW^asGPj{XEV*3n-8AL9Ik zhXb~C^xwFuucLc`#@WI#U)9DO&{BZxOOM>2%O?$&^-1YhNdJa&LOjVUPaQha@4(sL zHwfy!|obd{Aw{^`uA%S z%_6a?z3Vz(XeFX-ogdG&tPh=iQ-@!zgDZ>8z;OM%`Z=KE=seegT_Na{Qa zAkXeHCjrZo6wWCfe^Du%3MQW2wVeqpPg0h~80+Z#1t3pS{!_EVrt>7_&l+W_7GQaH zqx1rnXLrh+!1C-)nF&~)-6_3+<=LHrP+&OZNa8&1X*{i(n2Jrn5!D1EE4Zr>#nJ8G zXBy`|Jnzo>Z>kB7O{oZ~)x?C)nPsacnBiN}M2@RI@0i$e)rw#e$5ktWNgZd;Kulk6 z$JsLw!}W2T?angXWR5$jQi=3+obApszJ887GxIUN@mprcottrt5$p|d+&3A=h{E5@ zaNI8$$B4l`OUI=aRw0I)+Ht)qxM>{MyMmk6aZ^=r(>ZRY3T}GG%?TW)*5cY ztZ%j&Zi@UIX!aUzqRcl(4L5Pd)vK^cGVYFAr8jBD-Co1>&bT>i`ub$tTs7Qe8P}}g z`exkRHC(@po2Q1GJmcoA;ikyA`D(Z+Gj9G0j;rd_zzzV8@U(yz0L+zZK$;F$^(wFd z+JKe|QSb8|*1(D;UN7X=@lI=Dzm9iWi}-cC>s-{Y<6Y-sejV>R7x(LU*SUmW$GgrY z{W{)tF6Gzpu5)R>j(45Q_;tMNT-LASUFZKk?cqDYiPKETd(&eKc`S&wT5UbS609V8 z<@Xr)D@tibaOC`Ahfc{azA^We3roaKpt)gaVC zuIuq^j_{mWvT$*)cU#LGuCJ|SE{7;{e($R0Ev$Mo5Aw|9)g|o+ygdVnjcs7V>!lGtF?Ou zP}zoS&^v?&;Ou(0(UKN$9pq$>kDGH~g>wP;FmBF;E1X=f3n#t}Q2WKkqJP0zf3CCm zUvMrAZ+I{=TGEov$vT2_^Te*-&if{+E)P=x$EsK zu@cEY;ya?do((HJ*Mg^`eQ97@(ni4B!D?`sjN7<^qpm@~4tdseEf08#UIwoK_<_R-V+R)C zIaf0LDuCy5cvZlE&$h7}3$Q&STN4oGWNkOrS{YaU=5$B<+8NhU<69@=K6t$9_un$E zUWq;b7Hw?Or7i1$b5r10$;_VC$5p9h_?B)EXk*(gH*WwcqjVIal<Udaj!&c!CkdtGiGz=-aGHXi@!n38O99A zUpW&ld+<1Nn*g&oM$00it%rzcOI;&kGstY7M-^)Y;4QpId!;RLReF?v3v;tdk8TAj zd-M$SDB-PfvPWaR=}v1)_YcY4*rVJ{y~j;^aGY{&>EXYiJvvTWYkGW~wD$DmIBBiv zJSJcq-P_lio*AcHdwT9KXfHU;s<*j43adTK_}Jqcvpj0FK7or zI||xK(9VK(5wxqI-30CKQ2%~=I>h!f63f_kjrYBrGvb}?3hruqEZ+BV?$vU<4_i04 zwf*KHCEf{F<9*^Z1TtHB?CuSCYlrs*yp6{({!$9AN*o^q&0B&tRl3mkb8d$#J8a+H z_I@4rI6L@t+~e%%*Kv=tlV8U@&dz=v_c&Zpc*H%({-JRd|oLpI`U!>;3(DGQU2+ulxG- zP`~cy*Z+Ti+IauZ_b2c1CeQbH`y+;VY>U3$%J-Wd<^9gpfa7+wUq{>?QW4_$lMGP$Dh+l1{B~@_9$m*_HEj=Va8eeI3!N z&T}Dm9!~l-0b;A@z?17Wt>rdr&Ih$C7yIXI*PWjPwV&lz{rjC$@vh$D;+@Ty^PDqk z3t9?4sunE9FL3U&YqiBfl^7>nVw`bs0%XodD+!+jcxS%@8x43Dhff3C2}j9u2H*?8 zkH6pps4a~eWj(=|Wc;2B?1irHe83kud?DbA0W;nvN*Cd(#2agsb3mKQbKu3GvOhW3 z315P1;dz|?`&@J>`p8;r`Q$R_VczIyw|Rfw0Y;CpxDxcsy#KETe7VEd z0=@z;$6|tX9j?k)aPD6MT5lhV>p`_BUmg9+9$W$c5_qW3!Y`L&t%#~NjIAzWr&>>s+wcm1-a?r3KZx1_J{Hs% z4Z;uLq+j)H|6s;;=j@*CA9l`??Kz)g1i}Kd{iEV!wtsA#7P>~p6BSOzUD4T<^C{69AnP_>YnXi0QOqf_Y&ai z9DW7x^?)tgzly7Ryj=;JXZ!Rzs8(kXV*kH^e+j>dvzqsjVent@H`CjoTh@68PV9>l zgQLxMmyV{TZNj1nm@%^?W^of%V#b_&H?T>IeARp+x|7qFC3e%TB~w< zU^W!ryUKm#a7vMu3{u*$n!`}ja4t6*@z6X35@QmO_`Te>-Pe`+o%e;gESpYcY!SA$?o-E=NXc0hWiwceJPt*wUinm&I1Q%TPPH ziuSIY9nzk6lp#v2{k?#vbXPkQIKSCxRO}3Zk5xN0&NNYlv#zsCe5Xk&oOPXDIeU+j zvui6Sb57eu_!D}BIfeJ2tD?o#U4*37cM<*x%rMWgt z)xNU%F}urzETVfWQw2JrOuEIt$9J{fLJvjU#X@pAy~>+oEF`#IbMJh{X30G`6(`2fdiFaYqB zz}srD0Iuq*!K9!?1TP4xMKB@u^+5bfcp;qC_F29U{$^SPbc^6c0d<#bNs9r`qbJ%l z{>?Uv;Dw#D8o`STw?st`Be*B;EP|JEPK)4Z(K5gmnYv$HY2lYe@Ur1U%b<$pMmyWi zRxLWnG%t_qYF}9dui!G|WCYU(a`LE0@QRML2(HRqKB($@SGiRx78t?N%5E0YY8B4! z5W&IO-Rm`+(;}EH>>j~Of@e05yrlupp5fNC9N;+|KN#?w4zC1wE{9hJ+;n(Vz;ipi zI^c-lH3829yhZR@xT;6+te{oDs?1&6yQA_eJGI-=+K?*WT_(q#T{!**4vYQQuugH5 z_zZ{edZ2XenU=IZusq1gZ>Ef!bHfTJBX-=J8;_H-ytQRiw4_a()8-uSbLmH2drR8P zxlCsBnhc+W_9U}qO=c^v2H!t27CV2iSOnCYpF!b*jj9ZDy zuKPu9MpfFCi#cqh+qP$?Bm4@?cq=rj;$`1n5h?LxqaMZO8-=z9EFzS9;rgbdUDF!4 z;&U5j6lRiqbkf=_s2_vU;e^zAE3mgYg|kjaC&!QnW%v}QXrsm3d(?IZuy{(K*Dy?sm8y@+77H_1jKhd3L9q1T0Td)~VS!6Ih<4 ztXrdu0hT9YjM&~-8 zZJY0?s_faB@6(#>GT)G|{_W9oGT$?|RAtZ2xEE``}tQd127YCwExxL;$alyOZo2qV)+@k;qGt`HiW=nd|`8Lit&SU&7d&g~-ah#_u zY15G=yH&gZAmG;>e-Pj|96ki_n+|sZe#_y*0Pl3Kwf%6wZ#(`7!0%+ZH601~@BS|6D8QR! zxHTOE*!HO&3#cvq1N?R{$82&Laqre}$7R0vYPjPw?w>W>2^sgkaO1UK2n_Ec)=L)w zDt8h5yQ(*X?+(8MxENGsaL!c1m*C_I824#bS6vD$k3l%e&3bR#+?PA|U~rjyU|8)? ze%+<3@?9&L2SM%1#aO<|^;#u!rC(v`K_zpwX#N%$*FCkRZ?9{eGpZa~i?&p)*xGfy zbMKMg8OE;!xz@G8E}sSxF7FIECoY3b#P}6}Bi6k&Csx(8P!BDoLyt4c)P3o0X$ z*@Wn zN*_N7Dtqm4cuM#woZV;rFWzfaF1F_xaPzQUd)lw8*Pa#4daY>h+H21{XY?Aa1$Who z_1cTh{b+60vzKGm6aN2a{r@}e5n9u87>%DjGG74vi^DGg{k|KDvtcTV?CGhw)1 zL5%SD6=OLT6%@x|8t*4oPrRPiuOlv|^XrI<>HRw5Vg|pCxR}weBQE~e>1Vq-a=Tvj zc1;c2{v;h3W@Toy*8snclUaG=wQ~pfuT$S}xt=(Go~p|EmUH5XE&h99QQB!~ZAtF{ z-;?w|oSzxDCB0juado4w1y|zVs&D_SaZS67X|8fHmw(_~wqxpjzv|!bLx;M1Q&tOl z)0RGVPCi58-8w6Re0280Ki8lSN!b^0p-hCUYkQ>h2IaaQDg8jX-YM*{qK#d911P*3 z>Dw#(iPeiOkAA7P*jBHv-1|N9>J`5Qda$#sUWBWw7yG*F z=A_tNIBaZ2Awml7AjkEt;Nq92ws)QF!;CrIWTyfj?D!6*{kFeV%d0jdfJ! z`y%7&zr6f1G>W#5)~+0T;0<{T76H?@4(E0=;D0(6L9S5X@$=Ijwd{81)i+}&+c$Lc;=|Ub5`KF z9PS04W(A(x;Rf)rr)MI-v8QJez_F*NH{f}kpYXhZIa~UsKDe4C$3y&YCeT_kwIy}` z%HBkv##iAx1<${7ZOpoYiQx2nzmYni6!2rKtdQm&6xgfalQ@tv;8gaL%^& zX#`E{ka@V$HyEoKa znhp4#?9A@`W@iq+BIkfwEAW+&DrcIj!ddsd>kOH@!dchZm2=*4a&~Ry{LX1}sV}Z# zF0sYcxkOrhE=>o_#E34=r5ORoT$%;&B#tLMX$9_Gf%`Z-D|jZWz${1Py<#vA97 zf5BO=OP6*|o6#}by85wf&5uDfnH^5++4tpZGAsC1%z|nw<2xnxYjm~_ z_jcoZ63%V1tN0anVsz&&bHlh-bMCTBBQWK!_XdXhFS=`NNq0|WBV-!aa*f=ZQMXZc zUBuXM*F~L&`zd;|v19M5jrH6HcTiaWM7(vEZA}|Ew^`cIugdO;@R++Ny34nu4~JB3 z|J~)eXM)_5fmlXzytLKXRqjolo4X{)%{sbpcYQ86v)`{&xwx8b;acno*XDkOse`u! zTly7S*SA-URon**sCidL-}XCfjyRB=hQ@9UfJEyR=(b2gMK%U(_SRYuP zqzu5nI`V!8UWH8YfO{micRO4W3uP-%c5n*wV4-Y>s~w%fJ}8u(K-tMD^?eo9oe*_x zyxQ4ic<-vC_BHL^7zG`joer`+_3;@2$}TAL9&O5Fs{reo|8o$GLEx5{Wg6q>@lJI7LPtR~`+6wSxe%HA*;L9`InzjXO?@G4= z)RrcxeXD2tjB9%cuH=JvpgUyT@_yINdytOy9W(9>HdTB(W!#xH+|C(yRt>jH#%)%^ z?V53C*KoUK+^>&SZS0QRg zo^e;!aEE5xWDi#T>&&>TDtwIV!-2gTxKH!mns~eUS9@!?YP6(tJ&qU4G0S{}Z_&HG z>fV}ZJhlgAKCTfhX?OQwaK>>Bz_)oEw@L-Kr{ipI4Oay0>2TaSna}pZ3~`+8tr>tu zV>hScHm>mP?Ks<8!_1F)jU5a;w#t0W%Pnai=i9C#yRYMR$~flvvM)|l)f9@|4I z`u1~K+goFNlX`3q&3s$~TGIZ`cW}lr`?sV69M_p~*3Uy7HzMP#4~Ctan}M%2b50p9 z_VgTA!5!$bCsl9lp!5!kbF%{f!$K6oDE$gv;M+JAN z^Np?GIvw|T1$UU^p3gYuef*tzkG0n;e1|*Vd%!WamjLGxz!6>w@Cb*O0X(vTALa0J zz&Ecme)1gYcndN`;k@!e5~VF2Yj5vYXCmp z;WYuD;PBdjPjq-4z|W5{TYm$5lH=C}e6qvq13ty!jR22!cw@k)0v@mZ2td3S+%Am( zRGv}tP1yY4_|)&(MuN)qasYyg@F<+Dc;eZk-GLnmEDv(>`z7P%Ji5Zk`>w*-b?5xC zf5EwX?Y+eD^p+xcofeW_`ixT}Nkc2TgPEA}n&h zybRu=x$Czhmc$%q?^U@N-Djw6{3_1rel;C*_V0J5U)lXYw2k)z9F?{dm`v9dN0PqR zzl^gW#+(N!>;sN*K04|DKu}4cY=_}d;4B2}!WBx9=?9)gKw*p6vS@d;MOJBD7cJV_THhMai_|B_Pw1&;VqBpJYyUM zzurCEX4x@-7XzKM`#8W0LMP!90QWw#zzaG4B;Xf!{*wVO;qYj{O9Jj_KNV1GTIDRW z$#zoTX~4!edd>no!Yj+O0grU}9Kch!&2s@SmG#|#eW6{er1L;+OG|@p2UmmhGp=4` zUXXD=psj`P!i*c{Uyca>E(UfP=wsfPE?t7Fk~b#A$SnZcOrAF`1(l=EQ6zjBPR2() zZ(I&6kM5kP4Qg|IOofy2*^^G2cUL(l=P32EN-5l3=iOF5@2Xskn`>o{^X?kIvUzu% zU)j8hHVlBhm_2M$K00T@KRjdhlsPghu*;&yZ1#qhxSOY6;dRv?n>Dw%2mh$;>*Fko zSwpz`R?q5y5B>LhGgW5DCytxdqwoqy4uW5d$SVQ=1UliX0W*5}w(WYrCwoNR0NA4N zMnG+;Z7dp=4@TTg8P_q^FpQ**_U_S2{WpViIk$T&;N<}`(k4x};i^O$_Yn>NZBCE0 z+d+-^A$$kUYNT0I+zBiX_Ie!?nV(fwk?$HO2YQ@Txi~KOx?X!;bB|wHoZRPEHp1aS zj4(BZy{aY~;RjrHoBwiz*@JgMCi2eRfGzK|ruzY(?xQsp@K)Z-4+7rWd%0J72v_x9 z-V(H!&kuuYPfb~QvcG4;zr;R*lTU9S#lJj^>x3S-*viM9%ihO7=2!juJ>d{Fa}6w- z>p7z>Jyqcx0DI%+e8xFB_o%Zq`-lH^u7j5Gh`8xVhmG3vt|LZ`?F#N{du-HRbngGT zZ}eDg-}M_kPeS)uK8jBRj&Jll3)sHV^Bkb=-{^S(*uSB@jF6WAuM3#-YQpp~uF8lX zv~EgkgEmp_753LFpf8G(?cA|9|FviHZ7r{6EXTSPU#@r^SN4pb5c~8E{7d*voIE1y zBR23~@Z;+$pj*7W1E{+szGC7UEMDI7D||P_p%}rQtZ_`*di~Qm=^?(Bf-A~=fPafj zv6E$5KCEbe27dvd${9UjEoKX-Z*x2gCf6rfvhLzEeSo~g=2Tg`{h zE1cvioVEUJ#U2+>tNjo@{L3|DAJUh8)t0_;h%$A}t?5`FXZsBpesiio7#!}D32O|IVNMr!%q@HR)t zTOEbyr#9y@?d^U=&bQ%k>CxgT- zy2Bp$Nr;r^3xPisJ}3jY(>uffOmCA9sU3jD3Zt-ych z@OXf~ukic;xTBq8)sp6ANausPu^R!rKZ4HuJ5`zhS0(?FZ7}+Ye<#`2z{tN`T_fvo zj9XFzk~}OfM#1BVi>k~-&Sf$a>#7AY$aw8pt~E_6PTK12SKTd?n6b5TGUtr7vbu&; zD>C}imikrnvbT!oMXzyAQSqluZKpr1LB=gNwaaDiQh4{Pzw@GZ^eP{ntP9se??l#{IyAupQrU zn*{JCkfHuQfa7~^eF2~AwaMgwJK+|2rUcCQ9E7I=ys67h1DM}@BYs-IcK8-qI+cA|Ft(s|Lt3& zeX@=E8>0O(?xLD6`)Az$_-)XEneTtkH$SL~5o5QbUpO1*0epwU^8vmSFlW{*X?|Rl znZ@VCw}BSVi3fmc`!g2ljko%JYz7TL2$He@PJVrJLHx^uGhx~^(68bN>B5)^!A-8H zp)9*z;I@b8K5?8ZiasH3l=PuCr)h6Ee3_ln$`7UHB@ELUR zH-tzvi1#Q?R}%dziR^8Df>seg}Q?5PLq8mwMY!kRN_pQ znpc#>J@14sCQIr{qQ0$m7$2!COP^7RTg4?B>6}5~Y5N-iZF5;b*K3Rlbyevre5*;{ zLHN5$HmW8|YpXl8nFeZ9FHo=X?|_>`P@8ED*)S@#tSK!A_?S1+)C+~DvupG}S04ml zGp!|kg>P-?Tj-SVz+`D{9Z49KxW7qatop?uQr8uAncT`es@~paTFejORqWZ=7D6x&Grzo3Uu!?!rNZZQVRqC~U6fXt0UFKtt83 zm+WL} z(8jLv;8yu;5UIP#gAH;_5;s)wH`?c0GjUgiMQl);X?Mv^eo{~`QjhN;Urd&o_msq` zn#m7p=AEPQFo+UEBypO28K_ZsTe-d9_L5zrQp?`LT_XSXk>*$B!H=3pqZNN66`lJ^ zVhOdkNbDyYCQG~fyF@cxtM&W=wX)z2kgQQDJ5;i(slBf$ix%90k~J!24|3T?TKoK% z0bAT`P%~Yu@m({wgSl>dWu%}s(=d6ks@A;MJtiCJbj`BBHPgY8*v)-zq%*`9xMn&; ze2cyjkz)|OAMVsfI#W?{mY~ht=Vp3LGvz~h_1(Z|A1Ys61T4^lzDTXQcIy8E-i)c2;oeET1E&rhbp6yvUazROfwymqmDKTZj@w= zN_|JVY$NTWez{MvHp!RKy9IZYti6=`k2Z{t`i>U$Tg9pIk$Q|gFe-7!O5!Mu`Hy)< zQFGwXlg`&j`zq7q{WQ7CT~3}B-0`wzR9ZVh);>@a@2@C+c>ic`P@CyQNqnYw`BiNz zxRYefsI+#nWKUJw`2BCogn?_OQ^fa&yc(IkVjl#qnMRB6clpxxXhiI?imO6BRbCao z(}Xh#dV0DvUnoz17#N!GROSzAGo2wVMx~ZBT??vQdB4l?rlpb2k`24Vpv2AD8e3U# zXG^nD$#;%4U!^!LcL@fO?_Aj^cMjv@d6iWe%j_9YxrcZ}?S12UQt3;fo+n>|ubIx5 zFT--}&HVR>+Iya_5Y2Rfd?~f}t7>n-T__tyWjijCjThA32X2a+tK$)1pO%?_yai5|;>9>f%e~!3Xjns@z86UzhRmP+e- zmu;ri6xmiwQS-juwnkca1$xTfDAXGyYZVl!A<;}X%37(fZjwaQQjN5Y`rsV(L8*sI zol|f(OUohZA>*UZx5%zhiMv%2r5f2wEec#S-6p8|jaMrmvAYmCq}T|Ii}Nm(m=PYGudlzm#7V_n7C zsQg@3*l%T{P@j=Lqf+0quCI}1QbcSbpUYa?u@yb#XcgRZ(q~ladtUmU^cjHfw`;8^ zEAb1?*Gy&AHHcbX6g5`ZX4*_%m9@4|Uy{Vs^3?dK@8wLT_eLe|6-m6Qs?Q)&Ulnx= z*)1#a!m?3tuen4cJ)np%KI(g2)D@nKF}GEmUX}Iy4e<>=AbR}%vrM9q-jr8mOv3+_W{ zF)I7zBWWqC{an&l*6!izgO9a}7ru|Bxk!8>+$_7sNPj9^=xe6W&mkGCr^CA1Fy+5kGforBOWsPr* z&04!MO{|j5bhW%MxPQreqtg4YTpyn7NZ%KV&cHR(*W$BPmvL3r-)}^{(p%I_W4#?s zUmGb=aNkPeT=mt7*#q(g4qqE_zDD|U>uB#5OF7iu-aByLi|@cZYuUD|<;yGT(_b@= zHUig7KS;Lk>7j4H(gFP<|5g(2*u#yAYSV2rQmAFHB+njEc27EDZ7DdrZ(qmq&~_ZM|*o4=}Prb;F_sj62tR~NX;`T?l(Rn zMr$7L@kaV3`$zB3R*MWGZanFG%2$YHvP@0Q^IjZn3tTgGNa7i{)=XE)=lRvjz@g&F z66~R|7ezn!axGZ%e12pJ}k(KcdQY&o1P3U}$bdsuvlD#LAmXfIr zqK%0~jZBRiN&XewB$LdAL5baJTecWtstIJ!S_3-5Gu;}|vX)d_F(j1u@Z>DmlrUwPrPc{~j&n0^|WVg4V zOFd5U7w^;u2GQrqWjC@no)^o%f}28ojhvC_l|j@prKly}_sSlSFL2E?mH2E8AhoOp zQ#-YhCU)Dx;BR+oSM9crXqo!U%?=aHeT ztqZgkD?~HRBx_}@7$J!*vj@y7qw-T6$_B2PW|pk23*_4AjSD;q?w=9Y~+)uLS_ zG1}YKNcT$f&GW@5yyJ7Bkrvi?SoUE%N*ZMnPFg;C z+~y!{l-W3Mwn5zGJB93gZWlXJvKCUye4Afhogy0_Ef=z9z7 zpP7xaln7iiEg*?9w+v$6FDUAguZHYPstN|mzcifVo)8g{aW)JO_ zd9;M=Zm&7`q5A%Q*NkTw$|W&VnrTUC9;24;=vwfkSD89yN;54bYqxl0qyCfZ(i+v6 zJ@{R#sK+1nv}s07lCw7@nriu)k{B#sw$QxX${{=l(U|Wh>g5@tz7=kc zzF$lJJ?Ik6bl`}f9-qCUMBtifZF#Vsde@?ud=bys2`Ih^FNtw`SYA!9m1&rKwi!Sz zF&D6RP+E>qJ4OjQ)#Ig+PL!4dggZ-oj|~V9Vt!x`#t7nQZE}x9REOCbafNR^d9Xts zb5c!~k+{B7@m4`?+aUJ~`AmYddjs*=yd<^E&<$mSU(c~Spp)hO7{$gZj>FTf>@&3( zL|-<_T8R5-wa~J$G`CzHxCMMX8tGKoxKUAT^O9P=ke0tobIe-oKy=M$x#q7y^kq}o zJxxB_OlEKFt)2`V-V8|JI=Q{{;7H|z&E2t}BJBd2Ko}XSSEh{L)?JOH3OH#Y7jlxQyy48 zrQJ1UV~D7cMH}hn_t_%y1+JO)k}uC49PPCnOTNgqc)BWmC3nuecjyaTGwqZ4D7(IV z*;h86%yG)dSs_>Yg+D)|D3U6a!C(!h{?S-r7n9!thm zCY>PgFq(7I$VhmWCfWY-`3KLFjr5xI&9;2#Thm+KNaGz6xG7}qcg@ga6feD>3ck;%ZJTyB!(o@6T4_0gS_;@)G`^%gag&3#Hl7Qp^fmuM;< zG?V26@_qmxOZ{SU^&sx0sIX0{n>Z#Hfe9d&4^nIH9kNskKgLX>>IoBn0G+QpAmdGm2be6Q7=zZU;*WQ)#H|F zs3md^-cd=*Jj;YHmVL+><%?w`QX@BE->bB=jtVW7ugDjf3s0WJH_)x&mvyph zd5sd0;jr6P5^G4}JY|a^%9G#e*@)#tYAMtM*@&!%=Ml1D`HvEj37hE>r(#`|wJkhy@Y^8a zF4G(wu724>Ys#)_dC7?fWE`yp4%tW6-WX`@Xrxb;3TTwHL_Wn^9@#ilRLiH-T=*_i z%R>VDa)m1y_zL#`` zhdNAsu)@-zc^-{Ej=SwG|f%==zreI@x_`R&t_cN4DddtdBOHQ9G`cjWx8YS#~5} z!CfcWk~^<=S=_&sma9+C%f3*{`l_35kTuJbq`oL$ZWQ&QJo88``Sd1PdqI7_*v!`Q zX4*V^PYHwA-kT+{fpVB-R`Qh`dyDLr9Q%f1C~(*}ocSnQGVpD(@rB}aLvJs3F{n50 z$zw#>z%|qDlD$Cv_q}UDX7!QA&Lqhe+#T{IGG;T~>H0AG*)FX`Uc+8uQ6sN4(lGT} z;F{@fd3Bvf6S9SRd=K@c>j3UQL^5_zKS=}(r?C`*)lRs`xXJEvGVVDpB0Vt&cKiup*|?t z=ZH+De|N1Kd=JRK$TZEgN1n;#E4T+`Z5Pdy5wi9l_5Jx8t@~x;A=$8uM9q<#n(1Lt zBTM0)IL8|K3hoi{S>_@&vRN}dnyJJ^Uc*jkmuRHt6}!i~&v*`}EHzAX!SWTg1QmR; z8#xSh;^^qVPjY6UM4>(*UxE*HyL`DpqqUmG_naI#%m+WW1K7Jd<=9TjJIZ{V4cM&T)+gLvcaz1v71deq^U zqS*u5HHiKEitJimBQ-J{_Gf1*ahIrvUQ>(S)r>EhaA@|05`jZ?BO8$?8|ky$4)O&K zd(_2uhi3Aj8jsV}8za@;>$NVFOlT0>_NF{N%VqH;4%dh0&pEHrgMxcY9z?EdCd+l? zi>!xwNSc4w$o#1BwMU3qiQ*fnj@QGueeJz(+7&viJlH$EU!_bWVrWb zx z@t+K@J{ENYACE@5-TMW7IyxjuuKPq1k0@J2hQnRCMs@!@s2YZ;+0h`z-&ZbyeDAZTk-k!<4jlHGi|=@^Mw+SQ#9ebg)0e>E35I-` zLNg_@V^i4??}T$CQnpaP&9cNr7R8Qp;YvRJUN#1529*3~5L@|!_#W0QTlm8mw^`+1 ztihQx$#CGhYXM#UVOJuHQ`bAn^P_$b%qio4*{}$h2 znjbGo;(g_f$ZOb9A-)$gAN2(eZxCD`cJk&vAhqPR-{k3!T6=z%#I`3y|BbgZA<700 zPnqQD#F@%bh`iQFzbnE5*GzxN+Rw7~r?mX3Rri#a&2BSA*26oNJeKqza0t>L!@qrI z35m#hP0xCiD7cm^L0rj+t*!-cR@B}z6zze-es5Xplk*zeYdMViBAa1HsQ3j(J?u9x^`%TY|KLG)z; zQ7yla8kq)9w?w@#drGQ7l$}si%P*|2u2oM44x{RPjkJLGOCv2N=mL#?$vFnm#>A5S zRFrbHW+t|vneiw*e zVXIF|j_4y_Y);cg%x>)bmW?gc2a`M-Ha?NHPX&!Pdr01HBweG-Ke@CVq5S-{#_a>YgT$|i)JlV>c}n$0#3}X( z%IDtwqsJ{`*+V6Er;=BFoDVHpJH~Aejqh(7g}#2TfiIKEu05Ct`$2hM zX2s3AXDYZ^WNmWSjNh=SHw>az{iV<546T*fGpn@BEG;o-@QhXwVRMGE1vi^y=T+Ml zQ2))I`;QVMcaN6OE?;cEks31(`{1Q-art7ik$h!d&MCe@LnHnkRNSwgWhoIj)Sa?x zbBp7Q}O$h>>sI1tr{&~K(dw(NG+LRK~YOSFo?Y|P}CDOXCgD;dpsFOeFe9W ze3?Uib^CGV3wE-325F@Kj0*n-h;L4f)`OBL`Nbf5wXnRh3_=egmmufJgT(Yowjl4&2#!6{iP5#TQd$V{^BG%&Hk*a^14x+f{reo9(0=7Pw{_q_&k@_pN&4 zqO66!1Qol`C1E*{G4#2fwG`a);#)-Vvd1OSyMe=wbMZx}t|{l&=tt^qt1{0JYK}N~|t@CG($jdDsmc zz9cKYXO)p+g}}2aMSH=mDPP*~_Zn?i-FJCZ*;m7r4`S889hK(7G4ixf*UI`hMul%} z;Y@-pT1R$2_1S}OX#68Qn96;@Tvd#hmFaITi)vlHW-AUgpCPXbbzON-_|_B7Bq+PS zyqZZ76F-CErG}cD^cw#WWWd&mOQR1J_I&OJcGi z<`wD^^}+43TX27uU8Bp zOE%Ur?6y`6*;+;|g}Q~b6uvEmE34mDuDOxcStGn!Uj4VBM(|X{P*AboOtSr^3)xr^ z@n$ObB)yLn5x;xSJx)&x-!}59NNg)y$YQ6RtnH{Ck980+o_m9u58usv!8bi6vBS23 zTR+ba@)g+~WGz-x?C6&46Uq_yD2jIyb(^`P<+1+aSFlGCM;n1_rky3RPxhYFzAJ@S zyEqm1=Q$#nHx8Glfy3Tz@x=;@-c{_z3X5MijL?UughbjN(C#(YM9 z^4>`EX{KD|{^3p}M+x;6+#b?b*6y-8Z{-o&NEgb#LfupT1s`@IxV}a@Sz~^i=8Qp% zu)V~0RgP2Q%4)xd?7k?wg}S%w1|Rl-yFNT;STDxt8hP-b`k+(~1-GwcKU5DHAHCX7 z)Tk)%twfFBFhy~}?Jxg~N-YPtmPWc^v+(cs3~@X*@)fp`hKlcYjq0a4o~gwu4??f1 zPYdoq$-a4H#Ix~H;vi99Ro;zy1A9`{j)EJOCFq|~spVj4c}V_ktvvLj`nl8_1$T(_ z8I}5myFR=}^ghM&gHOWyz+oS^?7kwqTP|ZgiGA>j5`(C@Q<|gRz?+L~gDon!!=(9P zjYp|V4$o9d7?tz<2uWQ0ZH(pn?iKdE`e@;4qau6a>>s^);LK=S@L>m{Y!tqcZUfJ= zvu1i=5Veew2me$p^@zt6T6sx$^<-(0YU%yLxICSX=z^W$gpb=TX~}Nt)0Ch?qZGkA2}xJLEsP((zlR$%^=F2 zoT-%9T3O%}Nt7C?R7M3iTCzr^zEfQmtD5?6YxUo@vT>ShL{)`f{Hy;0hwt=?Z#j8y z5UrgdYb~GJ$l#8pjCqF0cc%F6Q8c~k^P`b=%l>h0{jA)ymaG{>EoVu~p0kFvsCdxw ztdBieaA#);;*3fy=Sa(e>X#kWFXxInk+-Okp7eQ+=ZRWZH<5n@cb=>nmDbL8eW*~> zFWamdQG9_UN{w`(JUCAMGV>K7aj~9vmKy0;Wnin8Xtz{B!H0EA)(YRn!kGkRFL4i0 ztsfcvT&kdgyHuX;yB+!1&)chQmr1k9QuF1KxJ&J@x{0GdM&l84dWh7hjIcvjRI7|g-BF%iC9iJx9&e`K{uV7Vh&HYkU$0A}UrJ?U5c#eV z-O<J|L z#!RKeSowF8BuWLfSdM%072M6vhv&A+$}g(_w#|`434>_u7HNK0v&SG(ZxyxFNUv$; zS+zvIsEklaD-H_oHhHy0_KF@DUzW{O;&xU4-66YCX*JTjip0QS_pJCzePs|e-z93) zSB=EKUS_i*aM(R7zAw}V22smBqE0IBAJ)j+E9yg!g=XWU?0uQawi%VU`z2vj8mXmT z8|&0Y`a0HLKESE$TJA!4h>}jhjLA^kMn( zlj8nttre|@Mtg^@V%G2lba}9fvht&{(W;DO5N$jrYSeI8yFJ1hsehhj^f_?Ye=3Qn z@EYlBX$~B+t@xtq!*>Ut2%iIoov7lQBx|8pR>RS5!969usOuVO;1!`Ssy^&L6`$35 z)MwQk^W^XHG;p}fcZo(i$9osgH&nk&DxU*~{Ya8HR}#~>_xKJ_&g1kxaLx3bBu0K` zqlIVYijt`7aIdBqFVyGNqEhu0i5H}K`t3urRf6=uB-jTpN{iKm?2T#Fw!mRes`Oo; zwppD>eQT|3HX7+=>1%4-O6^#1uZZuXBg4O_6R{ID`%KM&!=0QwxLNhu3;zh&ff~WT z$(Pq;!zw)LGd{Nb^-Lu$>OZ_0m4sD-?2TpQOW?3eRK84==Nt8vn$RHP-jcqk`tYkL zU!(ABT|NgDcXyJo`j7q@AN9SHsl+|6R{ld0Rwt4g6(gSNidt&NHPxcPVOOX4tg@t* zQe*y8)HM{(V{;skFL20z&eup6DN3w%WKUkKdx*echm|BgQ5-})i7cRXq2NB0FDIAhqn4OS`;|E_sbI0GF&V1m$G4%AZ1U^z7X0;Ee|U8S<3EjK4SyZX7* zga*;mZ=DZ!F&Zs{Nc~RKs0p#dN~=}DeJ{RJCr0gvy_cEF9`96-|0vw6nt4A7XIkjN z&(eH}{46Rv;=nwr)MB+B`AXIItL&C~?N`mH2Yh_- z6|Kxi*@F8`vR2J8h91uEUC0+Wyvq`w)ob)+?v)~93+_M8hsr|{_KbSNAjskHtS-(Y3iH>J-Y>PtUabT;zeP`0;K+bjM`we+VKEDsb3k;e3sh_KKNTsvCo7w?q0$C1Vh& z;?`yF2z@>j8Y32#1>5?KC1<2Evf>{czJb2wn2%g6p*hjjrIl(Uy+f-FvUw*_kYXJ zBB^Ck*|l|_c8!nJ-qNy3es@A@sSo;y+L*!ms*xVmDBSIyHqwzk&l_n|y@83Ep^+xd zveXY z3$PE$y1#|5M_6HV9-=P=H@WmZmivIzQUOdM>UZjwx#ekDiOc%?m0CGvmZiSJHGRZ*Fe>|C8cDS57=3lZJO<&OPC25i*alJGv@VNhmfi=AG*9o4Evs`-u|H8B z7?oP4mj~Be9^St_yCGX@fr6VQWYZ!VL8}Vb4wImb{^IMe7%$bsteHxQ$M*wFOi$U~dLFtQ10e^$cd#I7lS5^)xcIipt6~)WB%DYxQ(5s*}(?VH-xKdjz zEG?zBFo<3);?zd^M_zl_FUuPy|OVy|MdNkqgPJL=M1GSXu zVUT<&)q_E_v7D$;J>c&pWNXwCIDCs$zHIE(9KMGAS$JP+fnAj+qbk7L$UK(RS8yw2 zeZ)o0fPHhqouqr073H7R2b73P0ej>`Ej2@0B}QgtQLR#-tnsnstH@fZBUY7!RSJ}d zngKB+s#Oo9ZoP6?TV47}ZLx++G}2Y7mQKDRdd;c_`eKy=^+nBqzmqQ6TQvInsdufS zphT%H){+Np>Vvgi3+@s$s!+TtrraB}QC8;-fSY3P#ZKkq@7V3tQur-wW zio{0p&t&QI#=^y_i@%fZTJTmuIq^^*twy@bS7+pGjY2Pt(I(Ot>o2}nDt%w64_?`1%w%b9Nb_c{1$&8=G0UpExu~{sGPkFlLi1-@t!!;%%WXwu4;9=N@_u63 z-BRAq;QH`(PT3+>M7;M?3>Dl~(pT2Yt)*{-;-IXJ&uCvu;P7|XB{3*_K%Xa-f7?10 zUoZ5Y#Ba@geM7F(`c`n;$t$C>H@26SSo5%xTzmz$gY)4l03L~W3$GE}T0PXZXY~Eo zYEj_uW?9x^ZN%Pl;cU%gE6eJ)lk8rn?33;e8za;&$E#mvcC4IP9j9 z?C;+9c-k!+v4-NSr{bGOJ#@BW%~nLtkEgR;wj*%Z59hMT3@(8>C%1@vfx~_{@s*Wx zSM^oF?JZxH%)U^I@v+zTk(TikFJrP6`gemydjHvMr11uC|pm zYCrK!AZwdy6w1o7S|{WvJ%ba#!%n?B}^ z)H-9d&DJeyjui~~UOr!ad}z5rBXh94kJSZHq8VRs2g#R%mZBEgD67ygQHN(L`+m0X z!z;`Dl!!F|yXxdsSq&!C$Q0Zm(tLz8&)ylDW7WW3XYqZm73UN6(2*{SC*V7VtgRpP zs^EraEyTs@f_-@M)YchNW5vPqcGchvvI?h9zELe8|}+tEXz7*s~=l= zhDM=KkItHDE%@*?Q@4g^f<6k(R93{YUK&LIj+K_dXN3pH$>-(0$MLu5)PEnS?|)QQ z2^{w8Nw)Vr(aJwm$=E7Mp99xOC&=fra&EU6W%I}=x1T6JTUSX93GC97-Qy%%*58vQ zTh?EL*axRb_9I2pNY8rss({+DOV&(@SatDqUojNxZ!?XSwXzZ$MA=hiZGY*DH5u>A zWOqQe%T@*zUpSTKvJx9a&8JKAm6|DK{T;GqjK`tsp`c= z&ywA@m5bk01{tIE!&Y&|^G0ghYKpqErR5Cui>>UmR@V4)#5YPU`r0M%?Amd-BkBqCCL|%Bq9n30{?TmZdKjeGjG-3pZzr5ee2Yzx^+`^zwREbIsS^`tAR=JB~-85 z!JKt@5;Jsv<)Hm=XhmQq4V${xe-4$Lj4`SWdBjPS_52kbv*7Ues=+ejq z#`u*|WCd4vObv(o-tNI=?)`@z-Bo?|p4#osmgWuoUA)$1>;rd+^Zhc_9N!gkKFuDe z5qZSVTw|}bt^YmcQPW(28kQA|mrGsaixg+PH{qUYra+A-`?-5+c?7OMoaHLFJMC2F z!9RU&*X)6OmPg=OMAyAP-B-pM@8dkOjLRK&cft+HpXz9k?;MZh6$yvmIrBW?Ctjl& zJ@z5JveqC=;I49OQ{HX$xYzyDJc1gLQCw|yN7+chU;2G6zSe6LW!Jb}m9lqU>vqQ+ zL%X!`$ol5Nb*?evFRbi(vn!FcjH`X7u9e~2G0yy%uZT0RV=PP8D_%s{Yy{tL z_cF~!s1bR|O)ec<$COkm# zAzkS7(BhYL-FfklyDSmU#@x=EAS z-FE8j$T59=vrGYhi}7fL^nqHJe1ZFA;zJhnf<Tux zJc&2vyeu*b%Oh|v?R9!U8&-xdjXK{9son5gP+GxoC*S!rXP~Z0kv+J7kx~5C`5s!? z>ictNv5aC!uJVWvyH_T~)1Qe2-=g*vdj-EzvNAmL>DG=&xeD%WI`g^SJI`N2eZlj< z&bPULb;HW=m+k_>txej9O$5Pr8jceWWb@s>SNl z#Ee;>ZUyQ_M)8#Ee)+U%TsywPLGKDqvNJ@oUZo7*}9LXP8~OU!r?o;sc#I)Q+~8pnl~^i(u$3zS<(!L zr((S~#VT%6JkOPE;2w%+ud#|p*|Rl{{;8Dpc+UM>&g-G;Ii@SLjKz2Dn%Y`wa02HDAdv9%V_sMlIr%T`^tX6q{M9D8f&5$o}i zTl=K;g=MR{wdtO*mbTS&NDgujK1pK%zdPs5dPJ6&oq6C^W6@QTQd<%647l^z3WmRy z*7H4ax|XqSA$`S}$Jfl1#+vu4OONpt=gMRQPY2dLo6NRaAu~^-4BugKPi@`8yJX(~ z1~;?T3f(`~*64w;;K^Gr3zq-$vfz8&%aoa3y-}C3rSJ8)#JV+m-5#`NWq1ZCY2Y`T zycKK(!&A1-_pHx(*>tz;iOr7iI4`-xTj#%P5Z4{_4`#yylbMtF^>EH(!aT z+sVoX-?SLS>JrlTYd(6aQrh^Ndm1aw1$BQR&dRWcI!@OkN^NDr-&ft!!#y)v-+j?_ ziyF3qjh7EyV|uUAq*q%#9{0A4RZWlR^FLg7DQ~S0>)DYu^oY2By3bE~o9hv!A34k5 z+h%u8_vJ&6cxMBPsjX`G(x~%A*~c{>J%}~$6Swg_AD6b$;Y~Pi!L|QH8`KTyzg&00 z+AB&;10EzPa`bvWpj3}ox6fRvD;=e==Kb55cT8U43o0p+L$bEVV7Ts+tSmseoeunVP)gx zOZVm2WDVals%?-jRzLaJe7Vu>PPVy~o$TJP>}A_{-DXN_3f}&?#aheChGd{-rZtr^ zYOQ1qS1i5`>gq>alvS=9Yhyd<;(6s;&A;h4vZD*#)9F+1#QOn07IYn?jaU&o?n|tQ zN7lN;MOoKzx=K>2IM!&ema;6?&{0VP_h{X}E8V}B<};s(NWb@!r?~~6Z|M1+L^XU<5IZ4vR+xSTXGr#+y zD>1EwbW-;qaFcnNt=;&0Kw`#QWw)AFb2+oE>_bxBXA!b8JVETb2R@^^cz3gAp)axS zPwBXY{%pAJhIV9Y@{n9Jm)QvERJAVo42Q3dJKr?7Da(+&=B+wy?J1+S<`pJ=sg5{V ztPIZxJIet+&K1WwVwxny%&zIQL~k z&sr=m885TCu4O3rx~$LqnxT*{q_eq3WGIoz%#T*iD4VCou`F_$@y@)K*GMxN;v%P+ z*KG{?oOp@XD9Yw@oaQfNQ5@?rzk6WW4W7$&58ixNM=dfk&v-Vey&{X1;mIVoq4^M{ zkr^%EQq6NHjf`hOmpi z9%s#X$ZWX}o^wk$Tq*e)`a*bGuNBk?={Mb%z%AxwmOq!!*@D-tZJr3 z8fuB zQ)>;$xqmXg$P-OEURH8Gm6C5|FMHo(uu8Ilzs#q6a!CG>Mhd==^9*gUZYISYhophu zn@C>aOUo0~7d$!O{qM$GO;?ZT!D_C1ak7TLNTlmpynmE(QM|j9@+;h7_C6W7)e{S9 zRBO<`&{)Hz+dN|)SiXz3+ohV(QuhOo##*(MWvWY`*LDrfe7Oo;oN75FE1#z|$Gx;$ z&6?%0<7FM!wTyPWXhusLQMPX2>Kutu%Y1Rirk2(kooS zBjR(N;#iLjT-tii>S4JpuG&)WI3$zqW6UAl(7iGoe(%ZoZu1E3TYJSwYQD>QMCLoe zHBNogJoxZdv!+MX-8kWJ-@Bem$YNP8o|$#&V%~Es^To50b-qT8kbbAuV430Yq^y_i zu#)+fIlZ-_Y;$LceD}MF1T|J_7FPC2G^SHlQzb6S_N#F$i#&FJx3<*%8dJPa?0r14%@=BB>PFcQ z-EL%{ile6oxHXls>_E46V#<*5w_|VB&nB1$i>7%T_qp7wm!2`{!5$aO7!en*x#o_w zr(SlD`x2Su!S2iAbe2tpt_94 zVO|!Q<&WH}13fMa`Lj6N)&8+=QFgf7jZAQP_g-^CT8sSe$L@Vdk8ocCccho823d}B z|4#N^yl09Uo(ik8IrJfOBv*u%2Xq=jCpeNR&o6=x8%{3y2 zJ3VROUg-vE7cJ<0O|v1qexO?k#@^b7Ba&-tnwncGIGcj9TAG$)StYz}$T1gnSU zb+j90=hb#u7FplEbqc^#e;tUYCotPJ06be7dux0wDcvEVJMdM%?yWNw$bRI@bN zJ$Zsz)7*?2A^o}A2;5~}7TMe{5;LAA*w}n|(|umk{kz<8yLzjROW7A@(Fx|u=N{dV zUg35Fccqu925WRxvVp&rUSWKe;o%uq&wWCAwX+278fS_8FS5gHlXOTv@>(j69$e>q zYkSSFca3pA(?qV6B%fx2Y#GfWS$2cl2;7ay2CjwDe2;HYUuk^TPOzhK z?sMR7a=y^G*~>!r7B5p4`f_Vs#=iRxZ~gWIv__xT^%&gdxM$WdUo8K_(~A?VY=PQ8 zGHXsqmXO}=9t7@=#EhKU*M+Iw11m$G=pG#Dv%s^-mmzsF^+Y_S?CbfDJbrh%jkhM4 zr97?LA>)iCLJxi4u9$=JG((N(N%3@`vqZl8u(Qm$nbpIxSNvW_>UFq-;XON~k2qi8ex3M+WY#*) z^uTgp{H4aFD{f*wFX29GhD?pfl^=EgEPKVbPuwfZS@Fvg?qA>@bN@o)x6Y?oF0H99 z`^)3*-#t5-e`~v^t9g(3IQ3`T<*e5-vP6dbJ7*bu$6~sc`>eSwH7wu7Q+n=c;GXod z$cCRv%&_YtYJQKimEn7g?!gxB{XQON&6?>!T5>e*=QTRi+v9nkX}+Iw ziy`^BuY-}t?o-!;Hlpk~_eJwq+Sp)owi|J(!M^dl*TZngRouT#YYpli?*5(P5sw^r zZJ*7e>`%_DQd)b_nP>T%^~C)>Z_@mk{zWGJQqsV?U#YdQ?t2?W*~@Ota^UguikGPd zJ$ThUIN59TbC3AHy#KxHJ>o*QYgy@d&r0z&hx-z^Kf8^Y>yg45h3;$amF2ehb!9KJ zEEm7QomlX^W1WMr6}I#CxUlw~%qGPXYHs&ouhFha1HU@s>q2D6Z@R`g-U>H*eJ$U` zuL^lD4(VUq=fJ(?WtJf$t8yEwq)Z0Sw0Z3BO8t3Ao_3$F_TGNNvo_O=S;6|t_Yw=9 z5OPodRJQ^n^g_K(GcF;0$GtKfTF|}f9%#%j`WpXR_wQe+9}LNuUmEUZxACEm(D&TN z{F@o>uWsWmuhFY+V?S@p*SzcyZ>=3SAPeiEN9?=rJKyU`1K&?fF~GY2irJm&MLojZ z9*@hL?z3s&8M(xV=PbQ%mQ!Ig-cDZODmpO_$(-(=mEmbQ_wVO^ck7kf zKi1>l-o78Z2NUX+VPE^ib&t8yBEE~yAV2Z8v@93jK&<;XnGJ_8GCRx3wFaf3@u}NY zUDo_F*Z7ymenIb@@1*Ds$@Jc{?Fi2(d0ZmjH7TCnachD5+{;vh9(>^*{OWk?b)&vx zN6XZ+9wW3|@(SM~^cBLgW<1@NSa3z)qfBll3uEx5$6h|MGQ*)Bbs243<2}c6V7$qn zS^-a|dVM1=4qPj-;Hz-nGND_!-C${Znes6j9WS%&8egYO%=jf>kIP!#MpM_dr0y?# zX4NB>4JKWD^~Jr{9GG#5vQcg~GUU;2cMi9^z1zLn`}i!$1N^mbO>H+k;qt7-S&!(; zko#h}EuI1QSVh?w_a!plN!*ureC*$xMhdPwP_6RH>^t)^a+RYW7O0WwiKpAD3!IOQ~hKctXvkk>ze&&l|*9 z4vb&QcAVzGl$r*jjMEvOkXXO(HM(@5gp zNZtA@o67r3>#ruYycqX#y;Y-Z7WXf*=CSUd<-nM)e8q{fVb_fed7S%vQ2IOjkX+)e ze}>niJKp?@EO+s`RT+bsy&ki=FPZ~WY8v=rmV00sGM-~}jU#=XInev$H6CY^;`ue# zi0pd9l>H+Q^O^sWH*ydS46a*PQu#b#%!W8egxaEVDct_n_Q{X55ro?v3ZyobSw3Bm8~lS({&e z<8`w#e2LQeEJw$CRCO)MY-L#0oO#+bj)vs_e7=f&{PlgT7h67#Y$^2@JPGX{m0grf_@!e1E7=AcSbHqvb~SIOjmY4ab!lYbk$YQ?j%V&_9CZV?yqBp4Yq^5+S&oit zd#~jOK3jxzMc0UI{cdlgzkAJ%1yA3(hGq45O5XdVLvwBJ`zsIwANs8y{AGDTEtE7Po= zb~Rfki{0_{UmDvdCIyDRJ8V*mQCT8Se-tYg<`^(pB zYt%3)p3-w)o|{r*H6%OUW=Gv0=n+=G#Db@qyw^q9x7`=Z(eVtQGfz0sSS)YH^YZTB zqvyG`pYn+Q1#Sap`J2~cE3b#K;MpF>E#-6Z-nW_E$lH(fzN;BLt(g?}(QB6410ORJ z5;JBvkAY_T#6{W0u4~r;c*4(h^@@NRc5Q$!m?i0ueBpK5-+RR5b(?bxo|=3flKnm3 z(CnYRNi%&iN7<(COI!zR=GG3r%_4qD8XtJp`B{sVUI&mbt_U`F-JwlQ_o(D4`jE%v zac9w7o-85#Zeqc>tZPJRXlzkSS!UM(cy`b=^g4i2yEedmZAXH? zD+}%J>C#WUMjQKl^;Ms3E%!za=WD?9ZY`vH)qM2tyQ^DV_VzN<#g%%pi@%_H#7|B4 zmWE_i?{(F$tVV{z-=f{;gMA*?%$)t@V$ad741arfYmsqlo=uH8ydELl&wVx=t|gsC zb8qTyRC~($S{Z)x+5J1dewvDLwtO6ak??t3vvBH$^Z>UTxC6Z`^7ez=#x_rAobeor z_d3m$$sA<|JBww~_^xDP!50|36?XA{Z)Nzxq+46Y*MJ>T8)5AGYVg&%wHTMXd_FZP zo;GxA)7NtZ{nH~x=tpj&{hZZE^K9~6Tem84kzJb-HtfcByCM z8v&`l_@=vO;Zb&^^Qn}4M>*fV-aF^?`rhaMY1T{)%Zu^0yN{V=ysriBXtx#`KlU=y zMb?}=K<4YMb&UJ6qK_1l;#ovzIU)7LAvrd&49O`zdNhA#{34S+&T&^9U?X`)?`w~E zU$YE(NY?PWh4gs$z;L+MP0Y9-n{vz{In(R$yk`LGc#RB)-+^|ortw}9xw0NH_9r=R z&r7X0Y3565WVySz&mle8eKs7PPjsI(FJ`PFLq5f=UE%fEEAwYn-M`X<*J*{S;SG)MUd%BmY25WwXTU#UX;Wwq+=Y!p6%eZmB zycp>5FOLsl=LvWxIR(UgBlOGG2b>WtOeunF;qG^7gB}haHhdH+-q* zFxoI2emOen4$1u0>clc6&w9T<_BQiMk7(^0$9?lT8-td?{^sEGMwH#^-s`miJ+SKqyayQ`+-9wHyL)hCJs+@c%O?-;cZfRUVJm#S z_Jw>=c86Pwoc}fNVX8shJKe6~kSn`xTqV5a_5HN2FRhsrIfHBH)dZz+U2#v64#`P% z>r=X~&jp4iz}9g6CeIw=DqlK?@d;Q zySk3E>kr)ja}VPBBc#7}Yk~WXm#GG8^r$o6N*{A6uVQABfmT^!$n?YlC&K zrkt(KUOzaMap$o&X&c(w2WX9@^dRa}N!Jmy*bgx(d7zy5LIXV1)-q1kh|=I~%NXa) zQGuvrQb(9&tGo4_$$`i$!9QAh18Wa?G=6QF(or=JP~=%{6-8+r+cGs!)UsM^w6?{K z2(zr{mQ0(_>PbtM*f`gYbH(H7aj?Z$W8biND58=X6QfxmqxK2frUtz;=_~~rPvaNf zHqql6Xtq$)wI$C_splFoZNcajtfP6Wh)U*6jC$UZbHJz?YyoatCr)dtd6I^mcc#mI zz!(Q!8CYL#O@{d!4Au1|1Lq=**x%9Txv`GcLJKBs&K84dw$RbHFeJRnYGL-U5xFSJ zlkc?X$^_sD#U#tDp?8$^=aw)XrMJ9 zd(WI>24vY}``o%7dYt$-o>L?Felref|hyC$iKCbS!RiG&YI$= zwQS3J&_avCbFLG)=j*#gt~K1qVHQ~b4URhxv+~C^Hal7M4qt93n%Ps6yvZrJB!Vx88qrYrP^=O|O!~XG=SwdUj(Y}yqjVa-; zSQ|I{!v2t|bxJ44b{jIzKvZ%-q0ir-4rxmcDx|sRWIv>k-dQlW6(T%c%o?>?wgl2x<9SwqMF35}WS^n@I){TUFREApfU z@+?R+qLdtm&1!8{&H+MWLj)}mQKH&%o?GBb!dO`Ezo0nRRYfh@nq%vZYE*Kua-pyM z0G6~he}*#Ex)et&=SDl+Gv+_9wK$_sht^Q+FHpvKdmqFx&g62GM||`R~YLz_klrULd3qd$ z*U->5ra!EgZ4tY+JnEKnRL=9;{yatf+VVT+VQfyOKd?w1jVP}Ffhg}Km_LT32V6gY z4`g|dB1e|!uKdx_lvph|<1mi4_G#bg$}>RID?QiMLnEJS2cnYap`md!FU&@u+VUqy zQECYDRa*^r1ArPK21PtO@=C$iKc;Q@Gf?z`_BbaTy-j)E+jizzXtm{y#9}>}`D*la z)`9k^!DHHatD#}%DsN_2v0j*b@V>tO zs4v}G9TQqhJl1*xpDM4O=RKSnd3OS+IoocUYs`4&7K8CCFn4|70B zu}(o6tx7Al1*$ER0F|G|{KUA^V~am)!@f9q($LjMXX;>xncU=dmCUvr1fS(HyavzD zH9C3?UXFiyFgc#~p%uFdoDN=SKjAeZb7}VzX! zt6Lps2146_2-|v*9T^K`?N?o!7>QP!<<~Sn$xWs*H>+f}#Go2_WfbjyWHuVhp3;#y zp&2clBcnaqGB;2fhf|AjKOo~F(RqJcNa)+lxSL~snl+6{SLOqHSO!{%Eo$I$!qFIGuLE77-jJ3qULUACQxhQgirGbd^mW+mt@VG>`WI3R5C z85Z+IPtm$9*#gq2A=!UfAS&6? z5j!Iq<}E!Xn)Bh-Zs8}X6`~$3*%s0`*UTo3I?OdI@jsSwpbRI)n|u|gb!Mr0Jtj`Fr;PoOm3pp)fOAJQJ&lD!*V*g3BU zxJFzHooH8b=398vk^R6FJv>M8xa_-K`61B#c}rwR4s`$N^SQ+sXvx71|Cu#J?>eRE z9k}a}&{})^8Z&CAX!^*~s8LIf09sqXq|G(!C?KL1d5>?_;>QJ&mg)#$-$ecd$XG4R za=z!RQEH8nZuh)7$HOH7;MW)1*(76)s~+E6_K{P1U8OO zEu?lWZqm~WDf7-e?q@<8D=cHht-i8CJ@P)Te1mc}G@_m@ITVaBb{Mani+)qddC&;N z9-Ik)3NI?Tpzv|WLcb*!71CWB(n|{IZVlrymh*npw20D5%djmOb3uH&GEiD6Ca#eCY5TT*h`Oz=6^ zXamV}9mVvCV?8Xkt@R^Mzw5z2I)V}4R$8p&nZ&7o zbBO%KqW+tW%!c*eGPkVc1u*E`!ie~cjbppUwmDuSHYhKSsKF~YqM8~nLqmHrCEP6M zkNC9ZRiI-2Ea&rq;<^5# z_vVpm$$I!3xb{Hi##U!)Xj@nEF)ZqR@K12mz^1qx_EX1x=2(kR*&{0X+z}R?CgMv+ z{0m3)ja%;9z-Q*szehk+K;-qezr)+;u%`<24n!rJ`6|htOwWiUgWi*7ejn9t1<|zX;$YKnJn8NE#1f#+kg&aDw zR5De8AV(ANmE?tK%<5Lz@5tMnC#Hjj&Y-;8L2KIX_&r0n#u9EeVs!Puvlq24|3WfT zva7l+;ryhdnk9M0P9MSw?x#RARz&NoC8{msfQnhdQ1oZ!WSJVgw>?{dw9(cNIR}t2 zL)cX$=aM>3;IqD~+=DU~G-3v_sMzdNqPsFr;mKL)jy=&9NAr1JAhmCBwqYsTmQi9& z*?Z>iL0B$nh_5?>e)Z#6um{oPSQrRx3-hCwr!9;2MU`A_`DTG)f8MY8>k%}Ro|rr7x_3}v989ob8VY{vnHx; z3!oVLT_MqalIvSU>wUpBD7!&pJ{f4?I}j|NYwjn=6}*`+AkKG{=GhGY-dW{g;) ze%h2>)<=6UXlsw-`b!&8mzL~PNXd~)_k~pZBmD{qem~A7w3$l|fJ9r0wzyejh+OEDx_a!yXAn9Th~FFFE39_cZ4i zhk696Eyoln<7uLfEv&Hzb9RgxRdPHKIyz1$ux#}v_9Vxij3bS?`Pj?dmQx&mYJsP> zz5H!C-SKDONV5{-XDnH}(x;A`~gZMmdC(YrJIpe{vOZ@tgyL3ZS_0%^59zYp^A0%>*RxUk-$y}ct>7D%gWKjhUw z>RNB@V|DIDcjejwo!7k|`g)*swli+Fy~UtcV^D4^G@7yKr*ShhI0`ria2>R33Om05 z79*Fjam;w-vxdg4E4O?7C^h>dq3=w#DbH6{JC8YpB^+0@LvQVR=3X#puO)&bsfoBh z*)Wa#*=Ei{d{SBanbnQ^dWB227&T`7zXFpYtzO*ICK2??kPo|8IcGlC{5pB1ajRsJ z`)uTx1|>X>+P38}XzBPe4~XJ%j(Qv@Z878G-fCo=>T6e?aI|sewK8r)Kjj|e+{UT3 zY0DoRm2(=Gp`Lcs$o{qESx1fRS6iM3O8Y_odRFo$M_7xQKU%j+UIL=*3GBo9%B`N` zxgJMa{S0ZGhWs;-(KeAgYH!rLESe$EZV9NEK8q^G}w!8(cvX>CW zTIZ;D68A7<9D9$~_iuTf{U#*34*ms45fQrvwLRIao_}*BBVY*I=g7YU8Fe^)MiJWr z)s}xaihPFPK1Y27ltzy|h?!YPTk?rZ$&Ydel7Bmb`n?>Ld;vt%#e862 z2tRQ0Z$srgO;ii0&}!9xb;-|{!&@X_i+z^uZtv4*A8t#xu*FigyS-0is8K*=?V53! zSBmV&kR$1P&eudv0;I;1D2r*-ppwae$j@iL&sI00sl|=0V8>>I`$7Dh5)8T?nm7MR zV`^wb_HVpR8|3Fb^wJ)FGu*W&W^W|z=~8`Zl_M-xGpn!J(@|8(SD~RXGkNj@@qiG8hLYy<1J}V-&hO!I*2!D7jQIr{}Xy4ptYAW zuKmy!1LYr-MOqAq=Rnwa$azh}?R=1iGS^C_S36Ac^+eB~TXlo(vjkk&3)X~Px z{YdD|f!5iQs9XDv?zU_JRKy`inRV`Y1+XQM5o>*?J^1Mb=P%2&RI4r9Kug<@B{{-+ z`gVl}IZxAr9e~v5Su9F5I*kWAwoFDn7$rNomPN~u`M#;O3$(OybTN;POmwPJwUC|&Hd(6Iu(%Kx<6RM=jHwf?BA- z#2LoO+5a;`8Iv(`E*NzFG~4W3<=;5laz0QIUN$7gtK>r-*Xl2H~jC&=&07Bz#Gag4dH>(xnZextvCBqoG!WnD^ zL_xYS9<-$5^I>_l!#3A4c|T3c1Ev%`fil`2UslI%hTi{#Rew zOUf8dAvZXy`S-v2+K=@nu&#=@PFckA|G&Re$}P@p{xY8b|9zfPZUgfo@OcvVIq#3w zYU~GfZ^oW|pp54va)+~+e|ew$Z&~gFOXQis^ z+=;M$)t#w~`>Q}{f5>?Z9ef>m4M_FWkRff!>yT>unY4^$C2s-|{+P$K6g;@|+t(kW zOJqmh0a9}Yvq;o1Hbd7rV!=O3-h-Bo&s>Y#jBGhty7E5In!)90t^N?Db*NRbF@qXO&y8GO?%`g zOT?)olX*RIB#(R1U6}%CodwM!_Jg{wWqZn4Zu_t|My3J-&uv!XH(z26F(0@udss)N z@j7u0nHX|9Ahox0U9vdUR^b(A${8F%u6~Fafhb#y77adGTXtYGr0ts;^FkwHW4yL6(OsFpKpUs+o9M5*H+d$) zR_f0`C=0qqo{>Ho=1s12!Pk`?9Zf#l zMndll^n7B^NA}|;KR0^yotbi5L$a%Dn;q_RTNBgX4cf7~T6}mPnwzaXTo)+26lLY} znPX&+f`PW#e*G9I>wQLZjO^tM%^DaRYeOGKV%P@^k+l&0-)WAPeW4jE1U2b7@BR&A zYqsnDJ$9(^JZ3cRpGbS2mztyH0JlR4>#|4oJ~y@V{&Nt}Iv0+FWI6vHatM$*7vVQlql7lN z&4l>ZXdE-^{Rz6eSk1gSOpeIdMbe3z$$+Z^U~`|&IUrgB;vT4bN!Z_TS!5b zvA5)WNOiTNF70aV2IN9WazA*ke(*bb^#3b`MkSXx;^@>*4KXc{%x5okYb?pxFM~wu zK#8}0-JZCk;LJa1F!MWmWWEvz%_>;JcP6cGgq5~j?e^{ad{*0Q-99Bv``1GnJoq92 z&NUXtH~itZ{OHe3j$jF+W$$rnU#sL6w@5_O;%$&>yHJ|jz5|lDK0OX+d0TKK@M-b8 zT)!L}19A@}8fi+JcJG5!YsNW^%$&n(`#5IJ9_T@E-pmmX0ukr3 zDAF3Q5BQFv*8Sd8cWb5JfLSH?HzbcGn}$625knq4vsyFB@0{b%hU7^|wC+EGg#Bk< zZ1hxhEBU=6ju-*)M<7B&zemb*K9wz)8RGkRziiatxk9rg$0DlH&RoUot?&rnJ}b2F zmgNMi1Lx&>3_vqHs^n#8X#2B;%hqkltA(^|S-g=8X{<5(VzpzN^;*Fjxj=^ZIWl}{ z%bP%H#L2M^__z-QzINvRP-0(ivYzseOY00R>6-LCNXcdAAO0pkuY_L@3pwumq;qR+ zliPX!Z;6#zAD)4PRjqlRPc%^<0i`|pSE(PUmjm*NOCD}WK7~Z1&sgxT4EJoo-xhtT zBmeG;q(4pM7k!cBZX)FiTk&a?-g2{J?#nu2Btt`2;R;9E=MG{U7d^5i9Z0no><8&F zJ%~yMfnZCGgBAN00ncfb>n*>~qWr@s;eBUHwcT1W#;wz1-WANHle+Xc)Ve91+@)l0 zeminXm(sHnpr12OT}Yd{)3}tiX!<-|A#Hj!1Eku=@(hkVw9mPQYru>^#ktL^d{&rR zF^*>euAVIr8EYHmz&p5ZiLtY*tP+KHa0^TL9Zh^8Ge-XtvqWEs__SqqXhjD2ccAKC z1n)UBS#4;SIo+Hhv8gE1n?;QZ4v&RpLIcq?^0ZESJ*RJz( ze%m@)h8}T^W9t)THCw_xVEtM8iYh@~k`-SEAU6Vy_8nZCR%FlRa)($FB

    Moj8;!5SjSkq?7>xxrhT442zbETwc~V3^o}>!l3^ES8`p;8WzS zl@*OTA#4eI(H5i8+Qxcoqmf=yro*uohpBR;+dlitsH{0o8>$mYNojXntSFmfWuo=7 z2SC~7WtF@y$VOThObS=DRwt?9fwgW)ndmM|RtdGJ%GSV;<`bwKPb(AM&QP%JaTZ^u zS$F8|EyyU9?$woOX|;sjVUk=&oZ2wOQqmb$Q7C0ks}oM9fjSLb);0TEuhurq%3h8U zW@nY{i&Oy(6Ob*DJ$TTasz=Iglts^&e&`y;plY(v%K<%JSP{^r%Cj_5*99w)Z6$PF z@EWQrVRwIZB~5l$YBZm!>(L7b?CvG6q=p8M9z`z2Y_eKrsZF_lMWzwg4${hREuoLG z#|x$M952R5x*XZQ$+sWbzw0dWnd((}x>maRZ9CCXlC87PnbjisOr4HLrw>=`Ry9s= zsSIY#}XIGGVH%j#KtXa*!u`Msv2#e$|u>t~$I*7F;># zwT2wB74=%!uTNHKa4U)$j_9&ww53K(vO96p)>{81-P+dfU=u+(PE@Nnn3A(1IQBNy zURkSoE96X_DzMgsp`I($i6@IsL+ym2C1n-dFr?eYVYTDS^?D6^!;87bSdNkDEt}N3 zIy*cPR8JLHuWvd$>lI*ZU5VVKqB{n8_@Gt3GixT*y8EeAhhmp}w-Yyw>#cYgrISfx z<*#AHW^rYt8x%^gzUHM#H)`s{J!{CU-gaF9yUEsR=yz^*C{`aMuZHC!E;ls8yvV9# z9G0L{M%^Q;6I~m~5=iy4x~Sh6;f*_G-)yKGiOmL zds$9p6VEI_B@1VDH{u#{ny*ic*>*Q>_TAHZFiinuPnA{MtgfhtTW9D7)6}`ya$}Mf zO-@y%UT=}p5B8gkZ-A;(((_88G}Yak$6PmqIys!T7FyH>7XMpCO*S$*6UQ?Tr;Dp@ z$67Ge?SvZpxfO)-VpDZDrp@F#rCL!dtB#ep9!I-Ukc z=bw7lRc}o?8)%zl_UWkWydq6hr!DhSCx+Yd={Ca3RAN*kZx<#iW`Whwm0r*T7>VPW z+a-~H*jd1yQey9MlxZx-#3iMy*yNmnGP{bp9&kOT>aWvOs=MaqP%|xq%3!YoQ<2wl zYP6xozwUFru2`;t+Ucf}*K1ZUPM4)u8|t#C|L$i#So4prQ|q17HK-4o*b{y#N@@y( z*+nahJ!bZ_g)i=DQe5|*AvX2~hY%}Iz;XarB6msZvZcgrGrPcf4DDHOk755X=L0N5 z)wSt~SlQw0;_ti^tAU0th;mq-W@V`^t#W!s_Nek5&vIxQ*>Cl-1hGC%Zwk~AQ4@8} z6r5Eo3BYXgtP19~UgnIZnsw588U2D)l2zo5hT0l9*^Q^@Di>9$Zx(7jjM~+szTr6A zrwYb#ano%>_|zfGC%voRhC@;<8)q}4?M9oc2GMU9HSC-lt!;NKM9HUv_M1mZIBD)| zT65%O-)1-2ep`L&ux)FcFRS7e%`0aHmIkg&uGV)?Z?U~5Q_HHYEvV`;Z|4vhOClPO z2n1ogN|AofDM+>l!!z=EhmqGW=nVsb25ad1SZT-EJjmNgV@0rJG++mWxn9XLq2bUsQV~Yqt9Q zv8vp%I}0fmd8Vbm$mPiuioC>fd^Q^&#v9kJ*^%-K z1j?kfrcsyJK#5m7cI+EP+zr)^?~L;F;2=cnk&~};1m+7>ShC#1w3=}YX zl0XmCwX!jVtgkd`pOtgumL0H4PT6M334is`Cg6|#t}rrFz6R^S{3$Q@u&Nh|k(pW` zP>u}&HDjs80tu19*~P)Oq@kq3UW2UH-Ujl`{;;BwH>5g)~H-8|{*&b?8<0);$mt}+mHmYm871HZXkiW+7fWko8p z5P`-TbGe#poV%2W0RU@x0)p0p)u3Qt)G<86t^n?7cXrke&)}V-Ql4;GTcZ=vIXTP~ zvAb$yJX2bMdTez1uD8LaP_2*Ep#@5cwOm%)26_j%4Az){3wB_hH38~9N~Ln3X|s#I zoE_5hS%GqgNb2~q7A>`w0WF;A6?@uvTrFSZ>jSk@U(`T#lCzSys?`>;t1bme8lSD1i??i9oMNDyEgxO|Gm_ zLw3J40|nDMpaIr$0LljtJ>m$CRRa>vMq<1CN{QQ5=zc31x@F~T5H?)dy^^zg+ShJK z=YE+$<;y7KrDn1!gnqj`!!A(z^m<`k!2CHMHR_p^2#jpy9S-Vai>@oqXv*IM@PZR6 z=g%h2s+22^IgUuKWC)bwJnPE??V0DEAN>;LT6%8s@mmIbjk*qlz8aQ6Uk%GZvl%sC zQRQ2j-RlKvamehFYRUbAd9efoc`ExkSrX(rX}_iF1Z~Se`qPoI&6%;QDoB274lpsT z18u5Yu#5z!r0|`_Z>!cfJGOqcc#(9S`Yjn9xt4x^DTBtK)^AJ6Yr)oV%cqGJ+=kdX zZdGQ*bgOIw4MGkhT|G$fTSZ-~&i-~lu6XtvGEz-;FZ{M!m5j9T8l5MnIT+@tvn*=s zj5B-fw%RLToY@;L5bRF89t1;(dIf?Z_yo*LgLGY%9;mMhW<;EG5KKLNQpSzLEl33d zR0{dLNT6{E!uJ{7<2oT)=Qc{ zZt7wtHX_jT>DJFb5HbV;FAM4>B<(oZoXXKxULBt*d|4<@6H^xcf)$mU0MLVN10@sk zs@eE07nB5wsoEHn=X&Gpc@mx>$1=?yEu4NTyVf9uG2D)SAK-XV~m?^lG7b1I2MZlg^ z_1OC-1ESUrkAT1I_mE%c>;blOMx)j7uw|5eAAVE48zc|~L>chQw8^VwHG#isc&!6f zQO)`3Ho$MEr&qOIAO^~vtlr`F+O2Ev9~P*u&~ggV^9j=5^>87r3P&zGlD(>Q5SXr! zJ4)oY5sy%yO)`XJQU%6KrY}l>y_C5bIdW?!yMaDRE8#Y0_>?5KkQ`^rY< zIRzdNYE(R03h(qzS2OKdLmb z94LEb;IUWr&vYQu-*7KWr{~#eRC%kGUtou*!H;a{YG~+^-R>sTo;&{Rwm#H8=vprK<%#$@zSvi@zSw#M`-~q)2DEs zRZLydrxdvZkPx>)r%srm9vikH9vikHxtcnzwzi(Nvg|oXZrR$n;MLLDa2<3UHEcut zHmyVaHm!qx^Nw3nmS4_Milr3hU|}_^L;N;f2OabN-jd&@b%@`lbuc6Ibed!^@Cz#; zu5Cz08g7FgTger}W5YJYW5YJ22Bnoxl4B!dp2E(4hOm}Zu(gr9Ss6MuPGFB@SZib2 zhcpLyrhQ0jV_JuJA2sbmy!Y61QjF{`IHN~x1MkbyM%~sMCTuSD3;A3z?DC1I;|IL1 z=-<5tgzYo1J2WS7pL+cQ>S5wn4i0|M${;#UtNpR0g+1A^*d z_tJ@vDcC&s9LZK|%E}@~St;uil`5dQ!wx@9KbhnE2Jh$mc4c-qk_%F!HK*wO_rf z1L|EZ+TDalKfg>;CJHFD#@o6ouyYR1WYAVzvwgY1%ZgyiC-&9 zxZjCSD+;qG>hzIbtq?GkP~D-=z!wA}UMGI7=p6k{d|Jt_&=ZJXD+EmYtNb~LfiDP5 zyiWXDT@}y@6HmFi%BK~*uQ#m_Ftt)Wna{wd6(U|Iey!-&{7!sY4f1J4ujbWi5C@Cp zrW*Z-`9uR~J{pp;sdTLf)Rd&DbnR#=jR#t3^GTlS>V%!Z8KcG{QyZS=_Qn$dnwIpR z9$`6u=6Z#y<`b%#kA}CjE~dA#u`y+NHif-9(9C#+Jvz{f8G)+fGF=_$@0>J|VYn$I z6*3ZxM?=z+1-d_Vy)m;u_NT6m?5&I^*F#z{BWRw?pm{VTJwemBc_huCWgqPXrut~( z>1;K=l2hU71sv|`l!LDNO(JN)X@)VJgnL!QT`HjtibO20isWIeau(62l{h=xCwT%} zxC6gG9CcVw+&ActWgaTd2}*w7mAEWUoNwi%SOVu48jlo2&$B5kORZt4O0DOaQ`8)< z2*!LOo6SeVTUk&IJ03kc@N5cubs&uZ%x9_-U%h4=OB@so zxMf3aKumot^SdQJek0K-;M6{R)>H*C>$Q+W_>xCvMGK_DK{FH%8V1}-h5cem;h^Ce zej_vq81cm~V0M;mA~&rS7ba(oOh@M~j-bbw6EQ=@!#t6VWr(mkC^OW&bBL)pE6fjh z{9l-GciT{ZS1h&;mDLx8o#!|SvpwJSG0a+bA-o}ZE$uEOXkm9DAvQiG)%>C?ZlarC zL)YrufO@W-lWvx7(#A+P)6_^e)A$SytW3@yEssFvWXc?QGspY+F`S%fnHO-@FXyPM#O-Vg zn}!_A93tA)Yi5M#lXh*o`8{&25&aP(AP?(u!bOf@3`ixWs^_lq{(zN;=(oV?o z;c+P62D~O}Le(RqXQ;eJzTjm0@ADd?KyaA(9R~HJR|q-`=t(!=4=|`FrzqOhNLO;} z#8;Hiv-Vci*V_AxloCEOzeBCPN66CNXXec4Ss^OzJu+H*uhF@-o|KcEbakk`GeGE0 z^tE(|Wo(Ch!-?&XPnIz~<(`Syc4wt>*gNObYK8P0sq7v?jl+axHxMFBHx^<_u7;V) zDl}3bXI`j(iuBJY{WDts+^Bz&3)Q*EDTTsWq{(?t^%H7qtB0^~k85Je>sVw}!`@&v z9Ld#dj4Do9w8(S!bc?=*c*<7AQw=|cXju3$MBSyzf%wZU1%)NmTybM8Xl_BuSkT;p zR7ilfYApvClnM(lDCO=qbG71V9S)0;tLWH!&AumRRiGmxZ#VXcI1AAn5w6KCt5k~$ zgLXK#?1Ek^ch=oO-ZhDi*UGsm;%u66L`+}Yhy>+KuUt82tC8P73McOsX=H69)YkBJObaLK~jjl={_k$Lo)_UEw`KoOf9#Z2K_@k zFf|Ab!6OhBf=3`E1TzjyM7JCVCZb!8!+;PEObtRq@Cby3;1T!^4Xz5YH{D+qqM?}v zeC%yG4fw9xavBT_@xas|Gz5=8SO^}0kPyr`FiGBW9GE0;ISzwDJTNr~4Z$N27J^40 zBm^@Kd^T=54tybQISyBccwlM}8iGe4ECi2$yLQcO)o!RAYqh%0viqQ=vAZ&88RBcS zC0`xOFkcq^@l91S=wLmb*6hWhGQhWYAPwh&@ch@I^&tPRggE-P~r zFQmj6_QvukH&+b%kOCJqtc}%Ij&svK%zM*5#C!IZaiEYoS&`v-i1vnknD?gp5a(=t zYtehtKFoX5KE!(?bP7X@+EdD$rHfADneIcJ8=;4KZ`y}>Z`y}=Z-mZ7d5hXJSKgxb zVFl9&J=A;CKFoX5zGdwgIJBreBa;@j?;qma2tCw$(>~05(>}y|BkdV7w5UB}k`}ce z5aQejJ=A;CKFoX5KE!)Nd%mK#s6C&|Thu;uIOEpZQ11=xLcKTbTh@+lzD4aBN3^K@ zpb+Oq=%L=5_F>+e_93s{?Aov6WDYgopwlVzT|Xcd_Uaw_=IX{bw5%eT$NV#`x!-}WtHpJto ztI|R^K9R6+d?Mf7V{ztRecuo zwFhJdH_SQByK}mS;|J!kX5V8YxY%RBa z>XYE>Q>#n3LF*!)s6NM5ANMNHY}8Vh_@we0>&Jylp6`>)N*P+-AZwmhy=N?IefYN) zx*#AVHy68}1nfCQP~Kun0;xJ4p0e8SHtO2n+%#@Y&&=iwi|jmUAUda~Wk%)Y&?#IR ztPU7SA0^L&NY0ll&E?`VzgY_-edJ8}^knzu;nQ6+(N-Qx zA>Agsf67(wmZ>_P!+o&U!zb&IIAkF?KUr%g+GZCFvI5lzpLmu1VdQn+F}J%^GWWl2qXn&_CGQ;=Mko|=`Jmy#=w3rk4P$<0bfmfM)6 zeQwGPNOH$}dVTmBvG(!(@KQ zb!YZ6qPXG1M&}I^r_29|GfPQDg8ZBNkE7{oiJvpl&##o%2Uj)>G4s=zjdE<+(Ops} zCksj%jNS2J*2WI@Fl+a{$7`D}&lGmwB3w(^9w0?+DYpOdp zhdDx8WQFaoJoO<&W7j&=vC6}k zsV$G6*V!E6xY#Wt{oFSaS8unB&_y_JETQ(slw_!VNa$>_w{`0mk{5Z|_13KrA(m0s z(mBz?2{(@gH3jlkLg$s-wc^@beV$;5Wz@9{<`M@mF~(?MomhEUSY%9Vr#E%OrSai% zMXvpsFt%3S?->+{`bC_WuAr_bL(74|P0osPD|# z%3Cs2mmN%kXkKGYX+xvFayFQ@%+ijZkSfm!amNa7upGrvQs2Pkd+LDYu+*pTlmT<6 zL`cLe%dGO6iiUBB=&?qWWqgw>Ylcv(E6P*2FNiB8EUWY>4c0J3-N}|xK8cIjx~k6B zwMymWE)IN?N7>6!hHFuv*8}Qq)MuH)nTmBK)j5sh$FicVm)|89)rd8>o;xEsCE-7uO zVPq`-l(mH$kXw+DW4wAxj5;ApsNo0El>({q!gTFPKt$T>d&0}hw1^&(dVMLZtfNw^ zd)l>-PIj-5^h(?6L9}5j|CG!6I1E%Nq=wqMrlGu535Qiux#fj}I$Ks#(I^dI-_(7xZb-5{3{{t%f%|OU7>;$`!W}< zcU1mpIb8%@IjO7RjV|A=wHuZ`w@_!8Yp>7Vx7r@9u5Mmj5yK0!iR$fBSc_Rc=~;pB zn0W-b%%#*Svi^j&ymFhID?>vZmZ}rVj6-Xok5hT4VF+IAd_HTMnB#yigaX;0uB{>x;Y zBN0?zdtnC=)DLCcCQ!e~n)(f+|I=k7B=E-ihT8G65NQeBDw(d`n&P%y{^AiWLTbqEwJ#+wy&d=}J$`#{6R z`fXZXP84=e@@8gQ_7ZL~$nlp9!yJnElggH{hPT%6IF^)m80*h8eG8YIAq}?l^bxGt zs%M);O5?4!GIa767*{}7C106j*@5kW^+w}sGV<)0=(j*soBh4X$TY^_b|dFk084q+ zxKpD2#m;BXFw`IaVZ*tSs8U`EE3Xgo=Ebn#T-a7pU0F7~ys4h^b-lJlm1Pa%7&v=P zW#6g}omU-3SnDGtWI@zPriaCD{!1I>wB8y(xK`5Pu-XRIc&hfNJ`fw}+S;68jkXNu zh4LaJr~U93?JU*0I4S8*3vF$;3_)962z9OT=TerhS@e~HDE770jpJ*KjP_RxTO{9* z3C4iPy3JEiN3&ZEy(?zFiF?nKK@c3;;%;$UrRt1tNR$;SyF%FXb8yZ6J3y65OTYk z%L2MNL8*#lmds$Wva~h^q`_h(+ofpb1g(?5=O8as&mj{_RcS5eZ^n{qDw(+}r&-S| zV-K3Q(U5P&;S<*W5)@5w%ZENK-(NPODMRZ@$|~t)WLcy>+b^Uoc@>`AW?(4|HCia3 zdrGVx`Eq|OLnIw<{T0CuoA+^b4YCg0U#y}jTnnpHP7C-eeKf_i^_3@XuNpsIURqY2 zKBcsLLW6FR{beM#h8Gq-I3tGtxUTT;{^nCcb>?c5&#F&bN&u0A$cpHTcsW=QDx`U|uY;GLbZv$~YGC4Ve2 zUheAyBN_81CA$pzqhl*$52*B5JdF#zYAbl_wvY3r-_|Z2o6MTh>PE)@R5~*u9D6lw zpr7opb8U83lO3{IhFSp4Y_E_gp2xJ&GZ#@VMswaH~Q64b%vJLmhy_rz4h`t zYA+>~^uvJEgnAk8MyrnZ)?)qqVtKWb)u!wE#_<#6u4_6l8ER6JUywRKuC}i7c9pAY z*~O(=vcF$4tF}}L>E2n1#!^zp$)3XF$~F~tKuM2SB@NPd1+5*Zps&<^22wG-W>RHc zZH>GIrli`CkEKI4r;pdx7=l009uM?KKetZy&?*HC>C3hBRetGoIWn!QEcNIROE|l{ zl)CB@zD)Z(!0&TPW$pNK>9wK7#agznUpA|rAAUyL>*Jt!M1hoX9buG4CWT-c*7x2EUuh3^%NU4GO!MSCaux9kZ6 zRV`>YmKRN&ST~7eZ!u`;N=}w);XdCfEITqBjGtip9-669yAbFW-g={pQ3ALjOx9Ww zYf9z#$_8s-H9!@Y{{G@(C7kVlAf*RtXa1_wvNPFXTpT0nzK~)ScPv)w9Bhb-DPPhUs+3={#$oxjH%>o zs&;q%DTn7DlxX(@Pt83ObIFFjQ_94tJ2Vx>;owsXF|F3lUw6o(RUUAv9?0SRcwUIL zvwo-QjJjIapxyL6bvLzE^}a^crU8M`fNthO21rJm_ap5#FiiYzx3W6MYPQ0{6hG9J z{?yeJH^fMbFz>0IA;xYM&G_&9idj#SbSwg+Wu0K==+a2#mYc~?M>2T>9ir8Kc^t$X zLSl@f2 z<4|UA;9bPZtw3nsG1B$Ri&&ZB7nFJ8H*>Q#HAdF@U9_09EvKvhP1#AFCed=b#&p5X+N$=Z ze9ZYhors30h}Cl%GO{EYk8Z-n9P7IiO)ZwfmJ`4;4P_)-%Vjs*l}xx^F^Y=UMeI2x z{T^@5jfq$Z;PsN^^BA}Z80+2ABi>>X#+dJ5VYQq`wx^}kTz<=wc*%8jB~39WF|>Ew zCCQ+RH!V3~&_D2g?g?{<=FVo9o5bJfzBP3n1 zL|AT3n&ix-T=5+W<3>5K-spbt9pYZkulx?_v~t$28p_0+5!GJ`^ektr8BuFKEx%kY z2(muzoEuQUo^=~SR;io_yvW!RBKXp4TgjBP|IQpgp<3O+US6kjAuD#6mK$sNixi(S zp6PFZ+mW=trP!ju z_Qw&W;FXqJuQJ_(akA$*hp<{nWlNyTaHcmyra>G#l`*zoft(46i7o4o^kprm=#OTt#C^I4G};7AA6Wq zD;u&#c9qmvb4IuP&qI*=6mrU^SpG*N_Rv#fb07NL8Dykzk)IruAl0G~jlsI@o?E`}7ygBxKI{1hIAKfo*SclZ?AjA|{;g!AAs z$bdY!5yrti@E|-4Prxhi27C-(K!?$!4fKcW;YOGQcfq6Z1iS)oz{l_fbhr^W&>yac z8=(yDg8ShKxc8>k;#crncmv*pe}cFf_iz~uf+&oIJK+KNIs6h{fY;$e_!7Q1rnR^L zegMOu5bEGAcod$5SK%G_9KMBfZ=u}4Rge!qhCASXcmjS8FT#89G2BZzc?6z@7vV4P zE_?`ILz}V08!m%uU>J;oaZm?$!vpYhcmke-*Wo?*1Vm|TaRyuo*Fz4Bg$ZzX8FAtF ze)t*u7T$or!3XdOM3A`z(jXsx3BQ9IZY7WSeFOdmU%-DLQcigA14x4(Lk-*y55uqE zMR)@~hOc29e%)C?I`Mli`~;qY=inuH9X^C_;aub{fve!N8uEePC*Zg62K)^^fKMPY zj{JjbU>Mv8li)u1HM{_?!av}1XkSU)gCURux4~!C=*;gFcmQ64*Wn%b9R3ZhZ=-y{ zWzZk4hhb0#_rg!$DflD&2|j?&;Pfi;7QPQZfMHMwb#NCv3QxkT@D6+q-$MKG#0##0 zVNeKla2GrXUr$7)mNpD}z>nYth{6Q89qxe#;YoM}-h@w~%>?|0Yv5*>0{6oc@FKhi zA46-xI1{dfAHfZ9Rvm8PN*DwwkOe&&Ne6y!hF`b7psqs?xDu|1EVvnNgWKVLco=>I z&%vwkK70z_LWgOjCtL~FLl)c&HE<_90FT0x@JHx&xQ%$7-w)w?can~96{JB9jDiNZ z8-4*#!E^8u{1rZf|G+uZDQA!Zc~A|v!+r2;_#ONO-iLodMks^3;8A!2 zUV*>Ezv1i|^x=>Lx52&eD|iv!gRkMtyNNg40Jp;3@C*1OJTeo#;ZN`ZdfQH zJPc33Z{ZDi52nl^Zt!z>0$zYO;C=WEzCVw2x*vb}`)+=J4!?va;Z=AO-h+RFm`lDu ze@KBW7zdN!9{43Z4X?w8@GYGC0J=gNmtu&;urk=mnDf} z`1rHMQ$I-*&ppC;wm4BtVq80}SE6`#U7~n+Zx3-vyF^j&w|3&;8QsNMX+6Y^b1x9* z)b$WO<|c|+?{yS6{=J8IA1+AkDEjs|LtOl253%ElGsMsEXB2-|6VB;h^bjX|o-HD$ zCyMj$>nygzz9sF%#>d-uPj5^Vzrk($-iab_XAjYO zPY>~zGtUy=qSvPFjGGsbZlu9ncnFrkN_ZaLhP`kQ;vZ}+y1<2SDWpR#jD}K}4ol#9 zXohWY5RO5Y`K?87=>AY^aftBR{S-5}5Uz!E$c53+2n*mD*Z@1>BRB#H3-JR6LOSHa zXlR6)unbniX4nBoq1De?i}T@fxSH@&p%|vZEI9UXYq5pj$KY8w07u~jbo+U0(G#wK zflvUoumG08^Uw_2;2<1>E{kvjSHM6hfD)Jnb72KM3va<5I1X*mq3hz-A_;O~3^YON zqvQ#{%U~rm!#3Cn``{$BeWbPM1tVZQOodtS7;J#;um_Gq+a<_C5+uVIsDjz>5Uhob z&~X_$6Lu9e!U9+V%V7;{f$eYv&R z3Oisg9EAAgtwkre0!Bk4%!GNc5}IK*d<3UGfh=4B*Fq+gLp{ugrLYcOgRV~!FT$>e zX|Na`ht=>rybZhI81(uLX$`qB8X92%tb}J^8|;Q-5WkZ04SiuS+ys>{3l_ov!W|6R zFb1k%D$Ih1UQleQ*rgu0apz1J^+|6hkdcgL$wF*1%@i z2?yXP#Qm1IKSN&en*`UvP$-4*Fd1gRQdkGOU_Z24OZ=f541iQ9hVd{NX24Qd1+T$& zI07f3`|n6INQVNL{~Yl}hv_f}7Qz}>2b*9k9Dumr(>Fk0$cCGs9A?0LSOx1~6KsV8 z@C|f+mh^?|U^rAjBP@Vru$u5U!Zz3ghv6h7JWrbiSHN|U4L3m*G{GEL1S{ZKXok08 z9~^;Jf1s>FB3ui@VKh|2RG15kVI{1GEpP-{ts_674-AHE7z0%>73RQVSOx2$8Mebd zI0~))NVt#)eIXSJpc0y3HY|eW@GLaLcGw3;q1Afa!-dcXu7h_z?;&1gY;evKZNxkG zGM;z|y)Z9=5~zYkSO804Ijn&#un$f`rx!>|7z{VTc$f}rUc?>0%V8aCg}v|XUy@DunI{2pF} z_uyk_jlXBZ$M7{o{!IMf5_t44ypQqwBglhaz0P~tX5J5B5M;rR;dfhj55n#pc$2^1 zgRi0W8@z|XWzZk4hhb0#cfiB&B)kCc!Y2^fO89UY^oKmS1#X82;E(9^XLuL>0bfGO zHo}4*Lmk`=KY?GubMPv>3s=5PJo)_sI=so809*+-z$j>dyWwH@J-h;Mz{l_f{0Aa$ zk-l&Z6v8;T9exhKfj`0D;A8j#I{cMzU=Z8@-)<+}(4!FQ;4XL+o`m1SoA4g|6F!5} z-yuA>9`ax;+zCH{r{G0+6W)Wbp*8;ZfPQe^-*~TtG{}Kb@Xb-)58orM{Cy|f2fv1= z;ScZ%{2jiAGk4$@{0MGJhu7lA~0TW>!EP*axQdZzP7z&lp1oL4TtcDG+ z6?Vg6I0+rUBA=iyBtsEYz%-Z#%U}&O!* zZ=RnN5$|?P6gT{PuQQIQcRw(|FOICg!U*u(E(==m?6 z`Az2caj5(jd4AWyR%msM@!WCJ5=vn_%z=fl6js0{*aNNp!~6;Kh5;}bZh}gf1q)#* ztbk4M794`((Dej)2g#5NRnP>p&W;lY&xjMV(Q5%De=klf;ddQ$KS?=(YatycpDDG3Fy`;PV|OU7y-rTQ3>@h1D3)n z*Z@1>BRB?KPKy&gp)X{^O)wc|!9rLA8(=4V1gEu*6P@4+xE9i(1ZrU}EQV)c6YPQR zZQ{fse%r+n7F-C|LOSHaXlR55@CY`6&;VLq&cXJ8xbgsbaCXeoOeRf<~APkHcD64?AE#9EYym<3ukQ2nA3ARWJvZ!!xiM z_QO$#J1+hHG^goKOG8Im9whQoN61502fG{X)!3UR%VhhC5j1yBn! zU@5GDX4nfyA?{-G8j>I#il825!4h~LnqdbVg;u?(%g_gg!x*TA889DK!3Nj{d*Lv& zy977T2ZqBKsD&A@4~{{XOX*8s0Hi`OjEAW(50=4N*arKd)n$}9xB@caCYT8GU>U50 zX4nDyq1ENcLoY~zWEc(=&;)Z~B|HP$U@shnxF3+7a4B31*-!~nVIC}lwXg}c!(nK9 z1^pXb2SqRu=E8E=2s_~@BwR_HAsKFhMwkyPVH50zZ=h2j+7w8KVrYVeuo_;2y>J}5 z{E#$;;ZOk+VJggm$KW;C317i!eaRE(4XH2!E=|I0Aa(0n;yjqVfOIH^T9^Zi;ThNj zZ^2$T2=PPchhP8DwjD~uc2P@!kK5Zwzd*A>Zg^qdX06pOf$b@p34GUm3 ztcPaU3x}cI2;4wVxB@bv2LM7D0G*}GJ!baE(Z^L2eGKz5yq(U}S!esd7M#3*9?VvXdfDup(Q(+D) zhi70L?1p0y|6|e_`odti2`XVKEP_2{xZ`&%tcPaU27BQIv@0PzxEe-618eE7U*Fr87LoG~)`LGmL!v@#_yWj}C zwBtO{YAR&|dcy!nha%{4N1`~$T9RGUDEmB5gn6(8o`+`G1_$9QI0`2Et|-Kb?G^fo{<8Zt??$bxsr;_}v9VXW|#UgITA0$ZM#D zCRhYp-~hCpg}-nUG{I`v0@vP47_fIXb@e{t1oL6={ggde4x8W`=rR{~umw)S`47;( z!%Qfe$2b7qOh^-5Uei|pnUd$SIe!DItpI|st!ctfd&5-#s z(il2FL|K7yme4X_Jl zuR#Vb{VnAM-i8A(U@d76&%;(|dKUj+4Qz!j&(RJ+1dG{=!Ds4ZU8*ExZQ%A^8>31qwDH4_`s&KhZ8gBP2Ex7dQ#$ze;(6 zjS&ADenC2v!rO2JI{le^gHo6Q&%)bq6gq82zt?Hkwoqr^pkINNFyb$y4;+O~+bFj% z7ka*ley|p{!Qi(jKd={0!i9fj{0tLeKD2$CxWY!*4UO;6pFqKOWMD6xgrvVwk6<&L zfbKhR_bz@x=1$@cm%m5Yuo^Z&$6b^cSPEm_r#?WReWW9#{*yTcm;uY+BZ%8i-hW8A zFdufnSFrmd`ZHMgG4X-{2ha~De?of(qd((;wW@&8xaFwD;$IiPmhRm?nxAz+eeru zi->j|BH~h*cSc04f}_x>Q$&o0$*>AGL&=#Dk=Z#S#-9}tSvm;^$bnQww zuvz||6A{Cq5}IKjEbJB$-Or7PdUyu9caMmhU_R`CMduMVbUHsGw!@_tM8p{Adm*~P zD%b&odteTa!2vi4Nr@3L0!~2p??=RGJtHC!MnXM24xKN;PZ$lG;p9{CqO@0pIf)4K z4-wH5RzNc(^p1$jp&k}MmrDo(_P`0~duc@E!c2G!PC)m|kbA4W*!S1=q8a92L6}z} z3y;A@=+h@6vf&|k28w?e5!2w(z7a7Liuy%FBkYIMl1M|Sgl5GCZ3?;qcI8+ToSLk&EafQ={ z^9ys}D;SU!5f!io_QIvv=mM!Zqzi0-U9cvX@(kTZM8rTyhGM9M*-(&Axh^2zVIQ=L z;x`n)5?BYVMp74GDlCQ>h3F3*iz2)Wp(m_|U2qJNM-c|BfM!^5Bj(WcCh`F)VJWPK zU2qIW-b@*S70?WcV<^9{1HOXtTPQ`)9 za16SRMII_)Eo_6skWh*qP!B7h85WcwS5A3>F1J!fU@9zzxC-(Oa$ylX3nk-d3*c=y z0>`0SCFKZ`VJjruhR!em3Sf2>^#ziushdy>O|S?agN?8mK7u3Ak-dA}AR8KCAuNS$ za0tGEE;ZyCTn9s;9BN?^JPR9PH+%$fwfG5Fz(5!Y#V`$K!*W;yJK!rg3Fl9Uh~AJ6 zxiB6k!$YtPHo$AJ9}YvpMA97wz+e~y6)+3t!)kaQw!`>3{D8ON#XA$laekxI*@svk z5nuAVjNgCVmB@QcL_}CKzOaFOgoH-Y73$%xS&8BhzwIW`7Ed887~e$wgTy<~0oK4) zXqra4z`{H62gXb%k6{gLg+6zY){r;@cTfz|U^Xm=OYbI)p#o;XRyYV3&LsU|B}}^q z|Kajk=mT5fAgsEVyoJU05q}swhwz~SX2EV4a6jb{nql!=Bc+R=Ftk&~7vj`8~* zzq21iADFYVy;uR=ceNK+!-)mR{*-)z@ld%C-C^d>BI1FCFYpuQz?fzD4JV=RFDYk_k%q7k znqlqZgbM?IP1%EH*auyg6L(kuYhW83f`lhXM_2;u;JOv`k1!ur!&W#516Sf7?1h9U zaRV2wB5h#}Y=x_zB3)n=Y=&N|(HrK%O4tp@q3UVk0tss(;*slF+t2ScgA*BxllSmA zyfY+Gv|UTRfLfRbCBKV^=}_MDf^j)J0hJ2f~L=>+m--QB3Cd zA&C1UZ3h%VBW!?O&~rWQ2{gh&I1C9dkhkzjcA~g&1L*>@;LV&w*8NfLVE;=Ikuicg z^h!j0KR;2d{1a&p&%8=s330Dc*5NHU3%`44ko1)R2xdIeuW=Ql|ghcOMM;QKFdm1>wUc*bCPkrQE{f@G{K!61}1L zE7BU8VIO?+O+@@7IZ~?B@4F ze*64~Jcb#t40@iREWsRD0lVNBjQlnt-ncbU?Blo9Nzw&gV*SQk5ik0&kEUCzc=1<$ zr}MiM-h#tW|Gjvz0M^1bIPJ7}kq9H99#%jz9D}Z{{4pl|zlkqfI}GhCezFN)wb*bgH+5I@)ltvV70%!kfr;1-^Rx1mp` zc##boU>6jh884>6PWT3)m<`L}5VZS06y0@PQ*Rr`@vjNnSTGoDgHd*OcXxOG?C$RF?rz2I z?!xZIR#a?7Y!u}AJb%1jXFGA<*LB_ZIU}~S{9gP%;idJQ$Jq*cX-o;ONrk+Wo!0_u zVK2RBxr=31UIR)Mq5go5-WydDMCw;JCYDonq#pE4azWPxQIr>1F^3)U8@d>>v5Eqi+ zspzHl7>j2}f>$NtLjtl@rgj*PUAT^pRTvW(s*)ShRbx(8CpL_QR}GHGeC$D?n#712 zwY;=0fO^&Tl6PP@|65|N;};xtIH$1|#p-&g30(C!7Qf)A&sgIbRyN>V!tjRF1=sNj z1sZX#V<`@yPGjOiP!rBwjBiT&h-=1}H|KaPg{cMOg~d344=}W3PT~X_{pY3rIEF_^ z*NSmMjy7D&a2=lz-j?$R(fEN9?U<)%)Slzfy90H{VjMs+JRLa?uncP#|IcX zGd>uLMqOwJ$M6W%x^f*wif+se9Kc<4@6OynwH|CoU(CiQn0m4w?xIOAFMft6M?67z zZ)$?Mh=aKg$6*IT`;rf~;W9Gy<9JNR7Cb`|y!tcth(+K4&M8FV6HEgcAN0l#_zfa& z>_d^k%!!%YQ-$S5mXSlew1&@q_8iJNI6GX2Sel1X7c9jgWEerbC@_+-9>rK=El$BR z+DraB!*!iy;26dVld%Ek5sNfq8B3HyYeXW;I4@1x7p}1^SEJhju1DiJf01Sa`=b$t z9pPsjmgiAzB6Y@DyhOH1oVSQX6mC!EHDC(!ADeI<>83J=kc6OVj05H)9@gnxJMjSH zXOI*8X7ZYX)i{A%vuF>;@Cbk5noS+i2rF?6Y39%uuHzG0%;oh4OK}Jf@C#$-5i4R) zXFj#WGbF*YfO8VfFc^z*0MYmX$3k8cP!GLv2+^pth`EbxxQt|Y7Sld@VlWnBHMZa) zejvvZuG@&ij-|X7!m*4#FcgasgJe`%P9NBY%kW!4oe&S}O7g}h)LZ4H-Mr8AD$Cz2 z`>$r6BikCr3Nc7VrM0w&ZMck%k&FRGucxNig!8zGI3%FV2Ck7ff(Pimk@Fl;h=F4h zvEvz%kY_VLS70nwqxBYEi&1JTn2T(C$q_L~#@K!IiwyfY9;ps+?jr`tIB}4EvHTD@q1IuJ!D8e%LcAD= z(4$-vP!E6MI>x-j2N;gC9gmOz>j~xzJ|M+OV#E`C!@yI_eYj3@y~kYaLW?NQDZE7B z8ETB-Xn&S?5QpC9s5PPxgVpDWA0saiKQ(mF^?sBe1 zQ{(%zgCY;8DOzJBCSwCSK4eZ{Cbr=+Y)`zD6YEfy&#Q+#^-^)HLEdHITK0_R&%N{< znPa@v3t!;#(n|~Q6lq_1=^nmgP%P_l2@$WoR2XM4?2VV~@4a*!X+L;r)JJ^g^*+u^ zCBJy-G>q}|fr@B{G06GVOaGAerx)+-rXTe9&CeMLURr^GKVE8xe%Od}_ygx(FSWu5 zoWmr@w;qT8jhE}oV_*8Td+SS>w^A4IRyTN;^HxTrt>di`n1>5UZ0N0J9oTO!dB8r;TYoTR zKJSZP;H~^Cz10be_zd6~9Ny@y`|#OBKRLs7i{EL#@;-ZGmvD{f9Ig(m@3V#Yk$ac7 zYGMo`c6+NZHsW~^?t8G8K2Ulexnl&f3<*%}Bh==ox5i<>;&5$cS^K!RdSLzuZ|%Xw zliqrRG^f0k4kC_zIl|SI$FHd0T$a1AG|F3t@Cl|f-YNytIr>3w%*0}>#Wonudn@Ro zx8h*F#J*R&br~@zbJbgo&>AE02ni^2&0GIr1J1(ty0>C)5$k3LV&;T4q+SCT6$6NTP zF{n9)U>w%qB%UG>?z9FKMnm+&9PGq3e1y@bLEm#2bU2qmH*y>FI}iKjH|Stt_AO#i z^q=ipamlg znlOs~$I$0kgPxBwsMAEYO)}{IWP@r?W&at}a;8D&W*hW#jzL}K5%YY5mMmo5B7@E> zVH}oGi{%ClTS1>I8IRSB&l>8!&Y*6Q5sZw;jb+%4KX6_#C;}s}45_d395vAm2XPJe@d6+56S~G2UMEJ_Z_qwc z-(;*1e9NGD*o?hMg!?vg0y$9_WpNHw?@-gFT=Q7AyvsVg!e{(O>S)?Rr~Aw;1V1pS zF?OQ)L*^thujcbMEMFk&BkG8{Sb@DbjxLYcj-pS<9ciBu4{qQy`aEMh^qd@H3@ZJC zcrXV$k%)dT*@khin0qK6Yfu|>!vMU%Z=`%p{jeS*-Y|Y|nQPdJ=lF-O9}Tj7;#f?< zaismsaae$-C>m$b(Ju!1#B(lT(O1S7CvgcCc^%ewYJ)TI`9c0@iDB4@YY6yhP=0Lu zMST(RoAF3s9I);Wb^J^FNK9mX5^r=6-PzXMstHveJ~6YFbhkt4&zKlt-%W)qn7y_ zbv%eTJVuoaHR@j&&m)W~o6e|n|CipV6&a1%o7t#&S&jOd&8Ss5jM|@*cykd?9;4Fd zZ&tz2l-mLFq_JAw3^vL<)Tpk**lz^+k2C7tc%yPpHtPKpa-T+RW*Bv4mQfw%P`CL;EXxs4!$jew0LI+(GpfK) z6z6aQ!5fXrin2)5yD-F~m5m!B*_YNnFAmJjGj--(pl7Y{#{&)EyOf z7}aH`QFC?~wQ&#a?q^;dAjd=Gc$j>S5Z_VqIc`+b6O7$S@;qhK;B!VTK5x|3D@OTU zqu$qzs&m7r(Kn6Sb&J~GW~}ZS)$E>8r=pFDzHd~9M@GGSY?SM%QP$_wJcf2&8MQ6e zsHE3M6?tdWO66%{Yyn#te zk=)3nUyV%)Y-Lgo(K-~F&JYJ*OPd9kwYKi>~GSuK_(R%Y|>0bB4G&q z4>M^s>WnbSGt#7D*nmQ#OlpAkqiGA%u@GKk$Oog5W~_<7tC-Xkli?U=(p9`f;CPb? zpcJa09$Fw0QMig|q?%xo3+XTt%kd7$Fid2u6|UPX-=X^?lcr)mR>Cydq;O=ze;AI5 zn2n`~#10%nnkkG0G9VXlQ(hvB}W*agg-yCw8OWyNLyibyOxyYpa5#jo^p1N#i-5%yFGVSFY zNymGYST;=`uAG_qd@YZC_i>M3?oIYO3-7x-Kwd{o+H;KDPm?o3qiEv-HACDLJ_~%+ z#Q*7djI%d57f|3P{i6RZmWV};+te4`?=bF2cbD@7ChouX2>JMI@JlRxz!E_ZIj>Qj zd%!h$XVO3eE%{A zScx}ClSmsFiBw692O<%LUr75iOymF24n81XGC5!eexaUxG%$sa=Hm(eqFhQJwZ>?; zQt=ogF&P^WhrX$OG#d}_3q#ZRC>o};KFWehSc_9Ic=;$3#$q+@;v13>^3hVfL`NSVeLyp_j}G823>NxFGYrNyT!x?3 zM-?y_3-Js|$Yb+SEiA-7yn~mokBXrQreh19Aqh?F#Evbvh{b;Njb{F|js6ZF%|#r{ z0Y18l56BnjqdFLmweWM&HwI%No*@Z&Ts~@xEx3qXZt_N{ARo2BZ0x`tJTHp|(5rbsp%RpT)9&7OdhK$6IW|)a>h(R(cWg>no#sMV5 zlbJTq6VH%@CRrFK+(tZ#WMyt)DmLK>{vua4AJxDyJVK%Drof>b$t6pn1Dg5g+- z>-dE5oaBbSn2k>`Ql zULvrVj|yNmcHkva6sLa-MHFJtz69q!F5?|MCCLXpF&!C7(LYj^rgmt6z4>^5M;XQt zSA%OL%r%)4*nz9aQj5Cd0PdnfZR(CUNK=RN z7}wFUE;-^VJ|JH`^2YM|y} z;5=ecrWw~zbjCy+!2?ujPApi8L-+(!3+63aAO^|k*^=ux?&2FV{YP$CjS~oJMeXna zzYy4(xNsF8(6bHkBSTwihdsE7;qB-fq3t=>aSG4i*MVywI(H;qWa>nJc!IxZ)R`I} z7OA>We_Vy5E49Q>EXGxQK)!C&7mINK$?$ZiR=ACz9>kBEh(lCQaz~Y3)CWs(2#(&g zg^pN^JbjoO*n*2V+m~|!f&IuISMdS)`qMw&A!q>kBNm4SvK^s=$RCx^9*c1R$?yzj zZo)c*ywM-ANHvu66P>XfN04e5=M!dQ2VNq@aPmM$EX6Nm89^Vo48M`o7V)r-;+l`; zh()T=!~oA2;=)*bLuP*NYB7%duzEb#&I!~G!za=QBC!L95QVF#FvUkXrqVXD%wR6z z8&=Nbx{KknI2Mt3GMjNmnmNP-7Yd;P`r-&4VDVh)1iyKl8`y^v_y*tkT*q)8=@xJf zpg-o~5fYGNAvMGiJV1d(TsJTgk@y7DV%DKIA`ykqC5#uwV=bcb16h_bhM0+Mh(R(2 zFC!*wT23A-=noxN65A@)!*?}v3AL~g`;dg7HSB{}%w9`PVOmE&7>~8+xse)fqK3G- znfZijTbUQww~hIYN;?=oJlM(jBXAeFqXybyA@<=Nymr&>9?nHn*+-mM3e$ep;}r57 zAXbdUYP^HjL27%LIfZIR=^syyF^;Hooa+gOV&Dm0b1?fP`5@>N=R*|p2QALA55{Bd zHTr_#I_E!{VKD05#vR(nL`0(0J&wh%XwK35Tw@-Q8~#3K?mXeVe9D-k&@<)`CSwC0 zJm(m!jiE2(c|l%ShdqQa`*z z$4|@$Z23%#apa9cUziWb7Ejv<{YpIW`$in_`c7MTgGN7y1^@lzbp)T#;urG_$r$^a z`2^ntewIf(TK}Q8DD#)sAA~282T~+4rxAlX|HvN|lF11fxEs$VxKfyT51d)%lx7Xb zC$vaq)>V{9ZPqq;(wH?JzG=;x50{r&yI}U_7<_`sVCLR3><^F8tkv)}nKc?KVf8U< zB;t^4Hmj$_tY@fYHR}Y*+01HnsY`&5DG>&&eMo2@=1{Y$M3~hP<1rK4FfqMZMKTgoCbM>+ zV`lcvN<8R`IF!gv`~}S#SlX;o<;?s%V&-ozW-Y8{=5H!yWvat|^~^fZkbIk%RjIj| z&qR}78#AwgX8rAGR#X==?`tuuUN5tP`kM8!zgb%b(Z^7;ij6RHO*ZTDShMC%Fss>Q zv(im7bI)wE_ROZOd9<~VdM`2S_A;}Ut~9Id8nd!Rn)PjiSw}XTHFld>)pnZYw})8v z5z9ehIYKPQ8HZD5MMp6v=g9A(S-Gy5)#xt!VCFsQjSA7!6?@=!pIBjiXx90sX3j6_ zfyfukg;?r~771n@!|+7nH(IzikcIo|Smft#QHubJrg|)@7GY8AbQX<7QhJMmGFX%+ zqeZo_5+k!%l#J-C7JY&#n?+lYF1tnL@^dVP7PP2HagHfrQDA9{o|Uy|Lj{X^R<@{6 zHIA=g(fQgI&8%lpqlOlRHnHeUGmCb#v}j;!i%PY#$g87;pEuYS8#-Hb_W!zARHCaz z^^mWJMaB9OUq6d(qicVQUJkG*0f7UFeUL@R23zzFUPEXX^YH|Kv1OD+7hxW4Q8rY; zbZo&z_>Q$G7mC1ZyhT~Cc!EU-;5UhyAbK+WA;%Qzh9grgdVm7ci4jY22oLZJ9cNlJ z9)}Q(e6ua8gKfBsWO(MVZZ5UL=y}u}w-Jx?3oMF7nMD@;hw+OoT8p+z*%ue_2Jx^i zvnXl>W4hX+zH4c31NmVK0ykNBZ6f9^7G2+K;eNS{!$ERB%sxli2ZfGXH1-7Z;uQNu z5!YGzJx>iTvd?Aq!9~oz#yq-7%y$_7`{ee}BEwVa^^);_Wl`;hR%ME1+^`AZuc_S| zi&DI^=+p=L{!A|M7G?TwQQS}Jo4_1Pw5U=tIi$2II<-|Ry{zhJv?`a`s$W*CPS~xQ z=&-7m)2j9^tHvUg+p0%68*EjUELKg=W>wDIR+Z0VRl$5#r7mez1iqKH%2tVORjhhi z)v7f$t-8^`s@#pOs)-v-tSUE%_6A$^atQs;uqt$!RU>ycdU{6l=#kO3ugG~8ss(@zsZ3--6Qvp;fYU6iGn?@G1X*q5dw;*QVC>ZCpQXdeX?Il}&8&YG#wUl}*`D1=ZTpJ}!4;T_@Ic zw&@)_-E3Od%cihFHmw~&9|#)FJ`>n?noTw4*yNaRVv!}lg}p)E#Z?Oo!HW(*%tr$;u;#txj1v2ia_n;Kyy-XPaYV#0hp zL55d0K66VB*o5Q`YZ_Lez>4_Nq)d~pI7aT{LmX&>FO z5+@Lk79VUni8odmN$abNW?%lcNFT^#^VM1;<3C?tHM09E zm!Ge^{MjEr;OFpF9@Ij2OvNUgM=VkW_$nNw&;moT7zc0{-{2cayQqP#n2ZfLiaM!5rkPY^Z{c7>~6$ zg=a`YP_VCxpb`3GE_UHMKEdSiRTfl2dyK_uoWK+Og)78Yh0p+fF&jH@6(3*-rS_l#4o|9BQBuTB9raVezq0#)$~FAOnDYV!hR{EL3}p<5aZU`Ut|Kst*hUl67>p$*>>9`8 z@obyG+(MH{oTHOD&!+GkO{Ow-a7|+!65yJ_K1e{5nVb`|*fyKFg(h>@|NrK)ejett zZ2`-LY+J-Ji#c`)kC(FlGRAW`*N7F=4#)5a2?$(C9;k=jn2Bw;jCb%_#n_-6T4N-Z z;|Lz$7aXgZ&!~f*n2s&Dh&M>HhPjI}_z%PJZwT)k;% zFxR$mzHDcX?jW~g#E#j=*@izmBuyUdk)%zOG+CU!N*XxBb`%4Apj%yu0^fvm`8=XW!^ zmKV0`VsX1ZlxE-Zb_G_lYhY!&993zvnq7W1?ED{`KI++J{?D!)t?XLc+O9P1?5ftm zuFjZ<9G&cZ?%A#{5{aFp@;|zR}9N!jsCXk5e_lpAVS zYsAE|KXwcwPNW!aS15*JG1lS~!bcJxcHk(uif7K? z?ppFewn)3G;1HrwX+853ckvC6Hc$`5Y$RTc-NZSB44bJJ^3hfu)c8tH*n^um|BW0F z2lIEk`tG0(_{C$#5As0?R6=|7#B>zd&DbJv4|5-R_A=kG5c`mXpncREqY)45equpu z%*P)5h3f$4)(>j*lROWSCt{EcU)JTqKwLh=ept!lV<>cla~@fa5+6n$V_xCzacY8E zCm45J#2e%~N&Xm&pkEw&ihS`BDNZvVF%waUfg_5#p(DoQ5TX%-WHdWNTX+Yrv&4w` zaGhiRV)1!m#?%YMi+ETsQUkQcCY*=$5_2ERaRk{eQv+PZ2lTu`&5_|M$KnwZkmDNX z3mU+2omi3U203Cr_P~0R{m>tCQR)`w6(SLZ(A$hJ7UKZ??l6{^jxES_m-cWBkC5&j z=RPK51L9zgraeR<^givO658X~Z;pdCfjICNu0PCwJVBAa%p>%E%(eI_wSC4l>^avm zxMHXoD!gJIVKk;<6P}<%EHS=jeDMbH==`1QIp+VQwkX0lAHyTWA`VmOZxiB^i0dEo z2KAB|TQrlOx~AYeq*MB7De|TA(`D33?Wd$Pe#+(a({*HW`El=LKYq6M)Aauf@>7iv zKbgb)d#802lb}X@u_tVMbF#ccTr#K{_{X{>7 zPw~@VzVmtt--G=JWfT4Q{DYs4qI8mty21H1m1gdpL~PA zo+1$!EdDBN_18u?ZT^~sS4ipWua>xmSA4JF#{hrjcKWNT+h6H}{ngFmue~AuIv(b) zjOqM!C4;|~WcAm>?Ed#zoNgURie$x z{wj)xXxhkM5l#KIss(*^^;h}c{#u99!~At}xW5i^Pyfv0{54>LzuHV9)+zoPf)}_y z(_f2bvz$-AOZ>HLnZFjS@t6O0f2H2(uh;whRre4zIpVLhN2v+!VbLjn8P5<4->tYKSrS$N^uX{bjjN9}oPs zA0r-Xf|e|^WakK~8FIF1Xrg+8BX6A_>N<&Gn-@5K0r z^@-FancAYM9I~fy$e6~V(`g+VV`6D_=%KGehXWky<6@iJp($YwMT9%FCZj_`GP5na zLvwOE^fkXjRSU7cFzbraRtc6BSXM?2hc01CJ%`HHckq4a4%Kbw(EBFz)0B3a(@$I4 z=s;Ut9m?9xp%>lRXDG*w;PFU@?u>J&{zQi=PIKrSN=|nuV1`56=dgY*@uB2GhtjTb zsMT7BMxggzhc=yd=pEMHcBsxhhj!sSVv#D^q458E>rl^k4jn+D_YTcOBzE8sq7j2+ z7(O`Uhdd~TEMFXoig)PdH`e`d@Ld`XJ}=_X*#w9F`|Hq&M2D{abI9Qppa#YOIZOeH zM0ZPo3it*n$uB@H`~!3s)jR+*Z@ua9iX-e zEb-`1fOh;1&{d>J3{WWQp*JECg>UGY6rgB?{tHkE^hW;e+`EKj46-B#@ORt*t;H$i z;aeqYVGAz8lO|C4P%3SpHsCD6y?Bm^h{OZ@!cgx(Ek+EIvBf|e=x+?vTnsg_9ix2$ zwGwZT%N(dZNM~Um#39N`8*tbH)dGhQjZoh}l|XOIL^i)b?y(lASpPt!as+aZ1mc4s zfMZ||4CH8=Ywbu22Y?ep;}0wI^!-rpjl|32IC#P z!UDMuJ^A1X{-SGmpe7>$ff0dPibE)oj$^SFr*Ii}@eJ?q4MiV?$t!)Jd{G9=u?Oig z@Ei~D3-vM*FAgCZrc8m#f)*Hx9k>cdW^zVHjK?8FBVU$4)j=~1Msg*_xiU+5sszfF zEl`E<5-G9=Y8x&iQ;tCXjuNQVH~~{G`bGcTj2&`RCAU1(Jzt<&;}{-cLw?#WK-&eW zWg+GbUSd)j?uSx1P(LuZ2su><)F+rKk_Q$e2FdUc<1M~RrU8BYht9}SEl`!vwg$&z z8!jVLP2$9KY(X5V)gmTDB1LV+1``npM;&T{ju?-b*oGJ+qf9sY#KP`@yay&wjT(?M zsx;&n6l)ZyCaBPuu|$O??1v<5YRa5K-)4cDjk9=(RLwb$PzL{DB$neQ;$Uq-Jy8Q) zF%_GTqb0eZD<)$T&f^Wz{Ks5IBdo+RJi%Y&YDHVAt;%0wpJ%~9v zn7J^7*oOtGC#GWyP7UYWA3)JrYuOr6w%&`recj$@fc(9S@o7fMdHxuht=EHV! zM*I%e@8VqBO%3-3D$hP@wVxQV_yBc0$aW+n&mra@nqVO2V-Id34(7vLD^UdWU!7>m_7fhYJ2*D=N#4bT^}u>)7}0fys@H7cMj zMq?$8;SmxLc!IG;J@m#*Y{O-|gV)JGWk5N!#z-v35j?;zI8IS()Im>7#}-_~8>BhS zH5Fy>ABJNo4j~#p;1@+*Q48HM6`OD#u}F1>^8%&N0zaM!F-YNM-_C$ zc&x=KJVO%lTq0LILIO5jXTKYa>m71WcbTCVoM@9CXpk4{G*mBojRM^sqSf=+{?+S zi6*D|nw^TWIJu{illP)K`Fw{i!W+S+Q<3eR+SS>q6kVP2>O=nhoJ#KR)XPD{HN>f0!)Rl;Q?VnR z`a6og$B@@p){l3p!UXCz(W&WEor;_0RF0Xfo6EX+PVT=={|lWex5TNTE1YV!iuG%q z@rS1y;nc^QP8Gc4E1o%( z_}r;gubgtecB=3jr)s`+>hwE~`{2}sk4|m>iZw3`XxHGF^M*kohmJtuB31&e_EHSdbw28;8KXmr2!U~URYgf>Ts!7fJ;WFOJOb- zpEGmmRgg=ILR{J&>e87omp+EOlro)5J<_{0E(6D9bg6D;m)2x)>0VZsT4m?>oG#gO zyVNbOOScNSX%Fa#fc`RdZ=pO_z?=a;bbhVyVym zjo7cLOQl=5)TyOQ2md3cRvh2jrRr^5%G}na)a_h)j-%~~vjcHy7oaoD0Tf3?)J9WW!domjOS|V8SDb;*1>!+|yuCtR z*Qm{P+QJ{azCoRCk?U>hbBFzK1@AH7E`1~59&KVfIz%%*n1HgfKe~l2en@^=C2srSjGbfk@+=wp%1dYr3NVajxoli z56sh#)DG=11miFRML$u8&%_kRerWoIHjzHwrN_AQmAUbabLBf@_=D&8_=^~SGbiCp zU{2u%HvS=&M3-_W@fczMXbZhkxaFPFtx<5MVu{^2idJdi?bdJfGPpI!=+**!h0Wwv zV+_Cx6!l@f*{vxSx5`@GI&5=miLYDx?QRA5!QZVOIEN4i$GP14jB{?co(8#fFW46Adtoa?d{z9-hr4p5fdz(*&h*I$qC*)+`0hoo@~b$?8UNPZe2s& z-foRU<37ZPC4Jqxg2MgWIz8B}=g2>d{V;0;HATgdj5$u?E82{5YaY&xq2ICOgh^PB zKjWzTc(;5e5GU*t-D-+KIEkkyI*IK}CLK7JzWA-5{yAnqaLFmnm_@ZuEpInBI@a_bhp;N%%{gZ(V?3lGoJCQ@D?9t^lh z-&p^J`dp?yR~TC?LB^}h88pQpEWlpe!WUSsF~+EhPMCmoIF0A{hv4hf6^$_f^ROE? z@EJZg$O)Cv0pqX+C-D@CaNlGepdtEU4tC-iKEim5dZQxRVGLH`I3D8Y^8BU@I=+Ez;iOTt->6!U!zGVcf@0_(!{y z7q!s?)36yA@EWP_GtW>OEinvBa1i(K9rg#zP1Hm;OuHwnOi81rWk|;*o#~E0?QM|A63x_6R-}a@f`mU{FL!WV+_DN z?8XgzhR-v`AC=Jow3hU4gA=guJggT)=B>_{CN{)K|n3p20?`*9La zQM7Q78pBzHTu>S<(Fqgq6aGbs7i;hy-o=7c8$B=x3$O~uk+wKvfo_0tvgJD<#)e2Gw>Y^8xR1VTX_*V(y_h{-~m3XQ# zpR4m2_8Ocg=!JtARFfsr*QI7HnCq<=hxWwKf!Hvk2j@>;=H(=gnI5Fab2%p#a6YXI zl5q!d?PFdXpgu=9KaNt96Kp>jq~=%I7Z+{^sq!7#d&pQmW53tz_l9|pOulJ?<+cWE z3Bnw~YUK{rM%coF^)Vt?0U3gIDPypDWDeGV+`&4TKUn^SgSERzuQj>E zm{2NMO-l!>W|?4>EgP&UxCM8)V6Dez6fDm%_>4XkXtyHARti=`SUyXFb!8dPR|f0&s$jicO}vrpyDeDHw^NIq!OFgmI1f?h!}N2Ce52TY zIanEQ(f;FL{YL3m?2n&l7)#AC=|`|eB?fC*3Xh7X^lsKA&KewtfSMr+!$AzH6QYkzLR7tJh|ZvRvk-kp#!excfTw8KnPdBg$ks1J znfr%m$jA^Ko*JTuvqBU!Kef)yp^dpAGR_N82aH3frSyrgW%PkBco-R?*PCc}bBI=K zVV?sbN<2)TM?+NmY=~}Lpg)Cj-^NfCHHPXTwmU*KAt+QmJfWPQq52#Vs+#FSbs1G2I%Td2w-bAeEODHy8Ug+n!^NT`AQK4Yg=)-(P(9uis&#uq z)#YfY@}3CQ9K1)_lc8FI%GZbyx*n>7xc`87p3vs=P<~bnRm0z*x`!DFdl%8#w!eqNLX%N~}57U^MVfuqU4a20yVXFLJm}++By)b=wKh1zJeI3N(!C`uV9>c=) zbOg^wg{k?NFkKlJrgh80)M^F$tqN1aHT1tOOu-w%^c`)s(D%tOl{^!sjpxE-xj-M6 z!gS|Wm~!3=Q{Ct=8a^#s!rz4r_1;Z;|!|^9^N@6V=fV zlW-WzupTe)6Cp1dBUD6Q48k<5!Y%B@YkWcWS7BV^!&DWW&u?Xx@g2dj zVako7D36+$f)(h7-8hO@xPg?f!;}>zQ5kj73;S^iYj6iok(T#=xse_XF$X&_0%vdy z_wfS8w_(bR;%JB3Sb#w|j$3$*FZhGh?-)loQ6HT!3==R52XPPY@edi_lOxKbCZ=Eo zcH4a7GVvx;tt;8D{LPbN3_BS%)w3^#tY~Z=Nij)+?y;jkMp7; z24Ml(VKZ*wI8uKmClo|!bV7X$!*-m;6?n%nb|{bUJkQOtCI(;%=3xakVmFTB9B$w@ zULoZd&OziyW%NRG%)la?#8$k;SJ>hiPozh66h=d|LKpPI2u#8p?8IT*#|!8y=O`+o zDe|HnrePH}V=s>5F<#>foZqMmB2XWdxvyJkma{MnOK=d+aRuJrsR>Iv%c3ZcnrMS= zn1XpYiqCk6ls}l)D2WajhhA8NOL&U6_zD~MPb-Y{Xoyzmf;kw0!?=bsxQ`e32;(nu zMr{m2J1oE|9LEK`#uxlS#Bb&SN~1m|U>25O9k$~j?%_G!!=Au=XIYeGMwCZQG)5bA z!zir4M(oB>oWl)##%~1tp%%!B%BYLx7>7mJkCV8BJ9vt>_=-fh|56|1L}8Rgb+p0= zOu`&2!+Pw*VVuDW_$PAhLuOP&Z45#?EWj%4#c^D~Ej-3+e8C^2PNH_GkL>7!Sy+ed zIEZ_Aj`#SEfAIdt`GjE9L}Ro;H%!4itiVy6!woz{%4F(=lBkTjXpRn8gf-ZT{dkH* z@GW3UkFuzahUkKRn1uD%iEH?XpHK?!n+|{EMQt=i4~)SyEWj#k#$Fu9W28=hSyV?uEJHt>!A@MmeJCy8I{+h!qatdf9eQ8^ zHscolz~U7yCnAs?1yLU@(FaQ~0qbxY?{N?R;O$L4kP+q47;P{LQ!o!Ja1`fo0}t^V zVf+ow2PIJ%BZ(%cXk4qFrSyV?C^uq{D!W=BadhEnuT*G}BP0S;f zAuMa7I0m5|7GM=NV=o@#3;rOr4|ReQ5h#tS=!8BPh9x+Sdw32z-=+SYqY}5srQ5+Rf8%@y;)36H1aRImR7_adKe~{XjxdSH(qBN>v0+yf?w&Ng9;|lKK zIo{(ta@(0tup<~nQ64qX4FfO=Q!o!Juo36*3ZL;CDfxex4+4=y}`IRIsEv==cg(OK!OG~?#B>8Gdx}W{=e7vsD`J8i|>v~_;In(#PA6o*M zWRp)h8`;GHf{VO==*kFU7|Rrwd`acVV8K;=u9Nh#4(X< z(#WTTa&~cm!yM%lf&X2-5nYLA3c1Xqlr>bamnx1hWSAOVszyZ7p9!Qen><#so~@Ko zO&t-f?H#(%lRhMpN)E+r;vkLv-v-)Huia6`GKgemvX<>Er{oPT*fehDNHAqLe{XEDvooSkT&)QQH*8+Da7@s4%^s6JvB6FdqvQOjtnB5WU`8Kc5#$b1ntb3=5!^V zDNJV`S>&>Y&6H9_$W`Vpo5)V|Ad1lpA%&%^XC+%Hqmnuz+M7E)>BB(gQcMn;*v1ZO zI7U4!u2uuOF^F+2VJ2(Y!ghADk3-ZFc8$G2E7}pqG!jT7pAyPB%qfBnYD05kh-V7Z zDI|*uHnW#1j&qujj%q_o+R};sWRS-MQrJov)tn{bS~X!fsVpLg0*cwhHg>RwV>Irh zF0`Q|u_Tku5|&fMb`H_>I(vgN+Ho?HXoiwNHfiKjLODk{z-67)gc!Oqg%RX3kIj@) z#SxCv_Imq+CPdMn6h^a@JXTUh9s7ys;^zwO=|WGEm`e@?6tjsvG`K+x=twt45=%PE zDPkvE*vA=~cC{afrZW>sV#+3FJlB#m`4m*RB@bADmYEcZstoT`jbHl zODSVN>#3%Wlboe}cXK9@R0cAa0*X1vF?LW-gC6EhEQ6TI5{lT)PEOGDCi9l9WHdub zU?SP9VizSG;4nd?e`^rK2*xsnHO!-wT&g%i$j#E!)eU z3@4FAq*6=`^)$G}UMH4rj3b#PET@RIY+)aV2mumK$1u$hfVBZ2lcdwGFJxCn`D-g z&K6D(cDp&znFOMlMm8HMp`2ZuqItBvOAK9^!U%GiM=3`*&R$yHVJ&G(e|j*4*-RjV zt?Z|cvsBZ*kDqOHA(2$(QcMopsHbsXYe*YBIzvkiu*-SV|sctf!Lwoa8L+2dV>I=t&<2l1dJ9DWI4d8r-c8 zw4o#27(_ZnEN44AIm01p35&P>B#_BOR*_8!%|wPWjWjaJri5JtL+t_LnL;6J*i0!^9N{=khM6z@S;~6K*iSWe zoTS-s^CXc}7Lh{%#T=xDW7N~&K6{;x#4?DHq?1e$YuQIFCulXoTxmx%6G>wg*=(eQ zat;vOZ@+U5UFpRLvRFeYxm2*1{Tae&GDu-PdFdJxS}rjbu3t2n@6j?yT>UMGfY z=t?}(8OuD@P{C&QQpFM4j`41%3H_PCY%*BNR#s9*vqXEIv)Th?Pm)MwE{n*afNdP4 zh87R1hio9b(VJujF_I;$WeeNc$vzHof-|%l>s`o1;>ctg+2pf|a&~c)Mh~e6mvIeU ziDv}4Orel9R8YlfLdMw_L@}D#WU!L;Y~?J?#(OqoYuTPYETV=z9HYeqbEYG)jAR_? zEMW`#sO1c;9yT{R6Uj6Z$ful*?BW2yMDt<NBx_Ae+R};9 zq|l$)tY;~CY^97!>Nv^3B>SIcw5B~hNn$RWC}11M*h7QK-hs3rmX35InUTySoh2-1 zJ8Rj=J`PdK3EE9jBO-|=fr(6GBfBW!0H+8Zu@AV0uJj^?Da>OmYbd3H<5bZk*|R}g zq8P$#GFZuaDk)<>)tn{bQFWm`!|6#XiOgjYIn+?kCK{()5wxKjy&1f2-hlA8}j0TU}FZ5;{Gf8I&%PC?lJ2^qq z>GlYni6ojhCNhmxl#oq1yEwopu9=}O#501iWHFswHdD%RLT0LwY$99Imi|m&2pMdp zl4@GdvNvc?A5vLFA~_UL%qD86r^Rf0f^j61&JxzLk2AD-!hVopGMb?zkj5&?Ily5W zrJ1L^M#eCmEDBje1xIK($66D`XlApLGWOGKuCdXA4Da=Mc3tU1*;YO#+$Z zQ_eW^MJ{V7rGmXw(eg!mnJD@*gwaeOgEI11PbCor_B1^iNFqt3GM55&aF7~~ zQBQ-H)Par+VjRiLB%LKJr-&^a;sj@CTIl&En$E;Ajciu2krK+;#Q_e}=w-E#F>);P zSVIN5R1s3-Igm|cC)(13C?+tQm29PqO7>Gt`&T^YGD7wwiGd7f6LZ-?4h7WEW~KF~ zF|o{KB;!b@h<%(O>{WG;?PO<$5=|Nt$t0Tttl}uaDr-+KVu)u1W65GVo2lS5EmwOM zWQc4_C!!cl9_z`Vnr6l3FI&r#@+Qd{Wh_|~Qc4ATsp1I7X}Q+i=|L3z znLrA&Sx+U^oTc?T?*Q78tNDU3v+XM6_mO-Rb#1@uth@I4Of_59c z1DHk}*=!_@d`c*17r{pFKaOgTmA!}|o+;!qj|!^TOvoE*Ae+c2hA@E?@>tJ)%BZG} z)|=EpM#!G@A(i1QB8LKYaF7~~QBSuw&7G07VF}61q=>cbWFLoUx>*f4qn#ili6)MT zWRgue2iV9dg177qx^fx4h+#S-C}a(rDdh;K>9ocECxr}F(x0VNQpbLpy{!gvxNOf{ zdXmE)iaADut!f|}%iauP9LrftI$PMsA;RAAz9W)o;>cto(^$n(f)ab3UD}t)Yv@WZ z#xjpw3R%NmPSfOFbCprDEu9$61oEinB+a&&7nRyQWgk)*<EZKn?XYe$V@zerch> zFL~9m@yy~6 zK4aa}p~2<+!IcYE8A?;iEj>X)N8ybZ3 zGLQ2#*FPT`d?LSPnD!6LLxXpiwZa&Y&$!}k z>%)ax)mq*oZ{Znc@ELD&?mO08ekpI{>Js&k7swgh&7^m&f&5V}ap zIj%ilekVWSZ!YlpZGLyo3>Nb;lXvTj>$!4|cZGaI4&VW9``oi5f8l%W@m#)FO?Z@k z|F*wyU-=4e^S;kF@Yp_el7qkW+-QFmlD|fp)*|)a(b(YK?lxC*>r5;x*3y(fE!ykFQw4w?C=BTvi(zgmMYp|4*Ot z@jCa=zVE0#q5URTAJebTpUAs;kV(IKhssd-Bg@!u+-prdk#if^q`P(waEpOl%X7Cm3 z_<-kIo1^?)zQree`Cr%4;j*ycXE{ptjo^B`|=TN~q$FU#@#AMbPH6=6X` z{^ouj;hZbOf~(qw1^3Epd4(squ$}S9`{a#$!s9%6mHuRCdo|NuEwAIetHXlba;ogk zMc0G{FUarYt@Ps_Zs-segfpM}_?y>x`Z7#2Kwoolo&>>L)X(0+w=yzKKWTz|c> z$mirR9_SJlyeB){5Ed-d9@f=;wD0F39$^OaSnjiSiv0;&6!LM9&Ygll8FKa7r&3n#=Qtd4{xKlsEAWA94F| zYr<+CW;cJ1@RtlwBD@d33mV69;==Y*+1iq zOU{zF@(MSMw%uh~Y77JL$E3D%?-@nR@ zN!~m19yx=T`GnuNWU_t3O+3bn?B)+HpJLzf2+#9AKXLve&gTIZvVpJohpUsluXvo7 z_?Tb0_)+gJ#`6qsb3=+T%KPMGp5qH%<1g--YTmrWWBkU)ESqNBocEZukyB-Ne&Ge) zPE~8}oUVU4d4@f&J&OfA!wO#EirMb#` z?a$<3Ue9ozT#@P6LUr@`ZFx6;YfqLxbK6tiYtH$CANYmwj(y8BbYG;_aHL#A%EO%Y}zlCncD}RlXB08_M1DbjdtkA_Ko&k@=88u z5;s-Yzw!b35eu31iS?7O$p7wC2l>40%YA(Psdt{d^fN!pD&0%o!7wIq{x1E?r{qnX zv)dfx|Kzp&v`4>u{ke1bYoC7hI(ER=zSOtu%b2g7E8mn)@i|vi>Em1H^A&gUzkeO_ z@4)Y@WwrhBz4sh1uz<@C+kf&Ic`J|qpl0$5`5eFTMveEtk7~=cNA%BU+{s`@F`mUg z*(dUE`8s`T)q(eUkjdQffA*VvPEO)4-eXLi`El+q<|E(w)z2X9NynY9eZ_C~r1n&K zCqM8kkDhQ1AF_g5e>VpC53guH#FHnjlYHQR)7c%QYW2SHO@Zc5sHXAMq z_uqtSbFsN--*k!EXkT)v>$RuyNNeBw{Plms{kK|paNA}2;Z??S?&abBZl^iQ8@ako zxW6-DEb?wbudt?E$7-%Y@FVe1H|#8KeAJe!#7r zUC%Q-#DA|>H~GBm%T-;%gZJf|@-A+_Aw2j-?v@X8XIEpA%jBb+ccbyjg|a)puz?G@ z+jHH*gUh+LhrQtQe{WI;?einuOZyFZ6Sv*0X7W`zo^yMulYCU($kn%)hg>Z0=0U=H z*(Y+cyq@!K4fngiJr{BS*Y-9R`Gg$I<+tfy{w@3QbdUxc^XzgxSHxNey7LAL8Gonw%4cN5{`RiC za)9SY`_?$)*M3OOAp9Q2P&gJL`t{o-cXnUh|eu4E5Y<@0PF9eVFs*3vv|q3=a=Jl$YM;{@ROK zFd{s-!{=Y`*QfRqBfXzEca%Ql3V9#x% z_Pt#3pmE5rx52=~8a|b3*w(fGk6lb+J z!B6rDc^kj-BG0C%7ne`9ZgQRM$JNuUjl5ef=0U#WEy5o&My}_)RAb``eqjTHA2$a6 z$1I+o?m6V<8O9^Okz;surgt)r%<}BX=jC~`)m^?IyYnHpqtD{7ck(h&}=o3yXAF^T4o>17vuuI=0pCI zBU!;c&)K8$J2`{@=2~y=r!Om*&sTiFMbF#waA+{q;we_}3Xi>PugXw)KGzm`HstqmF#TR}PuB4W<6m`8`Q$3^Q|;H}=iI*9e&$^s z=Fwv7CqI-cxac*tmEXx*xnYgkGN1bx^SYYI+twPN_GfZD|Ks&_#=sZ+#O3R~n>N_< z+`Q3Vl=E54^E~a?7=Ge4-s6rp%#oKE!(;r#dwkBYO=`z$%pvqm`$vAmW7=18?Pj%+ z-^;ApE$?sjJukjvEb{IW&yMzdIhpI;wFYvG9Khw<)K%Up z|6&xEyr*v5Ov6&+p#y*N_WQo)XTIdM?e-Jj@-dHp;F*(`l$p2oGI=}i^3jLt#>M5H zVfldU&O;x0r^&_g(H-i*`CLv1ZsbE&@bbs*E$38tCbd_~U-^iucY2?F;<=F*?=q%O zeaAmEtn_n?Yw6By+|7MVVipT{hL?Da5BY*``JHn<(?6GUJvY;jVT@s_dv@n*USI>) z?)FTu?n~<@A7nC*^CVC6953-2Z}J`=^Euz}Bfs+A=f?Aucd)*`UtR-#fLKOWep}JbXT=RW+a8@SE7?#lZ2Xi_c9<-wyy-6UMnG~{-5^|l}kywV4 zND_zG%o+CAs2OeONH?bc=)Q8NETo#~BjLe8n$?B--DKv(D$3Z$aT?U>i%#?=ma(Lg z%}Um@lPcwkR|b+m3h5NGh8-N@G!gna{HwlXF(vG$mJr8V(3M^cCz&kr z=zTmq2q-*JBa;Ttys!9>exuvv*yb@VmU-1k^k5uGDi;O3~Lw? zLbFVkQ~QB7zFJmt)k^+_6r?GL+0q%|ULYgmS8>BkV$T zp(nA7C50vAvy~kj<~WU;t1Ug~LjqHnP7ViJ=vx-Cg|kFlWc+j{l4#8D^rR07OkokrIYqOJ^+^ngB$Guk+u21O4O*Hborq;9DWp@#CU#NHF&bT>)^sL{ zkxXGO`K)I90AJH%0_auCRyc#c-0zpooo> zu%8-&w$7&=Q4A!3*(@TTt?ZzhGc>v~!ry)N>=Dgql9)#UYpGx_$7s~f`9v~=am*u! zjg)ebT0*X}7wAkchO>|3oTXKJHK7kfNnsI%Y-1<;IK*ipt~NKiGLVVPqky$ku%8nI z*H|+;63Gw}Nh6Cqwopzr$7s|cB4|lBq8UvRndGvG?d;_kXK2~cdDp9n>_Sh5lE6f! zv6N!U*-I7mgk2jEG^Gzqpu29dxN z7O|YolyQjDH0x}in8$KfQN|vQa+(%h)Sf5?GLZ}lsIyOtx*1P*Yf8i&?ju*RnH?PF zIH!r|p)a~JkdaIzgB*$|rIN#(rSVPn3O$HoBomp~U&eE!<`_twY{nDRtB$LHTHnEKz9OfveXx7VfKs-sLlFb@+ zu#e-MrPZzGN*@L>h1o1;6=m$qwNiC;ncAGiSi~fvb8cQi) zEfv%d7Ug|U7vdN}ZMC}s3R=a7^o-gPIIOUaf~39 zbPCzVK8|yiR{gCPeHg?PX0x1Cl(C1SoTkM9>qQg;naFf=|GX zX=IVd7WPudNzT%0h;tdlG?ucBogCmKP4D&oV;~cmP7XzsQc3pFKl+x)8@u5}3_$HdD$$P7#byTiO#% zJV~T7mwZ-HMkTeJpvnDyhR}_8MvzK2`D~?(L(~#7(lvCX8}THON;dgyrHn(=5;Dp) zbfg>cj3AY{WV4=a9H8IEe%Wh`^aXBA}};xsKD_N>y27!pY%la*|zih7z)bYFTh zloXb*hOO-5I2$K>HYe$uHuNHfct(&)Hl-Y-mJ>8dvgSk+#{^QzrjYgQ@RRC50udVF!mfORLAc0~o|erjx@)DybzTRbA=DaHg@8wNy|; z@VIAyNQRJ17R8iP%^6xwx1Wh8iBz)5XDekK;xsL0*t3kA<=?R^rGR2Kv5PvwW~&Fi ziDfJ+ImjuRJ)x$=lSC$^)KO3KG}qIcI3|!vHic|sCr3C*(>ZEOPhuHM3QNdmD?2#M zaT?E6XL`_w1g5ZvhGUrjTvy zcVW?U zo(ry_E78Q!E7w}ct(4L2CHHb{BGZ^hHuDCip`X>iz<$CijWm*$z^n+7cmTBEK`_G z7P%C&l`{5FO&#?_a{sHTp3B3{rB?dV2thA@^X%w;Kg z6tk5wCRm$6v|MGM$RajU$w6ue3Oz@(Cz{dBB$JhFVK23WyzD%pDP$W5I7!nYwPHBa z$Rd|b?4pjaSL`JQGLq?JP{c+mImjtOR+=+y=*mDwlEM=5>0w^wtf!>d{*p(DSglrc zrawbSCZDbB<2cP+)0*}~6HgK|Y5bc092 zE$?PoL@AY|IW~clC9aWM*}-9sbDEGX>P~0+Gn{G6qky$ku%8nIZ`(t(Cz=tYl1?G( z*~t;k(s-+y(St#ZWiCaOu%CLu-tms23-Rx&9}TwI^Kv>l6p`*&8#)rh5aLViUAdhq zj?w5nH6@b%jAbs1SVbuZsbz}mpL^dvmdkjN)qKd8{Kj8g?40WvzQC)*=}&*eA# zK|`Of;(7+~AahvEPlSFD5lrHCmhr-e5y3gUtG%1A`GJ2puPh?yz>VC^c;@pg>v)$d zT>A?ja$9*sa1rP3(C2{ z5!}En4C5i5!8akopYUcHQl-A-)s1Dzgo)O ze9iwj$Fa-lKwm~NgN3}p8(jQVMDU(*-+9P2U#l;d9&`8peLmwS{!`^1+(ci7F_kBIk=OZ%?|A;Oni<KH?>cVyOV+^x+o>%#R-Tcg-T=>0nx%MaXFrH8Nk>5H0 zhlt?6+)O_n%u;yw4~6$glj#Mb5pBn;6U(p5SSIu=u8JjS!E z;}d@5KPS|lo4J=qSlo{C9nF8~5`#%hXC%{EL_S;DNfmX3{q5f?w52!k zB#}xsYuLd)TL0tUO~z70yK@=_J$+7rnSV+U5O16`=L=(pZQdq(&nuj`V`#8c$nl@?}w51Dij3$Xp^4LNJ2dO3G+=l*kr*YGV zp^RlN+2pg8om5dzqs9$`)^sL{L5yVzi^yjyJ2}E}8lPtkh+-fso2i|-mr}uAjuD*S zFla(YdNGiR%w`GsY-J}^)YGVG!=Mel7)SysETNEX?4p`8G`T?k^kO)Pq>;-ewlnXd zhC!JzR&t2bG`>)s=*dtfkWMbel(3&#PSc{f^XbD-QkczhHd4t!I$ms??ze^=9N;8j zEvzNoh#`?AGAU#mJ85)D!yr~4gBZ(PvRTh|syIeH&097M+7nG26PQarYgp3CnDy6{ zc#=pXhmDkRh+0CN+nPvXsA^*m%PnmG_cO<+r}?GsOE=<4B$+G<*vuXdbDYMl8wQur ziC9LEL?(G`;{bJp{MY)^l{h9alT22!g$imoMYGH7MY=MO1g5Zvd{$A$J`Qo3#+O@9 zy3&UPCXzt`B~;M*D(9<1$QAY(9qGkzCNi7ltYItrI6{NAYD5>J8BH?t$YDJ@sp1F? zu5>qi&j7|l$w zSVbB8I6{M~olj@_Gm>%4BZrNYu%BZzGM1LC?Wo?emXHqWO*^6(L=u_gv4sk1I7TDa zwxu_5wCki^avybsUF#lnB!=NkBaJ*Zv5P8BUS|zlAIDHqNT-lZl(U}`ggCbi9f@Hy zGs&dndV8(2JwYV>8OL-MkPxBk~Ni=axU@rNrVQZv!hdz4{ zMSsRIokgr-EBiP?gYNpI3(>?efth4cObL59%2}HCa6ZutA(1qelE)S*sNobLH<=$@ z=|ch&$)JD|DyX{Ini_vK$7tkpYa)qeG^u1$NZc)+a~aZ84e3fB1~G-X?dLv&O|a;P7$T-;V5TmrN4GWF`Q}4V}EaZp0@NRma)uc zIjd-WyZtWD(&{#Qi=GT+0_o(kiE^qrL6azTr577()RYspJr+3GrPUA{jy= zP5K#^+`&GM(;&uvqYKfDW&-Ktvy~lmja4_-_n;36q_BkLY^IW0PLXw|_qA(AkV+=m ztYPR~CX)V)V>&q$P{Ll0 zafbAJJVVA%$stbDINrO4o(yFIDJ-FoZS3GMr)i;&c4Q4!N4b^?4pKuf$hhcC6eF3! zBJ$Zv8HYGUGySw7cBs0@&Ftg|^)w%%)^s6`(Ik;c9>tWipBjRD^+{)<7|A&1k;fLw z89mH#_e>^>0!k>SntGZ$r!772^Q_AZirCB^4s)Ew!~GkJYv{vJQkczhHd4t!sz%vc z`b%UwIjmwUyQt#~O-6Wk(To0!V>&skqKthUp~3yeN_(Oi!f0laMIKwI;2=kd80ndy z8}TGEjiuzVg6toj?-YAJwq4b7|k@6QbZ|x zIK*ihk5^B66HgLpB zLbkGx!}OnQ4EjtZo0Y6*CsiEd3@wxFV|p==iA-ZD#gwy`%16{opDARrk}XtH%V}Cn z@r==jp`?&bE}JN)nmWStcNsm2W$mMm%aep9t0motCy_LklE)S*sNoomT-%o3#E~`C zJmo%)&>+R$qzloECYhP!QcO9!sH1`FFQXGh)4ccOX7+HHvqU)Fj$RCB9EGX&quj{> zP7?N*d((wzMw3hy1#F~}{hXkYKHAfbmNV=#SwRh_X!f}K62&0KGM8*tvV{r`a+HYa zuAwtAB$E8^=b3)q>OYE+Okoi@Y@~u3PLMWBU7bIa6w)bV6T3LTNg6xv8hVhM=I4oA zMH%}z!f_hUR$n?1%LtOlB#&as+0RiTp71WD2eFJLm2C3a${vn#nvA*D%l%6^z)8a9 z*duf!o;shh4!b6Sl}Fb5X)Fn$z~;6 z*h>vThCM<%x-yUiW|Kh?CG4k$v`oj{XDMqbxS_YuLddP7~p}mP_nsIh{qUVk^6-;|#5`)P`6R zNnEv=&79YcDEc#wH1a5B$Fs(? z)H%eE$TXHx#Afzzn6pGUza708&NxnGTLXEF2<>+CU=Smj&QjJ=!o(c!re&T*x)8@` zlF6cg63VHjp60G;%l_x=Pnk_2+t@`F^)&K*d%6(ESmv^XyyrcW@+_@#y$6V81gT`Q zk}d3|ih7#5t`j}kvD})v5aL3izuR$N;!=t}o|#W{4MHzP_ZGFi!bc5;}rG*S+`T zY?iZz9UR~!VZLumCt^upHj8Mq&U(rJr|ACUvl{z2fZs``{b;f$A<3_#CP}4VGBuf6 znIy?%&D6?dDw)hoCX-Z>OeT}5NivyCCMzq+%*teDl1h@P$<$=B=iMLg*XP{lKIeO` z>pItU?lX^<=d`!=mwpUq5)be!Z?KWCnEa0CvU9HDCMIw{&+rN#@+m)Zj58g70nZic z>&fJGK4Ck*bBr^6-;Eo%mBa7qtNf79*vns>VgE&3%Z=Q_qrAjQu6oaytTonL&jhBk zfR}imFZq>Y+*o8jJLe7_;%VOC9ll^M{}JlAN8dLt@&TUZRo>-GzU5DX9djwY`Es2( zDBoZsUvrp%{pWEhL%4&7c#>|#)|~u{Gd|E)u4Dvv@d!`y8Xxivd-?Z6eR1wB+|T1I z;4MDpJAUId$DK`YuH_D?`-hgRcjIt^8zb*pY81BKTdbtC0xVpOycoU z<1WADPfq>B+~NwZ<4*498D8N-KIKP_ai;Sx;P6KGSH8(-?By@cu>T^i6rb=} zmFqM78-0+E%FlNCo#B*k-LGn6$mH*|Np6%+abAtS$lK*ryvsw}`Mq|_&GIR_)mkI+ zPWd^H|KOd5n|E2SKiVg^%PSbd^xeLfd*yQk|75K9Y75UZnU6SgpZUZoKYI>w{eEjg zJ}yIlF?acx7Y=yl{%Y*_fIojXj}E#ohxCh2c!ARnd*6~b$xC>V`}mRf8BlM`;dR%hCG5_hOoG$MT1P3lUB{*>QslkEoTLuRv$g6per@5e& z&!+_k{+9R3Q-Xp6=bs)NcthSHp9~2Oywf_^zjF{A_>8^$&gsFKoxP#KfsOJDe&H0K&*c)XU^ut)AkXn8ulz4K5C{tn1am1@GJ<<}oCUna zhkVM9{KHvof&*7^6Zi5Iuk#7tbBr^?U6+@#5<}m+qc00!~gqyjK zM|hDp*vMD>#^3z!Ecc&l8Np;8;(1=;$#DhG?t9-=g{LG)UF&5|1jmJ8gPx2Q| zIZs=;jO&@i13bcuyvb(1zn?EC6PkzjI{Knt>&;Cmp!U!hwIIr*)uXQ)~FV_z);W}>N zejev#KHzhH<}ks|xrl2S!3S5kkMeVV<``$%cOLz?nfrKz?|TFXzL7ujJE!}6E?09M zck&?5@hT&F>W4h#N@K^B+`|1l&MU0sQ@-aIr#k17Ugm{-kjHqLxA}mt`I*2~+Q}7M z$DK^#30~#{HuG2?}S9F zD|weM`H?>ey;`3czzA+*I#2RE@34^{ILzPtudn+}KZY}jhk1dOe9D*nO2DlrIS1_F0`TZK>CV%2z z+W33{*Kh-O^9V2U2BFuQcZ2kg^BKShCNrG{tmIR+6Sz*loYR||xtqs$j@S8w?flMv zoDpRmb2YbcFHi9Tdk4FwdY5rMw=tb3d5!n@il6wCHjY1=-i%-}5AkfYb`8-FE~Otg za5oR~6tD9>+xebjv~gZH`f>J9_d&kT*BmBrz4kGH5lm(}3s}jgZ0Eb-`se%`xrIA< zm}gkYhkU~?{6Xjq>N0>4Oy&`uYS~YVn}P%9(1&R1ZV3+b z*Uo4Xm_`uP)!4^M(G2+h$E2<7P6Xk?BF1+v>}46 zqk{vjiJ%Al8N*cOl0*Kj`XTEHvE7cI3}YfQ$Q%&#%{sJ|^ZuuK-P zfg0*KN?YGuOccYINCrzOAp3Up#=4($W-y~kWj4zwq@0}`p|x{5(~FQhg99sMA?56% zo{(|DfsXWGFr!IjHp?hv12xofoOX8v2f8qbaioyVQr5AReH@~7ynDhRVwrMRaGxaG*P}Br}U8~4Dg<~SxG znZg`$C}IOO93f224kznAV2;Q_%GpI7L8;~lk;E{L6tY>w8n&>9dL~XYZfd2m_+(8s zQO*IH>EM{I)J->+#Zm zj2)yr>fSo1578trjrrtJ!WQ;$oOX`CnC!>g2f3I+Hc>@AEiyct=|X>ENoE%FC}1rW z?5BlV;XL}J`654HBVX_he{f2s_Zlu^0JkxjCwY-K*vQu$Ch)j-U9R9dZsJ}ZSK=?FsL6bmInYXA)2F0KEJ^`e8CU=O|b7SJHK;`Gu7jv)TL7wAfKHw{U<8MNjx?hgJllypxH`vJ6 z{6T1rw$q!Nxtqs$j@S8w?d;`0&Undv<7#fm!2LY?nrq4*`Ge3r3(pGtKPB}R%x@mgZsIDwfQ3NlV82< zdMA^g_?I^Jb)z>oGnprOo*N3)m4P*$t6afw?qoU(c#Ze?ik~=4@H>vDAH$i%13b$c zY~(BMeb=+XHSXt8Ug9l2V>`cds$(wT3Z7r<8E`UrgN=O6VgBZSzQ3Fsxs5lA{GBX6 z;#+>@A41==))>HTOy)6O=50RbYYuao8W(XTAAX>1ayvir525d?#Q<(&GLP{xZ}Sn~ z@+-$UbDg=$0B&P45Ai&2u#qqLh5tC$H811mVs+$C9OF!%FX1|dGl|D|nKubtZ$5n} zIiCTHU^3HLz)C)4JN-T~51iAR;Y{LTUf@+e;%g4`FYlLVzjG$=5YO`lAMq`}a;jt6 z(2XJ7#eMwnv05jS!vy<$9{m`?T|C6|yhiXR##)}bK|Ri+AH$i%13b$cY~(BMC^c@* zyNa8bz@seSE#7B4zjCT$&*ZU<`YfN|Io{?IzUOBGzCWAZ4B@R!o=0*eAM+i*ahm;S za5>jAf%}>DnYkrv*-t$!KK1u6Js8Y*Qkl&{RNr7onRjJ+F_f`PA)Wc;v6eD+ za)6ebz4y_D{=_n#6tY>$I!dXff$%Nb#?r0cb+vsttJz8oM`@;m?|Tu)cq+d1cYxeP z74@|E+~1Y-VkiluGoMwIu!TJ|aDtF++Dm_88BZ!1EM+wtsALZ(2>-&^(2JoYGJ`qf zu!=2I(?F|o#}i2m38XWZh_8&fz8oc}!aFm4h#`ro%w;(nC}&`$_j>0IWF%8aCx_*1 zU?)dtX4H0nk2xoaOct?*VydVk$T97hy+i-yEEZG9CU$XvmcH*mUxu>wYjZ)aqKw@f zA1Cy1`$IN>Ey72%$@omTYuy46b3SqWU^R70cBKhkQUDA zNF?#!`g=_lP(}p@X<>gyBH2`}zcPzF*0Pm-9Hp)AJJ6RnQkX^ccls+2(#m#wdNGJ` zOk+N|bgorPHgismdrSe7{=#F0W4d92~!5B?@oe=5o%D=D;p}C6XA%F_TPkDWZ~Hg#TnboHLm5q>{l>RNvqU zyVWIzQA}kH%PAy#kH3#k)?_f_No5|(D5RX79HF)2JJX9?4z0Xj_bu>b{*0txt0>DIYbXr91~Z;i=CXofc5sMh+8%RlVi?CvvRTSHwo=1U zf*OrKeHcX&napJc8>ry`$B&zfC)>s$TKn9A?hIozsbrJSTAG@S{Xgaoy@(@`G#0ah z5~?{!tCPpmi$RQI8uQ7e=7i_WzuHV6Mv=rc=99--wz7|-v~^Ag`VvP9v*^|ApDoK4 z|Cxt$p+93tCX4y3ViUWlqdX8280Fk}=CGV1wy=i=!X0xCeHh6U(uh7KBydnR(7HuP zpfi0L#zfLs%re%qgF`eiu4PCd(fKK4vy^p|QcDBjj_JtkQ`I_|ET)i6?BW0|ecyq; z3?(TvB#F`njm-eDtO@C$!) zN}G_t`CQ2WZeubJ@jP$v4qxyCzj0c4NZ@QPWeB%&H;?fguk#7p`H_DJJtHJ=E?09S z_wW$U@+KegEx&S%Guws)F5xrW4z4Ue8P72 z@)xH?=mXujhMTyT2YHS++056x++Gc1`T?8yi9cy`R!HCiuHh!` z&VxL~>%7l)zULTiT&ElT`1>OFQvOS@?Mvy$t=z>UJkL9P%r_T@1kU0DuHgpm<`G`x z4Tf}9Q~t}@m$(+!a69+%6wmQCoB4^uoPVjlI`>|l;yK=CGe2>dXS=B7xEr{e2YHUy zd7tfk&oSCKwj2G}c$s-2-)B2}`HM5`KbNbyiFfpns?S`;_1wmE9_1z8 z74%e8hLG?Cl=NKu_b#)!fK!Oy^0S=N&fk1BVH|O55nia3=9E&#;mY`GQ~g zo8VrKrys+a!~;Cb8*Jn&Hfzt9SL>7fozweh7ng7yw{Sm?^9t|q1wZgNr#Sa~uI3gd z@EaTZsnyr>nk%@DJGq}{c!hWPf*<&sQ=D@?S91#!_;sMMJ(>JToBq}q*KiXPn9h^D z#(Qk$C;sHr0qzr*F@O==#Unh+o4m(Y{K6@&cLq;Jc@|z{n{&CE8@Y#vc$$}ao6q^4 z-#LAd#>z+q9(r<9RXzxXIqANog%M9kQ zoFXdO!wJH#4+&hzAmT_NgM}=oh)VWQN6=93YeW*mD5f%paMxaU@fDqxT?L%^pq=ZeJvQ7{wIku$V)v85R-C((Bn?;h7-IOCb~XVjJ;c5lDw-;lF8od z?p6D~kif<4U@`5ds!gj0ytgrCx_S?JPkq??;wAM{-0{KbxY-q^h0 zTDId}^!{r*jud8*#Uj>F!WJs2;V3Pan7edm7-N~iY?iT_H81It+G#9i8SB}}Zkp(l zqfHECEEAc{LRPb$o$TWT?bY0uYoFXr6YZB84+fFI6lSoHWvpi_`#3__%f^zv3?-3S zEFqs#DyXHAR<2i?@4f#O^O!C~Glpr*CzoP2v5VtGFVh~TGMB|HV?8@KL=){_wayq! z94X9V3Hg*#&3+nak!NnwpHU=`&N9}sm3@~F+#5j`4Vi9X7p_=`)SZ@9kNqA$XF7|Ae($DsbL?@guUr`N?%5kNCxvLU>!R+NUK#Lfe3mqh**-D$s+P7VH?*wLK=%%Mge8i(nzZ{<}W>nWgIifB9Ap}V-NM5 zAmknMkZ9tW!W;@HV+V(5RcNlzpBR#u#(Z)qW(#|$C*)nf8T28V1g4VBa!T0ARO7Lq znD@;|+OBh6vFFJL&a*w1L{i9R33-&Tg-YsZ>G&|Z(wEUBvX#yy_Nh6T@uZN=67ncv z8?`hN@u4v!mNXW#oDGyy!%7|yF&7iXNT!g+E*5?29;sQ&ep-BD?GZ_TVks;&A7wgoSjcMDvyUTk^|)|;@Hh{dY%y)2qK4Z9Hf+i zZ9@ZXnNJeCS;x3D9nWfJvosMWIPdP>w}yn2eO;x^gKr!7{_X+vi4l6*-rs|FEn>pMgsM0Va!GPMgbXw zT^t&yl)17GhbSZJ67!e!B(sNJo!wLB5KkRz7<8$zVIdRQLoqR39M4ixX=W3nE(;BG zVK=iF*VXt@#ccX_3k@{Mc`}h*6wxEn+F=7@>3g~U%4ITvmfiJHM#>CEQ^^W0yu#Sa z8FCnh$R(;B2O5$2igZ8DAMk;YGk-Q<~TyHNI_Yn-;pVmXSTH=C34fSk(O zQK5lwl5eqwWrbWwuhG_~Tz0Ge+m0M#{B38*(WKsHKFJ(8bFBL)Ti)(?+mUhwQB;sM z&U%rnW!pO(E4Rx2430O4c8a;feljV%*S(@$iu)te&ew}99w3XhqC>H#@%*> zjH1^}?U4s%JZ&E`K6Iv*^=a;-+#@?Z>{uBimy${|n>aE{`{~0_;u!mg_0E1WiA^^) zEMo>OAJs0oNJg@c^$g3f-pOSejjX5BW3EdtHW86&e#n9H2ytXS?wahUfack*$;2nL zj|S#5{z+qpSHWt^BZn^nT)0D0`pszvyq8=B&sK0WijHQ-kbkA{*C}9kJUQ$nH%kdndkkL!c zK~|7XroDRgbyN2qz%`tUi6_G>+l7)f7pn94y)$uH8s_q2;)>&zve zbLBKbKF~f{!5;E`?#du~7CTmE$#EQHHElmMW*=$e$Ig+vHfW#iR-d?Uq?PKQT(nVN zZLgO_W$JA*&l&%je)?Qb$rrA@)jhLsDfyIAK{XAW;2g*FWF+yVF^5jutSfnxW;%SX z{R}0J6tc);4cn+@kn{4tGIn2@bJ}o-Mk30+4>5=sl1L|q6>OrCKF(`hX?)a(mpy5> z!?om=uib0gqpQ@lJxxye#=Iu#Ti4rZUfW(z8M`?|Yx^VUK@3SuV?MdGaBgF@ZIW$I zBb^*pu!(XG&`bx%b!8}{SfzYW;@WZu-I4FxKZ3W|B!RtJp#%b+mL`C%QB2 zH0QJk3v89kWM9Hg2@90S3>nEGav9$;ED%Bk=?pqGEKn!c z$ap%o3iI!8g$3rzfwVm>EU;QGkv%vkC@fGU*UG+xogNmblo>LTL*x?DIxNtYHN?;{ zSY5eX4y0{JSfEtSmOaQLJTxq@L1xPC)U%A{FxMfqjXLaRK5^k;ffKS+P9^$`u)r>v zDEE`en6_bomTX}Lea;LE?2{|xXxc@D1`LYWqSk0<-VSx^GKg&4F zWipnq_QqLe$Vgh8t^abG?8F`xGU^=tkUM26Q_l?xG{{|Y9wR%11)5}voXdU+2FE$pG5W#{X^bEhza43<(r85JC)h2uIBNzBP}C}G$|VS$7T z?AL}qL=n#v=CF{}l(Cybw03-Zwp{3XauK<#U=x+pag?@>>B>+>lS&5rNOtXoWM86R zaud6#qt(S>feVQwh6K`?%L2T> zP7W*BL?v|`C!&Yi#E?h^^H|C{%BbKVjYM2&%@e~~{V1WD{j|8sJtC6+j3J3k=Cg`o zs@TH`LV8)N^kgIxnayGf*+30P3G3}x1{2Rr7P5*mcF{=NKKjH!3I|yqeVs=%qnJuM zIjo?Na&~c?kbaIQnvqN)og7xNg(~W4)!%$(5V0ha!BPq-XD3HU8(_Y$f?~F@j}x>X zXbgyDA~VTkAxp`plnM^gNZNHi>t8hugkNjyi6Mzhaw(>YdP1V~jh>98ih5e8)saY| zqRlOtM+wz55I)%V#E?WLxfD}HJ;!M`#D0p|#(o+Iy1{c#?PRjZql9W22)|x^Vn`yB zT#DJmE|P}Y&mz`PLgkHNfzE38AeLmZ$fJa68VHY3pBR$JWG*X+R3nCQ%p{APSkFb- zNW?Jpi6xmV@+hI22EvD{Lky#sN(15QT*x3|Nw~?{lBLwrNW=*Bi6xmV@+hI22Es>L z+w`G?Y7Wv$y$HIDGWTRQ`IJ&iBN1`x6H78#P#6a8+eokBMG zlu}D05lQM3OEOvHQNkAXkbIB*EMYCBG$mUvYR8a7Cb<+-MLi*t%z2_oAe|hRvw>(e z5}3w(aw)r4UnYkIE+&e2(pXF(Kt?i!H0Dj!7gwh$oH36jIIsTBcfCbfu7T zc5$2_H9O2OE;5}Qim0THplRw8MLcONrjT-Wa)h+$_OpUbRI+cTHKcYl38a%l5tY;t z^q~4g5lTA2zo>vx-*PQ>NvqU>UCk@V}7G#F2z()PspRbCz=G( z$)Si!>NrZ<4Erf!3wx-i(Ik-09G25XjcCR&jZ79lmF2z()Psr2O7dJvi}Q<+P+8j%cQ9Lc1=;5SOv(n!Sf z>Jv*cS>#bdH4TI>R);=}qM8O;sdXVeh|cj0mHCuXOCu3Wd`~RNWRXV+)iiK|b6&Kc z5-K=IBOxz)hN_)HHu;oNOCu34sZT7)WRXV+Ti8SLQu|rLT1u&U#WPgxUc`|?Hu;oN zOCu4v>Jv*cSU3r> zaU{L&87j-zO%v^3Q=d3e$R?jsYH1{5x%EYVN~z@#t<`H!9AUTMw7}s3MgYY zO|*Yo9R@Lu-82!VR#*BG`>toGT+LSY(M*STe9vf7nMVO-?52rUh1M4Zl(CZ|G!s$e z8LIXS7P6YH?4y|uYt?5osm!B*GAcMo>U;LHjP-1#ew}Bi+5;KO3>LDQt?Z+j4)3ea zXi}NS64ugJjnPbGHVY~K(71eH%;-fNDP)sRDYY~bQEW{ROES}#PlOsh7|eK5$Sg4~ zayL!1U#~uKq>xQMrPR_$#7FATpE11+GbY&=`N#5qYMQ&vu&2-qRKBGxx9tD)KnF!egn<4f-?av`hP z%08Ou@P+z}CY5;KY?}@MW ze!~vBerHX5?-?mqvy~d^2&yq2L=wX&rZR`+6teY4^WOP=8O?ZRv4}O4Qo%u1?6N*( zi&|q%7kV;~p(K(*HbqpjivzU$!QXZCWiaDOA)6)SQ%VH~X(Yn+E~Jdz9HO=Mwx{oI zYgw+?Yp(rdEPb9q2HE7ZmI|tAAjEN9=)NrljJ?KFZ|2eFJ}CRyaM zhHX^SK#K#eOAk_hH^*cQqnJt>vzbQ$rPOke2Eu>UX8IFN0%Ix8>rzZ zZJUfAeHl#+M+s8vVtO(#xJ@8e7PEy)>IgdF8uVl&No0~sF;ztVXWSUiES9jA3Jwy~ z>^cl$95Y$SYT5_d_}`%01O^jF3Nu+m0cGsu2$3xu$9QJ3gtb&qPsk~1F_?v{W&<_U z5!AAcf8V`Lpa-#xXBIgWQNcmlo!TbQlPHEUkr~Wp8HJRyk7hcwY7^*19Er?eAm#$pO7=bR300)2=fiJ2@Smtv}@ zr^R{h6FnHrcv6|iGS;(|*o)c(R_S9AmDCY*zBUj=JZUVZkaGHVY7-buD)T6yjNLRb z>;iozjm4~B6IImH;zDhs3(+Ky&U{u;Oyb4nthUWyA)FWxj?(suHi1s`WF+yVv5;k~XDd57LNj4Kw2!`wCXo#0Q9v0L939={uu|7-${HRA#Y+JXTRe zB{dx7!v5|dv5a9F^I1V5<FK&7i6@OY#0_$sJ|>dELRPbm z9UP>UVnyu{M5Hq6eXE_@vXZH}#F14eGCym7v zQqBQd4pyImjAaH3S;{&Fsxg)+%waJFL#=-q6z#c16!E07m_o`qK+EgZXCPxqB!iY} zbfPCCi6`|&b4ylIN6-!G6Gc2}ET)ih4$v}29lA1bp#Fb zJyFDy#$pO7=Kx0t8*V>^Y+@I6G>?B@|H0H8` zBDUUaP2c2sO*9FllS2`e)DaY?K2gMz#%z{xu^Lf~Vk+q@9Ni|cU)B>cN`0b9Ae|hF zsHBddTht+nVN9fsAa%~657CUhtxaH!ET)QjLT*)`Xc9;#haxJeBWR3uMR$s*WDh3@ zQM1!Hzqc}zT#Bipo{+KX6HNl?FLaV?MbQ-epbS>0OLSVn`yBT#Bipo{;hC6HNkBm_vvfUFgpkl1NMR zyqDE95T2kuF(i>mF2z()Psjvy=*dW`sHcTm9f>6B9?wXbM+wz55PrAsi6Mzhaw(>Y zdXCdB$$pC2#(o+IO7{Mvb~0JyQ9?BhgilnT7?Q{&mtr=ti=;{Rvxqg6&{^GO6ijjL z$>s+G8OCT*$zUn@lu}ItEu7PlNVc$#+IyXs;vO<^hC28AOe(WkMj_?w;yCS6U6+B3 zXBPdZ`)!s>$fJZUR8qrHn(6R>K9j^W(#fHSa&~frW;#ssOrtNONhE`L6tIr5t~-O- zEMqm}^rPp4eqa7i(f!Bs-qwc$cP5?LnH;yyPG{$P@9ys2+1=UMNp?C(Cz&Kkk|fC_ zNis>2?4*+-xCz&KkGTBLzok=IjB)LyANoJBHx6aPoXOhYHdH#4lUT>fGb-k|N z*T;4`_o1djpWo;ErP7)Dd*@Y*C5d!Oxkf#$++>_(wg^%uoCspbqL5mybM~ro%v1S( zXPFf`>Hm=WRo0pdM3X^2)ilw^2=lCQ>6)>N!5`2r5yX&1KGob{h}*2NO`3WkHS%cl zg4jel{e;!}TwGzF;~#dX5lIS}l+#Er!yK=3Pk+SOR5zC*%4w#9Q6^Yrk8oulC5B{% zY5S=0$P+^rh17DL0Y;c-o8!u!BK%{L7f;;SRK%TmBpOIhO=hO}Li6w<1%4w#T3GPtW=AC-w zG}FN-6RfgFxH6BD-)=182=lCQ$cfLIBO*zmfEt>aR;Q7BOnlC`{z<=xC7ViG7-WV` z0z2$$u8>JN*J$GrIj)dG5tTG{>5I6{@lN@PC7ViG7-WV`0zWSgS4bd_O#X;PgsxsbDjj!c~l!QB$GiIRoq~Z8CKZmxIQ(}&*?t>5jWW7kTYL4K4QtFoI1J~ zWcw@5p?a}oQ$hpnj4;gxcR8W#W5kk12~`C5o71nGJF%F0TDi$M%WM(!&*q2-k}0Hy z4n~<^l}84wCrK1gP7NIlbB9$92>z-$=Mr(`P|Q_Y>1Lc+wm30p48)Q`5tY=@$td&e zaQt7a1y{(Rlm@yPW08B@7*XE%_Xr<0K9VV zhM8rH146!Q?zln{nUqsQ+?3DdNFa}5>gnVbv#fHDBSOAs4u~S1Jldwsn>=FW`I=_b7jLt|HpjnjAMgn0Ng$n4uF=LV7Pw2l9MfF? zp}7+85%L3dNg$7Fv@y&bb_kxeXNV)2LUst2=PXeqkafpC6-Qa%9wBq`lRzHVXk(Z= z>=68fvq%KP++m#~LgY;Qv2!BU&_O>_EO3t_&i+V0h$Dw;n&@MMdF~TBuRp{;@Dp<- z_f=ZyW}I2J*du&Fzlb4=e5&bZiX}D){15BE6*4HLfgXk!{i*S5ub6tSGr%Nk>=L?U z{}N3GWi-;uFv0)nJjk=gAt#pYAL7ZSh&paE%PI#1|IGSviDU|?rIS(SxyvEv*X7hs zJSk*SP9tp$Gr=l*1g*LUi6Dk73aO=uc1D<)y zPJU7;rk-xbS!R#$19^xhgJt#zmg^jsNIY`CiM>p)$^oYjy(g7o>gi^jW%fAsd;5%T z#<{}|2Za7XXh4D7r8LsZ1gjiy+P|7{iByWIr<-x6*`WBC&uL?r2^OCg8gNnWDAFmV zkzOWP<$%+H@{>w2^;~CwOLC-=$2A)1JRTZwUp(S$ko=@mN+Z2Yu*w0apDqunWKqEZ zr{y_M0_ha~QE0%JIK?_goc%-jNvD)XdYNFA15O8r20Tg(6RdKN5c$p$5fU0uCpOd1 z6zd#u_JsVTQ%WPfOt8upL4WLXdKqPbb@oC-15)J9q?~5@nPQzI&OSqa(kZ2pUT!i= zx*Vm{&_O@r4}}JtIvE=92v^9YoM!r&Vx1$-hRIJlrCga0p9=M7)S&^J z1cuAc6*4KOnSQ2N=ZLeH-6U?&39^ro$>hGY3 z21Jua302&ni!m0sN8lsojVRK|;~I_hGRz!X1U_3{qDdr!GOB5(k4e_pC*K&VX`+u? zOtZl*#~zc92$IR7n0i|2Wtcnc5d7!nic6%D!&T~O=RC#JpBEbNEdH8T^L9SWC-^eo=4bqxmq#k2uW#Tze1y;Q6~4!R@;m-exffmv z4S1{gPTt3-`6s@~6FkZ9_>;d54fu0j%A0s6ALAc++DnaDo;UM;KE@aM8b9P`{FbM` zz?gYHujUQBhmZ3mzRCCaG5^i)`Qyu>0ng=yypFfV{`$M_;o@Fc(EX)g{9cs4KL^}Lz)^D(~2*Z4L+ zK|4I3m-1iyAAj@`dyyCL9BcE`--HJIjrc0w&U^V3pW|QocYeYD@Qm2dfd9wycolEt zJ$!;M^EH0RFZly`Px5E+p#cxYsmF_W1#jfNe3UQnb)MkoJjKbE=^KB=D|rha;NzT3 zGzW6Ng17QsKFsI%GT-HA{FXm@xpTpDc_FXhZ~1#Z&S&^C-{Pk{$?thqg1y13c{?BG zQ#>yT?Z1fE^Hx5{r}$^S#S=Wq|MJi)?HOLd>v=aH5L=a)Ri$yDphb9p(h<6V4!kMae+&iD8+|IHt~R(_t(%Xl;I z<`aCDZ}44y#BcaNo{?tn^J3n>TlfI~z?b+APw*ta<4<0vPrR5{@&?|)`}j1U=WG0c zU*Z?6fIsDhyqw<{>+|1ep5CBue1d=EYkZ$y@)RdCjh`3sdfv{5`4q2F|A{PjiugW0 z%@_F^KjbGo#UCs4Twcr@cpJO#(+BbRn|$wZmMF?|{Ei{!Q$i&zbkNI9X4&FIw%-ql zB$gx!D5seYdb!Cg%j^;Kx4u7#Aek&Gs3rC-e&^SRc6zwY3=6DsK+v1jCxs#^siA{W z?y$@rLAlBjK@3?GQpcQ)m7C`hV5F zB$gx!xJDbjOmK&7jz1{RW#U=H=v@^mq8|)HPW1ka2GC5qOo^B?Y=PoBcYz#a`EGZOG zP7NLOGsQah2&uIuL=i_S#ayM8ZpN8rkzI~`#Q$B!0Mjh8#vv!_>|HJsPdWwE&`dw0 zEU?ZIAs@BAM3GJ&*Jz}TVJ5i44o94=SBC`B$)S*1uG7yXtLzj0F=v%T@~EPfL8jT@ zE+-nyAF-sc^>O>?pX?F)H@w+9qDi8Fa+>L2lquG^N8qQdHgZyOCGK;?*-rC7964O2mQHRl$r^{8`MkWul1(Ko3^K|B_c-8mm;e6< zF=SCeHSLUWn-%uC)a|^J!&O?j$t+t0ebM|ALlzZWXMkxoIM(AXAes!yXrhlv);Q$M zmyCflT6^6qj5Es?dxU>kTVzo|6Mamw#vy0= zuzq`*BnqgZgHaX;8ZdTZ$fAk{ZZO1cR@mnFSGCDw#F9c0l{C=95Ob`s&GA8Xh#-jq zN@=8hrK%SHTy!GWQ}c(`|J^}kVFCHw0v7%zNw7o`y6q0$nO9|5KRUpG;o71 z#+YG~dxU&l9pXr(m~(K^*B6P(uqnj4;hI8yp*xpNk}tM-{EyWSqL6+7AP z9&R(oHv62Kv@XPwLJ^g;F!%5Fo;c1l^W0^h!0*{BoF{=o%4njU9&R(oHv0rlsl$1q zNGFeLG}6m3cUWad`@z%hO)e2f4y9b9jef?MW1Bxb538Yg(12-6BiA@53Xr4Gv z0+|$1NevwgGQ$#^1kULbj}c26B~;TyJ0nc9%pO5c*keQxLndW3(!)4Q>=JUvz9Non z9{aKJiq$mG!yuzfu*w!eKQgbRkWB$KbTG^~%WM%euRlCW49OHy!F4)`({2vM)YHmM z#%cc#?Jv8doW%jAS!Rb|pNA7cBKedNyy`9!*ErIV;lO$1)|BIg6j-0 z%`Tz8G#)OKLJ^g${Yu}oS4b_b+~gLE+$C6-RVxJo0v40DH7_6e6af*6W_{kJ|6!N&hsTQQjo%BZ4_X8M_8m(Y8@M|hlg za;c<-4*Hp5fpv}uk^ekVq?1SBu65)xiR4qkb-Eem4(r?}@F`;>k}G6VL@gbRGQ~Rg zNc}D5CyPRAX`+wYtZEGZx8IVZDL0-t#@AcXTIlS3h8G||ogw^(F@T|!UE&*Q|COAXC*Fv=9`9B}$i^q&Zl$)bW< zIvHS!H4Zp+T3M3F=NdP-$qbv^=i;->{lnJL`X*68DUEb9&MaH(v8rqncOJ11{>hnj5A(4ElxIqsm{^Ddn`Qz49yhJKlRM12(6D)9# zBO0EoFY2^2!ZaJ)<%D;S5lafA7v&IdGRrClgq+tVTNj)SF@aQysi2w$dKhGeJ;MLe zc(_0!`BYIy7lX{O#3q6AhjH;iJ7iM8@xRhfE)z>OCDhZ!7*nisz-i++$09?|v&P~P zXFZ=Ijw~vu&f zktCBtDK)e+!fjT#PuO28Pl7hHUts>k5*lb{gxjoepD<+};dHb+M69Kgn_P|3e{q3T z4hXtz44mOIv1C(EH#fP(BDxm-RpS#pYhjc`z0l>E$M~Y;a7OP>QI&qTk|m1{i0V4UTzthRej$!JU^Fn>fiD zy9D{{Q7({3E>$#emrE~o7Gm_BOC*p>6?Jqm$^z@8Dc_&yK8>@^p083%Cw&Yt#uDos zaUoXQWROc0HyC7;1=cwtR8q%clKn4k5#;$amxv*YGMZ@TK99b}yu3<2 zqDds5GMZ>-gh}SuW}oB9?kpmSC7UAZXkm~srdVf(;8$yp7*Z+bDv!Tb4*kfch;o`~ zW0+aCIN)@uxg?HM_FpHepG5`N8DN?Xj-?qJ(PU6Y6MYOZM}{0_)Y8cSd9T-2y76&^ zO!Bx!D>s>7l^sUjVBe|JKo7TBVV_eO@{mFibu`mYxOx%9kwY;nna+W@$^k)sew1i3 zD5RF_bY>|d2E9=kV#p$&YWkUCiTea9e>~gTh*PYyL-3o_=L(q=QAZ0QZ!zcUM377t z71Ywn0Mjh9!Lh$JE+U8{n+mSe&It2ta4bhzB8VfMQfg?Vm79!nhi!u1?0bMKBymCi zl1R=sH)1WV++>1P?h%rw9#=@Ah;o|gXN)DbIpp+Pts5z1QzZXPp>r-?XMkHQvca*p z84Kr#Bb`!e=wOiBtgugDf&P$0HYHTk#t^e?vG*WqH>pV8cNiyyl+i>Fx0z#`eF~L* z_?_-iG5GKFi73)3poT7nm}8AyLW_NuaG4ZxsiJ`|zT4c%`C8t@+xQTl=8JrrpYdCs zS#mPq`MjEU@DV=Gzwr~E;^ezd27I4Sm!1sxD&OSCJjw6*Q|&#MXaD`lfbWPu;8*-F z50&|xm+%_i!Uy;yU*UT^!IM1eJtqTRz$8Sorlz{_|u@8*MimVf4Z{G9)$ z`-3L~UTWN_WKlsaP4sb#MYagK>g*Cj78TUf%>dJczuy@nj&w??p@UHtxJO8p--Ssa zm164YW}IdA2>*b5BolMZok1B*v~#w`SuutMRyiQ3T0e;+P5B$+~L>EsrR>=N2w{3LSh z~rE%@)1QE#njWvsa8MhZw1#GV44k%wWvol8I;jPACt_nP1!&A zoK9{rO>4V5?S|idE5HKjZg9;z=imLTb5AC%2epgIx{@ZL?NHlR+W1v@y&Y+Z_L_JuL_hSYn&wJ`3X_3FJ}AMu&cg^W0^hQ$D*$64_Kz$JI`I`*ZFI9w(kOvZm&L&sLq=-sd=;1aqY;wd|b#!^Xf_qDUf}N*ZWqglRUo%L(-! zBbF4VX&G@ozG>{FjOw$vNrmUifAtxgv=Vg7zUI`wc}MQI-8J7;pO8uG`0vge!#_}O z)*A8f54AUEPm1+o4m~73;T>Uj+zVp97)|$rzKE^#GQk4d9RHC!lgEiCgIvmJqLV&u zvB(yCgwNZb#F0)ZH8j%8C^KxbȂgGf@yrHVSb7-fNVIu`9weV$>1WB;K&&JjmC zrPRwshz#aB!{+0WUZ3eipWvm?kwf4nx zVhQoIGEN_x95A_U{<-j^yG=|Nhks*Un5XWZd!DraF*iK+lzH2gi#X41 zeRKFbWBNaRJ+Sx13(Qh*=zga4$oct$uz*R%0>c84tEJTYaU6W zkUF}#%_@hS{eNKr(PUCV3pbf#hZ7Hn1)L|50&3}EoD~i@^JiiHOeM^}qin6X&LFdF z6a0uZB7uBr=wys#_Bs9Ruz<^?Q${lb%&^7rN5cZn5lZ1~?Tj$Z274TP%p4LyG8vT7Ko3Ji$`$q(_Jf#3G4-@D%oOX~=ZLfCtQ$$BQ%XJE z+$2J-OV718#7qjPp@l(iGtXU)J#H+VBZ_o#xXN_~xJ8=G2|jB<%o@+hZ{F8Y~bl>>sc zzxD!iC@!%{;3e%6NjzzkP)$1nOt8v5LexLaC6Xzmg1i^n7h>>bV<4Uk3aO=)o7`fN zyPQzx3{6qm6C3E{7PD-zOQ`pc6Hgj9Uu10JFcYkDj}V`q<`T&iQo%yBF^fxV66ohs zL~?~pN@=8x-YeP_4>|K50`hd9Kn*FB2?qkHD82H|M!R3Pn_LgFYsiW1B$v9^oQ){zfiwmUWH@ z^VvnBNT-;3TDkBt{Sx;%6=zL|B!yh6sH2Nf7Fg%l%bhKC(QH>BkwjS?zpp`R%h$bGf-QZIpYN~xiPK}K0%llz3d zN?u|~Bb!PZXs3@!7TF~z+1R;6Dp^#}L?0t;riKMv(~o+tGr%~rY;nNp6!T32nUqsU z7emak#vb9XanBJ)I;GUm!5}j%aF1YZpW_nM>H7OxbIZd-lS~#B)YHu{<1Dj7aGLKS z&JjmCIb5ZY4n~<_g?&!E&Y9*iiR4p416_FGAW>j76ut* zfgOV7IL)z4=SS@17PD+|!09*0M*^u7Q%ffUl)llPSN}W-WKu*OHyC1!CGHWT{8?^f zS?dRpJ|kW2<;G|X-I~kXDnsAv!(kP*tc6zwY688y|BkS$XhgeNJ1B@`w2FD7FnR8qrlOpP9rk@E` z*L5^KyQ;>e+t8af!{HY?oa#Jh}{NRlX^oQ-!|2XnbcxaV`kkxU`g zwA07gzqcM`_6(14ktotBpp-^B=w*Th?h*JNcM6fjlS>)3baInhEV9Keq24l{9MqfFk7>Wb zxIgaaMn5x0#3y`4Xp`qpDnn?q_oRNxyX)4T(oZY@K#R}+fmZMSQM}>ZXVm$ux-9*Z zpWE#P@kWPx=X2JVF{)`{nSD-ox;IFtjAjOyVTau@Hqm(B4 znP!uqFW6_qk;@#{sq0o>%>0rzJ&!QYT~2(_xh9@ms<^=rb8K_G$9=&?hL~fGLr%!~ zNS|{pR@2T1^W5b`ul&T5OBFX5VvZ&5Q}tz^)5j$9q{|ya=~v9RSVkSQH2G|@-#UKP znH_Kkh|y#A;h^#~(ndd1EO3t_&i;#iNCKIZQ$q`bjIqQffj5nvi(DarJW9DrE4@r` zhh_E%`kJ#y1kq%WPc=>SF~S{oI3Q$5zlb7^9E!O{GaZaF!wUPH_`2_YqDiKZt2ENa zFjK5^pCir=8xOIhQ9>mx404+l?sCY9Z)k&PlF6Z%tJKrRFjFjXpW`F;E0M&KO%b(p zFv136mykUx*1@EdDb}O_`kb{xIzj=RME;H)2wsI>1lIFG6huA#t?I? z5Prvgum;y3tOFxVvc_Fb%=(VyGV!EPL?tzJ(9aYLta3o`56vT&NF|4>)Y8ca^K5Wz zPCvLvB6(EN%1y>eSTGiSy+Q(cl+s8W-HbEK7JG#M$l4G?G8vRnO*?%IF~?{tv#5;NK`#@`vc)m)9wvfh zvRL?uGU6~hE%pGT5HE>$$JOY)LA;mS|7Mg7n1zyGpUEA|NUtguhuf4Uzz%_UMP zqlz2!Fvtu`+$V5V9ZqwJIC3bao>p!$&N5rgY8yy?ymFA+l``IJye4IPZK%m&9c++&>K zGV$b6LM1hH(9aYL+~bI|zqIZokWQZVi>arLahBQPh%>*^28rZwl}0)kWQH{kd3ejX zNv4omTIpwsCAK;KYk7H`Xp+gIf_mEMXN)Db3EnpMM3GJ@*Jz`kDVDfT;FHb`k;Icr z1=qRBEX&*{bjN%UPY#td(8C}ztaC)jZ`?!wXHQ!DGHPg~mtpR(&Jkh%;|?K~Y)Yu4 zg+b=n=8!YHzLQ8Ki(;a302h5#UL}Ru+NDT4+T6< zG#M09!FAdhVUBGMIrGQL6Hgi?RB?kIMwn)UU5dDllR+W1 zG||T-i|i8gO!+xS9O;x&Lo@x1F~>HCoH->w@uX2qJ*_l8qL0RtMFq8VGQc#8>~ic` z=8y{{l0g~OwA05Vi);~eMn5@E0-2OkM+<|DF~>HCg#M}gM3YP*Wi-*pEv8vyi=eaG z;5-RrQcfLR3~`$k?h^d}9twDj7&0lNksfX{N9d#4GABdaW`$ispKTtwOeW>j(Z%3{ z_#Asi-6+z@qntXr=x2&m4hUAh?9U$x7#FA6V2|L(tSu2FlTS5GWc-CSR;P_&rdZ-W zN1Q!p&yh+F<;u?x_+00M%YW&v5m(sf#CdB1?`hd6?HVz z#xUb7bNsK&F_By$lX4nq)V}&Ga+IBD)+@e)=WOm^jHAcR3L)578u&PZ>@0F~l7A2zjwNCyE5pDdie%^fJl< z>)a#ciaJ~-jeM$UV*78*vp(G;Bt|)+NTPspYUrS!Q5IO|h_f%X{=|__HP;#77K?1K zOK7Zd5=|oclu=C^!%UFza%VKoo+W}9vM8j2>vVF9X*Ss9*vsVS0*Pc$Mm0_JGQk4( zIN)@=Hb^Fm(}~8c{cE(*&lF2+6O`b*aDhZ}siKKKMwn-fLr%QHoyKM2seGkpZN!pI z2@SL`$Q0|`CrsH#IQ1&$TI}Q&(`>LyXp;O~CWRuZxIqsU$?hxlW5}YIdag6TBx~#v zs_esrr|6H^!6;L#bB~Z$n~CtFwYu? zoOqMI5=%BERMXA?<1Dj7aJG3NiX<{Ar-o*F7-pPVwm2g6Z|!j|lR_rt)X+gcqb#t_ zA!l-YKM+eM<6=p@V*=SYVw)&J?IaESZ#3M;C(>$$9Y| z)>iDIpD|`xd=QJY>wOL-RI>7S&VkQ^itXEXYD3HxJ4$@dh?C+vTkrCHE{2tA|K0Y0 zSSa?DnNRVKc$drN_UL=;BhC>)j?b3g>u!GVuEL%3K4(-+5GN|_OL1E~|M%8ktP;~$ zqnk@t?ImuLP5%4!N1PTLiLY{3iTh$PgCB5bbL^UNi&f%zx_PwPdWwT$5{o?YA!{p^ ziHS7UxLd@Y4?BCF_rzIpYL#V?I?_I(zvA&acY^0JF@ncF>b@42#AJ@un=?*P^D*-# z&Wn9SH`sS#ru}S|t_lgT<%a-Y!`Dl_Bm@Wc8ljp=(H|kzgWWY&s$$HON?Ng8p67qMR8e- zCWSmMe!<`Zi-!gZeQ^)ng^R!q=#JBZB%oJy7CgZlVD;^T!`84ZXqwG8O1QWDz zYC>7DP>f-eX4c65u70vbEtQkjnls;XHpEFWinb~F#oJ=zzw4_wB;I3+_-S?MqnOa| zyPL!gF^UT_a*4BII;B5w_Qi9v=HBzNn8L*$+7D!KYR75uPKFS3W$tC4i_OLi5R&eXr#>ZXH`vh(o4;M)yol@%Q<|eZ& z6Q^F!llB-(p4ZtSc-y>ii5RjdqltD#nB;Ruv-EDEWmi9T+#!Zyd1KSdRz|Ly$qIPs)VL=7kI>5F(tO!*(@KpYY)nA$aV zaf4%?|35`{AD?r%KLGq*OVW}wGjjTMI(2g7NYc{MTGA|Ow9qU$Yb}Yj)*5LoA!%u8 zmKKu4Vn$11NuwpCrNu&Gv81InS|gU$_`Un%{rcPw*Y|q(T%YT@d+8~Ju0+$o*x#+4 zCi1!Tgxr%(9dl@Z(pe&sg>-2$M{$GLp9VJkA+Lnfn)`&!HulWA=YX4 za!zRA-}GY$sbo<=Ath9>hvNjb4h>vFcVZb%29uddF>9%$jwV9SHFvrb%WyK7%zTR3 z!cO*ciq>sH1DDf_A*7N;0Y$81H-~9;p8n}g49TQ3i98mun(fqcg7zVy{vUdwfq{%< zBGXyKN;a^U!vvqNJ(tp#fg~`R$;@X1dugOyTWckrG^R6$)of%t^_(K?g3v%$B8X=U z)0od%wopSeZQ5x|f0CI*0jnsdl4_39=EBfGIKAn|5K_rv8Vf056Ez&Ab$fZFFT+V^ z28C>34~>Leq-Ka_Bx8x{5E_V6PqjpK4h@tt^WxCJ3gZ4xA6<+`1+@hILmd&xa59)l zF8tB15638TvA~v$0Qv_dT59!A!(#d5Wov(Ht z^cBrOMv}?|@>xh371VN^c9&ZNUFlCeX=F2Cge@GI;KF(i=5bmmY@8I{!0 zOxu5(H{FOKfw5#Whhoau!glIuq4Sk;Lo_3q$PAXSmI`WVqJ392OAJY5F`E*$a*$@i z{v%HeB!x-LVKrN*;S{0Wv?Gd$tIQ?Bd6VOQj3Sju%%qsLY~dgcg!J?b5%edCG$t~e zMXY8!2Wg?*HJ;&eqKPM!>C9m@8`;lcf_up;y@(@;Y-Uo-S}Lffo)$V^D^J9dL>99t zVJnAdr2UQ7Yt8)_MLM}GU?m&bNi9vZx!zq&52A@DjmgZXgmS7l${E`Cu~wpqCxr>* zQ%EUQ9O4XZZg6ht$0*XtWgb1vH{&K}MqEWD)ie>*SDh0>Z=i({CZnh?(i6@Q8%%_A3cG5sdw0RLpEXhnFm&Sgc z)$c@Rvw(H%rjcOZUrGsO32AhL{VH#FEGarjbtxW$dArpu0RncOn^13X_>h zF>Be$LFzd{`*?dt4+b)l3}&*BGAgN~nXtR%muTWiV>0t8p@KaeCupcO(49zPNg;!2 zEMygx)X+%VVdg_OVi-y~lgOorb?oL4XJ|WId-@PV5?K_mkTUjAM>B2iaW~MLeheX* zN#s&QDVwOFk+uoW4t34~>K*nh((=lF3Yp z*hn=eXm_vv=+7u7lFtgZP{S!gN4k56V&;AFeSfGwcNE9^UJM>B$MhnOBr=#r0Y$81 z8~bS>=pp^mlYWdMovF-bB^%jEEkR?n=il^WDCuNTz$z-Kp_w)hTYIW}n&Ui5DW{s_ zv>T_Eh$NO|CXvSq*3mRxPV_OAT#6{AiW-_}^N2aon<0!MiyR7BMJ3fV(JIY4=t)0D zkq8gaO>g=!#Q2F!U>XZ4p@KaeCup)7q$h(&WCD|!&sr+j z!*N#rzSMB1+ovDVzY^IaP z3Q8%bf?9%d?GZf~NCL@BB9|gcDW`&3j??ZXIVX}>QpjK?^Vu^?&6~qks;H)kpqJgN zgwcyQ(#fKLLQ1G$56210^9*71BAStmWjeE2$p-dvn9E<4D{~0VH&43KpEwdoW)kx# zV+#jq;1pr6=!0nDNFbR>@7c3n^v`JK4`+f)_Y@bfFJ1B$G}S z1r$2T@ z$t32ng01Z31g#gzJKc#PnM|fLht+IhCk+HGwpVl|l0l3iivo&R$2NA;NN}Mw(2M>I zXAILQU=^FF;V5n1mRoudO9~Unr;u{0IK&y+FOgTGi6?~#v6@N_6ZEeAC4wQ0Wf}`uOBMCBTB&Y`WGHFmu!u5t z(?FZ|H;3HahQHd|qK6xwzSSz6cFm$IXo3 zVP52QKIC(L;27s_3k`JQR_^9Lp5%EJ^B!NakCUAJWoY1^T+JPfU_8(AChzb$-*AjT zWoY0ZT*Ux}@jo8n1zzJV*7F6sIKZEr`&DS*3a(`^_wf*q@e;4|0h{@rUpa5P^>7`x z@;@Ho30~nX*7F6s_>I$CydyO5A8zAr?&C?GXBO}95u5p*U-^R$RiS}@aWi-FFi-Fb zZ?T-u*u`(0=Hjo7#kCCPJ|5y(X7M^7u$iy;g+DlJXK3L6_%F9}5BKvlFS3+1?BD=@ za_+9sz(rimO$^`x9^)xq<840SE57A-&f0A({>$~;&Haqyd0ypBKH_t}=2!lr(>I}k zE4hJTJjAoi;vGI_A4fRN`FrGp8yUfPp5;y6<5Lds8)tnh=Ul_B4C67L3R;jniCwKwi0? zyLpf)yu#bO&sTiUUz}HC46foPM(_~N@+wRDlpP%5G#7qvEnLR{hVdBB@+wPN!wwGc z2NxYwR}A2Op5j&B<#T@EFFO7pN8G_fJj+Wg<12pQ56(Me&$x~OJiuc-&tl%=Q+DtR zXa8uwxRyJ4h-aC_V%D&OA2`j0wbsZr+{|4(z%$I^9X9h7zwj3q{3Ms$z#ZJjqfFs- z*6W*w=8v04lYMX2H-EB>TmN$ISkE|aX>rEH|A}Am zG|SG|H}NDFoi-*na2Jp86tD3%{|a;n?9hIxcnh1k|EvyyH-b6@mhvfI@-qRS|8j1J zzzgClyvusNFJS;J@S;sAeg{@EP@|KUdN;bETRHJ0%aU-A?F zMU243T*qJ@=2_n019otPlU#I;d2kaWc!+1)bO@Zw0p8;C3pxbOIj=+DLjKE*+{42> z$7{ULX1?JVXNPnM{F7@L%>6vg^DO3Lc5sB#bUI&K?&Kk+@H%VwieLDH8`@c;`79If zq0@zOCB7hD&yOtSf9>UruXvgx{CJVru|wdjP~Y(%uIFwZn!{G{UzqBpF98Vi>G*vw^+}&{K7ffbzsf^bqKsDzRG)i$^m}nY~THpYZ=UaeEiQ2 zfv?5y_=9sU?GX4E*D-)$Jj#o_%6ojyj~wI5%RQ@)pE&C>b;^IakzqW_3%t#{e8Eqg z^)K_~8gAyxe|HGnrmw+_V?48XhtJu^NzT4PZmzOs?SJROE6taixr+xF&-2V>IqUg~ z@A-=hy2?2>F@kYC&s>(Xo^Sbuzv%QI?YW5&jN@tMvY3zA$4SoZX5YD%56$zp|8@v; z?B(-o)C*U01H*WP7kG_X+T6^$ybxhN*Xo=1_>u$s$@#tIoLjk*hk1@S`H-(U!f7tP z&N=&AU*}SvpR$7^oaW-|?G?9kFAp+>S9q5X*~M?1*T=Zr%Dp_nbG*rie9aNgxj~I_ zBg1%<7g)@CzTy}D;Om>zn7KW`cxLfBAMiE5642%!T*c%4+yl3mkJlGO*%$uB&D_r2 z+{cr=$_ISHcl^TdTzIoSxRKkroBMc@=UL2qe91mea(1*eaWyv?e*h2g2ruv!>-mBs z=J-12-RgVB4bW$-@orZ;+?!zj;-7RJXm7ZUdw7`Vc#ZctcBi{d{DC8!!E?ODyL`d7{LWd%zA#RGa5MMv_TAPbKEV{; zU@7nM5#R7D=MA!@fz>5nXmYTzc^=@wQ(JT zd6;K;gAdrjFPuGG-Eb8Hcz|b^#XEe&zwT9gYT{Ym6uuEaqdrWFIFvd!%`CErS`yi!9|scJUK|``j5^&n?`? zcxJJfkNJ{oQuX_Q_vY|9U-K(}aMu6aVf=?%xQ}s+XBKbr5u5p*Kj@GoPu$GyJjm0` zWjUX5fIm6+etXTe4CX$bU>3{S%=i4tUvx@#F1Us}xtAw+h2?ZeabIvFZ$IQa@lNjN zRo-M7oB4`w`GM11{Gj`S0X)ECJjH9g%_n@txBS3q&L1r|T+iLy&(plfQr7UPc^u$3 zPIK`X=alQYn+KV~8?5IGe&Tm7eArsKlmGD)ukit2^D7sORS(?6U>@dK-eeh@`JTVH zV4ND|25!qR*GD~L{~zHArtk(!d5@3yhGTSiL~gl}+qs)Zd78N_w~9wj<;CO8a`$pC+U=_cDb25xrfJ@!W%4S4Ii_QpE-NH`;e=-i4i=+v&`a6 z<1b?~U-K(}(dh}b%r)G}y*$ViUS>HTvWp)$!nqUOe_YFL+|8pr$*a7>=j`JoXFsVn zxQSsr#!I}-Cw#@voRuYyT+dyM<2l~sBR=PoNor6&pW->*;zM@v6KDDULJn}xGtR|x z`WJuZ7#B=723K+`cku|%@H%hv3E%N6=S|U;TX~e{nZ-MN%$NMkpPWBcTW;ZA#`7}E z_>==2;fd$Xf4VbnZg+7nPw*UXv7FC1z@MC}?G;?hTpoBqp7rr2AMqtW^Cum1teM*w z%s8HBF>Bbt0jB7q(~I_$Sp;(R%{4E%Tk_;u{F-0!Ki&;o#MRuw-8{+^-r!xn;5&|S z!OQlWn;6VEp5|rVVm+Vn1Ao%dcvmntU%iNdS@wvl7{CY~=Vj)yh8_ICY0mfDo3q_V z;wOB^FP!s=HF6yTcz|bkfw%dB@A!jrJpXNhxrv|g1HWhS4 z;b!jT5uV{Cmhl0b`JQ83u+-eRiNQR~bG*hoe9k_OaGHyY{7!Q__wpc*@*;2WAz$zv zzwj5GmZ>)eFoJPB&0LnVnFIXE*~R9=O$=rnPcxULe98{4Sg!4RYE8~>Vg%!Ol2=*E zr|jZ4&R?mHxt0-(<9S}?r&7Of`uZ=oa}SR*g*RBvXYAqtKXdjf`^wea!~h=PF<#;| z-scOx;}6bx-#A>u9X!Z0%;kN)l;QJyce9^*g7Yb;|k-|!pfedK=OR_^3sUS>J# z`Iet}TR;C;FW1c7sFuW&T(rSna}#&)5aXG}Vm@XEM>x%eAG`awk=uEYDZI#1zGNRK zxu{$YxQ+kuB(LxeAG432Id8KwVNRd$9l!7g9X_>B+{ryW&YOJ1m+a#R=WbG0ytKvd zoW8DQF!%E~FEf`l?BEEex%lt)?E1`n#LxMWlbq|bE4Z3Fcz|bkiDR7mxm;}32iJ2u z5ArB4vY3zgk}I`+>I-=g2Q!YRd6A`j$S!{356-G^R`?G$au<*A46pMxpYScebC$km zZL>ykF(0#oBb?+S-(AH3hVd@5D$Py&hGU%lr5tiCw{bs@^D=L-p3nG!Kk4ZCD|nat zcIZp|hGU%lm73yO26I18^D@g>&$s--Ios7eS8)>~cz|bkjraM4r;Ks)*VZU5=3{nn zgwtGH!o;Z@$_Qx5PmXZ!vi+`s_d;( zUBNBf!9zU5>n!7fZ{=vOxrx_vHxDv}S9q6C_>P}AOWTXNp4<3#$P;&P)iJVd`k z!vZ6Qg#|7g9u|1`p0I$waS@oytoyf7Y6~p4*H+m~lMMn=E59U-K(}(aBu@#m(Hq<4oZg174DY7xj^2 z4|s()_>fQel5aT11uujJuHi=R;XxkdMdq@GPx+E>I7VPbSl}OA#Q=u!7|-xJ%lN?f zpYR=jaA9s(;9{=lHty$9UgTBY<8yxG7!O**cMO{u7I^m+dCU(B{P*Rsz#R}x= zyv$tIu!Cd#MW;M_!8P2;y*$Blyv$tI@F@p4!nw2TJ=byz_c4wqjsGlfvW(4q#~++y ze#2(Vk$8YVIoJEA88*k7Uk?lX-<#H4C~u3+iCejohnd0~Eax+Jk+H_!X}^jxwy={1 zg5C}bTuNW!NMSPhtY9m9IZnGJVS&qtW+Z7$VgF6MeAkS6G1#FOdy{^N~oZkCfXE-1w!dbB*RG}o9QfK z1zV}&C{2Ve5A)Bad4~QZF_!7%v4T>nsHTaa6`r9h{fT2NndC8#Qp%~OmY{d!jIQ(| zjs!B9#5@Wqr-E7<2q_5*gwcz>B#_J`aww#P3U<=KDZ<{h@AM^xWKzi?pAy!xll`0` zc%^6PMhpe3>^qyN;wWe6@_tyL2hogVG*g+!3bwMF;!nc@8`jE+`Yd5B8`;lc8fhlH zG%V1Y;UtmG3}&;E4eaGGjWiSfL0I75^kWFAWKlpNs!EYG@|>BX!3h63HZwVzzLQ;4){6C`K}o*_5)08jcdY-X0Li zaMGB}eAcp^T7ov%2l_CCRI(_bka8+HOz_9XCW_%?Fq!$3P(d|Kv?;e9dee_lOdyY9 zHnE>3+JEAV5=|Ui?RVi$`P!^bybj$YhjgVs@uV@4*{onIyJ_SMC0o>!=d+l`Oo~~{ zPWE$(_S*HJFA0A?!!~x)NbqO!NH5|@BAb~MQ^p?ZXtmXv=}ipDWRk}sHn5#~TIl?_ zIwF=tCXhoRrEKL8CumCFl$Jq9=nG!!#CB#vYE-ZkzFmC56e% zXDvHvAmmGVr$0$#Gl$h|r=Hf8=0-FlnaFHbvW>$8eU4XNfd(^!vyjvW(zxMAmn>>L^N?EkjYf$u$l^LX`%B$=Ya&$ zn86%YvyuJO)9MFvCz7G0k;5X&*i8d%4jG>)5=dqeITTXH9_ncIqqWhK^g44^Hv<_> zI=K{5P9=3Tu~yre>?ZCPf4#y%LhIG?Z)#agC5L&eWhb??K4N}EFp`PPpomTErh$;7 z&OgzNB#m5(SVuKYwE5Ni8N?{k$z=gWY@(7nf*SNmPX>|5rbg$)oKu)UK82J}!A=@z zt=;8B5Kj_S$E{mzq1`cOjwljIC5L$wQceZ6w9whJ-HBy5y-pZM4Efz0=}Ld%7|T=^ zu##=;CI6(~JI|#ui5vNn$M1S-?8BahMZq zIpuE9&q7vF#vTsRLYVJ+(VryJ{*KLl2gEb9|I-;Hnt_Zaom>hjr;4LA|NZ_i>+}3P zR!~Y6)ilx0_uYvikug-Bwm$I`AuZNNB*PiQGzwTq8Cy8WDZ)J4mHxyN*1BV$UOYkj zGtMD>8OUfdnaToIvW>l*pmm_5|2})iKm@VGlg4E7DWsfAYB)t`P{%+IVo4^O0#;JN zAzBDOt7D)yQ6w^fdDiOX$N;k{N!U=dCS@M8+_U0#;E@HAgu^mvhaF zz9cY~X)L6eEga-H?b;ZROk*qw=@{rvEW=46n;E2C&@r${tfY=s=XVTTMihxmAfFN{ zs3oYazUfMTDyXH2Q2kv-MEj2ZJL%TKDk`a?RXg7kMIsZ(r-TY>X&~f6pHo6P)zr}v zDu4POMHU6DqLMmVU8H}aNMr)}l(3eaBmvs#EBAPhHFqH+Y;F2qx-~ZYp@eE!5 zZI6gyDCtaM9xK?&UQW>dO6}>xC?+zSC2V9ndH*q|tBq%jA~vy`MuK~oAH9fUEScm{ zN)?AVLwkMnpf4+~(}!3?GvPhe3Q?pmnS4qpqx_nVfy-}jCOo&327)5g09}b>IAfSb z0fm%P#Zk`C{(5sDnvtY2gZY%QoqA5tzK=W-!%()Tst0pOB)_kDic`s@fK`;Sh3(YS zI#M6>W(cDg!!+_Kp^PnTr=C-U-Dtf;6USI4GMh!LH2y}aIK*+<+~jVjJAH{EnRIfQ zM=6`A;V5mQiM zVyuhKM9`lk(wM;#4vTBwTT&IGo3}Opp)6doJwok)g~Mh=T8V>b=7xyxFKB7qEYSwcB`IZoSn^Q9jnnLr-J zY+^r6w7=UOK@3S`Gl$h|U@vWlnj1ZcCZ061naOK#~lOi@!%?a8i=#&18Vj}shU<(InpzjEI zy-)l5?O%#}bc{Mlb1$aK6QPe7k3I}#6j|g`LK%a!zl^a2J?h+~t8uzLW=?d@Fn6Xu zq0QqWvsuXo_EJylO#4C)Vn`;FJQlEytsJD8u<`1Qfut~rJXWxdZcoXdF-xdm5620b zs7C2d3`t}$n-aEikY>W4v^Js`P6pFhNC~~3v(LtfCyi|8u$t}cEobQbs=uxvjxkJSKBa7@j^F}wrw{R@GM$C2 zV<$&x{hFN6m*J!{gF-g2hekr?s2`$9B$JsGv5{&{(0;D_jUwi}A=<0>MdmG*i0M>s zb1y8lCa-r>Lo=-w%Q>BiAdaz2WGV|-!B(m`N~=Qirze9LP6jhr!diAxPwThkn_fgS zlCex<0c)w^D9yB4V$Jks2&2fNfD*P8tEnR6)16r28Odm-l1mXgX`qGH%j`MPB#_J` zaw(#eP1JCdHh+&pZ~DCusk^XXwj7Mw3Y%3s}ci z4$(;4)%Jrv#E?unSrkynDk`a_iB@amh@M1|$QUM&&qB)B!a-VSSE|N{B$gC1n8|#K z*}_g5Xd&bSH9-XNB$3Sw=CGQLR8dV6t=8H*dNPPaQpur!l~izu7Q#PNa|~iMlbOeA zDmhHhIyoYOA&g}j3s_4P^|bm(?ule5Y2>hoGIrBIn=1lKoZDgDhnuL6V)`)%5#^|leXXTmE6#q zevBfO912)PIn~tBYP*`CCs8CahAavwVja6V%qc>4m^(e`$4DlSM=_h&PZRB{)DJNv zk;QCE*vdhg3Hw@q3?zlg%wP!{*+~N}blYYA`}AwQ5yX>3HZxelYPNHbB6OA)11QA0Cr4)|@LH$xaj7C98MicRe1FsBHqv0wCL5Ti(EDzhn}f}J!F z^1b%-WDtq8`oZ1Yr5`Y?o4vM697W$dJZ zpr6fw2;xa1n;9%&HI*DDs7}B1A%>x(Gl?7uSw$sv1pQ)c>zKqm#vYYxv5YNjr=C-U z9kEvWGL&>CF^?ivQOO<-(n6U2a>%EIGWJl*aoYWAZA21F3K`5~K5N;+P8w*Tb%VQy zUc@nyiA-k^E7`_gP7wT?dDDYF3}qBq9>-B?04$EhT}Ma{8?>0EkRZo~{RmQBo~+Zpo_&rs-fJiP+p{yvLy#|p0# z*-1oDcp$1(c%bN<@W61A7|Ug?!vovJ9C09fSxNS};ej9yQpk!n;ej?xI8T3Kc1U<& zf!9;d_r2GL#bP$lvu${w6|0Hk@(aQPRpM;19}TQxQ@ij$TP`DlunWTj_2MY8H|xme z()Q*do*={PSh|OX2j+>j9l`@cy>1(3ejTkvTqky=ZMgShKe0RONMZuh$s?>&xIf1a z4~!9`$fHZ=@Ia%OadCK{zt>y47|ZK6mzcZPgZ?i((97#gapa}uCDw`4Ncm@YpgsG^ zCG|47;1si&|1aw$>T>HB3&qj&yTZ6EAc;&a|F?XKd&NNvz0#hrj%-4@%8NKk?9EE1 z6ZRi#66+b`brkE!qjxvYh$F>1rZMpEpai%zg21*$;L`|`TRD$lZhhmO+8Da7EKpZ1Rk;g&S(r2jpxm%yZ?621e z!}aO)z%Ix{;dP2wH^Tl9lNcUoO(`j~u#@6@)e1ey9O-O{wVYy$_wxz9Pu|3S zVs|DpmMV&9H%fakPV7T26X@|j=T=M=hf~aK4pT*Bl4n^+GW*#|&->LmX(Vung1=us zAWzBmSe(cV=26Jl2km!?zDKJEuOlDQH^F1{El!})>+VDo^00oy*<0ajQ-nX}o?|E(S&!|?;e*kF_}r^v4{<9r=AnE*RC5e3}x(iYZW(9 zLnFeH8j&kA2}?cYJ$GRN)B;`_CD)DABK`j4h1AVDYxP&f}e0_ z(~CHg$Y3T5DWj4a8fiOGd%6)r0+~!=9;>LNnvGdLH&zaXl(LmWoS?n$yU>Rrq>@Dq z6Q8o*Pn!oT*f_~OChnwxAnz}sEBzVCM5a^wj6TFVnh5p&-}GY;W0=f*ifKDl9wv)) zqb~y)%|xcNh}CRlKMjOTF$W^)PZATE%_3@^bsqE`K|CpBFq4IpQAr)mglm5pQ4A-8 z$@G8DeImA=CTH{@nt_aFBC}b*I;uEIGh?Q!PtT{4MFB-@qLMm-w7G=t?9Q=XF^?5& zU@!HYBJ6oNrx$S~k-R<4=*g|KoyAw-1X-sDkD`|L9ozJj; zTt*Z_NM;gwEMOhm*v~0KJlB<8#4(zw@aC=y9!67yI=DODWe3~gR@PKhFsF|2*f{H?o;3TkO0)aREFNjzy} zQ$I%yi#0UU*85B8OAN_mQ9vP^<{5Xc{J!R8m7Ttvq)bkqjq=`q!=f z???-sz3)ye@uV@GMXcoL0%OlNHvgs{LrG^UvsuDMc5;+9Z>U3h5l0f)%w!>DR8q%r z+8LuO{fQ@Pp_+Qre$tEnB$2^P=CGP=9OeWY-g3WsZZz4z8f(NA(d$?q=dXeHNDt9M-QTjV=URsUGMAjUA6`4rQ7seCQ5Z$uDF3Tez>5gXV>?;?F^-;)@U$s~_?lu}6@O~h-T z&Kw$+8M|1`GiSLuyyJKDU1P5_hxdHG%G}@A_Zo93Rlgs&4_LX@dH&G%bX{kyBr=f# zR#Qa-Z9h_b3}g(`DP$uxw9utY{gS{0X0wXz93^DEy&{&;Ok)w{?5CN|8~lDVoJ{gr zNhS5P`Pf{EA%&?dWCPWlBD`F_8A=9ul(3CDT7M$f^e36gETD|NG!eGZo)AwuGg(0e zhiUbxdzXGBF^T!CV-F_?-Q-L#gfwy~W-GM>Z+7O1W)#`XV=cQmPWvtPjW|-7K@nRx zM9^pUlPE@##T-i6Nh9sHs$~W-mK>I_iG!TslF#iwiAP@i=tmfm-7BQkYCWC6rUeAx_YGk7wvk6hlZRlj+Q1H5=GV zBW=G`GlcAuZ*xo_lS#~D6_r%eO`BLoGmS+|sx}X?f?65~@!91>6UV3;XH#6lMs{+L z7TSGhzCp7yTJd2HDJECEM6bZJjf0 zE{(K3>^XW7M-ti0q?j`HP)Dnuoj1DCmpGEhU>XIiqKrK>5Mr#(1pne5<1)GvOFU^z zXAvtYII3>M*7f#=2x3Vjl}Y5Whz)G#AT6{zqJMf5Lo%u4u#hq;C_Uz!7-s`}si*a? z=1Byxq%eVe3Mr?Gqnx2jgZ*J3Bbmqymavwc)Y3$o-_$967|LiSGK2XPvxPkzr&XhM z(4AP4$YusR&AsM?y%U=WKW;zhO9ErbW)8)aQAr)mwEf+F(~CHg$Y2@^DP{}%IYnz@ zwb13HxiY&+9Wm_>{n58s?f)g8;s*9oPivpGrw1`4lTJ>HJrH-&z$wCf)`Nj0u!Iw* z{eFs-)X_}1&$QQEZX6zD<^1~QU~%wP#C*~THx(AKk~&g~S)6$@C!CTeITxOJyM zdwLMfNYa?WY*wM_cX`;<})okXztYbHa2|nN6(2M>gk-;<;Qp^_ibBfmb*>pjtK)yJiwNy|` z6QRDlgh=8^Bb(3*tyQe2bvtV%f>=^WV+M=Zz&3h$CboSi|372<$pmsJq=X6%(n5%K zb1v!>7%irg%L3N1jl(q3R-1p*k0F1*?kG=UIn^AcO{l!mgJ|MOVFEc6Qc4wvI6>jv5-|%vWMe@glS6zeZxIt9&wB%n>j3E1G{PD42jxyzt}#DQ(3@DHnN`v zLOR(4A{j&?6Ubo!>)6JAP7%`CT55DHqGv(x5F5wz(<~|Agt z)lq-jc#V(w7e93WN1V;2+`u2dk29>H_yPas#9yj8=WsDsaVvN8I8XCBAMp(*djHO| ztcmyl&+sxI@G0N&BhSy~0v_c>p8u77A%4PtIeDgeasgLz3wQAt&+#fB@fqLo6YrnP zMZCjpv#o>pHK)#!i*vbz>$#nWc#2nfkALtrr~X=dF5pUT;ZHowv%Jas+;_G;rk_Xo z8*lOtzT_m&{*Uvyj4$WdTjKM)!KeJ2Q{4YQ&gT-Y=T0{8SI&>HR_CZ0XLAwPaT^b? zfo;6a=X}kF=Q`isyMaIPFn{GW{?5Pnj>+2nf{VUy&!4!Lch0kx;&)7*>zl`AT+1EY z&*MDL+kDJ_IKg{AY8+d_t_=JCQ;)V7cXLC8% zaVPikBrowk|KPfdd|TwYj@!P^$rHTH8+^)t_>p!${X;%~giM|{I6o}a~U zcqv}(#K*tC=50RbKb&x}xpFp_a~-#F4^Qv{@9+Wt=7)0qf^+%s68FVV`GOz#`6ryq z1^k{r@*t1%#HGe2e#hkb)`QEqmRq@-$9bN&d7rO1$$LNN9PYo&_ep${kNFQjOpuS? za2Ypp2aoVHuk#N7^jE+6tWCwu>woW~8x_LcZ5AMqt8UFAE^ zd0fg>+{)cN&eOckM|{JHa=i6B`$>F&4Q%5L-sKCv-Diz&m`zmy7*g^zLQc#Jz0b8Q$OnzT~77^Wj%q!0)+*yLgP}c$JU% zk{@1U|MMFz<3{e_VV>tTKIU^yFox4PkBfOH)%(A9hWP~-@jGtg9-iO@UgiV-$%)=M zg|oPb>$rt`u2VblYfimZow$H2xt_ati062f_xO_kaq1HDXltzbE)L7jiAPazBsr5^wVv-*H;H z^UklijBB}>JGqw)Y~u|+;4{ACwClaYg3- z%|-l<+qj1(c!oFlnE&ttxt_k!n8XKpiTC-O6Wl+UUveSWax>d*mP34(FZh<9EVI5` z!ZqB;Jv_n-yv`?l#mP6RH)nGJzvmYI#KZiR7x_D%@g1jS8V471HGkyKJjx5a!$+KO zi+y5zAMp(*Ew>Jw$5mX*9X!Nyyv#{Ce(!tlEPli9xRKj=h^P1)@9_`5=F}DTD`#^# z*Kr$n@fgqX79a5qC*5isoX5rdfj@FD8`#Dhe89gsG0U9!H5YOPH}hxi=V@NzeLm-F zPQA^TIGfA4jyrjPXLy+p_$Mc3`wsC-F6Ihu<{qBlIsTICjH}JrT+Vge$pdU)8*lI_ z|K>X;-)_uY$hF+c-8|0Iyv|2_!-?{L_b2zo7kGzH_$Md2|6_j1#azM7+`|(*$7lKW zQJyxO$5q_GA9;``d7iiVnE&v@JIsmSa0%CQI}h;`uks#W@(riy<18-WcRaGv9=p>X z=Et1F#azX$+|7eL%PV}yKlmR%_U<`c$l0sZPkeZxrICVw!qqP3TJUX*Kj>|v4L&8#_enLdyjL$d0fQ}+{p%>;SJv93r^7f zr~HaX@Aa(^ALm)# zjo0~Vop~DLi@e2We8Xw(|C|fCj2pR&$9RTcKVy3#E_&qmpH;?i+UgwfW>{I!#<|giC1KW6mPx&{el&Bx)a|Ji^XYS`|UgAyu!PlJd zusz1vT)^+Sg*(~6GrY*(`HXKkt<+iIH(bdr+{vwF#%`RqayO6jJa6+pUvZK)Kj$3o z-C!Sx8`#Dhe99O6z_Xw7TQ22>N7YVzj#v4JFFC2)-se0nbVYW6l%ja}C#X7aQ2dYy7#|eSO}- zoowJ4-rxg17|-!4AMqt8J)u3n z;!>{SR_@~|Uf|k|-Zj?0@*;odGrr@rC+%r2y*$Y_ z-sMxi<&>xFQ+~~5T+1EY&m+9R>%7lboKWMeb2b-o9XD|=kMk05^3$iStG+j|jW_s| zfAf=C>&hiu&n^6gCwYap`M+nZr5u-VEq8D~Px1=y@+sePN}aXme6Hbo?qUPmc#ZQm zIahLC$_@O9hk2Zrc#kjnFE4EIJ6HSbxRVEXhL?GVfAU{`^sG8?5!Y}#_wiR=xX>J51#i8=3K7i zdT!?-p5j&B;}ibN$y@ym!*98oKk#QB;RRmhntJ#3b2InxD1YNsKH}e;qRnKsZ8InF zZtmx4UgCW|=LFAB=9gT^wcN~G+l@>7h;KN_&p+qaT*md>#RI(aqFmxv{NQiq%eh>} zjoiV*JkM+VozM7=({{+qMO?>i+|Sdz#QS{0e>qJ*zvg@{ZuFfIzvk2ieR4LJa~-$v z7arq9-r^&^;iQ+Gch2KdZs1n#=P6$09nNbqPyO7&oowJ4-rxg1<2z1!*&Mi#tGJar zc!cM8ix0TD*&dejI&SA7p5j&B;}ibN$*(x8{FckPi96ZAlf1(Fe8vCx=v8x-`(d8s z72f4jzU36p&*EIJX|y(aSL7-cn2EGHa*#8fyjxl(La#c5#Ri!rl%G%p{t{EM+z2Y^Rk)?-;9m zi&(}Q%BZJ_UIrPbT^J2rVSyZR73V#O|V7x!_TkaxoZQ;A{$ z%UDAh^)%7TAmh9nM#Xz!fnu?Y&2+GbBa9O6c?3x;p?$aUimmiAOt5=rFq8SDv68hM z{(D&9!1s|+!u>pp1d_?3h#KmN>@l`(>&P@>SV$TxSw}TZbTPnjCcPgPm_ZaNq_c`L z>S-bE18X9G8riI)nkL%W&oL%yH;rAra)?EgQBNB^3=!n{RAvy*67ngc|3h;Yk21ma znZ%OFGFDT`CXVlsix6fIMGEPxqKtZ47~f~zJ~BRHSjYl|0r`Nduj9Gf3bw-z;X6$P)5dLp2R_v!Aeo*43Cg zIY`jw_8(J;VgZ@tu%0^F*v-6uIxpUjC6Q(1Q${sSbTh~ZNds!)ope^Qp3UrFHv?<*kwbar;C;c2{f;Ll_$HMR1vy!wg%}qSSm_z2sT;{WwT#Be+3!Us|gmK<2 zI&6I3M=IDs2M0LJSkKQOnnbq#%lN*Jw6d2$#<@R{IV6xl4pYAJ?GSqzCU{UjB8VrQ z1CJ^!nB{m0#Z5jZ?zK#86nKiGnvmqR#3=Bw$k&B zxelu{XA(;?>8xTsRW!1bgB)Yr*XGDP5?Mk%#ZBO;!rL3leEi};0 zA;uWjM2;ObS8;@KuBS7PMWnHkQnu1e=rP~v|EM+5B(a=aO4vj@-BkS7dDA|UWHKnA zl&!R~mxBap8%`wg964^hVkhw>3%rru zk0qHb3aFxvHu^Y9u(n+%oE}IMGbyB;?X=U&0KwXXGLyLP+p~hXV@?ko5|1z@==8ue z=CY8bWV4QHn&@I5#|b&{^guX~B#=QK1yr$>MtV3%Q1I!2iA*Dgg`}~PbyU+t7Xu6v z`h(L0(}`mti6@;NNH*proosK$}paeyAp54(r*-R(7(NLB@?eJuroNB(jWb z)=^64C-aEhV2a>S&{fA%e!K2{VWyg>+U?Mm;U$g`OUWmTx{w$)$uEw$Mo* zM;RMp{=~6}Wvro$IvUx@9*!{Pl+y#_nMDk#WKci_J80v;sd5-cHCyPUj{$-`n?wZB zEGC=&Y4!_|B#=QKrPR_uH~kC~I^p!d8AOsy z205%}Bim`Gn?V9UIz2FfStO839&4$kfo}G4jPVn-C5r4x*44b$P)$8u^fJsi&!;n& zabdJLazv0sI;$w6h9-LHr!3q$YM($FD_KV+ z4Rq4aAmg;1_I-O6&_7v?#Afzzh%xSkF_#!p$zeTJR7|yxr`X5LAc_<+Swl7Tbg_@) zg#1)nqKGG*917XUW;)o%amMOn>;D`kkg<<`733nG{k*BOPR&sbB49GM9xcC6^Lv zXrYsSMhNrHbP9iA-NbUX)6RYlF~+m0M3KOO>2ir%=%kMUg594)1ko%en{`x@Ji{6I zrTH+Oc_gxgEQ%?ko=*B1rsgbpyt|TeHqlNm!;BE7%^VhxO7Bc-C+=i`U_VbHf@l_# z%{nScpXK``juQSWYeE94-lco^*03po*=u(oH}9 zq0+zv&Lom#GAN*!I$G#sfbQS8ua7cnXkj;p872H&H6)4@GAX2-O|;X?Fu`-J4H3kX zLJoy&WIOHjGQe@ho@cB?l0XJ|lu}D8-R$KU<09=j=CFVa3RutBD8C=g=Qxw*SqCCW zBAqOXsiKZHdN{H-iK&@V5lBi6x2UtfGR=G_!|8jEONfW)jU}ma~cq zHq*f#4lzR5h1wHM63fY@giW;5%^4RPuX$!sKowhQW)FuLAuLWlqFKyRR#VP)TFH)A zd-)Q+&q*Go)Y8gM4l+u(wlf%+Z;iwXwz8AG9A&~K_7;&OlR+M()Y3{fg9PN6!gS(D zC67WTB&q_uV_GiuL8kc?>*~KA72y=fLF{F?~0r9`{EfV`V&ZLFEHlI7;}}J%w;}H$z=`I)YC*S0~}>SvUMbuM3%9dN;Z+YNFHNa!CES5pq0HGVZ1g| znSYHvAg-aBdYb5EfZ(gmhX~?HCx-&6*h(vV8RQrfQ|v+FSU@HPRI!FrYv18#Qlsg#?RA;B83dHulKDIo7uwwMw#S(1hFhw>P(0g z?4X4{h6(j-3Nvm{7crL-DrsOBhd4%XhVf~)kQL-n%4Ry~VZS!hm_-7~WKl#7^)%mT zjN(}FOlFhFQdYB$ie<(q_7iYDj_JgZN+w%xGDfkLy$mwWy@|{rfedm8x!Jcv>}8nX zOf_dVu`FR3YpA4wcBU=2r@T9tg)C(?YpJD~JshOq7P+)fWEuGsQNs>))5lRlwVla4 z#{AJ)6*tjDF9QUxu#Q9!Pbzt=rG^%EbC^-WZ&h~^NM!|UsbmYC^l_NuOvki&@Sp*0Y&r_Hc+1LUWCo2;xa6he9^8opyQ|CiqY4NF)iQvVyf# z(m*SFIl}lnV`jyj@*86knG{ma7CPx;h>(2knL`|DWV4QPwzHFi9AUzr)l2R&YG`3M zhZ!YgrFs!X3hAt(jCxv_ewY5_iDChntYj^}Q0~Vrxb;Nh~3sV(Mt5 zjeQIe@_-r$knyl_%N5OHmQzFpJ7}SgVM4W?Lfa#1E3RV` zO>{B9amJSVMiR+law(#gR=OGF7!&21MFJ^gJZ>GtBaAY(OfDixCW8V>*-9(BIK&9! zHrNZyV-d^9r;Iup>ER$Fgq7Q4%x5t;>Vg5ujpQYqdLM09C;tHbT)3ZR$?(_)YC=} zLmX$4HnT}&G5Iy}iJf#aNZ={!%5>(jh-IvyjCz{rWsq@lgt72xYa?!?nO*E>gwVg* z%giH@MP##vYU=4?AIAx)b(WaJ0#eAKm^yaQSLeH@&wR?Lqm3Sh2=aU?Gl*vi`4kbm zNqxnjXS87s^I1wRB~;SDE)H>wl4pHKy_-oP@60PM;Y7M%^)GKs4)pFqmUX}*~bXs&CV<-#zCx%p3u$D?1=%klnf?rclW-^~NR{K2-NT`v1uKkkqH{VxBno zvD|yr{1f|RpY!*re)oI+4`XNF_wj&sEc;B&`_=q&>%n?v98^DXp}3aV0cVAUU-+IJ zGWRe2-E-L9_?NvYE*7%~jpr-tG32?pMvVHmT5xDsZNK*Hh~Jgp_?g&a)|)gMnEhYp zhJ&;mSF;go@;}!^jv5z5Cxi#4289R8DL64aFq>*R$Q#4h@IdGf!vp!_!UIL(u(*-M zCx-{ZDc~3jL&5`NLp@{hso{a$<{)PtrPR_&H~j?84i8LV2Jxhj zLm?a4Ob7co&RF@9&$XuFCfey`nBa551Cy9V0;%LuLJckK<}jm-kId5wGKp*%o6e`VGB*f%acX4+jal*#2fZaV%mP zYbc|hCVClUoE%{^ULx1`k)0gm7!%!}N)*Xtv5M#fImG>p5IR3RFq3GKSVBI<)X_)} z2RX*LOVx#W#F0iGrEH`%(O%L=1_hL|l~%gh&j_KH>6d60vz%3|XCuvYaDd}XlJ`uC z7uYA_0Ku2LPXzI#kWU$Pw9&-?{$Yc_6lRi^0yXb zisTq2)A*%yV%bNp;sFN(JW>ut0`wY ztqfli9!QjH5!tMvntIyU#}GlFmd z>&-7sy_rE2DP*#e61LDnABP$H2lHhH@uZMLAsgAwF7|Vj3F-D65hRgL7R6N2NE`b& z$^>INgX9dgTIvikhd9#6W)0QU)5SgxGxi2!V-_)_l0g9#?4XS!%jA)NCFN|Qon8hA zzR{T=f_PHMp^%MiXBYb!VT^p!h$4jyrevDSO(L^NWC{7Kp_&G|*-z-r`tr`STkIv* zu`D5rVyf86PWEz;pylerbmCY*CIwWnnOOP8X6aX4LpAkuv5z4_R@mc2v4BigQqCrt z=w*Q5TaA^O#F54drt4$uZE}ip#5KgTnW}7iNNg9A|7d@TE5*e*_M%uIR^INLBesdX zwB2dHS?2g1B^00&pXUv0cm8jj%w;@V;@5V z-Jw3rA&xY%Swl7TbZ~$pjLDauStO9oDvFuA%GorxBaC0E9Wg9qDXS@A3oZ0R+5Y=FrL-%86QQ%;FAlDc#H|HpcsnMNHz1b=ry>X=WFP7$Nil z`<`ePvy|18vz=Cg)~l-=31pB*DYZ1vO+SGLeIJ<3JQlHnwUl#)JWC()jLj4`gu}92X9OjHNVQJ zm8_$hCb}44n9%Rr6URc1v5Q5G_8>FaL(cctFYB8|l9}4%n=dXCqv@rP1Fze|;wa&- zIHM$x$_my}NdukqbCj{o+B1WAQpliyQfg_Xn?VAv+I!3Llw3-vVFw-T;Q*tIf6ZKpVgZ?~WF4DmqL=-QFtJtri6OboIGO&2eJFN|@wB$v z3u2f!g9s+PXRHw0eQJq**ZPr9IXmcPh|pcum_#xuqLw!HGs=|r%!|e3QO0(5 zGf2p8^C5v{6jDPg`xqho@4h3XkV`4`?BX!vy3LjOWUz*fw6K@sguU;Kv4|W>*h&|N z7~5m5h-WDURMSi!$C&hix|2*c>)FCi1{l-pEE7jMtEr-iJsf4?ht`~hWU-FTbaIg3 zJ@zTFq_K)h8tLT-6F#!fNMZ%WY@&mHg8F)}MuBv5w7ja**JET7P0mV-=M&(#sJh3|N1X zSV1wH=%AmVFRVW?EMX-TG|yKZ#^g zL@jOXXOt=bvi>Y4k21Ein?XVb&6By*Qa5B?Uun;Bil|^S9qi!< zVMa(eV$SZx9JOAq=N_}iTvv)q@E^hrw23Rl862U8?&HQy{kQgx*f64B*UkU4CtXkf zPMuvB1ttgLT{ntdqy=%QBCkKjL&loc~Fw1o$$z)JKDYdlHO+TZA|3G^ZNG6LS zYN#iE?Bu|FITx~m)l{;D7P=VVIAc$m95|Cm638HnVrpoii*<4?Wd~W~CI>pj=#a^Q za@P%F2KxvJog5ezlTMu+nCrSz%p-36g~EitRn2^lLLcdiWo~7tBE{Qzv3P-jh(-k90<@n-Mq!NUs@;E zoiio}4!N#7%e-9|&YT?B&bzcuB*?U?4RlP{yF+~JuSlfuGfl*1f6S5 z#Z}@=vgXU18^l!{ zrHjIg^iKr6Y++uU{Vq0(DTH4y2M=PYeOt$tfrYo zm+G5c)N)3Gafp>-0uwK@j$*V}mN+?Z_;T+qus@k_h5aGU5VM(2BkSq?{yNDufh+wi zCW|vTGkJ1grC7*Dn%Tn<#xJxdNg#s)s%WH#eH^FYD)-sSPWF&>opD^P9`dKNoLow% zq?WDhha&_nvOdfrffRBmV7>k;sG)@}1~|%u6!j&V zM3#|D3Dq>wNjHOx5O&Svz;xnR$O`f(Wi!p}WIrQ}TdWVFNhE{SRIr^c4ifmiJ;Yp+ z$Yc#wG}6J8bahbEa<E|dDt~V#P(BPff%hWl`7{&bzah<Srej2A%iT6si1}yx)|Un6EfvyCi7WD zHmj**6YX>}$Oxe~dxzO1vV?q!siKjc>}8O#%biW4Nghl&MMZknPzsepJ9UUFeW01Cxsje*~nH}>878f zjL)}r#FIuorEH;t{Tye~o$?aRVpdZ^HBEFez;VW|^o=5tWYSql8C&V(03%HLvo#=& zG*+ytjyKR#V9qTIl02WAAr%i6nsx z@+hU2R=OEvgs@`Y5aL+Katf)YksgLP&ZGy_h$J#uLp592`-t%xV+A|dO&>>@vfl3~ z5?MwrLl5b{Twd=5m)Q$MkVHDGSkGpf*~1}%H)zXD=ChR5lu$zpyE)7#;rf_C*al-Il4LR{pqM(^*vAkd-VLYi73WRt-~dA$XHuhF z#FE5v@+qT^HhMTn(98B5bBH62Y>KI+g+7iFXmZAgBaLjw=Y>#1M|ZFDifQ3CDu zGt-&NLef~tT54&an|_Wm;Z5@)l4LT-V=a|5(9K?sF}1_Eh+`31tfhu#dKqHeTk;aa zVscnV9j)|ngwRgsgL&k>ZLDhC`M&RwI6~Mib0LOQ3aDZ$JK4kD_v}0Gg!P$kk8c)* zlu|__9UNeYkPoaQk;Icu7R6MsgANXGgz>%pMk9s=q_L89RMSKk`#4U>hxR2=EFz0y z>ZqrSVM6!V8$^)A5*B}IT;>tW67pF?HSO$Yn9z@%8&=SE(3*L#fGRfAK@UTW629M< zh$n>{3fahZcCnvfLjPe+n9D-)D5aJbc5|5H>^tB+{fB&KO%JQzKkWs!&`CFYIY`ie zaS%y7Nh~LyGOB5!n?Xhh`$FxBA%z?Y*+?Tj9AK1?L*_^%3t3Jf)ilvbFZ&r`+?T#n z%przU@>tI?a|!*I{mvX>Nnsh;tfP_!+S$(_;|7hHxx|si3f5B2c3RoXA;x@V3``}8 z1Tx5BJykT)!2yN{8B#|gi6@;bim6}+9UR~YWBzSS%q5OARXmP)aQgbkfHWLXXH#981Wfgw3?Gk7G>u#@|yUkU zka1(D`0p1@@!v0+5?DkUE7?dhJLzYXupdqdM6iHm6i~?)I_V|iWVwv}j2}-4)Qe5@ z(obN#IWd!YEMh6ESw}hBX=N{m7<1Z`z(nQ{Ln@gRQqCsY>1BYR3Fbp23t3Jf8)>G4 z1C0HVIuS`c>EZGla{?I@P)r?N3~-!DldK83Z1T=(#-AatxSPWqXVPTth$V^TVJ7{;9{IU7U=A^)l1U-uY^R-G1_(aWIx~~`EGCyV?3`{t%Nau| znG{mWR$AH1L4vfM${ZGuO4ba0h{J^b(poc*L>80FYAR`M7bD22LeleZ_g3ptS*+jFLWvrouEws?bVMYm$R7YZ1$a0D(VGEt~ zag^ZSSi9ejl<;VCAcj;{u$EG`vXg@xW1{z_QP1`m?I^m?xWv@hDS=woNf-HE zxQ>gH%XP7sPB)tfzu0#`tP|&vL>ie4(oST&@lwhn2B|0K68FiPuf}36+b?xC{5&ne zI9x9mW9eWmk(b$DVw1RtNs0EVSR~Hn0JQ`zx4)UnGPY94xCOp%UM3|O zmpE4}A(^f8Uuk}1FLd4rV+IlA{LZ>u<@cKF3TkMfivflS^?W*UEMx^M*-vhY8ZFYF zJeAba$}SFZgz=uwAf9BhSj7S6U1NX9QAZnH3=nX?ndPintma~+81Z}OFkQ`-ObKju z-AOllIYv;bHDMAFB$3TZ%Bf{5JK4h#g0A%rlZYUeB`l|iGU{oej{%PAKX9G(U^;V& zA(c!DDQ7#a?Bx(+((GI2uz(bDs9-x?93ULlGU zGAX2#GrT)vnLflCTG-8DMhU;cnInM|awwpR&2-Si5Tk@=*vBNZgnYKpNgqcEzR@>R zpZ&KO*G>8-o@BCEMG-aB)5SiH6P#(xM3cmF@+oBt9UNeYplnuHKV}d`3hAt(g6*`k zpFslo@_TP4^I1eTtEprY+u6lljxp|!)|q)MVkxUx$0nNSWq{xudx;35SxhcPY@~@E z1{r(1Zw1k$kV64ea@EZ^^N3!hW_PLqYp7-m4Ro`g5kgm*6LVR}3X0gsc6PCsg?HPh za%ND#dN$KY4+j_}E*+A`pBn@8d~ULfTIKo%#oSQ zXA#+~rjku;r zEi2WT1TrX~ibi@EBII#(Bc60tQA7?*wryBAeAzu!9!*7$&sVcZg^b34h*r^cz7EOUS2)8tUny zkD~a%~_-4Frzc=~rvw%!;SkDf2bAVAo zUXkNfV|hcr-do5DR#MI;+UaGO&^F^_E~%_wE#-v2ei(pX6$8|mNxM;PB>y@@7;Y}QdpbaNs?qWD@~GQtt3gZk|arzBuSbiNzx=qk|arzl_XzT z$x4zWNs=TSnnwMyj$fJ~IIvHf14bBMs zFZ+{MB$Gukjr20a0>|8Nf6cw5QA9mG3^D%~dQhwxlu=6;1I)3?F<0FCGxa8sHZ|Za6$)cQA1{q_8bAtX{j6{<{J~edGPwuWU#d%EdwitLpD&@5Djwu$Y zaewlmKKW~B60szaM=8y8GR7=xoN&$kJ#{6CbV{kCjbUck;+Px4|Hc}LCY>CrXs4eU zHaR17-`FIQLlun_i1mv5e{Vgs{=0P^>1AG!MlKaJ(90-utg+1{LH{5YUXn%*h1Bzw zAtqU8j~had<%k$E$fuSTIv8b!Ee<&&>>uqvKHw#3smfP>b*dp=Z0BigEMZ4`oHESl}yTMWq?_>I49^%j(Ew8@g9b}7sv{FFOW|Om9+7W zDHhr1f{2fPFYts!GAN^#F2z&&1(Odi#=Gt2^eoHF{sdw~t{?sCojM`}p|h1Ao|2-D0z zelM`%nb)7A?w_d#KHYpDz847NKG7ubnheTlVVDWl*yV_z&oBlrN#HdZlu=6;1I)3? zF<0DsCJ($ae=?cmQA0ERjIqKtmjpexE?$yG9_6(1jwzNo%KE(v5) zK_k74P?99?V!q?y7s(^Zs>r<-wBIOL9~FOz4|DWQ>f zOtQu?L9f-8mrRoJmCjOYUgwl6?tO*c<_-DO(n7>nS)2Q7=wy(2);J*~-G1UFSya$S zFC!#kMM5tX#@jwu$|=ZvtgmIq=1Kj? zb~zy=)49PjQpl!~Ci<9TodYh3{2J#tv80kqHBIy}&MJGHaz|8_`^hAa8hROHmTgW5 z`C9k#f>d&;qKzTu+2N9iY<)or`P9&-D^b!f=P)q|oOt8ukfp2s#v1Cw66TM8a!9G!idO*$=%dE$B_#+>)&j}&l zVm{KyqlRX-OT4$fQ?5LBO6a%AGp~31tGK&(+hz5DRQ_PEdn0i)hj*ppItx znPr<3f`7oh#Pfy{s)_z#YckI)+Z=IA_z&uB;>eQ7DWmZxJ>&i>?sbTrWU{EBmM+FwWse&| zJ-6AVrmmALvc@)-1a;~iqDiNKa$4zTf<^YZAmXR=Ik99?P6Itmu*NPge#ZUgy(Q|W z^#MubQ9~<(Oz`TR{&0U56*SVz81w9MMp%#B63-j5sicWM=Gftw;GY#MFGwYqYMMwl z-{H?$d$03^#$S`upVw<7l0^~aw9?H4^Xzg$NT2>Dnk4clrI}88nP!Ot&bi^iFQ^^K zWKc#eT?{bCD#u)LuitsY3sT9Zk_K8CWP&wzxhCuv?E~V;ri5C$7-E_gj=1LjfcuFj zl|t(1VvJ=Dx#He0iJv5LsiKV`=Gozrh(TuzDdbZ_Cu2;r$qnJZ>^|biqL6yt(!&r7 ztkd=@^7@-D(ZZTpH+Lghlqa=H73Mom7gbqtSA#MIm)` zF~%|n-11=6y}Txijz1NPSlbz4noSNkC;U&uLL6xnQ$r)Y46(otR|K!?8(xvf8;WV9 zlQCuq+4Zrx7un>9D*_vy=M{;hQbZ+fykm+*_BkW$&-5X&q)rG#i`}@{i&tfov*hq?Zw@&&^{^RkYK~G)ru9&K(cW)RHvv zD5jCO3^B(J$6RsmU(CxZ(kP~ePWmbMe?B(%D6_1w$2Fn<>U<=I*JM*b9j$aT!92U1 z5OSe6h$e|VN~xlqUWQm;ol|aj@NasDWHKnDmL~cbWtlB52wciLFGwYqYFZdzk|nk| zA>`ln8L_02NjVL4Fu)w^9B@g1BjjRypR1$d7s)ctRp?$fkfg zTIr;hX_i=Lhbw}E9{cx^9|z*eqMTL+8DoWW!av%5B#_1?J7Vk%HRs1Z4qS&l_H%W` z#W5E|_}nv6$Yku}#7SPb`&?gr{Nq5akAott)yG?|Pq<|D6CMXXjC>rJc;EA`>6B7K zC;iN_!V#B5exevjAdOgZ;IMK(Ai@X7MWBjQOVn<5%$W0)xx+2@Q~ zq8>aBydaTWN@(OAldN$}(5D!mI5H`tnLei3;FORkv6DbH6|^$IEL)rt_NnSkEQ_Be zx6k#O`t5K<@DtAcsQg z>0*dU*4g8n@K0AyV#%a{I$9ZIibXa!0^vVHaX#j@Xs+1&qyJYa_Z=2kTF)+=8Ujc@<=QxWKvEY ztqd~38oQhk_PL(n87X8^P95D0GR6wqToM%ROyDJHlo_@-BoJe-@`6M%D5Q#Jx*2AXEiMTDe0e5@Wb&z?nSLf%WQ${hWA!#Myrz&U zn(1bkDKgZyOWe&LI!58We-cU>fJxs95 z5rKI7idZrzrHNjqSm%V`FH#@k$)cPV`k7&qbHWqMOANV`(Lxsk%(2QbSKRwzYbTiu z%4ngF8MZj%mZ(H=QbaW^^f1W+o1Ak;)R%~XbV_KXml5v1RBgXZzkc~+f3{v8zS47q zr;D8!-cUj{9rQ8HCPxH$E|P23h|BPf{2Cv-ZgWZGSF00g6w^pA(`<51c&2w0F=VjG zIYGvH%u7zcPVcz(Gs`vy-0@+S+>u2E^#pS4!900lhpex+7fXFE|FNGvsV7Jxjbf^3 zrt zn(1VeCHA@DexZ0sqlkLC8E1tUDoogzGtD6er8$W zh)eExSf*CICX0M(X<>kIX4vA8z_&SXctIk$lu=I)lgzP0pxnJYB92VTXr_;8HaI2Z z+tq^vvMHg74wk<|4_eQ&YUjca$o+TA5m{7FPY**Za969=u4h~mRHN^BP7I0UQcXAg z%(B8J=iKq|dptu7iR4m36CI2)!xo1G%p1X@?^SP7DWZ}#-Z8}@`97k>6)MJm)o86jDz+y-c&f9#@3c`<{qIa;W4jgUqqb1rgt`4kYr1ydRTW zIUiw$MfN%4n){8$C5d!OsiBj8W?A8gOYV61gJS13SyWI@4?`@l&M7xMXmUTV$)S{H zx*2AXEiMTDA@LJK28C47PCpYYvd1;|nw>|aQb-+LjI+uX7exKAo+ptkDyXN25ti8G zoS+sxKpdHr(M%sREK~X;_LP8|tRPvTV=Gfts(4UZhuEn|3X+1xwC#a#3UZz>$h-<>!_l$V5 zDdO~}tk3m~FdyG1nly^3qMcq!x_q6|pYu7_9wu35hbtcawDEaE3Dwm9jC0E~d&Kp6 zmYrXAw*0*M@thR0$fuST1{i0R9S#ZfsRL2Ol0pIHw9-vKv#fB$C6T{iZ<0V7#njNr zAoFZ+Mxb9Vct$)~l+!{#Gi-83=r5`liR4hpTZUL*m180X^goHb;pkV@L=J+6#6<$H zDWrt~CRt~X;1M;T^mn|E$9(PA#LF&61dV#X^MEHLl1m-U^fSgZn;dXQ_^*40CnWNQ z5~}H-j~SLZzr~!@VL2n#T#-dqMTN`nP8q>P6+u; zeMdA&q?7kxvD0>EU)p4b`cGQI^@@jQi8pK?((w^YC}=-#@gL-`8ui=A@2h`Wa!8Id-@r z>i6^=Nu-lQ6^-;V!X$I-a7^%=eDI1yaw(yS4*JYL%px0{aZAX&xrip6JZfmBpD|Y0 z<(jZRa1Ibp3I){B%`l5>aZcER?<+|nmnzyAVuAIKSe9S;silhn=2&HiD}tBw6|Z>!vMHj0HinpIhf5+?#luU|$f1fxdYNXO(m!?1 zSVt~Jl+#Kly$rFy9)Ukm8=etM5_y!;OeehzvA{Z~-0)ysO-Uw$GHPite?Q}_u}5G- z{5&I$ObV%@i5`YoVvAF5dGKeR;WgQmP{SaTY;eFW;hXxG7}Ch4iY9s(W`-3uIp>at zf39A0yWk*4g2T;4MAKE8dVxHBIy}$`l*yb3w#k*eg6Eg-pt+qnknIS>uFj zg0|J0m!y$H6^-;V!X)eLaZK=E+WR~ro>Ypcq>Xn>vB(-HTyuX%?nok?Qfla=pIKHo z;*!X}5*rDmQA`!>^fSvEyId2tYwg67O$kkO(Z>v{>~KZsU#mUOc})&gG}Fxli)?X0 z@SZvnM;dvQ)5<%hSZ0e0g8xPhi6NPMDrlsaF;>{+ny`K62(hG6N;BO|u*eQqg#N94 zK^$3B&`2j^%(KB6fdjST70JAzgj!nYVu*QmxFq859$VQBMy;OtZof*M$9}XGkW4Vj5|upIKHo;*y{fvG9^4@+hU5P6nA^o?T7|{wL26 zPZs60(9bMu920b^Zp4vE8O`)F#xe)o^5CE4mvr)o`B%C8cYX37`sG$FKj!_wt#?nz zN4+2TfN0XmqlRYs8DoWQE(r>H-|yeNA9zU`IaJX|FJr8*%Nb!G{eIv+(WFyA9c>IT z&kmPF1iv46P73+d&`CcDVebc0#hghwb#ybx1Z(VaO-QIU5lbdTG|kSV+?)|`rB$GiIwRADS9IG62#l7(N15Zfg4JB05K_4?L zbI1h|AMg7B;z^~5O4{gVf;CRKB`QM9#FIh+<Gs7ll zght9AiR4hpTLzh9n+w7}QN4&`j+Rf813BB`g1`f7;svSXQbH3Qj55O(hXg)F9(X}K z*%Z-08^cVn#t}hLdW&e1$fJ~Ix*24GHFmis zeZMbdPmo779SktXDo4hed!~;*)A-Mw0W6aLS?ch@8hHKL`sfS9=~_-JgN(7lIpHt$ zE(xTO{yF;d^L#DN8aEVv=?CxFIxA4-!KL z`P9~c-mSIZ&sydj?o8hOhQlPqz-C6Sr$2Obhf7RA)i$sluVb3ypm*qXvX zv%oG_gl1VMF*IbW;rAQo>#b4V#+YV-J&w8HmZ+~&2XZK+p0{){&Kx@&bHOc9d14}k zOv>aYf)8g1*t-;w5S1P(>rXj4;VMd)yFOD9^-@K|Uok(ZMJ)Y;njLVc#TY z#F9b*<+Rex1oNzL#3hkMV&gfl$)bXKdKhAyRdzTf^qa*-GWoPJ$OLQbb4x_A{Y(sr zI`7$4kPR9P6jDz+Bh0eR0e3uXl3&uuA+}Aw81EHt$fcSl`WR)IEiMQ& zi-Q-Wl1(KIyknR}HaO#!s2_GespL{d3muHI%nnzCw#YAu$z+gAHBGcJ%oOwNazek}8UsFTk$fS&B`j}>eQ$j}dE(v5)K`R5y zvdtxTJp6TYlSMI&v@^mqrwmTYiChIw7?(tHsiuQbmN_KwTVf=hYzn9&V2nq+;tjc! z&Dy7~s~mGh;J4k!3sT9Ynid9_WSs-kWB@x3^27R?`ul2e0`NO$^N4z4Ld@6WLFJsKJ%Nb#R<$mJG zq>L6i7-gA5uDG|WCWP#(oB7IVrJD&B+2?|YJ>!x<4#hOm&M=FtaYD%7$Puw*QozjL ztE+il@rK-w%t-@n3^T#ho6Mamv!6AVI_w$NGaw(&p9!6MVn@d9e zPK?BoN)gqx(8DB4Y;!^Qq5nQ0j+|@v9s8O!9dJtMk@wJ7yCvG5vStk1CmH1i+pP7Vv2coIpLDXe>MgQq>)8FwX`t6IIHY% zMevzErXjIhKe=iCwcuX>IcGAN{;w+u1K zItN@5a$yc)NhOyuTIgYtB@Q?z=-;fLm!wfl1#cN=flbZ`y)-t7M z;D6X>fhU398*#G09>)a#ALlcv}yX*B$qN;=wdhY zNgyofN#H)OctbALG||T>%WQE$;G>@e9`S-yvZGwVvRQwO(HFhFq#?qK{FQ+2Vpg znDy|2RI;h0i7v)jV3Q-R3H!JweqZECAc|=&y4!I!s z6U595QYoT=4n~h)UXc#}td~b4J*E#w3;$3aF%sE{0fOm1BY*TPHCj zbNf_I#L&e!bL?oALwP0$)Jo{x)@@C zP0k7W^e2JGJm)oqRMAc^>7Qx+#++xD6GA>i9}q_t#Wd2%81rm!#x?h!=|@s1pq$9h z5|^>7>7b7pR@vi*;OF)biR4m73tiN|lp|xrlT8r~v@y&S%N%mWy%%yq9O;x&Lo0(! zvB56a-2ZGnK?<3KywVHi9Aus~_PHhGbL=^i$fKNAx+(sA^Lq9bZ^)&H2HF^AiVY6A zBJ^`TLmXKY(?}-i zOtQ`?5%HcSmK4${rG`%W8DWxj_P8PRi^NF`8RSz-3ti^#V}@l8xgg?;osGnkN)eT` z@s24LS>uFj?k8FoDP&VZEiDW%$vOwz5&k7|P69cU(o8oK%(KfSkxBM8ab!_UBmK;< z$r+(vsvk)thf3Zu$Q;{T5Rq(syky|N$c>&zB$sNs7-xnpE{Jg76B2pDJhiEElP(uu zA#NW}GRHE9oN-Oimpf}nAfFPN=-?ewEV9oT*94_`hL@y~LluqmGQtv@9GL%<&^OLo zVn`&HYC0HTjva2e|CRP8X%tgMqqX#8_&CR&&XV`9b`SBSP(UeF)YHQxTkLa7Sf;Uw zCW$;ssiK}9hFD;oQ*LrG`e{GQ=e7>~TYAo?H<_2KkhkznTvEm|=@6BJ+J8z-tPqrIS&X zIN+4fZ!j*&WKlsq8Q*G86zN;*Y^I$aCYfWI4bBKF)U(8qMImLh(8V}&EVIEGw?uuD z^Me#JDW{HZ2AMGbEK3}6NyInHInQ}b24%D`z#My=5>jmcl0Y^Uv@*afTbvX2Epk8- zxm3|kKeMb*E+0`^`P91Tp@cDW|%JM<3el+egKrdXuxyVTG6lF6rpCi<9R zm1C}msgXzbcQVEbM+8-ii3D<}qMZ?zIN+4f@Ai2{m}Q$IGL0Mhy<(%HUfixhb;jf+ zY2;BuBfU(s$q|9?^UffaObXa*@D4LpHxtaW%L&)q|9&|qiF8V-p@UJT*x-Z^V?_~5 z3T2II>l*R{#vqnV@~EMcG3MFjg#0GC^IRvrOtZiqSKRwSJxd~QD5jB4#+YTb**-B& zGyROQ!Zt?){gD07OA^STmGrHBSbSYnesZg|ipH^h@o5e>BQ zjwu$|=Zr9OMN!aUZ@DhA#tE0)5!x>2BvVc+-SjidHs{>%;3wQmG8yDkOA7;xv&s(j z=4_{rapqa!h)W`W(taa>G>WOBo*sr6XO$hU2<_A(#F0iG<6k_Vm< zPbx)J)4>3fEV0fhcZ7GT4GE-EKqYN-Gr=1B-16wB#YHA%G}Fg48=Ml-t!GIfn+jSP zV3sY;3HurG63cv#_gtU7Yrm{=%nc8IUVJ2wLm~C_Fv$`JoO98yPmIyZAY-g>M9?od zn}{ZfoB_4@MR_KUG>WO*e_WRu{```{r)Rz@M}Il zY;K}SB9Bt4sHcY^##v>H3&MWYc*K%HDNXb;#WIIn5HfGQW6n17^)bu@Yix7CDWRi! zn^ZC>r;cX&8DoWQ4mc(B*VTa-lF6rx7P=T`j+@^UzZg!q2cyie#WBHu=$*t1 zQpu%?Hu{)hnTTb%Fy1<++!6Udy~~LsiwYX)WrV!V#C;@$iq;g4bkFMiYIEvdji&gsl30gIF>t zrI}8~m}Q$I0{_d{#F9Z7wX`t6I5TWM%=$4!)<2`)pRn%A_rU%^OyRJV!9dOh#R7I^b2n&WsFrq|4QzNCYMHLS?7?T zT{$3)I(nF5j|(3DwLFkcE4_@fM%bSIAdw3CnPiz8qW(rqWK&89gPibaUtdwgEbAQd z;BW0GlE|WtcIMgRmdFEnqKpQ{+2)k{eclR@vv0MKn~TkGQ>7lJpO07p@KI0S>}d_GjUNs6@yH3$Gv}%8xkm| zkuzSLi-QuHnPQKSfA#%2L#%N{;)Q)i6WweO@o(}#0WFNN#U0U?=3#Oekq z^f1pRx4gPi3tAZ`@W1sZsZ`L$B)ddiTQ3FFvr6cHn3o#5I3)bWoYc|ID3Sk1e%a=f zuv_b+f;L8o`@hykDJ`t>>`u?q$OP9s`G3Zzl6E$^;9=ltAf7@R=wy)to`2NSKq|E? zbHfKgPXncFaYE=vKlOLLp86R*PyKA3r+yFgso(p28VCx08hAn$l{7QJ1+V_o(?A&w zbTY#g_d}irV#uS7ewH~W_+y?1-cU*h)9iD}qfqlx!vtqM_}Hg`ShA>NlUqIvvsMBh zXFgJ?pp6ZVhzoxjD4>IBRtf$1r-5hGFw7D=JcxMe?`4^XW=2^d@)P8h92ywsikQf! zfhM|{)G^8m$2`3MG>}3W4a{&w*e9zUnY1y< z1~+6scJ3SmKNaA3P1DQAaydY;r;5r>h~=^fJQ%&p)(YHn`z~&v+VWVV_6O ztdAP{*dggN^#%jnlJZ>5=wzHz9)Ff~QA{^;B)`xbbTGyim)!eo>mh?i4hec`9!jWV zicLa3M;>WqoCEH^G8e_P(a#1^pDTZq(!w6#9)bN%it_lCVr-3JAQAa!TTo4i? zcN9|15HqY1_W9~ZF|~}a!4bi+`i5-knP!zoUm&lP)5SW6Jc+YzDrshvV?w^r{G`)L zFN<99INtinq@PJPi1;FNQ%VPeY;i|)f_&3R9~10w#)B^w1Nk(w!Yz@B&N|9ypqFvN zzC;YfkVh?T%yC3;lAhuXRdg`MK6gC&Qt^<>TZTC!JXtc#l9{y*0iZWUm zVw+RKQsjkV+L&aQh%eKNR58XXmppoHPf<=E>zonvUz}TH(aZo-Y;w!PRC|DGhFIi) zEAD@}y+twIjIc{ontV{tAPbxj`W50Jn%5N3#Vpr6c_SZG(!)HreE5}Opo~st*d{Dp zUC5(}5tg~(gRhbY3Ycb}M;X@7Tb9`2n((hSFLkst#RU&D^#nOI(91YiJpUT`r-^=c zxgjb`Uy@A~9V~Fkv#)&`NFbL+me?UETThZjJELs!@W0v@6f({t+gx!!$J$Aym?pZ} zAo#zDgE(3kWSUh%bHzX|Zy+>l(SPpD^% z1-7{4-uI~;+9mrx8-cZ_kuy&skzGN_@8C3XmE(HE4^&L}H{{D>M6PYw-qGQ%nNTg5{$O>`6Sqw+!( z9Skzf3DIxmf?VFR#17Yl|Cn4*M>{L*5!t3MX`qvF776^g`AH;`3fc&6ccxHJ2ZKy= z!X1x(LJlaRhCX&UBd9~Kl12&5^l;2A@jt096jDtu2VC*E(|e3I`kCa2xSvuFN~x!V z1-7`?<&5JsHB7L?AuoPfKB%ObQTF(-TO6cQ%{GCbkqh#upr2)SIVZbEJ!s(_tK5Ml(Mm6YUzBSS$)lEj=Gfqdf&uI09b??_=$Fh-5yQ-~L(rgHlSCyw ztZ>XN4}V#%sb-A>t_T})PSL~&bDR_LE7ngo^>i@E7NNt|&s+MKCFoc699fjm&L|gz zj95Pnbh1t0*PM;y(L^_sM2yNk1q`yl7MI-nb+x95E`~Yd!I-sEM-QWH^6)p*oHAM& z;)<|wxhIb{=GfqdxZiXRQa}fTta5Kc-YKV%S=M>+TXIeo&Gax&$fWtnp@A9JIOX|o z>u;LqW|wn5n38WwsplOF>=XJsdYmF^c*_!pToXI3_sFN60amyr@_)z!4fJxr6=5@S zKrL-7b58K@$^+R{(ZLocgwE%IfQ*_7Sy!Y=x zz`rw-B%Pj4zn-3+PG_EzBuSDaNs=T4fRW#AX5aZ0S%r-|{@kGcsc?X|J zB8y_GX{L`c=2_=}3!Vwx(0jy@MlPk)(n>F5%(2EUr`+;F*f;AdVn`vEQfg_Vk1^(0 zXPx}@IvsG z^+b_G7DZIk%m5QCvdIxwJQ4D(YR^X!$RM9`>S&{z0VbGbg&hvL;)%ev_wWUuNF;*- zDruyH0mhkUjXh4e<&B7M^F2)rDP&SY4UKd%$QX-ka>5NS1n+EyE13|mi6G<$oWKl#FO>{HN6iaM!$Q4h7 ze1|*`O&WQWQ%@H|OtZ`Z7XHttQfld7fC(1a^1 zti+K=_?ql|jm8DN41HaOstM}mJ?KM+L{Srk!CGd+wj%PPB^amO>Em-Z%xL^3I( zj!p)dV~u033HuRiNG6*K8t7z@DVEsgm>XVrclC{dk0g;rDYbMkzy!1GamFj*KWcuG zKsLoR(ZwW-9B@J4+8!j3K_!iJFu*9Ytg_1)cLaXSIwDCRlR~O!qMZRIm}P?lu6ZWn zM*WEE(=4;c8IJ@%=wD(;C!Y!$ z=wy&N);Q*xXF`8kj6{({E~PZk!2qL7vCcj>yzuT(-bo^hLMmyXgFz-)VvAF53Hlj% zCz1rRDW;A#hM8uA11@UokWqKZ~}nPQ18PPyfci2rL1$&^vYAd_ry#5199dW;lG zsilh{=2_=}3mysn1<#X0IrR)N#U_V55EO_Ee8&I(UnYgL(Z@2|T<}2f*F^^2^MN>0 z$)$k~7TM&9kf6xGm&B4q5w)~3!VKFSbHfXF zX`zR8_6Z4z41A45GO3_}P6nA`iG9v_A?z1L20ka6H1a5?o(=|>;E+q62nn?hQ6!N? zA(hn8MnB^$vBf#}yboq>3=D59QrrdZ;TOG3izMKakm&_O@rEU>{Lm%I@6OT3?W zGAN*uMmm{bfql*i3AYF7)EC^>i@6GTU77#OD!mOA=Y+ zQ%*hYOt8QqmjwMXeMvm&RM5a6lWcInJ%M+gC6YukDWQgT`k7&cLoT`FjqqQtPl+Lg zTuP~iV1q+0c_QR9=OUUEawwsOR(cs@j#YL!;f7bje}%h59J!RzLJ!Mq^F+vd zbtjt^dRS$bCqjOuT98N?b@VdI5?dT|%?n{)bJs{Eml|3aW|{>y*yo&k-iY{B&Pz1O z6D+B_hJRB|byhDJIW zVTMIEIpBgvg1^w?M3F=mMO0BwJ3Wjr!y=pPamGD?U!&iMB!LWaDW#SU2AE)xO%Ax= zp1_yRKn&^RQ$Yjm^fSgBYwU5x9dEqIV%?1bD^2&z~dW~eVD59EX zx*2AQB{n(af(HV>E;8_r55$p5E+y2^OgCf9vBowRJP`U(?+{HIdDPNMFQY85!7}CyiX^frrkZBD7-E`bb~xdhXF}uDfjH7Aq>>hT zm}QkS?g;!AJwhZ2E{s=9nvg=?NeVd>Q%ws!j55m(C){HI1|s-C z9LZ!+L?w-MFu*j+Y;(pPf#0Rh#E?QZ#njM3KjW;h!zGV=k!lV3l+!>5gG{o-7ROxk zLfG%tPsEc)8I5!@#1zYHbHWYJgr?~yJ`zs~`IJ*n2Lnv9$QpYbbIlVWzsEWGNCFuY zQb_|H^fS&p8ys-SBO&ST8?mHPKn2ZoGr|lj>~P2>j|Bf-wIz}S(#fZaCPtZMizDs{ zWXLfwq>xQ9b+pmV2s13Q!2ze-@kZ$H(-*{%Ob#Vf(nJ^iOtHi|M_h4FNTxIMktDLn zr-l|f8DxqjwmIgSXF`6z^(2!`0TtBKPCqlOaLhF!S=NwBE)8@r%rtB4amGD?KcF{= zB#}(=D5H)x`WR!5RdzYyhDU<4)rTmO$fukZdKhP(b#^%6p1>azD^aA9O9c&dFu*LU z9B{z{K{;Y3kxVLRpr3J8*x{60-iY`^W&??2Qb-+bbTiBZ3#_xx8FvJ7^*)g#kV-B^ zRMAW~Bh0YECNG5j;Yj~KQ8}TUdO8?jm0eD_!CyQTct<1&WK&E94fHe41_zvT&l?ec zM6Z%bA$7Dd%rqMuaKQsX`Ep1!$>dQ+J?#uI!7|&NaYx{fijgRi$fBHjIv8M_dDhwI zj5`7a))Gkq>Eu&E1MT!P#vH5ca>gBjKW052i6@X4K4IC${cI#bIubXe^#t~B9Tl=sG*ZV=2&B!V=j0g zsKVVRk_56Trivzd8D*AL_Bi8?H{Sg@y+r~Ulu}D8eT*^BI(wXPN1)PLK9WEN1ys;L zCxc9~$POpm6ZrG;#RuX^C!ccaXrqrw7FlDDOCAZX(x-ePkxUAyq>CY@SY(qMUikPI z>_-6=G|Lkp8Evc?{#-10)$Uo?}5CXGBQX{3VzW?AKkD_#k& zu@?zsQ%nsl3^K_g7d-IsFF6M}lu%DQLrk&ACI?*bN_efiKoZ#$Q$q{=jI+cRr`!_s zm*s&-Qpu%;7CISZh81===9(u$>hv_9NF;|6DrupIappPTf?Fc~ioPJ4WU?rtnr3-JQ31jFQQ2%k230MXNW1b zIp%?&zokCJl0^~qv@^sM>+EyG3*oKS5Jwt?RMJ8Zqs+3#9;e*$LfGHdMslHFPt~5?dT`%`=gI$DE;@dPbOGlS6KJA-LVMB#=oVWi-;s2s5m+ z&jk;J{#`jHfecEirHdivS?7csf;-$D;z*;IYC0HTmQ{8*;hJYc|DJnJ6v<>$LJf^{ zGRPQntg_1$PlR@glPHqNq>wt=7-pIc4!Goz;J+_kVn`vMa_VVkfC(1a{b*Srw+5Bv@xkxa^{qn&;xSYVrD?sy}-Ti=mD2KkiJKnH_NvceAM+!OQ< z-6uYgNE+2NGr12i#&bjAnz4joL zT*|1UoqlFm;gCy0{;@SAlT90aY;wpAFTCqh15(JLl12uYV4Z!gcq06t$R%;4kxw}d zbTG&yOKfq@Jz@RMOETG1(ZnE=Y;eFOkA(bF@smt8HMB6wEPI^sOz40+Ndmc)(nJ@N zEONjFuY~_Ixg?2PN@<{j0VY^xn=|eR9ds{9AcF!bXrz-NrdVQ&W3Gw#=Vm^c6jDhY zZFDot1PiRP%N0+&8&VsR$fB5PTIgY%dA2y>mRCOe7xFj zJ4_@AWK&E9gG_S770-nJOM4MXBAK+&$2P}25i;Tqkw^(O^fS&LXN3PNeMJHp6jMzz z-3&9s3cH;0K+veV5KRUJRMSi!V=S}H5myBMwcPT7I8w=_j5^xsXN)1PCsMJvCKBd-0(v9zj0n-NFj$pDruyH0VY^vlM`+T9d~A;NFtX~8t7n{ zX;#?blv`d1`?uB-O%hp@QcDK|%(KoJcLY!93nED%oqQ^2pq+lESYn+cuDB=U-^mrR zq>@J&^|Uj_9J`!y#~WWxT0;&cRMSic15C2WCWl<|NbtYcmqZdzI(d{)M;pD2GQ}dB z>~Y2`;Ztfu3dK~@#Sr7nv%(I?T=Pume{fc!NFtqlN~ockZUz`-mNoV`44uII=0Gjy8swW{o|rc_!#T z$uS>^CyhLcsiuVj&~Eqm^D}SmBs! z!sdL}kW4l;v@p&*M_dv3FXjMW5JNioRMA8iLrk*B1_zvT&l?f*az`9#6jDhGJ&ZET z3OgKg%>(cLtNal|3WZeCMjw+bvc(bS-0;Ht1-T=U3<@Zxo^}S9V3AD@x#EeC|E5of zCWRcTX=aEi*4gKV7s40ip9C@}pqgen=w*~yRyp8;2ZH{)c=<#e$z)SN1+}!%#~6!j za=-=m_=`&Xn_%`QgF-54qmM}z+2f2yg8zpZKmz%cQ%4(pOtQ!hC)^NNwhvJxQA{-* z46w{L7d-I(e>xXw)cK^>i@6EUWBs#xtS+%UMVuoqWou zqm^EUm}Z$BPPpWeH{P#`l_at#qLx-hm|=xOF1aJ{zvY7{lE|i*8d~UOlsVQo1UjI*4X2iYn}+%@D8F$A%|kBX`_!(W?5l}Q*L=B z{F~h~;z%QxQX1%>mr%6H5v?6jMzz zT?{eFBAXm?$sKQm9;y+MB$G`Ubu`n>Fw-ov%`w+J6Z$>w8BrvWO)=H9(Z?8btg_1) zcf1jCq{oOOoqWouqn&=nnP;7S&bTA+y>iG$;z=i;a_Z?|fC(1a{$1+D;5%_** z)ZgZ&U8CE#tk|#pW)sSeC$fB5P zTIgYzX;#?blv`d1`yqFTSklO&lv>*8W1M-`*yEggf-dBjkHnKgE~V7bMlYkxu)+?P zJQDW9<{R;(Q$`)#470!nr`+;N_@#J>C6xjyXr`M97TDl`3mypi5wVg@F?F;t%PI$4 z@JR5LxQHR0d}?T+lR=i);+khdf7BXc$fcATTIgkzHTJmXnJ=zAPa>HVQAIbyEV0Eg z*Srw+W7ZK%DtVMqODlbhG0!@CoDq7XPe>t$N*d{4fJqkF;)q*biTrUrNj~MY(Z?i< z>~O+0&xG8XhkPQD0xD>roqpz60TndU%`gjWaLqHJ&tfEjObV%^jX@?^V~<;2`RwPc zA(dQeXrZ5Rme}HwM?QP;JlPb}Mjw+bvcn0F1pmAo5JxVhw9vyOi|ld69dCrcst>W` zQAQoz470!n2VC$#@c-2V#E?QIjr1_WEUWBr!aadE_nIhD$)$uEn(1bM2^QJph$|im z{sr|RhD0(cqmFj^nPG)PE_op=@Kqq1WQwSwm0l)TV4GuZc;VgGedXVJ{VI?|7KK#O zL>I$Mv%(I?T=PO$&{zI!-dFx?-dBMXaww&iHu@N4mK{#G<(1FA{;NPF38a%x1r2mC zz$A-oaKHr*1O;19Bnf0tKm`qSGRPE5Y;nXD&xC%%SAow-AcInB>0p3aRyp8;SHeTS z3Va}rG)k$ZhY?oU<%SpD{UUiKjXY{;WrP{FIp&Tx-iLk__(U3cRMX55Q*3g`6;Fi! zV!0=l3<{{GnLfr?WtS_S_&iL1kVYP@^fJd9*F5vZFZn7ELnei^(8DaN9B@H!xVVWS zg+eOnV~l0CIpT_ELVu|^h#`f1%4wm8apu|KghzrS)S3kHDW`)07TM&67s7v;ypTi| zMby*I028dT%MCAl{!U)Vpnzt&nPZJh9{J*zi1Bv{*4g2fS3*AbexgYrmr|-| zr=JlP*<_Dvo(cNZ>P#$29um5^Vr--#xTJSu6VhY_Y( zW{V^42}IeCIPxi{jXtJXW{)!hzd@ZzAcK6$X`q8aCRt&JQ*L=7ELy!tq=Xu}8D@nY zZh0l@H|l-Lsi%t}#@XYHYrYoaS>j0}k5X!Bp@(tiS?7QY9tr+UzUPS~nQW?PqMvcL zIO3VmSkIG4CV5oS$PiPkv(E|7g#Ko8ofy)|r-XXinP7oc&bT8qP8~@hhjQxaVu*Rx zIpK!z-{QWLMjo}aGQtdt9C1Zxymu2#1_d^SK3GzWE zWz^BjC^M|E!zs7C5%Js9i*y?3pr3JOSYe-YZU`jmIU-3Ql`5JTXPy=IIp>CVzuinB zhY}j;WQrw@xh5z{O-Ux38d?};nmx|AChT{pCF$f-MjeApGRGQw-15q2$>JuHLYnAe zoOyOQ;g(lIey5%$igfa+qKR&XnP!0vZh0j#MQ%tXmlk@MXPpBscqI6DnSVr*Kq`5Z zQAaDij4;D0yPR^v3t_4Hh-i|?qKImm>0yL<*4g8XXF`9sz9NoH3aO)wVWwGTn+qNY zPt)ThkwrQ6^f1CAo1Ae+=9HQ(!&UoEV9Nv=iKnf z8xfguKs3o@Q%p6@^fAUFo1Ae+@b6cbY%|N}d$K8@lx8~UWrzj#xaWnhWts8BkwYB~5%Cd2BKee1Njt+#u*NReJW=XB4Rp}UD6_1x z#SvFL68uNipHIY*N-ibT&_WL*%&^KXr`+;FSb>>IG|6O9L?w-MGRP#0Y;wp24+Q?0 zobr)4(#WNhT3YF0gc+9E=9n8^2rrZ?;z%Qpa_VVkfC(1aEY{)Bx=B!?1eX=Q{N*4gKV7s893 zl~_{Ap@bUR>1Tok*4gKbJKhNYlhzYM3ON*0O%q)VG0r^e>~q5lVI^WFkxWXcp@kmC znP-hX&bZ~3@IPg5Vn`vMa_VTKpK<0`V~;a#c_qA5uMtBs*%VVl3;m2U&pLaYamO1G zf7;z6jx_QpqmDKPnPi0>PPyfk&&qtCl0XKzlu}01T`;wkfbrC5?12zyu3ya>yl5gjD;UC7Kj+ zD5aKGdKqJmHTF5@o}j;|c0`g$CWTbdL>I$Mv%m%iTyV=P;WctW49R3uOchOZGRO=o z>~hKtFNFOiwI`NT@+hO8b_SSWkxdS{&Cxh9be^6g(v9c_#<%N9qRbH^K@_0|$eEJN~xuV9!8j9g&j`0<(2RTagabZ#Z=HhJN=9?#~OQ_@ksDr z^PNNtDdbQ>4J~vt%nU1RbIdg_gf)ttSh6Uho_6{fV~#a;IpvNwBL2D@5=jCX6i`YH zEzGjY7Drt3OjwgXC7yIjsG*;6*4X2WXF~sm-;+d!5;mu|^aioz) z8TGU?zy$NGv&R{?yb|#@ttXCj@~NVUP6nA^fejA1R~UWKc*Y4Rp}YICHGA z%PBX!5dOE+h6FMwpn`hZ8Dffc_BrE@SHfH6ml%@CridyU>12Qjmf7Zn8=eXM+wx5m ziDXhh1@*Mk&lq#8vdalKJQLa`f5eeaK4sL=N-rbKu*^0`T=7Wo-!Tt~B%XBgD5I8E zdKh7vW%fAZo1F@u#LowB~(Z@LRtg*)_ zx4aP6;hqpp5?K^dNdq19GtL}q>~hKtFNFR*?;wse@+qf|HhLLlh84Cs=87kRJM|-x zB#=%%Wz^A1FC)yb!anCb5cKzb&+?Ht(#WNh8d~UPm?@Un8v78e_GT9VSMI)UIGQk4t z>~qE)uY~t`2Qeg*O&N8x)6W=ltg*`}H@pz~Pt<}alE|cx3L0pqpE2fGWtS6f2=vPX zktC2#K4sL=N-rbKu*o4eyb$(J%>ZJ_pnysm>0*dU7TMy6OCAXsFiVLhnH)-}rkNf_ zm}Z$Rj=1KTh<~Pj#FI`QWz^A5KT|BR%`sOz@qSR>lR^%)v@*mLtL$>a3t#?oXC#e0 z%BiP~KE|16hZ7zN9&$dSNGG2P8t7z@DVEshoREKE4bdc%M;V zXcEXEpK{vhV~j;MIpKz9LjR?;M3F=ml{C`F81t;N#~HW0@?pgNA(KL?Xrh~8rdVQ^ zQ*L-6_+P03ktC2oKIPQWMjz8GbHD}n_y=tR@A!fkvMHvCE{2$7kqr*G;DO+OZC?_| zppZ%$>0*c}me}H+z?l8`NIYreQB5;r%(2foZ$$hXxgnNR@+hO0R(cs@jx}~U<%SpD zkLyno$s~_rs%fK-Nfz1Rgd0Ntty&UIGTD?-M=QOIFvC9QJP|VCe8iJQ5w*0^#~8D$ zvcn12JQMcs)Pfk2$)<=ZTIpqk8CKZklm~()os~}{kwr1pw9&^Ti|la1J%NAkHxQ8| zl1U+zG}6ToQ!KO12{*hDHYH}FNhXgn8tG(&8P?h7f(L^CgLsJ{g?!4Xqm4esm}8Se zZg?SV+MdLaN-ky8(M~^8EV0Wex4aVeAFU;tWO68>mR5QhWtJ_DxW|7y4SYr<31m<} zEv*bO#VWg8@Ic@{>3Kd7M;e7x(n1fT%(BKF=iC!ED^?Q8q=Xt;=w_HHme}HwM?U+{ z;v|zon&@JhWsbNacuoySAcJD6X`_#M*16z;@c&|dlRyT=RMWu#v#fH&6@htYCx#RX zsiciQrdj5UJKq0S{YwS~)YHxY6D+dH8Fz#(xTB~S(2xG3MCjm^JG&95$n;de<&+y{9Wf-6O%YWz(#Zf5%(KoOXWSFm)jxb7o^v97-ODw_POGT@b7R263C#KYTD>yl0|kn;hw;r+z~}G*_2R2E4_>{$2$95@Idf) znl(g`L^j3L&_XYx%(2Ek=R6R!Z!MolB8y_GX`zP^rdei-Bd&NNS z;*d)o2s$)#_(%d76i`k*9SkteJZtQ6$}KO1eUJM`G)ZJpL?w-MGRPzgY;eE@_XLi_ zz(?XqBac#QX`zQClF6o+YMSU`h$)uX z;*d)o2>O0`Ad&ZbF6X9HBW^6fSeIc3OSTg zOB;QRGRp=B-117qnR!DZnUqjNBb^K~#vE%r6Z(VlLk#KUQ$q{GOtZ{3$6WJF$hlcV z6!D~!LkX2M(ncS{OtZochn#Uo=npwBktC2#J{2_3$siLfu)!gh1YM{N(Ik^Y3Ed1c z!2;{-bHM}ef7q-ciz4c2XNV~l+2oK59tgb@Co!auODT1~Y35&m{baIY243 zbTGg)%j|K+Bf(d4N)p)=Q$q_qj55mw4}|`xxJV<9GOB5&gFz;lW1W3YxZ#oDYjq@w zWU?uuie|bQW`-4ZIN_F8B7RKI5l0%?6j4Pz?F=x%BAXm=!2`iJ>Omw4WKc*YO>{BL zGz)BV%pGsM|8cb>j!X(Eqm^D}SmBs!LT;UxXp+gJj5>N5Wr|gHx!{4|pRgA(q)v1rNLu@ssjPJn7_9PCXqAFu?*F9CJ;` zy>pUCCRH@i#VE5ZvCa;MoN>()pZ&CV{FK?iC*sJVm`2(dVS!bSxgzMn%;pP{NGFFX z+URDI1>)_IP7Wp1(@sC*%(KouXWa2h_@m!O#F9!brPR_&FC)yb%r?hd^Gw*!h>sXj z$flSon&@SeSvEM}lp9_Me$orXkU}n{w9vye%UtllyPwqqWKcjWy-cyhIrn_+**zqi zVyfw2fO*zAme}H$YudQ+Bb|&f$2$9*^Fr9ye+qmgo;30( zqnZX<>7t(zCYfWI4R$%=oEsi_BQ*GvKQH(x@Fh{ilR^$9)YDEMW2~~v1rNLu@(rH? z@A!fklF6o+Y8q&zml0-IVVh&Fc;d^DPk~sH$flSYTIgkzS++RhoO}Ksdv70aMODV} zuKmK{h={x#6%qBwL8K$n5fPDykcbG0h|r9X2odomMM6X*LqsAaB{D)pL_|bHL_|a+ zBqBpXL_{PbL?R+1LLwt0y5DD>XU(kHdmrw-pZmG@bN^`Y>;A20JM-uiujI8Zs}S4~&9|Fdvq~I@k)wputI$4_#pp+zc~d0lWs=;4tJH&=zP5 zJ>e=C2@_xzEP~ar33kCjC_9<`0BxW%41tj_4yM3#m=CL9BkYDl;2JW2;4EkhouM}j zfE!>OOo7?37}mgM*bRpu--!N0E9d~-p+DRJV__=HfyJ;I*28xA7|I&AbSFb(FyQdkQ+U_X>qFh)=bHP8uq!2q}c zM!`gw2@7EjY=)h10FFZaQy42~3tgZmTm{2nG)#hrU>+=mwXg&BL)od+53Qji^n)QV z4yM3-SPq+E7aRn48Zpocx& z*27LX0Qu9|mrxCzpf?PJo8c~a2BV04`pZJ4>iyghQLUe0<&N-tcK073qFB*XH!13hwgAC4111<38ukZSOM!{CmewC7MwSs9dv_% za1%^|>97RWz&6+mN1=WduoDhIc`Nz=ZJ`VFg~2cqCcqq60&8Il90YeB>k`^R zPq+$3!UUKH%U~Pqg(Fbjnsoxz&imcx43 z4hP^ERJ36(LR;t#{ow`}3-`f1SO!~QHynoi1&kfEh3?QFZh)~c73RQVSPh$D7aV|N zP`@o>1FfI~bcg;h1V+L*m;y6lA*_J)umyI*L2#dDeZyJM8ahHR7y!dz3`~OQFb9^v z8rTeb;bSPTVa`A`bb_966^w>SFbfvJ26zt+L;ga>3tB=a=mkSz6ikBYumD!Tde{#8 z;21P$M;x?=9&jbx1mj>D%!L)O9(KY3a2K&|paryp?$95G!DyHaGhiXCgpIHR4!|*J z*q(U-?VuasX_eu6g81^U2X7y*-DIxK({umRqK{csc- zbYR~=8|VzZU;qqWjDg880~Ww)*aSP_0Pu%VT|+nv+Co?83xnWh7za~eHY|o!un~5` z0XPN?KFivNt}p~f!ep2M%i%TH1Banr7sd{1peqc5n_(PGftj!nmccsM3cKMD9EJLy zBOa=uBlLuRFa$=yM3@G1VF|2(4e%c9gCkJZm17-LLJf3*J}?k&g3&Mu9)fwW6xPB< z*a7?D7&N$y@rL%$2L{0ym<)4aDXf9buopgthTW(a+Cewy3xnZixCehv{grP7BCcre93rk=PY=WJz4~{^+o{S5$hwji1 zhQJ6I5BI@LSP1K3JM4vzA^#=T9khUU&>4Ee0Js6hz+{*Pb74JfhkbAa%6c&up%QAK z3-p13a1)G%NiYi*!7A7Q@4-Ge0@=&iC(r_Fpeyu(0WciKz$BOsb6^Rqg)OiL4nwv# zWk4m=Kqu%0Ltzw5goj`rtb`4)3l73DXz*p$0YX)cy9iRscgqvUjOoJt`1~$NZa1dO7`Uowc zGxUamFcK!fELa2^;5|49?h5t^R6|GT30J}}7z2}G1}ub?upYLuVj5gHFSdB zFc9v72VfDbf-SHcjzIa>sS~Q9J#>dFVHk{qDKHn7!YbGZd*NfKxQhJ&-Jl-~h7oWV zJOHy{39Nz5uopgthTmY$Lnr731K`>M%w1zIw2L{0ym<-clKCFYSa0s&3GLFy&dcc)14yM3D zSP9!PfF3XyM!333kF^$lpl6p&B|tPq+$(!DyHQvtTK#h3&8pjzNQ)*dNdl`oR#G2oJ$>cnx;J zL8$i~>Vb~X6NbTPm;no51H1+iun%xU20B1j=mq^@5DbSgFaf5)ESL|=VGV4C_h1hkfFqE- zoiT?~p%SX0J#>Md&<_T}Fc<-2VIn*LGhi+(g5~fUY=&L%AsmKdP(Ft7f#%Q(IzU(G z3j<&%+zex20!)GFFb9^vN>~S*U_0!F{qQlA-N8PFN~nhR&;@!zKNtwZU<8bXiSPi- zh6S(`*1|^E0ej(NaAPSKnn5+Rhc3_)u7V*j62`$KmLOP4!dDLd<+4;I5}SP$D_H|&Rx z!A;=Y0Tpl-w1#%j4SK_sFc@xtu`m%Hg4wVDmcm-t2s>ae90Yd{0+*0h&V_=m1@z7xafgFdRn0IG6-eVGb;WWw097 z!xq>9d*Nen_cE`c8B{}i=nj2g5DbSgFaf5(ESL|=VGV4C_h1hkhGWoR5^E1yLp$gO zygV8V^rov2E2+Lp{Y=Z5u4-P^02OJ-uIkbWr=nB1{KMaE5FcQYWB$x^_VIeGo z)vzA6zz*0CAA_6BzJdxk3tB@v=nOreFARX8a5Id7$uJFO!F*T(D`6dMg`IE!jzIYj z*>BJS+CT^B3ca8|41(b>5+=YDm<97;Ijn&Vuod>e0XPEX_famifHu$>dcc)17)HQY zmtHMFgne)X zvQuayG>10O0lGq87yviGD3}Njz-(9mD_|{bfgP|PK8CU%(MD(n)zBWgKu@>|hQLS| z2Qy(IEQ58h33kFhI0D%Rm{ZUkT0sqTg6_}&=T50N9YFqU?2>G5il0+gNI-?EP$o3 z7B<2*IQo_R|M=e+{BI8YZw~x#4*YKp{BI8YZw~x#4*YKp{Qq_iWZmCfh0A2~JiW?; z;xGa^3faJwN3V5V-kpFw>+;#=Xy@vSXKL#crONTC=T0OyQu%D8GTDr4fRgfZ_~l*3 zolLqRwdSInJgFQ7CmuQ12wQzTvXMufRD9MoAx$~iBt{x=3f8D*$`vIwr_0UocR+mW z%1~NEGZg;?^=I7~v0vTT?@W{*8SP1yXMKHn<*{ESivLpOofG+G==+GMZ8B2b)kZ77 zfb!$bqxY@{>1B*}S-z5S$+_$3scwfp^0wh-%R8}2yK?S&vy}(78_ZTevYiw8-DtLk zf$b)qRYta3%yybI| zCXRkQj-Gp*=qFOqcf`?8#?kYS6a7>Y%}9(Oy3}|*o$`|YmGXKf0zo${)##cPdu?UW;T{->78<)_DLMyzJWiiSm7E8hQL$2YW2))3_RuPB=Jm+gHem!CiB$u zjf{gHgEnKA7QL0Kr!aa;P)~Yf3O%=)XL1hnN5ynp)@_SD<$U;Vtu>_2Iyv{-T0O&S zCMolGfoFOg3tRpBT0IMEe?Rc7N$thL9(@paruTPY?SC*&9kW~6kABQVC;K$({up~o z|Mmto$dS@}BIC25?)`m%XV{iv&kxO0kDjv6WOju6PTn`{H!m&yua>$io99hzOHwkw z4t-Qk@DKS3{y^r>zw`WdsYLoYJ@8v5BlFE;%;_U8h9^4@n|=qqGSIJ>-j02h>G#k-H@ySB+O*XB zs_C8RHG%#`pw|Zamw{eqdKa<3GQAu9nrSKj*QWQN*PH$m`t`tPgXuqG|BdOtpf?8g zH%uSEz6mXNPcC+UBh?}!Guv-7$;%hLPh=Wr3g0{Cn7PS2yo~ElS<(ALxv=CKeh6tf zZdOO{1$Dh1#^&D{%B%SO1Djsq`rHxNlag}opRtF;NUrzLcZfOnFFdpc?~$}D>;6ry zq-8ZrjdG2tYxew9PR1RJa-_}Tt3L8}UZUHOC+j(5X{oy_rQM0WaBLXDysy#wBrVcw z>*O7~wAo)1`zYB9b*ZU2caF-UF%u7=l6nPcVNzz9JHgtez05ed(kyIOBRZqw5LpM)$5{ZEz*B}K@l5utdVb10btQ|Rlzu+1 zVT^B)#8fqEQ)}r-uOrW#ojtS0(A>@sF`To+Qjg$=eU^0GFwKS!>Pk0@zzS6)S52C}8c$NN{i&y%k+yF02l zl6%iqf{sr&OI20$Fy+UmRBbvwJN0&ADDh-WMLnySI5qt#g-KD(Ajz zO8X}D71xzzNZsN%?s`!;sj@Zz7Ir{#=&O&mG2mdI-@QqL}fES1X-iPbPu+IDG+v_R^R z77mB7?Yai94`Qk#KZ&^!YtrAO)lp35CW{eI@k&ZB^t?GPU3%M&eW{}}0(+@?ZZ&_c zXQZXXvnJIG?yZHMZdBlzZhNw?w7;VR&vcoEo?~kDEbQf2^E|+ebNO$OlIeEnqZ9Jd zUBrSQLj?;1uzYa?c7CFA%fWFZ5chKzueNmv>2l`^ux8UC)(3b?dqv`MBb7`PE znZ6DCXH4IY?ri!F^k+@qiS82U&!J^4HF4v}X+eLJ?R@ewcCB#>BTz|}%n{j-WCiOv z=e~zsHr+dS#VNTzEo)z9Z*d&=*kez5e|&c;<&UC+GI9iv5;CrF0i0UU#$U=YDGYg4y&lKDG5QThr(>KDB+(Y|R5(PqS4%viV$r z?qmAv=&zXmKDw{z3Fxnyz6ae8E&KlzH<48Od|ORkM?Hc@XIDKQ-HV^!lcIkBviW1F z%z%uWY}P2o`I!5#mWt7%sN{%$wVM(txtISVl+>1v-1@BUMFP zvUZ1>P1o)u%E-8D%_eJC=Kc?{4#OsEVk-K&NN3!S(ZeI1bJNk+o6k(NUlX&?eof3q z`*kn}?bpHMXul5XySb#&>tG1w*0(d>#jI5SUQ4b(p1@mYFT&Q!lWL=o`6%x#J$s6D z>u5yey<5)RLCL!L5y`o+X3MiK>#!Q0k%Cj(80n|gwJ@rSXD9Mcqx@_U{j9~M*X3ff z>bmqXOR$!T(Vj_;uFIv7l6Cn4N@`0-X52FDvgx{f-cnT+FPhSI>06<5#iyh^nJGz2 z3f~95Y^4-?CZE}9nXlC9nH;H#OG)lW>pK3qm6GGv<)Ut}&%!pyJMXZy*O8V@+pxxB zH08@$8?1;si}pWfhIs$WoLEE|8TUQ2`4#aTR=*;aqwkU#!Af}v{e9Cb(EbWwC3?Ks zSE28Ybk4nso)Gxo6X=Pie}T`vrq`k;q2-Lx!2Oa`dZpY>UVZ+_SzkV%5M=(#UX}N5 z>xht1?|{87oC)FQF43%v?njH)CFIJz>0c8SUh(SOeI2X%ixU40yo&w}$mVCh&SLLh z?cN|C8%^JYDvr#!H?0Jj#Z?s>Emc*q*_5sZU+)&INxez5?DwihZ(EGi!|(*2Ned&- zrtg?%m-u=o$FF@xUEzPp5#mX+=`mC8SLED$v+4DY+MY67a=nvt3(S^W@8sOmX4C5( zja_Iqz1~sVGiKB49kneon_lmz?OC(6jM}WW#b(oMAhkVbwl+cEmY7Yii)7y9-1BDh z*F|qJPD`=LjNgiW!SputGPE2w8@YE$waEC)Oe10wI9+s9Py_7VRwANTjTIcWwl%aL+MoDB+ zL)QJlYS7iA$0nWemr|C-?Zrp(qn7Y0Pxk!D;-oK9v)pM`Z@Ipg_K3IWy5xR{cT-kF zov81U8{*4#jOl(n^$JBiq;%h6Nz0x(fQPoQQ(WgkY&GQilB9(n#eSXf)A9W~Ht~@= z+;U7fOgdege{xaBBge0N`X|mL#_v7fCh?LdHIG=i+F#u-T5hQb>BYa}n*A{>EK@xG zV`cggmRTZg*Ouw5(J{TiS|+s%pCv7x^87+w#*_~d#r zJjr~d&$7Q7#ASDleHs?{G$O6FO7t~0YQEMcaS4}c36v^l35_^~+*3i?Rb%ZujkM;< znMC%605brT&MIwR&ZF>IjLN^ zcN6AT#kn#vh3z;On|S*Xl@*}vkhS5x<=u$1x^-NZwBxr0HC1ENcQ2LnNbobzw@21S z8@zNa$l8+G?q`goWu~{qLyuLzq6RHd^2AT5A>WrM?YfY(wpq^FzRiB@E{f}uT-jgV zL(cW`iO0pM_|IdN(&bh9d`X-u7N6@&zm#0@*0R)F&bpnk3$n>f^;c=ddC60ea^^qL zeb%B*bX`mp#}qz?+0{H{)T*O;b>&D4B)S`~qCXGPr|ap7Y%JCyN~`+^HAp)I+4$(Q;F-xQYxPV&F><22s#ed! zXCnvH>RI?CSz7674w9bX(dayVzc_*aDeHo!rUf;$pTdBNNX-U95)3>iSsS z5UU$wbyKXq6RVqJbxW*9#Ol^qjf~ZIV>QZ@^j(hkrB+RJbSfVmc&3lF-0!!%$TKs> zQhI!rq&M%|6S#wDd7iK(7e&%cjR+Um56E0=+8GKM(ZkK)-7GF3Ryw{E7BY z{EbJiF`o%&|HR)!w147n652oUC)z*p_d~RQ;_rU6e>UPrX#d2Y)a9S}dl0?G##8h! z0=+iS{)s>FS!ebiqx}DX_@5dnQ_ls33~T_v8AdimYR|nc2vpQqT@{YGV|2yT1r)KsI4)X`nlq&l>EXF})Vu87-dxoa}x{id#X! zb{=_o7O;GiSyrQrPT@U;bwsI$tO@b(_f{n>E9^Bq>hOKwth+)dQh5_U>Fb)RjxN;n zqGc2ACt~;0Q+(=y960LpDx2<(lPsmnK;nvH_%e1XrePc-Us2ZjyiE@ zlR>sQIk9bsYy-_UFS5y_&pCIs*%k!0L1tSN*uG`9C4p_Q*_H*iZ<}pJU>jn#RgvvC zQCqGt+nT^{sM*#9wrkC{KClfl+s43lo!K@Aw&7;m8rZHk+xEz|F>1>VX4?_j-iT~B znr&AQdz0Dr1h(&(ZC_x!*=+j*+bw20h)oV64cK!du!(MjzBSMz1O44Vj|%i{fgT;` z+XFo&(02rSY@qK9^teEO4_%fY#vIAGyU?;7j@r)6UE2G7^F0GS-t<}MyG>W3C!pnE zRqf6pm0Wbl5oG{*M{<%|>QTan$@PyCw!m9Yx}sz~wUpA}T#%zy`lRdqtKE6z>#A>! zDvr#!Phpp>RNl3A{;y>12|ZI~7J7cRR?os-e$G7gVZka=dh9zPFFg()7L>g7!-8$F%(OZBX|#V> zupRmlvx}Y;=tl!R+jM(;9t-rGKtFD}BR+Ej{eMcU9G!q(|*zaogKj(Q<6U&osC zC~23jx~nWkJjE+1z0h+&T)M38x8l`35PPY5t~P(IXON}DvxZR#>q&XK!GUMG?a3_A z{tgK|(`6QV4z1O*u$RNkQ&)FSQhs$ykHgh1dFj>tH7qaKs<{&FSNAv2%giqN#Xv6) z^h>6{iO-5azZ~e5roV;HD}i2R`rFw3>b?f;SNFAOzq+qO|J?jVuSVvX)uh^Opv?eRH`>81@N7iVmcIsUInR)75_I-O8YZ8;R zP|7RJ^X<~PJkz%!^GHx~y}XQqL`(0aW>Rc8jWBm-Tq8C9p5;~W? zf3;gozRuF;P{olMx5P@&+mg>(DwluWl*Gu4ELEG%$QR60XQXf8i&&GGq#oU?%Y)K? z%lL<${`R8wSb89Bc+b3Ejv|xWoH~nFSb4e3%AjPKky5gc@qN`ctO`8EEAdR`u8y7b zB^(D|-m6wZ)CRZOQaQKAl*FVn{-mL%xZt`_9Lw|2Lyd7oTPOtK!WM96|tLR-2o(1)I>;0?U zZt`_5{Q*@RnQ?ot%cfqxw;7i%KjZeAmtH%3V5#uh;g7NHPo|_cS>dJH8Lja0Kbxl> zseRx6f;EXrS}5fe=J|H%QFp&@L*}nR$@TIw3KA{7lal`i;iyHe$sDv8@suOA_mt5I zS9dOR$ULLCY#6uGYAD<7gY>ZY+F>6)M{UM_ zi2hHcv+e-;nAtx<|JU^2(Q*)#6>%7yG5s-`-v){7N6`M-;S+QYyIwo|n^bz1|C@6C zwZld+WwFbqb9onIQOYZCUOJcmORchn zb2(=oxqKZ{QjW~!Qti~aTsN*;-qZQMoq#ooNm?l773TSN>0GYo+mJaiD7ju}V{@<^T^4CR`$N|?`^o5X(~Zz4m~M=&XSxD?qUlr7el9mf*T=4N z`E*k0xtu3Y=Ca%o`vWc1`yD5tn&BHh#&Cv|}n)2DsD zJRq+Rfyfs?{3Gc!BPvB+R?4U-t&e+Zi~kt6_!4~N&Q;Q`tm|lTGL|w9GKRW$ z#9KTiLfZM6f^;Lw)f)Dq^ot-}@R6|_MJt3BtWzmNwEW!3=g8NXKSj|pQkP*1>*+>1 z`QTh0Ymm*C(v=bI9(%|ri-Vsh`zTfBNsrh=9-NWBjj}TQBltb>(EV6Ru6#x=HPqlG zqtJ_79RWYns@*poVauAe*o;#}!fVQ&AZ z9vQDwtgTXmwCGB5q!vGaq(xebe4*k)^Y*oTBhHmt{!)dby}w3Mr{6_zpx zoAy;okx&IY}F`?iOsxXdEKf?>!`| zGv{ti#sA&neSg0j$IBjzo`&L8YEX}yyA2OrVWCIpsr$E%yB*J@ZG7TQT{=GxqqLP{ z@%aa-6K!>BY|h<@U5@^xJ|}L#(cgbg{5|}%Oi^;C{XVav$3u8d*1hQctK9_hbzR+q zDvr#!iP&W;m6!e`>2CAPEONs{EHKS}xlmXqyzsopORUDad z^RUZSDlfg39yiZi{>fO)H>ItU+N7LOlqYRi0AcHNEj^7@HeE};N6%nQdX%(F=lCLv zk>>hr2JZv9*1j5^3rSRDJ*B&99@X^Yw20^S!Ne~cAzT*eU9np@M#g~ zszA3i{Q^Gc2D+8$7qR=b^b*>yrI*ouExm$1&-_KVM(bKyMJm0P&LGeKK$D!g(YIW&3H|t)HbLINuKLxqJN#z!n{6?HBB_At@eKXFLlK)$f z`xd!LEA@-$lICz0_c^)Z7)75#lE^ylowy#^JDJoqMb^EGEx9&|eika_!4GH0@zTz0 zDmUwX7stz$kHia7zl?@l>;E2)mQKE0?mhfvda(gP_Y%>4vglGY=vq(|W=#|XKDoQ!*6^s%^XSuKUR z{5F`yex*ds**N#=61jPD%jKzQcf}P~)Y0?$iIGj7rLN~yUX+}DPU2N`1CY(%m(nx5 z_pf#h$=5yI2vr=JagD8n=+0UGWJ^_5G%+PHGP6q6CQmvyDL=(Lr5)leV_B=WJI%c1 z%wO!Ce1Sm9KEs`E-W*jJ@6b{|w)hfde-!?N@+s_;LR%f~A{5%rbY~XXE^(I>*)DaL z7TLHP>E=a0MN>%&a_(20ZFG~*SLDlVJg9HBO!U;Z+J0@eTwq&owmOlmKC2+-UN>9a z$aWSZl5-o(rawEQw%?fTg2=Bjs&}K=xmW{NA+KfsyT;$hO&RcSN=kQN3@OZAoC;Vz%c4+uLSas^vwoTg~=DWNQ)C z@s8PEjBHhrZJXH+1h#k0_D_!1b(jw=@l0>)#3Q4t?o4uZ#hi;OHA7ojyw1n-EXAU> z8R{)fvFKH-tOhBmn%87yBx_HuE~^@yZza9PQ#tkW^`n&joMYB)w?63CUSx%3-EYmN zU!{_-hVX+bX49`y$rIr`vBM__vdK>w$!C%kl>9sVYv3**)gu1tiyYH_NnQmgePyo$aEWJ@3HynnU3n0(!J9Z=Qk1B|DGr`r1y>uYt&p!e)z0cCzfKONrZSgW4JWC(~Wf z`=SAsL)qs@B?Bzu^GETE4pY)5S@hAC?OJr`!mT_S^?X}A_2ewmKKgzUfzmf=ujF^)>k)fO+!rmS`&|5_t}pSL#3bXWr!~pZJ#=}b z20 zA+d4-)A{;m=9Fy7Z@qFEX*N9xbtN|E{$e)$?K8FQ_qJ?O-e0{fpV$tVtunG*MtS^= zQM0wgCI_r9U_FRUbWik0kWB6Rul{I%@VXN14_;qK`-9g2^xv(V zf#}0%eOq}osbrnW@oEowE$i#5@iYGxcDKL4l<^pZU*W|@rK=3qntVLrqhzcl>f0rv z1wuO&bCbuC>>Y02D|wIt_*?_kXn zD|7!Aw4dW6(0-1OMEf~D3hn3kZD>Eo$Dr$2Ib+dfXqn?DxjRXv=XjR9J@&T7pBa+* zops}gNUs1n;Upe8cNZRo^LD%&Uu3J`*fJ+NLyll1NAD zM=P~8Gn-yo^Inbe{IBZjC6r!*pJ9G_38l8?W~&#KcMq-4xiigHKe~i0cN4Luw^Q+` zEb5coWGw7^T`qkJZSq^7g*N%BPS@yd#iXbWXImTesQiP-R%tdJkB=HkThB3@_Gv(5 zYhkt%qduvv%504y+ci;nEzNdXWYhBeTZ1zq+vLd4zYRDmvT6JLC4Y5b^OyYR2exyq z4*fMtt;4@P(zh-@jOyr=(Gk{PxKvv!i)|N`r?&IVCck=Fme+mV+H4)7{ngOjM~Ug} zEIc|DjrsfTeYfNPvpJ}9wc6ThzlcCHbMAbzoe=d&{o0sK=cT^o^Yc>o>y&8RE-=5! zAhxa9{u_5POyUF#(bkPq)-WlhA$4RgJ9<(y_3eLy;7;6%f93}M% zPIB}L?kACwE4YVHQd>GQ<9>==Ha+W1vs6{ZbW^2T=)d5tXN?)=>2DP@ao!^5q2l%=jfrgf_OqSY#znUKqu7hgHXfUt zxu#-mk4?^KKSN&}>5O|A?ayK}(f;f<3+>Nnv(f&H_88iq(dME%SUL01m!Rd0*4RBs zDt$&fg}m_@y~!t6ZIzImud;4F5jv-(@5y_j1*D{xi7&rAf~|9Oyr^Uk7Sh8eINa`=nL5N%JM~&pOd1OgUpy7(W`$)_>!fPk&`-Qq>E$u zmGD&TN=p@cCaX=4KC8@Adnnf&(r&3qw!-+X%!SpdnqIY(?rGn%UtmpomaH~CdP$BR zy?z-fIeM)_Np0!KjQbUK+4ShO)>2g!ubGk<8R4Y1!fWRB=9yeGdrNrDoWv)s)uY#M zEMA7BRBf%|d~V{pH!PJLy}TtkdP!YU(q>+hdXv8D(d#WMNj&A~m3XFGcu~{0%@ZfL zyVh&wJo`4e7S{KlGMlpQ+qQ}-;`fj|7G$=j_I_~%bzFl@jy$iR{ln)!M-Mgo8uYc1 z=A$K zv2En~krVwc6tA)Ek+qa(;W~NGJawM?(sy7@N>BES&U4ApdA>7JGSA;fNxRaK8Mh0& zY&y?>Z>g$^4@^mn%=4tS!g>A&^GxQsw}kUNiBDRq^L($xhx0t~PR2vM_nCJx&%Gs? z=MpXL{tK^RNxrW-&-YtN#d|B=!i$<7Fi#n$4gZhlxt@JTGiPM;^Zd8eal6g8-=TGG zXWee}7_;v|`}zDww4cv^Li_prXSAQsAENzy{ww+pE9YT~q z7afmTzR|YMT^L<&%Q4#9ZgOWZ)8t)}{QUx50e`1F8Pgh~#Cn)C%RRV%As>nT6RY}* z68|H-ivAbKmcHNN{j1%-$)`@{^ifoCWXAo+O3*p|iKVJ4j+yd%yi{#6H*)1HhiEJI zOn+%9=d$J*#mO?NB`*2p*~0gUC$kU4ChzL}xUS(^VOextau03Jxhd=s-Q>FDn#lGe zv*{7_9I|un0ki2{h!K(PL9;cBuIbb^)ol8nP~UUSu)EiK-Kc&)Ha~qYQkUN4oPQs4 zPE=lbWb^MaYohBRK2Wo9utxK8KP4U1J?_fL)$1NPveY9b<19MaBUyK%l@aYlSI1I0 zSKn0ezDfQjsm3%Y86)SOq@Ke4+0bHifBITW)#cl#o=q%nb+p%{FMRRWMo-`ItL-Od z)4Leb7T!UbP2WLQMz)`tO+E;cEA9WX&!=OP^I(R$er7s{o?$wVemK(nby@UG(9-K(|770#P; zgBs+jDXF2*^StAD`uD$D`=wTvt;IBs z?or98 zTR&3HGiLuZdJ$SyL1R}#DmgRCxI7l+$z0{K&w^@u(QJBlQ`>U0>Df(fFPW{S&e*7q6=rK4*j_f9-UZdzm1fgBo@#r= zZ0&>CRc7lL+1fF3Jicf)y+do^ z#ss!snr&QQTW2=C#ead6vA1HqSri{N-nn z=+EOV=RW@~R%Q{OMn_g#8_vh{z?#G)Gf%HPB}eCUPyBRkd!ar2epNz(s&QN2N z!~g90vage?2azjLdLu=?xl+b})X+4+cStb+z9o+JH}rgMem|zig>Mwa5pn})q@^lq>08=+lzGdW=JZI`wS`*Px6!HEZnsqP zqWE%)m)EejcckLSTBDErN_|8S~U9sq!BiaA5mZk6M)@0oeEne2}8SXwybthI= zZt1v;n_`}4MR7l}R8QiX#HI8mmCOl$G%0RH&OI2kqKTVoslHKs*slIqisO^xi1y+q z7Jn7q$q2|O6vt-WPlLM8aMLX{uw+fi0at69VcvtyJH4{fWjAp%&3h=`@{1{QjET4L zax9TeN^Vl_OO{^^){~OVSZV)kUj6J1kA!kmt7`O^)v+@A5a=pR<;$r__Pl(HO7sR! zsItlBl(Zt_eq$E7oT?kyvTmc<8@ z^iI>0(eInSAH6HmS@!_?1GE1az1#FO^dC$=gx+KNXXrngei*&i^dsm$q092KQ2cr0 z;Bh}0*GIALGv7JrKcnSMLzR1+RB{<4=jhkPPtUFSuaWk%S@c|x8RRebbrwB=RW_ML z;w}3+@lKzonz$#;TgoXeyU_b7^Omz(v3L5&(!@P&-rY-jr;jI1+%x8_#}gl`#}hfm zdrNpcNcxpN9yD=_tu#3vlxk^s1Zd)xn714OqEU2y6bEC`D;q!hFW_6MUcH`?99_FF zMoMlqE=Nfl!bn+vFJYHWuV*cS|R9=o5 z{um%SIR?l)oQLH@n}_q!ejP7B`*pk!?bpX5v|k_3qWzk94(->(^Ju>&mZEh{WZlc? zzgS(X(EDx9H*h~EmCSj$YF!`Ac|D5DtqU19zYoJp=GE9`(`&m|Q>pM$TSg#>OFn|o zxV081HAroVXR@-?b6s46JnkwVm&$dH#K~(Cmvyhjo?Q03U)Neg;#pjK^7ba0AMSN4 zh3EfkEidDqqX)8Si#M95p4Tg}m#Sxzd1=g>amx2nMn&S%(_VEXQ&DJ`w{nOi`zjL5|N4zci0R1%DmvjH}wmQ=03nSYnX6uek&Kh69`fqG< zRoEMSG}0N@2mK$@ebN5I#(rr30pl9%p%LfQjzW8$rjr1?kJeL-0zN8uH zUt#Biw%C6H)6>WLZ?UY$htJg`yJ&8Fp!sGZy3FivpzE66jOP0gk^kH16HISI*9+_? zn*J^J`lffFPckiiX<&LM`ef76uZE^SKsPeI2i@58UUZW{R|NVL(|^Y2RMUS!pJrO> zZ5rs)O-md6AISPE+W+A!@oyIRpJDoM*qfXF2z{pM!|1cna;4hY{ex6;)|U14L-ybL zI)xwnw&w$(LfZ=0mK_{@2cJ?ZT_($KoNxhp8>M)B+W!)YyvlE({EG;^TP2VD$VXtZ z$|Xu3e-bU%#Q(-Cxqe7L)RcAqAvf{n58PW?j-#@2Td|IkBdc1Ih_0-Y%xRjIqoR)p zAHR|_W4Z)snXglR(WMS0Xg_>Ur4PQPqNN{oV=wtbhGH${bpl>mo5b^$HyQ_Do2=^- z<8q>tvYeQWq}6Qe@&~TT^?j_%ILKqV$;{LBkc^?s-SdekV+3<9z87qkJa>xqz0NnIQtNSF$KN*g zzJthV9e+&CZ)u$n4K@GsXICElFk3#lxzD3o#H6>+<5BJgQ;v+u7lSe+-P6+Y(4?fl zWNCTG|Nox9eA6%&&5z&OZT_5d?#4)uduXS zxk&m-OUnb~lK#4-<>7HjUu9`|a9q;gu(Vv|NP2*!PqOqkE#1J<11){BrLVTMToFn9 zAWO@a3ncx&@zL2|JU%i%8%J|-xXrQNjGeB*p;#i77bVxeH}ER@MqpUu`#yR!^8VHC zJLF^I&cn^9;z+(ggk82$dFfyFxyd|p`4O?Y)s(hQYLjy0SR-xtE`+Vq>;6$eOm*ZZ zF{802JxbaY#bj=`81WRZr1V11JL1yis^WT5+W$LIrRo`H{#wuXEG3>bsa|AU%F}&6 z@JzQo*&Ev5y93X3nT4MB)aqH-%X`gJf7$0+QgZzv_jjeo;V=70Uiz1PMq>Gv%q_04 zZ$tZE_8Eg7Yvlz6+o00zKUHcKZbDS=(_g))$S+c>%4vlRUFAz zNwCXSDlfgRrt^8v#=&TO4_CC?NN&n zPw`4hFZ6sYE?w63gQT?okE2S}GuQmJo+m6Np0WnRdQzV5$-pz+_QKWrRN$E|v(WSD zT0IMU`HXq$y8aO%l2cI#4 zz9Z0MP0z#U&OnbdJs-PY*9*{oT`xrYb-f7vJ@XfR7h2c#v!v4N`a9(LzmoPta%DbN zyIa|VdL8^6Hkp-vzlzUdkoO!*c$H0N0Dr32QhG&P-B9C7$MQH(Dt1{>tbCg2W92oe zH|Lh8Vqc0=atBc2WUfei< zQp2mY){vgR8TX68Q(B+2y3q5NfoHn*LeF2Br>PU?dkfUbXgZkI||2S z!*M*XW87uaGB+N_GrWV&y#e#oGfFRh^(wuMXRi9ckhd9MJ$8zco^9b(^xF^~JN3x! z{j1$O4)}%*CyP}xP`xYaf;+2$M==nihx*XYSNNNB7fGSnb9`o0F{%9%jl(`w!lk#+b z3Ov(oPtVPq`*Yx#F0;_{FSU9W_VTahsYmv=NckhX^f)}SOJ4fO{vMXQ?TGn%v_G=% zLQgQe=z9V^G0^v#-i^r}nlTGi%=ZAs5&-6a*{>c6z+8^2Xqy3Tn0Q!FO7d-{7 zNA|ywN*~$3PaeNG&wG=sJID5$?8EfB=GWwilucLbN0ut(8Gc%maep^Yol6&zDvrsx zf22zPI2F^bmY5@{n17{W_;uV9x<{KOO<}2l_#IBH+JP|HlI`jZu`@r^CMHQw4Me`b=lr_W*ONAR=m6pPh9 z%eh@fRpQcTN$ysfr`FljQf;U+-HMvH6~0~mNg+8ZN89){e8J{NtRBgkV&ktlZ;&JS zzsJPy(&#q+0sJ3?=%^o^H>H(l(~j^Q+QiOjx@P2W1eEeR$6AjU|0G_o%BrwyWJ^?G zq+G|HYmqJ4^G))Vmg-0wbNLpQs;X#ZN=BxM^W)Io#wxKix3S`v_G}cS-!k$Hfo|ic z(r4NHC?+HFV{)cJan4V$J_J$y<-Y#pNi6BH^zPHN(~n-*JDEjQjcTkHoA~^(UjBY< zVP5{`gFo(zPM*T>Ph$O)nq^xPeP$Z0q9B`!eolW?LWGq}LfY!)zNPo6HTq zPH(n1g4mg6+Z@;)G27P2rcZ^2>J&f!%-I;x+6~nf-P20@J@iKON|Wrr*H+OlY^y7~jOc z$n1yE&ze4rUL3?e7x*kO{ZD+J5A;&gpJ0E%^ncLH0{xytIN$Az48=zk`-4MOTbR+aHOgBNVHC=)JWuVuYJ{9|~0{vRx z^J~+mZLm*tzI`0N#}n|xYuW@Ou#vYi##-Uw{v`J6is>n3b6-&&*J zH2o>Gzb2_hZ^mAhKOdEIZv|zP<=aHIEh*atk?rlkCgr!qx)qz~3(@bO<$C6et{tfs z9Dj7Xk9~X-dAs;fT0W7wnzUYDPe$q4L4G+{R*)Pyj?bBwp2xacY8AaHZcE|0x0`wY zB|3M@lksxRAm?29rDBPf5lcpj&zMrReZf+D>`Ec+U0B-}&ATQ0t+;J`Q8ZQdmno@ZY|Ms_tz}dk;din{Vi2hag`~V$+@_H zTC%KwQX~1zRLnq2iD!C$au+w{IVhF#dsoleeq@ugwjZq_METJQ`=w{?Ypl$r(eu;w z`OKLuFK2mw))pO}wPg=w+%`LM>>^SKQDd()ps?=;;5{l4j*Xn&ONh4yEK-sm;v^JTO@L-axKGW%E1ADHfo z-iC#W z=)amCiavmrBXbLPEve+ld?I`BM)LOQk(pNdXDx=|Cx7=yjy6IA*FM_E@(J*Di@QaH7G+X#Z#Uo}5zo_^xv+1*G-=Xz6_lenBGk$eAcioINy&c4(#y;u4F^c)O z#poyfYCCE+{pvn{$*8EDzu_@hjxzkafm}WEj6fw%PDmeb#UiVJFk>&{e?4jWb^ejO z%BE+@?^;Srk@B>Z+fY)9;Ey(8DWg-R+#Z)At&$qGygRV#ejke}-J-0!Gga0&OBL6e zoQbsUch%~d{4HVi9B-a_1eLZFm!5GG%u8eLNyYfK%gj&4A>-~%#Z0o)m}oZ3ION>1 z)LvHGf6W%oTqcce$*j+qEu8gPvxTuav*`~imbo8VJA8>eM@WqgZPrXCSNG3-DBa)p zqYAIBl78}&7gnN<&5tal<0-MF#`D2c%v4M1Gg`ONG>@F0isSQcS}Oi0meTgh9fIS{ z&!47Zr&~&UEh|m`(u6NTX8R0~w7+Ib@98r4u$7@BFw;`n8()s}q_*D7O2t2Fsq~ta za*9VH=N?PN&M6ryeJB+>Hx>JYrNmQeOZIX4u1v-~8F2C=`ssFpEXaNi}H8vibsK`_{~fA-jY;ITh?i*n5C(h7c5oEGyPe}i%IDm z4X=rghVtylOV~?AuSnJNauQ8U>Dk1OZ>3^ZrD8fZEM3p)RLrZXn4z_d!7oxVYf~|w zt|ew&D&|*l%73m_x=;LASnMgEtF2GfC4b?s)YxrE#r!4}b8#*0dm|OI$x@|CPrv8e zd>qg89q=v3@yw)Z-+CO+^!vzd=Be|%LoI#Vo+|yfshCS@iTPbBW=ATfV=XZ|Q!($S zVlJ&E=7Uts?o>>tT4MI3V*Y5UQu`|XdBUGkrGKWD(*K+){lhp$?!tE_M#p+T_EI(e zH5Gjzj+V9l*;;Bmn2PzxQfutF%{sv~fIR0{W@-QYOkGR+=V!_-?Vo!*!P5S@$9k6b z&prOXSH3)-Q|2l;`v2Yfl&9{_!F5o5Yl~j($}u44PBNQb%XDGPa;|~dPKd6gxl*_C z2(ax$JnGxNk-tDH`$ozO&pZFLD7|NJ#8UF2*Q5R~mlp5WtotMt`)^A%CzkoZKdH;! z%~Wt@MSiJLj#-?XarnU~ONr;_=x5T_^!Y67GN)5Ko6fz`XLY_aV_sT%K8}%@dziW^ z`9!d8e1%jd`HYmObgBH5ww0r!R&FWYXwzTmg+I?oFZxkSsa|O8iM~a|7LN`;Tw>#) z-Y1#2-0xD0zqVh8MaSCzebnO8vaVsO-Hj~Om)KI?C#LFdV&35$s-$0qcc@M=Z@ELI z*M2f<{r$Gm*Kc`uTB?0bE%i=xPb<7%S2{lDnx*2;u+-N0o|rH3?YKlKNszf(JO(*; zR;t9aEwwoAm5=wYQilAkwPa-S?i`EKxzQq3qThdOD6u#;{r-$^ep;+}7Ov!H8qx(e zofqes=d)IB+B^B2TfIMJ-ixAfktLw`aclf_ z^;5CM*D)Wr435=u9%^K1e;#UVX@4I2zwVzr$Jxo+b~0tjNPLEL(v!lG=xp9k z(n=jg-xE#w`6eZ$-??R+pF!%`)k@No-#a?qJ~b~M9dCIew)pq44Vf=;uZ-gp`>;hc zNB#erMB|fwZz%7sdr)_A3;86(+9a)L=6YI6{$iMZ$46r2s$Sy#3@9$Aj_Vba)7V{Z zsiu^pZSifWy^Os3a;l6zmXc42^^7Ecp}e^6jO&|<`>Lg)@rlkI{vEHx7OpD)%!%%W z{uWzFo$38DH{Sc+NB3gzj*DxruB_kUS~Bh%sTK~f)VuMX^>gTPEVb>~ifGU3NL)<` zrAA^!yh%giFn!$p=ESmg5;d50}CA=<{vPn({?I7*Jp#3W}9Ij35V%=aWm{7x$w zGmDs}K~9;ocjMzv$J#8&NlIHl%o&y=b1~k=S8(tUircn`nC2EE@9C4$mXLF1P+F36 z3MHLoIqCk$cSg^)ob(thBd4-t&I)qQDOuVYa$1zkSw~J)P#Q_y#<#>OTX9d<<8*Gx zm{viI{3YLb8-LUameSw|TEh+6ntnDl(y-)X0 z+C@PQN!`Y`$10m2oh0Yt|AW2vfRn0N_Q!ko%r3j+B%lOGKwJ?O6%`eARZvt^R8-8U zsF*QhUNh#L6Xu*zF=NJ@bHbbzbJl-Vf4?egEGbKZ{l0uCA`GuCDIW z=gb*bG9mG3gG817Y3^A}O3JHdde^eDY#wUCRgBicdFV-!2awTD7OGOK-j_RtnF4n$ zParo`?9K`&lIz#?R8pFqy3|=VwYTQz$#>b(^7^hBJPT*AuKFPz@$V$NEg`;ut*SvS zJX_>Vo3~K4_3LyFwY?Nyf4QGJQ!48gCO@bW~vDySXG-9n1?68Q{CD`E+t52{aBGx*=j*M8F1e+YOwh4Ar#M&j; z(GhE(V8=wPLxLR}v5pCLT*Nvh*zpnT>@dB@d77YI1k-!CrwiSc^qE4>A#`owETQBL ze@VTnaIT=;1^Y&x2GhD-g}3{#-GrVlcR3WFQ|M_LGeY+g`gYR2g}#GyQRq8K_Y?Xq z(*1?LoAdyo?;+hF^u4493O$|l0z%(MdXUiflU`Wp2S^VV`a#l*2>lT0MTLHt^bn!# zX{{xNwx_R#3jGLWmJ)gf>1Bm}l=N~!Kj!GiNiQ$>6OMk;(NB?HL1dnG_%n`vmh_4u z^Bn1wgnr)PFOVKC_=}`R2>lZ2RfT?;^eCZUA-$H+uaaIz=+{WEEA;E6*Aw~;((4QT zCg}}?ev7o)_O_#Ek{&DgJC1&r^u~g}M|u;X-zPmz=nqJ5A@ql&w-ov#(pw4rG3oI_ ze?od|p+6<9KL3pL1ff4Cy`9iskltSCFG=qp^jD;J6nYlvorL~c=-R^0Ldlhu(D-Ps z+9hJ&CfLM?eV1UnM(q0p+bv>0B-ri|`!T`xh}cgFwr9kCPO!Zq_Dh289kE{%Y*NI2 zOR#++_IrZu8?ir1SWV$PK|bc3KS)-wiBhI>`!b<-b@XneuMm89(pL$+2kC2s-qX>0 zk-kpwy&XM?^o@e=o-XvE zPW~`QAMRw1aP*N*X0oG?BK?5qJlf&MIQm%9YV&cV9~Sy}(kBUh0_jJEK9RKc{Up*l zE+;$s6w*%!eyXESBmK1Cr;~nG=rbIBCh6w|Kg;1~lYUWfd!ke8+H*gOpF^3Kg+7<` zYeJvraCaSZI4X^)sO_BL0=o7n4@~myrHO z=u3sJE$I2I{4kc#`WYPGAf$Vq>To%+MIxqq;_7e(u|=KSmBf~am|j^_hpUJUjhJ4c zREMjH4U5?KvE6HkH43J4=x0H%6-?>hguae+kU4if>1v^GAYCK$jgG#FbiLp=lWr~a zRMKsQzJ+vqq3t=V4np5bytB}^30+e-U#MB}S?|rI2l6Q_DF2tuZv0lZ(*CJ2-BZdB zNlQ)roEV=P(`!w6u9MiA5mWD0g{6p{<(@8En%KD!gT7^mO>uI=h+W~ZWrWx)V#SE*^_!eO5o-`kXWJfvZX}q}lZ4)w^Z`O|LRz!xrld7HZ$|ns zp*JUeq|oD>{1&8-7ko>HZ$(l8Y#*ehW=w1=T+-xg;qWC#e4AOC|`afBAMM3aWova#^BnlA!vhC08URO@iv5 zmRyyTOcqrCwD)>nt?a9E9N=W+e%4FxCfJ?ay!Q&>LDoS1hsdc7D@e4JK24K(*c78O zTA?L7 zK1B*AN)`v@r_r@V)&8u=nay51PJ^DKmfE>A>GeXtO!`KlXOO;0Xgg83S?Cvu-y-xIq;C`2P8x0(`hCG`3wH=r9g1ud zr(<_UY@P(WD`I^U?Cyy5OR#$))<41Sjo7>iHa%hk670T+&F3)f{{w>F!#+GLbc2-F z79J5Q3-dc!Tq(=5;v$QW?q~E0Se`6NFujVE=eQG0uVSf`>#b zJ?T3tV(E$7;Sozu_4EW!-Z7Z;F0$WB($!! z3x*ejE3dX2%M4gSR@)OZ%@YM#1IuUOTZ`j1V7=zv0kn{m@$DkvCDDpiPAQ$6ugL$E zepUWdr@dPpIm6@!hS#MWIpYnX@-?f%n}X}7xw7<)4X;r$E4)>r-X;a>v^CYEJ4dzQ z9r^RtA$Pv(>I{r>TIYR1%RMUF73)-ez&a|aQf2Lxk{^|{>r+K5$_SwUp9tPuJD*Y> z?R-W~C3S7~?Ie=n3n!V{ULFnf_bVrv>a3LfdbX04z5JGvcw@uM!dceU9{V>oXj%Hk zhM9^mdfyY;-q`S=(1VF9y@;b1b@XDSKNguGj$Yi+OOXCtWR`UFP|{xtZf|UuCA57z z@*AP;jSb%ky%gn@URr3KWnIGe!u8dlEqxZ0vZ}Zv&=D)ovK>TXEbBEl%Z9~zSgU`O znuueiGy;B>|115A{P{S>EHn9m;WsHql>IJLzGhYULvZ~xSC-DQUn!Xt{wz^aEq-8~ zwx)V?mZ=T$a6@7pqAqiF21YrpQzK}(M`gPZ{k5#4k}6f!UMX2u(yp^?rP3^GEqHV7 zw4prOY3th28R6SWBtv^Anc7}CcRD)BRA;4R=h;eD_OdG_G0T1ukJv2J9{X9QW$7%d zlDf-Ebm@9g5ZY#0E1{PouJrPbZglhtr0YdyMMtmX=;5T>iOdK`uS~jw;5N%T32n2i zi_kX9<`8-n$}2rmXw0&1!lkop87ado(-AArvRmc)WJ4*_Rc^R=rc@Gclah^CGQyWM z-7X~?=jsR;rnx%l9pAg8WE0l;L-zNjcAB=6dV9$2WVK-Bq@77pvMK9mT$JnlCfYV@ zwq%m*;WuZ=LLH@&eVPstO8>N-RivHLr|A?S^-oKF6Whx7w#SL4iL^~ED3|OYUQNnuhqSQ7Dzc+ent>LP z|0}(y{AqvF9g@ip3`3+GxqES;@-?f%5`ycexw15OFGk6%uw;oEN($C#YpO@%T5VWb z{=9X_-OIQ-1EZYQSys?;kIHr-r!L1jDydRs?Uj;^CGDEKSC!E~|5p^expr2fJlYvf zP9-&(eLIO{SlLOYwwFf({T=BfQ=OHPtIbxjvX`SMiQGL{ILqDIW1qXVEY00Z39`CG zm*(zaLR;=$Ug%N8m0rWqYdU%@(kqC}Xh*N@=ygbs5SeuyJ%;ouf?MuhRcOoIs|#(p zdkvx2qrB4V3ys{prf_{VXiJ|}r3|@SN35Iynj{PEC}o#rmKFMXQy2|E4DYc2|^f9a{BKZh)z@zsR&sD1rJ`%Gy_|B6AM$v5k~ zj@4wGQ%hTgvDCF;qU&SPqkn2?+DZ^B^)FwdPpax)zIQz&+s40~M~hOTe>inAo9!9= za-R!fbJ{sBv2&cXr+;bv)^c8?Pgnc;TeALEN&Ugnw*KL{Mr;52q;3|rX5DR)x#k8zcYoGBAgNm?ZN|T#@0Zz7 z>R_!?N>_=4L|W-4`M<8@_9n09%F?q>(={+0Ds{0+9VS#|O`W2L3$7oWeI871s32M4 z5OV#x9zjYq=z37LtGv?STy!!e%jcrjpQEM3>iL#+E$i3m7}h&b-nw5~SXa0#94Yw~ zA3Y}<6S2t&wn4;>O0bP0c65U2d0`gP^TLgz+%bvVCJ{R}!8VQ9aS66r#Ews}<6|5C z>9X3w7E$hmL{85s<+mdeOwTE^ke*YHk9AK>840#W#Li5xy(4y3f=!Cp*$Jj+u=48|38rVTS;(KkW+6R;-7o4p zC#id2#Li7HJ*$;>OF2x>Baalx^90j9%27g}Px@G)FA)0EcrITrtF?UM-7(w$=$XDh zmwz$p-^uB(E&LF%ofE8kv~8CJ>k+Yu2{vcMc1^IkBDPzC^^Dl=3DzrOdnDM-(UxzL z^WupS`!2!ssjMt~pJ2VCzC9CteImA3g6Wf5S@yM@Oy$C5wX@uU40r%-lCDn z^^a}rpUCYO<^D|M_K#Tll<$ENt4``38nIRhHg9a>fCM`%%GD*uz?ZV-u=R9ZDDe3w{0S~K$JTq!3IU_&;(mBVuvNzLJ`xq0O6y#eyxZd zp2!^=+wGWO$3?7Df{l)Kk4P}Rha|rWQ^INr$BC5g`NxFgg(}~BsFRuB81Fq`HC~^q zv1S3KPY~(KE6=KMqM-V*^|36O-a)MjC(l;0@;wTtI!V2QK6{;~J4yXb=CWkvJ1@?3 zlDg+FOIF%>wv$ZzUcP^>E4MrcO-Vd$p!?P27p6--s}ARvB(>fJENIl7YEC%aVn zPfN7+z;Jh@sw7VC5vsDL?jP@EP5i#@UF7<8olZ*Yq~lP2qkP<}hWjZwEZVGXed?mG zY-Lq=kdmnP5V<<`DfLV`+FimUlpfivbUNBy!lRTf|1z?T;drSZ+pjZ?}BA7PLE6m?g}H{o3duCS)e6YYWi(u~r6kE0`3eiPoH_{|jcX;rw8xpc5#x|h0I zBrg(7>1&0)nDq5RA0p}%zftH*h))&zQqs2xeHrQ7g}yw})!{y&uOR+_&`s3yu+Uc$ zpCPoJ@jNE9{TAZmLhJY1wB09!zKZfs3w^cFn)|zkXN2o3*J1c*?wBHFLrU@H^JDr( zm}f;+Kk9XT8m}x_9#LeG=P8MKV)@@cNmZ^}`6Sg#tgBB_p}yt%^0QHvf6L#iwl?f( zDILXf8|jr~Wm$S9skJa4-xM9Vl6*@j?X|C|5%D%{#g*jidwX6xJ}=*{wn{%Fs%7axf| z<{RG&%$Sd9ZM9sLwl0j7I`S##RjkbzrTvTGK4?kMtCw?D^=ZmB62Ca5(x}uij^iwQ%9UjY8gqqUD)pJ@ zDahLyKbQaON8>FEUy#d7R)r3@CZ*(8vz3%zU`Qmto~>kgr9!6q)=8?}Wjm|F7_nJD zko?|B>P+yG`unQ-f#i>rjQ$Bf3kOdrrM>(`{;%|}@~1OrTegG!fXNRGze_pt&mTfH zSM$%PLB6xCo-F)Eu3y*CQ#F^pUv4e!e^ysbN$gtm*JrJs(pIlgM!Hav)KROMZ3~sZ zx!tN%Pxo;;-__4H+SY6ZBoyAq%HV9Xus^v9wM&;>m4m` z-KZ_7tUSBrW`beQ5Yx9h>F+I9Nxf$U)0vV9{T%69p`RyRC$z2IZG?VTZg8r6JE32o zOnaei9q%Z#z7t+&TJj}dS^d>m^JO_A3!$@U&<`TA3%R^x zbvP%9@;PQJnT~5!=-z^)MKoHU(@9p&u~f3BlhmG-dsJy>ZztIt9jo zU_Q+wl={Ng)S1|~q*Z^}VQzA|p7-n8j~sNVR@E@Cpk}4lpgr%`X#nf!%D-3-%Qd?4 zZx+89-C43$Rj6$nhboL|rI{O8D`I0ER!3};i1m@%=2fAd*tm$PcdJ5cV&fgwhS&tb zG!DO$7-}n+(d``F-q9UM{~+=mN&h7Dc>eA{SLtCV;@yPqOuC2AT}aO*bXU^7gr0-6 z+R%-3AHlmjx`(6ZB(3ev73u2GU*vldpHJvsq#K0pEwp|^xpl$LG-t@lgxyPR;ju`+ zDDz1_x|66a=)Nv1y$Sk~h%F!^oP|w!4s=Dt){48J?$UStT;t?kqP`mzKv0xf&Uy7&S6HMt@LcdS?8=)tPPQyQNG9NnnBS(Mi=uaH|siQx0 z^yiNL!qHzk`YT7za`e}Z{zmB9!Zs2g^7~9e>*w>>=e1?rWo{9h6*0`o?}>$i#v8Cp zH6-OzaM%x&t8>_o#M(OSCt@8P_A{}r4*P{zkBD6vbH=a4dO7SjVhs-ao!Ahk?+;>) z4*QeXaEHml6F(yzRz+--!>Wmmj@Yc|(~Q^{hZPK~QU5`%#<1F&!u*;8WbIrx3>2!o zTh+78HN}#Nttx*By}xAdO00)mRbkZ_BwDmoM@pYh($9GLN~U59Ntt1dwHsJK~6`&>Q0yITkH%M6G>Z}l^!C0djB)s|1K`5e)5v(&PKkGNy(@^nD(Uv_1f+3 zDtfFXSlgC~l%5R@6G~h2H8sMQ6&#l6I=M7Ctdq-?%5WA{ZZWko3yqXSt7hejf?6Hl z7FN`iSO+Vr^;1{W<>K{fa~Xe~n2lFsv>@XHTb&p({$erXk0OSQzizC%1~FuO$gN2X z8GlTaTZdbz3>hDC>k&i7hur$aknth6 z0WoBJ$c-h2j1RdDi6P@dZX;sI_>kL}7&1QOHX)`NU+!v0A8bktSrR_jj2N;c{I@x= z?_yo(8%OM?h(T@(V!sKdE5;HM6O$Q}o1cgsdyxKb0$q_Ncv#cwhOyZWq;$%IkV! z^^{j#8aH|!q`dmSmGEzO(`z@qVqUVV?2={AYNh&3)y>4hvbL(QjL1N`pW5bhsq_{i zjpx7~k)`K+DOD@4cv4Y%Nk~X3A*k1$ zu6bI5nX*@;bj{maC~eKx)HyRra9E;i-k#(zKldSrzV9M^RnOS9xzc4Dvalbe)$T0p zPY!mN-3JP4b$siXu?Lmf)9Xs>xz5UN@jl0YXBAAZaWE?}qd$~cpdZZ29mR$$d_+uF zL7ic{3i`2NMt|byPldL(a{47LJ$jF`9eabmC)a!(M$ZxjK0k{EuY=;r8;r-~&&y zIqVH$(;fCEu?HRY7O@!-do;$$+r*xTaWZFkEEgwtiNq7t!{XWPJQ68#cZ78i6B<2P zc$b*YvDyN#_lRXtcNU(=>7FSP1*}uyaVgcAqit9;)(Vf7F|r>dEvMEX8lQ^2vX*Pv z^3%DN-xp2#Zhd_|_DLyii2d6u_T{6b6<{9|tBV?|!?QV!ABqI8Gs81dIxcF2-Kj=N zZPG8(sCL&EPL>G&jBTg~mCwTG%~{Js>6#?zb-si z(jw0(Mm_M2;R%A^Ww{__~yKjnQy!)cAc#quNsy z-pbYfP9$tzyjijby-w``R%y@7oW>uVJ#UvZ?k&d3Dp;~ddkD-lTD-rT)A*y*vUq<- zN_FlQMW4;xIvI=6ZVvpMw1T<&3o*=HV80TpjhW{6oPe#B~k#pMIxCgT?1A_tQfrjtd>}RU~%kP5o>T*9kKZxR!?l8!&(ztz+r8O4RTmpVhcK~9kGQR z)}GkHaaME=ALmACjcWNG31^p%O%^(`4#ok|+=*C6&aO{$dOCYVt$33 zP7D!Oj6Lbf-s^AK)D}>84q})S@X~#(iyar_?k9%G1lEmp+edw<`vBz-t&n?=7@`$e zch>FZ>h>Up2!_5ni6Mf&6c5U8c@RSc1M5j_O4RpNl0?(e1a*qAk&vk{*7ycE~!F<=%o82M}B zI@6CWW0WCh(ST9LHAR2Q`4P2|?-l1@tMF6K>b_E|NI(22rSJpxHUp>;en_phHS?F8 z#(AZdt{UpupQRK#Kc%wJkZ1%pKQYVzU;~LEcgV_-Yh^x>=)qQgmD0-jJz7?+sczj$ z=Q8?Ya~bm%n9XHa1I*?qMg^G7Q9mj+A2BMBv-yZo`6GJaA_2KEPl=t$8 zL|qsuZPgd1Rp?MY3(L5+>kGFFHjIcyxbj(8wj`tbUU{Ng+L5PZ<=;V4Qs7>r7-#lE zC0VTxY++)0Dqz@PVm>D?LJU_e@*Gucr`q*uL6OkiS*^@j9RsCm>Wr#xXH-=OqY533 zs_I&z<|t9!N>q2F>Utzf7zQoR3p0^QHqEG&{&!SSxcDg#2nj@Qw;T1&AVz{%& z{rjC!s8w0`&lyD){@G^~U0wVjj#iZDc!Dcv7b*R(<+bS*IZ63^Uh9@?btP%l^4fhB zI+U->YxfK0^P2Mcyw*e7sS9(+zr*9)&>3M_sJpXaM5)x~l`ma6mLk)uF09U)Q?f8p z%J9)lsHIt0m6)y0yT}349#H6Q`Liajb(avIkV3EO4$l~R9=KAN@tzHRN2MvWHuYaL>Kud^;O z{5E$X%$sX@Es?ORt^TFH=y^*P)?;no^7^G#uydX-r*Vu(SWFI(QXOagzwP+tegl2? ztazt#r&lZc2%O8zFLkmowq%30R}}{4+S@=R^vM<7p*FBR^@z2ncPik|qM%vWsHCyH z=h&DS_93bz3!4zbK4ehDHYH|f9t-BI*-#{`_X|jAqnvN(j(&63g7V{>cICGqZ}&g8 zB(J+!E#Hc~{hI1{@_O~D$E%|!#6UfW;QY`=XwNLNow2t?478;JM zx0%?E@qSq%2(wT7D0f)dtL7rsX5V0HfiC@byQmKu7nV|uN&UY?ke*wi^mRt8kFO@V z;_~O=J0>=~7Bj$3#Bgo0sOZkZ&cqN)Sy(J**A5~vnJq6OrBmc7AMNK^tf^;7%AZYM z&ykcrhrFI4DSs|`JwHFZ1FG~Jm@{5tb zg!~Zlmy%zc{AJ{qAb&aeCCOhwekl1X$uC9zD)LK{znc6qCIPuS)(7 z@~e@*ll@S!|;tP%7dk0QJL z_dSXkIguXLyr%x$mAu_e-;KPkRa(9~d0S2PAaAS5p5$#c*^9ibCVP{&)npQRTTS*M zZ>!0^zS&SA4$GD`N`yU@2KTRk)MDa&qw}D z@(rP;Fl4y=J{9Nrf8rAJ{6BGtxc=A0CEEYb&Is}N-`^S46c(3xu6yrwXW(L&R`3g;VQ?iQ#Gr*dxTSD+V@$7@iWT2}9YgG{(;ZB4O9c zOG+vB-bE?R!egxMt$Cc7x8@0A)$tlX3rpu(c~m6q40NedD@wV$N0J@w>f7#Hp)a^1 ze~PWx4u4p#l_y2Qt`?V(QoY8Nr)zR@Pdm9~TabIk$t~A{+_O$@`4;4!b8?L$hf}5h znipOW9s0q!1nw}uNDTL2fW1V_-$yYI4vLF0T=HJH~(E3hZc$-V64R%$`+ z6(={m1-Vz9+z84wH*&9uoQ?3xEy%s@w3#p$Su(L5v}vH{$pY`>(|M(@}WprOsp-XIQ1+_ z`^}$DHJ496Wh=<1u;x(SgZ9?gbAgzBko$~vG5dghP7L>GTZJ(>t3MHmuAFJ>{*PF# z)3{#a(3#~{Hdys*6&@*wnkaZAU-x0 zz4ALWl(T5vgstgpz~?)WuyNl=OL+?QlWRfy_A~iHQ+f9O;xL=RzdFpWPk(cmTBrJc zcbM(3|8Q85a(_B(FtM;9Y*$+viB&mlG_h)jjU$#hY$CCO!~4{3 zrB);?(~gtUDRJkDjF+}Dr_3pN?*=vc4BDpDO4*vW#E?N@O*>*5tF?uvV&-U1%s)fY zff(*Xb&TzHB!(w@>cUpJp45v(k^b6JO8x!4v?u6YXKG|m3fj9a#JCnjtSd3}qZv)&TMnFyyyb_UPAACx#1?*SOTE8BE?z3>P79Cx(lXw-dv~$ZHI1{UPM-#Bg!)c4D{$ zc{?#&lDwT54kd3VhD(vR6T_v++lk>aJ083SJUk{gZs%?BTMy{8H{yR??+}~MMisSJd7sS9>*Adrv8y;r19i za&PK)GHXyHR%YBEUXz%=N?VJVze*cT3@bD0u1(DEF>DO5$H0zY9m?T+<(arYv2iKJ zJqw=tSeJ7Bft$!TZlwYYCKd*krBGdH~F(LzEoR%gFbIf414$L zaAZ#7Rw7{;;Rq?kyh815o6%@-3(x9zVK)B;xp}n%>kj6;Ix5%WZA4-yeK=W4@zm1a?J?x674%sBmId3J^@uGO!ZEp) zca)YJ*z(a*itG!GJJW6(`{Q!8cM=JkRmV!{OzwIomTF=Twkvtt`R_*FcK*AQw_Wfa z6+atuGz=a8@q@tSanCrT=mcI**8P52Bh(Z%utl&I}4N8 z8^kZLeTda_{4!hQ|Gg`IfB}^=oYb7TVbu=4TIx6-FR-ak28qeFNRs%Du;dNkUH9QQ=tVTWt zW>zEj0yC?TXMvg3$f>QuIXSD37OO3%o-L*Roaxv&4mvg(_ZaWvh+%#JJD!+D>3O+U zju8o)h387CKb<)-X$9UsDQN}R$)#4*8epdo^LxNkiNS|h=T0Mrh^!44&Y(v4=0d5F70*ntiz0Sb3Da)?W#Qsd%co0;?enGxI?L^g z|95>-_UAdY7I6h1cjF$tzgxe%6GN;)t`{+^>A)<14UToSmsvQMZ48MyyKT6%fW#(R_t#rM3Xemy)9q77nRnAwJi-h^=N-3Qh;~W;=$l4f9U^fv% zPhjEA#LyF9mJj@Oo#g}HyQ!?}_pY}P^F6+mnD6mz#1IMf;hJ3UZV(CU-PKZxSXD~i zd&Ao3oyJKP?jVL4fu7t+Y@C~6cM%)!u)B#(aM(S>@J-6va9z&AX(BO^k#wz;`Ybk` zwP7KwxsO;OwlXMMeLpeF@HgaIxmP4C!(T6@*dasXgQZq*U-_n7?FU4{a^a0qiYI7L z`{7dU@+$NQG1xeN+;z+#hPc7i~(!waa~ZikO}KOv`C}LL}_^;kJ@Sol9AGCec_KW9skfa7Rw# z(^6|3W8!ux^`m9`Q0w7cx!TW4ZR_EkQrg7ta6C_2EZe<6-mYI>ByZO*FOk<#RR6q8 z-mYI>A#c|&uadVj^w-Gih->}V$=ezF8|3W_{Y~30Tk zvQZQbezeu!Ply(IgZ&1o9nYRv>@@7DoP|G%M1QUxk2hmsR~ae4 z%P2>gTJua|4I*6ol7+P8EIgZQ`DfSi(^Bf64EyiQw_n-k=I2}9YV0RctBdh!p;dT3 zXZ0_leGvWioRn6M=zuUF8NJ_Wjn5o^5Yx<7TX<2llt)zawq=e#DTf_vA-t5c<~L`} z3$#Z6Z?QC}6iayGt7;>}4XgoHO$;qJH=?gZ3p2`DEWMhuCWypv`sQUR#r`>+n`jwx zIL(Y2ee!!VYz6a7xa=3{MmUC{JX5bdLA;cHTgtcokeR&3ew z=bO3OwIX4Aw>P8|yFv720CQsV{lnhv?VQFsr|~T*)sqVObrLaJ<4O@5$xz+MxPrB< zOV*a-#rz4Myd$-$tH@1Nj zgZl7Eu6JEU!mg=5mQs!DU1hW_uH{#j7}pq+9@OaP(VWD5bj?K!UieHjXW1@;SgNIS6Ipg1 zV(0@fTgCO7NPgWduA6-+r~RrgoFn@hzavv#eoLJ)b^?0EP-S3F=N^ss%O4HAbGno zT!6e?84eZe(Eo_;T-Qg8Hqp-EkuhoX0?Y4lQ$0yCT|{EguHoZ zQS#=Y#mJk7hLAT8El%D%^sj5b?4j@Ip#{Y@c<2K0&~%v<>X9XBv3Y1HdGpXxFS#Ysf&`1kbtgv9E3JYdmt}Wo(BtNo+6{N29Y($0Ll`HhFLf(4z_vOny`-$xi z7hUk}WzsWUE7ZrfR_I$Ur?@=3sK?`i!V$lKGRJCe7jMRy`^PmAtMUhe^D{awi0)1ni}+xN?N zC2!v^-;I2c^>-&f5BWXF_a(n4`F`a0BHy3<-sI;cKZ*PR^81jVkNm#mbswen??--q z^81q?Nd5rw3y?pM{2=lNkzbH}6ZwV6A54B>@`sQgO#V>vi;zEzyuIP%aPszslOxCv zDSb139U_+d)+KMbZwz_M5bKe*?7lvE%kCSHx9mQaysdv5lDGA5Bl0@G)uaEJQOG*~ znNf&`|2s1Z_Wt|Kr<%fV!}XM;mHbM%{_@H1!s%yinQ=|rcTDE&v)O+Xd7J%5legJ_ z40)UV|9E}13+MKK(5@pzx4++b9NSXc>rt<_@n&qu~MtZJbM(3j1SsgIncB;sTMdQ-oS6^(XBY zv37Igjo3vi7gG+Wo>{2RwQ`|I*uA7WDSgB3p)YNwmCK0vRxU5KqBE%|0iT5{h+z*6 z>`G#~8#TGBi0O{hFgyFuU8$XSUrjl`|GtKppPAPZ^QTx{>3_`3Hla<<3ztYOo0+Yp zRIe`d|8{jzl+zEKSi`S&-sSzjZ-$xfJ##&+@pJG7V(<*kl5Ql1-nEmKvtVa$c9PRR zXZ3Yb%dQ&QO6fnxLY?hdXvsqRE@a1?g*S*X=$!N5&7!@L9_%Eg8kzcki_Aue%uAeCEed^P-bo96WZp&0 zN9Ntcyl3tq=I7nL#QeOQP7L0{$lXT_Phb5*f599AlB$G8{y#*gDp0~BO}&TMyWiDN5>JCd%C$1 zzC*O1$Pw-$rT=e^W}0RCJ5Sqa`VqF##Qeet+i3bxx6$;YZlmc(-9{6mo{lC)Jsr)F z9L?^z(R@@!b23M>o0RH&Rr_qd>aR=tUFhSCEk9qMAm-=mlf*DzVc}E6FgNFv*0S(4 zF{~OjVXmBokBNlcb?HG1_5Wt!V96-n!e^<`TlgF?Z{hRAyoE0igN41Kh3UFh6ME+? zd`4=Gqz`*aDV}&hpI@RzZ_Ud|%ZP?oi1}P*xzX-z&Yf%dMX6=aWb~0z9XZkXIAS8GV45IO?i}yF%ISV^;}P0m7Ywg!g*?XX{njd9qo#Kt=8 zH)5MaY>7C+zY`nhk-2k)e?Int{%O@P_ZWcd@k00%oTWXDfQXVuJ(~Fic&EPc4d#)2WBS#dcsp% zz-ZdM!CNg0Vd-4Ut;9Av^;k+ub$06iE%ti|uXi8q*$E%#^@W*|EBrGN%9o##)Uzp@ zAMNM^SUgNx$il{arVhEICM=t?u1;#{Ie|WjHIMW>QdLH^uT~1aQcBJc*b02LytYzo zlVFVzYnxyzM9gLvo`)@j6$Pye%gDd=B3&)Cz5`8pSfTN)RG(_4@T3r8J{>V&9oQoJ z53D0GWUFHAfsHJ7F2HPLagLLYEY5M>k<-nr*opd(TZYG8bxyDm5wo6Rb*>L93z~k~ zOD$WSS7MLnu2QQtJ`}O|7$!WPNJF1|eAu<6H1_y}!SEWt;s zs$40S(5F^mH9^x)7twCd8?GXyh^nFpDOFunqB5hh8m0W&)SVV0zSf8q_DHZbBQ|G( ztrfAk5^QwDY$WttN#~fhS6=P3mHNUck@Ry+`SKh?v}R#lLF>Zm@~?iXWc2j+fY*-b zI`VHfX}v0Z?oJz<8>ybO(dQM*Xc(!YXwQP3H0bGZrPX?Z{8v`1jAaI!Eq;Xm`pgKC z(2Mr^{d;d>xFTyC#?U9~7kuUr341nCJ%)3ny=OKnU z39K(MJI7l;XJH?aupP;IQmV5~&!lbEX;vN{cOOORQWpACBdi8CFEQ+yfDIsq%nWQk zVtVJm#0hC8g07|vCChYfQP z*iR%ZTW%nwxKDwetjO9v+Eyawqir}bA8jLuA=4IilLars7HYohxFv>Ve#*#QH}$V4D#e5V6f--OY(L zL=3+(JC4|}xXbPmHqVXb8Y0oi(cDBz$HokbR<>kqjM79I<1B1N45I{WJTb&C>TXTU zkK8uIFmkYPTVj6XCJ^(Zv>h=&O4}3jqqGAtj1t<|kr+k^*iOX!i0n+vdw&;V$WZ9p zL}EoZBD)gn>#*I3`H|b57)B2I_8^9l1GXnIeafn~0GszBHpsQHH?hGEn?y{Xkg{u( zeTWT-7;@IW#FlW_e#G?mo~-Wv#E@xW-vPvyc5(+2L-vK-LBy7e5!feek&D1BM8YC) zoRn%lQTr^Pw3U+*d=Ca1Z>Glk!a9 zAcl;BxBL4l>C^g&LOsm!_Fl(&SB>f8}G35iA`|W1;loA*c4(D9d;qHJsfrsu}KcQnArXfyM$Pi z!!9Lun8Pk3HrZj96Fb&nR}eeVVOJ76)nQi=JJVrT6Fb*o*AScHuxp83;;`$8T@kUZ zWG-jndScf&xf_U0bJ&f`7j612wZ+2LxeU@Iau0G1+fqt#?F}8b zP)BfjZzYDjfOx%)Si#vejaZ$-ZYS2(>AQniM~B@>taG%wRoFIX^;D6t^Mq}r)Srgm z&DyXU7TUMx>}j3tavJZFT6S(VK}t1~>i;d1Hp%Jxj&6OwH)#cH!gOLjXWmE5=gj+w zd4D}X%=_y>V(=Gw@(?lj3)sWNx;kG!Lac|wW)SP;ut$j%9rhTp{t-hgJWi~^VNVdl zIt#fci4AgcPZ3+lVNVkq?67BuVeLiVo+UOU$^m8_6o644ttf@XotNdNRCpOk$ZxGugVmnB*W#LU?<6`X39d^t`>OCSc zlQVXEMymS7BDJGjLloTg!vDoceVbnJkvfwYB6a8Jt#^naQV|{R62rGO+J#+m9(+qA zhSGyONvYqr|ND9icj0Uf`+5DJIh=)b4#QXJ90q1{81ogF&0)+weNd`}{979((?l=^$dA25DH)Tpal7Ct0~6+>%e;Ui)=m(0TMxmMm6 zi8|h)-|fHLisqJlD|_Zz`B+-{iGA5aO0gEFcB3yk*UB1kT3H?T&T0HaG}>9wUQ+7! zB%iU@(1D_L1#vv3G&r zY#)n#3NYKp+6r?(&PU&fkA{X<;@uIP;LcwoOLY9`-Hf{4={*?bv+yH*k61)owwv{_ z_!H$iy0QG3nBN2bLd>rfzY@dBia7m^7-9q1@5K7LHf&#xH>$S@2j%+xt<-8rcH`eu z59TZS^g{{5H}4M?J$2zg`S&|1u{V|}KUq9jUuaX|E#>8HBAb*wYEeFxPffssx+9YN z9F&6x(K~yt*q`IKq8z+hjCJdXb>fxCp}8LaAr^OzR}0!V+k@!|?=y?)`_&b@} zg0`B4K@O`g^cJ}VT|MQquuw@xW4At>RO(G9Dd`;FOJ?)7Sdvv+yGeb2hg$h^cGMNU zzR*K3-yh}WUJCVK{$sB9C5Aiswc!-8qb{6SvPNu)_UIk+`a<`Lww0G(J8<@y&D~3w z_Ad*kMZG7>zg?uHz_|$<<|xUkUxC?~1b(}|!8tST#q=)e(K%EV z&db&573)-LM zU+5=weFjm!GJ~`ZmrEb;Sy+0OzPoOb#6yULMTue5(;REhmtGmYc3DZYJX;@iBMR}x zwDQV~D7-pXXR%mk>c4#y>a51|USPBR$?~CHOOunbKq~Q9|l``e^Tbfnzd&)P8yndDtS^r$4?Uemab1CZcn611% z7ubFfQBeptvkkPQ{|*&Rt-12vB&Ap_=9f72E0ywDFl}fxT>&s#vv5nUg{7s1+QheJ zskgq|OU>rh;Wp7z7pBU;%Se6OJ1g%;sa&g^*O#SlEPvddvuKz|*xqoOlvc(ZK^AP)92_yk@`|jx zH1~{m<$AK5NDSlX-65rT`UDYdS2fz81_96N_%zTKKXa8*bcIf^00cz3agdRTm5j(>M^3NkYu9NYK%^5HL%obV3k(S zh*m!&|E?F?fz`@SimMHLvO%e@Wj~E2hIobChQttuz&0Z0V{T(&KE7<8AiiqDV>wT( zFSRVb9xYjjex()yGYc`xfSHA`8kkw=XOvm!XOvlJ&p|$svv3o!(4K>Qyuw1O?eoB9 z^n=IJ+yDzVr<}LiW{g&skS19>qvR` ze6E!(M8Y!r)Bj*A_N=kB@?5T!@vfC;r4$hhk2U9Q>!0t-UuRwTVH@_@pYm)=tbNRg zwc&-FgF zV(2m2*eSu##?B>7b7!mYO0FjpM8Zb&MJe^UJ-s42Vh+t~6RFX1`)fIkyNHD4_E%ff zh&OarYJ4N7aaX7Dbt(0`H}iy_X|~q;{P1Ko_GEshStQ!KLEp-?yqmOa{*2|FKBK*zZBl`gy-6F`upWBIeisy@~l;Jc*cJ|MwwQbnE}V#QHmIKVl6I+n?AV zhaEs{aKtd94kR|jVfH<1JoSeD9z?mJPG1wTVGcW(Sfj%ZAvQeD(5_)-Zsc|siIEc7 zdgAr=zvakb6-`GDn2j7p37Cx>Mg*9R9J~+AMh;#DW~1aiXrnpOjgpPrD2Lg|tr;=s zvymI^FdMnC4zrOP=P(<&2^_h1b0c@CjNC+y+&faLxwTuJ#!URCOdqAjyDR3y84Dq{ z(kgxf=?G%T0Pl;ItaxOCeGsw935J|`R0-3ZSrb0YS$LR8Sk8P;N?{Fra|~<48eqo~ zL+$}~95KvnV8;`~ECzN0F?{2@CVZT;=4g>>!eaI(L>h~dk*P4^rXFF^8JlD!eB4OX<{Y*-yxOn)V+abUYc2(~E zV0U#fdXPJnR{Okcch_*Qy)Jy2>&Yon%f18jMMY2Sej#EBt(?wQ{OH+j zxwI8v)(ZLu%v$kz)A9wfQX%}2Yxz29*{MnO@K1)=Qy}Ow^eeL&lHxetxbr7@Gp781)vBRb3NC#}<((Rh2JQNH<|(|DWH*h)&Z2i4`A8^4#XSeqIhy*FZ3#W?ab6VHFAg0IhRx45(zt9=_I9oC)bNl(CTciExfss?m52Sz;bfggP*e%@4+vK z)k?C~3Do&5~AX#X3D}>RxIEHtjjEZ;7Gjz`i49*SvG(TKQTe zZ1+5;lhc^0bFvhLBVL+@NG-;0D@m-LiUfA;=!q7iog zQqoxN-><}c%>PEr@9BOghI!Bw&zJuoX7^&|&RO`ANSsP<_mNWd!>%$E=7&(#^uK8J zJYqo>Dy{CDv-(f5x@#3;q$s7>i@}HgyM8Utz^Y9V!KcQViWyK%>~x1^#LkRZQ7Xw3 zro_&6SPijrV%}&I`sch5MB-eIUBCZTFI0|G-V0r;%9wefo5RctJtCHRVJ?T67kXCd z9BUH>{lYSf4l#>%+iY1a=jPBD3T%z17xktb;z`dF<}QU_Y=P#9+Thk*q?*klTUH zMa=i9Co#+IgK~DwArf{@GryF={|gAEbIGslGHc?epVY7we!&*x`a8LWM6Qw7WdmrF zMbv!cEuv;$t`UP@$XZzR>1ST4+sL^*e}$fb8{)8$#Bi+wTUI58JI3(zYQ!32U0|yd z8}6`C#6~)74Pv8QyK52~9kWoEFf=!E!$e{%v(=KNkprb8x0GO0m~lo^n`NA}$y>%* zhrDHqb;;XI9z)({^8cJZoq08J<}J-0t|e{ZnyI;nJFBtErsOeD>ak@78%K|ANNwh^jmVqFHYRT#`}^|cRew2JI97Ba*Wf#yJMel$+paB~ z+gp2V>py04b!g1>ZWGaBGkN(^??7qqRuD|DTNEi>w@8liS#C4-3N5cBl3CcC7_LRD z!*D^<&!!?_>*0!0iYy08TOJ{pzY5+WX$AX-Es3c=?JZebB`s%Rm0Zi?M8ZaNWhtE{ zqi6B3bm$}n9o!bh#^yVs>a7R?T^4yhzynl#x=3F#)AxvYKERlP!Ar_`=Ae$9B$*ypDSv z$OnwN!9xt4d8mhEbObt%=D)Bl%ZPTp(p@9x-L8?;=M(8_{+BO1{FYlzbdlJKV!s=E$AM#_j7v=moS&uPJYl_ub*qd@i?rhh}^>{atDDv8B4JpmE%M?XhO+qMrlfp+LzQ#(#1Z~Z)py!G>B^0p5+g}n9ae@{t z;&`0KcFpe7$(!A0kT<)}ByV>AT+35L zyPXDXE~Rh89R<8|andrdONePC+UQ?O%&%UT5%a6p<;36{^yCU+SiOK=sgrYt(;^7t9*Wm6|X?s+vKddUL?#nTT3bK3Sp$I6+1hckgGja zYTI6UTPgLkw7JMmXDM2-9h1${?Q^Z%BCXgg-R^I+avOV%NYs@~x4_J9pXXm>-TrY;TnKyTT7F(68kp1fl2X6pc)7)vwJ+6SpPa^*q?UPNQbk{0 zO*F!{uMtCEfW1!4$H^PS>^n01-_{EWASu*W|U~z?{`@io`V>f&HZvt12vfkG1{0dY_oL@B?Cg z>^~&t*Z7Z!VU4c|O*w1c6$zUe2TAET?zKN*P0QAwlDBOA8F|are_vj+3!YXxnAUtO zx~$zVD%$oguNrN}q1`v=yx{l?^6?e9gxX3CKzdocHYD%I9# z$2a4CCT3SIN9Q#DC=#|CJE~+4&RKpfX+-`zHdp%>SNoV!ZS>~%irUBLYX2q@)|=y` z)ITX=bJvfd&0W7T+1&LR$Hvu<^`Eo`GY#IcIgZ_7Z8$M!;U7}VX4MI${$cH`+AQz` z@0^^g9Yn%bhm)k#M^AI>Uq+1sa2XEY$lv5rPG-~+c|Bjzdd=&s2#{# zM(s%6GHNIC8ns%#GkM$p{`2%}ro`#d`Rr|5Y1{hMm3HV@s9kfAw|;daZ~f{{-ulsl zy!CTV^470^p8j&bE?~d9NZXAZub#BS`qhiP^=tO!su%a;r%>-)QrE|CbF7!$=f{npVOzl z#og7b*_(mV7J88NfuA(~yq|nrEketD_Fa@1;_BMyyTyoE_Ps9WyTKx1E5tQYs%t@W zC-+05CRliV3v!D)xf?{TiDR)OEwQ;gl)R0_QsiwcmL_jw@sHP6U*n|sM)rOQ(e2mP zVQkBLb6H{*bvLtadEPH061K|R)PhHri<;oMsUj!O=F0bSG#>S@z39k9sphL&r4(|v zmE`LB8&;0(2l0Wfp&cT&3Nh@priqp;j3kEB%xGU& zl^9~`gymIkHDcI*-5KkyPE4I45gTzR+28`!{MSpM~A3O^ZGmo`rivZ(X=W{#`-z6_~f* z87{KLl?1^@eKvfAV#5<`M8rmvFr7D9m>zZB?JQm~>Ym-KYK-+U=4#38>3x&^t7 zo!m1m$Zg`}o^3&HQz!Ra3v!z|x#wGu+uX^$(1P4JC--6ta$7jLms*h9(#gHtg4|Y4 z?v)ng#yh!JTaeq@$-UNs+%`_`^%mr|b#iaCAUDCuz1f1?c24fC7UZ^fa&NaFw}X?L z*@E1TPVSu+<6uI0U*#xF`5b;p~9 zv@gJ{FZQ;nSvigSibh*ezA962m!CZTK!{;ejGyXZ_zwslRV=IBO#!w&;FIDQB_$L$2k+M8abGdnv{B2{azX+GrVlIXY<>yM$wi*}cr4a;;1j3AcVfio}45S){|eQbV7U%4zR(;d#V-+?-F$$IS)AU?J*GA%?36U>6ee_e(A!=I@tWOw2!_c?q$iyK1~dlQUEM2)4RY9(#0ER;Dq=$%b~Uk~5yP41HN=L+Y}z^eksFb-MWT^A z)Ze8vzIUQpJrk*{M8$83My#fU)hab3MkB6Pu48)`LtL#~pI~7Xy@I(R!Kxy5V}eyj z?4|_EB6f3v6(Tk@!7hqdPPZhOTAGDhiTT*MjTmNr>rf*a)6cacVKe_v`l!0>k5(mr zl-~zdU&30Ks5VAbw>7G&y-}SyC^b0#CZAGSxV;(s??~*2&+jbRud^LKzbnDu^Scua zKEEfyT18*pn_%$o^aQJma`z=zeZ=lhu+|ZKAi>&1?7;+U8?lEHtX;$&PO$b7dnCa+ zL~KTaA)nOn?u^e+k5UeAS%TbS#E=t;(f5xN^S|Zs1hFo0enIX@V#po%4dkbY;TO+= zJxvV11P$yNV%?)YV9ydm-U0R;u{on0Y<`~DTyb9a3LV7@>1Ucq*c-fRrPP0i=tb7X zEJd`vM9j~Omx=kT`U)|hRbM5By+KXroU`Tyk+8i%Cn?1WhL&GvZJ+nwAO>sF@x*GS zeUjf7q@1_#En>*OXya{S$iKj55<{-#JtAU*qhISn*IZ9t6Nw?rmtCZEmOJx$kF|YI z-fsr8$n>k)2b4pPv8(uy7*{5>(>;~$9G zJL7ufdh(@66gkG-r4-jT56LNb7N+s+(D&pgY8)MXQyu2YY5Y+n#!%y&QmSXI8io2R z06jYDTC3Mly`%(tSB$moAkh}EU)UDB)>~?1;a6g|ckPpF|7Ve~6|AR}V$Fue-&xzY zV*6Pijb@FH#y?oskIkRN{Mdxek)1F$X-_aVX-^Q1kgH$iEN6z6t%xf&Ie80Inn%pyDGI|-ds;=rA51^-Cs)K2WT{Ftbg<6YS+2`4Ukeq=S00@5L&Y@h?~?N z^bc4Y%GsN>=g+lLFA{d;-yo%!Zy2j~Nh`qG6SFJ&1#%kOI*kLRbezl5b2X#UuFL$m z*maqXOMT&}KIuum^5r`TxOS@v3+628Agzt#x0!V2XQ5NlzRt!hbWSjh*DQ2NFpa`2 zbWJdgxGc<(U^>R~z4-*wk;_8&1XDj}p+|zLr{sI{B~0&5)Q5!ytqX(X-;PpZSxkAn zOB`d8uHwLYQIq#-Z(=^$`w&C4<2j+Zi6Pp76^S8Z0Go$cG0xFeVG*$_{qz(G%LId^ z6mzsFLRsj?+K6Fb{fX)QK)ZULmzckz?#k~d_*m~o40{y3J7xguB0JZH#c~$*6^Y5r zRf|gLR2Qv(y>h}24W(ApYGCsd^FAC%%=>TwV#u(lJBV0A^a8L2i4AtxLd1qf|JR4b zbG@5SBpTVfAySIjjSMuDwc-CI^-fk;idgz96pJR3h_A&;lGw{zK*ThkW#Y>koY0uExWr!i(ilQ+K!-%1`z?LP3cda4^FGoyIaQ>=? zIt%}*hwx;5SeAVgWB6HETC(d7?YTTxQJsY&dxyB+(cYEsGs`!Pqc3#t(_aFq#-z2DWyo6}1r9I>h{5e_dk!d~OV}qKt>lqxFdO zci8&G8XUF(u|W@*9)4r%pB@uPcm} zZ%W>tI@yf8dggytU-=23HQ1XCrLD^6pkx0jH5jmy|tuf7PfFU))w@9Hw#-5 z8y>xgx?2$&6EV~sPwf9=?>oTkn!5M*%)QCXBtbAKh`1>Tf*=TjK@bE%5CnrD2!bF8 zq6g7CLG<2x??mst_uhN|ueINIox9H6Gn2@d&*%I9zWY3xoc->#SKDi^UCz1Z4viSv zZcXe|*LE9X7jwQJobq#xn^T9FyeoE{aM&+~twhJ+618i4fSP_EXZp5G=u+hYP9@w22Ryd&BgP6|^ zdlK`xVGJ>!8}=gRbHmm=TSRWa9J@E^usQ;^53xnj$1<)9VJxw}5!10;2>TN2=dk^V z^>^6*#2RAs&k{CBdSqvz7{Jxm`YrYdW{rH00L%9Xu>bW)Axuq=3{84uoa>Pdr55X7 z?VCb4ko}1fdvcuH4)$FgQ&-T=( zymz*$64PIG{ddmiHh23mYjd|Bvt8*gKW6QIAja%w(KCmV4r6xnh#f|(Pt3P%LSy2Y zLxiG%`F2x!W*6s~+G=>lV_p7hJhNpJp4lqrnZDIJ6SWD$6VHqn&kUB|($LlW7EpJQ*|4v}p)?&@q>skp<^KVOOM@ZWe zztwzn1>a*T_#Vr$t?`ay+17Z+v#fKq>U9Fk_U(rgS+;LApTx3#tNCP>btcvJ{~UeP zZ*}oo!z1XoqeNHhk5j3)^~Y%}TYofPU+$0X$oCX!tEYWx{}~m0Csy!1lV$6Vsi#-D z_@3hSlzY1H8b`TjSIC`IA@`gLx#zNMaWL)eRWCeYz613-OL&`~&!-&o^93xMpPR2Q z`*|e!o+oW9_XvZldsSg}!#eXKC$DvJCuvy-wx+~sSasN${3NCFbD^{v%Dl3p)LL&| z;<#z=Udpm*e;Lcxn^R9;?#)ru=3?RH?-*Q>$<|y`6?RRuzFa8mj=?TcYdPVntR=?e z)hwIV*RX6_U(2$^!gVZLPPm?B%LzBIY&qdZmMtgT#Iogte~v!tb>xKI=*=rd*UDAK zykXu18!RUn{u!@ZXrsn;>*DUhtq^V{rhaQ(+#_PQ5nCXxtmM62lxvYEzbP*iW4W># zEwz;qz81Cdv;CwNwb`o)ZT8M-vo5vSC(-71(dIj9Ge&Ct$@QJI1vZz&ghIHBn8ud9 zY36QX8efLl$+gCqor>H;I`|8_rhAFm$@RX8hIa^s-B%ndwf^M#ezt~&;As0MNLe|a zKs}I2QEjkqvb*Nk{{efDba-|HZ66|rJt45k#IPp>_AoK*332lE2r=9Tt_%Ao*4-x* zCHjBAzib`e!#8c#p>5teV0r6+O^tO2B-TCZtQ#k_cp_Ns#G3BF3`4E1^9~Zsulbwm zNgYHRUevkhYG4vxj%-xKeLT5De=U^od1H)0sM9QlorIu2T%B0{*r5q#JTihwUPMuYP%6x-m zTNS*?vaJf`P+Eiom`i<}={e#BeXXRX9G0(a(g!GTU)d>$Ulot-Uti5ra0!PTv!QHYG`& zh42G0i7w3gH*(1N$^8<;f{xK1-Wq*qoPace+kZB>ya&>`vDyQj6UK`l{?%>>f@} zTL0$sKCPm)^#SfuR)vX4>)&1LGo;qv6X=}tBYgX3&T8mrdo>?-vh|7|^fWwCMa#of6H$6DcNad(c?qW4QdZD}KQ_@MXCPg>Ur zMHM}Ep43+EIy%c5yLbGi1oUaDPumF({UDOzZObpdPc6UrTw?hJxdd%3zm%f4fmtN> za+t+-pNK&}^I<=S*{H(Z4A9Nc7*!4pkxtK>3t>iL10r^zc%u*seB1dd5rZx>k*+af z`B6F|_WVrYqQui}rPU~U`U0sP#}k{G$xVA*Gs7$_+k8AL%Qhd^vuyM6w71v!0w*>X zQ``2!8}ai|ydTh!vTXccnpo9ADD3Rv5~=-2tg@Zd>{;vb?rIKV*b|~Jx)4MBU}Vlo z4Dkc3D=~~rU~>_}CsT@S(WLEQCZ+2U?)mM!jjuxxSKJbn30>pGFApYDxnovuW` z6fgQ`ZSv3VX>Iw}1bjZRF^71-TWRJMuKK|lK{4DwX+ZVwJdNd9{(7l}Wc`MxyirB! z@X_c5Ha{^Rbqf$f)>a%f>4;&cS|jzvlP^?tFtw<2DSzl5 zLx>@}6v9J^ly!u{P9Pu5r0A9W224&0unmc!Pk{|3hBa*=Je){bUnuNO;$*3v9A{Xa z6AEEtwuUXhHX#OEfDI$&BWzP*enf6Y3=yW%_p5< z-kF%sX`_hwwc0Mk5QT`iU5OzIF_L#9hP?x@(Zu|d8@m%LMbCiW9>j1G+crF%cwq;j zu=9$ir1n_13mU`L-V1vX^Iq7SnD@dy#Jm^A67yczmzej$e#E>N_9y1OFpik_!U4p* z7Y-!W(|P6~V!a%8FtOeaJA_ythaF0+ufq-_hFpQ1GM<>v6^9dRbZw6yHr!!H62nfb zK0KTB+@3-)lJm|pQmZGQcJhA|Tl=0nnwamoV~F{lJC>O5x#NiWo;#kH@3|9*`JOwG znD4ohi20s7nV9dnQ;7MVJC&I4xzmXGo;#hG@3}LG`JS6d%=g@x#C*@4Ma=iy*~EO$ zO(HhJ_2xOmMmp?VVxt^(9xnj(359-}Licp9NiDp%)5>b!wQLP99ul$Zh}kz$-b^@NBNVnKeM4%oCfz+K#~X4S zf!#<9qgGoK!e#{_myfO4-cF=k--x}q>it$G1$y5sb@-?kq4zDsFqVPcO3c=5?`GpAmMnMP}qw0J#y4OHICK7(eE+u%s7@; z19uUF$3BXZ?({ zuKj5u`5vLLi2p=tvA04bKgiaIF<=i7^ASIp7_>ojKTOPzf=7tqYzcIa67%`~F=B}0 zn(%p|^#ejN3;X^vsr9|`1Y1LENO_VNH0(VAY%F!EqOZwv4IYIgV?0i5BV+V8}5<_GH`-m7a6|j$q`Bld!#L&Z_`;-_~ z9l$;#R*Dt_`aTI^^f1>Ah32Dy(vz|jQ0kfV%j{y6I zUiIF$p2PSrMH$v}i@P4No?F6U)^kfb%zCb09CP*I`=sZ75-s|(=f0C#to{+d?@`15 zjkys1b7M|t8_X=fus<*p>>i`zS7ONez?5j(fn#;}HR1TDaBL(W<=8TxLEJn3p75y_NyE99Lyjuu^a0k2m|qvPCg#@#HN>zk zD2ZKi{!Yy9vizCoP!I~c%kqcR`khxBwnoOpsBKFO+5l@u%vP*b1L@T4zdE6?6{`%( z=n>f&Cv-D7x@xKQ+RQ{L&<6MH+7t8I%uEb>i$W+SQf3qi+glW*7JCcWGHXr>u=<=7 z#9aqs=mF4mB!(UU)`=KaX23cV!^#Y+{@I9OUn#$Jl4w1PP}my|T1l;*;5J1!yQ8ZS zI)CS-3#Gt^h>Q z>EsA)fORJZ$!(>zye)-Tk#W;5kz5iA+o!gX+RpLR594QUwuTg7^JE-#+yk4Jm>*NU zi21ele8kYB@Xh?h(4)W>Acptx0qac+@8biuAThj;57!!zgd4a&rWJ%z$nPBZ+^gF!#=;My_6S9-90;=#qlgTpw_%p|oM z{n{fI{SBcZ!Ae4b5urXWgvEsiJ~1vMwgfTEj zh~e8Y;I{%X%x}O}B&N??+g3H zdXCKEf2Ef(4-TZ{iBUsfs}Y;zu+@p3@31w9T^zA(I;r;u5xd;ctx4?ah^h94uokiF zX>r%Y;#Gy>ZdyENX7RrgU3rVURB4~&EiO6CEbi$rv$$8p@)q}YbY^j%h~+Kr8>3p@ zTbNk9wpiT2sGdt|e~NDe#%NrJ{_^wmy2MJ+uib+BbvdXA_QXayYzJba95#~JXov0C1hx~gF^+C$Vq+aPir6@Z?LzEehwVyi zyu)@QHo;+|i5=^(-HDy(usw*K8gs%tp?fky1`CDFsNJ#=f?1=b5rUrUmK!1HIbb$I z&~w0SgrMj0BV=II8WCe7WRSybgskN-8zF-oW+P->huH`j;xHQ_8#v5H$WVvb2-!Gd z`4IyB@*@N?@*~9avk`(7Nq&TE=H%K4X>^#4kS!f%BV>5Q&~G+EFdE={8zC1)y8H;a z*kLw8E_axXkgFYLBjkFA*$DBNjgXriosE#&9cClsZim?jx!++nLMA)RM#y6hvk~%? z!)$~+=P(-~FL8wQOh(9_Tj=vbSPk}&TK{H_{9Bo@E7?ov^;3*e@Yc$`iS=}nFWVS& z=R3N6NQWLl+p)xY#aXU(m?zP2j8I(6S#ItYHAH;mHN^X~Ov3?9XgDCwxu7!*2Rh6& z92nnj(mM1?G~8D-99V!4=apKVR^iNHf7%zKWMJcnVQ*X==1(~8Cls}zpUmfa7y3Y> zANQwx@bvdVj<3=j%(6WVehACeB3J7VW!b)ka2U(lk6J&TW&2j(;Vidi{ShqJvV0`V z_AS5(EZesLk7C)r1$Z>e?b!YpmhD@B$Fe*l>yKl(I8Ned9CSQB!^(d6pKqG-jXu#o zbNpuE0*tK##CN*u(Y`*Be$<%M@<}XP?3~Q9#m*@eT z;e{+)pIyYVjsJ^Tw()-n%i}~R<$tNsyFUJVWon<-#F$=$zBo^Gx|lJ2IrTI9uVC5i zzmjFM|0@=rvG&;oBr1~q2FI?qw?_{qQxlx z8sTX<;l>L2H&w{LnPv0eEi9Y=Ze`ix=QgW%{`~jKDCdN}wC@Jd0jFCSXLnF1pA+sh zJ>%HhHjcf!h+%wVReU!wd-`b!%CIaWCtE^M&!@x|mRfnHkZo}8UlsZ#ZSE0@J^@b# zZWCqSpS9840=*~HK#KZWodFz~Rx;~PVC%;dd$eSz_^*n+5SL8KDe?6ATQysRB*yF_Nqh7-!_5?BH zV&v>6iFJu|`MldRVx!|6@D%BgpJBV%iTvCqESK2%sI=dzKh< z1@Dp7=x^L9FNB7K_tVm9V3zxyClAXVFR*O6<3*NjtiHsu_NC_bm#yB7)#=N#ocmUw zEzgNe%RR4BzUluO%clS9EL-k*gJrYlO_nY9yk+&yo`0{5a_(7?_PruHAouJXZg$O@=+ zbybzh#xK0t)tm*rLbfXEXF$6XEik9F&I)0PJ&OU1J774}3wa6fxX=`H~ni z1@@0$5j#Jw+G@j^iT%ctdsEhMkwm5G#=)PkY(uj+&R((_SfAk9(`E$04~Gh9r`|6Hc8ObvW6{ ze+L2KN=!q3F)iHi*q9exmsl8gp@3VnU4?G@usujIWT zY>hZRw1Z+jha$GoFV$ga!tobrW#1CqP-=0n5A)6MIgW^kKZwCT(EUlwp5fRyk@A~R z*fSg(Wl|bq>{o3G9ica{YGRNAtU%193`?X0p)e_%NbR_I9|C%}%1O~DGYg@0PD)AC zD1;hf{o@G39gtdL%es+RM{J!+K()BL+J<5Ifjm9f^&1{5lbv;IPibj*S?ezL|~K zi4L2c*hGiTLF{~obs=_n#L&NU61zTP(77wIn;kY6vD+P1B6fGg@HY2u#O`-kcVd$r z)`Qq%4(mzmshAB*VY4Jsi$d`n$ML2uMyfuE+H#~eM9KL`T_Ixdj791ohgqchsI*A+ zQE8EisDxK7QW2GqVUg;i(jpa6iMAH0J}NCzM>_p1QW2GqVUdcc%tz{&*ft-jh)Q4< zsS}(Gi&R7Z8&k6;TO0EK+?` zTBQ1@v`F<)X_5L=)CEy)k@_4XwK0j*xg}CxVx(>^wRqkQ+U%Y?+X804GhTESA6G4@ zRX(*5!`m(AA+Xuw|n4JVIgL!QEoIXpOg4 zPEW0eCt5GywBAZ;F}rsY&lSRgv^hjS;EtB9S?o96w@EnmmR9zgR9j1J<=ZcS^>5VP zv3n`NmTim>`wZA}#O&;0L?Uk?k!MdwZY#A|qhoCK$yoqw5n_lIjIBk9AzEPRV#E*` z!1@xyyHr|*?GtSl77BYlbvvnrKVeHgc7c^+S6BVjVPwK_ap7ps3hp4a`ka>juNvt` z-$&}7Qe2WcqSw%q{fOzVQr<8vt>yQ_h~Y%I5Oz)^FCi4Rw%Ji?A*H*>EQI|1F<>)p z9u<<_S1GEa^gX563Tl@`%F;q%{WnT#uaE0Xa9ozHVGHuda>O{=k=_!o|TDVty>p%ORVcJ6t>pgwMFY7`JZgv z?um7)IO|4BEg}SC#l9=(v&V9b5X2$q2GWNXhkGVcRuziY66d-D*+XjOwZ*WLLzw&m0S(UM@TJ3P^Z{>4E2V6+T(?=7qQ#p z`dHrkoN(MzD2lY@sEngNkz5EZaU52KmC>;Y$GwH)`Q&&^#_^Z9dmWq8QGF-B9!9K@ zIv$^J+(#%rBFE!0j=wd*QGHV8IGh|$OgQc*96zHUPmo$XV}uCJuLpsZ*MmAYU_Kj1 zy^$k;9YD;#U-Cd=$Qz(Lh}eu#!`9*CM8o}s!q#6WNv+Qjhp@GeXrOcUo-L zJ(?I+3ZOfNn0;?(Vj}rSp|H8&45>xl*LTwu!f|X3TkxiqE{skQl7%9xb_un9a}UCfb}Q6gEGf)1o%m z_vf_%me&T@)M#^lqRquloAaa=qaHnfDQ(F`4bNQ=HSpnOq_dU#g^83)gu=$?1ybur zz1_8dlwx^sYO1;a|%~dAJ6eBVt##fH8J0R*APP_;{77?5ku5< zj~ZS}tS9s7rHO`D2!*W{E|FTiJ4babgzMQl#MV{e@}%{3LSY`eOlsk=%GNp}yGMO) zBu8Z4>TqSk@dlx=%zH(P92+9Xn=3e8op8L#alEQUj+oPKt>AcV!toZz@tPJnc8@yV zUcvGDgyU_F<8@QP(e{Vt#~TxlcQ}qWOa;fgDs;R#;drOxc+*sHyr+WWtqI4w9miXy zg5!M^9B)rJ-s?EtCbh^D&BtSzV>w12pcI_p6~di~l>3Fk)*yFCEoRieCgq__N-7zn zx~*_7gvq4CUDsCO?nIjhg~H~IyQH@HF{rajAv{8k7CZMQ93K{nl8kGeqwkU0DS2@j zo|7PJZ7dU>oW{!6_Vr_4yg!lhs7Ns{-Y2zK5jF3{*BT>3(W~sS$7zetjZYB6+*S+^ zCXyc$3Y*&=klN-whD`kwIhw~NCmf#?3bW;*so?lb1;|3O zd{#JGoIE-e9G|by@ri`vbB^QVEpmh(U##HxRKoEEp)fx_*&;{0i|XYHj?W|aJYMajpkn(e)O)> zlzj6{V%P*~i2I*r=2?1xkv zL~*O|MWW5mqK);`=TeLPSyO9}=6&-kZN~WNE6v~l)bBKZ$# zWs&`@)J{ue=OuTKy;q${F2|B-W3lu@qD_^wvRL|FYNsWZrmPKSh9WgYEam;xi+lZ_ z5)BK|%3|q9scpWe;0M#j=WLrxu@=fpwiWj;iR4xy*=F{ir_nbxv>7qd5PPbY7@`&c>5He=R#qo7PxQw#&5EIQ%18 zG6OO6a!vR%v81g~45lT&OKn4ZThr8P4aqZ63VaQ$Ju&zi*v!P>Yhbew>*@Asvl8nS zG0@c$>+P@(#QH=GE7p$0`Z|7{hz)XBXJUgLHXE@a4x63WP>0PyY?#Bk5NnL%sePzg zO+qgBnNcW))6+p}NBqyza<;Friv01{J*{mK9bM`D;gKJ(xrmL3Jt8AC>5(~wVkCQ{ zT52ErUyn?;9_iLZk95y^q}=O0h>diS(399Ghs{lFw8Q2hHpXG|5*r(Py;EqF^m<7s z#WjFK^^s^pDF9EY2_Pu01?0d<2c&w9QJv`1~ z*24!o%zAiy?BNcfHtFGB(i0Qd!>y$jznl5*nbWL?{hVe!j5#ge!+uV)423xj-nU*t z#N;z0A|~HUh!|kjONba?770FL7GR_fa9-_AY+&^2OrcHU)%k_O);x7m`|n&S{5N{l zRxR)OKtOOZ+I*(1=y0Al=AGo2U-Wv;@?YtKeI^Bcm^O<&jCg&$DL__nZ>%*v_pKCTH*2VdM zGh$e^FD4qu8$^lOsbAm3x=nuP`D@8U z@)p9;o}5}jYSGJRy%qHi(LP|qiD8!07KN}iF~lb5wjqXI2DU9R>*b{qZMGB&>*an@ z`&Qg7cMB@To^pdWz--R_-*;9*_$Pd4Wjprpl)kgFJ?XH*=p2?wB4LD3*eY#lsYRs! zA{!lfR|i`o67W5lmpwHSTC2^_8`_fdbnL!A@RpfLSbvTZ@cNF{9_7_6D|p1;^DAj{7-|12c}$=K!{bj`-gAjs+dJ<&nEa!f~9mvX$=YQj0kX zmN!yED%oHm0>7 z|K=O)UgXU@iR43tlkE%F%KQMyN8}{uwefy1Z6G=C!BGGzfaHb8SWI|3G zU`G*yHo!(!qX(Mr70?~cw$>}_CE6V6v{^UP2H#UZwh3*HBjzQWHh#5gG2&ONrj4y* z)=#uKM!4HLW=N(DY&oF`ZB8Tx-{gDG_muUXpCh{0z=!6W4HIpS7w*TP28T@Y^O{vh7%L@=^#}BvMWnPIiLPD7Bai7O%JOM8Ti=xd520CLnJsX)ABK zrCzWUdYwhgNA20fFs|||C9G`v#+A|}(qUx->>OfP*~}a1&LviItC;hM^>oi!Tz3?K!h;|7$GH z_d6`k_q$oVePZ#&&f@K)7N=>`GxwHf0?U->tuZEm+4&sC z1ok;gXWwPflN;GZCQ_~zPL{WK&ZJ;}d0kEluu+LfZ_Ba#6$f}Rf7XcplQ&8yQf?GZHoNa8wYbaHRD=O5@6F4zpY3;j7O{P?pLuNm z3=NTiY@dxRg6w6hL7b4*ggp|iZx*dB>UNh}J!{lGjh!|2kuuIL#z<`;+?w;(Q6^zi|o?WNe}w!K1zXo*hAh= z%=i5R#Qd4agTyck%o^`awdXrkFrHh7{SyuEl~xU07wsptSRplJR|7Jw5jm471-{8g z6SM~QFzI|2dW0AvHlLXgov`>((%}THbvPi=`XQm{O;|Hd2MX(dSs%_o1%^F zU5}93Np5{PWo`13eKfpH-*|1_A%qCjN++i9|><41d26O9=#Gs9?Fv@rQ@D34R`4tZ^Tk-gJh}en;TGxb=60N@%iL)?XPn25y z?pjsAm3|}pJ65HLYO@JY&BzVV0blSn`vzwQ+{snY)(ql8q>4}Cvi$t4IPLo>1EA0C{ry;OEh&6xT6Ov6E zueE7|e9OX zHviiP>Jj;c_nZ{fs}Ne{Fy$g|V9qdIVaS{R1H_uBvQ!5mfH_w$?jCow?m_J`Itniwew;;td#EQQV)cOpY&-c)A){LV@F|c}K=qcFOff#xUCrKTN`JU=T%=c7hVzz(0 zG|_q%p|Ci-L~7w}T&cG&6AYOE8d{7X=Ahy1l!BPUPJa$!umo|~g%~UWHYYKgxvoew zoJ}aqua`^hl+Hc#euai}<+K4-%4q|vTc(Zn2`uSO41S$Et~z=U!w3M@lb9a?a}&b| zz*}qQA=WdlCLniSV!a{;e!YlcmE0~|m3XGBP}nN@%KvK5;0?Od>X~a2&&=mMbG6hW zs?|r>H(#4!sMScnPB4F}xB&f+NXHtjH!(yyM#O@|e0H@HHbgph&+{JIn|_zONv;Tqw+6H%qPbe05cLycEKWa$OMT z*2p}2TddJuzg?~{r#58;dc8lT!ixNT09b*u{AEc8D}XIW%=fxwd1MsOEl)Z>r#28n zM!7>YErb<_`8jn(Vm7DVDU|uoGD2Z<>aEkoVw~IOEe1Aai$OO%ExtRkcqM1?T~dn` z1J;Tw(_a|bz*Zq*YOw7jngNZh42!)OJ2c#Bj z8fddFTSFUQ>k;$g-S$vE``8`|+Mw-_OdGYNBmrCq>l4FB0k#3L4sp#~6DB8GuOk$; zlX*yL{d?(~%2MW6Xr1>fv<7B=^*%JeVtnWQ3at?#L#Z{!_h#|w?v04yNkw2A6YE-~ zJA%6KNMhZFLeY~?Z9n{vv~J5LtOI7&b&t=a*M-Lt>oyVVdKWQEKPt6|xTbP5u>5Kd zk+dm&=p$}3V(2@x-JBTu4s9EWq3?igLCjXsPb69o6AGJk9+z6IH*lr1%#(s43X$!% zB1eoJV8e+a3JXPz|E-C6OKjKY$Bym#yd^g7yd^g7{48UqKbU3mPo$LM7^@3UCl+rh zn%NsZp31C4X3tv(?4NAivx#-vIP0E~TFf5klM(C_^c^B;J7Tswd_Lj0tx(v0^Es*Y z=NUWXIF5>$Z)C<%vmt(;ZAW6QVy_g!i;0x&os<_^l(I_`QZPrE6gxF}IgzrHlk$?( z`dMKVb@a1>MXa9{EMk3R+c}tzY&!?@k-ZCLAhHkdpd)2hVm3x!O|;%wC~Si@7MuZvcxC2u5_?B*xEW}%n@T}O;d@c-Y6WDhqZ9zN$JBt|NA@7IIG5Y~Kn{-_qHi=ltVdoI*>9BK& z^>WyG#CkjId}4hZb^)=z4!e+8KZjjJtiQu9Cf4AvONb3{*rmh%GW%wbm(YmC@;(yN7V4YA>I-P*r67XA9z)HZ+5sM6bITkg)Jl(Bn=dEeYi%=_j(V%|6R6Z0A50b)LbJV?xE zkcWsNgJ5=>Ow4DHhl$xeqdybR+$9ut&*+c;?>vKSlGEDpq_C1x zn}pM|!f6CK)k$shC%PEV_S`hQfx9@*Q(xpdU@s8Ecn0<&F^p$mFA;+$fxS!&;~Cg1 z#4w)G3$GF@ML*Src8PV*35AWxwo==CUpHl4{`*L<4tL95r(}C7Z^lIOYeHfBoEfBc za(uE8QksggH_6dQ*;~YXl+_dK>E?z#3T;xtU})**2iJ*66+f=oT$G? z3@aXB?-N@(`npYMpIH2cQ1oXc%_Oz{9Ih#gKO{$3JX`$5!;gqzwl9QP5-A@DMQ=)( zS!yev%5Ri=Jk9qq;-+QEIu7fFb0K^}ZIJVep+ln0$3iiI+RQ4owV}1#6V>b#ud4J4 zE2idq{xeE}AMj+vF6>c1Dn2J2Mnxypu=E8njEc??`!d5c&$bS;C0c(f6eViiQEIWi zXeD!s{=aD^Y!W@a#UkN9Rui2+UYkNK# zTBGNG$Y~9WeMVqBigXGFtf?(<-?bx+fYI zrIkJH*iC9D#XO9hRzr?naxF1P23=hfSQ}#aB|vE1mKZd|{hoHj&`-c-Am-P#GZI7Q zs|`I9OIizs?Q?oaE%FL9Y|qxP1lV&!(aZk(I`3`>%v(1z+rkp~brxc<1lG+;40B%V zFi)c4OhRG4o?B}D4A6nCy{|hGgEsg!Stnw)e(RM;sTT@czs)PP{m`RwRS55G0sB-+ zU2#cq#HX}aBVEgda7#64a4J{`^CuEIi-ca(UOin1vr{W*ueKG!963xikzdEmuzJb7 zh0t5j+AyE|olR=2_q6OsK-a95Y6)-8MGU?HRwCx}KsREx5?M%i=Rb1_h4spUQtRiV zrp8{6CM5UFNrpCaXOhcW&qK^d_PoSw2j3^ru)9#0Zx)tX|5W6BZ0+M_eq!D?3lM{E zFamlL!`K71ATj**YpbwmqD?QMFn=vlp-p}r13#D#p^bXD952vDZ7RnLFy&m17esrj z&{xp>XCcwX=IX_y7IBle55CFU*Zi~Nn7R7U50G38OC*vP7780@i%Tu;yyHsG%a;_) z-@Uc`?0c&08|?X(N~A0zQffIr_RBcJvrTz>G3sq+-peE$7j+z$mfGg#q`pFDb5ehy z!_18Q*OX-2-}$I(!`T&mn)fWCPJfZ75SF0Ueq1a`3^OwWPdEY4d8i_zAsvwJTqBpNOw z8rlx2L2CVMVSe?ov@C7*{$Gxm%@!*qQu+&pMe&N66nL?Lts!N#S=HMsECF6I0!SC^EWC+9!o^4v0bT}Ps9ac>=TuCUp zRN+q7Du1hncs{98!_^WER}l?MeEMo&g@yxZA9@OYSdAFs0odxq5S=*9TZ0&)6WAbP z7>{VXCNZ0*)<`s5RVZwpT79}`h*Pz^hQOvq!!;8P*K!&Tl3J{GVc*~DLycj`9ZbI> zr@{a05VP-7uANx2wour-x7KvAWLkaQoF(8_X~{Z?CF?p%21{*8)~mXs8A2cEZ?EUe z_3=q+-IuLPZtDrH&yO3htq)I&d;N7O<(1&Zl#Ee_ zyM&t%vpHddM4OF-!g_suscn=ugsN{gWlQtbW-RL}N9#9dS$-2OmK#}CUugXnEVp8L zOO|!dqxD;{T*LBkmNk!P{njkkvAhk-`i(}d-*RC2&L;fW+m-tGv9}vB%tcqNtSgDp#4sv=?M@6QFOabZ zvEJez+Y#U5*xtnYJ8U0f4GtSiY(T``TS;}^m)O9#lAa-KLcf&v zDZ2>8V6HVcmRjrz^jU#I7*J<)Y6-BFiP<*-HcdG0Cmd~UK1^z{>p^Q-yz*1#SVauG z9?(@2L!SUE5W`BY7&c$sc-jB^i)7o6Y$mniSA&e&tz9)@HIGh;v_cdXQMB{Nn(VjlvMa(FK1K9?8;;GkzGE7e< zs>4>or#3Xo-vgwkn!TrG_*%VQ2uEhE%5gY>n2&YS60r`=k0PC&Ol&P2^PeMx!gkuj zrM5o$8j{PS4Ewijlh#K|Ym1R>vesC0981}@``a#QeT-{8B5RF)KE9&$4oU0dT6{4%*NU)g|LU-B#a;J3-y=0`#jTB zG4(E#`;CeYF%A%?+Qz_TnH00E~@3RmWAAKYh(sO1g)oU2 z#ueJ0Lu{6q)g!$HbL+M{1Ef!7;BPu&c=t8Unk9n9rSd@?yDjzeMs?(#po@zEbOV2iDqq z`?{QDMBVk7WQ@~siIi)dl>IaNI5Y7c4Wt0OF((DsO_>xOxok_!>^m@#e1nsGfYkaG z*ez`BCErR6o`sa#h$B9`Cj87y#EEE>whh>tn@1CBLk4Pjx;Upg} zwO!=9&T>CTym+)E;@Ib6*AV*a#aXV(O&cju&0Tk zM}R#;3{ea0SzU>qx2fz4;t~<~NC< zS1=;pB8FZ8_BJu(5@7ET^QU6(60=jWlM+i_6N(b!>%@PXCFqm9CBX8Q0LxnftkRNG z5=-85mYgiL{@m#U`T>1{`wsnwBaRV=r^_fTgbzvQ`^4rxKTXM}y9OC3JgGoF*Q{!A!r&p0V-4SgzGpO>`$!nHnEYO&_3l&v`f*jLmC zF$?T#Vm9AikVyGbC~UqxKa*0aqe=mmmjbL(%0-EkZ=941rPk-f{P;tj{EmA2dEk3u ze*FDF%=hY##E=tZu*lf`iI`ts{Y=cSuYMtBIq{Ojl5d5=a^l5O+k7U0B^L4ClHVxB zTk<IX&dDa?zTG{%lq;-|>x7Jrm z?Kqj|;<_M{i__L3%XZq@ie)=(ZOyWsrWdBUy`H8P<7w*E)V5l9VXt{Z%$kewtiaE| zwUlRj&1(}&YlOn~n%79J@AEcJTN{aOGmhoa*^Zd+^BIVt&u@wv&PdGq{Q5+jI-#&W zzph1X(35#>fK975HzwN5|E^Tq;-3tuo$|jqV=p5t#3_Q&*EC& zlC{RT>rm19_M~;aYkgbR8hNu*Me940)*W5zJF?dBZe{Dclh&PG>$|en(0uj^+4m-` zXLGIZky^hS?~=7HuO{>FgfGcHLe2ndkR5DhxId9Hhj6l);XbMLQQx%*DeLnoVr05= z=TIqgkm}oPnP*~JIP+@Zqw#KM_G;-`o4BEivxrv$0lM^Z3 zg~DupNNSNggrV3nZ%#@nV!epjy@f{-j`IkGMfk%R$7kZbj`?#Ofh|A`I#!3r5{~l; zh3#w}m0GMm(l<`_c9I_#I_wjl6=Rxfv7l@5gtRCzqc2RI)W4eH%Vo{Dcmn-N>ba26 zTDwIm+Lg=Yc2BWgAEEV6hA-yY+Br^NVty`NoS2WWC5ZXCbV*|V)TJLWzbaUYn0@o@ z8S018qJI|^3j5~U(^BhCYX9?Emq-0EJTdcUMa$5-QjCGR@LXcu(n8VGVnu5Gs&iSk z#yCT!T#gv}MEy|+%M-J4_Cg}1zmxKOCI#6uF9q1tNO>ud(%_`Lm`Q=&c_~fV@~pIw zr?Dz*c_opuf>89P$6n5)Osy?VOL;AkvXYbXY9<9U#>&*u_sc58{8(9)nDxsWiIf3C zVfpX%7Nx+xsgd$lB4wbH@}|^IX#}m_ge_}iwv^XcgNR|=qfgf)=Ewb7#QX`#+Qj?` z$zWm_LHQW55%f-C-D=XxM$p^S#X9&pZym5HTL-$lb-?o00kd&t*1eZlw~n*!U8%*a zqP}S-rrIIDi*rv+_&(8kBcZVGTz&T+*BWtBsr8SE*2A3EKS-@#jc-PqeP-UA7&3Fd zM=dk|oJiSJTG=e~Q;Sld_tZ%FHIdTjr2Hba$GRtxw#?arnP;nB?i1l~auEZJ~wi~el4jWBuV8rk}rQL}Qieslf{GRmO7D6$YBmOt3{mR{SnBF~S zp7A|rp7A|rp7A|rp7A}mC#~~6H-?z+xxI*?=klKE9X-=7{F!)W4{6nhp7}#+o7?^D zEp)b13u`n_w~wQ%5<2AkHM{0VzI}5VBma|CG{5gFE%k$u|9-^wBZfO!g-{TV`OjFP zu>D50)Z!i*Vs9K@ARU&zR;a;MBMXB|(NcoAWa@NmFhBh5J z_dznS12db;Z4V;mW9ohGU=UNi2dEG2JwLWTt4XvzKscGdT1%~8ZyZ7?@E7K#Ly6gX zqb}iiuu#}~qc-D+Je%hTtde8fgyUh3V;iZRI9KbkkFSXcjH2>VpT*EN};cd{Bh{4;yx)Fo7@y_5L#NcgUJ&Ad5&rJ;8 z-XlIobpm~Z+=#ZlNH;R(t-3I4V%_o5Y80)TG#|^3+Bi2 z>E!71^BKhaSe{7CkL5Fo`LTQ!F+Y~iCg!7S5-~rP&mm@GdG^G*(}cpt@@$!PxKiup z5Uj*A!Sl$??&_4wINOuWQ0PJl=L+pxYVBgMqZ@5k(gie-9)SuN4~s)Kq&K{tA)bGT1jd#k7H)pJNI<* z`!T=VLXI}G%#(1uStx4bJ6!bcgg&FMpJJ$Lfp@QH!EF`1=Sz6s8hN9)@%ZhBWWlKS-Q;aPSt#Lsmr%eb-KLs% zpC)-PlJLGK@`g{K<7cg+%jHjb<#%7EV;Q@jnC*ubOL*Ta6n0X%sMI1ln(_qJjSps0 zbWBx;#S@MX2n9TG(Nax$xv9uoQn(btcW7;x>tq5X0nws>;4n|SL+~mTCH0pvF=T0 z-O8DDx)v*hzc>EXI>?joy)z2&T1^>4MVa_s!;)~%jc_qMZcHK`r%&LO7H45eCQ z=6qjd=|^){U2$0f{dW?zTnL}>{Yl7WHDOSq@jJq$GoLbAB(`~ve07b~TGn!FNt@cR zhWve3YKn5LdlxPLebzNpSf}OGy1|KcA2{n4Ytp)PqjhV`-w&O2TAui~_1#Jp)@j*W zSB})}`Me$G{Ms-ivG^mgqD!vl))ShKoo!nF`)pgK!Zs~WooyQ?wteDkL%(exG@m-# zw0!m7)^Dp-*rw$v*`|GoRrOw6H{$%DE^M6G`%nh?hkmdg#5((1VptCX`;HiL>e?0dYFX}TbJvfx zIQFLBvz?90#>BR-grXPoEM(c+{4CFIDQ#-Q=JNMzp|w1#<$v8`%zb%_f#oe;x58pA zPo2fX6N`Uv7DHC0#oI)Sx01g?MLPFrw(H6VAY2yA6y z_FU{P3CDKAu}D71Ni$LlSTIUj6v9lzaF4P&?3VDEK`89G;9aHmwK$t%7cg^%@srB~{^Cy}bfrT)4#!=%0 zn8gWVVt9-lv#)pTYxrRvw(S$KZ6e*g#QM58=|!wx#Ga04@ADDs@Az5PY>2T_7se&l z^^{fv*gyOK$E_2C#e>$%f7QAJ6YJ)8)*T?VxTBJuu`eKW^^6thupqt3d=$?!EK}Hd z`XPzD-qNZzbdJwWAz~NK@xdtXLky9qo3>#E_qtB8F@QY-wVMRz&(T#2R8-*xR4jkm&yz!(oZv z77~h~VI1GUwjAj#Z!OQV<*f#mEpM&BviegcuE?^@#4E9EZ}1wxvb}+AWtP?V+I|(5 z?G0?JvTSc)8_2S~fo(OGwV$;8f3N779Pzs$E)I4x^)x?I&un__IE^t#5;Hf8!^n3&O@DOd2p zPNJ*Mkn*3?rx4E0XeY@Po?ceJDs5Ts>TqsGcb;5f)|ntzg|G(W4Y}!XPB|-L>kvauIVWQ45<^ZoKVs_0%I;G%^05TURYz=cw)zuKYv?9QpiDpm!T zL~S=}Lh{BrDb?Z9M9NSnK!3$HC1!KSPtmq~4m1<_l- zV|8tIfB#CUiNE(zt??4C3fWcseT9g%%COeiRZVtPn_bmqS8cMZw%JuXyDH3JSMA&D z6@HHoGu)@NY+TIvZ>*r!en#xzi0vb8DTL37jgOd)`a<}E*aU}tN$gmMeMRiVh#@+@ zCUz?5qUXOMHqp_2OKeia_KmuHN9_EF?H{r4iCr8qtPX!5cDdvCBeAO^rrwZmm=n9+ zwf&jc%?|s8*zKFuht0#?X@kR_BHe(9T_qVo-g`%E zV8rk(lU<1oiWqc$n%H26Jwt4W!=5EJG-8Or=ZFo9*vTeU`CwV%%P5yA6gC0i=xn*diJDwPF%Tf_Lff#bjBIeDPFIg_V40K0`4q7T@u#OwtBsYI_Egu+hnpOji1 zv$C$0bzuH;TjYe1`g99)w>!FLgbvRx>s*Ak&k3d{;gu&==*j$v6~+w4Le&W9gE8~G za4CdpVt&jNh+)j&#LD8?kC`IrFlNxRt%&uGUZ@Q(h?I(tQ1qcC&q{4`-r78Rp}E?| z7HjW_wKeiIL94L-`mNx$S4CL7D!w9D*vvKb6sJin%^vFFCRuA#r>Y8{lS@bOSdaS8Sn5+P>O zZCmDCZqrWN%={H8x0mp4Q+y4j;(0MaXn5BatHN7?UMU@{*YC>pRlNQ{uCM0x$8voQ zuRoRRYvXlw_)@N~BmT8qUoY1hVsd;WB@JPGG*-@$I=fkVg_Qj!ulyC_@1zFtpy^H* zZsjSpI{YBDh`t}?3LDSw<*E?27Vh|H`uQnh+Yqyj=g)%XKidn1Z9Kn~THIJdq8*;& zh(qccJ_>;3o0p8_o0n|K_t!-7R>IwGEd3(2uu2yb(BXHvDuj_a9f0jf3_1YYi5PSM zwlgu);g3Xz9fZPk_)ThYc%x%NdrrNezSnC#>StLf8Dl)yCkA z37=8Y7q#T02UT)&jeQC}z;-8QH&)vxe0CFxVs-;?U&llHbU&7@PxsIGq0gtDzI+34 zX6i6jc$HsWtG?HNjVsFkB3b{Hb6D#ztF*#sua~P*sH&C`qjYLJ|JQMpwyg;rv$mb& zs;9KA&9|ZK$cH@2vTMU^S^L@L3gfMVTouAN=daeq&JjC+7~%|c2NFY^%@OGiB4*>Q zi=g?>K0=|lvhDT0x^Xc3?EkW!twUGg03XejU6tet8Gp2Rwh#`cR76QPsV#&(0brNnS%(lGhNH6rx z4+}^wVn#=V{A5S&W$M`U%ua3acvp2;DC0Pr)D%MlXNfZy6P7_HvTU9Ku_pRQ=YCax_9? zW?|X%>cO(<)stn@Yi^b`2Bt4R)fS883Ol&Q;Wc2F;wwYBw)?m=_~pGv9@OJ&r$4_TTe-G@*^?wRhE8zyC$ zRiS^b-Lfp%9z;h;nYvQLo35J>SmopQUXutHACiY%3+UFrwC?nkO5pQ|kcNG--k zYHxv3<##$=mu-rwDy&K_*y*goQjhw9yiz^1t!W*k_pA+eI;)fNK#AEl#daN3cBt6t zEFm=WYJA8}r=MK+;`K6eJs+=^lk53;-5}Qs@OmY=?#=6!<$A$*T^&}F>xGD~A=eAb zweEo0hCx!&9>S-sXf%)172{1g#qFkCy-*{IB1hRR2h0abSqKX<*C31LS6j%U`PCM( zX#R#2vglf(RrxU!%c5%wn*a0>U3)QiLWe~K!AEykYeqhc5wrProrKRKLcs^Lit9=( z_5ylF;G@mL9XGtaNh{Q+ZLA5HkD@PjQaznP0^uj`MlmpuAh_>Fs0d4t}h_Ixm;f;*BWiDL!*?`Blv76T+fv{?zf9uNUdt7GoD^= zDgQJB=JU%|g6gN8{A-FjpC`5^wH{@p)MbC7Kei>c<~*fVUCWwOQg26U&2;(pn$3V1 zO-T^txT<*FI0{tJpEs~S^Hfz~CrUzp?#NP)`ki^DoV9J4bGZ%ra~D$X5&N?bGmrMa z#w*TPhD&L28423A+sO42ydELfOY(Yqx$ej79pri`UXPUPrQ>yV7$w)s5Z_g<`^&ZV zf19wIl*;|TuxQa&>a71qOD%Tn8qbxZPiuFVf4XzuL;lwfe7q-1?F6wtE>l;9ZF!Cb z>bhKJ+eP3F~aKP2Z!Yo zvroB4#t6-F^yJ=hy?nf`4*SV<1MzWky@Fh0gdHHIvWIJh>#|Z;`{(`gm?b4qHt;#@X`XVLlAt*{WFLde25nrtx3%La4lkfhq5*?%&kXAR2ITuVt%i+4lz4TIV$nd>O#>a zenm)E0qc?8R@g&WwiWjJEZYiu1D1>9{*(_^*&Alq9~n0N`IcAUN7JTtMebMC*g0%O z9n6l6SvEU1F&()x7{;>tUHz~r%j#b(Z^m+o<;_`cV7ZayaV&4aa;QT4Ev;OQ@>W(Z zqCDKnwJ2|G<@P9VW91Uc+giB+Y7$0OjhT~wU_6r~D9mPJp+&R|E9gY>V-Q7$5XHUgtz(g zV9GIn9>TKec__=K=V2_H|HiXydQLxnWq+PPy$=#ujr8Xclxun)$+GD^fo0Qs>giQ3 zzOHj3+-t`m)@UDEBDg8||^zU&( zVRtM~mfGeyezdBtMoy~Wcv`~oM91;e7CGXDLZ?)4JR{+Fvg3HV)Z#H2tVB;^Ywc-! zL4tWgqp;Ewwn9ELk#eeVvWJ}~{$(k7@0gUc6Dg-VDQ8J-^ZqVLUN8T=i1pw(3CA;{ zcbezZtw}!TC444Mfsfu-N%grP;dAB``0UXnpNkScXGK2!WJKHUMA~1$*2+)IWxXtR zuSxW}RNA!9?N9T1-BF>J^4>!_tPn2G=~@WaMP09!zn4jk z)Hk;!e6O8?Zx&fj`IIBA`5wI^`sP;odtLNR^SVAGy4~b-)pDxqU5TzYL|yTaBYNUa zp}8?i)AfpFi52Nh%n0b6m55*Pe&JEoxPfVq^<)I{MUQP+p$@10Z7^<~lRUZ<;;%eva^@mQkk z-H|V5+op0eu(Gbm%}+$V9+kiMNPC+-w2XWB>Rnu^?zqzE#+7CqT@~Fn*pAKKR@xHI{#$6ci%~QQm4(qteJLNkLxGNKU$PHtbcBRrC$ z6X#0XM~Oi*V2=^QCx8us`Ibt?Xzm!OM zMkv~aNjx)qi}d!D+qYS^uiU=FvU*$365eHb2A1Drc}AAsXW7mQK45uf)_=&d=0@fB z5zDi({4vX#C$;_)mOHTgDa##M{*2{LEPu|jK4+rszhHSbmcL|qc9y?lc@CDpW?3Jp z*7o19tY6#K^0zGOSGKkM9m{jE{5{J(S^k0Lxmo^^<#|~CiRA{Ce`a|FmVaS+MV5bM zc_o&AV|f6}zq7nD%YU%E3d?`8yei9KJH*vMmaAA^jpb^V|C|Z-7FZ5Eqbypvg!)!i zZa}#;%XUUtla>GcQ~g)VvhlCW${)y=<&@$DYOJGE%P+EQyY-h?w%z*6EZeEgD=ceX z(e|&hY+qV`jb;1N`s*y)m)754*-k0mWZAy7{=X4~2>Ra$LVW#mMiBJ*=Z>FN#g}Dv z(zC0+@yzxW&Q;IL2*do0*I%?{PQd((RX{sp_R6Byl6kI;P}K9OQ?&Vgn4d#|%}73e z)iDz>zv^gD%ywaKB=TkuiuS?(aKbEX1HE6D7KJb?F)#1&;n2(9!!y0`yd-orz3{wb ztMFE$!_30H6yD-FX9p)=GhauREpv8a*)nHmmMwG6#O~jqD&ed7sGIt}uK1;Z^Apjvl9uHa@I-7q|8C;XE<({WTpst2h{f)Xubl?< zXaeim1U7dQ*gOuaD}E(<`L9}PS$+~XNAtB{{rP2OwMEN?&?}?SHGExoUu>xj@5tXd zrKZI3g!|2NWwhEJc9n?P>h#0d{ypcBu0mn==h0@~Mn9hNd~95Pobc%u^}&uspIgDz zXt^rNlOK$dx{Y@wzN}_4;%9r=R@u9dAf&N>vrUBsHGz_=2S#^mTHwe)6_mA+;%0Rrrb2ux%-g2EuxD4Q z!!J_mL)(6n>qRo#ewR|-wuPf@ZKNOD%2)T~(+a)&r%=YL;vaIQdOaaN*Xyb^)f<%- z-%N`=mEO}X2(^CHVp$%t)T6%0E9I=3H^o^kE`-*O(ztgJUG(QE^m}3Y0cEYDEJ{uD zJliD;t7j`U?no-w)`=y34a_LvZcm*48UAGUDG6E~8gfq-%^|I-!-Cpr@~M(hQ1}bD%Kd-ry$6_7Mb|Z2r@Lnuf=U<> z6?I@RAu1{=D(ax1sGyiIA!5diief-T#fSkjX2hH`D(0MX&N=6t^{!QWS2}&VzxUq% zzu&$8^L&S=nN_>i-c_|L*ExN9QN)MR;Ac}JeuoOnKo)&WR$qMVkEivQZR;{yN_EKG2_*~Z>Amidh7qGwjGwGW~$h zv^XK-Ge8mTr9Cy@ z`&WpV&bo|M#VNbEH06Ol<&_kLCz5HE`RI?Fg|Ve%R#B$peUP_ci-7;A)3Y`1z2V7P z>4~eU4w(xk%v|l6wuqVLBQtZ!lZ;r?wkvfrYbf(2Jl#dRZv4oP-@+cE?AMg-d|k|5 zOWALME&k!i?EC|m_-B~1C8c#V^d59Y;zsz7swAIjZrDPD$3xAF{s^`BmDhKY?^HjX zH-b+^f28XF*Seshv0C;3Y)a=vppisw1jXKR;D)Z+1YzNbUQ*btx3ZUEYOfUG*& z0WaSmxIOSOy9N0fiaSDnrs6q(k5xPu@bQYf08dri4fq7ba|55KxCih_7UKtgfKOKW zionwp)BbVFSsC~&#j65OSI+9drzjo_e5zvVo)+QL6|V{T*@}k(pQCtf;BytP3w)m9 z^?=V;JRJA}#p?rKsCWb58HzUqzDV&#z%vzZ49u@$b9J{V@WqgGyy|5}A=EoVl)bph zSr+3}#r9FQlFbnB=J#}Uu{mORu`jWA1ZHSY(wn!8nCzp0nHe|Q2y=AA-f?UBt}iGhHd{5HZu#tH;)mUMQ`Mj6127ve`MZm-;gFZSl}95tCzR zY<&=FkC!lairG78^(JEWCbr%=&0Ywl*K(YdWo>0kEUT>X z;IW;u{)zX-hu@u9MfJsF`)J6`4uP5X*o275vDh)=m79#E`zteyv4wnbJZX{fdNP(?NuO)k%F zw0{RPt4oXNyWO7kW9e|!Wv-r#auugXW^0!tmHCFO*KUSbPb7* zSh}IG;Z|G>yIitP&x~}-=Bz}QX-~nYmVeKVbUT`JG$b#FT?6SXqPo;Cw$WhDOKhC4 zp=vMT)l~cn7cME~gZklIUNmAu?Blw)15? zzR9>k?^Uxhb45)HC37xxcvb6_&8K>XAoY3yn6Y2eyx_SjO-0x<{|okY3H!4Df_;Os zWj#L_`E|9M=AvY7N|<}sVcwE37uOtA`=MlJCCt8cn71qQAoSW&<#G*`Dpz`Rl}A^5 zbgf6%dvv2mH+yueN4I%&hexbMUMvAe?4ovJM~0?5Rfo)U3<+(8%u;rD#B?^921mw~ zIDzAm`lcQCiE}^($EN$#5=X`k=3WhTF!w78V^6-FrRi48gQ~$Cb}$cV2t5G*SY{a` z9|2-M`XhZxAH|2~8m=!$`5uFm7ny8PHJRp#h&evT{8h&ZT3Hl4T9Gk1GcL}~>Dg0i zrJOw-*(1MJ%H{0Yh?(XwH`klzBW7CeJoCkfnYMsD^JQg9&m-6Myi~7bUiD0#jJ{Sg zg)pbu)@a^H^kP5f{jxJs=Oub?M=7Mtd6PyN$~$=9&gPW^LbO5fvs7?#V`48uXUY`#>sl<})5m0xi@7MS_`e4|X;qs(^* zN#7!3TmK$^iGRR{ms@#CUv&Jw<|o9<4D~ZmwPt31Q46y2{ZT{Z%CCy3!*QS}HCw8t z-<8Q6_O(3f{0V8$3F%m!?5{+p1@@`)Pfo|RIw?ELLKfMyY}UsIvjLuJ#hrsdF6q$SaE+>)HnC55u- zkfhMwr_eD`niPcNX+`-Hjl{xR7 z;nC=adm0h*Eo756^Zk(Nxj3o8kWaRe%q*x@GP97Pb#W@loz`!#H)0g}Ep}3W0I#q3 zZ{UqAE}0T^4u?<3sQ@2gamh3Re{4?=OQsX>Cwh`NC-A2c{w%_uEA9-=7mB+Ae+k@J z=>~)+W`X76?z7p-zD{IwTiG{>th<$^J4u}6K>96s%=^5+-$nR)#q&e{gW?5%e~dUk z0n1C(Gk?Fy?NVF7{TcDxZT2v|5DL3Z=KnzWNlx`xYhnBiwIe;CH#B*%9(&=hV^ZeE zT4DBym~5G~nTtfscn0Sf7O#!)3_!$WTMRbSR*UgAVm^dvGcZFwSq2x!wGl5@2DU}q z(@`t9f2XJ)ZpyZ=aJRIz_B=TSI3D`vqFb`=P6R$r@igG`6`u-xf#NfOFH}4ocxHqz zReUbwmnpsg_;STFfUi(|G4Pd&F9W{H;!b8Z@cD2N^K%#QH;V58{?6i(c>wqr?JExh zAFKFr;N_Y`mv}&gTeZ(o-Y3GxMY_i;eiEEpHE+bTEH0U6fTt?wIp7l%zW~hs#5}(Q zyqn5j0iLaPi0@SVI`CbJ-vqup!uKeC3-WsvzXN<bKLg%V<;>5cD*pm_FO}2IV=Dg|_;KL&6|RL&1cR5HAbpFt zlT?RxPmb_3#Z2RgD2-E8-ikJSs^W!#pH$AGz#NO{cgmkuyg2YPikARB4Z7_szxBom zE0D_*-tdMvjxCK9t`Nh$ZW(RXFiRso9c@;Fe#OkdsUA;cR#0m!Bf~3d*geHHP{Zyi zu9Y&<&X;ey zGTmh~-Th!ozHh}*7jJ8f(stiDI4Vj{PD0D(XqCy+cpQiE9fs}k2bVlSUop!ejV4<< zksEU)wB+n@0OI)J#T|Ayq2QWgd5w{k8qX`-DILewRJUwaRJN=~25Lywu;j{qj(crh zv_OlDSs9-;q`r#k$P6<`Lu9gKwVA7VJ)V;>h4>`U>9Os$c_w#^gMEm4%neThtIJk0 zYkDUAGDJgig0Kei_6K?m^T^%LC559qpLVL{<6G*)&8ic3d!4x1 z8YdoVL()aL+Odv@?n*4MpA=abSI5GAYT+}i*UFU*m07NA&GMp$u=wz!UEK5RxY)G2 z>W~?apge1IeNF0&r!qyXz0`u79PH`xkd0Sl)5)A1w(yUmsEp2?7e>sq z-ZSII04e)L%9Kz%!nnLJAM9IBkG-Oju0FT$Q&j8+A@l4=-BA@K5_+rRc zMbm7ml+9(pa{h=jEnv5=z6y8(`0`Dg_}q>sbpy@Sh)?&?P^QfMOqV*mA5DA{KHN3B zbY%3nS#_$d=l7SlDpPhUv>NX((~_3WZOWFM-5#Y9=cjrfIXhx<25>pAX5LkUS-o?- z$LEDRN2c#~j%lt-=04A)KkwI2*g5{$JKZ^^`ndO;=s%>PBHzaIb4T+?O=f<-_?R-o ze$nNrI+e0{BFWE_Q7S7Wts=}?w35c9`^9{mTk}`zg^|A~&g~bg<1!QP64Uh3U1C1Y z?GlS@UWxMZDvGq z(~WP1O!Ha9hSG1L0VGk>kgEE)GqmXzrCI?Q;?E}K7VGV{BI zzawVq`FuYAt;x*ql(G$^9kT_b{>-Odj+opj)vlw4h?#mm@1=G%nfcV)N6f!4dxq5W z%#IP0_dNqM@1;2+CQslUlO9QSUuLd|8GEUk*(GAeZHarGq<5HZ5z~zy>__oa9&Ae` zGk3&%0r%jG^2z#haa^JCa%Er-E}41MO3Cz4G}7MpVek%V4_!s4W2YkEwgm{1D5KmP61F+kV{RHgxW4{2q{n&57 z?p`YK0jm24u-m8o1?=`|{{Xvv8uRJ)X$I}W?bC?eK8^SR%_p(jrxCk-S_#K~+KCO%m4 zoWSnhXlGz|Z?r40yEjU?yEobl?DlZof#u%l-$*;XH##rkHcm& z!TyfDczMXj>Yc~Ew0!Q)<9H3bJCA#7*xh;j&-vlbA=G4L;$7@| z5!VTOQNDd}e+bKF4dhZT?qBgV53HouU@-I>IF*GE%h9NFt1-ka_{3|X>Nq^jfH|L6 zQJh-=%eiu=wqjNv%~O$ulj>M^WAbWtZQ4t%lqA997_Xw8PRLj{49<8XT+HxqFc(0yzIa^8X zi1(a*3As3?!4(d3>2esCEFTw_EFYJaY*k;L)jV2V5mV&~ETkGrX7g7X95K0Gsm)w7 zVsd1t%^a%CrSRmQsVsmHS1lZk8_i+}t;sQhFAe@W z7MIMj!0SeMJ&Vg`Amqa>u9%g9M?~`VBfNpdnOOy#k%|WaZ>XF$;Ef`@afCOC@TL(S z72(Y+&deIHv$^6Sz*{I@3wTRlj+yhCwGqNZ5?yWNX)hUuSk`J+jG4si;1iFTGWKe*Jz8j-MuV63W6F*6$|t0-{&0Metxf8r z<94Momh9(K+zdKJwl)tbVq|Ia{4Hznw@UczNm8P%Yw*V;e9no&A6tXJZNi`E`P{HA-IAOhyj$UNzkc4%={PbPgu*;V4ah&cptdP)_I=AU(ekh0$CE3+XeDhS94`n>jT~|Zp%5aa?_h_U?8+x>{N1J*y%A+kj8tu_G9&P8* zjvnpo(XJlt=F#pR?dj289_{VXz8>x8(E%PEV#0JUZK>b3HoWqZuB}RKyxCqfHd8JnVY1>5_=aRY+il)d#KQ zngJ$lTe$31$| zqo+K2+M{PZdQOq_K#sF=j`9K!Ym%#9N?*i>=P2vpFR!9FH&V)3%}dHGXD>%Ov=!TP zBQMAOEPGX%d{>L9WLOcDkQVp+OPY%jcOA|Od76GH@bwn=HqQg!U~$R30(@hHZ;J5E z5xynDw?=rD#hG~xc5aLC?Ge5s!m}fMXN2#H@ZAx<2blZwuI6>5&^xoP)c>wUTxaXo zHxS1Uul$|Zj^<5`k$NJJbZkCj>_GTTq@~rnXooefNimXnY zo4<*qT8+b6NGht45+3%}K|;70i( zzsLL3yiGTX6zRpYY+ldJ&Qj(lYV?GE>*P3I0p_j8E5Ll58!Kh+!}~h!oFQdm7#wK_ zf`VR-=jEe0H`U9Go2%_OVVYn?MhqhQsXZn5bigMbG2jdQbNs%h6M2Sb7IOeqYi4Fn z$axjTxm?H_Upp$3-<*=GT$#(uI!AW6KPbwb><_vslO^hFc}%+*(x8*(D<9|bC3Dr> zE)QAv$a04Y%TCK&57BZDd}3eO++_2r4w?Nm-(>P~_cnw%ze;VW6zfe#+Y5Qm>n#|i zFacH_vnmDC5;1qiI?FMubKP5+N7y@WEMaCI#a(QdaiclJ~i=T4l8;-=Qg%ZYX3-04!0&1rS?POTFc?;G-EkM|Av zxODaYp`JG8S<9jJcopS1UfJjM-04w~-t;=9IY;AUY@*d73oF&kRsQ^m7Toz$n#YnE zq*ex%c>eT`rd+PP>(Tojec;iD9)0A|#~yv+(Wf4L=F#UKec{oU9)0D}*B*WA(RUtw z@6it){p8Uv9{uXk?;ic((Vrgu<87fugUXz@tQmz=hoy!Hr-0RC@x-q=WV+6 zcadJa>dx!MtL}W9TXoAQyP>X-^Qyf(?}#cP^;oLjd@&lojG)*pG+ z{@OEy^)8OYi}G+l!s5EUh;>k%UKX#E@_BG8r6QYdeY7lBHrbk*LOC1a(NK@p@@Q?3 zhIzD(N9%gDo=3wy8sX9U9&O;!NRKx3Xd{m{_GlB2HuY$fN1J)Hxkp=iw3SDrJ=)r% zF&=H>(O8eR^=Lbfw)bcUk9PEECy#daXq-p8c(kiWyLq&`M|*g*r$>8vG~T1VJ=({k zeLb4s(S9CH^yom34)$o0M~8THsG{oj6izE-l`>hGHso6u`U3uO#UdvXM}kFL{dH|L z1!10hj)+Eyd|W(w=HqtmY?q;hHsjeSujihKlfKF)UW#&c{7A8GpWw`n(oi`&+M{DU zI@Y7(JesO#0G|N;FZ8Rmm?L_QpCUiy<6>Xr<6L>=*~XK64o~)InxdjqV^5}*!|8>T zF<3s;Tdq!{oSmkz^0efCrX?-QX;#-)$ctr`&WcJjK51`x=GhUmb6w`S5woQ(^Zba3 zM;)SC%%^@~#N_i6p}zCXiy|h^hH5h}j+lJPtv2)0h{?OSwV9VkOy0k(&Ac*Vw$)`` z9WnW|Ty2}zMoc~@SDSf##N-olwV5|Y%$+*dW8NGw7fSkMzK(8gGXr+!<+9Dt|K zYBTSMn0%79HuKJi$=@fh&AdBe^7p@MGw+R<<8X39X8zuj^tk&Y=2bXltj&BdV)8`1 zcIppDOrBiUw)tqp`~eNLHuLd_$zM^d&3rOq@|n2W%%>w}OI_x(5tC2J)wcP3#N?B5 zwV5wQOg=4FoB49YBPO4vtDVnxBPO4xtId2r zV)B`~+RP6lCZEi#&HOlG@;+E?=BE*pyX)G_&m$(E>Z{HCGGZ=Mm-%(XDCBI8?D-~h>oLF(I1&MRBy@cGXCLuS!OURwn7Oh|0 z36tD`(bV` zM9ehp{5OWX#mssmj+tATQd@6hd|)1`TQly+c_wxhriTx?H;1gMCwFnq_;k&D${fz; zs?7WvB1^9SLGrz$|9jquYly3&YELilKb{ts;{X4ZHa4ESX!GCcP3en$JL7xdHTqPG z)~)2N*MDP8v)yqdhy%`NU|76RTvac|%)RksiDRuPtWf@Nk=$VaQZ zFYwli`vH$pyd>~8z+d703#QV&HGGpYGjE}#l$1wYws!2MNzAMi4Y z9{^rf@k7ANDSialy*uwQVE1&<6TkzM^AvEV@7#C>czKmS2fTvf7l2n({1Wg$#jgOb zr1&-9l@-4Myo%ztfCnjl2Y6M*?*Xr-_yge86@LWWruY-!!HPcvUPJL0z-uc03V4X( zZ-9p?{tkF8#XkVAt@uaaVTw7{48kzpP+1B+p3hY6X_f{`pQ$<<-tTNquupw;vSY!| zn_)P&7k__*Cxd142yF6_cfO14QI+wRC>`%Hm34|_kE^V+m91~nctT~(R>oCq*?g$! z_CQ`6@Rs~#kk|CO7g{~doVZVbVj(Y?xv4YS4rZqgW;w7Iv!xhSP>KPF#qVrtsui08 zeuud#g(tyiGLKn1Qp#skhtHk6Qar17H4#2X@eNo75v zbl=)q{LwR#y{x>JNcM`#`q*-IFe_G-^Jy>^6Hj8^rYE`I7Ei7Ow)L@%DVg^3yO>oF zGsya8Wgz_enWiJYc^hvJDx23;CM{)<<-MUY`E`J@SryXsdKHXLHr4)!V19b|{HzZ4 z0sl*>vX&&rZ)r}XM%rxd-d35^h{)biS+n(EqZwS4<2S+Rk+enLpArwQ33k{~a|IUK zY{?8otnk+I=&xq?ElINZVV?+EWwVawt_#E%GU%z0?r@Fa*>@VVzQ#E32Az=_g9p5G zIvZ&W&$3f%n;=HY$5mgxe4`L6<=f2jxIWJFw(z_yJ#X;>-e}L;+Vj3dTg%(q#`DH{ zUh~Lm-gch1y`sK$^(t%G9U-G-mMr%FPF`zgp!5{vdUz=2?&7(-0)>_^HsO`b?w+?t z!sEBzgT0d3%k#!3yk2-CLd@I8^Y%@6-En>$^Y-(+{S)54xNi{i4)DAK6W#~#e#|@A z^Cl&{PVj!rJJjckBxUx?yoAW&Pe4ucKM_5HY%wd_%F2FJSwAZqV`V?7tiP3QYh^#HY=D*RU}e9kY@n5mv$9`RHpt3$ zv$Ee*)@EgUTG{U^8)9X9TiG8f8)jwV(?3-l-_g)P z_I-9&BEH|yyf@huU)Rq^$Z&$76^xfl30i!0_K;M*g7 zM}%ivTr!V>b7zF_QqI$m-yPw5EY8fckl!2O`yzaQgdd3TgAsm6@$<0bPXAs6cBhLk z1G`hoSAic^{%gRGMEKDNKc@I~a2}8F6N=x0{7J>{0zU=JGqHutdkFDawQyZWo*9cX z2d-LIAMIk~wsEHC$F)EhPI-i-R6^P6$XRmNJ}nD>zfwzcbFOWu9jy*uv`&aLw? z^V)zEKLjVen!#}I@%sp|w&$V+5r3@gc)aSL#D%wn${fkPezk?ne5RI!wX)8nd0Ss7 zOTOLviH6FRPd)lvQET&;ikKShh5Uv*6~(!n6vespnPF4ZpIDndE%k7>$y z{5=pYa(trn2jw}>$w>C2O39?BYBPUU=4xm|rt$$oWmuMP(SC){JghbRhRb)rJuJ@5 zPr$AR`~u9gbJlu;`4yqGg?10MZu%ouPCogpR@uylIJv^<f_lK)e!xEeaJmK^8*z49Fw!dC)BF*fqu0S62T>QN*Zd0 zq>sr;O*Y@O#k_FEba+3!!?=$zhvMVkCQFaW4mxbXtz9}Qa}3&Lhsx-Am^QLHJhacu{0%?u z!4VMmWDNN4>;0KB@S!Si1YUd`IXHUsqHIebRkISZ8 zBID|!Y?>1ppQkLFxf2Hr+k%8+-a9B|cN7 z9L?OX1mB|Cv8)+)-Fb0VbiD2=t3_j%$%Fan- z3t*%vn{yMHthLTdWPHB3Y|c+)?0sc(K_csF)3`8^iC<92pZ3LXtR%7)+t&U{WPHZEZ2nGUU9Ie&MAl|y zCdrG8lvyGZd!1-yXONpIjI;Xlgz08df82=GzBEp~;yC_?FV1meW6(#oa& z7TVgeI5V+4Wpgx`yx4x&$``A$b-1$8Xdhc{X<>Z}`rMLbn;GOre9;eji=w@<{KShzc<~7Ljqnl??guQZxg|9RVxRvn zLY|h1IhUPlFT|A1Qizj_+L>9pN_$B#@We4n&Mf!Wc%FjA&;H|7S7XRzEd*xTHrkuz zlqs#1JXufoSWP_a(percOlJk<)5DorQA14U64VLxg_)+4nUx|YYoa!Dm59mSUYogU z#B}+j|6o4pukFq15p$8&dj1%!Oz}d7yTwJ`UNf@iQqGr~J-fXbqRh+;jdT`G@{k#4 zk6vwW){dBIZu87_A}0Gnk*}D47bo5cR+vY;ky5R6G{Y51Ph;Awf!KnSvSijznDkSg zDQT6=NM*|Yl+4=fve`)4JdeO{8)&Gb+0dhn6-nNmS37!7SLarqd18LV>L_o^)lRT4 zC1(!VZ>sCQWHwiA8DqB4&;!_kwXd|oW2na`yyk3NdD_$A$5sC)^udjGD;0+YF0gqI?2JpM~$-|Oa z3wT474+Gvv@w&hpTU;_DfH$$YY&HR2w9LGf%%;GbDu;NKayA2AC6W)aI5S&9z8Nq_ z-G$6n2&LE3Hg1reMd-b^#HyX`$ z2&Fk*4skjwSGGs2%Q5i|_*Cb3M@V@sWj!eEdF5OVb^=H0CNspW8|I*Fc19@8!Ac0CuV(}Af=`?)IkVaoQeK_#A)8}lZT9ZU?yPJywL0uQmE8P~-^Onp%yXY*OvNE%e+UFS9+Pt@hTATM(M9b6-mV*w* zt=2C4DRU>(Nr%ejdaCusaJFvODs}^BOXQXPeGlNR6z>Jh*3wuR4^%dzwLGGS-}QiW zYvt|_JO-F`*<>angzb}Fn<3TB5m)3_+c7qZ9ZHPEmJpG4m#rSBbB+bb@;&& zs-zA-6w+-`WDa6S0B>h;W~Kmd4@@UEn4=I1PNYA^BCfU*cR;N3*)d=t<5JYqGjp^%RxtccCs?- z`RsUbc0vj1vy*^#wm37>fX4xg&rU%o_1TVytL?L05KCRQr|RSRU2Uwi$J1b0kiRuz zZ%f5npfOw18n19Tcak0;Fb~`UodG-Pbs`vUt8hAE$&=iqy#1rxoC#i6bV>5vRu?TB zc6jqMXYDkbx0)Kp-G4TsocOw78_Y6ceDKsmcW?Ul0` zk>%wua0kn|Jd|b@FvWVFd5JP*n|n4w)!W?jA$8l_i-1q2k1@Pm3_MNorNE~EOUt+R_4LadL*rTnoIi%HnBYxE6Rt&f)>K)iFnG(_-;J zl{t%7S6Q401}(BRUW-_1J=X!b)=25~s+YFL8&pc2zUF;2Z|d9xY0wERPAoHqtbeee zC%(nn2rOxrH(M#ZoZYI3Iv*f~U^(B~Zi|>L7$$=CJo64^O1u1NouYPmBRH;I&I0}b z#~*B$w*!Bucs4Muz>A5{Bo5PYkh-`9_2az4FGUDc1AMXOt;z`ay)M$J$3Bb#3}d;3@DJ+w{}GM=5?5_-J5h z)6XH4UPmHsd|AF~#d4R;v5?5cRwT7`oXW^A-Nqc<}Y(ev42O&oxcFe@c!7@;bfBCrgE1vr*&<=Lf z^b%0nOw&BbnESGoouV?CQ-pV_%A`dL?=+RkobsC0JzZror!<(?Ax*E7!D!Z;zkpb_ zp*QfCA71f#n`?&l=1q-}wn`p#c161*ejA_oxUwjYUt{8xkE6`>8Ck8r2CLPq%)GC8 zkcVpC(GXrX?a_ORTAM#mL_4gJkjs#otcE^{m>lJ5Ge1!#w|-=Wt>2lx7Wi5T#__|n zx&0*O#iQ)c6*KLQ<_itUQFaURnVHRXg~8Uqe)SeOXTd&SJO3f@h!v#2eGEL^$}{sR z@Y%qPmCu06<{ZtBv+*UQ?&zDCN8fDkP39|vd^v0`&p=$o%s~63-_DCHF?_y;-HoUV zH0*9fU8rGqBWi|**^dAB+T)F?1|0nv^EJxA>s+M8QWdSHFS7Y)(^6fmxuSoVt4lQO zN>w|asg`W2-)gEep(|rRS4e85f4`k~h4&qJGNZ|?`hd>K(*K8J-CQ;gsw`epKBO|~ z{|jL4Q#KE)%*|*&Xs)b7?0@%x;ciuakJxxVcNQh(b#2O*sV^jDYLt!plBzrK`l%|F zOQGdfsXzKu@_*%=O)du?F(D5C29E++3f5e*=Ak zF{upf)~^k~Vg1^uRzv%{9y%@R(RPRx4>SQek5bxR^-_;^P$`*{@Yr2o249Ii#*lSA z4xfnUu$qA-9_^&|%GsQXsB-~kreHbmr_K?R4@v~ z=Tj+l`kEnVG1Tb^Y0wF+O)N8ptVPkwi5Ijs0!!ND0#?dizK|m73`GjTa=xYYikPg4 zU_H-lRi?Db$#WO=^7+AWZL$UU9{7p9yf^T@iu(ZH2P|!JVT97_Zp2MCJfqqh5pLhq zh_Lv35om~476WqrrgU+&mHNA{O37r;56s{{vBwy)*z<{(w3>k>Uhb#%%GpwisKcHg zEa!dKKVq`y2kUv}vdR=MFN#q0Sh@tH&dW;!Kd7Ev2H5rd<$y!aAAnGLJpi3X_2}}5 z6%VWc5P7#p)k)<%7JgwV==d27B0^TF=9nS4Hjk<7B`agCm(Al|#xbRv zS+lBc?g!%yjMsd~ZrKg7ia;%Kj(Jiwxt?VBDGj^T-qRX(dy;1~?DizjYM3)4^`Fyl zgNC2iFlR}|zo6lE8h%m3oH76Zl^?EV+uPmA5cTF0$gA|~p^&hLvX+R~!iRfyzBq;# z*RXh4K=sJvnxQsx9c9X+6`X_J*)4B12ECG5&oi0Aa3A7cnR+j+CppXOt?!xkp%D!+ zXA_eY(y=2m8%E6jb(tGS%ry1P%uf8WX&vUBJ&*`4@!)0=ldH4fi8P;Ovqi*Qqb_qR zWy(Iom5=8TET2BhiwXE;)b=a*For$~F|R`UT4BuVkiLNr{kj=;fVK0xt>!|`x%g_1 z?eUnx_L%IcoBFS8womfBLsV9#zz;9Bz;T%0d9idI%}yG_GPFS2=vwIHH<8P?vd;(r|RKZ*FC zD&7eE&m#P};!Pm`Lh&fzFC+Yw;>{udTJe^^-zXjp{H@}xfxiQ8tc(FFo9}^L`5G(R zSlJJWY^;_27|B@n?I8ULGU6S9e^$IR@GroPm2p;YmFOI*v9gPm{pxLT%%0Ee3Tb-1 z1crOKlXWa(&u&0$BP}2k?~YIP*s}+uyvStz)@JS%G1=|{Ge6qwU5A;DFZ)JJ_MKoe z?YEiPFJiL))n-nNm}x%qKhBu6)(w%kQY& zKk%s@U;c#jufmwWA^is*H@?))#ZggyQ*Y%*lVc(#?eW8_dNessW2#4!e~~A%hm<89 zO)^MJ_{eB77&M%CAS{=RCVRrJ8%@RoyU}DHU^kjf0CuAZ`EE2J-;E~ZyU~PvH=67Z z>_!t}H<}y(>_(G=fZb?9>_(GGz-}}-6xfX>lY!l6ayYPzCPx6}N0TG1EFDdzSXq8F zIT}(onj8!4Mw8=#Wi**;_0rMg1S`vrCMQCgUcaG^+?{IHv5Y1s0lCqH_+)&lN0Vug z@^Yg|ZRV*FlkF}r^P|b>b(rgGoU8)QjF=ovg3bJBGCg8)G^x!zCt{}g%#SAL)nTTi z$psOUqe-pQ%VtKz zwexpnRFc$>`Elmzh)H|=@TwkXuGN_8ab^zWX->^?I?l`mX=i*+x2qQVG&5ZgmP^K& zQ()JPGp7N&apnwQH_n^|?8X`L-8e(O8)wc2?h4zS^@-isLhQztbAjF1Li=u9qJ1|m zoe$hi?GU^1huDoj7XrKS=OSP?{#*>~#-B@oW&F7mC_nyOW@YL4bGel@NB(K7Tw!JT zG3hEu-I#O@up5)E1C}xAdaIX?NjF$oIwmb(ZiFRVHVy@&eNNI7i`DkpCDy2?evl(_B)VUMVpcBrggvFF44RXl8 zTlx1`Yk@E4S$A0}N}t`U$ZGr4?pN)?9F`tX9j3!C7c)&sCs&rzL&}tstyu_FpKQ&B z)SYbI2iywJvgbYs+(+@lzz=2WwV7kE)k&@1rZQ=r+uGK7 zyUL_>N~^m=W$_(>*(!@$=fX&pSKK-mQJJ((dZujdR9$(kXp?!gD*wHpHBwvCEr^x6 zd<=*_UKqP`;>YoUyM249jtli%6z5JqisEJ=4PHfYx73MqGi;IGm8yq+fU}S(2o(mi~U-qm%|J4@pZE#X1m%F#%j zGcxDCl3Beg?&+7Lc{K3s2;ZsrILPl(JQetE z#U}#aqnK&ktN3K#`yzaQgdd3TgAsm6@hQ-KSn+AVk0_@7M-`s|{FvgifFF-IPbfYc z@+TFa3;a|h=V>;}djaHpZ9kt0U*5chUei01RxbbF3V&4!d)T(nnp7Q8vkDl@9S&yFc=mn2n^yp=eUh(Kvk6!cWb&uZg=uMB__UIjt-u37` zkKXs_Bac2+)Y|;HB6^vA3G+@mx8&pExg{SL&mZ}?c;3m!xmqpCi>tw+xOh&=+jMhM zkzPC#<@MZ5RHPTrKY6`){>jI=`A6F7RQ>VjJnOeQH4@J@dA)d+%E!5xsHik?zs&2o zep#d!j{|wVcpQl1;$HR+ds+6SYm?bm9)0c6Hy(ZK(RUtw@6it){pit89{udmFCP8s z(eEDp;nANS{pHc$9{uCdzaE)QI9_5k+a*(UW^~`xz1D`ae`BRTcsO%NzTYt3%Esyw zZ^B!{?yl}YZI4uw}jVX^Xy(*#1(&2rHA%Jn`f~f&ZR87L#)iHq1NWkig?*-|XK`5-H4nmImlBeyX2Vz~V6VHoJT zQj0w`)Y`nDBI?kK!E$I*Qdcd?ball#cWmY_Ijt!5j_fi|ff@25wc1CS``cP=539Ir z-*L6d77=Qd9-ki)skM?>2zXibelOtVfaRIH%v^;UO3^J&C8w(^yQPpFI)<ZG?NU(pbgt&@5Al?eza|gumnEt*|FZi)+uE%mi zuJ9PzD=L#OHPUL?ys9!e#1z?UDvJ*>UsstNVs46j;9b@#b6>z61!;P{3`P(0S@h<| zqPIN0I7YN2Uy}c?)wbkIWZ$Sv9>Fep%O1xDybo7-lK&Pf`#iI&tYyvSRpY=*=#lP=R6GKTUj?x_#xuEW4z0Id)~D~>*XFmZvN)#1 znMdqMuTSlWEN^FYm7Q%OJ2IlAc0}gv$Of)t##Gta0;S+Mh|W^5z1tG8ZuveIx}2eQ z#|%Zht+iD$Q*~1)bKlp9t!8Crdresuh1+SUwRs0cZJ5zaWgCRhXYKN}WOhVoG;-i> zmzH&_Bir2x*5jEjdFk;A{_O-ExF))`vSsL$*e4ecA%dG;TU%~i%LnV29H;q}eig;l z@~%~O4uY0@h-DYV2LFcTBvT%P^lHa$Q#W>O-PmpG#%@>+hy53L(}Sl!skbz={&8+%0E*dy!4PN^GvRNdI4>&6~aH}=@NvB%YoJ-%-2)Vi@J z)QvsS#&*W$X&$?I;sy$r?xBuGKaoAuQ9y1@PJAprd}IC~jM}_pXK@^)ygK1i#CAvV z!k(&Z4pv3%z4T_LuuoKWa}9R7BRW~x+=I!EgzG+js#7YNQ+!Uin>kfO+wwQ!d?WA$if;nGQ1Q*cGZfzfe39Z?foCe71$?pMJAf}y zd?)aw7MIMuz?Z4~e&EZ2x!RuJJb)0#8@V|8pM*FbBjf$*Zhp|Y;UUDz-0&cfYc<4= z;KR8g9qk{5l-D?XWQ5|n`tYcI2Hlc*T-nm%p3u9}$GS4Nsd0s=4tTi`g)z&YY7Zd%LG&C9daz4oMgP+9@BlfYLgehT<%#m@j=qxf0iYZbo$e4XN#fv;Em8t@H@UkAQX@f*N5 zDSiw1X2tIS-=g?k;9C{H5BzC+84W)q#%`NO@1FwCQqJeVw*hlR=w`k^D2xc~^H(6w zy`lC?gk=Wg%(oY6<-q8dkr?|GK0I0f8h?37?SG@8PLQ~k8QA&S|IX_cvGc39AC%o( z!*;r2{Ylw9eBNAYJ*y-wH7ut6=r^?pXJ~1igln^+(x&6&pQ_)lkR95(c=B&$b2UcW zryyD9Nr-YiV`^IwE5i$&$(7qft=k|%Rxu#yPGo8 z-|b@i2qR&8aPC*XcLa7L+Z@1dq?!}>0m~_wuD}l}zZv);VAfNUnH!-{PyF4k`w-{q zsXJn26e5Rnc)V9*>^%5z6zYM$yu_FDYA7Cs0y|$9^LyP;&w(90FSZv@b~93wmH6?| z$Qbl8vyivTy=RMtI3C$rKxrJCId`|X#pVTVMJ(K8Rx47!y*1R@+(!{DQ#V)+I#R!j zC^N0!jfThdJ0CcFS3B3%J%Jz5x?2#~z3;piu)8z0Fz}gz_902}45aMXOew9KOWTTAc+bCDk-Aw%L#@rrDPmcu8!QJMshj1M$*(SS zsJO=!(z;m^oQ>`5o|*o@o9IkG0C-cCuK+v>n0>6#tcXyk13rH6C{9dW9~+2RX>$`I zUs1XeJ{%QS#$R6I?^QHJe~Vu1<5+LiL~k`8a_jQ_U}68lG)tzS^{F{m)?-jFFVqNx1~&0pB6)-Rh468(`H;`*co{R|@|^jLoOv%~up|F&evPdl?wVsB#& zK@oRsvr>b##XRvtfADX0z8bK@gbFTcL!&grwN0>dIEv|P^(ri1gV{W>vxSB@LrcB5 zeqWu3lG!TJ9jzhG*D}Y@FU-S}>lKxuY{n$|+h~Y0cy(%Jv;S~J;F1z=tL!#NB&V(w zR_m6`_DM=RXlRJnosO1Y+;U51r$l#W4Gn{?^wxt>LZ->tJk)e%c1iSh)es9IdhVn% zueW=mw}*yCdOdeqnAh7Y(HpNJEHiBGcrNR52T^VWzOJo^m6?6jij2VfXsES$f+Cii zy1{bLkr8-*Wp=eEPupNUf-AS$9R$t+I?}EVytm>tfDcqW6!;*;!+;M~ydLl*#p?qf zqIg4K_lu{S0Lw3)W@auF)E)3d@L|$lX=Vm2!+{X3_NsxG@BfVSZObZ;1^$9+otp& zd^npNjK933Urf@_=8zPzr=c(M6853W9&IH&pK*OQ?hPTevYDKucDRPdLO=AvV%?HC zGSQu)p&g)Gozwho;Amx|Dhk;7bE9LGy?Y@$e?oM;vd4ohesTH}sw4+M5=L0oThT}z zJl0@NQtM**WDQM%rqt_6I)2deK`%3>BzmW6Xfjw~#w^w?nbQ;9Gc+^>y5SUlKZJ_) z@hh&0{&Wo;YxTK)a28Lfl1zhywRsLoaE8`I?f9H|J@nwfO=?v`pP# zIq1lEGeeo_xf92yu-iHWp=Wh~d(fT!{nVB0By&E;ewWk|*Vs^U9zFFBV zU`xNB0OVFx`4w8Q(_n5*Qk|tCbPMf+ZdVnrT!Vhu+@9#)p`pcmKAb+i#no%P!V7j9 z%$0CG``)%9R%RYhE7HI3*HCNo zgNkUGy1{bLk^cR#GV7h5T?UT(74$2C-^YB)`TH8+J#`Mg9(XUsHvx}Vd<(E!f7}M_ z)(W$M_f^i_z!MbT2fUxfCG!yQ{wjY2cp@Ddm5bA9wN#JZM9{5U@R zYC(E0D7obfnF^rp)w&hHWg&2~Q&A z#`tG|-`BDBd0;nwzX&Yjcgeg8{DE>_2mVmU<0kV4LZPmC0{31t9>0lL*)`9EH@GTi zKaR%$GTy?6ziRw8{_>Jqd`CkZrDYzEZMYT`^vmYGME`vs5>H=*)E%3tq^B}Zw-vE6 z^O0JS`uI>ot<4`RVm_!FEC(H_k583Z?^NbpaK2IhegOQf#U=9z@OLWz4ETFsIhFYw zq2PC(%6x=4*T=p1wePLTN4j0iLVHIS}h=k$6sgs%vpB zNO`$hycAw^Y|2wFe$gg2Q&wiWsul5K7Y(&GcT>cCP&Zf(I^xB-m6`qwV0xO|8JrSI z&wItqz-5aw(;c{?Ucs&(q2LvMH7i4$^GXlI%J|Otfh*!sm~fq+7&|XMyh}45{_>L6 zI=_aTpZ06RY_DvxQa^o%SlUck_yu;gB7RyxL#@pVDWVQ_gXN$je(I&ndVcB&PNVv% z1-PC1sW)(w_fsoEsh=7mKlMSZ%%wbqCC~l^cD^EGVSG53E`qNOVXWUbO@n z%gZaR?O)r(X3E0-5@kzmFQXycV^PF>P&Zf(I#S!qD>GePrM+S?aOCw+nOOq3gVy#^ zz#SF$2VNeJWwYlD0Pdvn6@cde=B&_URzxVY2(GT$BTk;X>g=Ao+SER6WmW=Lp1T?d z_R*pyXIyr+&+SzDP>-eDT*W6Q+zK(=K5=m75(S9_pr)=l)+(-3#5 zp=Ub% zODMN~Toux{bdSCo@Y{;pfZtKP2JpLzhX9wGI8xyEkOnnc^|PpDW%5_zR11cM14QmG21r6);DuX0sDQVYK3S z^d{omJijx-QqyeNhoXjD%Vx|te0U153;yzwdfin+ZjQekT8>RtI_fuSy{0Vuindyj zdfi<^t<8HXVm_!FEC(H_*YV1%H^=V=&RljBFPXi7JL`zPH*gmn(HqP@2n8Q;Ei|Vc z(PiY`mwJXHk?Z{|i}Mp>C*Z@i(0=&KOZ>FIhUll@<9HMcx+QZ!qI;kZNlI5BMaO0e zsgLJUAE&I$Oj0Z2ypQkgu`e71{DH+Kb0}~( z_4j1pX7zWYIUJ$jZ|;-3M*cnmv9ccGy3?&=+~0WbOy-gJ@ClMB_{&Rtf0Tyk``WhR zwN-5En8enxKIClid+9}ab8RBFb-dT+957WwoS&slIa~248}!TO#6EcJf6TMS36wloumHg9FrzyJysnGT>t+?w58GX$wZGH1->q}XgIaArv`p(c$Yx7x( zXqmdfa?p|1ceXO+RUiH5wu$FP?xVr!uC44i;CU3E0Ng|I$-wg}J{5RA#is+$Z*j>? z2kxozbAT5B<_OxsoQqIstxF>pb0f};pywf$CHWOTB0e7s5Ptzs@gD3t9>XfGI* z?NY=t2kd*qm*K-TYkIFW3zWxLfab6%T$ zowD8PmMf*&>>HHrdI-H2*r7fp-#00{1uT~GH`KmkLzJui#kKZR7GCMAR;2cC(NJsi zEJd_T-C#NBNbTRQ%z8cK3UGEpaX3C-4cuE>!nMG%+rhWSfZZDAM&MTE+zi~u;*z-y zcwv>_0lWyX^pM#Ig;vBK(hG5}hun!+mV^xAyYQ)QMR!BWi>=7Do0y%pgnO0kc13J) zfsNB3oUrne+PYuauHCS113SEsP}mPDo9!m-AeeiO(QHN4rKy;QeU3QJKcXSFrZf*N zRT2!~x;|hU#r8|)iNyYs8saV|wcpQ5+`fs{oJIZ(r7oLi5{u7ji2D`m|AZY{w50aD zvIl^bO1MLz{_p4!E;Wd9J)*z%h?Ir9CTdrD#7i2&ofbv3Ox<8P=tz%vO_}%D@$j6z>0JyK>hk%z*{3vig#g73msrYf=r4&B}ytLw{f%_|d4tN>G zF90vA_(kC5EXJK2-~lRs9e8n44TM6^x)h~Z6mhO+y@^;^MUcZj5U-9H`xZW2 znZAv`yriz)(U9wFf1s`$o2+#1T3+iaW#Ol#)r!>Bdm6&eNGoDpQ8!o)I#O33DYM=R z{#|fZR6l(PJW&1gG4M+2rv~#0Lcvd5!LJbc=~Kk&jvJ*Tk9p%?#(ahkcR8QqFE8=Y z7aF3Ef{&@=`ctZ3HeV(BU;B`x_9uMoQe!Hqk5^Y8r>x9;r&h$r-)g9}`Flky2X%wx zpd&v1QJM8t@Lz(niu&~%;6WDStvtZ1s{AM5)qvS98_mxMvHWsz1-~-lT)X@QvBBS4 zVn|{>d0xbrU-6;8f5Ts1;_u%z|gfS+DgqfHO=z*aWs$9^DJ=}eCXLt zhD+JSLtP=|<=WdvZD@(grabk~rs|=Tm6^HKig>75L#@r-6)_*w4VHtBc&LXm>$SIT z;EYhO%mci>dSzbV4b&_6X)%O?SJ>W$M_!p9v0)tJ-JE#$%h;ayaIRPYe|d?Y7SxdQ z6MJ!B=l23FUN_W1U??cU06hD~YRcSUcL3woL9FwXlZV%Kl%B6^_lEr*$_* z>n>$wW-+xQb+@R7TALSF#JZzyupD%x?v_wyz55Oef#be+(+k*r@1_;leeY%wVE4V7 zzQ7x5{q_UiNb9%BEQwI4U*2~Z8P)Gnh;^-=cximN${vuk`u>peVr@ztIEhvtRAowRt9>CKqE}6Z7Pf_{4z^4MUpW~h< zLZKb-xvUcq=lc16h?R32ayT>00T0D}os9kQ;WHT%@t2p>!~q(L`+8vK`}#p%*R>_4 zc#U=&@Gw665YufVp|D&tZf!7O1ET=NOX_X5L-@2x0dcv ziSE%FYJqN13DfcESY@MFmfZosl?kF;8$DdxXv)gWRJ9^)^mq-mHlLt~`JisF9CW0O zo}|np>^#<~@D9R(;7rtZb};Y(iVp>LZS-*9OFE*KafUht_(0_x1H7l=k%uXHRoZDgS@jE-wh?>27EYL--y4wWVF6XLoHPjn2D@1b*}gLakU#;y*05q zOG9$D&XaWJiY=p9AK#Nn^zYD6KWNA(OWk-~7t${IAN7+G-KDy2{m+#^VB_w5lF~gI z8UR*xxzOS)cm|2}A5Qci(NG)orPmbu z6K`co^d8sH5a@+jt5~;Wo=kL~($FxQXZBqu8Ez%97vd+e;!-@DSbR=HBcU(fV{u-z z--fExY9$Tkg~ZN_8rsC?%+=54kgzscD=r@pFr9+S_jd9;f&=;9V5Y2HsWi-N3skz883R#rFg6i2`$8 zeF)giw~tb;oF{AH8X@wdwOP#pI=-XZ9YT2jaIvF>_T?QE3PHk z`VMy9H@=I%+-$tPC&{nUgAsLSlahJ0(RzF++#Lle#g}>Y^@_$QWR?VJ2 zyIMPXiuQpMU&dxGO1WgYSO^hwHd*QDxmmeLS*6e_FP4iIN!3c55OYD>=sDV0E_#UB z>=lfEaIXFixH91N)d7 z0PJIGD&W&JrltWtJs(rkLW=q2m^!sErlv!ytsVG|(rip168u~IH6601$KC@KGXwr| zvs`pZVxFU)e0)MXF+VdUeyX`t^i%B5SA`rG`!jQH$sErjiM3(xw&ZzDiA>X1b|t{y z#=hFapv2c~k~(1#pWzzBt8a9;(eC+@cwwb8~K#cNp;;J%7bh|Mmcp7VqXC;8ahTXcps_VH zBf-7?+{$6$Ei)U#_pGdWyr-f7gcYu~9cLhRua zVJ|xd4cIIaBgGyG4SlnsJj!IH^U;Hvk5X1CEGsWIA1x!PT3Jqro@pCBM;n`uRuD5? zWvAEp8NoSI^UFZsvxH{_K3jNp;B$oM1YSnhn<2pGNUn2dAz?TBsDtizKw*bCI`P&lMbH5F+=YCsY&;545*JgaYdINl&Y3 zM|RAW9dTc=i*rh3*Z$Vz{$h8ce_mOUUHi+82Z$Xj%QamM?Q4Il@n5p{s+$(Tj|K-d zRri6aE@hR%q4Hu?cZj5FRM?s1e$k$+QK$}^8)xgIuY3K zzD@@AyRXxL{qE~5a+Ke5fFD(UJHok;Vt#q|bz337=b<&`cVJC^*?K;9=Jx{p8jJHkRM(#B7$|i@@>xUIOg-y$sm%dnK^v_gdh0mEY@u z-^=rR1Ee&+j}`KJBU;&GuEB_J!p_%FcUYMb@oe4tB=B*w^W>7Q|JWcy%Z`%o@5V%NTs z^@!Mh9ZmZcvtj*uOzh6Qr>^n!_bfO+KQEAKve`Dm`joOt;VJpGY(6QeT6tQCXHDDa zIoen@pA|D*QKxrx4}kNMGWam?%fgQWzasoN@TO3O(HOH{mayetV)!;hL5NLQFM`FDCSwmG*JCmz+QWjowQU9!VK9Gdh zX@uyRw$XF6vD*1W%x3Sod>Ncil>b+OKNWr*_%q=*fIk<03-}A+w}HPDeh2s~;dg<* z7Jd)-8{zkXzs+ztd<^`Z^q&HM56rroG<*gr)*at-`7zqO?mkDW*9P$y*f|%cuVa4+ zEw?W0WDi9GolSi@7f-JYq^wf-MqVrfUrVZ1z7?Wp+D6aO#xn4|nCV>1(aw=z?~C{f z(vOPDcfda>Dn9`Ktf;hwA0fr4a4!C#5S5?M>QN#78GC(Heu0+TQ0(>W7!?~$zll9e z>~m1X?welH7|yO3rmRx zH&BegWQlEGNnNnD`(qxPb;>JY@h&I&z%R}xJ|>q0g9g2=T?G#ioAYn|xz(;_rxcrW zGuiXwAl?(GYHE0hYB*(;!qoC&H9VE1YGoQBdZumk9Br(IrxWvx>|KLH$MD#p=6eTP z!D;QV*I(O!|5V*}0RJW28~AVGNr8XVd#L&W|08_`IP744rT{JpcLJ9)Tn^I$w@5!d za4Rs!#Ux<{NX(yY^P#7Iz^{*sF0|U~LyXbHa!uBZ*!eosO!&*q>bxq+*8?11kzJeX znRDBi>mvJdjA(A=dseYIhHM9_YfWg+#x&%aL){v!`#5V zq@M@4H!$+fqh8d>)F!aNZ&*P>U8abj7s}vTKU(3*8FS<4BTIM5#Y%)jL!oBSEOGOcmOc7(j$z3#3gfDGQ(Ckr#{BvXb!0 zA0c|CZS)*%ELtmynXZA}!2LwLelG*gl#0p)BgCxGHhPXWmX-CyOlz1~j9FO? z(hSPP7~n49wSZ^LFn%uwcqZxB2d)BJ4R62}o>I24hNniG*YJjD^%^Gb#?BR18tsjs z<;L8^+|p|?x6!^OY$6NG?WU57tA)tMcQ_}x-CS(uCLXQ!-NVtoC2W}-Z7WHB-^cM; zWT%y|jo3r8qwxylXFCiUTZyr@o>vW|-pXP7+`59KQ>e~b+v(frmRxf zSzfHJc9K-B>>@m&v^DUo!rKB{z2O_% zfCovxBk?g#2&^CIGHWuCSVy1Ix`ZQ>7aE2%<`vcFT zs2l)1ucFcx4ulk=!nt(rLR1bytGz1l4$jo$L+!t?Gd>67FE<-!he-1Ha1M#=7$0LF zmfM=|k8uoV(`OpZ-4xA~h0o>4i$(JYN%$;}5PMDA=sDV0G>;K8y|YZCc_=uuZfUFO z!+{577@x-h9;(P53p~Ff+a8XC6eG(!%lQhCJsz#LqT=VsIJZoN=kmpC2N@?|=Zfk? z{N-kGJ4q6wZ1WTC>1R0%d(Tp|ZwaR)_NV5OvA;pwoz0`9ao-QIqtBFu*J0$v;(od$ zymli*8`?(C(Z=F_wwTT0elj=?EVt%0;&Mq`1KXWgBVYA>Y718;ey)_sx?=h1XtIL}t;k(a-=$W?B zbF{I#yiLsX-3;k`a1l6*s{SqoUQGB3;KhZn23|t=I^f~LHv%u2VSM))@CfN|2VM%8 zb=)i50V&oo-_5WH+PseMMC(A*P)9cInJ4c4-gsipC7wUVpB8sv?|~WpZv5qDwSA8y z)^@=sBpyHe^og+7C}UXb^S;FA{ki087|u_{Pol>Dl*5BLo3;IrB)`A=2X)|Vbfl&Z zPC_o(pOjS!kIIYH!6TBYmB)l=L)+*%+E^VtA!fQZPV3-aaF$m79spiO_+j8>Gh7aj z11~52lfcUZ+uHakNQ|*o9Fmxv~~sl66e2@U$URU-UI)h#b0ig-{&OxRhgNK z>=;jDzmVIyy=y!lRgzS#vjH$8n4sII!w8%WbLU6mdUc2- z-v5xj3}Ws_fvP5(Z=toGRSNUTi)C|ON!7|wA==P3dX6@h%>~44_8y_xz}Zx|XM0#0Qj90B)O(`M^8MQCL)o6RxHgR{S) zvJ&ukMP(J>0~D3EFd9;f3g?*p3Q<`Vt?@I0h`otqxd^o8IhD#3S;HhqPUi%YGrL9+R!$7jy4v>b;WE}XKR3SkRrDx@V_!# z4(k9PEd6@GhX7lhtq+M&vW<0iAlkgnHbAS_8S#eLId0S6A?${ho7WlV=*W%{vUqMR zw#Rc7%&^X;mo%QOOIZ(67Cv_)FBZ>DB~>e%3$fR^8#dAwBo5gb@a1K-4HUU07 z!{x9A@Db8)1$-p1#dB*&X*>@_o5yn-w8pyd_{+^=w!Nfcgd@9l z9^Emw^`o&zwPPUKw}hQ@3tr83k>uCR(a4aq*{3u^{gk1URSLVwi)Cn6N!7~kLd+0t zqvvR28QN3KW=~&s0Ox3BVkh8ZgvS9Nn_>L^4e)W&?*)83FtgPo>6H%j9^mS^cTTqkYf_ToZIO`c0$Vsc5Gxd~=xmTC@+6 zRIMB=#PgtS^c-z0+J}nSEZX~nbD|=70Psn|2Lhj*;c_?x_!Q|613nelqJ21|G}w_>y-J4VZ5dyLpI+OF|v^W6b%PrqrjtBQ8YDuol|*P?yA zq-y0vA)W_qqvvR2(LPzsX3;(xoLO7262<-fvB1+Rs>cD_ry9!PB;e_!KLvRDJldy1 zN~1kZA=;;*)uT;(I(F9flA{;}ugx={<>t{o9no?&^=Y)`RJ2l7DV!}Y7Ok@+RV(KR zu^+UJo}-OL>pU@=tsu?>=kzQR+qMGjk@b4v1;sU zN8j8BEZoSxCES?U-;_(nz79wAqrpi{d`Bq0DXSE2l^2WeEt0C0+k|)?w2hvljm7s4 zF`KOrZUEs(VM_w%YZ%e9H-WB3G(l&aIHWvN&#cXyR zehr*i6y-O7XBB=6cuO;#GiZ56|mRSI9oi^cGBN!7}iLX078qvvR2G5lK0 zbQVZoCH)MXYZR-mfUi}oz5%{Yv1$w7LW;5CEO2!pR^Or3tCskC?5x`K-L5}C%Z*X7 zS0wnF_2Y&2#YEe3_(^Pw=+C)iNBRH}bvAvb5#3!8OFN%%H3A@+l|(Q~x1 znDr2|SrwMSxm9s$2fj^l>Hxl7al+F~NHI>V!dnV)>V;OTD{_h}8n*Pt&byXA_{+`e zY7$8vBhHPHUAumoEVs4z|B8q@n?BQs9;1k+tWxMNFBZ{$lB$)-g&0xVM$gg4B050K zW>q*TIJV{~g}%VH7Al7d@STe86u@^Wy6s^~NHMys!aEAl?L_O~P%8Jz=0X1^De}2f z#v4?uIuS(byh3R?74{x@=gidj%gv%cjU6(Q~x1I1LlC*=U>>oJSO!`G6nIa5*dp{Fw9$0Y46G z*Mx;3#h7t4K8!ZMCM<$hj~Vfz*g3nUzjw75wA{RsIJ-r5?e7FFA-2bJ4C3i*dP(DX zi{hEG@a?MdV)0y3Qnj*_5PMDA=sDV0JeL-;Sv(g9=SjtFIPg;$E{Bo8PfNcH@H4;` z&t)N{@q7Yp9?#{_>hUCA9y_n7>9_l?04+Dh)2=jKt>(4fwj4%@ZPmI`F4>U=AqIXV z`b?vHzoMJ6N@29TSaesBRIRKk#D35=dX6?0-POfx7Tp!Wc}`JW8Tk1Om&0nnFGxQI z_(fog?i!HN=st@!kM5di^#~EKg}weRaV)glYNCq>*W2Qi6R|D2>*i8pcAAUz#rAs~ zj*Hl@m<#j0q1b*;KM&&TZ1y+J+-Ae92Pvx*HkKF5+(weBl}&_rjxjCO=AAjORG9TqR4%`>_sT5V0* zUn8LSdI?*%!p;%2HU4t5SZ*UJ=Gg5$$I-SNwo7cc&n1iSqR4}@d4x0%+bItzs}y#U z7t6zrlB$)Rh1d_;M$gg4@-R-!W+P}@aC`*q0PG`Z7vQ%P?_Gi4R=nH8ZjfTUIp4oo zi1+Sj^#~E~fxUhN?FlWnn&=irP_!+Fy~Vc7?2}84j#QhA{lqSgpy)g1!hDYxyAyrm zSuBstIh*}WGq;B_m$FLXAbGLO9Vn?<`Iitq(>8jJHkP?V#B4T#_5#O8(7wPvg7ydY z5p)2skD!Br-&IBr1%6K%?FffKiW%hydZ&=l!_jIZXvqd6h^7cqc#TDf{h)319BnKQCyUu^ z1RV{IkD%j#eFU8Z{DIqpQT&~mGZZeavP zTYS<*Y|G5qxzy-LwYfM~?BWQDzGE)T_xWOXqHjEl^^iGdv%hKPj#lPU7JkP?UMzDL zN~%^a7NTd`M$gg4GIyz%%|_6f;P?nS2iQl@dB8q`E&%osbP4ds%IIalpD3dp;c`eZ zqZ~mW6*77STJ2pW{N_&bvYn#|`yPwOERcC6cD}3RD*WYUalKj+^X=6U*|pyydTnlN z?9Gt{XVYhzh0~RVlvN5h$cts+dP&vFjY8}PZKLOCV_CRa%x2@~8gM>SRIda6Jj3O1 z6Yv+(-vaz4u&v>4g%qRB@$)I#{EB}YT5Zic6yGs00ZS&27h7(}&iju$@RyrK_fAP3 z-5n7xXOor2>s-YvWtGA`@?!D2TT-=huMqn|+vqvkSiJ5Rv)P^OUEn;FeOCv*5e@ij z#pnUxZxo}p@F1iZBi`SCmBok=M0|Mblx*Lk)#BTz^}D96-)F5Ih-$CaM{!)9Cy!11 z820*mT;un2ry>JxPiC5d2b6)7RSHkbuVvsVN!7|TLhKoBqvvR28F)_2 zW)=GcI6vZ?`KtPpz&~ZU9G(UKS^DRJe*w0NeF0L;1}pXlw0Xt8h*rD8^2t5VXZA=Y-k%j zM;ohwPsD8Y9@tmG8LDs0c?0-w<^3(-e}vzmpB=4E-Ulva7~fY0T$cV*;1*!kNzd>Z zq*y0>5A3gnI{6%}7SEvz$E;EN1$M3xzQkW{Rv%wUVttt1{1dVJCb9cAml_`>{ms(v z#V*!Hu}|qc{eBdiwZTkWiyS+fJx_D|s&bsNO5qoIu^j&_sap9}h@NR1Jx3eM@$X_b zTOWK4&ZNrIcfgYg{{Y-q_$T0g87_z4fcr~70eEs?=CvdI0V(E{>w{Lb`S|}6tv+Ij z|H59s;`>BkC z`Z_>SX#sx)qv03Y8@0v~>Z5_;X-dm_@vNHQ{J4(vJt0wYm_1sSqUTG2H zdC)d`jy9H+0b(|*=U(7UrA$l$Jhkv-z|#o#1)es;cm)P{I_akXo*vlhc}hqzbFAl1 zw6%uO_!gt~R<^W+b2h-AZ2RH+_EvrZ7~ffpZ#>}Eig$Ljx1O{ZbzQLJhEE|wXSR23 zYPvqz@mj-FI9|HV0IR;R!I~o+xF)TM&dSlnIl41PZ|3MzplFi)PWfU>ZhYNqjS!ZHxk6H*ET4#)Gu;UMVh6WkcGeQlvon2NAI5;; z*_jTl>)}j8D^Ux4#XQfV*!C^xW|gi|&<&EVGt;d-n0{uHZrUsoZK12K7c+y=rAW+x z)~>7fiNi})&vUB}j5F(XNKGH-sp;dql3T=|PqNqh zP|0m-pI>qh$qPtkh46R_O2)TxXYw$~cs(|g|Ih6obAn%hKu!iKCv&0irzzJ9>pWV= zvu5mE7AfdF=Zh9}UKfi==Q;WB@x}hOX8oO6{apyhvD)D8_ZgaZ44&lT9DEL5TqC+T z4nNokCymW!n(VhN!b2OH&PM+C%kZq1kgbhZ(+!u-#-{0(l&%YL@;TjSl0gOCQsNEH zbRRCoW6ZRb9d}59H&VRe1>MCu=aJc{?Hy*7Y}WjLF<31Z#w&kIC^g@mn#+e(BAsxNY=;7()kr|a9!S4 z1jDa@bD-6Zyi$JTjdHYWj*bS}BO4{wn>&;1-oh zrn^@<&Vuc&>-3|)`=qn$XnUBe?o93gqi@(W>zDbtUp5w{4YDiY1Jc>(wf;XSo%O-i z4i8D!r!a~hmaea^qC@KXa61?k#c=LCn*6ne_f)~7l@YJlRV91Ht|r+lX?4jQ&Aeia zk<7kQUPCfx8Om!)?vnh!?s%-^9@z+*M{!vNeX(^EW6=`cRQ!rn`<8UJg5kFpw}iK) zvsuz|^p144f@ux&)y4jCFuHsm&tuQuYp|N;w|@s+_s1$qo`tm~dluG_>{(b>vPXSA z$sYCfC41C2knCC8P%_V)S^D31d}gU5%hFIqa4qz$IGVl6i&@%8{V$H1?f9q?n~fUF z(u>McanvlLYolEUZ8YCrHrq-zlG?)pb=mC35j(?8g;^%;*UWfc-4dSC@vL8rY)g1L z(GAIX&m=nIJ)7w4p6j_p*DtHa=Mx=Ym1qesBs#kT@pHGi7N60sJEtdM)h7%qoD+Wq zz_uU0@7X#Bd~dEubLOLrZ(PCZgj;JCtCp~Eo!^aN)1m9bn@B{Ai{ zw^^>M;8m2Cuqb?YgoW_`CTMBJI=;2svvp4NV>>a~uk?KFKDQheuj|(qnUCW67IWCM zbuRebw&0g?{rL{h`m|WV`Z z2d29<^XGL?)Oj6n)^Eqi8jvSi996YxkOC?IGD$se4NHS$!|bez*4D z=a1*omd&!u>0EZjvAWgoeRNz_5@WWnWRKZ?l09bsKA*?6RqXOQ?%wd_xfx$`oC9i( zGx7GAn-%1Df7tr@93($}KL4sY&cQXu`SopK{g9bif8_|aRk|2(PYxu z2(qVdWuwsAACY8su>8!n3NmVQj$J=4+rn*mWK0p@UoKto zdNfdTeDOMYg?Pp5Jw~#R#A79QX`~(}dAQ`` zC6AYUg5*%Lk$s}e9VVY7*+=%tl6^)xMKaHhu{>3>uQN}R9Lm;yy34I5pW$+s$!EIU z*W~|y&X+UCWZ4Y7hN|Hx#G-f){U2AHRdbhO=-1x0>ZQnLl(`vm1~uoip=7^;|NH!S-1T(a_26r~uD}=9 zobM$y=X+_5e3@iF|Npu@`(@7|*H^zTf^X076*`X3M_1PLW8&>GzZ=N!<*+Tjim`)Y zN#Fi_b4TgydiBCmtj?XJvl-TO)%+fgPyJg%w~pagz!0{Fm0vwKz$e#iwYE);_=#N4 z`qedOc}>k(UMtz7{qOT*);CfQuYxb@%iMUK)zBh99`WA`QDNmzknEK|@%9+;jdiTw zVC#PWtnvF-jo*p4N57lM?;o(ePnCOpP3&%{iQSDgvAapKkD!|+`xWOF$-V~upXZZd9{1L#{YxOu2wyy^U=^D*>lrVve!v3$$qZ?y*}B0Thni*{MF2B8DYn95^u!~odtMt6z#;~n^u9nWPCR@r&9Gh2y;a8I_ z(E3?ReC7Fs2J5bu)pwf}Z2f$bj$*Td>0Z>U*7ls%bYF{SD_hfjBi*Fg%(GjzQvOyt zTXWi(e3$6DGT!%zj%#sbH_;8xbU!A#B{SVmiOy_)PIPwMUlQH3qj-#86P@{c1V3NL z&H8-rOyvER@a&%C_e6JMcFmuV=(f#tec1qI*88muV8+hgn?uC%PT8I8UDFX3TVzM923zw}b(SZud+#MWW;T9$Uhc ziEh_S*O}{hwVpR@T{k1#iePnVj@b&W#dX5z4Q2$NC2U5xWFU_`wT@ylf>r9ns$Rbn z+qUk=4}sx#V%wm#IJ@=0vmM*GLa~~;OCEi8+rG}@onUk{@ndy%PmP})>-^mPANaA_ zysyU3&UJq7{g3=)wfjJgpK*15?*9+`Y?=9aq{h!~b$%Yq{1oqe(m2<~hp|te75JUc z9(BGSh40R=vF@f{Q(yeu3$IJ|yVo})`}O)w$$q_lOERB1a4q(>WWO7JNAe_Ue^;`< zd*VIGy!O!keaQnQe;~O$ev3$NmAiqF#rb_cs1T3fD~~}p5wKL z@zAE*ZLk`mS$aRT>YfUjG&Bb9Rxz{|P?tvGdGhNk(eowyO7sHBJ_;|C?4$4^$vh{H zl8Yt#9l|A&`6@o!FO}@?ak@;hkJ|rp`ol5QGaEw(DAwnquXgR*Z!q(8z4~r>-#63U zkmxMOHzqo(4__hMm8vxyRF}`oVdbyW9f;PJa7_b0UVBzQRx8(uXV=x1aB!XPE5N8E zS3$pLw{u~I;2n_pHQV03cW9lT7vab6;}1crU7vT!W{>G)T^tqDOXt_;!|Oc00FQq6 zaaiur;<%8WD-=E6qH}eRN7i|~x!~~#wA!`JB059TN4DZ!v-w$byGj~j^ZnoqtLn~#+P3iZ&e?y-*ztdx7g^lm3w-A_7vUjHg1!xy}QA5w@Wu|Hn-T5 z?mMLGD$F-`O2;c2=He_XcS$!W(^)OvE#2UP?jGspD(LQ&Zb(6QpLFvUboWa)w4i%H zx&;cl2c;WU&^;vG!kNyp^ssb`W;)B#Bhrn;^`{Lp^s#jrIR}hUn(>Z7tBu_4vnY&B z@^1GkYfERdv#s6N$@9(#nr>a`eARk<-I3P1~#I7Qi=?%oQewuDW>1-A-UAJ_06|oB2NII)J&c`ibW9h8wPDZcr z`<&7htIqFx?L9R;!zp#=y&kN(bap48wOiMix#W#!#$(Pc*{?A}B>OdHo*H>x$$rh5 zPqJTghD!Ep&is=7nzMjpzve6`*{?anB>T$n|DOKFb>6AU#+*2p^YoOgs`K)=50vb2 zpINfUeHO_c=UF9tod5g$vETM|>@@XzCLC+L`aPSD>;0TvviEb2ntlzI?D_n!+p}Nx zy!~|bYY=>Ym#uGY?p;X7vQcU?$HImFw72ew5#JIPDfFqmb$q57LJ4?M?2EOf;_eL2@ zua-84+T6IJ`ebvcT_;8*I*Z&&(peTQaw|(`QU6z##Z{!U&pz}B=hQ`WX)ye=4`-wG zJvikzT-NKz-@Dvp$N$0Q;U@q8bH1!rd!6}QRl|pf#d*s6Pl}7@{b$LZ z_g^G?-hY+sdH+qa=lyrdp7#loJ@0==_PqZo+4KIF%gX!TE-UZmK9ZzY^-@f~4({oFD4wYS=exSw>ztHZWst8IU} zd7=EpYvW|F>Z3bgdm@_N_t`!5Q~JD(eJY?F{IfRE&y!&ID*7TErTEPIX<3J?w?}2y znP;T)JK#&}diDeueouV~TJ8Sh;QV>egE{&#N9}7k?~hd-O_A$n1G-PEwa0ZQ#y&BA zPe}IB@T6oP4Npn-YyZ=deRMn{*;n)b^Zc_q>^0`g6tl;0Y^#ogve=H+HQeHTNTypg z(Vd*>R?Btv&gd)h96Sq;{?6XZ^Vko|Be^G#ucEfdy;vl-lWoD*JsBnhZ}TEdqQ&= zTKO#iDGT4XFBZQ!pxk<+q*Ck6(HhTl=r`+k>#acaGwpCY+HD!H6t?JVwZU%_Xer$; zYcknK+8Z-|qd~?DcNUoL)6Srld3S+14hNgK&wC3@o_CB&JYOEYRJvcxeK5;+;3MX@ zK%Riw<~Q@)0sM#XUBG_|-vj(tLI1b#eb66>=bf~D0Qev1+go||CH%ycMaO1X_8#Ag zAsw%1t%%cuu;F-)+wb(8wIbh&Z*099t)7*KVar&rgR>=m1Urv$ldKxG{j&-=_Dvow zt&e6F_%wOtF(JPGQ_8$q=AVF`et5shV>~I|fMVv$Pf1JW6HR(k+m`gE^o+bz`#mef zSM`{o$00wXh(8VdY=+C>IpF7j?Gq#A@O%~>o*$#z8lFdc8r`SC&^4>|1+=oqTcXFr zFJfo>?$f#17(til3H3{5uyzWqu{xwwmV)cFnN?leX#NJhM3l)&xc!& zYHi+X;%_D8oxQ5HTdhgkubqrZn2jRzi>kQ2#B0jil3Ggd&Jc5u3aJ0HSpl zN{-q;#q+t_zKiHDX<3(K4{6H&M{F$VGB&Sj(RV5MShIPnv_6`#(eLKScVyO{LyMSZ z=Y66b*9Wxo**QHz`$UgW+n0{Q5%9fsIu9P9cHH~S&c0Op^_Jb{SlRY!?TK&UP$j=AMTnA6rV|H75LQ9q}zW4?rM5NyQks$;%Cktoen$7G%w`5ais zTzVqRS?ZX4y`z!OL3PaCCK9FD>zJ$K+TFGuz)iWp3&mnb8{|3+PYASi& zI_B_+_#9ftcwbX5WdN(Xcw^JQHCqT*u`5dK(>m(K=?=M3{@$F_&MqvCrXk zOkZQv#&d+2^*t*EUq$!j`lGd)obF`FDwK7u3))$;%ZGEu}5F^O> zoZ4l@^Yw*Y%a@auOs*Ct&Rn6u=An9&1(j`A|Mr1O5n@SIAyrbx83FNk4C)txLHXgH}fTqb2c8IlyaRFW%cW zYV&oEtnbu9Ua}zP`_Ze-~7qTY?v}0~s!aCq| z@|i92v;nZM+`55%<+d^KRN`z3JT)-$*CT8ODdvwWoGH=PtypbNE_(SJ@<+S{_S*c_ zwx#(yQu(W8ZJl}Y{B0?zrFAQzYGoTC%O8(!`P&Z2^GEIW;-&f9L0b0L^EYw!PGWoh z*z4l?dT%X%yNK=ii_F^m?J8!o{A~-)w93tnz@ERIfjxiYfTt5@H{j{>{Ot}Y&EGVI z{Oy5O_OdU|hj>rywfU=UOY?V$@>k2+C-da_+e=bQ>)t}u%DzIDKOWukw?B~QkJ|C# zrTIHR+G74D&OS(N&mVhTJYVmvf_WZHe#q;&vTK-NI+w&KhwfQ?; z%x3vJ4xE9?%}KzXzf*ucf2RS@EY2Cgv*h_Z6H=PLYL-9y-aB4RTY`T>rCoLHb7#+& z85zH~#q>%<)1hJRO9G^Gfzt z-sY3+ue|-QJ04$Y>w$M8^o#>)B7*smkZg!boVMy((gtXsa4!PX0~^E-kr zl&w7tyGT+Wun~?PvFaeALwcLD&SF>z8tOtUXWP>=LX>Tw^;x9ML!c&rpqdu~0NBuLoZOm|F$1Ird z=fsYqe#Sx#M!QmYA@|EVdQp;B#tX=`v)S`B*IN#=zND;Dctu_;*Dp(|R$diiu4x-R zM;pua>tZ$=^-qK2qyAZ7AN9`z`>1~j*hl?qz>6xsZvZc*{C0#lA;tW1)Gt!V?^|f~ zF-80~c8>Zqa_>OPjoGxP#QcRDRztmQIlL#fW$XQ1GWLszx*v%?)2Q#LsHdz__()zX z>K{s~Rz4PDKWH00M;nX!r(!nyMWJ`WSzJ;40C@^>X0iHOQgNn>>~i>Og(CY~u{)vc45c#G6X;5| zBRhPS`=p*ba}JDt+QRqAQGbx+bKpzptFw8$G(&qULn*5iewG)@&`*-8m0yH-_Oy+j zqm5(4m=u|+3FD{ zK#JK~3rAQMZJw<^(CRrN{u4WMv@G5+#LaT_7qr}bW_uOUayIp8v<^|UQdTL14aoK1 zfB8o~tCf=U><4Y5=V)WmY7w*9@4x&FzpE)KW$;&5R9b<@C@NTWLyA%1@4u{Ch)O$J zZOoIyU&-(ov84xhJZ0;^Uv3top1EY~*AOFTlaQNz{96KxLIE+7T z7L^LL+&H?sFkX9P9_e*&eBT1EtK1pkVw9u59$^Z3Fn?1@>VyX#{S8Ff*-+I)`AkJQ zWtGCz@?ue*N>a5ljSxN4HhPXW7Uk*0OlMYRB}RDwq_q{8hOO4t7 z&M-U5AhC<{cd<|Y?mlDBF1F|IO`M6d+4FRioUi<)tWua$UMzouB~>eP2{AUbjh>^8 z+SLBz1%-nnTtwdR&Cy7r8Tz2H(MvROGx6CIPE)JNaN=|5E}O8UG&V)9jcnD zxl&b=vPxm3j$~D{l%#59X(4*1ZS)*%tZJ4O^FTZm>DAh20FND7S4*ze3xKngs$dxK z*1`(|ZzH@I@V3IkfwvQ05_o&z5x_fSxEz)N-ckDHfOi6BW%UlrLyDEv8$H?rZC+U` zpw&kHr-d1V+7+>L#u$aa+${1dNn(vz9SlYR&4Ya$G+qbMz9p=Z*pJSoM(mg;JKAbu zv+AsuA5Wy0V{*T&wlyThYGVY}EUe6956fY##CEJCU-xkoMK+!uaKK=*9V1P|zmYr+nFu?b!8Z|msMsGOu6~wK)r^-L zG+t6xDQqq;HeNQ9RIO|w#9q@jdX6?WUbYhRhHSh9dk1CBcv%^oeO2450`DihI`IC& zYXXlKUK{wq-pB`@^{fkgfb<&xf2LHVh9G(Qh3KPjse4wM(m&jFIEm4k%X586i0(Z=#~u$ax(Bzu7~PC3~Jcvs>5 zfOiuf5A2owFW}v!KLmIWU|W+M3MuB0Ym!~i=9PUIT0L^ahhwj=>?5G%X4ebO&93o0 zeU4bVJ(+1NpH(bVRw*1KzZT1*CE+zKA@+>6(Q~x1SROBCx;{^@)JKAIlwxxf@X;AA zhvR^ck^ThWV}Tj7_HZJk7&ETVk3^ft>?E|>RpKk0wMUQIld&^;r{FI)o6}E~kjCmXa86Qu&H_GJ@i_a6Q zjS$a+w$XF6u^e6}X8J6hztT zz^5ta*8`ufoMQz5DdwEd(oZeq{6@5T7Km@cUZ3-uq2*T0d1NCCNzQK-yEwZ?b~#*t zvo>$c@a+_%2}2@ZG?k;roHlRE8e}J}b}gLy*!8pHay0 z!)Wyk6F-8zKEsbf%Z(YfJH*SdIKC8ny)8bem9v?_CnUu&PFs#~?)CQgy{5$eX-QrI z-y(zFQ#h!};8)6E$|{BD#awW$a30!P z5yxJ5?d;-3`>)>M`j~?-7*tvS}Pd-^DK8Kc@uO67kBHKTAX6!G;F3zw; z_P%)cEjMF-EjCA-t!Vfy-i`Y7ZSI#N^*c$OuxrHj&!5>*eh|BOFJA0Z`sDB@vAgnK zx;-WX_1ih|F55YS>o`MljdO;X?Py~89O_VKh?8EC&Ip(LC0q7zr`M&YutWh zu5r$C&{+J(FW$H(<@}c<82=VYNS5q|qf?DC(U#b?OB$WqeUGu&$gU%?>nUjr>}*!g zW)n#Dw&l<}vF#&iY<|qSW@uzr3X>*wlSx`Hx0`qR#&-P@yZ(~8VP~0e&8E4h3Fv-( z&r4xI;%N#=Tf&ZP#>(p!s+xK0R}@h_s}!b^7n`>_B~>d^3(xKUUzCrjO;2VVl&gCZI67bE!t-!Yk_W-un{!5`3@U~i~P6B+ZIDLU{ z6P_IScHs)}9l}!r-8As}8<_L=v|)NkasKA)d@tO66XGh3`XmVtG zP4uO5OLhjd2TWbghN@=j`bSe&$|{8s z@?ulhl9H;GrG(gP+D6aO#-^^N#e5}uFg&A4HB;9>Xz$g~oEi8&;aP$27oH9H0pZz! z9~7Pw_#xrBfgcv07x)q3`GFr5UJ&>(VSb772Yym`IPg;$E{Bo8PfNcH z@H4=iLi&egA;l?#v&21U^T$QYLH7I-FOR)`u2=zDZgH+~O>wR$+NX2HO0qA`6-9PB zSF9p-oGV^Q$*S@?mMr@A$df%mxj`=mk=9sT%*N*V9Vi!kv@x0R! zzK+<%5ng1cBYZuviz7U;<0!Hbx`Egn;f?y8j^}Q%i{m-^t{u-Ci#=Svf5LcnHdHm^ zxfMSL!ycrpQrJvhY&>r&san}wh&Hs1o}-P8=Pku-Hl9}m$H((1U?0yb1N(R$4eaB2 zRbU^_s{{LZUIW<2^IE_@p4SHU@w_gukLUG)eLQan?BjVOU?0z$0Q-2}0{A(N=dFOB z&&TuDkkaw|Y+*cagH}fBXXJo*TkQ2Y=&2l}tWwxsY|FuRlB$&*gy@;J(Q~x19PA|K zT-luZ)u`;?t$(Z<9|4xbj^MngbK4pCC7oMq*acENw=ZG+LgC!Tp_M)O1?NV*EB5+x zn?&c9vPxlhvF+S;lT@wjAw^8o!eewHaoXH!FfgJwm0yr`MK=_DLuEB3+J{k zTG@kNac;!>VXr^80XnyoRSM(9wsYHGQnhk`5Ixg2dX6@BZU>3k?A#6n=XIUizkuJ! z&+TAH>AAgDIJZO4S_!3cYu)1>_KPb$G7iPgueUo4f4SMbb+{zX&bBt2ZV`)AYKPTr zVt14zpQnFAT>U8Yo<7!@MsZD9rEsjgSX_^hRIMB*#QxJZdX6?0*Av7{AM1RH(}|D7 zj{xUe#r0_5?=oBt#{+*a{fWRo0NZ1olOV--^RdpGX!C3O$!N73VSWgoJdZP5PQlJM z4xWm?+$_$gNh;3xkzM=7o-@QA4*PoFF}mjaEU`z5{X25uzM-ngMOC>-S*38UyjU*I zkyNdmC&YfxHhPXWmWvC-OdoxImE_`daHicEwT71`&IF!L_-x?mGh7bm1J5A+g}`0F z%uA1O5u}(GKKlHzke7?m>d_*;1bh8M>Pw;Jwj6egpKCao*4x+S<_g)5uCpJLYn(GS z({R1d`zrRlc;^%Qh#xhPSL@NWlGcMoqaF=N*w;(y2HWbg_RT!;Nab*2VtbRMO>^5N zrcWQa7j17zY;TpcC2Vc};T;Wk9=~`e8GW>d+Y=vmNZJ-wjm~sE+>&#%xZEZ7j?mPz zYv;Cm#Ac7k{sZH}dqSV-95tK9Man9L`{l*P#eI^hl?R0AnYPh$w6SsVkeK&m*X&EC z=CMO7$5EW4E`v0aYW{NIs_>P-1BI^wo>};6;4kz>nCpONk^TnYS%q%~-n5sEwcCIP zNq;BsY{GW~&n|o~@EjQ~hX;WNOaCzNoWLA|eZwP=;uyRbXEP((d~SRctyY8Ntbtnc zJhA05?3^1P$6s!i)h8tRwWL2C2GcCNuey;4HqgRoBzNO9(#) zJY4ui;3b7$0UnXza(DxHDe2z=9tq6q!WV2oiq*vzn&(2BSJyjewN*;TEU~hveHT0L ztKY+4ZdO_EOX>rS*I|*JzS#0%ZtFFC0p7A+d_og#%i-gk&4==zNUAhEQp}w7>oc)= z2hM)A;cVPDR5f{CP894{fw9hhGxgUnO;cWyfS}y+Wd0Dg2(;O^}3vpkBD9ICmB8 z(>J*NC40_YJQ{oKY^ZATzKHUkvhZ=4ZgTUF*vKb7V$+?eGtab*o}-QBy+zD)e6vpC z73pV4@3hqpW$*S!~Y7>w*s#SY~#BPQmg@v?`6^E zHPDV$dp=6eN?0rx=U}$>;ErB);4e3;g`VA+fI5g-jO^MsCH58@(|n%u$c|Ys-;;>V zk!`iI8v5n6675Q1vfM9cguaq|jQ2pUoefttxn4rKPFbZexxCmI?=PuZsR*$jw2hvl zjpcd@F`JF?Uf}qLGW!7ghcYJx_77$D1NIMP4gg+B`JEDYW#zXcbV7>xFB$5tudq6%%N3-+fQ4k>8jIk zmS}XgX`Rf{4H`DiAa)Gb42GtWeR|cJts69KL$I5@YlcG8$Uc3}Ik+1%Y{RgV%`2-% zg!*)qytL{xWtGC*-Q@b5G*@>f;LDcWG7#|Y03yoT@`z-tQ63H<3god3#U9^kd4 zpAUE}u&t7ZLW<*ntK?%Q5Nj=<51 zZOSTzmE^@@J4#Zuva%5SLEGp#+E{EyiO>v z@oW#PL5lI@v$Rdo=J8w|tsWubG1z&BxXBtJ+bo`IK+BEsw6$J;Ag<0E*{;=%Mr>v~ zwmTED5nyWz+D?iX_r+dsk1uP>Em-;MN@C?ld!7-09IcW4`icDpl6VavyAO`)X9`tK zcGpyPQ&uT#BrlfTZb{Y3#zOQ=+vqvkSavrRv)MXeO>nkFcDS}%8+be6^?xiN^G6c5!e4Hd z)2+KRA*+YDUZkI5PNIEF*j5&1zg;fH3`TbCJiLS0tN@#bd1l;s#NrAy`e+S1$;ytn zvm{o5`8cPq`QX+h+7GSlegA;hcYycD-UHa@Ps_x3Xt^Q$noAg=Vg{mZIULwc zuGif`-NekG&jqv{2Z?+AvGJqR-DtpO$3CPx6HxoE@!oh&EAZ#XC)fLKcODxlrzxux zj_4-WS6_#BX98AVM+&iLw2hvljpg)cG1J*0ecSQ@;P~5?{{`%CTRs%n-*|o)u)R6G z9F79sS9v@Jct7Q_BOD7U=8?0*K7~9UhgSBuCE%kaz{g|fH8%Zd*$L2c>%va<07TB& z)Tfc#T#-vzrEqdLxgNQbx-$WhJ4J||X&XI98;jg&Vx}Lgxo2$gUiw6E#%Gbh>q5W> zWVjSg2R;y()!i1(fE1&`57z9DHm~k8(Q4Pe<1y=;fSrBoAMl2Lw48;V*Uhu>mz&kw zIo+9%&68F^#pjUGt`yD_)9lXACHLeSRz8nA1)}ZtJVqMr?G^2mg^yv#ugyIdNvc*Z z5u#_>M$gg4qJ5c|&DMYCg7X|A$E(-{z|RX`2>e2Z%i&Vs7p1=(_$6Rwp+~p^Qp^I^ ze+Qw>vv4I^Eeo>@1g|w_fh|{IXBMu;Uv3u7Yq~Qb%Yx@DvTN)5IL%C6 z-0j_&fH8Nc5PL@3=sDV072GZ6ZrLj;Lk46XYTj9PEja$=Vb=rumxtX5+_8gI$IZa6 zAiJ!TTY+B{z76=b441=Qz^_Yx5AYkntdw5iUP!T0=0-1GMw?g4eQ33{Nf#?6q}9UK z`?2#`)&uy<&0_puH!-U$<|wjjtL5Qta%tO`omR`E-Q?Q!%jSdm(KoMz;!z&&&WP&M z6OxK`6WJ}H&)P-yQ)2ry?Pnar+2o~j#U84XlvN7P%8Shv&q%6Po)coPX&XI98>^BR z#B8=sc?g`J(0f+EBfxJd(~kkaE&L?#JHk%`|JX)8enJZPUFly0eh=8zDK9~amBDq& zn`raOcp0r$8H_%8{5Yd$fvvA#XJx#Kzuc@cUhB?;{EF8fVr17=#v5Ye5Si~^0Gv%f zX%_ZZ7E)Fzye%)5g|{SCEAI%g*R+kEqm5}Y21DSXP515bpHl?7-GPgVFK{sz>HN}_ybam71wEpqRnIVCt7WV zK+au-7_sFq>|7!IjlbM1M*nnYLS9?_Ax3uXJ5Wj+8QZV<6A)2nvn7q_vFbs}Duq^g zv52-vs#e;B7*X0r&(X#r+C$8=5}AQGvI96rAUcd<8TiNymqR=7QPOt+9}R4k*b`EW zE=TquX!GdyLaUE#;@;SM6wcY=*#}x~9NF>t0KFD#Hrls@No8U7ljRb69{BaU-z?nd zxTVl9XYyH5e@VOb;p623K4MqpcNR;nFJ%@Q>@@Q#)Xa>5&&PziT zf4N!M2TEcASpoc5D1f5fEQ#H$xzy+=<*@MB>>xVIY-0OB?vKWz@AQUu4zXEEae|qo z;rW!qoOw@Jm~%<;C0Tl;+VUSFb{CEm7b@c*G5Gb-YYFovN1IO)x>oFI!w8nc{E6)X zk_N%n-cG~59@K?zjD$O4|F)|7ezb>SiLZqu4ThCv@z;iZD1}85yG11pfnEJk;-Iry zSzPR)V5gd44ee{cd3s6NFWQh@``xHZi9HZX(A{ zZ)BI3{ixjDYjSi$dwiF7QtzW=KL+gB_u@@-vF|G0)l8tLY64AJrLcy)*aSL8Qnj+C5UYf?(Q~x133RNOvuB^TN!U1OF-g2;jejM*{yXye#lP!pi|q=xMeq0Q)WXiokx$y%MnBa*qZMyBL3U;8KS1 z4Q{|?>DLBs0p_GXRagg7obVc%u_^^vx|@YMrg>Nm-?^iP%;>8%wHIHWgw&Xd6988>^np#Y~r4 z>Ed-maNgO;BD)dryBRKr&4AyNehc9Dfo-X^C8QWxF16l9n@4slw0eYyx5i%o7_3MZJjgC|fJLGI$!*-NZyjm8I^jPw!YiF@}wQO`2={N6< z6T5hQEc#C0aAE8 zQv2eStax6VB{3T>dtS+Sv>vE-XG2v}?H8)rQ&uS)BrjI&2TH0|{v|}uw2hvljaB<0 zV&0J5;x_(9!EM25(|oZ#aJ%qMz&(U_0qzjq6}YGH?!di-_X6%Mybo|6;r)Oo5#Aqo zQsD!DZLTbbgMlZL{!rk)z#LhVg~K4lk;QKmY(<-oti#c2FMnpY(hRLeLGgRd$vOf% zU;aE2f4Ny!kCMdNw%c<0Y3`#n9FzDsR#LIz;}J_C{brHl#qPpkn7`hr3}-`CQyG`5 zGE!D4oFp$+87E4rR!$b8XWB;3(Z(v{R58=X|GY(wx12|VbCIrQ#{u_OhE4$9PB-_b z08cLcX}}d_u17c>Qp_A5|Mx3o?hLfDmzb~u@tN2;C#D}$I15^CoT)5hu3^Sf4dZV! z;be#@UlgwQUk>NVquHJ>sSCDbPYO%#4OBJRxJKDXS*381yjV6alvJ%;EJV+=jh>^8 zW#dvY(-#eS6^q$88`9sp`kVv&kMOy))f(ag;8KRm;S%7o^p^p*0CP-rgv%kt%NE70nZBfb(lGc)rBjEG15DrmVCuOUTtdiB3X?3gvzFl%;a#J5v1vg4qsKYmNN zUOp^yH%RKr?0HplkA6L16?l(8s>$W`%4N#JqhI;8T;43HTDet-J)>>(9BnL@w~LuR zEKhTJH8}R2lcjJi@NdfHb-=$1-v~TG_$J^#GF%R~0skre9l(D9Gp{|voseQ)`LO&~ zwE0|l7g}w6EHFLthUj>d*>X2_K2Ey_f4Nzd@0G-uT9#KL*?(`~dd%ZV&07mwfpEo7htioBry>-DG?FS%Z-W#ZDGIpmj zma^~-X!2_rdq)z!HBE?~X&XI98_U=SVm6!MUjyd@jqKNfKNNlo_#@%Bfj`bLzD*7I z6X`z${uJ0|_>UmP%y5Q(3vE6Ve2i9)CGjWN>ofBywA^B5ToY$;*D&6;4(qW9t~%H~ zXZ;KFOgvUw_)^|2Z(m93f*+eFzFwwLAMyA&vHMn%&-wjfACFQy^1m0GvymOw`ybc& zuHjsgayVbqN3C|n@{5k)GsF})fA0|-)YRMks<)Jd56j4l)!T29s+9>s><4Y5=V)W~ z_NSPaWGnwQrr@zdYkC#>44l3i*`EXV6aE6Yzwp<G3fPAg}VKRb~y9?I2Gcsaih8|LCdWV zcCzW z_%t*2r!`b^E6(o&{s((+0d7apbPM;EbD}^98wh@qoj`y90RjX+c<|s3!QF$~!QI`1 zy9c-6?(XjH4tK4oRlBEWpOcsS{_ppF_rI6PGudlZS5o!Cz!)~41@j@7}nAu8nN zlgiChs}$Pg#d32xv3jk)5c@&f=sDV0Zq}ulUO%Ky!TLaF_MNaESMfzC;5mdR1D;d3 zAMh~YsetDao)&oS441^Y1o?YDG*WDrq48@FDs&{Rw>LUFBZ{x#p<>Bh1hD^ zM$gg4BD$b7$M^hpZs<&@m2^1pR2eRZ1%RiPd?DazfSHM{VPUWV>_&F*`Rx=a^Gs|< zsb!*n%;o@pCBM;jZr6{VS8|E4R>;?Vg- z*Rx9je=58*@Mpry0Dqq0a##WQ3&}?Ue+g{Yzbk*QS?re!QzVr&{=`h`d;w*A%PQ))r!` zX&XI98;kS0(j4FXSPeSUX&$Tr+?L^TSO>VjDX^wA}Yz!U$it(nv{uSfR zf&DASTLSx6jJE~;7JCKv@$G@X1GZVR1K0p|FFQC(K974!_Mu_BjvP0NcV%T<3-ZH> z?YN`hwcbEvfF0j{Lq15{|K@qu<@_7sK$6BclJWPa}?_R`}(oo(W-Yg`1-nR88NI-?_7m?=N9+4&m-PF zSOyIj?;}31c$@fq;_c$|i+6}GARbEQZ$al};|n>j8eiCXcjN8O`xsxud7JS?owplb zOuXEI?@VI`EG}N{;D=33XNjE5$9>71%ww@sPUi6#k&}5$md?pMF8{> z%jVxMng?@YTzuXyt1$}7f#t+KCzcoYeE9qNasKV9dY6GOUk6t#)H||J?@EPwR~Gm6 z=ij$yyKEiYP3>9%zHOy0V=oit>Qw{4CYKWX3N?AtkB@gR1 zJRFWTj*^EB3LZv@doFG$?rr}2`Y|{6RtwgLFOEFd#*GX0Zc?asQ*mDpHxu`@aC32A z2mf>a*zT4ra{H*=8=)?XJ>O9=#P|CQ@m-ls(5u$!F368ccxzqH7Um!CzwtF5Tu1R> zZ(6H-udEU#kc>TQt=9QIT9{C>-kHq&O(a>LEGJvSerlC@I?bA zQt5{~+FI7a{ZU%U-rKVxUiabe=rwt)!ec*q>_DmYl<#I3;&Wz0e0E`oPdyCH(LlWa zGa0XOM`mqc%PQeZ)L;jD&rexY!dH@6lm=vaUrT0DGTAqh_0A$v4F|z@dVB$mKC1aZ zl(sADwp7;mjND4xv%Tx`I3o{MZCiL&R1bl~?sxckE1vmJo3QjyoV-FiOtyAUa=4h^ z@3diNyEgli-evS$(C%|mtx`BjUhFR8NU?hDXd&KZ&^CIGHg=bBtTfZ7Qt7?;5zx66 zQRUaOjsdswY6t@3@Ii#L4yQ^VQ7Q z;&T$DJUl*qfunYek7=JGZQgO)(;3b^ehQAC-x+|H<{GQvw1yR*9-l5|&rA3`*zM`7 z*}f9aOzh7R<9(w&e{=h0+j2N3u{~Fe&yt(9OCkLf-g(k)llJb&9ght}h1}_{+)1_Y zsS|mz+_^vupHvZIJ7^m{M;ptXOQbozC&wp4XWi`cL8Wjiu>Xyu0SKY?| zUnc$Yfw$pIL*88sylsX{;Zor3fSGqa!)0It*zN4#ljE&X=FcN8N2!g*o`_QZlRzxF z0w;IdEAh(1vgs-@&%Hfh>Dtsv=jP0cZ>m)a*UF2<_ZqQ!?K&aGm$uP!w6XZ!AkFd3 z&8wlat73FL@NSCHSm50iqn2?g1OXre_D^v_~#Z_oCFJLVO?2=J(3)hm;4SVsUZ_gPTgY)--!8 z{uShh<LW3D{J2qVr^>Q-WXZ0 z5u(D#4%f)0TKF4&@?seA20G}!OW58z#KM8zxhVi!nfzOfrdEj$_ZH0LOYyi8R9b92fLz%BIFQU{|80s(v z9$%Kcgp(`G%XsBs@qIe=E&naP8W&dL*94;wXHtj}>>6eR4ZW38l94@_RO1pLu$Y zv$TwpJ8uQAJSwC@J6iqfu*rJI2WraP-?N_dd-u%`MjdWlsFlysqo6fVl}lG^D3^t z?x!ms(DzX3}7+#-6z5NhcaLL2BXyGbDP#Y>iT?U>5Moz zpJ&1=4~zTEVtze%0%GRc)JkKvnPQe|mBOs@VlkUVtX`Wv0L4gotZi%mHU1wKB*r7#EZ3BZg~OPCWZ#)(Mq-OuCKgUwB{45*A@_BJ7^m{M;nXQLefm5 z#pqVh3X9gfU?(YB3j&|4Xe|tUN+VkBU}>~Y%tdPvlzLQ%7sbh_e6l)w>rq(@QXal1 z^aYOE#jC_6q|JL0`aTIUbZvS`W4McAm}-^62zjv>E+tm4EiFXPw2hvljm2X5$}s;8SC*`ZlhGZC zS00vgD~Wk@Pe#04n_6kS_Ex-7tx{N3UMya#h}CPW2{B%@jh>^8#cK^|ra71HxGO`) zzOz~ms{@~{7_A9>j$+gj)&h$$;tV}27o)XN+Pni$-!qXK>)_-rvMyeESgh7-Fw;H- zv2tx{rLj6lu}ZZ{VU)aBtTqs<*ESSlJ7^m{M;nXP#?nk<#n@KR3Y(wngN@1JQw|#e zpQl)D0(^cWR-1yQu{t-4)x>!IG)3+wG8#XUu{jLvapz`0wk4c~FmMaa2a%;);^daF z6<&E*5Vsa%!bSV+QW_E;guMN>iT!pB<{n+bO~%rnEgGF$a-+9$*s)>H8^WE$e97hF z619teV12Z-c?)R0aYN>EYKurZ;~wDBpJ~pS*}Sk zvPrTkB+a8#{1x1T6sa{E_AXhsNiwQQvPqL<3rK8ir^M9gYHW{4#`Z|DZD7k5)6&Nl zqQZ1NT+=nxDurX@#ir}gV)fdwLi9}A=sDWhbUj|0YiB>^u!XV0P4704-k~YFJ@B2v zI{@D$yfg6K!n**E6W$g09^u`9?-kx1_&(u1fbSRH6Ziq)y?`GS-W&KK;eCJ~7Ty>5 z5#jxS9~JHZeoT0O;Kzjz0DeOFK;S2Z4+efp_z>Wyg%1UOM))w`XN3<3eopu(VEg0V z-c?C z!$paYiyO?pWaak$+Id@A!leyMuIHDD`3(ox^Vss@2wx#>uKt!8oc$b;qTN+VEmw>S zi&)%c+*{mbToQK~mvEP9?o}zIUsSzQb+k8n<&wplByk6Fo#i^MqxiA@dsRo=o!p+g zlf}{{aR+h$(!p ziPdXQ2(i_)jh>^8trbs6bJ1+CIh5hR0+_B97eePXtq+#~zbo9lw^Y~Nz;6qW1Aa&N z9^iL{?*o2M_3rnBF$u;wNyz;Q@d_jzBW-7r#l4a*y7-zSqUAo(xrwmH9 zO5qjxwG4V$tX_Lnh#5rN=sDV02E8uL@!hz-2%XOrt(Snm$Z$El2K=SuZvcMT3#$FUy0Rg-w3fC zw2hvljYZ`VUan28G+s9=Ua1!Tx}CgOynYj_*ZvSa`w1j2CUA=V)W`>LtxIUg=)f z3Y|X`ub#kvDqg*T|7yf*0^8#cOhDrt!++i&j{E^@UDpG_Gp# z(WJ?M%NZ_(e!vxATcxG|OXJ1QmilTwB}(l+fUyb#vD@GaLDctHQDZ8ce8e_2UU^uo zrV(RqS z%+cu8jJ zHrD^4(wsH>2*BsdWtAsasO2ylbXt^ovjev(^QvJEu-LcHV9ie>d*9|nDO=DNPKk%% z{^qC@*YL&v0@?sHMLabg}N{F6m8$CxG zi_p^2OjkWdH14X4gYBE`4COEaxVNIR4DbYsN=sN4EJlUbX1#JzSq`Ofm$(eQxLsSVpZV#;mkw5gX+`S`_W@leLN6$_?hv1DO4t*NML+*wE(FlGVg~ zjA)s!DZQ>-L)v^=(%hdoqSl|aq|Ij}siaNz7a~4h8$^YS_(mC#YT*Z3<<~M|U9oy? zeId4tw$XF6v5Xic&GCKsZX|U2DGOEso&a0bUu&#XWQb z;3;LhA@EedT%~)4jlg0y@xyl$qRdyajcJFTa72hV!O8odKh|KRJffRI%3~nT&a~%V zH7i#9H+NP6(%Jr-#x~U|h3(|U#&%n= zdTo0lwwkulbF{Is-BFt9my4MTakg&;=6`K&3*cehY^U7{cp8n>Ho((nxEyu>o=)IMP=3_V-rM4pQsbW_v0=0I*$rWK&yz;P^?j|-2688L9cyVoN zr7GSWNd2tJn4tq77}M=V)Uw-A9_~3d%8vG2I<(Ko+BN*c-T>;ZoQa zcp$J{H||F*Ha$DIg7!z5$EyRSYz=dscz>L{yG_@-10dzWby81Ufp{m=Y+DWoN!ucN zaDy?%`Jcwgua~jzN;tG(!S(Vmu^MVLd$yIfo!4IpMM)45fNrVpvt_dFnJZXmUt_<*G zlAi!PIk3%=6T#xBbCyhmG9UGmP-^=f`{`py>B%^=cV+O(!^ZGbF^+$;c8sBEpWd)_ zdzaK?e>rOP+E`0EtNLmTQms-rTYhZ}&JwHF&JoI52HWU4+SnM3k>>dB15Sg^^or>j zz%vM+2|PH%&FPx{Kwk7!#CmnXJYG?>q?d^?)!u7s-^ z7M!0~i`5#fagUsF)-!IFY|Xc5)#`Xl<4ruTWe=OZw}$Hy@7Ig*iYDGSRH|m*xsPfX zoA|g@kI?kinBFgHx?ixLsZ>gKrb7*X|HvJ7^m{ zM;puFyQFzQb|=>xS1>q|J30JG2j~n@c3ufQi|{qTvkG4eJe%+h!1i?(T#o<`mHbxV z*)v=YcLL8L`Q5;C0yE=#g>hgU2RnM9MKhz!GyWcwdUT2J#fh!I5iiT%`yl1P{7ofD zn#}$x#M|wunXVYqD&DD9DLf><7Vihe>a~Z3*fQEi&(X%>{irm@cdvIpbmmfQ9ssuM z)^d0Rcy7rb1D;1QYYmTs#hCG4Z&)s7PoUIeM*JjBuE}E=3>+4rry%8#Uz79N=@)sP zk+#S4YQ)pE=_QTlK*clFDuw6e#p3y#SiSaw5L->#=sDV0JYSOL_~Q9Abk5w#t`DCD zwl5=;!;8T4DxNO`&)10OD`06nhv(w?DoWczsoX7FgRVu-sk>vlQvp{Cz0qS4!8wlShM5NONScawOHldn@u{Ir6bsz4oaP+d{EIZlHy6K!j{nJ$?}7ct!hZ(dO!52`cyqyg$o`2}9v0cZ#28t#`!V-kZ{Du7X=Wz7a)agPR&lOJ`%0)bEI7AX#A!G*?@v3p|jje5Y zpUrLT7A8piO(@m|fAQ|DxCZ6p)F-i@SZrWo|7hX8hrInHiG5AXpN~9&tZ;3(EX;+u zH5XE?QkYy`Y%WYDRH4&w#w69kpX-ws8XHHdyQU$Cbi zAIsRbYM4FoF^AZ2wkGfzh(7++dJ+9~3&RqBbBW<5F01_=cyn!t3c0a}awF9$h2ipI zxiODey*959`$gO6Ioeom%rDLK8iBbKb7K~;-IWhRf%g!e6L?SIxqF^ z?2SAuS}Q`zgCk*cf*!MZm3yU(XS2U%9l+twOZZCLZVV>Pjw zYW@l%>Dmw#MshWcWU5sPYs!m_nR3bdZO zq%HBx9|-I0o-)R;C2W^?-d=1V{CMU^?c$fSc9gb#QaXFK&z-5TJ4O3S*g2_fv>2~6 z;?*bPk-t*O+wYp#?pqlD<0w$XF6v5`DRn(6&EM?PM&90qotB6m3O z`57*Uqk%7w{8-=%ff>=(a2!~SDDSt&pv)tBJWAut;yRj-B1=!e$vyH!yz;P^og}t6 zB=NaB9A`6gG-kMuMD$S&rzAd372`J!%tzjyxHBK8CqB*)Tdq^>ICj?Rv!p#z+Et8) zw-2JiNN=u@PPIzmTzRpPK1Zxx8zaP4(>8jJHa61dOEbMXWoE>YJ{jy{1c7t*G~i2w z&jh|y_-x?IGF%Sl0befp1;AGT+tulXU@-%Db$SuXJOeI5sbv6ng3r+Idk4kHv-Dz| z%z#Vq%EMxLsTg-t+lh;JM9~)SDJ8a7G?;sHNe$jC7x{|CUS4c;uM?}+ZV;kp+D6aO#zyx>X{Mu_zLR?ybe_>@ zT?zcG@KwOi3118Re1^+mEbt4G-vs<3u#N7`VCm>yi83GETTp7x#Xejn#*ormaq=$Y zHoWq%QN3M^qw2FSue}H-8V=LGvteu6_YJ}iF+xV)JkmXIUqw9CDur>X5m?Msf6^8jm5Ll9N(S6qtJOnF@FsBP2nei z-^wul{2%b!l0OIh4lu{1TX-HUjtlScUPqaa%L^#A6~wP>9~y*lz;^FrK#do1^7D}| z;gyF){ADp4175GXkIwBY;nl?cwFa}=9vp;O3mI$Uk&eNU8iQ1;6yB7!jlmmY_1arP z><4Y5=V)VN@QyUcHy>Vs&c}-H>%gC6xE$UF{#5dJfj^9~>2YG| z*EqSmeuGyY7N>8;cn3%AA?S^3Q!9=QA+ z0eRer|HR4tEB(Xne?iK_iQNQZy#KY9yQg7I65hwAI`Iz4 zt=geu?VhcR`X@>1uZb<5`Q~~$C$fz(?!4cXFj-Z2U~}xJ|>}`?W(u;@L5}A@O;&dqd(gX77f?bvhan zuj`8n#@0JD)e@Fn3}*kJxdEZC7J3Z(=*2*h!6E zc*IU?NW5QXHA%)aNiKvW_Pz7RM7QsCW$`vLDRJQeUB!qWoZjkIRlrUTwn^8Ubk z2@eF`TX+WGeS`-C?<+hb@E!6qGw_|lLxA^_&Md$k!m|SJFFYIY0m4Ip4-}pq_#ojq zfDaa)3-}P>;lPIq&kuZ<@B+Yx3oi(Kgz!SZM+z?te3bB_z(;4e9F_z=M)DEB#{%>E zaBx@}Ebj2!xxYt0{rYejlrm%HMaB>>i?cZwFH|n3TBWeOv@I8x6RX!&5Ta+=M$gg4 za&e?I)9<)3cm0`5Ijjhs>D9NDfM-zOs$pfY*f)O1Z4k<;VNzVZ^l!R)X|ao!RbgZo zFRNszR4#=DbDIFAtK;Nl%o=#*VaxWKVpl?9o5u`Y*sYz|ts{1A!*1a&?AA-{))yPw zu-jMz!3(H-J4YpU8;acmEnB3x$aY?5Ic%KRZX$L^qt4-7v~{z@Zga75Nu7&zYFiFl zCbnCN-JjSl(S_|ciS4#x4=1)Gy0G0ovE4!JaoDD}1Iu=5UkN)U_B)F`oz%TTr?%y= zOJcjL*z<|)ie1?5p4jdo_A+ca#nNmjZku~a`*mpBEjYI;W(3dt_8Bv(8um$Q+*j=F zE^16S+YV{J4{ggo);KY0>#Vg0BsCo<_Hm~*6@M4~U}=92ZJUuRcN)P`I5er{FtM+@ zs3pC9IYQdsccGnLVjd;!pS#e$st*cq*qU;Tw10=BIXdy8z_gE(HkPK`%5a4x%4+maP_((jEc{+r21efVZ1k z>D;M^gts`Uc!h@>_ws12Y$TgxkPkF1&`CD=70^xE-ZFp2TJ|s4@(OQ=bgQPh&rI2Rtqp}~~sdmgTi^Sv7UZ7L$V)i~M?RIG|haB^sKvc-y zTa~@3Rw+CqFP6Pei`8q-3bBv0jh>^8W$*LSyg19=)h1)z#q7NcIz5$vxKya*OEe^s=) z2g*G2UqY#mF7eAan;-bT0x6FxadxJiKF)eg+ShiWoqj3m4QY>swq-8YW1jg(P_b?J zn~busTzXrKcSk1i`tN`wuJF7%Zf<)yyq9=;Uu+y~JJas90Sa(fO&?18{!GG0uio~~ zYpaBhliEHJd7NtH?#NXj;&fxDM<&n?eymtDQ#gEd?XK-FSy|(^Y+RR|K zWPQZiwOMC6iuY+0Q!V_x8hNo%{8bEp<3@;{X&XI98ym$xrJ24doQ~oT(3wP0{t0+W z;a`BK%5XXS0X((je*sSe%#pxXMmNuo1m6^%0%blDC6xL|5SMW_k3?e+muQ=RTpQ~xhwh1O4>2Dl&eW(~3h5fwOWIsjI&0T1hzk#E*96jz zD-K6D|KuRnR1Om*?dl^ouHnrkTva-&d+wy}No4P9NZPNMeb&-RrTw^k^9hu<4WdG> zKBQbtweX{8@?yCvSbl9q_8+&Q)L18IWp)+>0UHx?f zzD2kv@Xf-#fo~O_5O`YU?Zm*-3HJqV6RrXKozi5$12TCzObJ|<&eXsIftm9YglVXi zHIM(zxhg(1j55#pX;B*YnEdlGmQ06}*O6^_)SFY zWeb=|#LMDr&ZOla<-ttqOnZ`KZ&*Rv%reV6mv|-}h5mYN^qXeVyNYD0RSGN1uSIet zv3hM4A-0UR(Q~x1NUkQ$@nzET(D7@P6@hDt>PX;8GmM{g1D;Is)qy7mwriC&z+$wS zNqte~>-L%`_4pC5g_F@vuLIYHlt-MmF7bJLB6{ie)J)^|iQ<=PmBRY+Yw=r8tX|td zh%KXS^c-z0ej7?N{qR}3f35?a;}x5AfltUVzOVy)qU0L^p9IX9wT6wsV$AsAv*S?a zG1~;C9y8)iaW=^LtRo|*%Pq5fGu66CXzU_rl&m`i#aWa$ACj}{t-b_t^L9W~$jIL{BB>VMu~PeNL=F+F*A5e+XWB;3 z(Z)vP2x+E2JCuIVV_)bjt`X?~_NV##11~B00l-TM9|$}`_#oh=g%1W^Cd1`$IPkKP z9|^o1FxQJ-;V7^;%DpBHVKJ2XdT}&L?b?_hjp2v1eau;M3{GAfAB$HWHXg@`#nr=ywVpZ%GM z{aIqX<4fPu<-Kj^ZK#HG5+CP^@jlRE>5|7GVdSsID0t){D&%cNAFfQbO5pu|E>;&L5g---NOZXJvvxQFuK1cWr;B$q~1|B0k z2KYST^MKFKa5-EAe1YVb0AC1f_j;Ft#eC+y-svdwe7+2&?Cn^@k@#|)&2j9ZIHp>q zaHX^@j#r4)YgY-;Gi{^iXk&4_Mw*2cIrlN)a=02g7prgA0$-xORl{{)v2R?FFUtBh zHTs8n+Q<45|GyNaj7#UGmu02)xtp=@Y+s~h#`9#>`pJHA$EVhfIQi2JH{q3s<>}30 zT<7Cc9r|guEr(kZ+uOw265ITYiS?Gl9f|FoVgq5@TvPEw&v#3kdq-#5=`+E5q|JS$ zSv$@>i@<%-=AP56UECKRkoGWWo4vO!|L#ldH-6T1Bvc#P56gamhQ#gLA?d9C^s4wV z*)QI(cgcu`#M_88>(t|;$;Wt~l1Da^_1}*f=Iw{5uu@H?8J235!n5*XGwd0$dhIzO zdZumk9Bpidy&%mOv!_!1H(=excX)1r&RX5=snqSjS70Xay~?|QuM{2!e3kIMz|XXr z&i%mt-uZ*TS4-z1;A?~*0lrrFQQ+%@9|yi(_zB<}gr5ZV_wt_x-XfEi!}GvnrSl^2 zjlf*x`i7Ul;!4nlUS5te{6T^)=K4)2MfUS8?*nZ9sD0`5L4=IHT=z zJPTt)JF|O3nwH0JinYP6Gwt+GPrWVe{QS+gDgD8(ccq=5zj^KS+Vg#B`}}UI1GG;5nIV z4Ji+1NoU&Whjq{IC(&DYLjT?sX{#o95cnD3x(BVWBAK!tprNBNp+ z;XN98v3#9e4Dag*F+#MBo}-QB>r~Pl-ws-Z&N!_(t-$vPcLTmxxI6HD!aacR7w!f8 zfN*c%2ZbjD_FZry;D;pd1N^Y?#K4aT_XYM(@J#~zsN|CYuasfDCj|VMBh1d?-M$gg4=HP!5M&k4$cVd zb8seLpMyhyeGbk7>~nBdV4s7t0s9;r3hZ-mc3_`_!+>oLmcrb?>uU}U2i_pV<*)$o zGmk6?Qw2hvljm^sSrJ4SORC*=176C!r9HS)-^C9nZ7c0K`MhnM ze4Vu|opL+KepnaU>6F_^+HuNx+~Sn;`rF~rE-Jt4WXi?`k1Hs~i8jJHa2cYOSABHckaO`^Lkg!L8Ay%$Ut@MrSP2@AxDuq+z#bR}`SiN?t5Ixg2dX6?0tJ9^Keyl6~ z)s>T=^L7@KaySk69mVGi;CB_DmT)Fmj1NE7^CGlS3WpT!j_W$?vr-s=#L0~w})foN&@;360{ro`v zX3mj+DDLC-k+_fB$KpP2pNRXoeJbwb_L;bk+kanu?02`U-(%G8_tBQ@+A5r|k)z9j zI0xDH9d}N1cqeg>#m?d$i_zj9i(SM$7XLYa>`P15m-Ez@9Z;9`<)%ho?roqKbG`aP zBj6+arMUO%D{=4D*W%u*Z^XS<|2coLSLdr&pQEmJjmCGX*W3BMxVN+Ga{4W2(Yio> zzop-bR;q&Ep9+3|7We-CBJL~8ui{))nKi$Ow~7BQ-Y))!c!&6(;-RFK%6Zv%*i~6r zHC}Sw-FVq~ALAA0ZN{t4+l{w~mpeiS+uJH$?ZBgGwW(W9=JD;GlX)z96a@zmhs{CzCOkTdVV| zOTF_YvnwgHy+E@371D*0*%gvqnO!8=)R{lCy;w5lytm~N$p+?Rmr6D`C%a6tA(`x_ zCE32qB^#Q_-dl{aiSW0Cc`T60`1c7bVM584%lVsEF&LR$!A%%0QLN0G|Br$9RpBSb z?eO)zG`9Z;$t-TXj;MqqCF`E~u7t~)eD}qO^wth_DN3vVTceYXM1FL9B=Xm}J`#4F zn~p?&6n!M}*SS6t`BC(duu){|<4D*jrXyjala54tCnK?V7Oe@w6;08a1koB1Hpz{| zJ=-;p#J!T)NLWAblgwh&HyfS%C9@cr-UE{L$=c8ou4-yS4Q;4t#I8i?nq}KBCxe_v zwIl8qljmf<9`(z~*h20#Q{-f9A!SqMWWHZam6I{*)SEgdV>Bt7CMWBVY}%a6_tfd~ zGVQBvd71Xo{&|_!r~!Fdo7G#-%i2vgFfZ#c**~$u7sK*#=`>bczbDGp@2i!Clfve0 z?IY96-uM3*#68ajyZ>M@pHbZNYbJ5et(nC=uZDyj&@#gt^%Ap^NCL&KEL>c;tPmRB)*`y$8jO?iB-O^ zcwg~$@kzuN5$6ib`WF?SRD3b<$;1~IpIm$iajw?1Us8Mu@ukG46dxfzmH5))T-j;A zjQBL-%Zg7czMS}U;>(MB-mD|weev1FHxQpge3bZ{ z;v0$&6W>UDF7b`U=N8{Yd>-*l#fOIvHA7~V#8-yd#C>HLD(-i#vy1y~G>5o9o0wDF zpH2KT1F_BH_-6)M#{V+|Egyz!M*i2$zn1E?*b%uu4$rO&uG9WF3udT2<@#YGJVVwM z!seQ{z7A|5?(4vo;y&-U68D{SYcKCW|JrP-eO}1@b)?u>$nY!bZ!}W^HW@wv5 zrnIr634lf^M%%0H9-|$^Jw`iv-!!&=U!QHUyYCy+mhIqcaPHn^)AcNG0(|>ju-}dH zBe5-bI(MUNT@$|$n?2FAK26c+)8Gag)?-d2#%|)CKf8Sv%J4qd4D0sVvN?(eKmhQ@Anh;JnsuZM&_<3SJ$&^uD^agIk7(9!SQdc@+z+qw(Vy5#~g6I`SmUc z{vthA%4)bnb(kjq?*mVL^e#yHT;J-;{_0=2L}SH#YOUI{{zcWUTIRbF?rQRVF|7J2 z&o^%5c}D}C)Ib*iwQIk*Om%tgUG7{@sJkv_EbX1|yVaIUVQcg3ob{J)ukOo=`|7@&xUUe)i~H)eg1E2lD~kK`&41!$bLd~ki&;5Iw)&4#RxW^8 zdbVGw?Do97O5F3V>++cG_sH)Ruzg!Q$VwV7_q(#V`&~uc^LbTq&*#;|J)c(>_k3PM z-1B)&anI+q#66$a7WaH!N8IyyU2)In^~61&*BAGE-ay>*`Tw2%#vS8cjr&N%VvL>= zU!(lt>dk%O+CqL^SIDpH#XS#h5cfP7EADx4qqyh6P2!#hH;a27+#>FIaI3iI!ENH6 z2e*rR9^4`Bd2pw==fPd#o(Fe}`?@wx+~?^%;=ZokEAH#sed7MU&Hdv3zRd&T{=UtF z;{Me5A#s1-=3#Mv-{ui!z2=AZGjb@u=NnDO|}o*r+Ird#`|aa_j&uIxUb(&iTnEfw7AdHXT*KpJuB{UdrrJf>%#Nm?cy(pcZk0z?pI+iIoBP) z%g*&Vy;q#;D(zM0ZMF`*=Dgkb>*Cdpct`L?PUii5Gbi)DzLk@Cf8Wl@ywC6CWZv(8 z;*7uan~TeTKF-YZNwYk^UwQsG>htTJ_f&UKp1m*bdERw-yxw_0e&5ac{jlKoqk`YA z%cI{1<@W>F+Fir?_>tiex}y3-9;+RH;jk?Jv{3731^&6X_wEaEkNTJ5zWaV9?wS6z z_(v71?;G)t#lIErGlP}?pWQ}A+McgJq)2~^_77KlzgJ&8Gky@yuMj_WBKs-IT0G7_ zM;ZP?k;UehD4Wz}zeZV`%YKV8+)bM8|Cw!LJiBKz?P109JG9+r+8^EzebV|*@rTu? zuFK<$ctn1GhwW(^r?8vt$R4kfxW}q2?m1i$_m#RT?yGc*xUbNy;_Yf@H}MYf?&7{P z^$^eJNza_j+tn*4^S1rp(HD+a?<@}<)p-4d@#>3bLOWup_}6NA99Mc+-?th7R{WIk zMoUq4xbCVLpVsQ*@Ky=_hsSzj=Wnf=-VxF}3+s?SYdTW03tOV>D9J9($&Qxn%ACyK zGrhKj&#AhHC)AIu;n{zO!D?)at;&y~bd;VJ9V>6XY8)r-*?GLUXTjgsXH@N--Y3^P^K4<-e>az&iXQiK%j5ENa^^|11&vDt)l5u9ZtcGV)JnSi3Yk0aTGLOT` zpRzrL(yl*iY~${+wicS~zNCfL>P=L$wa{euCoMGD1Cr%GYy6;O`Og|ZBw7Bm#t%!z zx$ixGM6!W7*`tyT&dDB=Y)DS#@3Rlho=Hv+o^6WOy|5al-TfJqT1MT1ecsT6K>1H1 zr(=BCAkK&hd?m?hzBH3fD4C6M`f2F=7*8ZU|0MGBO)cyV4gVza3usOLS@8SnGqc^} z^?_vh@%&J-e8znwnLi7Dv8m?wpwTDk{lsdm)wctlC*aT4NM`l@mVHwH`L!)etv-`Y zB0b9iv#m)sI2)gq@N!cd`aold#^NQE+UN7_$@G9Ntrlxd8sq$&@eKDT)2}wwGAU~D zIrBbZ+@aNEaaw|X9zF?UpNvVz%Er%Dp1HY2;qXt! zyxBBXb3voKJidWa^F0>64L#C8uQ$-AK$bc7oq(lPi`C4DPzlR4YUW%r*|L)PH#^>L zYRw2}_%}P=YP9CJM$N7GZb+L(ZGfWgqZB!#R?0^E9o5jk5w*VXU_EOC%Fq6{@U0y? z*y8%M?8OF2FZyRa8`bDVTqS%?`0RhLsb}lMs*h@Z7p3j$#lS)@28nyFbzRP0+WRr@ ztG0Thmvf?T_F1TTmiAux>lSE9jt!(kIHP!U?lAf)0Cfi%G{QkS)R%Y8T zi*alCSgrC1<1ebiYHGFcBa~WOw?SJC?FKYT88D0D=6O7;xM#p@;vV`qXRZ8o1j73aZ;lKDFFSyPXXhlXd>r;Q$uY1DE<13l0{FE-Ez z4Ky9zQ}wwqdm%D&6e81gd7K-ctEEF5Js*J@Y!tR`pwSJqPXis&KqmvWX|#qF+7vnK zv{mN|)j4OQ&Wqr|$9wLAhk3+(yoZbXc>jIl8@DN%sPJNiK(1Q63Em)w? zf(6BWrY|J!Gksz4HmwBzb^h7I)@)_}NMvUT&_rqiu=r3Oxz>AxVZ1* z|GqujW!D#9t6lBz-L7^msd_wKONo2Dx-O?*TjRfx-z8w1|5jzX-VMMKR0#{{o1M&{ z)~c;{3rgmD?|1SS*R1)W(WlYorPW4{AFwrZ*dN`kMx79p&r66b&>N&?vQd#X^fmihCBVB<}O| z@9VS2wm$!?Rk9h=?l zwuZl&#%O0)wP|Gb#mLwg9oIl-0tG#JTu0IL(OFmAM`t~8AC2|JeOK5(+*i3#;=aml zDBiBsc_Z--@&CE{IhyvQH)w>`M%(y_e;<+bImK@SIYaKyh}dXOIz44~CL{OBAj?5#}puw=tCSz9K1M6w04tK&YQ+<2~F z_2AdVpwXVpmNdQ=kH_T4;%lhJvV44>lFXm=Rh!!NC^Y)%4_{m~ zG5#zEPX5YQ3p9D!Q4X!b{FSd>p_^DXx2n{$Kb-;N?CCH)jKog?vZP0*i}hVL^iT=C z#PAzu_(whSH9>|-jl)^;WD{F+GQXjE=n>*L+o6}6&R`glRX{NQu z-%+z(OqSDJWPI%m{iJz5_KDUi<5UT|;10kJX0XZrYBdR0ApZDfci6oJ8F6pmO)yJ| zCkEa$hc^?R1oF*ucnjf4A>T5Gw-TNl@~wrZ0Nw_echSAWlwj$xG0Oa>Y^OpgV?H(J z9r4uCPJd@^83d(Ss}!b{c5_)d9NEWewO_wm8(Gw>RSNy(VJ2olbsDisb-D&>6ROwz zDWByUTWh&C5Qx4x#*_}qETV7Au<0|YX;Q0e&A~ZMwwsz3m!i*^a++!F#S9xF&3<7n zy#In<8}cFPaNs4*LkBKqFi!Z>ddRh)YvGXPQ#I7#Z##|m48Ysx@D9Q=LcU`T?<71k zAaa<^k{iA zUnVt8YIUu-Ku(jbrKa_>=yRc*Ci5oxj1jSwsXeF3%`WieHap=PfzLM677Fb>pjj&nII)6itAmKA$F%l1!~ zWCmKcSHe6f+nsrZ6?1;zJ#u(Y;RPYzD~IwZ?(h-~hTlxC&6QUk5hK&v*;>J7A}P`$R65PQVDiE+#KhY2+pJH!qdcF_T$ST!7sqhlT&*4l%gPu@>q$pWlUFNU`#d10nf5vU zp(gWrP)>6y;I4fhlG7~u^y@|Qd6+btubsN1)jXR^_{+*XS;BU-0%u3ZfmnkN!pRaw zGL{?+=^;3$#%FRv^@Anj-qbCu4b4MQ#(iO3V7sy}hYf-M>_NHVzcO438$-@3E9w*T zii&ts;04iL;?02%lYC3y!*lou;jJO(N&nm8b$;1y2YjS-wg)~chmX$TV=`P0J45H# z4C9yEfsd2U?!d?A@Cm|uLhk$H-oUm$mcu^4CrXFyKS_8$;FE>-2R=oZ{!bM?5co9V zgMm-a$gM0go;TTBMz5M`a=>5~`u_)y#HyCRY@o_kL#I>I5VLK!|n>EYf z1X(nf#k&*Rk+0G{S6WvooGcG^&vm?5rFvomog`GRog!pAB3o=b;%Pu^0arvyPtWwC z?`(dS&d8*uNv*Cm&&p}C-PE+$6n&nP(@bm6N0B@In4BiBZo8~KoS)O=nh-UMJ}=B^ zdhKwH>)<#t?0c_pu{61wv_m7VCe-KQCC2c7hu`sio;_V?ho};EPo6HAY!Au!e5rf2 z8cs!B=W1@82|Ol;&l5fy^7C`}0^xHZzc7a{5+7qU6S*4msI3*>W#(i=0qQgGikXKu=* zrb(@?HE+pjvfb3QxD9OvZjN&~JlN3W>hMsm23oKN9=xO7bOpm~ORw-q zPSc}jnrTdWg~z-GJb%Y^0^ZYL3~i3yfU+wzKW+xTGKa4cz7_JTbNCwJ+abR;hp!X9 z6LO!U83yN`csE{skG==k?_uu)_IdmOu+L*+pU1>Lj~@o+y)At{3Vglr05I5L0aYF%Nxnt$aq zJr0(YF_JbqrL8Onn`cwHOH@K7r^)NbuG`s?(=3joUz=O)-Ex}k%3rppd5`Lm)AUR? z&2(&fg(_uU@?`+fJvz<%HTDe$fGPkfv3=fGRzr2jAR>i6AW0sDRT*T8w~`$Rsv`ok7jM* zm7|q53Nr9mR%%|j9vR|_%kQ?eLx=Ce^XLt3*D(Fil1#5UB@owh?u3+1r8efTGAdze zNog}vSbIgYnHJJ$6W{wXt#){{I;g`s+N9q<^A`29U9L1;CPl`V1_))=joJpvy3-bx z2gxS8wn7+Lr`1!~8Ot+BlYjZHwK@e@CEVJW6!r;)X&~i%;<{D`zKzNhLffnblVfGd0!s zcvhc9d}fqpkwAsSLvS*;@}pV`v&cuYCZ2&~jCpYHErr>nY1i#9x0`o*j^0aQc4?W- z9Ab7y!kqDw^=$$l(Y6wXNxQi$UL_UF*go%3b6ISUJ*SvUHB_o|H_$vn_1f@U{b|2q z9d;cuUzeI`)bROTX`0>mqMeUiB`loSc^uh8t`ae7#g;AFu;bM;N2xecj2NHJE#A=N z74i~dtbx}{tbs?f=2AJkO4;k9oyW}V(lINR`E{LLpD!byy~46WgYm?Gvu#%Jr;*jf zLxGi(E-Zm2llI%1%aQF?LxqxVhvk4@&EX%R<5znBxwT-jusrH%EMVElJ%w8J z{j2H@fm)Uy3yP5G;o*3NleDDhlqLwVg!G|hWabA4&ruCNMN^RBQ4 zq`oVx1N^#jVLjkCgf{?w6WDfzQDEuu8p;NS=dt%N16M-%+mLuxyaQ}U+#%kTEWbm% zCt3cU;C;#L^ONmxQwbkPW}lxl*@u$Z=TlAgk!1GyRFi!ynSDOhWS>aZmhDU&w@Ua_ zGV61%uwhf5--5kxj*@$+f9#&CR80`%OD^ z{iN-z)8}m~VM}QjuaWwo4VLd)L&NfOTOj&izEirLY}0(-UQ%lE$|!2aOg4Wkp%$-) zhYf@T2#l=5EroeBTDFIp24H)bo8b z@aGsuX6>%PeigJkaJ&lI11vp0gN?o4H&b97ZS401VsFw>DTTdcUo4|fk9Koe%o*G1 zx007ib?*k+N2p%gH&;h7_wrXgmCzwgThH>D*pBvem5G&bV6KK#GxoxK9-Pxm+fvj# zw9yvs?VLNs`GY1Qcgx}Mh9>v+BXTwP{OMftC}~cXeO{jJ{`*&~Uuq5Ddc+Lb48A(F zLlfH$T?$(Of2AxU{#uwi-(H;uyn8e0%iVPXO5x$F2cVbKi>=dF2L4v z&g9}+B zY1#UHnwY)Q;CBH2$~sqspJ-nVXEf|R)2ZF8Sq^7OvslK66qeg7LG?V|IS|}Tq#X^dd|`J3`pBj4p%oc`OeBU3Cm|&+OneE^_{c~ozB*{d=0(A z*qkQUIQr$m)iBk(DW}P~O3lt@MWuX8PSe|IKI3k~QRx+Kljd2vYdHzr?^;d)_PdtT zfqhLR_Pdrb!1rjqI}i9Lty32O`&xDp@XwN80{n~cWx&1;($?=_t^od3I#&Vv8hS18 zZ#i3EAFqSl*HHTLb@m3}-=%*eu&kPcSGZTmt`KRFujhX7;>ukK56GrjvpCBiYIx_j zki2baFG}GNX<1%B+F;&$Ux!n>a(KL<$@%bv7+b|TM(xhq|CBU&4Sp=J-*dL3uXYXo z45Sv3=YZ&u*Wi>skCTV5^R`01ASpG^!wMBOeOnlJh)s z;>>TZ2o@L z?_u-zt9}ogzhCVkfBE}Wzpu6X)ppcY34UKYFuR8}ncvqA&dGYp-;kWFmt^*RO0(@P znSGzqWD`hc-={R$gpw_g`D6YS@0}+PZ$p|M6=4^kgLd5S%+vk8?m))W@ zD%HY!e$r-U*K6;I)oULJ&7D0DKOU?S`lzkg2^#NBPAnP6hR?-6gl1pJn01x#5m-5C z`a~$JWzUmlMw!oTK2PF&XFV<(+J&q`@7+w2YYpF}s)_r%Qj?1NdpDDb`+GP4zI}Y} z=3}&%#~wIGs9pV3Pqic9*G}ynvneF|Yd_=T*Rgl67>7^f{{mqCni2asW%M6HhxwbT zA;ZtBs*ZoHXZ3LH{8aVq1w0B@EUag0`Q&JmPb2Q}omSlAJDs@4w@sW+sA%6`+`r#H zK-|CIUl;dZLmw#4yGPm&68B$2pI+R54Sfc2|26c%;#^5+Kcl$+8v0D){%hzni~Fyk z4-sc((|#6l|26bk#r@aNXA}2dLmw*66^iz=i%*LD?-nKtZHV<}iu;Gac*c~)yU}P~_ko8>Z^ee5`5!6n&+lhOAZ7=TmwS#!itRKCyete~VyoG+WsUQ1E&->9KUdrt3UFff6_eRcc|AO5C zo!EUNyVqgo<9=Yl?x2R9jnBd2`EmbNeqMv0k!trL1wV%t{2bQsV}1`8_xK+nUd{U1 zlEvpc)$=my8K-)Vl%B`uC~+U>qs4ukj}iBJjurQDK2F@n`FL?3=M%(zoKF<@aXv}h z$N6M&Uq?<6@0Indch;}()vs64uiX3bVDUILv-92QGvP1t*XN3N%Uaz%YxR$6^^0g^yGCP-^t@f?iF>=w7x#8uAYRG*Rx`gp$?t9O z>sfhy!S4+PzhfJIxvJS}^t1fjp7V2K!Ou+vKR0*c=NI{TI_Kw>f}dLpes1f;&#&^c z3;gV$c->y`b4S6?oee)WOYRc)alBjH$8nsvkK;Y!tyz4#W%2z@?cmPr<94s~eBAC6 z_i?*l+{f(!@%*^`F2A?r;`E^O-0wr;?)PEw{A%)t{2U2CzM4Ez@bhTF&tnZg7N^I> zJx))E=U0rG;By>24#Vm7 zKUeVce8Z1jO|?O{B)da_ef(Z1*uB`Wv-)2W_wjpKJU@PA`8^nZk5fEeE%<${;P>@{ z-!~e5t=>1qJwM+P_xyZY+}D|R#C>&rSG;?czj*fwZL6rAub|A=hxerCUhy z+Me4B<#!bLodteZf!|%=;|lzq0>8Jw?8_xEA}bnZ2I)>z~!}MqtxR zFYrAIe9r>ktHAdz@O=t=-vZySz&i?j{{latzz;0&g9`lM0zag{4=wP+3jFW_Kcc{o zEbyZW{OAHdrofLa@Z$>n_yRwnz)vjjlM4Lg0zaj|Pc87%3jFi}Kcm3UEby}m{Okfh zr@+rG@G%8`UV)!q;1?A5g#~_5fnQwUmlXJ=1%6q9UtZu>6!?_|epP{AUEtRg__YOo zop?*NCsv>QOdnp*oVUQ|EAaUXe1QW0U+ldFoL$B8F4{AD&tzf{!UO^Y7?J=10t5&U zJV1cp4uOOa+#xsw8{8qdLvVL@cXxMpce_>neYIB09?7}qy?5XJ{nz=0Q~gzSRdrRh zthLwPvqaKfGHEZBw1+3{rIYqDNqgC(JtAo@m$a8p+AAdOkxBcYWaV2i;jfgmS5Dfi zB<)p`_G(Fc^`yN<(q1!Zua&gdPTK1v?RAs(dP#fzq&+HWZ;-S%OxmN9_L!u-QPLip zv^P%L&|jCd z>yvgRX;+hWL(*_1 z?b(y|prk!V(w;ME&y}i=P|{wQ?S^U( znd$m@-Dj?+Q1SJ<%u@amrt2cy@b32pxdXs`@sz?j#^3#7t+>6gh4vjuySy6(|IUPe zSJJ*aY2TBy?@ikGCGGo@_5(@#!KD3A(tbE;Ka#W`P1=to?Z=b$6G{8Yr2SOVemZGC zleC{r+Rr8J=acpeN&Cg5{Zi6?IcdLAw0lYB^SjYE$nWTG^fk);@86B;Gu!-b6xFp) z;Vs(xChh%__WnuxfTZ1;v=2<$2PN%;llCD=`_QC)SkgW`X&;fak4)M}CGDe=_AyEO z*ra`2(mpL(mpF`pPjVNN!sTo z?emiMq@;a*(!L;RUzoHnO4=7E?MssOrAhm;q1h`!=>4s#D48gS$~w#=*ti7uv&%?Nqa=n zUM^`bpR`v<+9Q*8d3Ol^R!sOSCGC}y_9{tx)ug>z(q27juaUIZOxkND?X{EkI!Sxo zq`h9!UO#D%O4{Y!A>y%N!XKTq$0Y5IlJ?l7y>ZeWm$WxY+M6cr&64)!NqdW=y=Btg zDrs+>w6{sx+a~SplJ@pVdxxaGW76I!X^&6ZJ16a3lJ>4id$*)rKIcXLc2D?wB<($u z_FhSQ@1#9}?S^V^ndy2)z0gf9RD8W7Qg%k2Lb${E+1PvRZJ#;4&$fN$^a0!UncIhK zho8AM)7rbjGrb>E&h&o5w&`t~Uw%f_hk8GfzHPlx@Tu3UpRn3rs@P=<8@WEI$C>AI zTGvnT zTE%@!43^=|cf{~cC*-~-W`E0b`plcJM8f`-=X8ZP==~#m!<$-hfZR`%3*%saQz-Pt z{`RSP(=YSphrpW|go~`e@-LA$u>32rFgCwM-W=RV8aE#&@XU%VsRA|sM- zuuMSZ4)L>C-d4@V`G@ox#kjWkTB>Is)||&G#PFFGK9{<940Piz0`aI)4u3gH{u)4L zuTCVIqQAD)7}>*Ex)gfK*fbHdzqU1Nrn^BTdPIMPseRqLvemoUGd*2JPgA6)J8dH- z&yCR7_8?||C2NjMPdAb1%lV9P)$(VGLQgr?DT#$Ms24HJph04-;-(^IGia{Nhn^xa z$c2AJ>A&X##x!-|gZdx)Wq%iD?#!>=(ra*32YsjqF~(nGT3{4v4D%V-G?cTyl{;^y zyICX#@)^lI!qs=2TSSq~;(@|l+|S~VmenZsjV$Y11{F6QF=Svq(Nb~K6T_-ear0-E zrxl4IoK4p*r+tp9#|SX0pH@_?AN63Ct7jGWI^}xRX%vAi-GIJR)oGOCR)a*fX!TZqgE*OzeV85&tZD2NLM0+vsVSkRf#qZR>1`vDBW9VzK zY4sUsaEoUi&LX`gG6Rd&@bEh~B|V&aWFDK?LwK`f-pZ%|Q$+T*aSuX5A8V0JFWpEt`2WyY#Z^Tt>L4M0hh7HDdMw8%!)bBg{?A_Lk)` zD|3oOytmlN4!YwLpv7*5OwT-`C*E6z&^GkcFRGE4kC^FMG1D`z*VF7*v2*=9Aqy0G zv=Zvv%2}WJMWV|5r+v!3XTikws+pdl-ZtV~OAlhPaG|HvJ&c&edG$>9LL$+_RsHwg zk*`{R$86C^H|#A|=q~LoP7D#Ttm2F#b2=%=1W-d%h56_ z9`kB>VwQ=uGb+? zP|@pWy;qjr)#!9n_9?4i)yOmGUajz~lv|w`ss(au5DTkiO=5Ps*&y?46_My0t+Z>i zPZ+Uvh}kS3o#|OiBy6SKP`Db0dY8+s8_10jxv(PEuVLA|3D>|;l(UK$n|ZUINc4zS zd(%^UR2tbWr`0-`Ah#lVVYSEkc|+Pmw1JH#h7&=98<+X8fk+Hx?Qfinw3auvAB7{` zh*oT*n`TzVh=kStCc+KR&yyd|JPzTQEe@!#I1U4S#v9${nTKP=!(q%b{;K*ojw;N> zCd9(g+xlXo-!jv^u^&BVB6M$7=*CRkI_tBkNLU^3yfU&~{&#cF#TjH9=^H*>*|N}G z&P4Mu^m{AHp@#4`dbcKK_wn0her+KV_H<=i;bLZBRNL0Dyd5!Eet0RZ-tCE5#CFK6 zY$Fm@FWV>M+cB~NzjunPO!RBz_`-_D0ocyOYd8{dw?4NrHwvNtLMmUkmo zrg6_qT?#ch2PY3FP(?ZdgtG(eH5n?N1EVg!94y#H^YoWLEYS39F{P zg^QfFU9;tEf#3UP8e2u9<#Zq69uqv>jOQP$92EHt?BK%ha-JSS4C~n&ezqJ+4C~ni zQElUV1>ZNXJIdP&D<>Ww>}|}uD~s4+ znVw@sPgAt#+m0I6xs5+uuaB?c_e5gh3F`!6_6+NY%!lJdqIoiXz+tuDiXb-bDZ5PAnsU8W}}`k?q?9Q_2sxs z_vs>G>&vmiMU~*b{4Dl{72KDfU0A{TGBMM5W}xx-LL=tJxsk@@{JpAKvAR1k(|C^b zvYC29p;2|q-%pA(!p9x?q!2T(-kqFjJWqPrCmSaT7i)K|QR4~V1+;?L!pbOGvDluP zSvg;N*?xSAaPiwIpyY2h(Zpk^kv63&=gX$7Z& zyL@zRBZi&7>MqYL-y#yW^Is-h%otd?gT2G(+)2#Fa%HCRc9F2ze}!=I%cPHqKmGMN zqx`dXEcJWRSBnJhR<04Mul(jzgH!8Tfx7bMeHz?#MW5@1;x7*hRdE&rczmtL?xx2$ zMX3FXyQdh1#`Fd+cP}x-4|4YrvuC0=ie!AEs~jvdyd%l{#4w<-H}D+5s?_rJl!r_%*r?l$P-5L0yQEh zv1L?MY#CKmb$4Z!pBGJ5Rd)&(pM*nWoRc{I;d)^4hh=#95foDE&GOZ_d8-(Pe1T;;Co{DwKhb-*3RKI*3J>WZo0c? zvnYHinntp2o)IqQ3ihraX$5ry>?dNVPK@|xV&QsfIl-zH=frmD=QD495KXq8J||q% z7v{hP#q&0eKd@g5Z?G1;m}&e)B&@z(5NW6H@?VYx8c`8$ADmrK5y0w*;e;c9(=fC0k7%;&zghT=*u2#H^k^%B*x139H%1WcvEF^2X`EIhEK{Ee7wadgX@*E6o}u(37M?3+B!;yTS)Pd) zb`d^eIGb=5k$)fm`a1ll1 zU_fLAxf)2!>iyeHWB)+oH-+EOI9sF#LVySGb^(OR=z9zhQ>J~ zD@|VGT!j_Pj2| z7g@o4nZK|Czkkg%4iO3S`fmexn)}B4&R7o>^HyB+T#Mgp0WW zE5jly$n+wS6<~`NR@5@0xEL|ap+p#%E7yp)r0+YZ@CfjVp;p%S(fB+di%6id}K5h`e6mX=PPnc3Nr5tgI{&w(EB( z{6_7p&ff4_cbbY@gP8fqZ(8 ziS-hVQ)C*~5edtGPvIiAN>$vbNF(;Z4Txc`!perku#d^_IcHYZ7l{_}T<-v<6mGar zkBO`d@{!nxn8mhtrg5}LSR|$rF8oGpH;yy{Gb`8`U1Y^pyyncxSkYwBnY!>BGhvg+ z3b0LyL1Vp}Cet`hB&;U-2p4N;t$1UV*qj;>Z(v&x!}$Vv*^(H}7m(YESc{+i4X$tI z&1NED?~zX{T&z#1@8$XJ2h=>GxD7Ri-fT-OJnd{p3}@`Bn?AF=wMf`(o35}7D?6|^ zEYI(AwIi|cWU~`7%yY<%CuS>Szs&OXB4HVrLAc>+vTHq74p>G`NArFtTupYN6 z*@L4-Z0p^?Oyll>#sR`bb$4dey5Gg|Mm+(u?+M`f>Ega3_M$gd-Lqxh>?smf-Lnc8 z)r}Q>0(&FVc!zHvVyH1-`w|PYKL=xDHKu=qB);~RUUoLozgB`8!!x1ylPZjFe_Fx3 zg5?8<*?sDqnU(!S!fI@e!U}Q~KZ(S8a3D2eeE5dKLBwng9GqEc6$zU!a|st`(EJnf zgGJ8P%DF`@T;mU=6-0Y^pTEP1*&07@X8912ur+?3LL>5bM5GZ>JTlQZU#9VJkuV>J z6dDn+qa%$gc^{8SG%k>7JW3?Y$N3A5@G(9=A^Ve9J2vVCGmXcJMvM1Q;i78e-iV`e zz;tiw;#SSPzD6W0 z4yyk8wG}^j$33_UKI(e?ahUYh{dN0SW&Kgwis!wcUxr|-xLX(e_IMS+>75~ zZ)n`#`}l65QP&b+?-4`9fW1#FoGl*^!)$5w`aUFPd+|1zhi{97twUQ2H_YkB>1rl_3ypGEo2qWR%<@MfVds=>g&VF-pGTGt@niX-u#9`X9WsrdiG<~E zd*O!nDE3Yo#)78_ACJb#AdKQyw1P7io&|qR3}>#Y+bOgBrAXLVb}Yt%{ULrY<_JHQ zZ>iBvG&^S+zYz(mobkz6;(HWW`JNgv7GOUR!&(W<-q*9S?3!8rPI}q>)-J-uTvJMZ zagZ9rim=nhz#4Ca4B`|1-7_mcil)IlrS2x&aAw3$3Gf-|FSLvrLoNPF3^U_6AKBlC zg*i13F*D-xkj;!eGY@|jO*S+35N^2U#AnJ{vjEXf?>qL+to$xkY-QU^xR?d#9aoOl zmAunYj2W|FpG@N)A~A@Oolt1RN!s2?4Dvcn>Mg-*8`HUEBeg*Z+tYBN&JMh1>R9ldw`x z4^d&rK!q483|KY7Fp>sh;Yp>D7*>+geH6M73!i}4=vr#bpMidKUEP7%=;}n1Ww}+j zs2hCCqbsc-%N2ij(~X#&><-Q}Hi?9-o(BmxI@$4b292>5#0%f&xqxp^Azp}U4_Xdq z{4*O9fVttXHk24YrM{Fkm z)N6bK2y1gD_QmcBxtWRKuA_@PF7tW@k+9l4R=8o+3}tUr%~jsR1&P7y>pZqlgx%n= zg$oQ-GcmK=A`&*gj~8yZ|BDmD$)nMo zn0Yu%B=;khFW>+n3ph6d}! zyu@%GIMr9z5MnqF^mM0Z(V9&p>^yLqa35=P)$DAv;wXgmZzD!^L2iC}h!ql1T_D0R zV%rlC>9{@+)wn)}_!Y97J2M;ce4>3QtMv@wV$Xv&akT;~f5j1J%d<0$ONd5WL(b}i z#`62g(0Fd9amhgAIl^tr@=}4^c_J5{#^bT*s# ziSbOR;x5jtj1Vh!a=1vi&GHSqs(W6(8|=TECc)4rr{y>Ds_s&e!W%M|C0;GhXkxdz zT(}jt0aUVeX8b}_qNRP zD6wq&)vdy9`@B|bJqNa7lu=-#i6LHCea8^9C-Qe>-fSQew))=wA9`c=XviMCu`?Iy z5ZKtlL)}pu++CSB8;OM7zuqa_ux>iu>u8x)+V&>SDB=}+hhjMbUc!{+G}UI^w7?p;T@2j zJ>hkH_QaW_i+dpRdNc9b&LsB>x9u|tGHNpg)qquG3&zHF|A#Uwn~Q|i;e(TH1(vr; ztUQug*-|9zjPbB=hj;Kxm$goIcIH9`;xiW_3vc4P-^=`3wGBPQE){=2536bX{k(y} z{m!=R8}1d`5gY8~;LG+A24Cz1j#C0Y7vF($*k|w!>K%#Uy9=Gsbys)=_;L^|G&!bscb@Jyk>J&}2{vv||O-SKhZwtWv2Te0V) zPh}c+5sg+!PYSo~`$$Brv*WW17#xTDaIz@>uU7au(}nMJ{~e98nr{B$-v zOYBQIJ4?Knd9#;D*jeHQ;o=!LD1FBLQYSpzzlMhgL>|86pG371YtO@1G7t9)JbbzE z5R`iOs$k)ceh{sMF+7-97{fz|A%-7$4-X|)+e6(Ok@>?Yhe|@84kw06LY|HwhIOUM zy`GKkK#{Oof2|lDC>`A!f`#YYqo^?)U9DdcvtJv-=-`dbPL}Jkl!YQYJqv$3iC4T{ zAP(`K49wPna3tk^dS{9WPVsng5yR|(?lM3J-mhxbJey9a&&{$!3B z8C9nK!41gpKbb;bMHXyg}WZ9ciq0pJp1*3N(I_Xgrs_5iw{yFVXmUrtzFW<7b6N zMCbfSBR_*oG=7`CL?J)LHQ4%9`nmiD9=t6S z6a1E0zELD>C-_ykc*3i-X#cbZ!za9dh!mdi{wY-3l@_1H;3?|)w#d`JL`%ipUU*vW zzIPC_O8Z+R%%n17x|-Fwf3x0qO7AMi@{e%azRSiNJ9pEcFzWXZ z3un!}#4u}6efJT=yoQIiPlqRo`zeQ$L>E`LLp);V?h=U>dhLYU_G$#n_G>_)*AGS> zVugCBhKCOm!#)kUM~GpcZgiE*!v{pd_UU@zwjEc*p(o!K2|cvfAg&({*BW_@mc#Y( zabk$;>t5~&V&Un+o;BF%q9OD8(ZK7faNDlzul%a@6s^E(U{4c+*Dv_9<}<|LHSVaN zC1#b~CG+M`+fGtUWecE z`GA=1o>OKT-xCSjJ*N=v;0~T|eN<@FtRPb#6T_IX^V+AGVOFN0Tv#`s5W~GU=Iy7% zT7qX;pAj4AvA6vE{+!sLKyF%MgFP0%J2WJan~rir1G(vm4GZLK{Ry9Zd_lS4{`^0s zn<|UyhazE5K6(ikyQ$Wu=E|Q2xSMJOyU6Y{wMbz%Z5FESH3zw_b#Ak}9Au%7Xpvuq zqo-jOz9wdC&NLz!UtfxZtvS7g+tIom*91I_y@{XOgx)MlZ^D|en1|0}Eaojf=3QLh z%TH&^RYHK@&wbqyK=%JmRrq3*YD-w2gnohVKWv{dGYJU#l-mG8d&G+Js z?Yc7vx9uIH?Ks5QgPh$lhbx=iF(ae#%*Wb`_1I=UG77mL8CPVq$<36F;1ll#_Qfm!)<_I%9k4FMY+W0id0i2SL0s47YBx6Uuq!np1F+JKm}Ov|%u16; z*cvu>yRn%?5-fjBHL?P%C$UDqf5P$~*-pu1w3w=-z%0T!k1$vW_3!s>Co7WPUYb z;p|zRn2luhY$Pj*gpFjiVkDq+Bx?xP_O9RdNYAvM<&F{Dt)Ohz;^{zMESsi^3WrF^u_KvxovHjl$Z3h3mi+(f97~ zDa9ySv2|eG%*y&AVYR-FaB=66%WV+It(RDi?>tmX#f?rZkIF1>C=#~XuPbu zdqxYl?KKkK*bav|4=Y>Jip6!4%*qxbVRbW3xE($JuzM(2=`Ai-+}4E^jUljYh#_9^ zW?N$R^lG!ro2^8`o?dO*i7{_ajqv6Hzc1`S%*MP$W@S5(urY5g+;H~Aa{%kZPK6cB zs;x4OJBozu!dp(Z-?0_*dz;M4_`vV2g&XE--5srZ$~un6f-2di7)vR)D>2kN?u2$D zhEraH+b;8FXOXaZzpZfFjv_4YQCLP4cgQsEE)o{S?S