From cbec0a20ba4b1ee07e8911222897e1554bf57cf8 Mon Sep 17 00:00:00 2001 From: Tavisco Date: Thu, 16 Nov 2023 22:04:44 -0300 Subject: [PATCH] Add Handera SDK version 1.05 --- .gitignore | 1 + README.adoc | 1 + .../doc/Companion/Programming_Companion.pdf | Bin 0 -> 912963 bytes .../doc/Reference Manual/ReferenceManual.pdf | Bin 0 -> 844351 bytes .../examples/ExampleA/ExampleA.mcp | Bin 0 -> 50607 bytes .../ExampleA/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 9372 bytes .../examples/ExampleA/Rsc/Starter.rsrc | 0 .../examples/ExampleA/Src/starter.c | 478 + .../examples/ExampleA/StarterRsc.h | 51 + .../examples/ExampleB/ExampleB.mcp | Bin 0 -> 50607 bytes .../ExampleB/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 18705 bytes .../examples/ExampleB/Rsc/Starter.rsrc | 0 .../examples/ExampleB/Src/starter.c | 478 + .../examples/ExampleB/StarterRsc.h | 68 + .../examples/ExampleC/ExampleC.mcp | Bin 0 -> 43449 bytes .../examples/ExampleC/Rsc/ExampleC.rsrc | 0 .../ExampleC/Rsc/Resource.frk/ExampleC.rsrc | Bin 0 -> 9353 bytes .../ExampleC/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 9327 bytes .../examples/ExampleC/Rsc/Starter.rsrc | 0 handera-sdk-105/examples/ExampleC/Src/Stub.c | 11 + .../examples/ExampleC/Src/starter.c | 546 + .../examples/ExampleC/StarterRsc.h | 50 + .../examples/ExampleD/ExampleD.mcp | Bin 0 -> 50607 bytes .../ExampleD/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 18641 bytes .../examples/ExampleD/Rsc/Starter.rsrc | 0 .../examples/ExampleD/Src/starter.c | 643 ++ .../examples/ExampleD/StarterRsc.h | 68 + .../examples/ExampleE/ExampleE.mcp | Bin 0 -> 50607 bytes .../examples/ExampleE/Rsc/HandEra.r | 29 + .../ExampleE/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 18641 bytes .../examples/ExampleE/Rsc/Starter.rsrc | 0 .../examples/ExampleE/Src/starter.c | 648 ++ .../examples/ExampleE/StarterRsc.h | 68 + .../examples/ExampleF/ExampleF.mcp | Bin 0 -> 50607 bytes .../examples/ExampleF/Rsc/HandEra.r | 29 + .../ExampleF/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 15010 bytes .../examples/ExampleF/Rsc/Starter.rsrc | 0 .../examples/ExampleF/Src/starter.c | 527 + .../examples/ExampleF/StarterRsc.h | 72 + .../examples/ExampleG/Bitmaps/silk-1bit.bmp | Bin 0 -> 57654 bytes .../examples/ExampleG/Bitmaps/silk-2bit.bmp | Bin 0 -> 57654 bytes .../ExampleG/Bitmaps/silk_inv-1bit.bmp | Bin 0 -> 57654 bytes .../ExampleG/Bitmaps/silk_inv-2bit.bmp | Bin 0 -> 57654 bytes .../examples/ExampleG/ExampleG.mcp | Bin 0 -> 50607 bytes .../ExampleG/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 36594 bytes .../examples/ExampleG/Rsc/Starter.rsrc | 0 .../examples/ExampleG/Src/starter.c | 743 ++ .../examples/ExampleG/StarterRsc.h | 81 + .../examples/ExampleH/ExampleH.mcp | Bin 0 -> 50607 bytes .../ExampleH/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 3189 bytes .../examples/ExampleH/Rsc/Starter.rsrc | 0 .../examples/ExampleH/Src/MainForm.h | 17 + .../examples/ExampleH/Src/mainform.c | 707 ++ .../examples/ExampleH/Src/starter.c | 306 + .../examples/ExampleH/StarterRsc.h | 76 + handera-sdk-105/examples/ExampleI/Memo.mcp | Bin 0 -> 238325 bytes .../examples/ExampleI/Rsc/HandEra.r | 29 + .../ExampleI/Rsc/Localized/deDE/MemoApp.rsrc | 0 .../Rsc/Localized/deDE/MemoDelete.rsrc | 0 .../Rsc/Localized/deDE/MemoDetails.rsrc | 0 .../ExampleI/Rsc/Localized/deDE/MemoEdit.rsrc | 0 .../ExampleI/Rsc/Localized/deDE/MemoList.rsrc | 0 .../ExampleI/Rsc/Localized/deDE/MemoMisc.rsrc | 0 .../Rsc/Localized/deDE/MemoPrefer.rsrc | 0 .../Localized/deDE/Resource.Frk/MemoApp.rsrc | Bin 0 -> 14314 bytes .../deDE/Resource.Frk/MemoDelete.rsrc | Bin 0 -> 1003 bytes .../deDE/Resource.Frk/MemoDetails.rsrc | Bin 0 -> 1269 bytes .../Localized/deDE/Resource.Frk/MemoEdit.rsrc | Bin 0 -> 894 bytes .../Localized/deDE/Resource.Frk/MemoList.rsrc | Bin 0 -> 767 bytes .../Localized/deDE/Resource.Frk/MemoMisc.rsrc | Bin 0 -> 1640 bytes .../deDE/Resource.Frk/MemoPrefer.rsrc | Bin 0 -> 1150 bytes .../ExampleI/Rsc/Localized/esES/MemoApp.rsrc | 0 .../Rsc/Localized/esES/MemoDelete.rsrc | 0 .../Rsc/Localized/esES/MemoDetails.rsrc | 0 .../ExampleI/Rsc/Localized/esES/MemoEdit.rsrc | 0 .../ExampleI/Rsc/Localized/esES/MemoList.rsrc | 0 .../ExampleI/Rsc/Localized/esES/MemoMisc.rsrc | 0 .../Rsc/Localized/esES/MemoPrefer.rsrc | 0 .../Localized/esES/Resource.Frk/MemoApp.rsrc | Bin 0 -> 14314 bytes .../esES/Resource.Frk/MemoDelete.rsrc | Bin 0 -> 1009 bytes .../esES/Resource.Frk/MemoDetails.rsrc | Bin 0 -> 1293 bytes .../Localized/esES/Resource.Frk/MemoEdit.rsrc | Bin 0 -> 894 bytes .../Localized/esES/Resource.Frk/MemoList.rsrc | Bin 0 -> 757 bytes .../Localized/esES/Resource.Frk/MemoMisc.rsrc | Bin 0 -> 1637 bytes .../esES/Resource.Frk/MemoPrefer.rsrc | Bin 0 -> 1142 bytes .../ExampleI/Rsc/Localized/frFR/MemoApp.rsrc | 0 .../Rsc/Localized/frFR/MemoDelete.rsrc | 0 .../Rsc/Localized/frFR/MemoDetails.rsrc | 0 .../ExampleI/Rsc/Localized/frFR/MemoEdit.rsrc | 0 .../ExampleI/Rsc/Localized/frFR/MemoList.rsrc | 0 .../ExampleI/Rsc/Localized/frFR/MemoMisc.rsrc | 0 .../Rsc/Localized/frFR/MemoPrefer.rsrc | 0 .../Localized/frFR/Resource.Frk/MemoApp.rsrc | Bin 0 -> 14314 bytes .../frFR/Resource.Frk/MemoDelete.rsrc | Bin 0 -> 924 bytes .../frFR/Resource.Frk/MemoDetails.rsrc | Bin 0 -> 1294 bytes .../Localized/frFR/Resource.Frk/MemoEdit.rsrc | Bin 0 -> 894 bytes .../Localized/frFR/Resource.Frk/MemoList.rsrc | Bin 0 -> 734 bytes .../Localized/frFR/Resource.Frk/MemoMisc.rsrc | Bin 0 -> 1659 bytes .../frFR/Resource.Frk/MemoPrefer.rsrc | Bin 0 -> 1114 bytes .../ExampleI/Rsc/Localized/itIT/MemoApp.rsrc | 0 .../Rsc/Localized/itIT/MemoDelete.rsrc | 0 .../Rsc/Localized/itIT/MemoDetails.rsrc | 0 .../ExampleI/Rsc/Localized/itIT/MemoEdit.rsrc | 0 .../ExampleI/Rsc/Localized/itIT/MemoList.rsrc | 0 .../ExampleI/Rsc/Localized/itIT/MemoMisc.rsrc | 0 .../Rsc/Localized/itIT/MemoPrefer.rsrc | 0 .../Localized/itIT/Resource.Frk/MemoApp.rsrc | Bin 0 -> 14328 bytes .../itIT/Resource.Frk/MemoDelete.rsrc | Bin 0 -> 982 bytes .../itIT/Resource.Frk/MemoDetails.rsrc | Bin 0 -> 1270 bytes .../Localized/itIT/Resource.Frk/MemoEdit.rsrc | Bin 0 -> 895 bytes .../Localized/itIT/Resource.Frk/MemoList.rsrc | Bin 0 -> 757 bytes .../Localized/itIT/Resource.Frk/MemoMisc.rsrc | Bin 0 -> 1639 bytes .../itIT/Resource.Frk/MemoPrefer.rsrc | Bin 0 -> 1195 bytes .../ExampleI/Rsc/Localized/jpJP/MemoApp.rsrc | 0 .../Rsc/Localized/jpJP/MemoDelete.rsrc | 0 .../Rsc/Localized/jpJP/MemoDetails.rsrc | 0 .../ExampleI/Rsc/Localized/jpJP/MemoEdit.rsrc | 0 .../ExampleI/Rsc/Localized/jpJP/MemoList.rsrc | 0 .../ExampleI/Rsc/Localized/jpJP/MemoMisc.rsrc | 0 .../Rsc/Localized/jpJP/MemoPrefer.rsrc | 0 .../Localized/jpJP/Resource.Frk/MemoApp.rsrc | Bin 0 -> 14270 bytes .../jpJP/Resource.Frk/MemoDelete.rsrc | Bin 0 -> 936 bytes .../jpJP/Resource.Frk/MemoDetails.rsrc | Bin 0 -> 1215 bytes .../Localized/jpJP/Resource.Frk/MemoEdit.rsrc | Bin 0 -> 888 bytes .../Localized/jpJP/Resource.Frk/MemoList.rsrc | Bin 0 -> 737 bytes .../Localized/jpJP/Resource.Frk/MemoMisc.rsrc | Bin 0 -> 1591 bytes .../jpJP/Resource.Frk/MemoPrefer.rsrc | Bin 0 -> 959 bytes .../examples/ExampleI/Rsc/MemoApp.rsrc | 0 .../examples/ExampleI/Rsc/MemoDelete.rsrc | 0 .../examples/ExampleI/Rsc/MemoDetails.rsrc | 0 .../examples/ExampleI/Rsc/MemoEdit.rsrc | 0 .../examples/ExampleI/Rsc/MemoList.rsrc | 0 .../examples/ExampleI/Rsc/MemoMisc.rsrc | 0 .../examples/ExampleI/Rsc/MemoPrefer.rsrc | 0 .../ExampleI/Rsc/Resource.Frk/MemoApp.rsrc | Bin 0 -> 31608 bytes .../ExampleI/Rsc/Resource.Frk/MemoDelete.rsrc | Bin 0 -> 897 bytes .../Rsc/Resource.Frk/MemoDetails.rsrc | Bin 0 -> 1215 bytes .../ExampleI/Rsc/Resource.Frk/MemoEdit.rsrc | Bin 0 -> 892 bytes .../ExampleI/Rsc/Resource.Frk/MemoList.rsrc | Bin 0 -> 781 bytes .../ExampleI/Rsc/Resource.Frk/MemoMisc.rsrc | Bin 0 -> 1590 bytes .../ExampleI/Rsc/Resource.Frk/MemoPrefer.rsrc | Bin 0 -> 1086 bytes .../examples/ExampleI/Src/MemoDB.c | 532 + .../examples/ExampleI/Src/MemoDB.h | 87 + .../examples/ExampleI/Src/MemoMain.c | 4994 +++++++++ .../examples/ExampleI/Src/MemoMain.h | 66 + .../examples/ExampleI/Src/MemoRsc.h | 101 + .../examples/ExampleI/Src/MemoTransfer.c | 1521 +++ handera-sdk-105/examples/ExampleI/Src/Trg.h | 56 + handera-sdk-105/examples/ExampleI/Src/Vga.h | 368 + .../examples/ExampleI/TRGChangeLog.txt | 57 + .../examples/ExampleJ/ExampleJ.mcp | Bin 0 -> 50607 bytes .../ExampleJ/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 5489 bytes .../examples/ExampleJ/Rsc/Starter.rsrc | 0 .../examples/ExampleJ/Src/MainForm.c | 772 ++ .../examples/ExampleJ/Src/MainForm.h | 19 + .../examples/ExampleJ/Src/STARTER.H | 23 + handera-sdk-105/examples/ExampleJ/Src/Wave.c | 202 + handera-sdk-105/examples/ExampleJ/Src/Wave.h | 27 + .../examples/ExampleJ/Src/starter.c | 371 + .../examples/ExampleJ/StarterRsc.h | 84 + .../examples/ExampleK/ExampleK.mcp | Bin 0 -> 50607 bytes .../examples/ExampleK/Rsc/HandEra.r | 29 + .../ExampleK/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 7265 bytes .../examples/ExampleK/Rsc/Starter.rsrc | 0 .../examples/ExampleK/Src/starter.c | 537 + .../examples/ExampleK/StarterRsc.h | 70 + .../examples/ExampleL/ExampleL.mcp | Bin 0 -> 50607 bytes .../ExampleL/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 11741 bytes .../examples/ExampleL/Rsc/Starter.rsrc | 0 .../examples/ExampleL/Src/starter.c | 597 + .../examples/ExampleL/StarterRsc.h | 66 + .../examples/ExampleX/ExampleX.mcp | Bin 0 -> 50607 bytes .../ExampleX/Rsc/Resource.frk/Starter.rsrc | Bin 0 -> 18753 bytes .../examples/ExampleX/Rsc/STARTER.R | 26 + .../examples/ExampleX/Rsc/STARTER.RH | 1 + .../examples/ExampleX/Rsc/Starter.rsrc | 0 .../examples/ExampleX/Src/starter.c | 625 ++ .../examples/ExampleX/StarterRsc.h | 67 + handera-sdk-105/examples/Mail/Mail.mcp | Bin 0 -> 117602 bytes handera-sdk-105/examples/Mail/Rsc/HandEra.r | 29 + .../Mail/Rsc/Localized/deDE/MailDetails.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailEdit.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailList.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailMessage.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailMisc.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailNewMsg.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailOptions.rsrc | 0 .../Rsc/Localized/deDE/MailPreferences.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailReply.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailSync.rsrc | 0 .../Mail/Rsc/Localized/deDE/MailTruncate.rsrc | 0 .../deDE/Resource.Frk/MailDetails.rsrc | Bin 0 -> 1809 bytes .../Localized/deDE/Resource.Frk/MailEdit.rsrc | Bin 0 -> 749 bytes .../Localized/deDE/Resource.Frk/MailList.rsrc | Bin 0 -> 894 bytes .../deDE/Resource.Frk/MailMessage.rsrc | Bin 0 -> 1580 bytes .../Localized/deDE/Resource.Frk/MailMisc.rsrc | Bin 0 -> 19331 bytes .../deDE/Resource.Frk/MailNewMsg.rsrc | Bin 0 -> 782 bytes .../deDE/Resource.Frk/MailOptions.rsrc | Bin 0 -> 1112 bytes .../deDE/Resource.Frk/MailPreferences.rsrc | Bin 0 -> 1309 bytes .../deDE/Resource.Frk/MailReply.rsrc | Bin 0 -> 944 bytes .../Localized/deDE/Resource.Frk/MailSync.rsrc | Bin 0 -> 4033 bytes .../deDE/Resource.Frk/MailTruncate.rsrc | Bin 0 -> 1069 bytes .../Mail/Rsc/Localized/esES/MailDetails.rsrc | 0 .../Mail/Rsc/Localized/esES/MailEdit.rsrc | 0 .../Mail/Rsc/Localized/esES/MailList.rsrc | 0 .../Mail/Rsc/Localized/esES/MailMessage.rsrc | 0 .../Mail/Rsc/Localized/esES/MailMisc.rsrc | 0 .../Mail/Rsc/Localized/esES/MailNewMsg.rsrc | 0 .../Mail/Rsc/Localized/esES/MailOptions.rsrc | 0 .../Rsc/Localized/esES/MailPreferences.rsrc | 0 .../Mail/Rsc/Localized/esES/MailReply.rsrc | 0 .../Mail/Rsc/Localized/esES/MailSync.rsrc | 0 .../Mail/Rsc/Localized/esES/MailTruncate.rsrc | 0 .../esES/Resource.Frk/MailDetails.rsrc | Bin 0 -> 1690 bytes .../Localized/esES/Resource.Frk/MailEdit.rsrc | Bin 0 -> 749 bytes .../Localized/esES/Resource.Frk/MailList.rsrc | Bin 0 -> 891 bytes .../esES/Resource.Frk/MailMessage.rsrc | Bin 0 -> 1582 bytes .../Localized/esES/Resource.Frk/MailMisc.rsrc | Bin 0 -> 19245 bytes .../esES/Resource.Frk/MailNewMsg.rsrc | Bin 0 -> 780 bytes .../esES/Resource.Frk/MailOptions.rsrc | Bin 0 -> 1033 bytes .../esES/Resource.Frk/MailPreferences.rsrc | Bin 0 -> 1277 bytes .../esES/Resource.Frk/MailReply.rsrc | Bin 0 -> 1013 bytes .../Localized/esES/Resource.Frk/MailSync.rsrc | Bin 0 -> 3890 bytes .../esES/Resource.Frk/MailTruncate.rsrc | Bin 0 -> 1083 bytes .../Mail/Rsc/Localized/frFR/MailDetails.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailEdit.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailList.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailMessage.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailMisc.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailNewMsg.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailOptions.rsrc | 0 .../Rsc/Localized/frFR/MailPreferences.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailReply.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailSync.rsrc | 0 .../Mail/Rsc/Localized/frFR/MailTruncate.rsrc | 0 .../frFR/Resource.Frk/MailDetails.rsrc | Bin 0 -> 1787 bytes .../Localized/frFR/Resource.Frk/MailEdit.rsrc | Bin 0 -> 783 bytes .../Localized/frFR/Resource.Frk/MailList.rsrc | Bin 0 -> 887 bytes .../frFR/Resource.Frk/MailMessage.rsrc | Bin 0 -> 1573 bytes .../Localized/frFR/Resource.Frk/MailMisc.rsrc | Bin 0 -> 19231 bytes .../frFR/Resource.Frk/MailNewMsg.rsrc | Bin 0 -> 781 bytes .../frFR/Resource.Frk/MailOptions.rsrc | Bin 0 -> 1154 bytes .../frFR/Resource.Frk/MailPreferences.rsrc | Bin 0 -> 1329 bytes .../frFR/Resource.Frk/MailReply.rsrc | Bin 0 -> 964 bytes .../Localized/frFR/Resource.Frk/MailSync.rsrc | Bin 0 -> 3940 bytes .../frFR/Resource.Frk/MailTruncate.rsrc | Bin 0 -> 1106 bytes .../Mail/Rsc/Localized/itIT/MailDetails.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailEdit.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailList.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailMessage.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailMisc.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailNewMsg.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailOptions.rsrc | 0 .../Rsc/Localized/itIT/MailPreferences.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailReply.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailSync.rsrc | 0 .../Mail/Rsc/Localized/itIT/MailTruncate.rsrc | 0 .../itIT/Resource.Frk/MailDetails.rsrc | Bin 0 -> 1680 bytes .../Localized/itIT/Resource.Frk/MailEdit.rsrc | Bin 0 -> 748 bytes .../Localized/itIT/Resource.Frk/MailList.rsrc | Bin 0 -> 896 bytes .../itIT/Resource.Frk/MailMessage.rsrc | Bin 0 -> 1586 bytes .../Localized/itIT/Resource.Frk/MailMisc.rsrc | Bin 0 -> 19252 bytes .../itIT/Resource.Frk/MailNewMsg.rsrc | Bin 0 -> 780 bytes .../itIT/Resource.Frk/MailOptions.rsrc | Bin 0 -> 1037 bytes .../itIT/Resource.Frk/MailPreferences.rsrc | Bin 0 -> 1322 bytes .../itIT/Resource.Frk/MailReply.rsrc | Bin 0 -> 944 bytes .../Localized/itIT/Resource.Frk/MailSync.rsrc | Bin 0 -> 3661 bytes .../itIT/Resource.Frk/MailTruncate.rsrc | Bin 0 -> 1057 bytes .../Mail/Rsc/Localized/jpJP/MailDetails.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailEdit.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailList.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailMessage.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailMisc.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailNewMsg.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailOptions.rsrc | 0 .../Rsc/Localized/jpJP/MailPreferences.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailReply.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailSync.rsrc | 0 .../Mail/Rsc/Localized/jpJP/MailTruncate.rsrc | 0 .../jpJP/Resource.Frk/MailDetails.rsrc | Bin 0 -> 1498 bytes .../Localized/jpJP/Resource.Frk/MailEdit.rsrc | Bin 0 -> 754 bytes .../Localized/jpJP/Resource.Frk/MailList.rsrc | Bin 0 -> 878 bytes .../jpJP/Resource.Frk/MailMessage.rsrc | Bin 0 -> 1566 bytes .../Localized/jpJP/Resource.Frk/MailMisc.rsrc | Bin 0 -> 19052 bytes .../jpJP/Resource.Frk/MailNewMsg.rsrc | Bin 0 -> 769 bytes .../jpJP/Resource.Frk/MailOptions.rsrc | Bin 0 -> 1026 bytes .../jpJP/Resource.Frk/MailPreferences.rsrc | Bin 0 -> 1241 bytes .../jpJP/Resource.Frk/MailReply.rsrc | Bin 0 -> 922 bytes .../Localized/jpJP/Resource.Frk/MailSync.rsrc | Bin 0 -> 4044 bytes .../jpJP/Resource.Frk/MailTruncate.rsrc | Bin 0 -> 967 bytes .../examples/Mail/Rsc/MailDetails.rsrc | 0 .../examples/Mail/Rsc/MailEdit.rsrc | 0 .../examples/Mail/Rsc/MailList.rsrc | 0 .../examples/Mail/Rsc/MailMessage.rsrc | 0 .../examples/Mail/Rsc/MailMisc.rsrc | 0 .../examples/Mail/Rsc/MailNewMsg.rsrc | 0 .../examples/Mail/Rsc/MailOptions.rsrc | 0 .../examples/Mail/Rsc/MailPreferences.rsrc | 0 .../examples/Mail/Rsc/MailReply.rsrc | 0 .../examples/Mail/Rsc/MailSync.rsrc | 0 .../examples/Mail/Rsc/MailTruncate.rsrc | 0 .../Mail/Rsc/Resource.Frk/MailDetails.rsrc | Bin 0 -> 1650 bytes .../Mail/Rsc/Resource.Frk/MailEdit.rsrc | Bin 0 -> 746 bytes .../Mail/Rsc/Resource.Frk/MailList.rsrc | Bin 0 -> 874 bytes .../Mail/Rsc/Resource.Frk/MailMessage.rsrc | Bin 0 -> 1565 bytes .../Mail/Rsc/Resource.Frk/MailMisc.rsrc | Bin 0 -> 18874 bytes .../Mail/Rsc/Resource.Frk/MailNewMsg.rsrc | Bin 0 -> 773 bytes .../Mail/Rsc/Resource.Frk/MailOptions.rsrc | Bin 0 -> 997 bytes .../Rsc/Resource.Frk/MailPreferences.rsrc | Bin 0 -> 1274 bytes .../Mail/Rsc/Resource.Frk/MailReply.rsrc | Bin 0 -> 925 bytes .../Mail/Rsc/Resource.Frk/MailSync.rsrc | Bin 0 -> 3640 bytes .../Mail/Rsc/Resource.Frk/MailTruncate.rsrc | Bin 0 -> 1032 bytes handera-sdk-105/examples/Mail/Src/Mail.c | 9635 +++++++++++++++++ handera-sdk-105/examples/Mail/Src/Mail.h | 118 + handera-sdk-105/examples/Mail/Src/MailDB.c | 1889 ++++ handera-sdk-105/examples/Mail/Src/MailDB.h | 228 + .../examples/Mail/Src/MailLookup.c | 142 + .../examples/Mail/Src/MailLookup.h | 19 + .../examples/Mail/Src/MailMessage.c | 2443 +++++ .../examples/Mail/Src/MailMessage.h | 65 + handera-sdk-105/examples/Mail/Src/MailRsc.h | 256 + handera-sdk-105/examples/Mail/Src/MailSync.c | 928 ++ handera-sdk-105/examples/Mail/Src/MailSync.h | 88 + .../examples/Mail/Src/MailTruncate.c | 240 + .../examples/Mail/Src/MailTruncate.h | 19 + .../examples/Mail/Src/ShellCmdMail.cp | 1238 +++ handera-sdk-105/examples/Mail/Src/Trg.h | 56 + handera-sdk-105/examples/Mail/Src/Vga.h | 368 + handera-sdk-105/include/Audio.h | 271 + handera-sdk-105/include/HandEra.r | 29 + handera-sdk-105/include/Silk.h | 181 + handera-sdk-105/include/Trg.h | 56 + handera-sdk-105/include/TrgChars.h | 53 + handera-sdk-105/include/TrgRsc.h | 27 + handera-sdk-105/include/Vga.h | 310 + handera-sdk-105/include/power.h | 26 + 336 files changed, 35739 insertions(+) create mode 100644 .gitignore create mode 100644 handera-sdk-105/doc/Companion/Programming_Companion.pdf create mode 100644 handera-sdk-105/doc/Reference Manual/ReferenceManual.pdf create mode 100644 handera-sdk-105/examples/ExampleA/ExampleA.mcp create mode 100644 handera-sdk-105/examples/ExampleA/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleA/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleA/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleA/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleB/ExampleB.mcp create mode 100644 handera-sdk-105/examples/ExampleB/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleB/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleB/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleB/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleC/ExampleC.mcp create mode 100644 handera-sdk-105/examples/ExampleC/Rsc/ExampleC.rsrc create mode 100644 handera-sdk-105/examples/ExampleC/Rsc/Resource.frk/ExampleC.rsrc create mode 100644 handera-sdk-105/examples/ExampleC/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleC/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleC/Src/Stub.c create mode 100644 handera-sdk-105/examples/ExampleC/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleC/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleD/ExampleD.mcp create mode 100644 handera-sdk-105/examples/ExampleD/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleD/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleD/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleD/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleE/ExampleE.mcp create mode 100644 handera-sdk-105/examples/ExampleE/Rsc/HandEra.r create mode 100644 handera-sdk-105/examples/ExampleE/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleE/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleE/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleE/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleF/ExampleF.mcp create mode 100644 handera-sdk-105/examples/ExampleF/Rsc/HandEra.r create mode 100644 handera-sdk-105/examples/ExampleF/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleF/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleF/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleF/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleG/Bitmaps/silk-1bit.bmp create mode 100644 handera-sdk-105/examples/ExampleG/Bitmaps/silk-2bit.bmp create mode 100644 handera-sdk-105/examples/ExampleG/Bitmaps/silk_inv-1bit.bmp create mode 100644 handera-sdk-105/examples/ExampleG/Bitmaps/silk_inv-2bit.bmp create mode 100644 handera-sdk-105/examples/ExampleG/ExampleG.mcp create mode 100644 handera-sdk-105/examples/ExampleG/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleG/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleG/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleG/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleH/ExampleH.mcp create mode 100644 handera-sdk-105/examples/ExampleH/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleH/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleH/Src/MainForm.h create mode 100644 handera-sdk-105/examples/ExampleH/Src/mainform.c create mode 100644 handera-sdk-105/examples/ExampleH/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleH/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleI/Memo.mcp create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/HandEra.r create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoApp.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoDelete.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoDetails.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoEdit.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoList.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoMisc.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoPrefer.rsrc create mode 100644 handera-sdk-105/examples/ExampleI/Src/MemoDB.c create mode 100644 handera-sdk-105/examples/ExampleI/Src/MemoDB.h create mode 100644 handera-sdk-105/examples/ExampleI/Src/MemoMain.c create mode 100644 handera-sdk-105/examples/ExampleI/Src/MemoMain.h create mode 100644 handera-sdk-105/examples/ExampleI/Src/MemoRsc.h create mode 100644 handera-sdk-105/examples/ExampleI/Src/MemoTransfer.c create mode 100644 handera-sdk-105/examples/ExampleI/Src/Trg.h create mode 100644 handera-sdk-105/examples/ExampleI/Src/Vga.h create mode 100644 handera-sdk-105/examples/ExampleI/TRGChangeLog.txt create mode 100644 handera-sdk-105/examples/ExampleJ/ExampleJ.mcp create mode 100644 handera-sdk-105/examples/ExampleJ/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleJ/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleJ/Src/MainForm.c create mode 100644 handera-sdk-105/examples/ExampleJ/Src/MainForm.h create mode 100644 handera-sdk-105/examples/ExampleJ/Src/STARTER.H create mode 100644 handera-sdk-105/examples/ExampleJ/Src/Wave.c create mode 100644 handera-sdk-105/examples/ExampleJ/Src/Wave.h create mode 100644 handera-sdk-105/examples/ExampleJ/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleJ/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleK/ExampleK.mcp create mode 100644 handera-sdk-105/examples/ExampleK/Rsc/HandEra.r create mode 100644 handera-sdk-105/examples/ExampleK/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleK/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleK/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleK/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleL/ExampleL.mcp create mode 100644 handera-sdk-105/examples/ExampleL/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleL/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleL/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleL/StarterRsc.h create mode 100644 handera-sdk-105/examples/ExampleX/ExampleX.mcp create mode 100644 handera-sdk-105/examples/ExampleX/Rsc/Resource.frk/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleX/Rsc/STARTER.R create mode 100644 handera-sdk-105/examples/ExampleX/Rsc/STARTER.RH create mode 100644 handera-sdk-105/examples/ExampleX/Rsc/Starter.rsrc create mode 100644 handera-sdk-105/examples/ExampleX/Src/starter.c create mode 100644 handera-sdk-105/examples/ExampleX/StarterRsc.h create mode 100644 handera-sdk-105/examples/Mail/Mail.mcp create mode 100644 handera-sdk-105/examples/Mail/Rsc/HandEra.r create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailDetails.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailEdit.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailList.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailMessage.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailMisc.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailNewMsg.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailOptions.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailPreferences.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailReply.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailSync.rsrc create mode 100644 handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailTruncate.rsrc create mode 100644 handera-sdk-105/examples/Mail/Src/Mail.c create mode 100644 handera-sdk-105/examples/Mail/Src/Mail.h create mode 100644 handera-sdk-105/examples/Mail/Src/MailDB.c create mode 100644 handera-sdk-105/examples/Mail/Src/MailDB.h create mode 100644 handera-sdk-105/examples/Mail/Src/MailLookup.c create mode 100644 handera-sdk-105/examples/Mail/Src/MailLookup.h create mode 100644 handera-sdk-105/examples/Mail/Src/MailMessage.c create mode 100644 handera-sdk-105/examples/Mail/Src/MailMessage.h create mode 100644 handera-sdk-105/examples/Mail/Src/MailRsc.h create mode 100644 handera-sdk-105/examples/Mail/Src/MailSync.c create mode 100644 handera-sdk-105/examples/Mail/Src/MailSync.h create mode 100644 handera-sdk-105/examples/Mail/Src/MailTruncate.c create mode 100644 handera-sdk-105/examples/Mail/Src/MailTruncate.h create mode 100644 handera-sdk-105/examples/Mail/Src/ShellCmdMail.cp create mode 100644 handera-sdk-105/examples/Mail/Src/Trg.h create mode 100644 handera-sdk-105/examples/Mail/Src/Vga.h create mode 100644 handera-sdk-105/include/Audio.h create mode 100644 handera-sdk-105/include/HandEra.r create mode 100644 handera-sdk-105/include/Silk.h create mode 100644 handera-sdk-105/include/Trg.h create mode 100644 handera-sdk-105/include/TrgChars.h create mode 100644 handera-sdk-105/include/TrgRsc.h create mode 100644 handera-sdk-105/include/Vga.h create mode 100644 handera-sdk-105/include/power.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/README.adoc b/README.adoc index 3c12a53..bf7609e 100644 --- a/README.adoc +++ b/README.adoc @@ -10,4 +10,5 @@ Contributers - https://github.com/acesso[*@acesso*]: SDKs 1.0, 2.0, 3.1, 3.5, and 4.0 - https://github.com/jichu4n[*@jichu4n*]: SDK 5.0r3 - https://github.com/stevelittle[*@stevelittle*]: SDK 5.0r4 +- https://github.com/Tavisco[*@Tavisco*]: Handera SDK 1.05 diff --git a/handera-sdk-105/doc/Companion/Programming_Companion.pdf b/handera-sdk-105/doc/Companion/Programming_Companion.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a436a502d301c927b338cea693313d707364e736 GIT binary patch literal 912963 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
On@Cu1`%z8I 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 d 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 %LR*{qiLe%-=Jejp_t^Iua5V&B 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읎 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%0Dd}plj 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≪(`Rrpr3Ru#uIf#J*5DM??iO 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 w({b{4K zh<8?8)P0h4rBQ5)T`|Hkv07*c=iTvq+*RV-==1AOHX@w@>*7^^!AZy z-nT||*Fs*hUU}2re6@vfGY476mTzykg3nqMH*GohM0VGu2dZ2S1NVj9k=VKY=dU?T zxzE1#yO0ZlSnYS>VxC!-OMR|dFWOnZ$6a-8T!mtG#TRE(*Gpxx&MR!qKR@|8FYnmv zv1W_knB{VE9{Y*Q%s^pp6^d)At^6#-@qw4!gTou$t=g5{osyc&Jqt_>(o*`Hxf}9t#Aw2fv=26~Ytn2j=-S9Vg*CQ}mFVYT)jXeFePpY-@*E18056@FT*C#mC^S{> z76A_yyB>>g?Mrsxm(Gh1S{~Ay)hucdIbpj9iiuTjr*u`C84w?v z{z~xSOPS{}Qq+Vuyjz*`q@{klj^WGz>{#_6&zF0PBg&@~jh^>KFqGDv2`smr$Q7c&*IkRAm9KP+X_o^JHtwtr2~~Y$vUe?v?4*6-T3- zHT^hS^|eUfEP`daC^WMaNW@g0CVLL$S^Bh%6qec5m73*#TGFBjRl(zwQj4XAu@fcJ za=n(xGTO*eu`L{>agm2ri~&4*C4VsAv0A{Jqb5WtI-4CXHjtqxEh= z@$(S!N8u0HnGV%?Lf`S(7u6&iiY?VoNbBhYAz-u_izO{_QJg-zQZ$IaN4eM#rRjX5 z88SgYGAd1KObMzyw92muC*{lMq8f*;nuE>OY2pJ4e7c@e+F6D6R5TMQ=bulfo;@Ab zKqE;i>FZX~4qka4Ium~=Gx27B#|N_-q(=d&72Hi#tTDL2TXY&uY`#^>Yw<@o+# z*^(1qGa^*atVP6Q>Q5P)vlbp7ZxS68ZJvl>J}FC|K2@0Mz23t)a)&Nu z7g5~l-=D}Up0==&AAIQbIlhc~)GZ_G+<(G@RE?UOl)cJGOt_kOCP@zIv8w%!*yxLC zbE!(MXGF-=)Vkpm9?8>kP(=xfpRLU?HTV3UPd~KR$*|g>c3>Wq8#{b-=<1|UlJg0v zYA(aA`oqj~XwJu^Ik0P=~`2uJnlX=W?jgn11?>qxITWOH2^FpYF<}* zVUpBVM<=to7~Yyuptf44>d<3r)er+#Y7kKmoL*yg%cv~~SrcPNn5Pp2Omr)ryuz6L z!ZC|rdb)7QLq{_lZW%c*{p>z;DS~eDyJFQWoEd+A3cWJ$Lc15_xledOmCH`j>aL`& z25l0M!}x|wDH_pR+a#+P1qByKax23A4@#vA_rE$UG&z~2hgvR=5oPRIZnW~yu_$l{ z=CYFMlCv|*KZUVKV&IxLd1*z2LllAOH=&SS;LHYMhQyK|_CFLgg1Yy1UqBh?7)TzX4~>^+2bRIRK1jJjU6QxekPMr_TP zl}zmtO{BiD^Qcl19mbczjo#WibGBe-e#;Vzhzi3MG%;*S2WqkX_(~`9%~ufvB4VNl zvvj=Y6KIUYlRiT<3R-BJlN9OCvM?vjkQuGZ2sDE){JAV#GkY55om0A_Vca#jzmnLs zYiqA(vMO_@D;|+nzpoOoWH96c9WqnljbUn?qo|?uNcTqVA4x9w_w(7Vxn3j{OpibG zEjhx<#hJt(Zx!3JQ@zFdJOk%3)i8d< zi?FRI+WbNn(XHfN%PJV^M@#iuYWJ&a!!7L>--6R$d%rQ_0qqG|mDPA@^X~+UY3H)8 zn7PjuSE~T&@o1ivx}tdLTH0$rr4Y0Xk-WbZzExHt|4Jv^GBN$Cj>HUEHKOZSw4i$o z)OAeVBxcEwOAT@~61uD{pU$uIE}ev2PdtOr6wdIg8+>n8=Cby-jC$|beeZj5>)qHk zUtd$*Kg}@U!`JnpYp^A4nXaxo8FHOs%ZWB5RzCjnz#jRDll}eNNcmexqg%~}RWQ)0 zbtpVv-YPe+eE!h5JLWEEIc#^5o#(tCgF5xwG&__OR5q`d?ZOR$9Kv>Ow08VlVL3oah+oyz{4^kGdZ*4?NuOYPkBfpni&Z5y zYB8}SIZ9Dk3w_cuYf7!f-cg(03>oH?z1LoJ-K*);x+uO-*eXib$>iM|@8lfTv0k1t zS#9EO^sx!^`;SlZZFvPO8-oxayPWII*J>uV)XT4QfXOVed#|=+2!jE9psv{~=ZTV5 z>G8wP3HEDsPwmi&Vg1HBxl@~Gv+DRv&ub;KE3;8b+hjg$U5Im8=^fRxY2{7L5jp62 z>3Dk!S(-W2-vozlIYAj|7xqE8oK`=sdNPqN-J-e7s=_&c^|?~eCM##6`XhoKjE+YG zSC3A$$@7U$)+)}~OGt|={)xJ|$!GJOSj5jYEf=M6N(DPU&++r&ufZ^NA2+`*ak(ta zvU-6UJ(0EgY|qCwHRPcc*?s$_vcuy0H-bggb2alsD9$0z{WRWRx>uz)*U3$|&&eM> z&E8DH^eVjZFn`UDgw%JYifHi>#;G}XAzFB3tIFVj9dCyoa+#@athsIuM`U+Tps<<+ zT+=_%K3{j%zG+t%YG*HNR`T@%8cOAZchyb)9fJbpT3%AB^ouR9VBTTepsNH_#6l>mg{GBNXiLhsQ^ic0jJG=w%8?NY8;!kWCVZhK}#<8lDp+tnM;6%p}+0S zJ9NSlgGXeg1NP}W+b%QoYLqdSlh~hw;aWT3IRl>}H;lP#J$X{=6#6CzJ~U$MD4(c0 zy-kBJFga=gQMDr>pwsyQ;*L#2Curb-o;mZ#wM3OGFuD4j#f$jMLALqNvRb9(vv@!-WRjk!C4BRj6X54@?3r!L}zXh|un7KpR?+&W-_ft{{2 z{2k})gpK1Xs-wXS1J?d1%-W#*)g_5))>v9SIW+^;#=z^kiGZT69rsd0w`}uigDn+e zf`!GSch$RQjbZgCqMlymo)3yCUN7=Gy{n$ytZHPhIh0O{Jk8faJa+JXI*K(Z_BM`n zcdDj1eY&x2l)x#$CrO3(%#{C@X47C^?l|sk&iDc~WTRTsW z;muS-&*VHww`6rMvr>kM0yfPK>XGi_KviP4jj)|Yedu6Tz*MVbjfk*3U8l)N z*Vlj}JVtu|VM%-wt4pE|Pb%4`1@F8o*>3pI@=?-#*>R`SB^9uo^h$W_Cp5G}aK zy?PnFvi!`z#iQsm_-;N~pStRefr3ZtXK))41fdRtQ&T5p6mGs&Yo6{+e*DTPKE762 zp59HLF%&#hT;c_`3{z+&NEvul$bNV^$j0;=7_c_0weY)gfw29N3k3N`G7vFa8z&%7 zkFv9&lbfB%_Y@(Fzy&dL2S+DiGXn>b+cO!1A1BPfiJG~wlbIul76}I@0|_IL>V||J zIM4y^h}sz08k^fZC1GJ<{GQ^6UdX`F1E4xnxk6GtNl zb2}$n2ND*h+gv3|zzr4KCpP8)C=&n>)Awt9d?bHl3u6C`_i%7F`IheF*H>X?0)YSL zU4Z;N!0CV9hKZd60Q-OWATy8vS$@8Kfj$AC-vR@Y{s6zXz*&KpW*`Al0g-Sp-{wgA z{`B`Jzm;PIy88AqC(CVuq`!V{3j)OfAh$<9&VC#LnTCGcL%uz{h5z%R?+*fbh`ts5 z){bw0Zrk?_*eyWd`zQPXy<#J1<7oaLgd+b1kzyj$f)3^eR(D|W+q(f+{1e7*``}-5 zLNVUHE>P;1oKUwJqyD|jk3sfFnQu`3l1GY}nc=sR(X^FILnso$?(d}p#3tn}lIAIr zRIzYyz;QjMYhxyKK*$qI4l#>oBk)E}tisF_E2Y5n>(rrV3bQi{v0-Ry=OjFsqh{Kg zhdcN5)kDw+hw&9`g+T((ZN*)Hc?3qh0Q<-f&JHZW?;dm*L^wjx8@+ZEllvWb9K;JO z3swk|C3a1sy!md?(HHT(pF!kk`0xj2##C6f1xp~a`epU{jtZ=gC>495<28Zp4wn4o zAEYoHLYwduFR}Ak6}>UVXO=hy#&inin5zewbOc7&5LAjRTUOlMPAm#cvOb$M6}AAu7^a?MFE%N<56&8{Jj}lL3oSgT4+`-yNbFH3J{)6V2Ax42QZpZo(6m z1a!ys4e3^XT=#|pTX%+tA@sRJ+Z64-#%*!$}Cey4RoLrJH-ad@wMqO7fc<#7pG3y?0Qrov(-YJEm znre`*o5s4X(kLgjbM6A7J5ZQ9L2zMwW2A5=vQyd{F z9vP>&L%eaEanj1YUM{a^pP3~F;4RKIOR=x7WN(op9T?Yk7jkYVj(?}J+qvpbl*#xr z!`q(_%Km#)Hbf2Vlm)wgnk=qJATKr~>K&luVrQqIwIiuDBhm%~ z65{H|3>WVLv7Po)0Vx!b0)gn)0Yh<8MSVV6yY8f&v5xG;@e+x>l|m2pLKbDa1NYL zde*y;Z?3Cp?$u~{MRM**D*upPW)8}Y&5dG(@_>pgO)@HmCLW@gPDwZ~C(l%pTq0i* zOM*AXy|7I2JSwL`W}NX=(AF{64}4mhB<$UV&s)~<@A&+|Wq+A9f6WmlV`B5v$&7@V zh3$XC=OpHI*y|LIp2$_-mkK8msDgSPZAhx;=JJb$d{~Vk}FN`_0E*w=)`>yW9xX`S50drwnjZzJw#Y7zUM71)a(Gs;I z-&e3guOB6|=4-@{PvT3~$isB(xzn6+wqWYibWXFgTf9~5j^wjJvNKY^H8PyVAP6_C zOt#h7lxwuSY1(Sdzt4KGjK-hhl2Z9;d&RUx0u*K}#NG5k$(wdOH@_gK_+rCNe91zj ziBH9r<#=L(n8-169m6*Fs9IXjJnk!*v?NNbHi?_$L291pK}w!5TTfI>ldMbXOE6B> z6{q-nr0W4p!R0cJH23;VE6+|RFX0%#grXAt?n3NO;q4#ODl*=RMSmvLUj!xkpNM7t z9|?6bqw^#oc!bW7TFU;GP-(1rlgC|iI6^O>;}ZN|l6jHQ;JjZG&zN~gTa7sniNm@5 zh6e>je!5ps%A;A2X?b2jmwo{UaubYL0hI+pRseAr!3iu~016l81U%Z0aqOcn@)bVU z6x`HO{aiH&5x1K`&Hz)tv1g$YsX2$17+a~#|hU&|PrAr-b6yrsq7Ec*HlczRnXIF$ic6Ilb2BBP& zikIRFV{snRi|Qsd5*%Q<>5&mgoW$Rfs*4hD9!6e)L}~2%nD_DSq{m{!kVh$5n2K5fw|Z|& z{5rk=uhRiqd|*EkP61|LAYoqO`Up?=x_Q2K?|T$S6$iVI-6-Lj(v+e@Rw60Hs}(0_ z4lig3T@>oz#d{5oS1))hzt0F2;7LlpaDny`+Cv?3 zscP5Oj4Dr#Wafj9bjS=SM&w9kNaaZ7a|D($Itk#zWn$h+tnsCYRx}zT$FNGOhP-B` z%ItjKtgc~EwnCkVaDByk%eRy16GZM9KHm`ie?$`dy?YOsXS81^(ZH^dl=4Kcaq`Ja zy~QvI=A`1R+wL$>w4}`6a9a~k7)S``X(oJx7?F5}k)xA?iGejT0+6^CNZ)x^(Vu)AAj03*)dAA|MZx`c_8A3p9;BI*{h&T5 z=;2FzGK9=^N~#~~8a^6Ws;_AlmKh|MuUr#rKq=^K>_O<%rGC@e9gg#d7_8d?up7 zAi)}=qoeK`d%uVc|2X!3!@dGo0)DZtumMJfU%$6}>DTk$IY$2Z(9goR|96A=r|bU# z@e|a){of7xKOp|7{by}=7x-%x{{isV8@K2G1BmaBes9Ik-&+v>i!Dc7P*|Q?*w)#> z+{8i7#Pu$N&JTs*PZa-Cdby?E-%2aYbSpvpNGts9SjgPTQNhGP*w)(4*2V;|LUI6g z3)@=RIw;#27@3gV+HG#c1ch&8z+Xiy3heb+b)#J9PrF`-H<23Lwk z3igC04UtS}3_`}8TnAcoxwCN$rD<6M-RJ2hW?x%vRt|@48Xo9)5v4>@MwKbLUs(n(Qkx zWjofUC}3~&Hb3@4MjbC_#(pyCBhxLfPNpP1oAB|)lEeUpDXU)ITId*0Y$}D)p@>C> z#K65`H&Ryl|M6lX!ZtIY zV@C^HDu46i(%c2ecRgi#L>^e>%nAB%PcOgiXOoUQh0qbRp(Jt*c}NuhnMB%YMbOm(i= z?j3SX=4su?j>*T!e;uAFtx8{s)K@VhyK;C6|EOSE=vF07rKd!#nA`W`uE z!5mGs7>YZ$rC9Txl$o`A6_-5jE3%bs7U=K}IHG%ITRt0cfzBkf!`9N&mw(;h`tpgc z4X|uTRkTTTyv=qf)gW1+8$Y7hy0qRl^J=_!Ir5>Gm`nWvX4u3Yt)JNEwdalY!@|I(hlr zDziCB%*Io~)@_^X)AAc#V}Z#Z7-IZU6tAD!;3We@vAeoWC_yCXdwTQepbL>CfGq zzx?<_Q2Q~7-zeFkY`BWhbrae+r<9uzy7Gt8R38m)LHYn%3q@rG+a1GtL@J7Ez4&_E zuTow|{XvuyDO^<@Wj8+FsRp!}N!_Dk-advO3HWUC(vz8!nn4}4GmC>arT*6aVPgii z4uNBnUzi17B`DZ>X5(6^+K@tW;Wwy;bF{MVos*%=BNQpNCk$x4GT zatmxm?v*7TrmF8sg(KW zmYEu`4$&#=RUtQCUMQm_?zpEh8cRCVAKT*cdEq=-$=+JeH0K1{Ef-24yaa99b%}2g zX2S1emN`|uqc<8ZZavv83o$Jo(n~fNR#$g*WqG}Ne`hnruSi?rP-|m*tQRI2F6gK^ zc(8(#g>9Hyw+H)#79X47>HU1R(~96)l*erSoP(bEH5uY%Fs*iv=RcIZ^LN0mbAt3F zE-ppe-Al0%;ELH{b_&7|iY#x^n_mZQ-`fbrPe9$Vcydxac+r|)lsR!)eE1HgCi{WR zEMzt6C-&%k0~*o?(;teQ)mNhB`V{yR>y7O*VIfJM(@GZUFgnNLKoRUc-ptHz#%=cX zcBkFKsc10Zt_;TVz;-U5!59-0!l54<8X6y)Rc^ofRBebkmRuP5QQ8yfcy+bdbNWd! z|7>ZmTGrr4R^17rs!j?;`Q|s`AMf{CQfOzMJEDfm(PnF;OwDH9)qYP8d)J?5ik zQy&{~PJo~dyf$kbBr>{dnN$hGh}>(lDh^9$^pt|v<9c!slf?>;l6?7D`x$W%E; zzicQLoYK24_!`ByPYp;G4I7n0F6>ps%$7Q1 z4~1P^UuS0|mbWbLDdIG{CMqT4shV!@Oyy7Mp_h*y@VYeVm~`$Y-LLsVFRA|dYt7WL zX*K+XM>E|?Efmz-qy%7dI?YM;DO$1WuV|pMu-PSL%9x#S>4vs^O^*2*ug0!C-N*Aa zuph9)vD+g0n1=jdlyLGh${TqT>d8(C%^n{+9!L(WZ+36TXSI!?ets<YTkgDd%04 zvRM4)y4JaJSM5yb0)31)1e$>t zZc)hGpL?(22AM1#5$~#Wmw)6Y>uK%1Tpb^6Hb9kNbZNF8b!*k~g^!m@E^;HYAPP+t z&smH8pAQ#{bdKIuYo9k9O0L_7&;}K8bBkwcg@;YQjie*o?%wqba=ciq7$d$9?F{b8 zZE%4z7;?i=q^`yG;_zBS&Wi|a3~n=bMP-c7qDw?vYpg|RXBlfZcZYNMeuF0u*kj(< zgMXu8!oq6;FkU}pr90-+Z(`xUDw}|t_b(r(P$>pD2Rl16G*$)e0Heoa zn1Om(A!hd;#KicBkkdlzcr4b>hQN^(F|S}CBgY{lW5^+6_?^Bat!x$>J_KvQY=xQf z^VSE$g$nXT*T>w4KwkiR21^6@tkU3LDA;BRX;8mv&Uv4mF2J1iB)bXWG~BK>H{&4U zX@rMz@t3G2*Sbp}pNMNv{Gi<<{4e>-QBI$B)Zs`7oJ@%^s7r-(OR!QM9OtW_$ZxaU z%hxuvRoa-(X{3tUTzaPUa?su=lwj-A@LR>T#K&cw&&UV+bxh|NE4v1ry!meRUiV^M z-h9w;muAK+ePuU{Z4~u|R4ok`Yq)xDGN3 ziFXo%@t;UENZkYvQdS7OpguE;%~Ea#xi=AAUzyxmzMgwT-xbC14O4%^%kS~Kwx8ao zN?uqZc{ir&@XN;6LrB_KQkZ`;Ycum#%ovd$=baJNNqjVL zBP0w;CrnCMzaVG6MqWLJ@TL?1gM%3Gg{gwD7T_L+cLL`XAe;i91Jm=%Az1)JIYQh} zNUCtRRb6L5(I;%PGiVGMj)xoXxAUg?G~hu~vZoVTM2pUi8)?>&JG~!(w|8Iu)pBnP z7jwwlA~rQCT9stxcjFGCAe-9PiOK|tDs<`7_-H4!J@jEs6;paR!OE8#u{bii68l1N zoN4`UP302r&or7HEWtUV1~yQCQoh=r^ZY>~OS5qeynx zBhWMP68CHF%FK#h9DVN%>4=D7j7TDxgiFjeMG6V0tV5u2)CznrY+Tt9dj1g9cyJMs zB@6!9Df<=Rrf5NmhGWFkdimUoZ$iFi1ZzsOMnN{$McvV6Xw;aDhMuX>f!faKs>Rq+oF55O9m=O?Ikr3FC5I9kgxY3Y!(UABtkOVQ1gt3tK;~6 zOc^lDnJ_GwFsxZHY}qjE*)SYAu$;NDT)D8^d9XZru)O)Od9-uSYa!Kr(7XGHygNX+kn>LVDVa zWY&UY-hyP&ifq}2Y}JNr-HvS2j%?e3Y}biw--+zdh2r=Q#pxZ2b2o}hH;QWy%ClY+ zw_X(Y_oyCysGfbOUj3-v{ir?zsJ?@!euHQM!`}>=01|uw!zS(SElgO%ynlOc4nZ=t?2$ItK~N+ ze;KMwz}{xRF;p=X&?mbXkebwKRKvRrS#goX!n>{m4azxaQG!1#?spWT5~G|tpF+i@ zz4X`}SU&{c=aDZx=7=)U@O9UTZ>xuRr_Urec=#F%&Cju)10{kHmHNdKy=lz=u%aNe z#!~_N!C7{*i1|Hn%o-eqxx$19#;y93Ib{e#l_%)E^a$uNN)fRsk?5_@mzsgF`xQ?7 z1+X;)lW5!+e)CedNKT{lbAlKH#{*?cv6QYkwCbQeSA>>yMr3ctS0XA>>AGkRly5!^ z^d+o!ezez--y6aeKCYO+xAe4Q3=~mhA&;UdrqNDYk<#4Yp%FE=>NaF8%OXvN8bMQ2lqdi!>6f`ayxv z_lrk-TG}U?VvoJ1>RsN=xqGKIz#rRKm?)G8nifi*mbq{cOQfj0?jZ0E&X=bfT`BV!|g&Cd`{eDsp|*$8T6K3_k~L*$UY=>y5_FWdO=515Iz?kF5O8^zBH<2uTflg>0bwt5K7%A zG9+$~#gIQ>5;LJDLBJ-+OOAT=ddRMebUm zk)+^d7-gZ+W=iI!hBWWf;&q>5oYb*!+0A^@V~0xj)mj&wnA6=^jiRy4yh@Qi0Ja@Ys(t)hFCvD`6+SZ*zcw^Vu;WqhL!?3HJ$I?1nk4nv%y4Ei4@|z9N#n?N!_gexdz% z?+xKRt*r%R#;vcMVQqnAha{MM)s5)ZRnAAekPK4?#tuZZfawUZ4()dkgu#Drr4&v6_o7JcQ-jM)`)Kpwz ziFe1wJTbDaPd{{7t!ZT9wP|-Ut1)74T39ES;e2)PZBSe#NPjo+a7cs4)zFHbfV*S# zJn5^bn?ho6S_MPbHeqF1iq2EfaBi$!mA8(4@1Zs3l2?`IKLTsV2Xsr{q`A4M8C8>% zn5bLhA>WHs`8=L?DvrSg1SP>^V24U$gmvQdvc)|l+sYGo6+DJkj9YB3RFYRC$(cta z(KIR^0ECbc=C7%jjJLP&Z;AVYgV9^Y_uqxie~VH2CR6rWK5_>DPV-kVowO4-OG>}ZXJ8Q$m;T7{j{e4v(TF>sH+Z}~}m;T;ouSpREBmFC(hDUz=mshn+`CP1SEy2p5&D(6$;jbZ<|*r8(SLd#nSd(lZ^NMYKrDnv#m!cwnPJKwdW@^jUpW70_M1n z$R!pjTEQYAxxw$6QGdGc?qZM}KxeRi_r3iRj?MB@F1xG9H=fG+w|J#*Q2xSG899F| z@|Q3=yC#SPEuck$MJZI|;kX2gW~i91pBb5Es7TIuU9^7Fi1@-mgUQg~%ars`#)5>5 z_0LUulhE)>Uh{(^-1Ej~{xFD-r>fVyV4K^(*V)*x9%%$|Q^a`)~R-1{4bR#}4i6zVIa-QA_CX2_auy^$Pw=ViihcE-i zsoxk;|7=ro25d^Xw>G6r64L2TNuleJv?^Suft)Xo#7G3wNs`UXVyw(!>?~s78rLyX zj#-~)z@FuUVYeb6K|XAK%m5<;7Vk>{2M*iHtxu(ZsgBg@>yC`|-d*q*Qw3!Qcbc+_ zt4eLr6MfKT>WN%^K^=GOi(N|Hw2l(3D_su;8`Of12l7-F(xT}#&0i}IDJ-frUcOY+#dS933;p;?Ec0Zd`cWWkVW0;oFD z@J=*%;!qUH7(xn8VJ0Dm*cF&w(q6~7A+q_64*5*<%^^j823(~5J^BlDeK0J^n7hJs z0KfA0sR5w#e~fnkR>#~1*Zg1C#oU@l0FClbAvfZZl47?ZH|)&+5OVWF4gJ%)m^+;E ztUqO*e%WEW0DE}oPIl?e~7x{R#ZMUnun~ch;TvIQVi=r zL3wXzK5cR=laMa5j2e?ixKiP8)>AeRSn)M>*%fw-eTh<=Z0C*VeZmPKtd#JC2i4$b z&@l1>*rqQ`7P=XPrXO1?!0otwjrEaOAL+L{!{bbmO!0hzwIgn`Zo7KT1IXBdhxR>b z_fO6P__4Q&-q>`Ed>A-CcwM%z9nEziE)2QzQ21R>O!o^oj(cB?mv}g_u>Lqg?dPLoHIxPO8+5I!Mda3G{y`ghpFn<+~E4XWl z`N`*gVOsw)a+tXpsQb)t%CYjd7Z$Q=*g~6ej%AcxFe3Q{;v8c7-Y-6EVZ(WU`TolV zuayOQv|Vgf2NNu;IR)&F{?H-XyO!)m-Bx;-DPR076f-bR;(Q+TCw;hEhWT;jDVA?y9joJ?ClYAS&AzCB2WeRy%ogra>|U0WEIUgO2|h zu~r;*XGE~pt8oT>h+?TQv{&8GV*CZ=_>jl(f$Ei1o4OBE93m;X$Y%T0w$f+YYVMK~ z1PdS8`|s-Bwha*2B-JHiCy~FFj-?IXPU}&9wyUt}qOv>Xc7VnyEw4>~Fk^1tedZO5 z!`sO5J{)oGslsY#Ub=D23R*8qFLhk%3PrJ|(rlhoo?v~T6UArnQKP(M2@1)l68v#= zA3RXKkcQRhy`W3RseUYl$(xHixeGZzC5nHh(7&0fSby^BKOywDq>%0QAAxdZ<_hj( zv3}A=e1Mz?#|l^f5se3D8Usc2d9{fDFusJsQ8=PQiD0}6{-_k?gZ+@_Z~>q2N!>LX z*V`ZD6pHryJlyDjHDd&~_Ql%(36C~+9W z925OOPjIdM`qB2WeejZFBb8U>^ggH;KK_HDeI)d!FTUKXhe6iaG}yD(t69$Zta+uG z=j>QFsE)L? z+en((<2hK4XLCROjC_ls5Fr2kj{#_zc?Zv z&CMf5gSAJs4?KJHh2sm)7mp>qxGzF5J-B2>VG(F}@aH|bpe&-icVw(Q1E%+Gt}FBa zUVaUVEW8Vs|5YGj`iJw&@+BZW*DIE__o?+QaHA^ z0ur_>K!>o3FtPZ!p=jQGGtZbyd2xTNwo!l|1FIH*9EPickZVOgf_y*%lYomW+(js5Pl7VTYNb!~25gFkN=t!V z!#W(9gD8Lb30GJ~0nVaKZc~P9)E5x-+>;f$B@otx4(k%iyI^V_WsSW{j!aY!oS}i$ z7wULeC4A+Zr)4;oTS1>Lle8YZO;6;Oc3>|egc|FJaVNy0aIu$K+D_3!Itb5u^;X4N zX#6Cv=0SA;n)w4F(f1Te;Ia4?((CtXKS;eR{DhTw!TNQ7Fmw84U~OMC-d_lzS9Jd)g$2oolop2sopOddTdJ!DL$z5TJyBC1S=tGTLrW56br z9jgv_H`iIW!TjUJvH4ia=UuBUDr4B}YyUJp~7tsvT z-A_;e9HNza|AAnfz9gji)S$jUOC$_2{+gvVBTJLr#l6~OtYCTjJWN<+O;eMnOnV3w zHI7XmK(21bpeM7Xn>Nv7%Km=+D+&rHO|C;^LS(@k52_em2d@t0V_|=(?7<9&Qm^XF zVYhmlPSNbf)H-SVRqUm$T+s|=&ArLd`?(%_xfiNCS<(019VkRI^p?NAc5yGndZ}rk zP2JC!q`&>xV^NKsc{8yw;SZEk-AM-G!k4DjKoE~bjC1(SHc}atReT~too>21FZBylW56LaiqLWNIx6jG&pEy>`hZgy9stP zQ;xrwQyx9reJ7NXM>IyS8ehI}F%^re^g9n^qrh`j)lDClZBl)$*P`i=J<6A;t1=^R z(fy%L_SBAnYRJqDFgV;3RFMq_<12G;brz zkaTyWlla~#nWco71WKHfB(|hQoL-)Vq(Ha#pfyKRp!}Bwu}VJ zWO`r4h2VG6vrGuj}rC z6=C0a&aVN!Y(K@wyCfA3RuX1lq5EGM)lcE(7eR%Q^S1<*Z`wWsl0UyjXeTK}Y-Num znG42SwHG3!c+(29;-wKuKcXLvT~zj0cb{^^R?A3^XwvULx<|pmY$C7#F**= z`o!WEJ7+Mk+FJ9*xOwr7G5Ue%mqXEbNRQPwY7xPWrcP%)GMTsPxz<5jO5-mbOUExj zse^|+Q5~9=5gJJ*sgIsW_2y%uhswo;)Ekq%!k3N9+2Zf)Wk5RQ373+RRF2Rq&?~(P zH*KLpp_(a>{feUxwsxV^e%A>7DYV_yecu`V52fyx`R1oU@k{^Rddq){(ep|_zg;JN zktbXnW4wrwuYd_Gh(I%=%C3X!W+M?H5S+YSiwV5h?HXy+4cH)GgI0JbUn7C1`bawXS#1u8h*K<6T(8&P z=(cMH9P3Q$=I=m424?Yc8@a+grD2;krps+xHk@NRRCOufdE_&;l8Fo>wq#($W5rBY zFWa};V=>#fh&w}7GW+mQm%KtRJntT9dKjTxPk(JcsP{t{k92RiTP$_>r?ej76}(B5 zx|7ywu9o*bOQAHnS~eL*`4NwyMJdUo7V|G;uj|?~Uo~2+k8|qEl35~KOh~ZD?LOp{ zat}J<9>w}h8#hZfd+UC%h#BK3Mk|I^n#mi@L&(#WVBPp2te0)vAi5)Ialw_2@+0KL zQ6k3v4s5dDQtT}!_(yEA|4nRT|F0oOfQR`n6!Z{KA1J5@y$!cR3QWz}xF;eqOk&M-`H;$zQo^Gx)#kZKa@MYbGz*6W8=w}jii86Z zN6al^!yS-Lj9IV@;9dg!3}8qQfRShchO`x2pMfEW2us1BArRRL!3yi--jwtk%Qr3X z-6eL7MnxFT*oEnIv*|MKTK!Mipgn2SP1;h)U%mfP{q^F+nn~!!6m5L)(7Fw zHC;aAI}K!8dh4X2O=l0&Sx*l2rnR?UartO3$vf-19-JeUJuMn1>5vf%iGad`X4>tE zG4_n#AYY^yA-fGZ>b?y*itUf>kAEHG`QWQyCir=nqDS0xwp^jVkI%<4fZyOVMy}t5 z|DV#spD6QxUPlW#^FAI}M;rDS1%l>OcNhX%_0m`G-UuIIw3_F!`@o}#l1c2qPPZkC%C%? zcXxuj1$Wor?oNQ9!QB(w-9m783ob$PhRA+f@;^JL-np-C-MUpU3~Pkp*WGKieEl^) z%J{QdAg^}bRe)ruU@KQ!f-o!*E#Yq&FO+uGcPl2ZX}oMqIgYOjf*yb;;>2rPYUoDL z4h^2a3A8V15pXf;$HUq?wvg$qH5x9Ear{tl_(ghxnZQ)H`qO;oD;|s$s_sZ|eM_h= z#9mp?2BowWCRS<$hci>9%!trh+DUpM&{)7&hV5y*hOqnLggMaEmJ=ObvT|uVRtC2Z z{l^72LYX@c+(KN48%KmCXQY|sBV-M+oc z-)$3+;Qp=M`KLEHgKG+ClDCh+8Iq8FS1;zim>H~?o~Pwp$q^G9z{^S-X0P<+Rw02v zsg(A7L;$G>PsRTHpcWMVtnT=H_@_4rFvSFrEq>A`9gulVfCh zx*_9vek%RP6?9o=Y0=wOkZc62`=tnoR&`4R4-;P}q>^Sy zKNo4_5|2l6mvUBR+RB=SfC>YCe`oPj= zCsR*tC@L^c!hz8MLV|lTRM2sdS`glL1V`ZKguvnuz4H2?Y+4PrzHq*@9bRD9(2JCf zx`{g?Zp-7YjJq;X?p~cXn4d+^ZI!RU)O3R`jWa-rM}1E_)an&m z!*P@L>Z^B>c!g8>2m2CQcim16c7~&QhNq4wJ}EoVoSElmi+~==q7>a&=s5Ve2NE&y zG?HWSC+EFb92~$%;qS=22S2GlsgyS(ejL+E_#l0o!Rx-uES;}Ib(uV5e1G@mNjhmv z(XPLe&c8ZF98ZVsUqDv?eAT}kza0O_w0wJ)znkmtQXl+;a{#np@XZhAgRH3}i3^>i zS83Jp{knt_oFO^RU(CAfvm?|Ob%Kqp!o=)iyWocozAFLun9x(wQyz2*W8-OHeU{{7s zX`jNvOxL~0Ha#b#&}c_!ww{>L6cUzGU#~3g$ClB#98O&`wX^-mr6AWLK78~yCEF@< z(sXaQmZ&bv;L)e_CGy!{k`0zwSufd_bjm3a?VvTm#~y6nL<}C6+^15I2tTKV5kxK5 z+Cf+gpBf&4X?vqdPxhr{#0sH-ys1UnW{VYzbdL~=5Q`|4$W2Bu{+{HeSaGs)Ad7fI z+z}CvpnI5Ogkzjz(gpFJs{3(nG}0}0Rt0~ZM$ZpC#|ByKr(fv6H);J{HUP}dZ&@f8 zz|nmwk}G6CxjFga0tzwy{z6%W!fVL5U0LtwW-&rSvIHzCItp$(}B8W4vzb|8oBY*G%vU4SG zB_{{`8b=T@LSMKeuhb58n!UcNbN`lXowBe8%lyqKH+s!j*S*WIZY2a{S;v}fVJ>wu zI!gf%^g`o+0-tZG_anq7A1Qtz`0n(*|H?CUz9RVR=D0B zy`jKpThj!f1p@e`L%9m&Hueue2gcrUu{S)ad^KOO(v&Qd}eUdYem|`koDZ(uhQ?$8Q%N_H+-OvBC zcyuX zEI3n0K$5y0`U2>o9f$!8%$KMA1w>S~j$j}YFezt#Z+2qV68{JPE3)*lPIWOG-l=O; zJDKw}ydJn7E7j(sLUz1M6Et0s(@#_FdDtO=exbk*-RRea=ZTj_g1RC3=-PPH{_a#c zHdB`)+D$L_XUog55V3;$OT!*8Vp+Qd;$#Tm5v{dZzjKyeXDZ|qhy$l{b*7X`XgCFDH;7MXe`H12MOT3{)N+u$xoKNr-#_S5rut!(x2C#R-S%;;>i28+lK@18!%)BUIK@1OW-_4~c2HMpM-0sz8*mbpK_5!{+^d{_G<84S<&~yfv)&`_MRj~BAy7&PiNi66LJx<>F_VH2{#}%ft&(` z<7WoAJiuP<@T*LK*aW9??L!cPC6Fch?eh!6Z?VZ&ng<(G?gIq10sazG=7=a{SaYc* z0XdF-A~$qOR}YlskGTKj3mFXGsvHR+O+NCb&LMJFglvWotBq7t+* z^CV89`>|780NxRYm_Z)pC>1KS`@5khXD9h}wD+$Lx}UD-uXa+#CsaB>>Hg;IaQv%- z1R&e|`)htWNPp6S|BFihJ1YJC@dxF9MWrj0{1TP^?VA7NeEYo&K>r`nUs6gUd9HRh zs>l=LosrZ>2Za^0F#muXP;o_gMRN%P9{nc5vHSj0yBLkIW8ZMx%q~}4+`J3`9O9|v z=pJkE;0uU1L)Nnspr`N;?ngC_1sF*W(iY%Trh==T=yoDZL$V=!Mx1A?rK!cha!vA8 zoyrjPPwmhXXX)9X1xLSff6-OCV6w!id;Ge>g#z15_QC_@0r=Qe%v|wHoHG??TAJiR z%}sG&jGDHp#llNbSPb=Di0@0ZtPW4O8&)$=-0nsn?v`tb;7NUp=QM2^S@ zVB+vd&H?b?Ol4{SJeX0D8jzopmEehU&%Ktt4N<5H597&Kga$Ba*#K%g*9S40zpygS zf6cUU{v$j0ZRH>G{JkKt^QSxkO=R_nKbX35YS`q)EqPEq^RO|k**0S`bA z8Gb=Dzyr;$5YAWZXlvVh0(`U8#q#}1qCfL(zuGsSwoT4|6zjgN{7s;Y48K)@1?$KL z20{b^Vo*SR`Qz)tk0Px2=a(htE2!r{guP#uYo>_;G%R*-M>+Eyk3XlMFGn*%J%0{H znGe7p+8>wInV0RP3qtj#D4LfgD(<%!MzjHPiUNsrdcXP~|I4!;(2c;%`H!>y+sfbm zNp`?fe%k zfq@Ye6m)fUm6n#~?(R-TMrLkq4hsw0(b2KKzTVo}IyyR& zN=i*lMMg#@Cnq;FG!zgJkdcuQ5fN!=X_1hSz`?^72ANMAXyM+uPe~Zf-U;HBCrJP*YQDXlR(7oec~OeEasTrKRQO=BB5o zXH88_dV2c7!NJ|#owBkrpe1u>XQ#2T(aOqdVPWCq$>QST?(VLXl+@JJRCjl`qoX6B({pTWEFvPJ zt*tFQJbY+qsI;^c&=n|>uL1fi8~f>h{a2yS{}8bAhq3+z*eNb9FaHGWnf{l!fb$=I&-C+zn@O5g$sC>+kyaRlSAq{S z8E~g7ITp5?+@uG9G?Tif9KJwBZwb2Ht3^duPbqpLXl+(@opEr`eBLC)7`vAGgW45k z6&L`|%);9RdjA>#9-D>Kg6JJL0%Zf4fqEV3Uncx!B`brUD^SJnipYPA=}VYABNA`= zGcjSg7faWpIXYwV36TkN;yoC0H|rlmtCoxMT&S>E6bIjgVqtYP$WJGmKYj}7HzS&P zZvVWlYGneXrN4;A=5r}Yow?e7KUIAeLjr-CvCX?7!6A4MT0%vXM7 zB$f~%fldrF5h;NgNo*Tm;cscSn5Q%wbU~2q=^wn?7@+e&DC5A6AWtoAkQbn!-;0TC zc;osXeBmr{Ex`fBL^*wW0A>)cV)8U9Q?NhvjpO@|<$JXynMc(LYWX-=QY*sjYojbqhOQ-vKrU@ystUI*o0(K-yB z71Bi4F!2pt;+3yBwDgX#JS@_}Fe-$E57E$X8=uOf(_5;JRascA(e)4@=OiEl7}Yg) zjEiq;WczLN{8{Q%_+IK&$|mgZ=y)zKEocWF zr6{k2>g5*#h25P^xJIBaAtf*m8`-dmE+PM_kW>(t1P7Za9lNu~LpJtDqtG)3V3RDA zU6A*__*n!eK)iYg449by5}+)zHhPdapqfD&P*ErxlD5qfJ0*bmEUMA(!zh#44>E_} z9wG0~==LRt}#tEu6eH#z&h4GO!-sI`@rEW_X|!i6 zGUH|fn?5}AQA6B{pr{Bt!}cjXO$(oS=SnLxg26;%6fl5Ep3C1$ixn0@4+tkfzx5kN zf9p5IQas2z%X3s5%fr4v${WM16D>ruZdmwoo%}>$;4l;u_bbu-Oql&=^L+B%{#>G9 z0W>Io-=Y5^&flUi_($blDVx8)BO4&j&c;7i?jxbU?#gJuOws@>4FY)z+8jFkFP1g~ z!PT1Fb?dxAQ)g?ctv+&F{(5u&#(_<@D$~epp(oU^l?h+$YP8 z=0Ayl@an{gMqo`{vBW;DStW*5p;=2IO^=9xBO@CQg${OO(@XW4LO+;Bi`H1Fu~x4A zoR%bE_MwaEj@Ciytdi(l^UO8vfJ>`w!#(4z$t80%#Unmy&vTs@N%^4aFB-JD`{-*N z8cLd*2?yWgq+?tQF6xFu()$#j700USuN^>%k^Pl0f2PO&voL=gxPJg~ zSQ!4~HvGT+4ZjJ*`8lxQ$G%yVMYuUWjz~fF1jLd53B;L9IT29@;BZtXU14crvPR{l zQotk{vIRPeo@>0{K~215e`?a{c@5tV<_P@6Y!CYk$hsZ&5C{U)aCaOCt{!%_y|*1* zpYQbp;uY25*yJe*9{p~Ka7Mme0r}40rd9=~3%{!pj@b5qaUoF|(pZ<<~g z6Zt$#EZf|yk@QJhou@8?CvP;IS#_wHjokboCkcaHaB(s8z1Wmj&e6{Gi0I3PnOc>us}C?*`=i+{&%sM<}y!vp*vaV`m|!RtTRVzBtZ<)M{9>-h1$ zGofSdg4g@9^J6nSQ*L}6-p&caV4`=_#T}69e^crwN2PWMYaApvLS(s6cAQ<0L%d%S zdN$}fwZgo6EOB`$8u!p@YTI7I&>w z69@17ja!Eypn&h4{iR`0x@1YSt|13rRCpS74t=|v@j9&u+`0Ruwb+&{NWt|L7C~E@ z;f;jz4kLYcv;Ou-j%jX6&b3$^F91sgDPbR%Ou{-qulO?003ber_r8u?dtiGCldySs zlYMyv;%$>+>AWb)`#Fj(O5?k|M-mtigcYdAz%7{5DGKdqSa_lP78 zlcDVw8J>Y%>O6b}mhG7qpoLP9GVS=}SU?5IoM{Zpk|-TdQbVYA@VXBEzj1S^ZtrPb zX$`k+7wt5*v2@w|2&K{5<6g~sP+Xr{F%>}bW`cTpIyx4fx8{nyqg0M6m9^$*1*_)h zwffx~y=n5q;WYK@;|O(^_Rd#)3>{P>k790aIWTk?Nzf( z62{eR-ty3VNB(l6DN&iX+G8%_YGsY9&i|5WV|{?epGrzJ)5-Y8HYI$^X|ks@nf%%p z!xt;E^0Dpf%z`Dmzrpmm`}t?N-r8d=A3WFT#I1*y&W-cb)4>A>ycQl!_SdvNY&u{S zHi4hfO1%5)U#TvF_;^$-g4nb{4O@|@RS;+_g0!`b)@iO*HrKT!)HWKasU}me z%=DHv90%86_};jIYP@N9&1kV9X=y}bVd2IU-R=&{J>|Y&&=sB)OJ7+|r`k$@{l)v> zxUK70jV)L0Za|;Al2`Z7_b^H;?klbYrZFDZPpAC>h}6E3f$6MdpXN&nvG!#RhicX@ zq9Yq+eBNM(JS^mz{x;cWUMonIe5IUo*b%}XU#vpSmH}R|3OQceY7cfuZzJ2<&?e_s zN6`J^9TP(71K~7dqMP1l$f~HKVNeUc5GQG4e6>4)QbVfq_IU&YJf&2~X>Y`XltFHQ zAl3Smw|)P&eyNUllw9*=e7go@sndVs=B0(iQ$You3mNBETgJaeLEmQ6{KYlsH39`Q zIPi=_FuEB;U#Kg1Kqr>J<4@|hRuL1g$gCY;Z_3x8wjloPhz!pnfDGF?5P=NZ8BgG6 zVNk*0Q5e>md?5$Pns-ig+BE~OUw+XEsK~vMf_;R>7cVGyFDdT?3HOR)H|(9(L@D~4 zVUj87&VurQ7}yW?k(=(C)&xy1X#*`P)iE>SNG-F{_`|!w`1+pVlR+F-VKv$cI_qeW zs_V^htBJ_W*Qst}!)zZ|)aq!8$#dL47xA2?^;(?oz3(`{u6U(#TtC}2Z<*VHPiu0M zTGwC7{ld(#8Zb_(ERILaIn2`kP_vqJPL~8iJV3lw!f%sez%0%#ZivJw4m?hk(4E;&!0&wAj{PDZo$P{4aj?Z>4#E(LhZBWgo*}`v)ms&|5;1 z`Minmg3mHw^p zN6#w!h19|0Vy$cYrM^q7Y@hJSFpkpjTp7FS_6RGJMaJAG9=@C5Av2xPut5OFXrXF! zXz^%?zD|brdu_w(p^tUg9;TH+;jG*0#KF!WpHZFCjOP2F#bA*uk)H=iOKf9=@*?XX z)5Z~UO54X71#A)lvh^T<4r;ll4r(z#2lZ_c&hDlAkC2HGDn{~GV)+^V{6{Yv&}#9w zkm=jXKm4-a^s;|Oz%QR7;C50fKm;t%+40=-`4(L#BdU2=ryL@Z)#UC;bYX3fUwJ;5 zOA{QDR=^7(+KE-dxpBg^DMBRIF-oQb3ossp6DeTJ*LY9diu!tBn4rDDe2CytzAo*G zSrnC6uYs@O7UkL2irO9EqoK!2PFkUC$hWEKzmPTZWn}JC0S8lO%?Sa&BH4;CGMpHY zo{W`n$D(BA-y&}Qb#zm9e71Mh_hb%eAHRQ zDfGau+(N6uwq-EF%Vd!`cZ80`L?zITXqejNbLfmgGrF9vMTv{%p}tkU&Z}sd>5Hmu zB8%+_iQM>n>u?%KbqAyT{>lFLq*8I0A_lL8V}#$3h)2bxlcf?iNmuh%i=V}9G7qrd zLQTB#bJyP=xxDlGL6zab6G!wbY5t6V{ZHRd1H)-lEJtdnULi;^rvwt$5=z$Ca z@=Tx?AaqYd-njV@0hEluLcTfedBE6*GnGQ>ej7kh#7`*=n4NH2Ho>F&0FM}t_0zR? z>vglu#dF7XQGKNw1M;>MNL3_6vO^IFlx?gpL+Pfr_Uo<6u$Kx&98!0u3+3BHycG^# z_B_7lNFPMst`0=dDLpYr#2~2d(|Kpb^f}7R$vNjNTuEUbE#Kj83xz(|m9t~$yg5Be zx2Og%>Wy~<-|5|lRNjG$XV`WuaZ{zS`p=2^MI)XiM&K}!V9_FLlX#NslL%BtZ$b?) z0QO935{GZ&_dIju_`CwOX%puSr{Eo5;QfezbsFOOe1f;Dz;`w67OlZvN>r2w-Oa^a(K~m1S1%!g& zacVIq(h&WwTTx5v`s_B-J&yAe7=x}SUs949Mohb}TrU^Z31(zuX8Ln}s-}@_qU4pK z8VEfBbhD`MiJ<@D;`}k|=$99V9dL2}k%|4)QBmr|B36G4`B$?R6uKd7{@UBslIf z#CM^~i8d!o%Hpf~*et?g(=M;^wh!L73j&~x>5K-ncdfyQlKR@J$6ljNbt;m3Ex}pZ z@rr3Xa~cQf7Lgj%%4W3}_#r8FxRGfEqdr z(?49NZ!3S>)|q}U?81#MdE$H#bs@nn6V8b>C&4ZfCa&OTK`s*}nlMin`*IM<3j!%q zV=|U@jBF@P`QXi$b?vQd!E|KMlZzqZe>6e42#uG#pn*-}c9}jHln8p7rw)0PpZC2SOIW z>Qf`1prDN_U>5HaCWr%2SYQX(?h{iAgcS6q#`;D~_GYh49qC=|O>L|UoE+#Kp5}5;et&NO8>2BZK>k0D^*>ds zzOVh%fM2mT{*1<%m;oO3UndU>{bf3mc&LGqp1y&ekrC>No#XkX(*!&;BU8;VI|ERt z+1HpYq=Ta*eW`eTo?)tn*B!Y$1=^b5gKwqjE2LF%J7c6GCv0v;jeOo z2e`zYR|s0l3^S?(oN6&}z5Rmk9}DUYH5#3W}cqE5jy^Q9QSLi-~<=B|fUc&2&^_MKo zlXhSuTW_w$1dR!WaW&1}V^K{#7@n!ZgWR$^hZjT)7kr0)4teQtE=5w+17X?irZHnp zpvXBWIPHnXEKg5PX_S=0=K#SryoHNulpPoa!{tHWix&0{JGED*J~hZKqVBx`vZO+^ z(9~N|m^UvbhM6?SQw^1CW+G?9AEZY({OBo^t(bM$7ZCl0xkoNp)=2OYTe-qLyD%9O z74|~~nw3KNHiXiNGM14N%?r~?-xZI&d4(9-irF`Jq&MU5d64JL1$ku;nc=*Jq6EoR`*0&Xf%_(YJIdYo0`> zvjM87@PT&u*duw#yGpl`d7%Ra@r@)i)Le-lRoGP@Xa=j0KiI~vE+IB3QLQ!_cW#uyvMF{(a29v3ux!GVsF(j{Qae=ja8TU1nn`mm zM@yl+5akof{!EgdRFiR0{@fY;fzmXpMHK7Ii-Gs^?^oQ(`g@jc@UPZ@@LhNPv`Fym z2~Y(t2J!c9RRpNaY z+UnAxPL#-g!>;UxFq6=wwIFe&Wd)sov;LkG)dSi9vCmWYO5yMftTkq5pxCl!B~dRd z$HE|Zc#V!DC$CU;cGKiA_T>f96*Qz=fu;a;V|2})OeU-$WvX`^SziA(9X4TGrvW!P zZy#%G-_Qvcm7-)N%tIlB>IuY3Sf+U(X~$&fBh?^kg=;_>VM2!165+mpVr2Iai^Q~M zd3a4qqzWnK&ZcI%SII1KO#&NhwB!v$b4Y$66NY}~zOt+mGzpJC#}|ea@GA{9Pr{?@u$*Q537K64Oy{GLyy5-PcT=~9TJL6LR470q>**(R5ruk z2ahFBMCF=#4%I?pi7R{st2o0tV;t7fe~kQa2c21o!wBBiYg~Q?8O0!pFT$r=Z_2`) z7kt1It>q9r7wM;9F58ER+v{8c)9@+tg{SL&Wr8jo9+T^MJMhEX!{o&VxnmuP(5rw< zIc|J{8KGnAkMDV|OlRn-7$+1mxI}m-tAvE_PAbP^R-FY@!i&WP#2t6B=te?Zuq2y# z&6VSP%08&Cdh@R`v7j4sml~RuzfQZVG@-JPec&6J`jA$1%}ObV6P7IznkF<8k>sdt z@eaC4c3bt`0eG4nZTlTc^}#d za{V(l-r*>W=|(-S#AUchJ52L7E{M3}O&F*7>|IWq_Z~ZBARNu#ulRvnb<`8lb#0BT zj#FcHPuyUOp-91`L(s0pq_rXYymUFBp2qVIwMa9m{V2AZzidXwo2FLb+w4}~QdLz1 zIRYEvWV&1>yJYh0AP1xI;|Dg;&NuAG(TqhJ!(Chwp^->wJrlQ_P5+VCET>X?bt^BdlQGG*-oZJ6NO?ktx^-^Kqo0o+?ve0A0p?`!?4X88Wd%xbTrf)lrQ)8K-Nn~ zz+A_>ki<h#a`Xc zYLUDbCt+vhWLHF2Up5F<%_Aev6P4ZDxp0Vua~ND~H>;96mJHigN$gZDsY`cUR$5Vg zk3Lxn_TIUan(MjPk^SP^xfw;O)&jJg+k*?%s#uVA?iKmlD0N}dd3cz;$P2J8Oi2N| z1bmSN(SGLkf+qTT3=kjicOW9|i20g8G>|ZAq61Usb|f}=F+P}O?BRzvDK-^z zq6nan3gs9!O8%^Y(*nE!-mkzWNUZ&NJ<3FjeIJ4LRRvuTwLqHSxAJ$Biw0XfKYf`7 z21UQfWgMleTaN8jPorR)w=tm2$8_MW#B<;V8U;TaCqv>!na!?K$e%Wu$;FpOOYwm` z@SO|WF-W&6d>iFWOsJa04d$!{*hyd*B>5zjF6bx2SD%%(&8oAHiJRIzq=8-Fab zwHywI+`cD`DVD3^YHwM$JkRO$cN1j`?AYQ*j;UyqJm^-H@Ndgx>|ipAcTf4Q{L0|uLgz+f6hmA_`{ z#d@aJF0Y3>4m<_A#Sec1!T{rdvdwDLOk~2rX6#AGHq7<~v3?-MY1&r)sKCKwe@cy8 zF3c%m5KYllnwK88rgE#1i|s9C6jrjaXR^bh1;NP+&UXe8HRLb$yz2!r1-g@lJdgC4 z-v+n1KY!_W{XB}A!(@&(d5#{}Vv?K#C9I&gj8!QUsZt=J*r27;cm{(}M<$rTB()BN zGe2oN%x2^Bt&qm^@^MQ;mPlsi>@N3lwqln_1HR?D*&&gbx2LvnT{GonjG9%WWM67B zG6Ut>Narutal2}}K|iD68JM7lqzyhDPPmmKkVc|W#Rt6UmJYrPJHoyf zp&-L0^5H>@R$9L$qy7%07I%fs#B3gll#@$O@>s8lW~XbRIY!@f zxlZql$~d~^IX@{uRoroJ?DU-dlJw%Pzial`V4>dr zGqFm|lHRjQoKl*EuRtkRNTnW1hqAO)AEvxs%(qD4@hojE=bEsUDcu~#46_qVMsM+G zkbFKc#>*Yqb~@y;&#G-u$q@L0;+!1L^u?3lr9Pg2BpyffIH=SdxjlWz(YA;0v9KY+ z{jiGy>q|_V)s}XznxeL5`gcl>d_V{Wz zHABFkXl_3YuQwl+6ys{n2D~@hEs>{B+!QR2C)WqBB-w<-ph}L|7IiRBJeP} z0jdw<4#ZFcSc7H-CF3GpUA%`w$f=d#lX@VB1F(5JX7EHsjFmv!^Rw1vA%u0$mqhF@ ziFRTlzQ%YhnRdFfJ+A;2#pE^5`7pxZsYW-$tI5IX4EdHIH}+@?v+9Zv;oQRjL8Kcq z%`j1k)$tSA8Oin%_>xNcigfx?#x9@qmR08>SN2Zp#~a!%8!%q_Rzgw@{Tp~fGtf3A zhPG3>Pgv(g$adUaZIIrxqI-?>EZxgI?XHlD-jdmazEh+erTLi97kN{!K3cfv+F`6G z9giy+!154 zK{N#k8c^M;PO|qf&70zi9X@2bhX+^9?7s3Quww#w;OlOLnO{I<3bU=R&%F=zN>~`+ zO#5sQlp?iPt&5viM#s%|;C8a$c}RJ!~OhPV*g}~k$(>?w>?=yJuO^}_E-xe?keK23qb6w~f zLt$JIW`uhLLkyQ=E*(KViIm2Xb)bXI=sygu6OKR*5zk=eu90!#7P`7C56-^_pf8 zNO)O(#pN*wJc)X<{mH}lxb=$UfPBxEdyylgr^|YN5b@&#{>k9ud2OP8OThbN>%^W| ze8il)2(L-9IL7VRGLc4RU@tIBJfb^gMuRhvbmP|xgO6TCY0t;#ve-WoN2oo3ZQ2ly zR-nvPq$o{)xZ5}ick$8FmDd6iY^0`>Cu;=a?%GoGEb*M6-9FE7jUGssdckdFof-P( z)dtZDYXiagS7;8d3LvZYp|1x`97DEI;;Yn%7Q$s6SSA^QiRvly?B8_7RAaw#3q1|ZZ{mwoDW=zt=Kt1FC z+VadhdhrbJR(EH?$7hjpW273{86Na41mD_2P@|#qbq(Z|w?*UK3d);(&2<&$``0$_ z8cvSFdwuRar`e;1X5}t}A@!*)nIR_bUc+IsJp0Q0TBMz66|&voHR(c?2~Q;!2dGvo ztAOEn=+ayV`Z%2g`Aq3Z+`7G()@=-`9D4GLX2O-Vx$|@rPT87MUHhpGlNa3frCp$t z)t$pFcP4eCn5NJ2RzPmsFe@Hs$;!DNmp{}T<8qzOjq4%zxkRBb8%PRf!9F+hgooF! zd!HAR%^^jISUusaxR;J-rnr}lt}t~bRMHKRh(68t&a801M<5j?CXNydN1gr3U!jaP z(D}yjJ{BCtdPU&a-Xh`oVko*yZ@B-&%aoB;<`^PF#GaVK-Qc-k67D z2bTs?IbJ5Jupl^@e06-`9Hs9&Sf08nkR)T+?r^IU7q++Il{XVaa-VGvDX%EqFjBz4 zt|%wT4^f&OD%S0sg+zVz^^hBZXn>rZ(e_{_`wk5&>Eg`^VJty|d?oaNV`h!T1HHNt zAf@cNU>L5D@;Z6DD|rJPH(+C{5oRHG=ig2`UDjVyvDWZ;!-#@1>>{pz8&SjyKuL8iuw?1IXBlrfe09^~tF zt`!WEu#e@5MIsqksfrW?;3B8@u+XJ_tm^VLXjri~#?UU}W$LUi7(=k&3^XB6XXONS zfT~qwAtk8CVgYl#=m^Tfw$G?%KD8n)^uJTE#U5giDF-4#H^p8s#ZHvY1z|TrorRDF zhUG`E^w*AxBB;v4sm2ZgS$Li73*K(+^a@ySGtd)brS64F#<3&LSe03xeI6m~zHyjt zCrChju?JJF?O}K)eH#TyREj^IiI_MR`nstOfy4@(67xmy z-U$}#73KplbjYkzZDxQO>4k>p?dd&AH@!nk(3d&N-T7J{*s!LLYiRpmwCnl3Qwxur zmuY-mdXFPMqF%Z~AuMH&SeZ(O`yyWjE&2Msn-wX3>y*A zj~Z3%BY9@W^*9GoKk|0Ug&0#uNI@NF)PHNTevVwYD zdL=SY@;KJuhklS$aJn|;81W=Q=O+i6ltl>q~F@4 zesF|a@OI*W_SDYZzr<*#aa@?sVy^o^P>DNL+GrO&T#UsXl>0CR2VD*xG4ecw4AQONr-JCryr5StG9sjU&wK~zO^4Wm&iikc*HF@+2@g6dudDb z_4v~YZs_<#kddy7luuzk`_v@DMOwx2+!k{rUK-nE@+R;IYG(`At+QQA%ZhZ+?S_di zMR_EPBOlS?NEcl87pOh!yAQ_Rh?Z>9TAoZ?D=S^4Yk5t`+=~SHA)!#Hc z-(Apr@%-$q=qnPl_ktrP&)bEf`|zVr5i=?Asr(i)5N@v6z@*4`<<6gjTgw%u3PV6B z`FGEpS#rA+*mkfo^pkUw6Bm7TdOmHizpzmREQoCKX*&SR>s^V1aNO$WEg`0vrE|^< z+SEhk(I(_kr$tJr>(IrSelK{j%r7ekd?_;rH%fYy%(==4nw8h9 zAy!zQ+J#W%6Bv(x94T0oh`kufyQ5vUGr62lB~xk-3@cJA6w{&*h>KS9e9@cw=Ans_ zW-{EDqYI;R1qlaXO7*0B=+otg_GyDMGb5dEMBpb#(ZfXiYTETtL{#--Et5$wEa#5m z7(is~X@mTs{m9;<`>#RGTH3eM%`#gy91&I@q>WM-qD+Mz+(RZ5bg!c{Nnj&Y{D&c9pNbPCC3!*JT7>1D82kvlrXu*-oS3 zE)Lt)OT+PT2wq&gP(l2fwaz+R0eO5$RV`H{9-4t2e1 z`jv4Hd`CkmmAuxrEzKE3ad8qo`C~PZi3A)NxA0ZqXS_sx)q$|;*P^VJeVO7y?7CO@ z7E63S?vK;Wbw{|%xBH@7)`nhn1^A%vmPs!$^%3@N*gt*(LH*34^j=KsQs)37OR^F(7I+*w00GGWVJ?>t>6<&M7C!h=^jY z3r%%Qi>iwU&`@&BO9w~g%DxGxylDF%3_f}@#26^+3OD5qvA;BD=y!MGIQ(ChcnRye0_LBwW(4C ztzW`h_5@5C_aqmp8w@89+!yF;lN4c%W(IH5>H>4gW$KGR)nHsC2qtB3#28BfgCoh$ zmRtCGa>oz7CzJ9ow8!&SY6j{Tlj;fzPg_*2p9pzrbF49GGDobi8zC;~a6? zyh_~_w&#U5eDab=6=#BGPZ&^q@X*VuA)*rb{Ki64KfYe&OZpHmBEI zdt1_Q{Ad%mvdi?M_n1*NWlSDyX}ZJ#ms55UyJv`lOQp~jvncG1FrsUudV_A3GM`1S zTDWK@a3L~sNIh~`>2c(`X(oE5Ubw2}#37}hpX_w>l#~QeE=M7p0z#4si!QF;^0 zI;@a{QG2RLu)V!k)3R1rota{H(Uyf)z_cI|!rKC(WK-2OlVBb_zY;<=YRUuoY}Y1E;_gK8e}iJ3I}_qA%RIDylD@Pc(| znaO;iTwUJq82I_zC8II(@x6;1X%d_=Uw|2o5kermb~jk-31-$scJZqrW;T_~x*k$> zP5G3%Z1L&so0{p3AvG@;`b5Z-hha_#dB}J3!Lm8$A(?)TQ?DPRj)+B}+qb=47c2HO zWl~wdLR}j$T&d=!n!In-&OC%)o4iU$>fTJbUt`U^TGOWPJ60HCzSOCZvdYU?;(tG< zeNUIlijv;RtDXOlGgqoklWrmdamb-J^BL|+h0CfByZ9xYF+K+oDc4sETMS`$Fnr&* zE6HTotVq@NE?gQM81s*#sncbJ>Mw1}_Vy1{`8vpXK>0G}>H^(QGT1LCis_#%K08VU zJMPR%vF-|ZcmHf11fnL6`Mn;|lyFs*9NNN?QT=qabAXR2=iS?109dJDN+gic1E}njr73O3*Ze2MorUsMBLmp~BU>DG1BsD-(#q=^;~8 z-X&+JpkiUh6#!4`P*jKw?BUz;BR2%64Se36Iv2NY$I4a(=#?rW-{U2Chryvq8oc*CeezVmNkrPJQe~+$lyPF} zR*%6ft*lW^DReEQ6B%<}p!Sg~smfMNgpeAqUsq#O_f}auz5e#Y#k#{D>F~*}KPaE+ z7t+h6hMK)-G3s4v}$u^A{CUb=@+)jqCKkw18)OAb;q)pu7Kn zC_9H((V}+Co_lQDwr$(CZQDNg*tTukwr$&1-TyTzm8#cx)mh1E>|`e^+4-{eoMR-y z#gJV}wwAgv4F)c_mLGmUt*vn(?{qdF!;rz*c|tY;8iVXG{k?SlXGT{KKc$`48+SQc zl(hWH6^f|EzWUDBZ_;M1c`P_y2u2~J&f3MDSZp}8?`1ZKcIt*gMKG|v+3FLtlCl-M z@qDxrj9oKZC&4|Lji9*K8{knuv~KaI<}}tw63NsUC#aY;F+kBcu!$PAc5V03?cI!C z(g$UV6+;G@sf8F_Gsf?t-NGsv5SRsa&9?y3z-8lP!gsvIiOn|`WtHIv-^5?WUr=`? zbA?QdL_br8md8t^V`LX^weLuSFD`FjTo#AkN|zuq_=4I#l^GMT6AU0YYlomX^N)uc zwVLQ`t$wkS*(Gh1!*L=W)a@`C8)P+ipu-G!OyNb{UB1H+}NeHHcwB{eH@^=*22Z+{GNt2 zRmbM``cW=`{I!v|Ex{@5{Sf-tSNKvpUv9B_7 zI2|>tgeuY5TKl$G4Xy19LoEB;m-ge+JH5A`ISj#@rAu?%n$$hUXlh3Y@zB=djl;aHB2LtQ%F*goCBUltI47}I% zQ6*S75)^qPme-agcaVe0AX+7N;+B#x>=L$k5*KSDBFs0(_gfiqh#IzRO!p8#wt?*| zVArvY9Zkplk*)$Ow8x&Y#{ifTNS8)J4yz)E%}h2S zBWHb^C)EJyCz5O+mtAGf(IJHJA;}p)ME+6ed zPsL4jM^6u_ocrt!03d5dw&wIvpP@4oL7asmk;-&lMqQox{EQ?MI}1r{zQj5Lx5i1C zlY{-+%O8DnV1N}+s{Z;`S}JFs1a6-sZlC0B&cwwj7B+ekiDw(C_y~e^O{w|dj(Kl? z8nv7U?T*xxFw%y0w5fDRv}+p_iPM7N9{~+;8)N;x2$Nem2HmuoJ3YHZ=Ii5Oyd4tX z3ydLy`yR~sTXvKRcJuc4Qet(iw`X%vASRzOoyY@;w zrJEOPcE#xp@yG0oz&EKB_TJ`8Cuh$idyexSDfEIJ|B^E(8Fbo%(_mbemUi?@SC8zc zivSdc8XuH9U_77&0A-9u6k(o+fQhrctrFdi26Q-MH$MKbQ}}hREt59ifwL9dlJHM7 zKxh*^HQB4-c)%ZH$ZwLMao?ob{pBHbda-fuDHH(AgCAu_Azk^j530YQ@mTcz=k62O z$|CV9G)(++&~T^ZlHPZuge?!+KAXeqeCbMcEp{klbT;cRj-H)HI=43|NGgPtCfZBQ zcrLYm1h>U3m3~O#em)B8<2cEiR3BkfeK*BHmBVIw#hd$zzGYI)Kqo1QT=;q+|(h(bR@4WZA!Bhxb*}kvJyJLP>z3boo zYB#K>EyXlsF+B>sa94A_t3V3@?>_!^c3fF4FQciyFT;3#kRH0A3LWtiFXwA$BN9xq zj=r=L(+6dM?fibQdgi{Wx_Pw&YKksbknO6sj()N_&3aC-YhXv68#t%@A2P3HS}vV~ zHEEbm$(@*6pWAiZ?`;wn%3c0cqf+gR9yLE%?V(!3Fmu1kc>Z2p;K+fke*sfK5fbSe z0Wq$|z|!;(zY5l<{wOdOX_jjc7Q?Xal9YtC_eU`j57_bw(a%84S1|NSDnpYVLZI6i zL|%!-4bKq}WbhJ{wE`d@Gde@ltN-DLq(O#bG%qNt@!DLDe$MUH{fx|Fl9>I(V*7r1 zODP%T+TH%V8zbQF(%=C)#Y@_6q4N6~9Q9G_ATT|i!y@H3rGRg|9Fb%zp?V`ElpS6d zN#Qi4Y0jx`OcPe85au@ji@$K5I>nY;y{5>R3p41}8jk zSwxiF8K5V&H897zo4vnJ|yR6eC|qGY%~uP1gz-5v=Z`c2!2>S0xh`; z;$#tO%Tg)X!?%0o#_q|2ZyBmu$zoO1A^_k^J$T(o`~=PxtPtP~MKa)h1~X%C9E3K{ zsGVML%!6EtNNxx{=+5xhn|UX8MY&#_pT>&5KBnCO-Y_cmUWsZfRq>rd-!Gzwu0`X) z)OKy-V6VUAg)VHx=VN79EoRwg{o`}9m$T)0`4F#b!P&dMawE6Z(Zb*p7ryg_6~JrP z)>rx0M{ZGq@X2Dem@1X82YTBaEfk?OZ^Pv3i9mVVataGk)Nb<5{M49K9!0v3k@g9Mh$Gad(cKjOJyNt`9T9-3AMXS z02^HYZBTe28YgkM3T0#E$QLcPkPiVuD1L~7k-uk%qewcT+rv~UOwI`gpPberfEnTf z04nJIohvmq*uFRUmhzUezLIplAk{)m%xVW~Hs$SFTgyc?x(o07ZSH974`(|xUzgQn zppRA}8vdxJzIRY6J>bufR`i> z+=p-7uRf=>jkCPF*@tWQW`BhsWd+48>kQ`Tc@t1IMG-skQO^t$XdsgM{b`WRSCX44 zpcN`?y_timvxN=yfmD~Q0gC`p)<5d=Apk8q$_?Y^kQr=}6M1eq48#|SFMVzkI@xC* zd1rs$zsqMeZipiTt%IQ+o3FG9EG(Ls=Vh)iYb4f0?95`o)zPo;Q~JY$t+kkkt@R*A1Rp`{DT!aLf>NQ*>)o`QE`HV%N0 z-9zvSU{D<`*To68x2o=S?*M!GKFH2!L2Z(8^wz_qAWs=0Ndw9=6QVMGk#KP&QI&^8 z;7w4tcP1uUt`C@QrAOP$F&{H$=0V>_QjFSQ-phjYOrJ}mLv=mVmmZ}4@}5y}$1uv| z<)qVUHlay$YzSFCCa`XB`>EHW5YdKu7_DJ~rY^$2CpJ&wmt7pkyZckrGw9 zNM2SEgJ1^k6XabO8iKX8<*1SO3s zAFJT0+;;jiFzY?R{gi0CgNLjftCv^y@88cQC1X0k=z3m_#DP8fb4YB+I6XU}RoiUL z)v3Zs7Us<(KAd(jb6^#8=sbM@y+%AQpc<5jdH$V8)3vn3cT>S|Nb-g{`F69(!^bZTG?I`ebe0CsHdlr7KI z=TCEPw-;$z&hC3+qm^drZA~Fj80Jcip40tP?W4j&>9y4*?DHvHV!O>|j_+mkS2acT zHgGg+FJ}0;Py*M-s)o%UA4MM`?%~x5A!RobKSW z;K;~NWjCZ1ny~JXa6~ep>&k@y>pVkpUBkA!`EXQ*>vTHc=P2Te*TL}SWegupxY;Bt z&AN9)3^s3fo0EvQnlID)Ln{|5c3Zq3UWF|}oD#C5Ap!G&TX|Fv5{na0XRzKh>pfka z4YwZ2GRH-drAvL&RK2uDRY`hNo#F&LYy{1T zt0hpQfHhm>4Pi#3&^U(>wrmJCq}ucWe7{5%9=`btI4$#Adnf}$O*H`_NbH^ln%%d-T2=y11J zYYepzLS-4zv)?M5%DrtIF)3kK7rs$Gs<^zV=eDQChdtB7-cb1d4EZ@;y}85HZ1T7# zjOBDLHp|`U_b}~7+T-csq4Psk@mn~#%Gd3CEhoS634mKG*mE_Mvy><|CSITrS5wd{ zT3f)jpk=OF_XtR*ZrrI)K#rRp#SfuCetn35cQ+|c3iR?jNg4Ao8LJMGwd&5s4n;)0 zhb*LS32{ECds#EdK4zPgo`P^^xb`N%F5PEf(WOQ_h7_Emw0n z;}>}9gQ&fV|MlBASG@$wxd*)jAr&H$zx+>?ls#ZIurnv|-u96e1B(NzS%fIx+*IW#Mv;r(kVqzF7w5=s-Ag{B~du%tOUJAlMrVfO>}WXi76i0T*0 zV9JFZSGsc=M+awxknvI?o}yyoW=Sr&mZLU#4DR>Lf{lGf<&x2REd+bk%L5??MvU9= zL{rQYz=JSPK0_XScw#JR{eV~@cg7ld{a{DVc9mCdQcu=d~=3JCSf?rXh=e=LY`o` z2Sbf018E9sbT~tk`t44JN>_um$uX9H5v9U-bC5Y6dtU*z_CRA!hM&&J@j!3k1ddHA zE?3)1SiCOJB8UF11~%2}jwNe6dOO?Abd@ABZZAIeu8!-An#|U@t^%2DEYxYJiv71$ zH?}1^y654PD|Z2%bX^T3>W2x#GROWI=f`=wFGw{_^9MX*45wgwBpx(ygc(xw{x8A$j)#ty;L<_U*rP?4(++1hZcqw~OJXAHLfSO=jT zDV^e`5Gd0aTk7VhbN&odFNKF|x5WF1m;T)iiXZSmBGjm^hwMblFZk|Rm}lvE+u=&W zk{=I4A1@ExUb9(TWTTRiv3SWRcI*PaPJ9O&WWHT|e)b~mF-Ge^I!>uE@RSbcfcZku zfb{U^smYXBxFt;3GZkr3f?ZW<@l|Pg``7TW3gy8ntqj83=3~)YFdg$R?td@foEwz* zO5n~CIje&vJ&3{g0Dybxp?&>PF`L9rOsqY90~zZ(z2IHTBI>>+KI!V6_5{f%!_3U!&0yP@wK1HI7_*gQS7pOqnLTB@M@qGwyk;QAy!XKMMQolfU*(jb)XdC@@ z!gVd!QVvEui<_MWfDGxD>bRlBVGiEPxi5?>@@F)brjqG9LD;%yumtyJ`;3Kqy!BH3n25uE3F-HVFCW<&r;TY~ zpAu*TQOCbY*3%W)U(x45P{biGtAx{!#Yyi^b}FKAar_c5to<0f+^z05dos6tJBp8x z>d_cat<|(!5K9QM`%bd$@<@M){kk@5`-GXQ{tfQjCGH%77L8iSQ|sa=?0?fd6xoeD zAo$)KvG}$4X}U`xz>xLr`U@rQp&73sbwc$y{zs(BxYB1^u(d(dFC2OzXaZfP>@=C} zxpjJSt8-ztSucInc*H#iNmzoAo9^8Q`$H5cwoMdThzaEhURjBKImsgkv%v#)Mq-H? zXdE<-y&`*XpjG^+QzbuSm|a@;mAhitlW?}lX%9lkp{ z@%;YerUbN}U~sWcR~=DJyOM&$p}7fvhG6RyDZcIeLx6)$R+7kJ9Kxhx13D6YcMA}$ za>Ei@&*k~q)@L#qDaf0}<&3R%3TB!Dt0UX`SRtWfUc0&M!&FkHM@X|% ziKm7vwurNx58qG3Sbq#0VelKRHuONjE7?K$1bbQ_D6~+8rDPMLV(6h+P_-th@>nxl zvvm0)jGAPkAb{k3yNYWryEWYg)_P`hnlJyl<>RWStF*aRgRTw@aCSZD!QeQ_V*#_( zkIc{9uZUzC%axNEM#tZ>fG<7(Y9oLjBhkj2UfCJlB*L010$X2N1tkXx1O_~vKoi50 zNLUDBgWV7q`(zEGV?hBkeeeuz9V@BV1dsPgxBB_h+UH<-HI$j^b8Ur$4X2@~8LAzF zr1$($e)i{QZr(phF<(bn=j1U*#OV{^Lsg;~PBh7xobbfhsk#7+XSy3U1jxg?1;Xoj z)MA7nNVH_KY1Ys&>Vk0Q5Ni2$S8i1i)o`<7SbMT{9v1!nwvg*zucFiO#RI1W7)FuE zpaW_}f{~)OH=lb%gsp8Z)01WSCw}yATF&FNxB2%3X%P)tB4i+75_Astjmy}5#A98U zrZn0`V1`fz@wa>U8mAL~`3fI7vOKO2PoLZ$vF+Mh01r9>v4EyQR&gLOfx#^VhgfrK zj)%X+b48gptlBK4+6xJ3gv@EH^k^NX?dzqJ1UZUId{{!ZaRAg*I=FGg@sNyC&W)#0 z8p5mMZ_cJuEU{KZcK9AunNRLn5$>`uZZ7MaL+TFNh>wxC4ujv}fNIZZVl%NySPDsg zr@(5fh`ypltO;Vl9T(!dNj)EL8OmI*`VV58u72rXKlo%1U~VLMYee19ts5)9G;ysA zUB84twqLMcrl_R=|GwJLfPbm@LX|-oW7JX!Wp@L7uXcmld4Ql!P2cpczMvm+{*2uM zk*B2y&_}UD$v>I-!=G4@lx4PX2c2{BA5j4mNB%K&Hl~MqR#;Ng9(8tL4#RdFBlv%o zA3gwN@V05tnPhQ$FFVvMRu`(2WjH|M%8iy3mpnlDUl*^kd%YJC_8^)>L6PBT-TCiOLu>ps3!YMTRStbh1b%u!+}t|5_G~N)I?7dD4o+^ zB+4j)(>2lqVPQ1Vg?y}3U-G|-tELLKTAd9R8%l=jLpIr7ZNL9PrRv}_<`iYjmcYCsCu zJa&8Ut-g1i|4_l=;iDnX=qLVJs^(?=@0#!bAB-IK|7x`V_mmtOrhg=y|J{85PecCy z0H6G;#pBbk{-d6-GX1Cb{%`kx<4?o{gyg7%>|7izOdMrR-2OfOKP$igH!Pfg3dH{* z5rOT$09(=~wr0-e4EW5<9RJ?%KWqgjXGaqQ8yHCOaBUR`<)l@VpBo=LQQ&ZKVPO$4 zQ3nHgWkdP+JpX=5P$F{q!hgk}zv#&wMiPbL>X!)>3R*l28|1V>8H>U^;mXX#fnE%> zr6uJnqA~R)8^>c`wW;%q%-_FEkG*cYI=!9T@c#T&{(>V^iC{1ko*Z6W_G2VV;UFd+ z$Jr;|^hj&B0Ono-!``De+a7SoSEO?_6>Z+8>-Cwx8DMYif3!BH7DR?)aq%{Qg>QgS zqbMjQsH(J3y%nBlP|^)Z1i{q@APnz>)?aBUGJESRSmxEpUK%a9`=e=|9@! zISFd)3_QGGIEx-}f%hIhcQq8K_-#1=v*W*5$iHWKJPzA=z-F0q(fJjYea+Wb2JoNl z3hxT|pv_^;>GbfZ@OlECtTgVbtvGTdI!#(Z>!F-ane~>+m2~yqeVZwMEYd+bfS9Pq zP77j5p4OpBoRL3K$pcS_0Az5z8%3FV9Gqv7_2?2|K~a^@qV(hSlX)`<@vGDg(J zASpN5{xJX;uE4Aij4~e|A`L$1GRM~cGVu!@1Ytt`&|n#yH8GrSbyj3c^X`&^*s6jn zKzOB49Q0gN&a^S*${8d=x#2MZ&18(92*iS_Q|49=(8~{ZbVv64H`eAh42Ma6ftpch z3UwkxsfB!&t_8~7QOq1dZ4ng2EXAtMnRFNiweD1~9ZL742PsPngQ|{Mus`R|XH_~b z|8ZIVG`o~qRB|>e0EDUs<{RZ)+M}%52c>v9m7Y-qo5LxLi}V(7Dtv1~gJ~1-MHV9> z4_96At(lw9qHA9UM*v>*KC2yN?RRE_&BsNvS8(PPRkiwp(73m0CZ3xXs zl_}=1sTm0G8Q_AXKy>0PiCB%iBaJzX8e`qZ{t5Jhl#KYIP_MI(OVlkMZ{qJ_=Z71c z)FJk}*PaM_kBCr}@vPuI8nHXiS@A|K_}8{tLdDs{lp zJFH);Q=+?Pi5`*a(h~lqu}pS+I6Uskjm9iqDF?+VX;nw6X0(cQ85&A=E~f#(8h|Ie z1urk5KKgq@Dd2?mB4HXM{>*%cbs@<^kuoxmJVDBqJcmtL+TIkL0$Jg8PL5M*+99x8 zXUY`@E<3N?r_vQ4>&V0QXamBcVN%&{8NN{#Qvr2R%PHRJTqV0|+bvGl(qD3=^M$D; zq&3;~zEi!Uw8Bp{{1LBWv#c?_qDI>1ZFvM3JYmY{g z@Ms4DC30P!>Ap3Y+G>2yrNf;o$)QYb2QiKMr6v!9Q-b82a8VX8vp~`z0hc!P8SoI3 zL_2n17;ZqdS{GJ3{+ae$U63RNqadVG;3&mhxwMHmYwDu3JzpjCq|c+Fb}?%+p=!Qq zylGn5`aR=1i);M5--vO)4ID4V;+QR~T)Y+zt$Km0cL1z8B6qfmE$d=Pqis?KEqfBL z&q=GI8#;5{vQBh`u!SLTy=BAs#uKBU#3~dzFvmK476}fl?9f_5j^1 zV>cJ>jFN1Kgf0HtXC74|Jicu*l?**xCiJ15DVmvU*_`Z?f#%P}{3)^#t$AI1Vt|RQoAtuRVwtuTELa@*-N6gmUj;;yf_@~A`#`qf$EBNwq{QL3xZe9YJFu9f4A^ zf)tn4RpPss6v-Zt^WI2vqBu=NYiYG9Q|u50x!i+0g;gW=*_=fgo{Mymc%63(t_4`D zEhaH)SEN9>a4X;i(PvV1xkWW~nJCeSunME)v?^1b`mAW&xiUppa?s^MaM2=xm0K5! z353O4e3v(_hFG#@r_KR1uLHCY-A75!6)b^ded5Bz&}@2Dxw%k z6gC6*&oJ6SC@cmxm$`lvl_&qNuTSB}ldGsGyXQ0X?R>YE`sy4lL3S?O4f4``dmrqd zpX=|9bsJ5F{^SenOIP=TEnJ*qX{ktyO|Hk_xK}>l)=`3@`rXre_AOr4(N~Vd;KsLK z_QV`V((ly7Kx_!{zYZLV*|2g-5sUW>$FdVC&$EhI9I&%KyPVstx~E!T6P$#Cz}V$F zQi|BPj$Dd7MpTljr5#GbIyU}(4NUE0d?O*6zW^GbV-rXh)V0NP!Vfg;%r3$-gLLv) z56(^{MV z4pWwqpvy6utK-X7ys&~jTpdFBjr4Y!En>&VP3vdKG_FeA`H^;R-?mf}L5aVEp6>u+ zI@%6j-MgW``U7|v;!$qtQiO5%tWguei(3+i!RGIkTL#HNaSUk=#?~mm&@!4*%TP4> z_5Vh#it1}|u~?}piN1^&c6Re6*CJV~QcIN0^5E@2j2Ln4y)J?DK1%*Xy3` z-OX0J-J721ZJw^?A!003Ysd{tMh`c77kv?HcdPX2LkHu#YPI<^aaP7B*Qm87$}#hu z7I*66O>{OtiUZJ?(eO=6IC#B+ORwcvqSA3Q88U7?*g4NOdLWuBBzVEG-|a+*XRFc5?83 z?*{D6n%LEu!7mdN*8r|h!iE6J3L_C}Ex3u$e-@1sm0=~_ffnc!&6%Ew7Uv_)hg>p2 zcgNbb*8cVK`s8;%gZZa&nCfPV>>s@ht%hrvNwC?~}^(ifT*^J@x`#!R~O0paGC%-NlRM@uN2co9Hb5abqL$wKQqs)mIZv*5E*q zd}BTbF%w58A;Q)IpY(v41m(jQ_C)jLjrNtbmz=#8+=;HNcb9&??02zXED)iWoCY52 zn%gt?g3;E0;lWV1>X~G|3EAp{7%W0l9*Ic-kBqj9GTD8W2eRx6p$`Ad0ufiIjb1_M z-q1!LyxQRJF6@oB1N?Z6u&KDm;^fYng$AM1aohAB&kT+v8wq=2v z3|M2EV^mK?&tr-vj?6IwG#i|zo-rMVXzC+ctNrfhnjN{|rcB<%?MR9fQO%GdrgQvV zlSTjBswVA@5ji}k#vYNOdLcVUO|C}x!4-xXWan-K2`pnabt;N-!iS&mE&*#Di7Y+g zr|*`YLGIgQP@bu`>9d6cXG;(zV>G%hT-z_XCO{4y^PQ;UQSr>yjMi0U!vun>FV2Q5 ztVzPq=LU&5g0UtGe{p@(vS(qqbAQ^U)cT#}sP$MA*|APt_Q!Bh9#V z-gP~PPFk&a3$IotxyV{GSx+$xr_w>*i(GooFd?u6Cw9C}jV8lp^j!^g4lZ?sNEP*Y zKpO0g^n9Oso*I%aIK2ceCNhuPBznDAw`#adB)8@Y#@gie?Ygc02|9^2=-A zT(zICTsNN@e#)nN@=G0wCbKzWN}s6(Bj3+v`0mm1r6~%zXKxPa%+gHfMD7SXb*y9R z)JDY>MXg8kLATAn&9VpmgAVY1F^BW7$JgtBfW0E@7OQw}$2J+mAiuV2&Z%s_DBQOk z*QaWlzOc2m9)_BgExyEstjJw zUe!0F-=-Cu%}s+93tAKHS?esbyVzFD1DFwy5n4S%+$EFPZOd8nJ{_KP2QgX4XgDJm zXze2(k6aad9}j~N4RaF1$tvS5Sn5iL6~hsFcc>f1wayrTq8l`u3PqY1iDZw|`5UZS zL2q+ndbsMhv)`6A&zLQni#CmU=S{H+TiX+l44!rexNDO{DTr7Iz6}W19or*odnQ+3 zxIGe(^3_hvc8rE?4#_)~=JVMz&J#^jO##l9T6M7qa z{7QbmXZSpN_30v0wI?KO_ltOl+%gj_NKTH=QB{l3W@fuYIh<**7MATd$2g@-;G6nhyOU z)HXjToSXSh4o@EbZe3igHj4F9@Fm&GBJNEaH{U~P(5dOitKCOSxc3REA80~Mkgx2s zp95DqpjEpj*`BZTo>}lr|JW{$J`4FMQFWVEr5Nu1lgH|XJ(l#8_6i>`RMo}S>k`RjH*5w#pYhQc` zI5SX?mL9o%AY48N{_QMeXPe*u<9e;&BMZg>mfP?2*&LD0AXK~P*{G7^vU|Hq_B{I0 zw0WpPJMBo3C?{6mclVL*jL|Ld^Yc}J?(6nNmUX1u;1-%a{u?;EgFQHZbr3^c1?w6$ z`!0HV&ddQ*#K&X~x~MiC`y^nAbIwuORWi5$k%%o5o2iGEZ3b$>tpVRJ%tLZ0(NORIBeMnX_0aVA{IoPK^sy z2eL3}D5m9wlQKYF)cPq3txuDt;e~1$!!f#l{6L$+eU&A6)MU>1#?eJQoNRmxSL51Eauc5Ew`W zD~NO~X^W2$KXe6g84TD)>AMG_kVjMvh{H5;=qHg<7)YgYnb9Ud@BveTfYC#;EPEge+|1Xj5670-#&ZHK4)ZOviRz7!iL;>hG5%?XHp;k#5lQP3m$+d z_Fx*766aB0GnZdOZv#iUXlaC*gI6e*SSF59Hnl7YTIZDyis@teSuZw8E(`yz;muL% zkfBrxM$0$H8_#;N5;vJ&@Vt6&J$~JI_}qSOIn@S0B*nn#fc*fxvC?PT<4K3Ykq&~v zodx|Xc2DH(_WB$xmt)bd?DxVVUb)G;7ub{7 zy9`MaqcV+E&B7f!4$!*09hDd9L&?E@% z8S?$>i~^t7$JFO(3TsXj2UmtU21NWPoWCwm8l-B+B2OYui64o-_D^>3a@{ofDoO+0 zo%bGDzsIZ(3^885GpNup|hvzlGx#GC%x@6{I*7RO58S z?|fwMY>8i3629c)c2W;o30-{SX7|3!`FFp{Z;OzZ&T)UPNBsDyRhKkh=&pEGO}N%PTVkqBeX6E9G_cI}fo*ZrrqbDCnCv-Y z?Ef~JsNIy^y$_F>!k00gl`UDc@Rt!kZ9-;}Pa&+GlvYbe4Y`WiQ~MkOL|mgSzPe3l zSbJL9Y0`<=Zy*ZQ>mZnQ$b_4$C*z#ElBBT0l7=#(=SB>wWPCA3&e!Bq>*m)SnpjA^ z&S4LW`f%1IB!e;3o5rIHxmtReaYqEm>QJlj)R{WFj!mCg>i!WR4K z;mWZo7!`Bl2BmLOkcORzb6H%6&&0D<90)m;q)K?r!d|d-V@KB>#DV{uVJDO=*ozmj z6Z^ub32czpL{xCs2o9=nhfX?6^2|pO^9(s#rp=5p9L5@ruuQrC89ZWGz=ZY!lfV=; zy!8fBx~HL6ksGQ?pRWJ=;0MbM_Df`E(gF7xHO@oiIE#KK{&6HV%ehE*i#E)$6m2&j zmuA{U^a;l;^?as|x|=XsaBj;%Y5D=@$CSe>J^1a&90dD%g*kz(I$D7CvHXMU!Hn6v z#-+*hy=G5_3!7Sw;Un0fkWm#Hv&{7!e8&v)x=>$ouDs z={r2fX=rPchEXD9AWvN(Db}FdvN2=`f%|>{q1V1{CM^Fy&IXC^E zoPx(z_NpzM85k&zI#jgVz!{{s{kF>V$VfQc4z!2hFJFUjz?8rzc;@o=6;6Ge(EGxR ze5n0LP{5Ti)l3#Wh3V-^Q7fy)!JZtG74`Q`l5`7G;Ym9x?V5;Ik}`g$a%MWjQhkcy z1L)@-v-jxDW5-?+l&n?eBq%8~3+MMqs}+xiy07FxOBd=@RdyGW8pN+xmBUQ>6}mpk1fAo9};K6 zFWOJlGdTjKV!uMnJ3Ga&?oKugN-RvQ;~4rUC?hYW6yxO){=L;cnP{2o=!UH|_3$WG z@K7p;pc!&EdX`WzQwXKpyZ0`Qs}5y_$`obY{=_?0BhgyUjrj7)6p9LnwvJ+92U2w_ z^60J3i>ZT&!=^##zD@xy=nKp-7Z5a^Vvf??WG!e&4)dWT|+(FOG!Hta+Hw-Fg~tuNr+`x7SZ+d)DfGe#ZIY zg4v-HD;w}8QU*vzL}lhGYz!B{se_uUDn%PDm9ryOTs50rHh{7CWGZDT`TElo>+#Bi zP?uDe`KdC=C*;e(sgTVj!@FO(xagPu!5n>W7qcIIZ~uj}=`;;aHIGz7kfQugNDNxF zBL+KQ9 zD!71mjfV7Zz-}4wm1Ih8u-1y1Q5(eZ*6>txBGv~#gG?@4`b_`A*bI3NzWHlMcH4zt zS5u%(cs=`ayPzLAai@3ORjr;}YW`P^JM9XH2R6L@R92b2`-L*v(lGG52K5FHQB zS#)Daj+~o(%%i1qGaPtPgE@5mj9&H9M{9ZtrIx#n0nFF zVOYHg#$})DCvehXlUOm!Fg;sYJbP0UtG!yQ#b1WZ>Qo0^N5Iz@P;Z0mTb=@l9>PmYY^458?}xm-ZV+uMe#l%UzVw8}TLiUJtIrTS{Jn^3X?LS%Q1x zc%Wv{5(CfU9VJY8N^sWV&BWOqeb;qr0JNB!ty46*d};D~rxZ+?Qk|_gBVT}nnA;B6 zd=3oY$&URM*=@u!X58`VTixT_R9uUx+^#`rWxMzo(9p(XO}cx>2@FE(B(t&(CP~y&Tnka!@t% z?r-}w7w9J8`%kgl&EAejqvvsJtak<5yR^e{30wWZ(-KppnvKty@jt22vePImpL0c8 z0jeyn(K0Ip&^j_7kk0L~k8o776_cyH3z0&^dOeDNc)ojVr;Wv6m1dMwiBsRZen$hx(Yu;CdcCJ&g9x#!@+a4tpRu{Lp8AU?7wg&7 zP`}z-vq8D=!Op)Qfbzh7g*PBjp35Tt3raw>zt+9hvdm!Nd&s>txvlUE{^z~V7IydU zDIC@+#_QVa`bpy*?VrXa?WR%dQrUY4^%TTSEkgiJP+G*GuPv{-y1h6)K!59nB3SQAMNiJ-2O`y z{AfK60C=no4^2+qr(6Kn4=E56#DXz93AZpf^fMrIl9|zvIvkoky;erkc_Gu2wy`FJ zY;5&rZLIUeM#u@v7%ccI438F2VHAh!#3Xy0G%d6F~m%P&ITwN<`SF+>-n?uIy(r`IoQ_N|E3#mJWp^Y_8 zQwVe@L&0FvngXR05{^zoGsU4H7=yVAJxKluGlZsv;g3Qxv@{J&X-g?-k=(Z{8BAw7 z(@LwiZ{KP)Pv7@DzK?b?jN`SVyDqIbnf1Fxab|A!z730ZB^cJix)!b5ckum{*kIl8 z${*ZWmS#A{MfaTQZrM3s&l1?zv3zHy&S7>km5mE7e7k)wic$`-tW_aL zq%P!F{XxHcX7nKdqaSPb3B(j~8qq>7AeNG*C}Lv>ks+1NA>$mbi;RqZs8Kpg=;;V) z8$nNQBnX0Z5Dro%WK!WL^DTS_znWjiZ{xQ_&ho>N8neLv-RYswS>?CZkEuUcxuqm(8w|@yydzNI7ko~UaoIv3VzWjqG6mBqtSW($ zHD0bNWlodb7O6%p?(lH35y#D*5%@bz2sAp%VvS~->mySmP#8s0(h8xR$1Z~!5P=b3 z#eRG$)R;z6SFAn@C&EonnqpSBluSNrm?e~_dPv;Xh3J@mErvrhAq5GZp;?-vag)_% zv0W0xsC5aZ*vZMxsbU?pjfl*sb1M%{h5jcA2Fd3s4>hY5^ z^4jP(#SB-+bj4UKq4d_HspOl&A%GmIPztVasN4kC%st$-^~%rQ{ObAoX-(-vzuC|} z(Iv1pF5dXd!Ua+O(Tm*&4|T0rn!)&4k6t~nZPmf95G`^}%29adPVj@1 zufM%x^IP*9P}~?Q4PS{=ng>*CX8O2bA&&zScNPjr!4Oawwpc{b`&71N<}k$~XSmI0 z#2f$Lq}3o4?NL#7@Rn&;K1003oO>yi}ow_>&z|tC(M2OXH2=1AAv`P z(ln$;pj$Je{n3A8el8FrP|$3aI{Q^xfWi$Cm`b|@O%PH2;6YJ<-$T=)<9lX%I1;_3 z+{D_W6I;DXS6F$yE&|YuUqe2D1)DYhJ0?h)%@F_{ zz)S&1>2ns%Nx+gFP~SG7I@o42JOU_q4n^i()QJZH3C|rjorWXWphl(8Z;Bjf-Goe6 z7*#Ma1zkp{-oAGa9YB2Gx+gMd=p{?uibPIIpXh&zg~b3Whp-ei_zuCsilN63adSvy zEdn+J{u5bNkuS6r+ITcUiXH=9u#Z@UTMgbDj+aN!ULI+liU@5H-9Dm~gXo~S6xYPz zoak*`Z*ZT@<}%E~43hi#hdTRXJ-%4lp1C5b9~)gB-=mM?=GZB{Lm4LL*SdW%EX;UR zw`!parVp%twc^j9IUeN>)<6~^+-yO}>Zt1ImXHMy!D!%~gMuRVUrfEK47|DyzL!DK)SkHKR_XfgB;0C9oX1r#LLPiksCi#m>HYN8=I zgPY}kJ~2IsB%ILc?o6~LA1Sm76eUpwF)T?jBiI|7U>mRIiU0i^ar9=AK8D1MLI;qkaRmi1#v2iip>9HtQ7(67=}fhw%3$}A=mvYVIPBIZ5= z7bDR#RdXn^N2AS6fQ2+N4Yxe^Jp?MviIZteW|J~^22KU+=*1zHYC=u_qQ;=_(kujQ zEBj}5lqC>-iJ{bUYY;I-shLBqRo70%Y2MJBD0?%gGN-bce5NUrVKTjCRjSSsBB}SA zzj6WciT?acHkU$rblk%Kb!j|Z&SWzB$KXDQ*FK|SYhkIe2jPF*!0|ASug_o4{ZNna z!n^v|40|3K3inO8ui03BFW`0u4(uxI89x@jvOo|F2(+UBh1Nh5UXbdBGwS zLrYK$c|i=+z%Og(-&O|Icd1L3YgE~Q(x>j1UW*=7e;PHdk8F(gs9#SGPy>$s$Uu}_ zz;rPiscxp5?dH1q^4Zdy;H*fCy47A*Lr;+=2Pa3Hlqu?S^bCeHr$osc^h7<1Cl#g@ zm0ZW1i@cY@r%SVO#p*`4e~_6mE8z0aChcU`Q~ zkCLAO*nPbW*3Mp6j0rtYbD25$%v?PrP`SzKUKa6%f2h^1Q$<&h(%69@I+~E0=X>A<#Ji{in8Hx6|CHlcu$DtgEbBH zMi&kuhf`k^dqD_tI=>jR|I*>jue2Rrk>8z2pD%+-^$wNnuY8%J*v&l5+%L~v7En{>bwXacPO zFB2++h0ZR=mxNVS-Hsli+jYW8HF)dOvxV999nOvktDRq&u*LgoimI)qB~J(foU{wh zh8ijCr)>b|Ea4L>7j3Zg6aJ{$fD@Q%w#(!fgR<?YbgT-WFrkh^EBN(d-(a0s*}|9htXQbY zpNn}Rb7IY48(YB%>K87r>R3K=`SzMEcY3c7fhjsAp9I`4PkZwcHISU!Ieqc&bA?Zr zcUB0jGqo%m_RJjo-lD+`5bsCz`vA(lmr?HdP^q(O!S7PrE!(*5{C3BVih;m@)EE3t ztS>&GSS^(>CdIwMk%46HM&iH#zCoS2eZc!2`l9Fgk6m^rf z5jCQ$v_aCtPO#=!t2#rl6wVAd-hvItdSuB}vbw~bM zQ8dM_KQ*83>g!1w#U-$D4+6-k3ggacg2iO5~E zrOm*}IXyW#&If}WA95-@MIqjak}{2r4K2`!j^wgD4+V@i0<5|KhoN)Txvnk)F<*EI z%!7DWu)<_GWv;oHyHF7_J%K*Dmv+-G+G>|m{i%UeI%T!{ynZjTi>XXcG6#h~A_r5n zl7o^rp6i4jY+Ey(G>X0J-TM*3Uj#SDDifMpp;ZWsWHY#}CIwzTIG-C$b6 zshonvgBP1@awIvsqxEiQDfSGFAAES?@HcLLeuQkr%&(q!<&pdLj%Byueb|HX$YVS- z=rtna@hSVWc8kZ=r+B@bONzy{M1qT1C_C1f*J-{+ej8but=V@Wtcw0fNb&i&NF_%G z92FH!<8u8fNew8Y$TFv5+dgSjBM8c_L{g4uKu+-hxFX2qlw>*vKaAapp;+A_0}75& zXQ(UGHEM~nQJO60fXb*yy?_-lm`Y)L!c#kadGCkbC1RTN?Ni|na*NAVEMT{Yk}=I` zY)Gd&Y=-YuEOX==vlkAk|7!ley7HpKXy#Q>x(`!^c+j0~}S}ShqSnJ%XTD7i{$~&zG$IT}nkaHZP z^eRT_Fh;2YJ~E!zXM;55Rv3n(#3-*x5*ID2bRk|q1*KBqR4gMpkr6K&P&^)vm9rqt zq)}Q)rMRq=kl6~(Rx$uAMulP#<*cOClnk;=b}Vbjl745C$pnBhBgr5tMA2CEO!SKB zLu}EV9)W>?Im*m2ON^CawT~~7Jz9|z+a+)-L`RTPFtnmxIJsU%SF*u5q<9VzcRVW)nv%*OM<(V2Y z%2>9!A4u+UHQl?CXI*ELZ`v=pDQhB>klpf2JXE7^JGv8Cc65A1!%fS1js{_C5Jk~5~}EH^a#sQTZ^nj zi@FPDGqJW?^ZVW!KlaY?(HB0LeS6js>?0U?LeT!+*AFl3&>{HiL(lDQLj`f}Vf^s5 z)+?GmHuu^KCug8-W~%6?Bm6JoY>0bw@{7ltUp?{O$HD*{#1MyJ$k!WmU_`%!w`vM+ zRRjLoaC?6c{8|3>;9GfXJ1V$(l}xmHjDR<`N|J)< z3CZc{Sj6?Cvf=HsFZcS?`oCc^K;v<2dGc6#DB52O8u-X#Av)jZ!xwxIv$+?Fp7KUK zfnT)C36J=x%KEtR&E?;jblv)kx%L$jEN+_&g49ENgpJ=OmCAVcJ#73C(p&u6$YB!s zL-1Vp^(VpZb3Ai5Z~*xyp1C;qlcDCVIa|Ul^a_3HHO zM&QBNC^yOnDB7GHx6ZiTG-iG_Zr)=$h{fW7W7}THg_*zYg~DEP?+@snK)~za!f~1P z%4`@R*-6V320Gs-}Q6=tu7S3D3w9fM6!U;KZd+z738d@XiYyHiFlwW)b|(%fF5 zbvCCzIPzjP4TlJo8oizx zFx*V-8h}Uf|BDRJ2l{xY(?K3M$b+K}=wSO#Uxa_?$Q`zDgk!IpzOi$unskf%fw^^~ z=p->gWDf-W`1IIl%(}GQ;j@HP$k;Il2a#88n?tgCN~RN_a7){q>1m6cB^WH5d1+l| zE%VpEKYo6a2pfF(yW4ke8+@#Fo(wEH&~EN>a#qKmKYo@sm#9*u} z;DHu6Hd7#_prFpFsGvesohzzpp~z*5pgrq-zy@vQHRJBWhNnI5=>)lt$+R4o3$jI4 zB%(K5S`zCOL$}sOq$2PFUX=WzC;_o3Sp`^-GYL79PP0Wx67as@g$bjfL3wkn=5#W$ zK{>$%bmW{UhN;p8xaYhuGExL1a_JKM5s=UkBV>#f_Z1HnEud%=$BLF~#U<>C>w^n$ z4-h~N>V{{FD3HAa3|u0s*Vujuer`2{5dVa&6U*F+EQj%RIRKp`XReVwZ*CI$DN7l7PB5B=^Hzr^pz$&a4`0xQ|p$ zp)HS--~T2hsa1ONJGJD#2~zptx6U1dzirKYnoXAfi)<@2y+8BJ;rbGJ6P$QALtGx- zfIWBvL@;R#;UJ{_kMr`6ZKFKn`1`&-$Cud2o$u_++4n29Pk0(hcowzwf;pF9Pmk!rr3IMC4JUcUU7o( z(O060Z=lVnc>5*7iIEJ?^CCP?j#zf*2imw!`cQxFMf5s)6aPbfLz_gCcv7p1BTKV% zGdEwoRo$r{&`+Qf_=I*ApV6w9>e%O0m$-$)9A|KZONbmNh?>uE@P$XwMNtw>n9*q5 z)QlzvV7x7vww9J`o7UuYJ8L$>u&kTWyh^bAXENqwLnd+}Aj`pkrljYTt2((TNs0T(8r0G?LLG z5na>j6@mqY_wJabmm- zWL?uh*5$k%-!`rE9A-h)alo&_z$-o2QTH`Re;*g<-c4nf6aOXAz(ek>_ycmgfH5qSGku%L>QOG zWZ+53IN;&AY{f8>2Jvxeqx@uu?G<~2y;8rt zFf_mo@HYu;Lhj_+#P(o^d;{0d_X@1HqKZ{26gI(Gq80R11Vfl%MXs7bo>~A=f4s_7 z6Gw;#T9}KrA~(7_5ch;e!`I&HNXqpSQ~3$Xmox=xJ8CGM%R?vY@&YXVA-BuiS4Ooz%s>Ag`dL~os?v%64wYi8{g==vo(S5D6& zodJe}^mpa?f?We(9IUGrx&vK#kDe$z|jcZ`=Md?}c zvZD+s$z>>y0|dAi`FR8>D0o^)EJ}g_SO^UI68$LID%eg~;{1SV196Cq( zb{5~?ikIOU%;BY5iy!RzJMJsK`tI4{+qjqJ)+i{+ZJ;DE)QHa8G81MLkB$sc5sbK! zReF^J$*KmyDwNLI{9WOP!o*@5*vG>g400*6e!JspoUXFU*Wt9Hl^W803E{BG4 zIXrZ!HM@i{Jn)LeBQ4-8TFqDl?<*U%qVf&wIfthI!2rq5Ev+mB+J=yiy9SysikDDirH|tKDCmTO8{a{_2dyT%xJ*kI{M^nEs zo;LQRUa5OEGM=o~pD%rmDiQasdovFpd!IU@LPx-J;9e9jif)a*9z7pr zqLfHDzs=(&{yb0kP_BQ~%$_^QpC9@#|6!h|!r#SDPE0F)7X^MOg|AQ_mO_V9_}@|6 zVdHaX!9L;U1^en34=mkp`05UpEK)Ge$H4*i-|AW~* z(kwiWXJ%67mdio?;-f#uwD)!G#oTF<7wq(0E ze(Df;?cwZ_MXPd4o&W+k06if9J>h%kl-+Q3W}$LpCZD-mdPG_q9#$Ufc=DR6@7MLs zBQzy;&D(j+$=dPS&uTpieMnJmE0q3eFH72qtFH>noI8MUdriySm@D1NRU?<*8#24P zTK(~Bz3Z6tI;%Avxz@!%;YTWKOm<~^e1$%!6FuA)h}+F(%(UkXChkj&B(@};Nw^cC z-c1Lw@wJJ&{=*4q)lMN#O~GcuK^cy2FTkE-)9Ag-^!N12v;HY5PHjbITu}zmwTyDi{0BETDLvDaOE9)=H0q%{I91T zq+u=Jd4BWeKlk;{ed3Mf%ir9)kLgzF?!2XkWo5}DBR_1pDP#Cm&3g3qUylvXrMJ!) zaBKPRHm|zo$9gavyY9M&A399QYy|4M%hA(c*$rH!FUv#OMOC9M7SmM1y0aL{P7FzH z;G;q@0nm>?8HEaX@Hw9M>+lzFYS;1Ve>kt&*ru*Ce9pPPwr}E(Yx{o3*Y>rO6FW}g zBz8h56TZZy)do>OOe+kzNxNy)evA-lEA7^)bSsEsq(dnow7%fIe zqNCBRaGKtVUXFUB*V-7RhW(tFaTxLyI3NuE@cmlq{uWbIOHDxda{eEJ!oi=3vI8rF zxW3`A;|`20TVRYKNpZkq36tb%*I(ay`1=pXjDRmz=Z$;M{%FGsPdMtL?r^QF4IRDp z_SxI&<7XbWLN)Q$47`;GUlxDJ&c4W z?g3?yAs!D$%w~cuoppZMH1nEi>Y8b3sto!u1}_L_S<8ZkRW(UfHC5@LNu62}^>MU0 zX<0sBGeOu3zc@>Kv~}7M?Uv?(P^|>DLTFANmCwnX4DI7{DpuddKSm0O{-MN@0V1(T#NVv5%pJiryD=_swP20!-I8eyH*Oa&nFA@@~*;t zvbfFA2iUUf0K_&;ChZO5#(2wkbllvf>{QS5=cSJoVN4tgjfKY|u4#frMO1CYR$Urt zQDb`CjHNT`02xqv)rZJK$|`je-mGj?cc}-}-;*ij68ypli(p7xCt|T*62*vQ`X$+F zXWm$AqIGL4L9Jrzy4Lfp7h3t&J?Ylg_OxlGkvl)KZWjg$`t}@DQmqBurtJlt+QD=@J(_+ty*s@xJ)ORp_NFJv)4=Cckh-b@ z(-b=gUzn=cMt@MbsSu@tH=ZCi?FaJp^f5jmpMl3oh=WJFaF;E|C464O5*2xj_z`|L zKh3-NGtiqstMOOi$FUp+xUWLC-O$A=hFHtiCYU79uIgfK!qBRYK$s|BfnH6#f$l*S z7*>aTuhyz8(Y-$u-vO&FRG6)&KCHJmm&;4CzdZ3j9rg5IbA$rN>Hv;)ifku_YA8m7 zO|3a%G}zZ^MCPs^BVM&Kck8Gk&a*94p1@@|Jsg+f?nl5>B$AIrmiV}f&)>NA{4;R} z1P9q&^v?L-p1by)ck8Ig9C5CA_qVQ<^Z0i+$>r|;f&0rMJX{B7W;>jj63N>yhx_pZ z)?li?Wcx;xk?vK4>wTk2xqJQKW4D&+gHRVb9g;c(0* zkp^i~godd_6Vw=@C0d~UbVV=iqlpT6%8ml#Zt@!56{LgQEZ_nym5PId#Z;=hyS>Cn zcDT5T7b(WP&&QjlPf<+F+@T<0 z1(4OST)zSJ;Ta7;Q-_k>gZl6l4dNVfK01py>vViNH10Xe4T|T`zUtzFP5hWX4M zyMKuw{5g>9tdpO+ZASuXF%%3%iy>ZSg(w#>tYb&OWogh^Vuh#$rTY3{`@o(88w!9r zYb>5c&Lc2hLaUZI2EftC+IfZWZw~Tvyt}R}|G~UlIXV6j z%jie(gLvpsR=di43Gzs-Hc!p)+1a6bJ)pP&7ymw==d)$Je^Jh(x%Hfje*y*3+LJ=M zSuem2d|>;bA_%&$1%KP?3RLja3HLDG?5*HqwhwI<&g23(a8Y!>cN)Ks;J(gb$dX!h zrdmT)*y3_F8^H}yj_cI>5wgEY4@E<@GME;A=<|(Alc=}xZ^+G}#_p@(+B9#>rjQ@` zPk1)tW>+qUa%?ec@j-X}^^5%u!zssgy*7RCJqX$Ztn+K!c9cc~_;GvvAB?P z+Ttr*-;HcDo^07J?J!=FUN+wJyeb_q4(CpKeiJw-t2z2_fNea^?K8wRS(-nTh3~0OIpcv*o>%|0SgUeFqiiUodXs8q5XBd zD~+1+7S}9Ts8j6R+R1fhR``5r>6fBqdRT`aB@&hm`5Clu&MI0X)~L15ddoUzUADZI zF{tkDvD~bG+`Z3z&VAYKa_h@FCKt#k&JNeEvO_q5vtJsnv(ai5j$1WXt}W8mBH*-Af?e^9c?2Wt0>@r8E&1(#fI(@RkW|wgrPhI%gp${)Uuxn)dzxb~H zpeU|8{@&j0-R}L|gWbK`z2kQGj)VIF9&pehg@)DCvHl<$MagaRwmZAshTJV9@x~@@drwb$pjm8$Y`cmXNo>OBnb)VUe8S{P zbC~R6cwfzM4<qx#9)l!Mpj!vgYq=BMCX^Gxp|xR9(eR+(48mE>CU z2I6JY%iacQo3~T?$k!I&k(Tean3-T=^!70?k8#D|)h&h&gc0CafCS2=EGRW-K#b-X zU@-iPFA~r&@@-pRqt;66>hN9nt82S%EhQZx7#bmaZaf#9UY7Tli&-DeaX5Wx*C|?I|XB#uQZ2tRld7wOd zp9Cx)0%T0ne*`6aW*)g&I| z4x;b+(Wqw^ST_VZ$|iW6b}P_1%;0s05;B@w^#;#-PQ`Dwl~9YDCAd@ilSD{j4y$Bg zkejohJxj{knWf7TB4;MxjMP@H^}f3DL4@-Fmf8RU*ogs#_=&N`3j`{j?NFOR-2o;A z!f^&Hj_j<5g-wct#i9X4g&TVS*yC z0BnGSWE7Gl0ezI$g|`@Y)aiD+oIbCK_XX)H6Out|P(k%Za*%xr>jf4wYecaaIwe|; zLuiK(ia7x#j&gqjZf}i*Ze=Zx-5+6B)AuYo%25M>$7CyoroY1AtYvt@x;(hOiNQcwck zRGmJ#1eP?ja6Nm9y^O3#&k9QT@C1sMqi}_1gMO_ipaPc;BLpUyObgE%kR=>KZ%&*%mhY_w?=*LgWvHt-(U90)N~u;V)E{7=^eQa?OmThQ-yG)v9U*l z`wpCcGG-SX4yK?2x-XnS&hf7;Kl|YD4&33tKf(VRk*#Z#*mC30u#l4uOeJ4Mb zgES&?W8WpBQ1j8@_4wZ1j_>V<->lyn<6JD2{`RUL*TZd^(OQRRq!Jy`f%&+3^}9U9 zr=>Y{&b8Aw;~lK}pN?$OZ$iw>1~KSW^QW`5EYYWY9=N0Q2ZofvOv9Scy4;#*O>Cp} zl~7%5dng{;7y5bZP^dZ9>9r9Qc7x@bLC_>g(LMrrBl#|wamolwo3}AvkxdZ=G-esm z*kOPM7|f8NY%(!)GkuiS+3C4-HT@xdnI>tmXo?c|@ANnOkNWke{FnVV{CE9&zfc%{ zZW38Fw#S}2AUYVKZfNG9};jK|3~ z<2hrm@w#XfDTh<@Z96Nm1Y7B1S*OeA2t~EPlT(?OlM~JJg&0%P@2${UNn5QZ+Q%gG zt2t0PmS2kt@Y-J#%`Yk{$oCaPIpk6Fpko9 zq>Xn7!{}g}Y?0Vx#90ihFwhR%3HXOWbX=dwuxk9D{Z#y!Kd*7=@@UvLV=(P^MxAWCE+!}m~LgBWl>r+Sm&_?U3kJ+E7oNXONyBhNheW`ZA~#DY(Dd}NcZSUXt;*sn$yfGn6`bW81vJt)I@ zUb4qQ9L9;buE}nDntF@cPaX1fdPooD?nFZNAkC6yG+Q2N*Xw=epjWF7g3#%_lEo@#{Fm{vk8R?-%s6_q*sarGMV`%1T)LH3fEQM#- z-?GG{3>&xxsWH|d*Js)y1!-lhAP;hbqGcNkMK;S4ajrXdS-LFWl5WW#OCQU|cBx$+ zj0|Q@awkPHk`YCqnYCrXseM@5r$G<~gZQ7;&;>jzG~(;vCNUTkM8PM5WLouvRH`Va zQfXO8${B}6{X@1Uv(08P3l6VS?UU@Dpoj2yj&dH4lM}ogn~385wXxVHDHe-LLPCm2 zkw_>bbD4}RaxBA!fXD$L0yY!j3?dYAKA$t^C8N1SI+si)5`-nkIDjz+2{Si_a@Vv= zgyPSnNKa-Qo&XZsu|6jc%S1>{$(v=Jj6KKS!lDX~YRq${VG}`{LZ%d2;A%sf`0Q)& zI2Z;VxV2hN@)~yH<;>j~G$BaO&!8X8k7!g{(4>O;etl!Sa}#n6wsLVakT0-fX!f;e zGvBPu?xZ@8aP$C89j9z` z9*cA-1B-}(IioaQ`2fh3dz#A)l`y!W6X?|X>ZuP$C0-6`CO8Ce3lfKp6uYT=MtJfNh={m$La?>G@Y)bwKNL!8%(8ISQef9!Aw9)Qpez>tHcyXgs9 zNAvtrr^6=qDGv8YcRT!`w|#)UZ65xYIyMAO^j#+qRTT+R$=h4(t+qCMyFG7TX; z_AV0>t;yD$_KqaC7*{LJ z-BLWiFrjE*t!ey*gomYushVj6kEr*bdRH3yL>vg!$2`2bMsKi4F@0SS8c5#k4#Ijv zLlAmuYB3%lKA`g$5fCJlN{AD@RTZr=19Rmz(4&j0TtU!q1;EOMc`}4Uswq&|ziT_l zF>Quu9ziouEuh3YF;lqJ9&?c_L=`C(i9%eC7|R9t{*Ili`opce+c##{uEkk+Y+br> z+p40v>|T*ftn5^`Z{R^Yq3iG2-Bm1h&Bg4=*swiBl^jHeiFcVzruR#7P5*mWXB8Y0VTh>}<}p zl5iYe10lFYVf|q}g$R^k9A=X_R6ET>9v1>yh0jB&69_(eOrDFVQ{_%A@#gL#lm9H7 z`5CB_^ZE=%%19as(q}+f>@@!Dab3UU+f*eYatFL-FEr*5>cA~3<@G4vF{T@nz z2UF!C_}tKYuy1pB>qa%`*Rf9(zy0hNzcI9wJ*x@vt-dv}z>hvZ_uobK?AzP?0oFxt97`!p+K^8LKIiTV+GglhIJddh%0sDs9=2;fnJQt!vu5$M@&Dl8jc;yBv z**8Y50Y_l5qbuPuh^4DoTpaB!aCmTxRqi2>2^1_G8jNN%PhtB9Hzv!s zAv5^~WP7fkIB^|c@DFFpv(Pbd7COqafBnVP>El1YHjQGFEPqo~s03EPq*7R6wzt)x zE0g>J>>*0ltq{e8++p1V_clD=X!#p?)_j?|Y`Ri+dBuC=zs*Kom(cB{4(N{RPU%RO zPn9L#!Ii!JI@!!*(My z)}|A{77Ez?-Tp88clq^xzWGZBwFu6uFuxAP@(C2dnS9|UlAu-rkn?}077z;#ERxPh zeN77Y1W6S2I0Ai$qrRf@?yGg;Ld?~OqomP9hQ2xuMBO75wInpK;jvR++4ryA<+;CH zKk$~Ss9lScqdR`#r$;YdJbL7!uK(!9O?#%EKU1#!sZ3%yA=-EAb1KkmKRk8*(Bbn_ z$X!n&cYR9tH4q0MDcn9AOqjaOgUr{NA22^5kF%6Y=87fwW|hLd&T-=R2wD}zRE6uf zgimzWuZz^zOA#S%v2isPv&m?ntdIqqjW$Q59Eg+V0*%ZOF*QbOuh~w`QUq0-1Y9U$ z7uSo!;vw;bI4hDOpO`ziXprmZ_e#hfpU?mpMMiCqaA>sZ+}8H!usj?iM>R%gSkC5R zeDh_q8V3CCg=k$=v$yak2ZJDf{YuwkFY>I}#)>lEa%=+bQCaL++;aWn7#?-~7hmof zsAYMI6>ED>mSy$*GY&WL`aG9SRi<@iq?tAFj`Dr3;9Es7kApt2ea)%Rsg_^0zQvwf zeU*LN^>)WQtN+8^l;2-{pS>%8xcdK$SAA?#*A>6_eK>y4cKp6SY{!1jeu0+_ z={5K*P8pjcLRUN7xinjcI~*^e;k7TP7G)VfzDVrEG-})PQhH84`5RP95zu zw0}0KRprr6Yt(IuHl)sE_dYw2rP8!~ocr#%*DuOB=l46mBL!ri#xCcE60)kP%cDaF zlSd1e!h!YjH;Oxoqi9d@hv@0z)99q~s=_~yE+nXj{n_qRSD(AAREQYi_BJ&*2nzY$ z6w|Xb+#aNPK#L|?w#*jo3SWc$=V_}4_SE1DZmesmZ3EP{ZqQyG-xME<)A7iPzO^aT zt=cZ(O${@oyK$@=cAF1X+Gt-FZwJ2hR1;a449jImlDKLHW~YTl-Gf-8F%3v2tJpNe z!5qODPUAhHrF)r`2E7he92kTLk^Q$2Oc*)dL$Hrbd@$j0vHx7K|){(PxwgZ>ykKz%{ETxNs+5S={7M6|F z6DxO~dMv55N8-Q4^{e(Iddqu;M{+r*Fj8(S+QNQD=`-Lgg;L$Cej@jQ5{nN)=hQL zISz4m3mE){OkUNwbv# zEb`v+=(f0feBJc{B_tRj>tEwX&i=%cyd)X)7J}}^@4mEUi4`)%aL8Wu%x)@2oOj42 z631`iIBul3fHatOgFJIVqcR$d_`{sXv%#D{807rPaNLuuf#`@HjT(9~p0>$;F>s)> z!g3tjN~WO}RxBHVG_M;d5s!!c91_Al#ij$61%R#*<;ismqUC?L4Yt+bU#Buydd^7~ zZ|uQ=oc7|_@C0b1)Z*8{|4VANA}mNU<6}EzMoa+7r!-^S1f1Lg+-0C*plP@fO0yp} zMbEh1PwISLpuH>%+~2ksncjcqt-bEoy#Ds`QEE0t{NE;E;*nNkOaYGe1_+<;5z6PIsU%0i zs7hRABWxrL${1;NOhpzc2rWre@SLEe0I+05k!3}eAmB-N#7#0PAf84%=Sv}_21nh1 zOre}u7AHkod>xJg8FFsOm0+(lCY_MplNjkToW#}932oe+AH^A-sgB>CsZI+sIKic9 zf)nynF6D9)Y)^LL$u}o@46+!&e=nndujX)q=j|747ao&+UoR0eRXYV+iEDu>1(z)J zQ0Jb%d+O^XZx9iC5EeRN&$FJRlrYW2Iyyx1=cV(DP3b?^FN?FY%#U#Nb6wxh=Do`GNYP_JaO0b(;CPdP2WIU1DnLIsKw}G4r-| zL;s_8OaF^j*RugFs%5FHmenWBiOd=8l6IZFuKY>+7=EnZp+3{@=we9rszDHPiXg~J zGNh<>nz$D2av*Rl$93qxk*5>Rdk($JdCH*#=c^9oIL9)Mlg=dV3<&zj2f8C zkY3C1X=F!`C8LlJ1#Qa;g@V2@0~*&%ScA{HUEql6_V$}@CR;Gw&NMb1acs;8Hes<~ zB6o8JW-h@~cy`d?L08w-QEuO0fg<-Pa*uKau|U<}DL2Ggn^mY@Qb)*K zT{ne#H6k>~reWMRg+?`EOg9f_Zj(b`ls(cUdd5?yGbN!;9vagGVg4tDH}PuRe;{iU zbJ?u%KTwvdR;%OVpZ9&<>7nobw0R-pH~oxoU%J4@?KYZD({q&C!l5iLk>v$G`oQ+r zYTM6t6EJ>6%+8}zkJb*2#-owMZK7{8kcu_xa2`UpQcB|!>iB$=K8E>r6r;34?QxGL z#DqjiMRC1IMFA8*BDooUR~oa&QkyH+;5FfFj2}#LN>Bcqz~nhgHq^$Ayh&A zsDO}Lsg#Swaw?VX=}DJ2vV|J#Id4^tmxUUx=qQA2(6+T;kOdmlv<`SY%#PvGh&+_X z=ToWUY00~1A5U)#cjQ_lB->#Q^L&JVz=wRdUx#hDe*RnX*3B7X+7z%Ms@GgqH*m(P zSnrznS0vfPr}fCRA=HVJI9h827{WCET430To~)-srP<$1nfbC*o4qxqFa8hvRT|sI zafRRPa(RhME_YYEJfs!5q$yXFMQKT05hJcdCyFHNux#g&p#$d&%{W;w zai-wKX@Z7x1Pw!5L0_L`O$%VLJ^Z}2fb7}@(<9atf?ADO$l~9bL#PD3irO2*tFgD( zr-=oeonvrq&!6sNo!Hp1ZQIF-Z96Bn%@fPmzvqpj^nlQG91FybH_G#s~IJn%A8oZk-jv2*?4kA z2ZA~IcIl|E(Ydra>LpQ?SNRCALR9zsdu_%3PpSK@HM#skAAVk{6m#47PTkjHsXjzN zfl!iD%2wg6gv0?F#!-4pTNR!arME=D;rzbRhMPyX&g*X@Xt@|c-Jx7yAwvndJNu@r zM#vF2r4RMj65ai{kRn3wkO?pZsnCc0Ir|Uk8`e{k54ew~cKn!J^DseSsu4QuX|tuk z4!lpJMzhT?sVKL%ySD*GAH@d0F&UgYW4Mf-gyYcX*brCD!%0ssOnq z>XdonSAn4E{=`7hNWW%KjmlPm7@OP`0g7s`XBi>UAKHp*-^KbaE^1|mJOuO?&6vZW zk<^?N8K|i9{pGT(viL$py-tu`AHSu-em&`$?T8mj`?s!%U%%A+^xh!d`UII_)k2)x z0F_rNGzqJ8CLr-7U`|7Fm~r8^K554voiVp4!De2A_+kFPXRRxTk4crHv;A6jvL5QU zB-GQ=ACUAooKDO+hbXv(&c4J{8PpmaBd+v0{*v&fe?%+>lOJpmrNy=~cjnlCJ;u9 zdK?0OrjAp|guhlxDXUGCQI!dipO~ZGN$yDX2WWqP9bimOA2reNNz#p>joAh7JYXUU zmx9NaGpw8ADi`!~7i|_Vajj*ct%Vcgh!h*)@d5Cr;ZPeCRHBYv5w2lEy|-ZIC%cS` zfBot6a8rOaX}PAS)sU8|A9AvQPD>Wa2|bK`1PxZ;`NPoV(#HtOABfE}4b7ns?}5I$ zHYDK1hz$p}l0IW7OSnnc1i3S!5y9eS*W6%WXSP}?hZugdO3*^QSZ+|o5nNeWU2I$iQh(8+X3@E@> zFK}YRZy%_Mb5I4y1W91i8*Z1>@1zCj%mnE2EtMP&c+eL#w)d&Hw#pu|cS#B8^cXn3 z2O_rbvzgA1X3F9zX*S%boesn)2lV8Ht9SAVG_|#PZ%@n$qh>$^t7Y#K!fray6%@7$ zis7BzFV5bNvCs_gkky(DePD)A{qcwovcU?<;Et$2_M`SXis|YSy!8vz?*kWTzBLqd zU>(#ooNh z{Xj<#P)G4R6nsx|Cb#7JsE0>rK531ppYp?hT;YniL|ADDeK2ai68RA4euemcUYzb- z6?H`RQt?awxiseut;~9%&cI(=_!-CW3=c54}=a)P8Wx35R zYx*+Xj!t#VzU<@(zFb>ItfM}+lCz!^+%2EIHrM_xmb8X(N5$N~soQ=&0onD-p#Dz~ zE%yJ5oPwiQcDFMj_!s_4#Kh6a!NShT*5MmyCFp2mV&g>c{}0h(VI!brXJjB?XJ8^= zWcr^VTGAqd{|TZ+BV=o3{Qo3rF)}lMd;dVX#4M~#mmHf^WW%M1dNOKg*u5aRM+8+%J&XjxbUFfhMiexJg^#N(l*%jcIe+Ou0~$F?60 z;<|>S%%X^jav9FCxSm2@f4PG)T+s+LkSC>REc+_mVr;zupjx%QkHTv% zHx+UF_s;XgWHULNDqPlm2m2H$XWE7B^F06BH@I>z5C%`*Qy&HItT!S-ef&PoiYQ5% zr1s(@qpgj4P&0hGs#=PLXzOZknLD$n{}0~n%d1?h99do;r9Ed zlrE*w#`{4L`(;YEwmSCe#1fKu22^8hg_fUYp!w%D!H*f>ndR(mz4V&fE!svVZ@<<* zC0%mc0hoJml#fiL;l_ zNB)9N6WRTK>UsqZ$%p6k`Kaz}jy@*0h&HF^66&omR1nwP%!6t}Ib=!sB=jA9T&@FG zde`moQ&10^^bda}*ozIYNR3)_%MdC{$gVy&5d77>Ugml>Z+B+{XL;&3q3C$e?d8By zYy=0d1qT`@u|NMpF^HPD zW1`$}VU`HD5c(P~%rPiZC!!pVQm;6vP-Aa;v?mNgc_v25k|{RN$0c{nsmXi@K#3d~ z`&`=TRTgqIN3kZP*TEn+iTJ+EzN9Ib*q04v@;BQ43 zdgqCFy$6-kJ;g4@_-JOq@Ww7@9OkepZaNC>(5y}BI@VKef0nyC(piIXR`puiolAf2 zX+;mniVfNYoB|FE(amgFo9h<$Tf?sZhzVP8O%^mYM#0Yra{a{kgGy+ab3smhc#T?y zs!}AIwtM8#uw*qOn^l6d+5<8%f^53(a$z`(Yx--MB8rJ3V>ls#mM*_YS%&v_dema$F`VK>g|yT zZf=1ycUCdNDN4KU_VHK~QJgzxz%NTSRmNYIoJwY?{>L24?Di3y#ths2Wz0hgWQX%O zfKySx`DA032?Fym;$l6(gj3A7&=K$vaSy&(I5K#EW}gp9JcS`@n7l&EhfE$s8EDej zXwQ>iLO9|Stxe-vhj4rd`Xa$wpjpcC&`G8IYk|*Md$D3fEIrPm(-OLcrlrzrjnn6X z{5@9b-rz0ZZ|i4<qWxp`*o{C1k;dMSTZ zUX{>qp(WlB+7+s&d2mMj@wV5F{cmUmMe$XmNaMaut7c~e&IBy|@;GSRuo1l(7qaeY zk>YzqcLAEYzMghITJelKY%b|RuQCz>&e)%E*!>X+1!L(QAMT>Er*bNLEoBAJxj}B9 ziSf}WTGVN;yE!lb^0G4j15yJ^Qbi-}uNY+X^wEtC8r1S3$|D=N}E@7K%u z)%ydeL6fb~urG3pzk4vZ%O69Oel!53II;2VMx&9{5aFg+U_C`Sd5KlkNy;sHr$*^! zjc{P(Vj4vfia}lt+c2VyfHtdFYsS-d(HJXZCPXO=+YQ*oh4&9;#gBusQ^4lSvsD186#!$=9VweGs39*!LXmB>^a&gW7)?#>QV8 zw{jcq1vd3s7-a79-1~XVZI~)1S|*k!73UARSKW&0s_TmF$-S>T20zX@ybbw|Y*(uo!-VM_B1@AZ`?O+@w5`Jf2rMz^<3xVn{VT zCsrQ0IPKCgXZ6Sp*at%FvW*)69<2}7U9`$ymWY#i-OSy!_++uzT%@N?6jn8e#bG@S zZgTxcr}>{EfIr?I-J4x&vU%IdNy(fduGdKEnj5N=BAbjtA20LQ#YCGeHp@*S!ftA3 z%!JY*Az6RG)?)sI5z3!WKCAcG)5b$HlaiCOOkdyV-1!_07&kgBTF5zftEB5me>hI3 ztkk&YPp6b)QTnWqG*~hwAt%+$VyhTAuhsZv;pIXXqsC$7t~$;8#WByXYX2z-C1+^( z9JGj~aZ&5>$Hdt~aXez%sU2WdL&ovPrU3(jlr*1=A~m#+=Wk@&G@KZR*$( z3`7_+sibOh_g-WbAcM%mv~-$%F*-Ko%$09s_%|Mz*Eq+R`lgp{0VRD$&41H3YQ*pf z?760{d*J{+S>qRSOjlbc8!UKr&{2YQ!sbgG-s#k@c48j?YiGALWiPas{lqBo6-SIO zCw9%x(1&t_=<@cx<4$oQWaN538p2=kEj08(Y>bEp1Bm@0UMnm=yVEw+PyQD96H3_A z1QX6TDGjJUn6QxP=yc( zc`+uP6smfbi^|$nnHGDXyRStx3DQV38z|13x{`3OyUt-3URX|=-+FEw38j$NcAkA+ zz5Ov?^YW^f%g9t$R9?Bn#8@V@mVbUX zQ+`v|vi`0IwI(`wnbq?Qd;MLr38~RpYdJplck*;Z$||FyP?4T9rHizESv_j?VMEALTyG(W*j?c?7~4K#+DT4|ZYxkmK40 zny$yJ1!GsAXaa|Zkdy|ua&?4>`$*MKvZ_`L%WPbN;_MioJrrHPZh}BhF@+64UYv7c z^eTo`a+=S}*f-uN6DNy7L5@r?iirs&%KeHJfZCyW+h#Hz^NqKWU26EFknE6QrE&10 z@1Xnw_nG_4UEqS}mi)BJhgqY1nKoKMOV8*K5&lKI!@94V^}Or3P6~8d%(a+%&1x_d zZ^6rDVTzvWoc*!OuHZ zjOajpAD~I)g{nRkLrhk@s$nSXanH&bn3$s*OmdZyGZr>wNTZC#k=LOgbPcBBKrX9O zMWQ5Z@_*yFzYm9>4Mg!1TjXpg67xGN<99M4vmR(YpqBKud_aFdZOw%Kgx?hC3`dxw z{N%m58R+#`ll8nEcE_+SA$CH-TcSHBex{~%ik9tdaOxAD>>Kw+(=`z_ufyY1S$bPS zJhSSfriIKFL*cA)-HGAY)wnwHouziO2GmF2j-%FA_X^XLh`LeI zlP;0F*;Wly*kZhryGiQGv%jGYcht;th0b~>Qj0t6nQ%zs%&H{{vE{XJ9Io9eFIH7@8tH|S74p_2Ig(oS$g1IFR}g$5!>|!-TYXmlkZJ_PHujNNDatorT8>H zGhQfj6ZwY~a)f|DqcNNl6*AZ%@RA!Vp1 zbH}?8nog`l8mFeOW&(p6PLgUzCnUBd`q4;cono{7d*grjM*AY9MgF^T%{}&XGS_bl zx?)oQ-$)bzm*}&YC!C3X54C0(l}4u0IkoviiaCr~Vh?Ss)lxW1Bh6i30@d^27I6p; zIe%gV6OGutgKpPrdp>P+n)rg*of4nsf#zI8!aWXUWm0~Tx|IFk{mt7B;UGQ0R}~Da zdoeeC;`7S5bsweP7xj+L3qfDvcdUQJ9eY-Y726ii`o{;gq|az(lo-_*txk*ps*QGH zAyfl5*~~v6D>I~fWCm0bBohvkK1FfYKTO3upXA(If(3Uaz$M?5&@?@o_py#uAI`8u zz;_99$-T0lYqcBuZnC#^UtpXPd`k@Jz#XW$2kG)hty-7)HOggOaZbS`(K-EnERSBf zyjcqmlJq%#?W@(jJdj=sOrentu;_7(1MM=E(#vr!Zzp6Omq|Gj*P(ki{Ps`XM~Rw%C2p8F>_;Jc8K@_yo@iX*(iu+uV>!6;)*&m zt5%mP{aIBVC5?sg^uPxn)f*469>o^EC5`ARmS&OiUwEGP;=dMrGNC|wz&798EI73Z z^fx}}-5b}4N3&>=cJO>l%%$$??qR-B4Sz(JPp32ayi{@*V+)ttQaakuR0U3~X_pN} z3-sbA>HACvpLlo~z2;ZE=#IR={^9}iLcda;sJz0yRZULW9#>)hBCk2fa*$?!M^*5ZMie`NSOM|$47mLN*Wlpeitat#m~2l*(37(V)ufz1YQU)c4nZC zZwd0X=NkE$+H2H)nOmx=D6q#|%RS^~y+JllxY8~0B&d38z~?~cXt27c<(E+b`c?;8 z!qlr)yH@+-qF6?K^2bca5A@oob$i2(gYxS}H6v=PGfE$rDz0aq${pto=jpq7FNhM` zawhOP(nc)uQEPi_Da#;dk@XAUtX%dJxT_ubjab_~vC&@dmhiP_t=e903GuR|B}Z(X zf?w*v-W(dAqj1EHxbp$EiR9KF;j7pp8F@`fUX%Nu?#=9i|DxZ$B%)zEFQ{RqEnKS?$tI*w)%0HXa=N%hI)l^@m8P# zpz)(6TaksuDPb<`#0V+L%7x*WNxLtIAhrsH-cN0)4R zhIghJDeGSTljByphIeUf%hr5DN9mJyBt757TG57$YlQ6uA8Z?ep@6Aa2>@v*5b!`` zGe7P@%T5d=9(NQ&jS*55zL?JRl6kdd|3HI60->CMzb=l)E!=7b%YD#I0)g2AiRGza zXgdF^Aq++20)k5ge)fYPz#_#^a6m#R6m<3r0pcM?`gfx+D6u?Sp*vdKEc>;-o~53u z29qmHzmHh`2Fe)!oqhih9cRcHVkeEc*|p7zfsGU~z-)v~eTdA6fQ4b@;&u3^Rgs1j zUB}VhkQ*Zg`+n@8Bmt9;V86J@&6bT%Q6D2*( z+c{+#>~b?7`o#je*+$DnyO}%hi!-=Si6m^W zdhcF9gYW4ugi9OeV#CsDyxvPY-3w`N4R4(t&2Y+c!+0(hZzP0v#|-{SY{GJ9TVl~z z_OYfqj0*@YFlzkM>TR%L%97H&SH`Y+Iya`YGS;7hB?Dl!Umy{W0l&tC1asxX;5Ec>p0@DZ_i3peO)^3b|7s8zVC|l3q!0ydD&v>1ea>OB=;6T zd$_4Prqz`Alu{!e>(3L}4~A+0Q=griLMju5_7j#bCIoaeKJxe59K!@>Rmx-KadtmrVj zfGL9j-Goi_-o!RF~nX=ep<^WziIz7;VGKAfL^%lPh_d(H{V za9cAb{j_Zr8I>Q!Y>*+z1UaD!6#dSn2b*m}T{2||VQh@h?oj8p78pC&n3)~GEq_9~ zAi~;Rbi2y4ROVBsDpGdQIDQW9PI(3@5k&U zNmFoxpX$Af$MVPTZP<}K0?Q0iLVR>B>=E`2{e=I(J-wdU&ifvSzjEKZo_r7D{+az} zkjSpH>oh@VhsXg1Kw2THMOuNf0&D&j8wid+?YE+O#q=Y-Mf`0!fU|1+55&-E4f9{B$=JM%sGPfPABQz1`zTPFsbb#Vg;DSGWW`GMRy zU;^Vgp+a{U0C5w*e}v#)N#`Lw4e&2gVtmxOgG&hT5Mn|{2KK|hwR?Nxw)ZVJ9-i!P z;eA`=|6!W}P5XJMosXc|BpWe+fpgFuLlPi}8^|+3?jiz0h~qhdH2w(o7{BV{mFf{tZ0}p&mjA!oh+GR5uj^--pI{vaKU~JW zT_#B%hfzI^)i7C<(R6G>c&1N52ld#=o$XZPw?VF=|~UniVJs7TM-~j9v^fuF_a~H#QES~<3RJ3 zs>Y4^aN>C!xLwJ+UAekdKX$7$;%WBgdF;APo#d(h(y=YLIYy@c`7Vk1vWYP~O}drj zCSsT|*gDA7RfRf_p7b#NQAk=hj;T|tKAX+AqNhp&t=;sjhekvE&u6~z z0~2gYWfkm*)Dl_9RQ%%5%q?}rVyA5q_5A_UUCk2Ko!pYmd`ojiO277KW}=eR1hZ;` zMlD;a@ZBlsov<3m`;3d3-Qo5wt6<*-1)xlWbS0ooJA9@Dy+N|T}L6iBg1N!yt+BRoC{D+)vr!?XNe{T zqM+oVY|+v5{#Kq<1ARGvhSjqqQQ@RllKohNKR*{}|E1>*XX1UE?bB1Ar}Xq|PSeBI z?C!2&?(?j>al562UrY7!Q^b{PDyOGi4ZgmJ+hv1BS*4Q zBU>``vqoowtmZ4;y-0v@!dsE3z6Bl7-R^Snw(xL_M!abZ`lcGruH@F0SAU3QV}eRHXIPQj#e`Ba zoQ4)1nKr!BE}WFlC!BH9@oP#+BizsKepPB8kDbkC)q}gJR}6oRdo&FX+pFw)nmz7j zc~3?zzdc@E{94+2a$MS9*5Q;rT-gQ2b|Qz@f{qa&3m2+F+p zLs9XU7lt>}DG=cWf992A3z85d#|FO^RJ@8CizKXMax=@qftB&6ZhB62J$XG{Y^L31 zd6Lze3O@5V9AW4=7Mbcf3KtabN!y2{`#mol_*>Li!0>U#g;nm}6^Dmf5VA)2fqXgh z)_#3`X)M+x$=P`$ldLt>K;S?B{p`}qT6kG}hw-|L*>(gYwu@Aq2wzO%3GkHG9$!7| z|10Ri*_^4bs)~MkfaX?_Z_9iC0W$#56-D$qs`3v$0@sa%&%Z*<0^VMccZ%4tgd=>E zw5tzOQ^kiQ2z%4*fWQS`#j0;a4S^vEvv0nTsBmsqmXa|+cjqG^|UzfiwQLi0%@iH~VHJ*)iU8tJXYKXM3BkNjNXSqg|iBF4)k{#z~*OA$(Q7Ala!DZYnvG{P_ zEHP>+hBwS<9>Bt(~kwyv5wlD%xo`u-ufy_Yzi3e2!z57&)-)bEN#XAfuR8T1Dbd&G$;t^#8*;s;;l=zhso&U7doj)1+=5Z-J$ZI)WguX-Up}%K zHvH}0`{udjP5dhu6l$P35VC0gN;M!Qrl~PoB1CuG6wlj4)fxvg7DGP*I8cnHuETE> z%sGkYC`Dtf=7Q(M0@y&RU?)K*rB-v>1M_Mn2U(9oB=a~E$1(f@lPsH>P2Yh=L2Sh( zqdELKn8HCqNtuMkL>4;-_f<#8$x4b@nF3AwLo&WrW3vTDVyN&2N}o!6|~uoTv7(R9N{8RrKO zoRqyy_oD_u7it*U>OB|ZyL56Lg&pPcjaiMYD+6h(Q<%yDK`mM;0y|U^GCPf}rtf{m zyQ3p5d}bS_>6?#aiup2Je3Ch zd-gV%FvensD3bIk#s2X`xE8)=v3_BvoccJ;hw|cb)>g*c0N9w9>F?l)qPYIc1~4#N zU>Yj+;AWr1@lNaY zcHod8AK6eUf>8z|8Jo3u^Y2SsoL_GveQMjiXav|ji)moxeVi+oIRTg;)y_w6iC!Nz zcx113G>`0!KH}%DdDc*d0<3zB<`~gsUfrMtbka`uFOicHAFs1J2+to6*awLrnMn<# z!>Mqo3*1~+fn(sdQnX$JbBuF$BmYh0po*~nKud7=|6Uzh7W8d4Cs%<)+ zb!;queX22q9z9H5Ua!4VQ{HfLAD_Ro*I$QyIV>a!8J^WuqY+-2v6WQUcb)^c`!!BJ z&&$eO6_Z^HOCbFi9}fF*j4!#<%$q(hbqxr<)~J?}jjfLJ-;_)&Y*AV_)vVS(g6Xxawt)n|me64h?i_+93+;3FV=)Wo_M5j)Q;&!5Z&zMyby3$|oFlg} zBreDq$t>aYLC64PWK7t#(Znb)>||Qmh3Mwn zR0(dB#hp(D%KI%LDj%d+jy^MnV7BdQ7OI!PReU=_(ldYD<$C=xviWq!w~hZfjHcr| z@m&Xy_nh5_f@Og{^a5e=t-nFN<*BJESUfzZZy>3PH4ccLojqU#3*58?sKMSz;gWOo zLx%&8OT#gnpE?sRtEP=iTZtx8U$vC;9jGN5->xP~yJ1!p=cvI;Zj$&tw10F4eAlbA z|F~&AHr&Pi11}?swZZ2ir}ytC)x9+8f~zw>wKz3F&86Zb>SbI-<-K8C?XbtZyS-xJ z>tF$auwIrFF+Kh;1pt#U=J%7z8c4Dh514`Iu%oX4p&l9 zC0XGzJ2KeGbnXS3+m7Vkjv-!{nA0nC#i-QG>?kJFDGO#tuDCpGt3~g{JfYhd+Hk5yc1D1lgkzj{qgXM^o{GA9woY>%H`C@LaR%B_K&1(qb?%2uUL!iKE5Swt?k7r@vnCjq#Kk$`O> zmv2SkD7dW7Q{hBuSTp_-VHC5D52!+)XdaxMu#rdK5Ohs4j0azF_B3^YZsUaA*h{mk zDT6yDnfi%Q&_>NF{0K0rh*uHh{h_PtQEi7V{yE#?8COhh;

Jnd@rRTSRwNS>cD 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⋘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

$1q4XN?^bh@k_Q9BekO68BbO8OIJ#k5BW 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%0DpT6+u26-N zOB_bwdF@6(7%;WS9E{S4%mKf)?kfynFeo5JNH7!g)7T~AF{2g%LSM76WKp%QFw-bk zQ0x_g6sevSnKPGgHef2^&kPr5$`=7nAU4cXxxRFL;29{NUzRzXYTo*IW%qnITXB5& z@w(4!WsroP2(H+_{vgOkHmg>A@iJ_kI%Vl5ynK!n+%>6S8qmSY7({qp5XKxq4(Imk zLi*l>)f$QFTBf34sZqi;a5G&aYGbc|nZRrui0+q2+n)#J<%vN9BmF^op!I0vK(s){ z{B`x-Zn=_;gXD;zMd!Sj*0{s(i&F3JP_Kwj=A)UI`!ON7Pbkt4F@=uJd=cw#>nSPF z&V!G5!LMOEF zaV(Mj4*}~LempWHtO;{-lb>jVz3<=pNYxF^t8-t5F1^-tU)N<2kZk(87zAO}`}_KJ-Lg6?P?z!ElmlLmVW>eD_+C^aUYE;{sVs2O-%L*_n16aF zz0-_Xp%wC85N(CSZ>^R?y=Td<^W6e=>7W{Q6?U1pHkiEBDvCbtP}g5+;|`^xy9B0K|C%K+o(6q^am$^}*|22>pRaJB zOCkP|qO1{Kw$-}>@BG1IBJ$ex+4Sz~@6uP1ms-M>3R4yNUUA5&&lX9HPdj2(4KU{C zW}36SH-W(82|1`HluXkFg^OwIVb&rqS}MXe0FdWnmTll8Fnwxi)-Wr@3vWCE0z)`= z5rSP4cd^^pfYcDsd(#WG`aEmRgLWaw5Bp-t?l=MWl<>P}!}FS!3z3I{oz2cm(4gM-H*Y8QRf9`^GL z6nHrFw(^+}&ytI6fwAp%vx$P}A&*DEhilDu>1C{Q5!lXxm$0Fu?DpX(ujV+%ye|I19D!Yw z#|j_Ru3^V)hr?97nety|l+dHQ40<+(@0HER9sb;D?MhRRpt}s&o%M6pb+U$^moprO zyhC?Iw+Hf@P*(Ix=jLf??He@4>Ml*~TP=Jb2LKHK7E_GP9C|Tl4^47B6HR_nmThAz zp_98uR5>wc7zu`lh8w|7n-~79I+id~zVJ_?7xIbKc1%BU*8*^K(Y>#h<&gY(Z5U{gkepyb z=S@(!S6L?ly0^D6#J4d$LS3!KKj`azx5fDM9KyZKs%t8{XH0;7lcC5%yPu{IU6U;h zBZ<$Hcp7s`ELQFR{D9E93H*RA0KE#s(-6JG361IUyR7txa)ZB*)_{E1E@y7br%7|H zs?Eq^siRQG3t*qau#MPl(ALVQ@nCKpl3z7=Ix1)h;aUmqnkzrH_omyBJHMRwijrL7 z$zd2G9k^tu*`c&xz9~`qB+_2u9l$jq{AHNcnnauGO@ZLDmFG)=9l|as?ZL{T&YMru zfg1w^%kRU}k1iW-p~Fe89SAz-Od1G5}suh>gt zh86vSuLpdBV5SLO1>y>5l80ls-kn3UaTMJCJ4R7*mKE!rrvVS-6K3m)ZB9kjX_s(j zG^VL)+qs8PkDDGApI7&DxjN?6+YVwC|8j^b#SvtSq9hq;$xlU(ss_`Mhu;@4HvG~+ z5B2o{=Q8b+bBjBBgUWH;fV-E-4i2l|agN*ZimThd-%<7Itvh_JlfQr2Hgub3b${+N zg((mkLEInjYgbcgQ~blXP=A%49O49ZKHQvm(KYp3hlpXYF-0X#a|Z{E+X2z|#b(ov zY)+wP4ugd3cm+2tVQUcvU)2TDm>b_=xNG0X^JJ|w)O_XGo<1#+d~E0fz(PO&K`M*( z`v=*`qp^9H1)p+NhdX_1Fp;yK4jhR=oGjR*ACq-;R+TK)EoLDNm1We*##xk#${cEm zv;Lc;I@*b$%B`Y_fy$|6W7Nu1s)d+zw7-`EbeVjl^G1;*Ap#1*#Ninf+z^9ABY+46 zgnn`1FFgwtm_7kH$gQiTLKh5hQzP{ts$uf#kOF%Dp5M0vXhkMqb|?{r!tbbo5hfJ2oB zt+?&r0l=Nm7=Uzt=y0smo=3-6Awy$dAA;f42=x2>uD8HhJnpk&>d%rQ(%S`ZhcGQ- zF!4sM0N>Wj7iX-V23a4l$c<{1(OAVi!aTwdPuaCi-sR2Arsjc%qLt0rCfAg691G8Q zt4qB#&Y6dY`p(YtDwztTT_=a{-*K>qYq9%hu^rl8)@8YYuIuuvRG^XO7$pQ34Vh_K ze4ciAE9{ul_!hPAq-buhFT*EJ+5o?7j>lDRB~yAN#yufm9FMAdm|O#2iqeEHAq!R!gB`e$>27HdgDD1 z7b0n{C(oEG2{i^HV;}2oH#?qPOx(tk=cCH=FWKNVeaG-YnT$EWQVU)Zm zR3vf8#u%m@WnfIl)wAbFa=?a??B~#WsE)yVgi(d07%?PnsrPE5S@Cd)!30SKJPWi)7U-&3u~g`EdX2-cvSsIDj; zR^Q@yNE&^I3N%RZgGj%zgDCVf!+MlsMa#6843VSa*noK z0`obJ3;)?r77oiL7U4b%{W5##p2x~ezY7ll`bjTsU z9Eu;Xm9}jvcc2p1gz?TVJYjU7Gx}TyQC}}NQz`)7Wb8tAKJ!u#+3Kf+mTg`-_`&+2}(iHy|cmK}`wSNuyZ#RhluL!kYy7E5-gnt!k zbqTmdcnL{qluSgwgjz`_Nl^|RWoc$30edACK@mY|3ppBfYGYm}N*Pllds7oFQ3?$P zabjW%TRLtoTSz4mV{TJh0bLOrZbK6~8EF+6acez0OKWRkerFXmHBwbUIu=S+C9N+# zSC*Qdz?_R;+02fL<~zUI*G0yE>MwuA_-Aq$7}@?ye);P=`L`MSAJyD1)bqb*C>CC! zB5k|N3g3CEIuQp#iTEwSmsM=frCR}8QT4yA7Q}m3*efM|)E$%xgj)W`> ztFX6o)tNfX_NF9?ccSt2cqxiKl0!cLmbC~wUDhj z#J!=@xKjo56+0S7e`uMLcs1`Aili~t>KJc{D~Zt95XgLNSIR7@#{l~+2JVC5Mo6h* z#fm(~C`2-M`RQ?QcPCOk_4=;3M$mG5X=pfzj`Pz@O9|{P<|X;4?FSq^GLY zvakBOA2OoP`aREbEj@PtPoVOM))AVXzGs7Nj1q1pp_zMJcpev@Bt+V2jDxoR{i+N- zh}Zedbo4oynTJ{1d0Q)6y|w$hX^<3RN%fn;iQCA}JzB|me$(QW2RQl)Jsm7H5X_WQ zO~dwsE=O~P+`{PuY)4>k^qNl1H9h+p>eQhkJ#`;GY9JGzhFeTb-DowG1c*XHrsVSs z>`sNT*V!}_>dA#4F5^rKiM!$G((_fpufLIS7c==Pgwk+VD3@f09k(*VN461DUsyDd zgZ%VuZUz zN(KQC5*$tC&~s0`&y^A49tXNVwGWzsCRQ_OOSw6J?HjefK=;6feEEULIvS7}Q8q{R zo1?hhRFK`+UF1;h=Lz-&=Qsl1X)o&Jveksu(DCFH-o$&-JL{cTi$FSwppPzP4xw5L7fywNDxn6iK=%nZ4oOeKCD`X zb0mpU3|zGvNXsZ5Oh0%odF|f+ALiaVuBx@`8U_TB1}W+8+_35H?(Xi~v>=EeEl8Ji zDInb?(%m9TNOy}MA@XfdlyeUE_n!Cto#%ee`3Ld*Tzjo+uWO7s<{Wcg6Sk)zwwMDS z#O_4IZm(%9$jXa#GRJt7@O}?kOiN$mkvwFDGP*<1|I98JM+4@?_gq2M$*`8JP(wE$ z`@_M!L*IfdveKtsysMU^l`sW`cJ+g`OfvL=1k;<6HY<<_!0p#MfzCxOCt=RLFtVoi zVY1;|l})~m`O$rjU0FxwYtMCuqlDyOjXQg>DEbCnvrdZGRgD+VEG_u6Xrs(767EQq zo5N5c=)*8}80`ZNw=_L<)rwwIH%|gin&*hwjp<6%Q}bvcndfD&nxt??4^|pxQRZK& zGS&~7xvZjhE0%|aIJ%`vIRig9F7i&m>qovpV1|&ldXjkyUR@&26T<ce-{oF>tXta|*J{+Pcu#No$xeJDRHt*~;>ns8~y}>k2y2DFLMT zTr4H1q!h`8*(r43$(?v@Gz_)Xz%wqu|H(1xii6bkd3AMp?Cm54LAP?@b$uLsKi9@4 zus`e9*LS@pw^AY4zi{=9-FyhikVOQj|?cW&GLiEmq|gQZ_~-@NTnS! zrRwCNwJ5PC(kZl#q~MtXNSEp1IB<7%Vwk>66d2{NfF1Tu9m+kzN z___jpr9lwBDxgTHy;;rLo3vu=JqZJWN@qD z7(I?}rqD2pZqpa#(x=WskRV3TiyWj1Tk=kl#Ec1)A^gr-+*v6SPa-6(d7?oqMJDB! z6DpJF!i5z6O{-Y$UU~~m;2kN+3GCA`H=l|E!UwXM3G@SXxyxM!{H#eL5h6jFB$Z16 z?Hxu0_QWK^!7QI36>V7T$%bErM1qb6s;4TO9*a`2K8-ujh0J0e2^?OBM#LltK!lJI z^St=_p0$m_&Ue>Mh!K*;C?45v(JMmnWzHCYSCB)zmf%R_^Ptf~>G^z1$RZ)!76}m^ zUg$}uddLxmLmt7^BUF_B`FJs zqXzi&#I3UMeBKr!-61c6)!`psX2Xc6hU{u=JS%(I758?)ah2#fU0trL$Px@EE2^o; zGC~0PCsW+e=cJvu_F=?5LTo~Lfek8{)U2WYcfv7wpO3S=F6WWV&ViJnrmDaab*fB? zNe*zDfX1Onb@kZ>K^q{-;!bv%c=SbJsCBppuYVGi-A^^v*LY!3UEN9G1{XV)7Uc}r z^5*mjrr=N$N;?kupkd3p|NCKs47N0MU6~G{UD*TQujAG>ud0dN)-rg?oI)4XH_2hDSqF{&Cz>MNV!KKQ$*lLM_6lidz^QwV zf{k_6owsDfFn0U+#n}(l-b_4CJEv?Jm_s-;081lnrudM*a?}qfxTGU4uHQlR4@m!a zk`&mb^Bd;CQtZmr^d~iUD@$FI&@Yw(fIT)pi0g-*1Atv!KYst`c7upmiNvTp z3HJddD3z8AiJ_pIV|!*ss*D>TKfWAu|?QR_H$r7QuXtCDsU#6>zd!;`j19!2dVZDu;%__i%4m$p`KD0el#B0i zrP^YTc3ANpc_6w1zPgBf;+xiED3GvbehVk(++W++$oWD;?-}|Gyn3)Bvo2vO!k4lL z=6+_$Y*usO$RS2z4V0OJ?HLtO(lC-``h;Fz4xou_W@1@!W^#MbT})YK@&}WhWvTt6 zRYcE}Z0tFN?8&}N<~DF{AFQ;EqR}pO4I@8S&A`zj;X(wV<@kq$$QiSQ0r_@O4MqFy zX%*)l3A5&y~&94MUwcw~Eb3;Ox+YUyS&^EAqV z&Z!%ERs@OkfCu9vukD~sxNzC>X=AZF_?`A7fn7DDe9$kI-9$ws%vJTOT>Ljr!&REX zjMA`Qm;{#!U;)6QGoU^Cbe{#4Kk{$vCHsudgzOg!6nhih7slE8j%n3&$4e~= zo@Xl3n!EN`;M)ww8I91BfguFfV4srQL%$3isSizw_Ih!q z5mq|rkiHLJGRe)(#AwqOEv#>2*Da<&+QRnB9RKu3#!QEmOIc|2@V zhK@>twtz4l9xr4MRHtoNglDT2Aiv9NdVhU{o-i{l+*qf^@w>C5oI#DGcBenvJHFTT z9_3#{Gn7PNkNk)(&YB(`A(IL}xM#&@$EJ1K|Egc=F=|E=#ms4%;_-S^z)SAr`L1pU zFjIV}#^tz;DX!H4CkOCX%n4w=5s3fG7 z8*_G`u7a*L4ZH{`4TUHZvkSiq2?@2JHM=<2nl|ZHBnjK2-$kS)x359vAnDFT6UGL+sY%8Q^~fFIoi7YV zh9+>z!()g&i^K?G-EG1_9_pQw)3R1nWb}g~|Be}HHLTqIpqDYS6!BBzMS&p~G>K0v zZf}DxC17yJ-{vS&d!HE#uJD|BG4no71*Rw(3VIYPoJRH67cv5xjQfwrU3p~#%} zRW!popg31ByFIoEb+ni(|I9v?5KcsEF%E^|8nqnVk*WT+IWFB#3&->Uf(wZg5=bAS zJlMIEQWM(3ETfVvTtvKCaxH|tjNA{=`r3orQSM_;v?z+LaIjlz{oN3 z`}zJ`Z8R3%Rb@7ahrtSBgoczX;U9)kPoizO(MI6XC;KfhjJSgnk;9XKhE&~(=<-q? zFmIR5AI!ght2bVq7bxb?;?dTyYY!1I2d{A6H|foivedOTVmxToP~R+ALfa`BHydC* zKamY`!}93e@G(1TR{}-Z(X0^!yi?Jv85gP07Tz7y{_MXzHdU`xx327A(6AH`!@0&I zHELY=%?J&jP702nG2o6v`3F+DM{Hm>=-K`gI-rS-d}uO5h6=##grWe>EcMmkYZxlP z{jiT*%k;)Y26E$A6%yg=1;eL-QK{wvO?oP`do@$XA+oT^4O+QDjfEdKk|~T^E6K{(@k4Kbfvl9)U|pK?h|cpXi7$o z_G*x-ycl0WxNbLZZ$4VLEas51`iE9iLZUc{`92f-K)F7I{zb_F42Sly>BjC<+66UP zDh$rMM-El#JNFAJE!;o3+Y~!*d5?dXX15c;7An`+d|X1?*xYL1`+TOJEmg~?CV0e3 zF52qud4adDdD-k!!y_ADVdlC<##5K~!-%ET-^q`7=pP2A>F*$a7H|pj?}B0iwR>6z z!fgiQ@FUxLGzsx0jQYbe4(@4zN&-0ACib60+<~Y=?|X0y&R^}L%N@rFj%Ji~p;i?3rOnlX{r%cTL1HRdR06p-BGPrd9i#WJ~ zn+DjxfBMA2&bu_df&NrhHhg$?LcB0XLNVptzsP2iynome%A}R9&>@_E`*haQie;!gq3b zVqC4M)O!2!3A>0!90^FC= z5j7U(;H^mg@5L~7HhYqf5i2!%KZAU%GuQge{gm{R{i^GMRrZ8NTnQ9~J>;{eQ`l;& zeTb-Pfz``g;Gv6P^5O)j8#-B-%PUH*hcC@rLC<#KUqo| zBhu;Rq99DSGF8TMTZ*KO_>EM**_>w+CbcA60#+3Vhc@BwS^tkX(^mXMqDBibUxX zCih;36N$a2`EF?_y_hzw?_#rI{}o9Ip(SO|{y-J zItx%(kZq%PMia9bSY4C`Yo7qnjv++eDp1u%)Fcu=$7o>Y!#?w$X*KrMsN3^D&>NdM zLCXsXA41-2$v7M2JOa4#>*Esp)nZ4e#>=NaXcx7u^v09IBC|;}R`Nri=_*-ZSSWxl zIbTyBa$PTkeo{B}!Cg+Y(7f1Sm!u>*=RxH2&n*R|HSjW;;3k^3`MJZjsS`{ds&lw0 z1n0-qQ2|AxlLhOT&i5Ze&rUyv#rg{JfSW3QtJCh$2_GAlKd?M#AqJF>EnO0K$M&yF zxhFl1Qi==7s1I#Ovy#r$MAFnfkjf-2%j2KKZsfI@IbJfaJrbsNvO&SM@2+yz&DH}G zh?b+_!u@s6^($zqe$CPuKd|Jxf(RpRLf9*4t$3>8$%Fb*nX?B^5Ei}b`4qTEqwdJ_ zv{$l>OS|Lx)lO*=I3TJ>Y_z-KtnQXkJVaf2HOtEo7J=dv#_+M-MQcXMM3KTGJZbE^ zK2J6o#u6&THo_;Ilg6QU=&{JQeM1W_E8P+;)!!-PpRUT^bH+kg)9tLodD1l;zPMLN zOs@*|IK=oz!k*YerK3IPPUSjMD8zCN+F+|9z`*XZvzU1g?$BYx-0pwJ{=C@6i}wMI zTHbV8%;ExmgPhWU8{1$n0=!;DX}agGG2>8It~}I?DyD$uCd=D2Zqziz!@;aWMNLn= zr$?re-PwZemhaz*fPBS~p467mc^EJxOuWT!n%`p5ww*Y7xFX}2S@?p@oxT)`m*Y-^ zvTAjdmb%;L)N~LWU%*kw!#!ThvE6{9*l_h0hFwO@FAxE)=#e7CCWiOu-8gf-ICJ09 z+%0tD3@_5z(5`_l!rOd$ZoJ|Ku{|R)KD74S$pNLt_yRj{R!(7kEo5bcU97XEdO}XF zGoneO#K`|Fk<)I&bya)Gysdy3#<3{AvWi|LpcM%kv$qwyjuqZ0#>Asypvtkb629$8 znGV}I^hD&Y^Y==B!b1v|Jd$Zvc zXc7FGIL$JPH~pe#$Ke~gl21H?iSEWlKJD+~qUtP2_t5gZfMbSu1v79iZfiJNd zzzS}^`vu`wbowjW_#bHayrlfU-Qx*h`F~4?{tQrVxLW|=?#Dj_1uWM(_#X@kuCDnf z{`>C)1uXv|9cna z708u@^||e}w1FlR*5XDWNqBh@84*JgHhCTeF&j}XfQdYpzJm2>0${HFu{{%6i7q3b{=g4CF7*D|>V_UmVKn{_lvcU0 zAFZ??Rsn=XjG2=jh49@`&ZX}O0IrcEdOjhj%F`7wWhL^p;<7ZFB&~Uljx9CE@vI{=f%aifN%gpS8wZbwYqWrhaEQ-%(cOcGF zkta9TT@$%rRpOp@Yp(Z+BCRy#-WLmoITPjoM+anz?&i2sMrk6};cv!-gF+W$ejw3UIKVNTVa-{w+m*uJ62MVF3SYv%5 z{o@u?@@GiF47^{5V1%AOUEPnZY*imU^*xALuz1}aN-v)Ca;Lv~2cM(30%4Exa6$;T zICPj-gy?$e12a_JsAyU-6Gq4uvg7%ksi^Mg{LaN(=jJYZMUy z^dd@7THtB;^x87SQR1-|E!0bEejzkfVQ76#hncX%2%9}vhVNoA;w~)ZUgI@);$Y%) z312V`6zmi9^>m2y?b-Khh$~E2w)Ix8LC9cI>Us2#KY63WCtLxI%gtKJ((m)ETF1-l zUZ)5UX!AgKI%M_*BA6e-?Kf*DCGzG#LQvHAw#!cdXZX z@29w9xfXl>B#!^DB`aC~s*C$tWzTy#5K5G6ZWR=>QG+{@U_+k6S_sLIFuc>F zoab*iJx}#Jqv-=F6+msMiLx5D2hF z_-1l$;ihLHj{rLvChcFuOH8EG@}OMqsD3au;tNRddoH^$6BMeRap=}YvlQctrRYeT zOy;$kt|GA>VNHp3B;;B-Ybm*qoexZBt~~D==`}wvb~8uakCV>Ch#RH(X4`^caj(!( z90N`Lb$}}1)LdXEkOrTbIz})y>s>VjJUzARH_;cWl~bjQ$Q>Khi-u=Vo|3R}w+3EBpkNPD_j4(r@pCMq~Ra>m*fqfWVl@i8BjR zh*^<9JYRl?eRA1)D}LvCE^Uf7`$f{)XZUfC#9-QT(ddZc>UN`ga&5RE(dWDx3Sq^f zR&?&`a$b8YjYMaqclArxq|x=b+NRw|>h8B_x|N!vpId5)I2?!9D?9ll8h#LTc4~_~ zTz-N}Q1#$*gxr&uhryWPHe0w9=+jvUX_`7}mblL983=(p%ERTa2RA*2A1})xJM>bxdEISlI5S3=ekU0?h8XB`1~ZAY=TT#V?YsGS z_yC&G~Q3U$R~s1^+Lh{~FhCK>syE z{Dgki>yZ8*g#N2*{t4#(J0U#lUqj$a=-2sCrvh=3=sP(pJIl#QxY{!ClktI1#B(O$ zp<)y^qM_omuu+j?baa%F; za8@f4QL8FKXIZzY%#&=_%Md51MJu1;JpwFpHcZ*cgrN#IXj?4qAE&TdZ26OZq=Scp z3hir$?0W96>$mjGhC2Ca8_P%VBy&S9a+)_w_d~^Mn`LqZjzbyeY>rv$JW*?zMY+Z=L}TUKDc1 zs;D9X;}~mF)>M}S1+X1r+DLmqOpy^O&4xkX9%+qW74t|iI^&T zl}57Ejx*1!J%tS^Rr+P$8Y=_Dhzt%3?e}ajgvB0k^-+-Cdtx3Y5=5~HA6O3qWOh>& z-pn_T&=r}{i!~XqQmkV3*)OG*pas(4ybY?(%OvDbWf7V4($WY+tuE-pv#bxWP}(iR zU4M3m%N)lYFS?=NJMtGjJEC4JOEZ#X93lVk84nSdz$nc67Sv|QFNw@aWl9lkZ-O)_ ztVd)%jTu&Gme53*4QkW(dRkPVsdgZ4ABQ~RwU*cjW-d*}GJi$)=H(EFW_fT23q@So z*i3@ifVTOw!hW&I&TVS4X~v?Lrel+K+mT|hao!(~N4~bH9DeW&ew`ICfnY8iN)wl_ z^K>UpvqEcq!>(Y+4PNiJg0t6UBtDz@H8BsJm0WP8%U|G_?P)h+v3@JsQ% zB?8NMP@yfSnFr&vcNr1MHzrTUteB{ozG5vUoO&1=H~n!nOF{YXuXfF0J0CG(UA)p7 ze5csLj$N((pH}8}WC#8=(R7LIat>3>h)ri2d(;H4wbQFh$0lKPU=ium zci-*IQAlsHRo|J?nrJRF;FXq+p|rv?d=LngYpjGZyGZ7$O-W@&<150YKyP{s_N}4f z^kKxxMYqT~ef}QZHV~O}3|PF|Yqg+J?)#a)j+C~;;nKGTY%OSI5>RE3!(24Q8hDzQ zA~mW(Od-dnLhc{-ChP^r$QPhVysF$H0sI2Bh2NLvpfwbO>FGm-n)e*C1dj@`hEDrv zlW9E|e0}HyC}UVg{H##pF`>Y=wf$F6o(cUiV=VKeZzcSXok@~3(dXtp!DrZfn_pLs zDn?Xp;pA?bvM)*k%32ZWXSHk#rmQ+AN7fW-&FFEvV@DVw4#E>Qw#otSciq`^X@zHH z(Plws2_5m+d!u>SXYcrY!Wn0GNQ*HRa@VpN&hjxi)=1}Q0B=*>rW>abfs=rp2(4^i`j+0M@cz%MtWu+OM?xJU+=K z6?exv^&`@bUZ6p1+0cRW2)ks-y$zeKPT1a&aC#-(z*;$BrWrJ-Zi#|QKvaR$tjKEu zhDZ1kY{?BapAQ=ea)XT+DwIL=Q^>FBSV#>#WTU3$55A2O#hFf4wHQA(P5k62H*2dr z2B`9bBXdP`htRVGV;x#U84thaEP-uTtxE4s&r@Ah@A2A^!?v<4+vNvO?3roXAIS3H z9c3=}KZp}B+Q>LcS?+w@A`taR6CURwL%t}MWO(j)4oJV(zgY`))*x`s0fSOt9>;uH zz{UC9>0IR5$4sCSrS9f8rYfub(pa=!8x}U5q)Ew1Y>wAh@3OGOXW2N{kw1Di(hY?n zk??+6iK|O^VJ7XgL!}t+?A5(b7knXx(zzun>i(Whh88{rj#J~!MA#&Usd&WEybSAR zqZXsCKX(|q4Hm3iir69ktD`nr7g|}LOhQ~{)%LmEXdK|y zzTeyL5)XfFzkeOXUx$K!3g2(o0e)oZ!G3_N5bz0@G1~WUSrD!~ z3%}OmZ_^6fkB_^V_5U@-_nKCI1g8IFvkm}wBe!)O7XNo71Mr7Nx|wOYq7^MWTObcP zh?7*xnGUE7lr~kc=cWV*lkhM)aVt}4I2lXJOR*YTbAni;?MN({HOOUwCN5gKKr#@6 zKD@TGy*1d?Mnc9RVlAv@?5JbNLPf$PO-H4ByH>cmiOVkw?D+WgMqjP_&u{R0O>QR? zwjV@)^BFD)<)*PM5~Bl#kF96~#?pwqo`UZc!0uHkxk&WX3dd;&L1?H6j~n6_#ShF@ zAkKqNFT^IqoYXMxLt|Vig*#-IiGK{&R--sw?^?{#jTj6fC%6ug`|R-U&Cxuc%WN$R zH07~CNh7MvBK7yd&S$QQr)`Zki}SRM1k1-d@7d(oV%irCWa|n zmzA%)(KHsuOuesI}=M2xd~X= z7i#NsxoCy%(k4-E-^F}rX+;=a@hTZq;aBZHkZk>~`qArT%&=sBR{58~-IPOhQzKle zJNS(z=kgDyq=HKu+$@76XosKKGA||{6J%&mFe}_&qNHWs-7oRa3T!f)MK+#zp%{AxW|UfgYW(o-ZCiGW>o zw$K$5J|!m1wMheWBt0zdJpa>c@9h^YDgpA?LM&1lcJH4nGCWz}1c7i{w!VTJQmpY% zpFMxCcv!l=AeYjCGYIkJi$H_^Zd_v;hA=U-0nvQ860Er@?x=zNHx(Mb#G_tw`Z1$Q zan?s_-!Kg!8grr&Z$bL2_xf@Nu!BujzxTx@MEydx|AF%A|NA^$0NWpuNPi!7uOan! zF#mI4@AW7F0NanC@gGIqt84xVVg5U)%l1RP+(fKP)HVENC>C|56X60dXfTlK3u{t| z^3!s%8UxMkrEF=X`SgLT^rEtK^fVT_S^#qjRx3&nfRRT4-b%%hnTAP@oz}sbmYPP& z+}c)O*3iLJm`;R>PJ)Ysf>PR8o>N?r-k8mdTvW)>`qtq7>dr3L=VDkvm zClZN>M>1|t0*EAI+D4L`%>%zFUe;klh{tKm$oUgdjqvqbiC2AZCqgG63fnFaZWsoS)EFZNNeFKm~z z53X#C6-|g20VQPQVk`g zbFrLbiJ|Ydq%KxS!^??=`gJUykB5ihcuDjS)gr-jN_)!ftosdX8gKXEbW84g#zXIhIFB>(A<`6zU0O$3Fpgyx{{wcla1}@zcmKar*JC zw1>&F5~a{4u~=iA-kXk%r=^#s%R{ztnK*g1u80}?ajvoua`kS}x!;X@`h}ojKLCz7 zTL){{tNq&`hcUFL!kZ}gp5|>47$NUD!D175Y)w8GJIw;$PxfflY%rdV-Yg{!jx+PL zme}o%2GsTfa_{BN1J1v}4-*SQO6lSX9`}xcs(0&9iR&OXP`VT0s=8WysFK$EDVv;| zrY;jbHLA%C!+hrzHd@Fh%ORG<$JR&=R{oJ@W-BPNffbV=8o(;)&J$T2$uB z)Syo&ZQJOaT!mO9wG2n&kLpGmKE=S=9x)&{;enve&&#yDSolv_O@~$BNvI}ZU$K1g zM8fVE8DEjFV!Fcu8n%pVRfS7it-sgbvqik-2njn>sMmn+{{{(xDJ+8;siqw(7~KJS3Htr|vRur$-SgT_o!atm=oKW8bNx0^Bdhj6@o1LQufIw|wBG+#cOb-O+>4mgQdR#xT>e?^n{u<3*nZGOWz*$ z7G_1laxqyDpQNoMegVwN^?&7Vw4Hu%f^;EOL;BfTFtV>WJdo`@-RzyTG#}D*sYfr( za-{c1eb@FBfz|X(RpHqdF9Q`tanf8Z?>f9M0js0Cv&FNwaprY`8QhX`BLl{EBf$Q* z$s@KuWan-pO_rZ(=nqo`*smG!H)*n8tCycr<>wgvf0Q(@uKB-0n(TiK^M6%0jH$$I zP3@hW9BEi+OdKUO=+!g;v^ILW0%GdAVhUnr05)?vBYjRoO;rkNZE=8wo+T&1kedSt z59Uufb4xZU0|Q5X5^6h1au-E)0WEtG`AhjirRYqmt_zakFef3QovgMobu$up^Ows+1f>KTp$c z5N41qhDM`{@HA6fFb|11Ojg7s+x1I+aP3~se%AD3X)%SVG8bsL_KsQk9QxpPVzgM3 z;q!HslJp#{ojiqozw{HD~2v0Zxf`1XG@?44mIKZ>)=ef9)@!jd2lipRoET(iqNvU`kqc<{1M0M2oiKhMoW#+m2gUAhA3oyx*bjefi zmvZ8Ex}x#A9kaqx$s5AYZPbv!lv~-l+m=$y!?h9VaYAn1_g##i%J#CDDy)R5S6*46 z+|IU%Hto0G58U2;#=Sf9c14epd5r@xRhz-uHMM%ag zD#1+os00Lut2GuP7=$LxV8iYtU&-z*b8ZF1!J zVS>7u$78=1nb+j_qgejWlH)Bp>A#~W+5f7$F3C}!hg`wjijqN1(Avq#PMU*9!puR4 z&W16R{OpQSeUe8(6QR*s>Cu=6_ z!r){;&BdyqVWuj7I}KikUN`g7SF8T_Sn#izNbop=KV|WxLe}!7{22u&i7|&o#{7-P zis7|b$ayYFaGE6FBP11u8lIqb0CCofRU|dOM@mZ?RdMh>0=@u(_LHS&bkx{zK@Y)I zp+eu2$eh}qfG1AT$6D%w4-+0y(PG{QSM*6ZB@5vN&K0YGYO;}5Kc*R+UQaV9-(8sJ zMdn-XkG3w`y9)zSWtKV>5UC8J<8VIT8S!XqZxO?^>r8dUFEAX3I9KwK9_$m9$rI96 zmsAXZS;~fA(_@j5?}L`|IOQb1&^4EhfbytMqba9*{IE_nHtZ^y=RTFKbUDmmo)v$O z^WN%VN`|h(#8^F#O?``ZwpL(bp$;~hv0w{4nr>?q;I-f`noc4KFL;arRO16}=*>RY z=Jrw)O;N0tCGZ#n2wc({SRhMSj|j19w&W{NU?|rs?O-06&_I1Fg194uT9H!3Ib*)p zbDb?Y*0>x2S`+?-lmbsk8N(3$QAWS{#XO_e!()ds@YjMXi*#kn7S3#;)gNuEv~jOO z?OhQ<98&U(Kx+v3kRa!3P~-e|DxahYC95ZA^Q9|Zo->w--9dDOwxMlN_{_bg^jVSl zTCVuzCd+C2$c;qH*E?!8^)I0Y6y+k`&De3t6^=__h)z-h9;0fDI$y2hP> z$gBfxPqR3pg4+5SzIwt0Jw7C#iFZLX-7k>t6GYuZEPnQug{Qdpj+IeT&%-x;o`oqh z7KhT~qeZq$Es{t3_iI|$G5!`^UHC0rsr_^3$m5CTdD8AAzh z&JbV;v}5Bn;1f15w=&j|Wiw(IV^h`?vv(wM=A>tpRB@D2bD)!@B$Kz(r=yn!!BYrp zgUHB~6l?^PL0r0Y4%)5&M-oyO8Sv=BTQUCXCN3ZUW~Jt8-T$;Ew=12WC$`;u2FZ|i zaCUI|XLb;gR4hj{N;nO7Y8{5!xEAU(@{7=?W&3x3?cIOAxwuvexu-{SkJ^G3-Bw8q70bi|o_zR8s@qjr=g(y9-TrYtd^ zJ!o1M7*7p85IuPKz+RLdz0G@|T(+INjMuE@4GL3&(H?2Qh3iyktt5u~o@Lzy5ZcRa z6>E^FIr$B<^VS6S2U)ro%s7Xp)YzPbup2N$<=W7s$Rgu4BLvjnY}s zs|?mx16OE(h<7i_Mdgf4VjmD&WSyc*_1=-92~#6&Sv%dcUMP`t3g2OUFvm6$hqboO zaACyiaLQpban8tce6K{H76SEKPrLM_kO7iDg>72K2;wj%w+y^6Hm^+io0(%*fm#BL zBp7;10K8#_kx(&6B9KQIOHPuI)HrL72yH0qs~unYLq7QK$1OIxMw@C)O(g+=0Ur(M zWw}pL;9wcKbP#B0;J&Ou_8)&L`)azlQI{P;6pgy~q{IUX4%#v`-s`UX!^hNF&PPlS z+cI1wAtW8Qx{4wVJ13wPoxKE6%B#s_v9*Y|I=#f}o@TIozbnFcJUN2CQVqTPc9}JgBD(i|`33GKuEP43Pv2>G zd1T>BbZS1B7V^O-b!@=5DSK&91wRxc1#)1wy|0PUWjH`t%1HUnxQA9Y51hH;w_Nou zoKtsh#)$IQB25!->}S@#?d3!d`JYnReU#F~40rxnCiCmhwNcV2{{E}$p(h%pk9dDEiBDTkztAWB!90^&&)_y+d5hEzD}3p5J7 zh%pAy*9OAmBo2~%5%4q~)co}xXXgd~*iRr^KCcS8AQbrNwo#|4oko#ZQj2(JVl08wyIPurig<&_b0jc6& z@0ISpcU>m0D}1AeU{>ZIFZ(nVJOkD z)2iUaua_IL|4yjKVaV1;PGR#N(RRB{e)Q$a+9=84eU!wbYe)bz|*U$1d|?pTMZ=rPfeSB*lRg9sOIo+!cd(32?Hn1m2F)io_tkFptSQzD(N~-kbx&K=wL;Pb z*mW>1Cc7z6IB40q<3z|tRXgM@SkS^US37tJ@5Zf3v%f&XjUA=SF2es#_)&lQG>%9< zp%tzOyBTPUZf;J9Tds|8=ymSwq9QS9O=X)aLswpY-0 zccD-jNnug!9zz*ePKnWx-@N@HO^9>83<8N@otfTqeScWhf+PC+`nJ zFNzjzQN%RM(rPxmR={s7x%niVq5v_APL;2;};2bQcg1Ek=wurC7b%KO+ zC#1{>)6Mf_f-6{e4bO9FmChu*w~W$M$!v&Yvwa0#b&l;n;ygRC+?iHYa)DT95Qjbd zDCZ;ONX)Ohp+jG(%a{krKC^hrCS0bNHPAPfQL#n7w(+3S>nKCuXhykF5p-fFzlxTr zO8n6m!nC-Qdp3U;*$+hjz{XXd90p^_Y=5UJNf`E33g5uwV{{K6@+eG3?15q1Z_oip zIRz+u)N4hEp4pFZAy7QMo{g{PI4#4yQ$W?!i}UjDOI?1ia8PZu7^7bhQ{@_hturyH|5tT({OJl zKEpS6@kDAO zp9!*22I?NRK(I{(>f-h;moX&2rXAd*oF68hVW3PZSZpQmr2GZYth?%M9hDUwSX253}zr;eLO){iH*-uo;HJ%s1kyH8UwJX5_1J5m(kZa)$BqM5Rp zpzM9Pe7Cks_6MZKm@n((9;X+xnuv@jh(g5l?o=GXvLA&b6uiv&_&2vO)35}2nw&l& zrtMwaV}{Uxd*^ry8DD|WC5C~ynCrLE;MaNdS60FQbutE<=x@XZe_NYg9b>EvCePp6 z^yl%^zj%@J+Q0q}n$xeY`M<-9Kg9S=O8Hfqb0P;Z$tr`hkCH~J4gfkyQ(Zn?8c79b zQ${H{IYAA1c79$XA$}bYEr%2-Jp-?zg&nIfD}wu1$X)vVHRzz%IhLD;Htlu4gD$v|xwhnDCc(mEzdM zVv%d{Uotu?vs|P|R;Ska za+|gV7Q`Pe!f+MJkd9`q_3vL=2#dE`-Ogl8p7J1Io0Z~Nup3ds7Ge%-f^sobM7!>; zJzvlP(q$p~KLOGwWH{f^3>?g?7$N0mA|(kb0Cj)U0C2tE?)!pyKcj<5K?+tH-?#@F z*L#v796}`zeHYws)R(3_C&q8PGVxx|Hie)%1Es|Y?e$%MBkj2eKSKjxVvW3a=M(r&95~CW8{Tltd z&O-ADT@!0zlcSGX-1HLDrVRN#JS{a|;CgGV7MLe?9i57o`uf0960)`x#5{eGza{dv zByJ!70N{`&x1je472}1?3_7Nz`1@DSVn5JiP8e@_E@x6$-Om`PNACP&bl$l+KsWJG z$LUiwT}odF10F`&pyS7irrh0^hEn$eUj?w^936VhPt}u$l8(`0#3%bt25`xK!+20M zK>kE9P&ZyrOUI(Y$0?cjWt7=TC6d;O-JyDw*RfNlbDUSvf$S3cTU&%kIy4BM8tRNL zC71U~{#j1%WD2e0nM_IdEDv)<@U^gYkhba$zGchk`* zR7&AV#|;|;oH!i)$5bUTCJcNY<7@Z^D*4SH{BhpA{0`3y@p7sB>22_Q?U&#H_jO$U z|0}4zc|7~Stx)uTKEsIRr)>Izivo-lKXQb>q54m!7y+)%9J)mFe-Ns#uK6ce`tL}X z|8S6zo|c`xw9U2QTZx8L-PS=;8YC>Qs_CLG17I*z*V6?s%5cib0OWNj#2pxQxR{*S zEse}5X?0oQbvSi6nMg<|wVl}5Bxn`6`OIY`)tS^4ZpG2gGE^$k}VB|p*L58OeUGjRA z13pMFhnoBzwYm~A{$nn3TyhIt5hV$H`>dD>CMf$;YH>2`yP=!i=PEcDUq>)UKz9XA zI_lW_BcGdzm<&K`1)2z%v|y}DD~5K$jXiA>n+WWC;ph@ukrL~=jn877e>L-Z4kf|O ztYM~*rmZUAfaO>=9)O?wRr}7l`lAReu~^A?-+nDhAqy^I)KnphY&92cQDM(%58^#l zT1u)VFqM1hApm|I}k8R6^Rv6OV&gCS6!LF85ss|#a zvd~Psa|2KYvdhPhHKU|3Sl?uMP)&Dyu$%nEpNCDmq@YDx1-WXeYk47BFihQ#(pD5O zi8+FzYPluD^$aLf9%&QM-xPQ@6^a`lxoKDnV=d`r(ZHCPz+QVM>Avmx8W2wqSg`MA zOWnm@CU_p7=uv>EL+QzcPb|bF7O(KqgDO`@BhIm#RIe{#s{^!#2Q*Pl)OYQMU@=)ybR3*d2QgTW$ zYr?br>oJjpJsgucAJ*Gcc}e4<^D%6W6#qZw-U6zwtXmTWg1fuBySux)ySo!Ccz~e6 z-Q9w_y9al72=2}!Nmc#z->&<*-|O2lfO9x|uWf6MGv%A|$+QoA9=yxO&XxS(g(|Y~ zMLSMMW4X)q1)JG@ST4o%ifI#r@M8H12XB@h!L zMO}J`TAT+$(On?Mj1jRB_+vrlfw`I>UHqH0vFGd_Skv-|X+7siz&Nc9Uxh_vAFS=r zp-q#INKWkBWQuD-Po~8^nh{hEC8CUc_DO`E2gZ4NsJr#ROoj%8WF`tGQggO@YhVAj2=}xr@>p=*%-2(a_*o`2mXyB8fFvZF zQ?6t$Xc-(njLfz@DdSX>@2N+SPEioP{Llr%XV3wH4j>}fDE0 zui3wa)BhLP*Z&jA!rp+K^j7TAf^4 zo{x;jMvID2SIy9r-AaOn-yTv{Kvt24O_zn&;62_?NUg=nOsr(jry%1*!0OB(FD>}b zlKf9A;omAj|A%RI7~eybKiB2&Px3S5KWRHnkNn=UYeh_pQ1`gEiYNoUR9`%{fabjV z5?-|dm_;H!ukr;{Z?w%}$u`>>pTFF)u)Upkf5j<%nwx#d2?X)dBw8Ra6FM9SC6wH+ z6_QXLgv_pjq^udgmyZbK!G=E;*lgV&>$bkgJqdga^;6P?JY>%j&{k5graEeu$?|<) zJf0@*rk#SydrxXZSUei54mV!hij}E4xWs-WTO4g&rYKWOT z`S#BIHE_|np_NI?{CiD(nGvDNp%S_*aK%|F`@1ICP%U?4m_rFZWcU!oBYsl^&PGHG z7>AY0^(_`>&X02FG*P68i97h*wnST@oK1D7c)eksKPz;MQhuLmnCH@Kw9m07aq}3e-FkBPrR)@LEsD_BSND z2NdY8 z3pD}rGQ+#-Ep{GPxVfmYvWO$VOv<}fTD-_QLg;QM9qw1Zb)=GcPly~A!7tVk5Lv0d zH)MhSk%4kxE`iskff#0&A6H?G_xW2s-g{u;3qa-Ie=Dkge+_<#YNmfRcK$T8O02}A)T)3A4U7J z7N%s}^pf-x{A|=DWRi3Ov;y)>q%!RGF4pGehHQN1gsRdCcD!cd+y+F_)U39UO8UZ* z(w3&`cGMoS^jc%VtmY1>yDofPe@!&#OH3=}p{`J!A*=_i#abl{PgB~vZgI`JCuYS{14thZW^4Zjq? zb`k!vmdX}8O~^^{vlWYb+=l@@*x#vHMTI*1iv@7;3pW9&HY*cB_AqoJKaN z|8TO~Tn|WrORY{SSn?fm0E*kRm;G5NNtA39ntuBPXUB21{M`W8N0b1FuU4jfr^GtW z#f-^^brE*n_@v&bq4dpse$l`N``HpKyv>E#D24rtV@!!gC4i?CAMQ6nOwB8=9wWW} zLVKJq?#IkRs2V6qBN!5xRdE|)_1KTWy#q6qf;rzxxmmNr3I zMw=hvIUybuz^KyTj<8xUpR<$bjbkMm5b0YuURq9214|#K!cgPrL(C{(uGnbvkahQza4@#$x7Zl@B*ezo8e3bWVHl|if-0wA$w?9b6z6M=6 zAp|dHvt+2OEnkaBbLDQkW4wxpfjTo*daln=Q8HO)OsTAwn(Qve#&#S_wlRe5Z;mzO{u^7pTzo~cqAM9 zze?#C|1ai)`5oi^2eJP5*z+$){5{6}D`foh{dZLc!>>f$_s_qoS^hu7o*C)?%vk#m z-2whPX8$ivgMY)=8UG+S`P1xY{DZdTzY@6lea`q(ATP8~CM0{*^uPd(QvEeEhQ-`GYm+@Aoern)Yw` zz4l1&Y-I%u%>Xq1s)Hma0udHsL8wA8v42$QH!Qdy^nz13+~2RIZXPg3(Ozo%`+6a0 zY}}g>#Q%iXFMq=8v}-;{mB+d0dX5keIy+>TW>J$g5Aw|ag4ZRRfqug4jNO~ff5Ph> zMOK(tq@g_n;m$sf@Njyo-7YOs(-3a3yl4cb9yPE+45BLUpijJ_Gy)D8zt2u)js|Z2 zM|ANKMhMOtUq)xp^f1&(6I=+6l7504zP_Ej<&kShh>7P!Hwmyr_TCr>=;kF_8Boju zB)D((ohE09Xt)OntvcUFZa)`LAmx?M)wPr)_~CCsB!pJ>fPpFdwUAkELoX%^GcZ+$ zHB9Vy{8Sx0N(hwp5*n0WKf^I&9YhP@AiAmCmX>_<-(2hJ8HCs~QBdfCw)mPxAi@-! zQ=*xYl^extpVrmvh67y=*VHm_{gf!x03sNI%oJRh9|#h!6}uIRQ6h_IOJ>W(o2h7j zaLa&iCxwVTkbtNd@EP#TC9tvIcK+HJO?e!DU8^mtf za@Ia@Va&8y{XmJwVC^;}_eoGW49kqIVd+pp0sQ_s=S}?^rCN)ry)x0kiWVtEt;`MZ zE)cmZ5!NH-=qI>}!;yNxuKRZe7`Rf}jQfJ=f6xtovBmryUuXPxo|gZ+O#c6j z)8)S-rvG5+_**EH@fYvMzt9=RKU%*0*NW*sb?>`U`7;~lf0LO0=Rynv0v=I5LJ}fM zO~?0!Dhd?T#O6eH`uvpI0xX;&(lY8iBvb?hQWgyKT-NsbPJGhr9Lf%M&T0zkjGRvD zkbF`q1iHM=1_D%KhGc?Nf+i#~cEbGn<`z1XN{oaKvZ8zr{B~R>V!R@JY=U;&%={)= zYAm{fW;{e1?4~N*5_XUjQtZ5>bP5zYas&j#LJBmZoV*6c@|S9~Kh<-TsY=^R^q@>uy9gn*WV zv00kn76Q#pseTsZ)IlB+4CKsQIN=In{#Hr!*c8jlQj4wlyfo{cb&=LBW`Z_9;!w3O zlHD84c0B_v=ko*Md%ZJtP=g^694L8joPi%3tGJfw_++@Osax58Y5+K&elZpJH=Sox z9ptZw%6@|ur2MAuXnnGPU9Qe`eaJ__t5G31IdDFcl|IgA@VH{JL2b~%23Mv8n-36P z0qjE#Z#6IV&Yt^u-d;{Gue8}zI#OA%afz8L5bZoYc549p!A1=qtmga$X!xeUeS<10SDX!&f-F9=_l#}{}Sx} z>ZSl!u>Rp1X!-i#(DbMbPq@ zei8BFI;6FbYP`z~>~{x>6;D&A`c}a*dahN1dhTiJxh$!kN9%!sU|LM-5Gll9wcR6! z4!mEO*y$Ss$qXX$EJ{!t=`FyM94iEUom`9DV57ri(sjl&%SD>vr#ZhGkZA4?M>afF zSUpYJ(v@S}wc$Kd?$r+_XxRtSKXmbBlf;b{-L7JuJLp~9w4W_?bt4&5$OO%70NqH3 zCLOd@HP*$V&+Vd{iJL~G7l$5V_q7ZRgO<(4j-r@^4kxN2f(d zr(>c(d0Indn98s>j@2(Aka^UA=wFcHULSAxKrI=4&f@z$FBK?ZagX$k-<~<* zHgiTxR>;^{axHyIiY+M=F0d_<8EGtx8U6IMcdVXzS|}t(o-LGo9Ol-F$B<~`qmvxW zH%8VHBHc@h$!s>1M-3N*6N+YI(q4%VvfG4}-%5PgMV=8XeBR%vlw0&ut zdgX`AAH;$VpNZSwCYG`}5hh-y=5(kTTSYhWG!j(~AJe|7EqiY6M$^H)yo|$CV-6%n zkdUr&4g>qu7vpBFZ2Ik|+>YXXLempnhCVIp=JJaIO$*e)Q#Ax5Gl1vK{6yA2`^Nly zouhEm3y&(O$yS0~j8mZeP!eEaeGpVa1`zQQ}L z=D%9vF#bhE^1mu;=>LCIgYncXaCvLxEdmPF*z+>R6^3euu3#zutN+N5NR4%F-}Iy&;)lKSe@l-iJ*bS{LZ9QJhL z9P&!mx-NoTlroOu99mNLDi+L4(zL7s7W$Mrd_ro<1ez{14l?TO_8tV()EuTH!W=T% zj)HXjRFDLOTH?%H|48Y{_!r&FPv845CHof>%HOP)e|D<=prrZxto3}HqOGrX>ZxnOgkCpp4GxWU8j!2~$E5iqT137#>Y~yKV!kR8`5DZ-E zG}^W4rpxtF9=C*ZAWV*nk<3AaxWL=}HYtR$iw+%F5CouN-pQ;Cm>$YHnaa2obJR_8 zs+Qz6-dI<+Xp}*n&bXKS{l2X@cr_aY@J*1KWo%H+sD?}WM`44#9!%AFXEZbhBO?u| zJrLzShKd@$flS;t2sGT(%Fb%;e0K)G?FwWi1?tL6_jw_^BX$y4eWTBo4QB=)BXJV- z?F%C~Dh3kOk)~AwEV3M01_>}I(RHKN765lSW;sOwcH78|LWgSMmV{Lm}>x=uZX-HD5T*_{cxxtc%zI(?=fX9kka`@GuvIn|!v_ zi!!~xeVS?0XRxaxMHsZFOPKhc>$7h%P-u#ZE9 z-Jadjbpl>oRC=Ar?2x6OS!Hn_-04Ygi>gM9M6om;>|%M@wNsHdxq|h?H})$P_Il5V zgPrw2x%k%jh}V|GeB=k#uRL8LY}7uDeTMAD`)l*LytOhu3IR|;p9V0TR3DgMYzZn6 zL_j6Cd!T$HgzP`j|1d!gie_(>%pKPtf|HP8?7{{EHf8>ZYB4I@EXkg0(ay~77kazQ z;yR~9)O<-vRimq4*$L-EG@Up*)@Qcgg_Slt&ne#K7tj^v+|`wyi6P1sbSlT=6gk{) zD+}OP!c@s(Gm$0ty`}9U#sLz*BsB;+hDigwJTf=fLo5CB07pl@7Gba0EN56exJ@zq zCHJZdJ6{d!21dO4Cdwq2&r0zeQR&Tw*ViW^ip#fXmFicU)ngy)O>4K#* z+HFUqql*)yYz@sgFIqK5%g%b}btz3NsZJAW-Sj0&To_ecVGSg(Lxa}+&|T)cMunCg z?EeRi`b&WPwCCT6=l=%l{6!D*Kd(_)@c*d#`>90P@EQLg*7~1Osecxl|GK%~Dpl0( zotG4bPRYg4+1=g*pHA7)#pKr>n0Gbi=;SP9Zs3Ujj#0wUNgMp}iQ!!}!_cW&7(1K) zWI$#6rTczHq*;Fz)BpVM&mZ<*EHZ!Y`8o3E7}j5q+`mS{{5kyhJIk*gc0XT#4*dP; z_aThGz|-HOes1~m@BIW!?>Tlqhcdli@n470|JwGG2vx+^$j;cp)(rps#%%>`oh<&^ z07EBe;AHY^9_WOHd-r3IaeKme3 z6a1aN_4l?ve7tvS5cJL9vxd-pJOKdpzbhUqI}bZ zxWad0VzpT&h;m_`)A*3UK=N&sk(zi1tP*2W?(UM^Dou>%uZ$Pu3SX*<8Wb&S<1uie zf;`FyPWhg6%MDI7-d^rFJTq%L+P<%?x8VbHB|(MO3Ir^ZhJQ+F0z_v>R0A_bYYroA z7?B10T=$`f+Vcq6o8M;KaZU%2+N4Ru2r5_>4jo#(@Wax56$q2#Tf!SPqPaVAW#$Oh z_Be<9;|M(O8S>d-+yImSM*Vl+tRLKV8EWh%9*)NWnxOh01i3+wYF3llL+@^>w%skV zJv|ionQ69OXzS<68leUP+3!RF&sGh&W51BfW*GA7!>n{$*v;KLuL0GFK8ML!JwHF3Fd?B8k%(*%%nq=6zzm#|&?;Ju zc0&vc5C!I{G6&0IQipWHTlX_m6GFxB(cNPUIY=S!_OUo_=wKJZkDqd>2l&lQP!Gr; z?y>M@Q%zOIb=MXziKM_qg1U?hT zXr7;NZjHMyypOb0Gp0Q{K&V{J8hE52tCdzv0jstR$rDzV0$A3B=CF@W49Dr;Mi26{Al!87yb`zFg%P$M*P{PCTL8DLu(6U%a^^ zx45*s?^ZNev|Y0BzZ68yB!W(JDf6FABR&R7T7Y;9t$*QHkYh#;5Kcj-Lj97vm3K_o zGDJBmNkU$TSS#<6U7hH(b}ES)Si+QUg=J{aur<#Kr`3hWBs|sH8Hz9}>}H%EWvYfPwJ&}k@rThRl@3qG)UA?)Oeb#nk8k!OM^>8oa@bl%}dSW9^Tqd2&5R7##E>Q1I6p_+ei=_hiJ;W*?rEB#Pc z*f61nt+H+@_8Bc~&yZM0k%$KHh&~~VXE>jea%*K=f9W+>J6yJrh-~D?3QCYAh1(9b z;sHVPCSV7hJxq`y)Fi0Hb$xgqbF!2IcA?#wyJ@JG0zr&@h-BZ##V@>Bz}$go@k;__ zGmJCtPFYI^N3D$0nc-tzumj>GQ~A1V!5(-@RpIbp#$^Wrckx;~o()s@NBEY;o+;D? z6G|m{s@ehry#SN3IlZ72FTss{EXrY?3l#|?eS0bzr!r`sliFC3Orz$gd10&9RO5`9 zr`si!4EweU>6JpVojQkzDq9#ls8Lm@TFF5Tp$X0!#M|{Iam}JENJ2%Sqb9OQ3xj3c znri}bS7OZh6nhd*d?HRA$ELc?g*eDaRpAeYcud3Adkk!9PJsUApl~ zUObpi2f(M(Dx--l$#mmPRxA21DBN3XI-w)}(WVqeJ8l;&19ySe3qioIW8j;*&9=OX zX6$ZyhF^)XYgsFaOM>ntm+fSvPm|N)7IHlsDs(tI7K@F7*$|f+td>dF5au6mRB4Q~ zm>bx_CR176%N?ARjfFqvel~zPnujXKLc~@kqwh4WGncH^3!YwE&c~{v73y1hx(>Y? zJF(TZ@2K5ibk;q3DT&B#c{Y74O&GFHe)35e`c4z8r>z^)MW%S-fdV7- z-Pqlsghz_a_GuUJlSbboSr>O`=q64x6Cs@n+h9Id#G29-x2zgvrkVm7eP0G6DgBz? zmrhRVIfEha1~e7%A#>RvlhZjO5X6$i`|Fg3{z7~>BW-_3>p`( z0gBZpxiAZ!7%tn-q~aGX4Ac~#XU{~x-vtFk-9U=f73NVQ=ju2JaNJ_wol6Tf*Ld+B z^;NAa6M603guKZ-oIg?|_t9D9<_}yXDzY05`25%aeF#WL{Xr&M_4=W6=BpmDl~F>l3=aI`~W zJi@2tH8@Up*@khj#OrQ@>=}&KO)%v*g zN*hn#o8I#q&zkNsJjX!{;9Y5*yJIcUP-8|i`AD$K@MLMBfpOfa z&7LX~4(&Mt<{<`7k6Kr>7}w(#7;)x9HDDt@`U==x7&LHk8v+jmwZVfy;E{#iCMgi9 z)eovvpum!W*GEy780>w&(*Hg^{h*Ac)mjS>asHS*E4nNJHI*{-!{MpN(U+w>fz$-n zYECPq(Y-V1d{ydMSr&q973mFYM;u47mYR+_|I=rWs%*N{UCLAqr4wpM(9t%U)YVdx z1E+1y*jQ)~R_-!W!$L{zkjCK@OVkay5o%YIRlM`f&s_uO(cP9LGPhW1X$2wK@bymH zL{7OL08#m-OTr6ukW}DW1kq`I24bCNUN0|G(|of9eHn53GdX%DR01BOqa;CBD{ae2 z9(A7XZ1_c;dN;UD)~+)23*Qne&^aj4sa-k30{k|fQN3S)5~nvIPkW3i=^Jy%_0vCv zy?PjFHr`Y4p;k!`V~Kb%-b$=8711xgTp%@|lA+0SUV3y#RrioaMv3Fv5eol^%Z(8$ z&jsO+@J4T|z$u8nmb0LChH(^!Bkwr~d1O2henTD{7O>j6c$7MLV?QUTL{$gf0g3|Z z0F?!TS@|r3L=R>3oG^fJ&F!)nH5pac^C&W^27wLqtcf!AxuTmjg89k7pB8|wf*UG07qmMV_~=L~~R^l$RvH$Zb&%zJ$0bBF1U z;+Wx8`+|CqkMswY6TuUAU>j}xDAtr!s$@IUU26J1lIpN!D&K$13(V{LkP7iZx_-}I z1^xu}ycEJA>x)-}Xp$ut&;7M~n7$41iZ9f~Eyc3O_W@PCrxCz{Yb%q?Rf4`sLiIr9P21 z>%|<~g;{g8YvlJQ`z+NS@91HzUSvweW;P~zc!y|iWL>#ouB8Q?bk-YOw3>gMQ= z>yfOH*}DxNoD-n-c;VXh1)>+iGngeT`wI1jHINMDUPk?aW-ec?W3WA+n7g#^IweP{ zombpe_sk+S592pL*uHmyG9K7`7fL9D4?6-(ryz1}{rh>=bAxFla#)1w| z)~Jpbp*NN{&VUL4ZaOhW-&C$M$+u7#da8ylx~lxDhVRRSM=`CEg3y03pN*zgMgg|? zme(g9qHNe~xR>oyuA@b2+)iVr8ij2yN4rmMrp$WTe z+g>m$X|&)h(hHqpj?{=`3%hIwe{;ZlknOeju4&hKmq{P=!iw-CL?lep6QR&-i0&5a z&7g=4zGpwWR93N0Rn{t=a4Gx5w+!_ODQHEeG&YAB*-Qg=na2B|2HI2E1HegSc6C8+ zlrO(3Oi8@vvD2UdQ8OsDT3cM9yG7d47tdt>G_g2{2kd3zuWtJW zks6B9n5DubQ9MDcMTg9p`!R9^qyV^h&LV=?H(#3CtBe(>be|L>g_sJSO<&V3_v+i7 z;m=JfVA3*0y!j(RDI-44Vr^fz2cr6`YF;dI$=*yuT)0DDa8%oA-{xy;v3F?Q#hrbw z`!pVvw#_c)n6Ztme{&|~c}!9v*8%T-k3O5^=7|Ll^a*^Gex{rc(_KBv;iOWecsxVS zWf-BP1}8877VOYr*+BD)i(9YN5%-HqO~#&jUECdn%Y{m5q-E@37-8l~;gfLtqF9dz zPLQ28pAFZ6KTRfRsyj*lUGy3L<0$IQ9?boV-3zAITfSqErA9?Xo{Zo;{^jG-5yT5o zMd&c9CV{0w>L=ZF>6>oXmRFoqup37>9#p)jC*SJumxe+~i6fEwc}mMyPAa^sMKYWj zIZ_n@xwJg2Bbl8_&7~3?;9VZ@(2r%v^}#nJhGm*BX}2yrw5K167$!Vk?Djr|co8|P zf$_7t#o2_khgOq~xz$7e2U{}o- zp0pwoah{EM=T`Cv5Wi@+p*Oue+NzU}-J29OVYKCq=tFiO`y}wfzBTZXt`hE9*1#u2 z$oB2SuA$6y%&NK+(+U4G3*jlJuMb9+kT2RGm?ZSzhpZ?>P?>Bd^MRSK&Ju^h9Z?66&z2L9 zlZ=BkamuZ7v>Pu6g|F&Y6m`i7RGd1hXZ??CU$I;n%7ex&p%jGLr8M}%38L~@S(2Bm zBR)VJ+df_kyN zNc&j4x&*qYeU9X7eU1^$1OBLV%>~nrdb!=1iJw|lpx~EW=$gF>A<(iOtOHT>eZqyMXAj^!Ayiptjs+wMFqI6S3WzjE z2W-aCdi}NHfp1!_*vw7R^C|_J!Dns4)m6Q4Ul1cj8{$wDVxt--{KwV^@=3_F; zbPjl**Hz-}SG8o^iydQ6t+>OnSjQycFOuP=LFTOU=*AA?9;yZT5GKaw@&UJaNjydP zBFVBhohba-US1=9W&k+y7SY9t@fHXa+g5&T@r<=2;{DeoU%R`HA3sP!Fseeh0DOry zg(#FHH0np6VOq-S3C3b3LPCP$zw^q%{W!opALxD=Z7nCztO%(>vF8rD{-KkLAIu(P zVndC>-PaKxz&c8bD==P-BEpL)YM+V)O&jy@Y_Njdo}3r@IKU6?^is_~6t3qnFqtmq zco4T$&MtmAwGCtul<8Hss}-xM0sqOkD{;roAdaMgD6ByV1RmfOC=IXz$n|-BPFAK9 ziXWY*XgdXxaVNLZD&{Txo7%ZwpR7HeGt_^>Kl~VmitfFEWM&`{uu{w~#s}pbYIMiJxDwi567apA} zZA<$58t<%`NJQDuN;Q6P7Q@AvKUe(|MM9IxA|h`#29snlMmG*Q z7CBy-#G*KFpIAjwldxD&F*GkL&sQqebrM60(@4UM`Y@a%y(*6>!MQ(XTz%^QeWOaa z{EUeg)D1+9?^$OqRSfUDM+e;L`6G5u<}TwDp7fq(gT4~V9KgC0D5pZyVx;4V(0tlB zZyei_ElxEKxBQ-@ehX|(QrV=(nAkFfJxa6EMypamtI|cQ(q>>HN+_{=QFfaf2cuO(yVi!_=(?Wq_Kenhu_oZerSp69Vx0$#f}uUR zWvQEiyimCTUS-yJLkIdRpZGiaVLzM<4Oj}S4-OD!tv)PRPGCK#w_xqJx=dNK9k?1E zo(8`2#Jg1I)hkI)`C54T$2F}xvC(NhkO%3)Td%;&0&@%3Vkt-}dX0PP*0t6aH7%guNq zrBx!>B>9*$B=OZ%VPNX_zodS=uH>;j9Z*(3T`nkGL!+5MLSMCNvpcQoFgvZb=QDv_ ztZ!<|=2zPpvrz}_RcQFAFkYOAia7b+uUAEvB}mP$FQFPVp9Xb=fVpf6#n4pL^9 zier|#D@aTD*xZR$&oOpUn|pVRo|bjJ8gAuc>K1!FPc;6r)(mvhaofCIDy2|JC^O|< zT-ozUJuA-+zGcOGLp?%ilHsGDyr%at8H>ocF(+uDgD4$|GqF$tt}Rr9iZ$hWWz!YL zScM^$k7H2g(ZDp17_Gi%TJp}GN93~Z%HGOynkQC;%cqP}9Ov;l)3iEUvuxH_*R{il zW9-(>Zfgs*eGt`MMbmSC&Y^CdW$hNu#pI#93lvXI;|6-?yfu;oNf$&17h=T{Pfk`^ z7t&Hk7lym(QGf;i1>aLvvsr?a-NSV8s0FI#w%rfMNF;f0U#zJ8?Gb%Y2=I0 zW&@k3Rl#BMmOS{LW7$)g8af6>L=?Bp$ATlD7V$=_My1!Fu+HmX?(oR)=6P{7vR6@w zr7F*9*%7O6aI*GmyCFL17z>!FHea?DNufVHi<+6{ee4s1i!dY*mMTLi!UUEC_45$O zQim@>27b?50j7;^15s??UqcmN0>XGwZdotgmvz5cNt(wKdbG{~QVHUhAc&p-sczy= z#*a=1IfC-5rIptQZ$U+=-DR09c!P}DUrH_2@C9@lr|fusj6*0GlzFGs5b+soMpVhbU@Yw)p@ z*~v@u2S{f2r@`D1#wYRn!9?Pm@vR-L#!wa4r-G`_nJY-%nV8DJ7Q~Hw_iDRHDkreG z3TFQE{%-#5@n6dO!vRe?-=uEPKG~uZ-!n>BX*nazgxK02u|e-m*Y2(q?X1Y7m~b#r zVlagRjqIqbo}m)uvxA^y4l|D@=U9QmLymxV3}G&Qat$ah z>nsq)UYr3A297xw-uD#+ZCDp=@E|pnv1m zK~LzJD?2KZEl_7G+xYTcECiA#dJH!UYzPojC5O40xP)A}Jgwt^yFI6N>ePql)jI3# zLSpIRKF02G({!%8etf@*>=FJOAE7SbWmAY9TYnq_FRJ`JmOq3^OUV)QRuphb=+QKc z3JY}XgyatT*nYb=#yr-I?dqi2*Boe(AeeQkDe@}cN@j*PhhOTQQ{ z$R{!Lp>Xj#d~%%nR6u!`Ah;Zy(!lwBHR26oKeTF;j{v9019g+=f+e9iT)ix#cnRe3 zac@I3hu~ce*xufLy?+guUV2MvdJ9%&kHYo|3feAKwe8>+z-P*D!Uo$ROz zmE{y%@2X@T^At8$%9kHr(|5RXYo1=`8L5(<5S!SO5L0x0X89>yFl}MZ6sa#y*F8%N zmqd>rP9hPsbtomj#Z#KBfNNT-*h8&ja}PUtk(w)Gjrf}$N*ZF7`hQid0FK+>8>D%; zdOO!)sgy}GyZ7ukYvEdUyG`Hj9@;1fn4TbDpaLfMfZ`przpe00c0R7Pys1Ga0$;;p*0647InDI=z%wy z8t3gGTX(B|ZaurYqEOSx5jU1EmZ_A=iQvd1+Q~bCiyn1B*U>4XJ2)z)Q+k`Y3dh;fu4Z!rL<{7BW@`q zQ}2samU*2y__c)IMAnjx!ejx%Jrh%Ea-6OQ+CxGl{+ z$Oz>eXn(VX#Sb&7M(DNQUx&6OR_g~BzRMjx#epo=AW4{_FJ32O6WtNreuW^;b2Fx> zzS^lUEfgqTD~ra0+YeT=H_LIVuPj{MTI^hulS6i6mRvWG3UVz=n-=pe{)IgI{)s%1 z9^T~QSS}OxUuEf^CjeB{Zx@jVo1kgKaVsvwH+RBMpeND8-N8(MA&^TfJk6In5-nlj>W^heSdoiC2GZZ~DZlavgVa$* z92q7Z_<@OeL>8Zz7~fU0LJ=};X9}9&^CN$ZZv1t}&83*iTW)6b?P9;Xodd6R!sTc; z*><4L!fN>_mY~;wVCx)ZYl8$-n$6Q%8M$$lDsU#6b({u;ow=|4Bjt^bYxa~z1s}Pb zo2&!dkxeA3S=gNHQg(Vh)k#0*(~nab5I!f{*)C+Cb zijTBE*y^-AlIP9fw`r4JE9v%_yi>hb%ud*OBESc$ctmvR0%4%E$^66Qqc%%(>Ql3E zXzgtvM0=(TEW`~_w}OdDao9%iwLwk#-~3vxeKzK%R@n;{zs}(FUMYS8yDpjWUIMll z`N6VEZ4SM0I4~V-w&vqNd3Gxt*UI~CfZS{sW!KF!AQ9Ah@NTc}?v{`3xuN)?P;C!Z z+4;M9h34E9|9ahMck-l5(`t8n!7Iztw}@0`AJ5b2c>Fd6u2VWCHPU^NmxQf0ZVv@@ z%4diMH(RGg>O+L`zE#cEnI>V+xoH;L$-uGbDw9@>^}P)^sZT20@?O#$$Gn=)4z(fD zfu{L=NlN`GCk5OMc{DSqudl)i&>-0DF*))=7NskD*0c;la2TeCTqI&VV*QyE97uB^ z03tfN=eI(^#jm9Ha&&-SN=t$CR0?_>sy=To6_$0f-xURqxk+u-e2x9O?3HTg*|*_vQYjM;sw z3>a2EMbzH1I7CE|nr=b@}>I9#5x9cJVvYL!|LeN3qhs@@;ctcFdZpd}6S z8~Yq=fn^4fuu%gMdx{8}jL#T`;R?+<2w~u>6(K%XQ$-k#f)I8nH;1HvWTCE2a2pyP z65MBSQ8LH?L9>QaACRsdND0E5#Sl`(D+;02^%=v6^urt&K7rHcuN*J6?hRwG?KdAb z$mS~KTYN1F7<2-bKIx8FT39O$=XCLa`UGi7BJfB|4}w+HDCnHZ!`sQia{v$-JIkG^GQG4E+UImmD0M9EKs% zc8Fn9SQ=wGioRg*p|j9ZuyBH`va)h9MZ$pZ1vr2rAIH;Doh%o8H%hvpzsKCs8=H+D z6K^jZ&zC7lVZO%UO~Q-lE&l#e(7|VJB$(T1G*sQ@G&dhU z%P6ZM53>gamfTNDG}GVd)N%F^?g97olEEP1F-d#%(>t_Tc9Q!m43SV^Py&_{YYR#} zTErGpMKx^$qfMY38N?&1DD_xMz_e!jDIEV7D zmKhmsMOO$ah?|v{o_;-^KeUy?JJ+&;Ryq`(Ywk?>p1jCx85GY9>E%Ae4@a_k$mI`P zko$E5q5!A#B{D0wBHYeAWPTT96%jtSRSZ(%|z3D~!EbIOl-`E?)ozdd@Xj`hHedsR$I**&fwJnddp?V|B| zFhAVSV2nBOE>xO)8#u{Cb=MaqbmK?7X&$_8F6hn4PiVg0I4Wd?$}S`y5qT9bEkJY<4)pYr{`8y4+Ny1v_e*(V4NzKM3#}skFZwi6c#y@ zEY%=yH=mj{Wznd?Do$|`sioz`l(q`cSrunp*3q+&YHnVD3DW#ACldV0&2(i+dM|^6 zZ8YHRp?&@BjV0Q2McQ=($GD}OWZ{HQCcTqv$g>^k74RDC*)NyxfD(TA0#Q0zc1RXv ziDv})hMeXzGIJcTT>{5C28sry|6VR0Q5ipG?=(0{cRj4*=CV0BgSdw9P>J=R@GS@r z!iWQmD0@H-J3I5MY4$Z3g=%ByQ3W;916YYaM~p znkX;KHy-&s6y}OYeBzOi1bbr6uIDPsOOAxwYG_|iC&>!shmuRh0${$mdfhBF7o2Hf zRN$;s5+rW|%?#{iTl?T>kk2+HT8scK106R6HZ5tt9ff~1H8aI?nPQUm7Kj+qQ+Okk z1L4pc99uZD9?D|^pUKA|B3||;bX}~Rmo*lq_(DL`0R1g`<5OmhKVo~yO{~6-EttWwK@AV8 zqBvEZYRzOI2;*h@Mrs}VnKZ+1RN;y$3Dn%uVo0$|mqI_HyaU58fXwDK{4ez6InwDhCAR0M4{dCgf~MCx9HcRbx} zIceE-$Z&nvpa|l=R}cgWP6rqj(bMJ|jktAG*IKWwUI85=ZxKc!s`e$~eUu6oEJ`pm zkSZA6lAf{NTrFcwG}lhIGTS<@NiU3Cy{kL6PDI@}7X(~g-ebJGxJ`vXQ9>C&Vhu>& zAYbsWBl)3au^1-+KVSrW?7mhM2VrnniNPS~#|Up$e+4xIq~L1k)f|K7sUaTE=0rD) zb&T@eV6}x;OLa<bfebO4GOnEi1ke#cL_-Y%;JzB5$vY5$3K2kBL#Zu7 zfB$9fcrXf{rGRI^TBcNJ7QoahHvr9wd$x3WGUD~Pd5PUUG}PKso%+l4e^**^AhFBUS1JYZPs zDx;RQhUoS7hY<@dDvB8g;VXeQ**qACP>;=u%(_9C0dl*vjxs+(kyptdql6M-ZlQdI zp9G=X+EQ>3PeaylfPd+_9>|iu-4`YgKBC8tg_>-@QgynoAYSa%HRyGGGxv zad)*-P8BV!v}bg~cFn|meY``RYI*r3(UY5}ySquNYtYKcvy7>xHJ^I+Ms~!z)x?0X zu=Bz3E#Qz^I4Buvzk*`qs<`=lZ&|Fuh3{}>=1r2e8g4uVZGG*oZ4&IDg|Fn>qFN1) z?$fkauGijiw>>dEU2|#U_8M8D{KI5IL}KR2!}P;^0;XNMi$S@!+42CErf2=x3P8@> z2mN)B`flGK^_qc=#Aw}Da=vc4%WyCYU@CP2baJz4^D)==&dGYY!N~@0mSP^g_*=^1S z*@u{$On$xJTXbT$rExZcGm@*;9n}QfmYr*QmDWiZxrLsvi@Y?%@R@HM0Vnrv*7I2C zHd``E!Dx70LIj+rpF4$ZRY8 zDW(T;TJsbNG0Zyld&}y=3}1u~OVsH!Y>)iHbf z3i4*>55?EdVp}~F=a+Vb0Zss*twA6o0~#%t_R6xJ6{QoV3EhU&z6s*x(Z;{A5vh*{ zPoeJ=kb%uWn%F<0Qg`b+ng#EMYx?PSUK zq^ZougCCEH5mz>sIh$cZ9Ph$3e_J!iuSypOQ;rn&7yBe zb`TGdv~jV`iTc$SnI8r?7A!*>v!Td;Es$kwN)aQjuU=%Q6yT&@R#>|0?*c-~d~!@n zZhm7{po~pnc${BJWJ7Z=`6eZ;9;#B_7fx#Y`}+Gym7NNg^gYF4eC-5}eD6)wOJL50 z;zJ1=p&)0Hzm~FwR0KkA5KfI>72dFwn3GNp;gBljzEZh&{IvjmOLtp$TK$kIIP6oW zL87Mx(j&&8xAo(}=(6+S?Q>evfNM3*&eqg5BE!m_xG%4Zm?#183X_9g8Na&N4F5=r zFA3yw%P%8CNZR=o(fm{Z%K#K%AG2{h0$DzhIZ8uhQwTMeWeMRr;e2zEnnUA4lleD0 zve$`+=Vz|X%iHIXHlxbnSO(LWXDlYhbMt*8?(^%K*=TTSK$g7t%TaP|5q4YvmT4k4 z$SdNwReuhdIT@j#1(Yn$_UObal4?s0uXX(v;0^4;O&xl=a<&D3 zbGWki`~2N>Jg>L+Lo%za>~lv&+Dc2yBJ)b4YCNjqCT0fP+|Qxv*Tth3y!ShIXV&`j zwHLGt3@G@VwoQ+tpjC7dxk-!tZ|xcPkyO!oirw;<2{C z5o6s2YWCI~x^cj9MKR<)Ra3{e&MyTg{+@3>aF5Zg8alCyqBz+vQ3AJsMtjinwtK$T z>7F{Nnc{+0!U#0igi-R-Z#SUW|g)C;hcVt%8hbI9ZHUH5Hjt z%k@R0p0c!jtAz!vBlOT?Opi zieqkBMaMFNEH1 z4Y1cVjl$vOZ?#pys4WE;Gz~iVfCE-tnoVeoYXZF$lLr0$CAC#dDi~!D@^q7h(!+s3 zw%CWI2+D_9O}LSL#slk3@SCY)nnk-k@&Tz+sDftGwhkccLR2_AHDh3G={Qi=XGbO`avchKjx}fahCe}L>6O1_P=al!M z{@wY^#m?B6^7-8KT4YCP*=;)aHgl=vb5f)!0aj|G03jRc;L`B17V`xYC+Dh*FGxGl zJ6p^6j-(;Ao$3;nKFo7QLzwx6v|aRdnVG$(kFX`SgP(!`5eXPRl$bI{A4#1~P+-P! zwTTGs)Eg>1bU=234)@DLgN0Z#HaN_jV1ex67;jeworAj5`feL43@2ez&TAhV)^XQ9 zCW%4*$E!-=TCoFtb+@bB@T-;3m+tioK6Vnu^p(gKGqQ1BwEt3(jUIe%nFA){t zUZ|@LNy!NIY5{>6k(d!>3~+(pNOAZ!`mI}A&_yAaK`2K$eY_mX4(t_iya%`pzu^uc zYB$dl1tlUlY_QYGrS5n}-X`$+BGoeG;ETvT9#$q52W@%y=+%&g%l&Kti#z81NN&t2)8e@7Vy&<}8 z50ml;Ozb7KcKPV;Gj4k+#O|fU8-jw^X<47mYp5L(pMSOkd#oi}3mWAYC$60#9*h~^l9thHdp)#6< z35?b^&LLp_Gc<4))A`2LX7_h|#_#SMC)G>;X|_P@wK*i8{^Y=7e0Z%lfT5p&1<+)+ z7c|D(X)5<4zpy*olYwrZ1lEP`#h$3voo)o#Sv0*tx;6 z-)U7yP)d!XAU_Neax;d1U$EDyW)ow;p&(o=tdR>du*pPo8_z^k4A3Q+X_KVdO3e zKIpkNa#}_vRq>uR(W)}-!{whvnsmua)nYLWOmL_u_-Nr%4gadJ%tI3LL! zBmWSSVbI0%Og~5SrsbW{DfM`Z?INq##x+PE7R5B(XSN=GG zPJuOSkgl7ys&k@Fay*0ECGiq3tH#5B9aN9eb`p3qI7Vqfd}jbMlo z<*>=wx@;~{rnPaM%weXX;;+DX-A7yzL=N2c#uX#uW*`V3n3Jb;LNF=5p2vjOn_+6; z&JwdMRf%3ghX7XBM{Y&_-C~oCwaDKe4#ijAWWU=Zl#o-JBWt5P7l=QH`N_dZ&uvnz z(%sM1>wM{*$(R<4b@79B^66amz?=X%IDmB!j}eQk+?Fx=S_CUYX_Na}L{pdXBs+~h z7ckTGkeRUBw9apQH_t^;>ql!p-lk`MzIAQG;hZu_4O=v~t>K*uMV_*Rq^kGez-arpvk#92 z($%ts=!f(a0E;Csf1*Xo)B5##fg$|qq1pw^E)bWy*l>Bx!osE(^;RBK|^EoA&yoP@EV0Q zTDY6)`qYx2f=Z87g|VBa<|tZe&UFJHqY(?mcx)?DT&ZUmqW1+WyZQVLOVQ}G2QQ<` zdb$>d>(EYc>#;khKTQf-#T{f(g&gpGZ5Mvr8qJ60fAI+M)an7oi0;6R8p?9Q^qgWcP{I2n_?ge8Q7Ua2RJ_En15SCQIj$pWs z-u!Ts*ZdfZz)-e4du*(k4F8Eq!1y-^@?Tj#|K&LLB?q*!vUd0*qh$C? zD)~16?r;1u!_%c!}os&@Wc4GtLVSV0RMmr2uSEzm1u}{Yk>vGGA@UjSKS&Om%RAw|+ zW)ZfrB9&)>)OBQ}A^Ran!lfq1!>Ge9%1o&tB_e6XPA_gQKu1C|{BP!^xTk_{&F#IdP_OC$rXOw+OLLI)sgXzDFZ)jCi)$kd<^uVlNA!Oxf zVeyyr^KY%`U$OKRi~kh!N}5`ke{IVf>i_A2nd!^+6{>+=>3%~M{r+igPdTvXmNg_JC( zYeFFY&Ro2LGbzcUIMHN5>Kby(D-lxEBR=NM@Y=Z~ zF(%5Sm~Al#<7F`CS3(Lzi&LV^v^(Ttc)? z49h2X)8(*bGev6k@Mlj6@nYcXK=p(%6Ow`O9Au3f#g8_LlhZF=+!NNQW zwA6kXRDf*kZ{KcWP(hp%4XKDiHP_a#D+b>ZeZI?rr zw6H*-@GnPJi{#1|r)|#pF`ZsHMyz&_lj3|iHsOg`zlwC;*moJ+S0mY^TWsqXsu*(h z6LG(DNeX#GfF7hHAEvZmFDQoM_ zeYT2cZ7UNbL<2(v0lA7N=Ab;OBr(0gXutqm&=t*mk}sqblW=q6n%|>lTNRXMwB>1} z6h=Q)5Wn4Gr%(tTb%*{wMg?2D>ByldF>h!N#c)AGCNsd<$Yw=je7h?#ZT}-VP(~a$ zpXBzgk#?PBGpYF_(FNCBMUdXTOl%CZFi`!$>BMrKxC%RkYWLV`MH?+PxNv5i;Si^q z>jZQlb0l{aWwfX2kEMI?hssHS5IbIyx*9kDPf$4A7q-BWv+hKor>WqyYk^-vG-9}Wn{A)JjZaro^U@HuB{?(KjARsyI@&s*NJ>pUm) z0?wB@97K=yVd|v=)kIXFtPL_ zI6hgW`aBzafErZ zHkXeo@gQh*Q>PtYwkmCpd0@6p4_$4K z?9{60HoANBiRp2fs4=`ux+per&Jl4=LGHz6&<4@jM0WY3fj$cFc>?C~oz=axNK+xB ziEb~g9QIfuIWC>^66hG81=21Bw|qpD$9jGFD!mIps0i+n7xdL5(@|EexTwjT%UG7q*8+({AtbZ-+X(66Sqb@{XljAHI5H^8bLn^Bclqm5`n;;90hPp&=Qi({n>Sg zC?3rr3&GaK_{MwZVWhYo)q?AX=wTN`mChJ82N78RjvDs!U1dWVEE{F^&G2E3N#xY$ zr4I1xzC&l44(5_Qw_Ttz?+?l4ooCm^``X7V1w3c-nnt9a8OHq0Eu@)hMD()-Bfr5t z1iQWsR>^w<(F^-kAF8CFyCwjb?%i&~BiIZtx=bc6rSDi%B>=jhc8;12hW@(w4(jm+ zzc-t*fE#M3-N5Y<^HETh#N)V(R)JitMu0{VbJSjiW2%U2!--P`pseX@5({%kRv&mf z62mo1+1c}OM?e=0jmf2cfH3eD*yuSHs>5YNDZ+HU?;n;Z*1Se)P?3&SNN2F#we@;8B_oQI*kxSYc)qM7KGILvmBA zr<)-zsQ^#$%{0LzRYNYkdfUY%Z&*%{B4!{*yQ!{F^VU`mUN<-aERTbg;_?T%%2J6x zTKKMcgg$uwMt3`~MeH%Fn%^yk&JdZ9!5B=M?K37o1|pfG=>Jb&eLe>}7P*RbJVpql?b?Z3WY8egg6pHaad4h$pyf6=7>Z2XfK^C#o_ z-}X)ZySsm8oBs=1^3}&b^T_`Qh51Te|7R!+1M}Z`<$s$0LA3m%p83nl@+MpvU}K{+Yh0GGCAs)_+C9e6eMIF#WNf{JZX}gFid|MUwdoP4j2#%W~x(2l?0K zUnlXE8Z&*h|I^^l^3RFF{G;M;_ROEEKWl%$HhjIpGJRb{yz5CRs7lI z{}X|RUrhA7f~lpUy|kgTytSpS)n6oJ#^vj$I}x#opdJKk zGk+9Q0)E4RuoYoLNU>4?b|`TlqSSCT97-MVtV&74gsd+6j$}nOqbR-M%90s6Sg?v2 zIR#^(nqu=OXK02g$EW*;eaHU$#-(fHp+CS?FUOQ9&WoEvVzvJa3xIio4KoP`Pbt2E z6ZhfwRDc>rceiY!(a#Uf3r#Q&j{%gh$xr95TK;LS+0B)q6RZiqCHb zKts;=(55L^f0E^vP+igbhg;YzR_;E~YZ3E{r(d%zd{DDjxUky{RC)U8&B;pg*I1I( z5Bf|rqAg)HYI*<#I=BnEP!U@dRMC*Vbqv!m`t*uti1-LCLodM92k~z1<*^H{OgSH@ zYMy!Qm|_d8HrpKpO1MOrJ{55kPw1~Untu7I(mp(TF3O+>IT|AH`V0v(jRFiJBlVq% z;?{2XShsQ{jQRY5DavDH3l?qspL!v6==o2`WLHrOF$PT&j{~X{@K0Gph_17QZNGUK z?FK2x^0Na*0MtGdtcIw$gf?^cd2%o}x03~jfRhV%6rz{&jeP6TERVB)vw-RVlj;}N zp(KXwEK8XMr4$~VdcL$E=yEpbl_OOVq_hYv@pVq@5Pl4MkPO2&mmM6hAG9uD?}Q8E zwyOkKvV|1tiF29aOZ5?G=7Vvi5~0{h1d1LMt`-1 zZM=q`pGhOjb!Cv2Hwx4t6@#o>@3V8I&rXh zO&En-#b~!YEfekYxofwA4_WWxOsv{5nm7jg%I7|(Mcj*@&wBdfFtlw*ZRYJ*|i$vB>Nr4bi#}ncT!b;>_0)l?lMtgyxKPj2bJ`ze}_v7wUz^_ zBtMu%#v741OHWD$R+1>#V`!u`j6fciR~1<%?@Xi)y99Zbrx}rICXzWuQi%Jd{C+G~ zf|<`iuCLIbmX%P<6<2#w(^6nnde{UQt zDd1>z_t3gNj3GxcROJNVox23`9?dK~?wudVh#p~2CyYHSvMBN(;b_&Zkn$U}^SYCE zjS9)fFY((P1e1+Hih1nKD7eKVDo2HK3tpA4E=oUIoRdFmej~wmw=MY zY0PQncZD=+6{*I1y&%{Ty3;r_Yc7Mu&6xhCg3Q{7%{b)H0jD+H1zNGNI+iwJC=LAE z`W|7W^UkVNuBYbdAe=j7Fh}T_aLNPDmV-;JM%5y;5ogMbW9Sn7i|l#}NmwnBijsXf z@3>mTAwox-cX(ssFu699)?Y9#c);ECzPWJtoyI z2QNYmKKqb_7&fbh&GNYYfK4O5+35hgw&LkWO-M@T#uHK*^H}a;*`dnhMTZT@Y3LpT zS5MZucEX)Q_h5~^Fjdzo9%@Yd&0y(&vElIE1Z)Qz3dx zZDmA@wYm7fV0{#!upCHij`y7a#7Z-?aw@3Ooae!WV$!gNDHFM9`yNh|o29d_3FUXGb zFE3`w8vWo0g!7f4M%$o3cC|)G)8!o3+O4btU#V|erfWsno!b5{9rqq*EVEPM@X1G# zBMvSrMs8sZ6MK6_E6t3*p;S9nhVIy!;_l3GB8h6H$FI$$(3l6`GYd}h3r@XLW`?H0 zJaY(fLZyQb!&Z;k@Q-_E*tE8tA{<;wP6q@|21p$Bc_IV^T)U#t(+-_nh-agZ#8NVp z(~^!0nl|4wc zTpV2Vlp@F+Rn&4?g-niyiau+!&b#H(72nnlt!xNVr>;c#m-k}=3|M(xnP{VVV*-iW z5WlSp&5Z*=8o<*5{Q{Tzj@$%ne!L`aNIqN5?Uw*`URUfd$^M0{^1p^7leDBhRypB? zs&iBuoHniKyghFpy+8!PVSL{AION#e^*DU>JX{N)F0Pn8sv1(UFbwX4FF{&WaZBGv zSOsReH9ZpDvT&I?!@Bw@!nt?K(6X{9LY>bw;Jz17W!=tvy{b&QE?@0prFo}QQqN0| zMQRCKWtIX4v{0O2Qo=mstxsR(+iWLCY$aUfi08M|#_qGe2UJ}|g42}%$PJN6Y1;uK z4D{I72wX;`UtK-ChB!FCmx@|{0h=*8S?SsDm3V{o%}9L?Tn!2;OvT-Ed)a-+V*R~m zZ>4L`LBjQ^jE4+isdl#}J;>U^OkZGzR85bqF-1K#I(~^L7a^ePTRNZ%BC}0__(yGa z%-DoDbgztL4^=4?Yt8aV$?wz;vx~#$1f@OJZwJP}py;d>g^zU{TyD{yj60;a#A3`# z>kTN7s)mM=2r@Vq$lP9Eg3Hm~R?t1;u=5W9;2x1u_|*rMd#V5)^gSqU23ZLl*|LoU z6Mi^Zk?tQQ=_tQc?b4|ID@d$i)ZH{C?A+D>Vzr4sK8Yu9P|3V&-;oAbElL{lAU?a> z2z0HrESVb1euH9;H6g7YG<;H{$fbu2#IB|L_$U8-J)<}{&z53vWu8n{P3oWF>p+Ib~ zy&Rs9ciQU7D900-BZ&AjEE6>S^ZO($`G^_Fq4=op)1Bz=quC;Kg_0MIo4l>K=kR*9 zVXytm?nS^VzCXsVYK6)c1)y}XB0cT#jRAjD9a50orQKn20X-Ym$9e3mp%YECKP)8U zCxT}R1HKM@IQu+eZ(>>ly~ac4NE_13^FDk7t)$iNOI8>2Ygc;(o2P3t z@Q$$81SBoejDvZ{e6yI=%6l#Y+68`Uy#n@liBsxAoyp8gKFTE91dFiDOTLLLmZ#03 zO0&ipSODVka~}(&G3)hQiqfBdq`+%9=B2;53PU2}83bkDq@6JK2Ii^ImxQWHX(oA^ z7xFrrq(5w(j9!TFNqt~m>iFgXb65g+5&V9-Wg|J(?NO$_dsW3m0eGMVX;cMA^OT`M z%*OB9#RV(wv*`2QwcF*SLloKFVu(J;c|4E;GgU~>lZ2)6`!aiYTN?IBlaejLg^@=P zJJm;ww;`f&Ux#Yo;M!ex;@6{JW0!}46}_>>@Ed9y4|V(4;U0%fG{}mf+BkPet-m@& zO_J+?JVqV^!KewSeZupB_%$ig2ik3_jo}Pln~WC`)jT}PwYnh1KArfl$$>vJRW4K(D$R@j|G(4IT@1x8GRiT@p< zo@$;}ULgUDqi99}tXPWEN=HF@!XwF6!%sufyzYQ-5~BHs&4*9gC|c7(Q=%0-69E?v z0S9PflF8s13;ZqdyG$TAUj}PY_KWibP)_r!j1X>+hT?jc(|Uz$SVFQrIqDsSfDh&u zxUOa^%I=lS(fT{~6>GvrMe=~h(DprvAvAzWxMt2k5z{oRKnea94;-N&Y#NAR4`D6$ z(P(Rq8&U)GG^*{DuIJ=aphFWK)0j#cS_yLK<+B^c*g{wyWwy7r^u)$JjUo2J2AhkC zedk~8oD->J->AdT!Ti+R4~n*qcUnAUQnV)2n!gLbjx~U z%gH8eS}i(vKw5oJHDtWox6-?G>s*(REt5|=xjK~Gwy5;WcsLF1yi|JJN|4J^A*0_p zDpK_7lkhnXl9IPPj7=ryLTJpL?jhh-vm4P>d+s%LNO3E~DM_vW5qP!Z_hp8%DTKgz z;qeRq-XP}QN4i3h3}4vF5PX|f!V=bd_|9vtud-|Zg0kO_HD8&_a%e?$<3J;17)WQFG)b5Oj=Uy&Ye zEylYnREqw>wsLSi!}2_Nr2X3!qlLvkL%wmk-TCHFI?79?RtOrYs6CZ&gZc?8{PgzI zyuB6V;*nsB58?AC(@&ct%ALz>s$))1MYlv$3NjOn-sxS!3^LOOcbOv|;uppXIE`j) z)BKe&uR1*4Cbxt34Y9!%WBKiyu0Ug0t`S*Uea@(2clTqtpb2a!C{Nnn`PkPFj=E{i zK8kN*e)<^fc0yx6P=5f2f zxLj$PA9rs!Z@rdi?^)5E0}Ha#Gbv)jzmJ*SBx!q_GbNq^bP9 zeo{&0(kc#@h(Samu<%+^STZyuT#GI_M+meM$g-Ng8rO7OzNXuI9Xfk`F$O&+RevsB zX2#EZ4=0~`aC?(+d$V3utWh0&B3)gyfwaM5e`rSvU4LeM5WSsv^QX(PZk4s*UiNe3 zMMqUL5hTJP*nza_ok2PPtOQyMqTI3aLOVXOhf(`WgLy?ZKs`ll4RL4KDMsTU9g5e5 zR|akV2Z-BTM{+?vAB6H8?1X!#A4$yG1lkbBak`5i z)a?W>^M9wma@HY(|K8UM-8l+2=eh^_IQ3bvvG;L(X|~yviI+&L7hNGmwhefIU!;jwuc=TIB@b@1ocJ9TBY(Vvd;or(i2y^*&xY@*)5zbwV{ zzM0LOtP#-{lCn_g6qPWMCY=tIngTsSRUd|Ij?Wudhh`^-SnX(E5KSdFShm0;?TK8m z{_WRpX4v#o(r#(pSwN|5DtyKn2A%k`^t(ZwjZ+C|dr9NmN5V}91(_uVu*rD8# zI{Bc}4{swTtqtimXqql}u!c35K4Yv2Q61pC{S?d_iE7H|CJ-=~%LO4e$63u22cL-Y zU|;CGMb!wWMl(eUSa=Ry+9*5iXL$NgcJa2pv0!KwZZk_gy*z;;0?kRRDWZYPhEd zeB}wg-ipUiGRwNz`M%6?u|fLrd`T}}ULmr?qkm5=@1WEP#@#jaW{I-iZ!O=8McKT* zLGL0CZAbCZa;A(AHDvYfRUbedV4H4B>Vv8TCLrt!De2_NoBJE^g*`2e=pe7!lxFTKRu%-{sQu&UnR2C|fcF;Dtf%>pT@rA3|j$SM4{N9|T zPHzxW^P$PYvf1WSvuV7-r?!({e0m}rGezL0`b~Gvaz)-H>y2d!+yEHt6Wc|sx%!Q6 zZjhcIiVccRFf98FY?T)(3b4h8lMWI&+Dpsd)@%z0%-F|D2i<1dcT5ELc3P<$$N*Yf z+LzI!Ra0h`SZbDPe752)uZ~Ak%YrtIakBWli5bg>&r^!bRo6 zObc~>k^c4jaZkX%_& z^^jAmFw*D}J(U?+6P6A!(1h7&rTWblpytGh9aNK4qNPo21OHZ2jZajEn|$AoU$`Rm znUuj@wu+$qPf$F5Ei5*uI%gqVjOcKyx(9GzJz)XICP}aXGC``&YkBCv$@1G#Fm;j+G$rMPC}$5|2gUE=#WC%qo|Optx!ZeAzl&ukB6GD7XoR%ycj`} zT^CT$ca>X-6b|N3joU@$R}1T*CUgcbGzO>OFhPjc)BriIl4qcCxD`X)-S;Y6Hj6Vz ztjWM|tuJ%rX`A1gC`=Q;;XI(>KzzG_S=C%7Wl)®j;5D3s#g`gCfMXYW&tS7yHr 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�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


!%wMnWOd90 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

D|C<-6-F#{l?gonZ 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleA/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleA/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..7b5154f355fa31c59cd0b189a6a37cd3dd44fd11 GIT binary patch literal 9372 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleA/Rsc/Starter.rsrc b/handera-sdk-105/examples/ExampleA/Rsc/Starter.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleA/Src/starter.c b/handera-sdk-105/examples/ExampleA/Src/starter.c new file mode 100644 index 0000000..d34d13c --- /dev/null +++ b/handera-sdk-105/examples/ExampleA/Src/starter.c @@ -0,0 +1,478 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : Example A + * + *****************************************************************************/ + +#include +#include "StarterRsc.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +FontID currentFont = stdFont; +Char helloStr[] = "Hello World"; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_A' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + /*********************************************************************** + * + * FUNCTION: PrvSetHelloFont + * + * DESCRIPTION: Sets the font and centers the field horizontally + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvCenterTextField(FormPtr frmP, FieldPtr fldP, Boolean draw) +{ + RectangleType r, fr; + Int16 stringWidth; + +/*------------------------------------------------------------------------ + * First get the width of the field string in pixels. + *----------------------------------------------------------------------*/ + FntSetFont(FldGetFont(fldP)); + stringWidth = FntCharsWidth(helloStr, StrLen(helloStr)); + +/*------------------------------------------------------------------------ + * Now center the field based on width of string in pixels. + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &fr); + FrmGetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldEraseField(fldP); + + r.topLeft.x = (fr.extent.x/2) - (stringWidth/2); + FrmSetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldDrawField(fldP); +} + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + FieldPtr fldP; + Char *tmp; + + currentFont = stdFont; + +/*------------------------------------------------------------------------ + * Initialize the field to "Hello World" and set its font + *----------------------------------------------------------------------*/ + fldP = (FieldPtr)GetObjectPtr(MainHelloField); + if ((tmp = FldGetTextPtr(fldP)) != NULL) + MemPtrFree(tmp); + tmp = (Char *)MemPtrNew(StrLen(helloStr) + 1); + StrCopy(tmp, helloStr); + FldSetTextPtr(fldP, tmp); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), false);; +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP, aboutFrmP; + + frmP = FrmGetActiveForm(); + formID = FrmGetFormId (frmP); + + switch (command) + { + case MainOptionsAboutExampleA: + MenuEraseStatus(0); + aboutFrmP = FrmInitForm (AboutForm); + FrmDoDialog (aboutFrmP); // Display the About Box. + FrmDeleteForm (aboutFrmP); + handled = true; + break; + + case MainOptionsFont : + currentFont = FontSelect(currentFont); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), true); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + default: + break; + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + + return(errNone); +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/handera-sdk-105/examples/ExampleA/StarterRsc.h b/handera-sdk-105/examples/ExampleA/StarterRsc.h new file mode 100644 index 0000000..f2abdc9 --- /dev/null +++ b/handera-sdk-105/examples/ExampleA/StarterRsc.h @@ -0,0 +1,51 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 4:45:12 PM on Wednesday, April 04, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleA\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleA" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainGlobeBitMap 1200 //(Left Origin = 50, Top Origin = 50, Bitmap Resource ID = 1200, Usable = 1) +#define MainHelloField 1002 //(Left Origin = 53, Top Origin = 138, Width = 80, Height = 20, Usable = 1, Editable = 0, Underline = 0, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsFont 1000 +#define MainOptionsAboutExampleA 1001 + +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleB/ExampleB.mcp b/handera-sdk-105/examples/ExampleB/ExampleB.mcp new file mode 100644 index 0000000000000000000000000000000000000000..fb260c1f6118f9b92c7f42da0e53abff59d62c5c GIT binary patch literal 50607 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleB/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleB/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..2be20dcc00c3521b0c34c1b2093464254525d5c6 GIT binary patch literal 18705 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 +#include "StarterRsc.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +FontID currentFont = stdFont; +Char helloStr[] = "Hello World"; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_B' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + /*********************************************************************** + * + * FUNCTION: PrvSetHelloFont + * + * DESCRIPTION: Sets the font and centers the field horizontally + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvCenterTextField(FormPtr frmP, FieldPtr fldP, Boolean draw) +{ + RectangleType r, fr; + Int16 stringWidth; + +/*------------------------------------------------------------------------ + * First get the width of the field string in pixels. + *----------------------------------------------------------------------*/ + FntSetFont(FldGetFont(fldP)); + stringWidth = FntCharsWidth(helloStr, StrLen(helloStr)); + +/*------------------------------------------------------------------------ + * Now center the field based on width of string in pixels. + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &fr); + FrmGetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldEraseField(fldP); + + r.topLeft.x = (fr.extent.x/2) - (stringWidth/2); + FrmSetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldDrawField(fldP); +} + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + FieldPtr fldP; + Char *tmp; + + currentFont = stdFont; + +/*------------------------------------------------------------------------ + * Initialize the field to "Hello World" and set its font + *----------------------------------------------------------------------*/ + fldP = (FieldPtr)GetObjectPtr(MainHelloField); + if ((tmp = FldGetTextPtr(fldP)) != NULL) + MemPtrFree(tmp); + tmp = (Char *)MemPtrNew(StrLen(helloStr) + 1); + StrCopy(tmp, helloStr); + FldSetTextPtr(fldP, tmp); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), false);; +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP, aboutFrmP; + + frmP = FrmGetActiveForm(); + formID = FrmGetFormId (frmP); + + switch (command) + { + case MainOptionsAboutExampleB : + MenuEraseStatus(0); + aboutFrmP = FrmInitForm (AboutForm); + FrmDoDialog (aboutFrmP); // Display the About Box. + FrmDeleteForm (aboutFrmP); + handled = true; + break; + + case MainOptionsFont : + currentFont = FontSelect(currentFont); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), true); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + default: + break; + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + + return(errNone); +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/handera-sdk-105/examples/ExampleB/StarterRsc.h b/handera-sdk-105/examples/ExampleB/StarterRsc.h new file mode 100644 index 0000000..7edfd1a --- /dev/null +++ b/handera-sdk-105/examples/ExampleB/StarterRsc.h @@ -0,0 +1,68 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 4:45:36 PM on Wednesday, April 04, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleB\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleB" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainGlobeBitMap 1200 //(Left Origin = 50, Top Origin = 50, Bitmap Resource ID = 1200, Usable = 1) +#define MainHelloField 1002 //(Left Origin = 53, Top Origin = 138, Width = 80, Height = 20, Usable = 1, Editable = 0, Underline = 0, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsFont 1000 +#define MainOptionsAboutExampleB 1001 + +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 5296 +#define VGAGlobeBitmap 5296 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleC/ExampleC.mcp b/handera-sdk-105/examples/ExampleC/ExampleC.mcp new file mode 100644 index 0000000000000000000000000000000000000000..7c4114441bdff6e961bd5b242466c1935738ebe1 GIT binary patch literal 43449 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 HFU0=?r~nu@ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleC/Rsc/ExampleC.rsrc b/handera-sdk-105/examples/ExampleC/Rsc/ExampleC.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleC/Rsc/Resource.frk/ExampleC.rsrc b/handera-sdk-105/examples/ExampleC/Rsc/Resource.frk/ExampleC.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1482156899393c4ed1c5864e6fed9b7ded7a1912 GIT binary patch literal 9353 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 c)%mPkv*yl)tJbe8V0Fpb71hd3KOt7$efG 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 +#include "StarterRsc.h" + + +/*********************************************************************** + * + * Entry Points + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +FontID currentFont = stdFont; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_5' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + +/*********************************************************************** + * + * FUNCTION: DrawHelloWorld + * + * DESCRIPTION: This routine prints "Hello World" to the center of the + * window. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void DrawHelloWorld(void) +{ + MemHandle resH; + BitmapPtr resP; + char *str = "Hello World"; + FontID savedFont; + Coord x, y, winWidth, winHeight; + + resH = DmGetResource(bitmapRsc, GlobeBitmap); + ErrFatalDisplayIf(!resH, "Missing bitmap"); + resP = MemHandleLock(resH); + + WinGetWindowExtent(&winWidth, &winHeight); + savedFont = FntSetFont(currentFont); + +/*------------------------------------------------------------------------ + * Draw the globe graphic + *----------------------------------------------------------------------*/ + x = (winWidth/2) - (resP->width/2); + y = (winHeight/2) - (resP->height/2); + WinDrawBitmap(resP, x, y); + +/*------------------------------------------------------------------------ + * Draw String below the globe + *----------------------------------------------------------------------*/ + x = (winWidth/2) - (FntCharsWidth(str, StrLen(str))/2); + y = y + resP->height + FntCharHeight() + 10; + WinDrawChars(str, StrLen(str), x, y); + + FntSetFont(savedFont); + MemPtrUnlock(resP); + DmReleaseResource(resH); +} + +/*********************************************************************** + * + * FUNCTION: EraseHelloWorld + * + * DESCRIPTION: This routine erases "Hello World" from the window. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void EraseHelloWorld(void) +{ + MemHandle resH; + BitmapPtr resP; + char *str = "Hello World"; + FontID savedFont; + Coord x, y, winWidth, winHeight; + + resH = DmGetResource(bitmapRsc, GlobeBitmap); + ErrFatalDisplayIf(!resH, "Missing bitmap"); + resP = MemHandleLock(resH); + + WinGetWindowExtent(&winWidth, &winHeight); + savedFont = FntSetFont(currentFont); + + x = (winWidth/2) - (FntCharsWidth(str, StrLen(str))/2); + y = (winHeight/2) - (resP->height/2); + y = y + resP->height + FntCharHeight() + 10; + WinEraseChars(str, StrLen(str), x, y); + + FntSetFont(savedFont); + MemPtrUnlock(resP); + DmReleaseResource(resH); + +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormInit(FormPtr /*frmP*/) +{ + DrawHelloWorld(); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP; + FontID newFont; + + switch (command) + { + case MainOptionsAboutExampleC: + MenuEraseStatus(0); // Clear the menu status from the display. + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + handled = true; + break; + + case MainOptionsFont : + formID = (FrmGetFormId (FrmGetActiveForm ())); + newFont = FontSelect(currentFont); + EraseHelloWorld(); + currentFont = newFont; + FrmUpdateForm (formID, frmRedrawUpdateCode); + handled = true; + break; + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit( frmP); + FrmDrawForm ( frmP); + handled = true; + break; + + case frmUpdateEvent : + DrawHelloWorld(); + handled = true; + break; + + default: + break; + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + +/*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + +/*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + error = AppStart(); + if (error) + return error; + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleC/StarterRsc.h b/handera-sdk-105/examples/ExampleC/StarterRsc.h new file mode 100644 index 0000000..e54f79a --- /dev/null +++ b/handera-sdk-105/examples/ExampleC/StarterRsc.h @@ -0,0 +1,50 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 2:44:50 PM on Wednesday, March 21, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\dan\examples\ExampleC\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleC" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutTitleLabel 1102 //(Left Origin = 61, Top Origin = 23, Usable = 1, Font = Large) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsFont 1000 +#define MainOptionsAboutExampleC 1001 + +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleD/ExampleD.mcp b/handera-sdk-105/examples/ExampleD/ExampleD.mcp new file mode 100644 index 0000000000000000000000000000000000000000..6f6480a48e2f80c122c66b4c787018a1396adb5a GIT binary patch literal 50607 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 EKLy|b4*&oF literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleD/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleD/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..46b9da6b70fef5faa7781577545114fece374a0f GIT binary patch literal 18641 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 +#include "StarterRsc.h" + +#include "vga.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +FontID currentFont = stdFont; +Boolean vgaPresent = false; +Char helloStr[] = "Hello World"; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_D' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +#define OptionsRotate 1500 + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + /*********************************************************************** + * + * FUNCTION: PrvMoveObject + * + * DESCRIPTION: This routine moves an object vertically within a form. + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvMoveObject(FormPtr frmP, UInt16 objIndex, Coord y_diff, Boolean draw) +{ + RectangleType r; + + FrmGetObjectBounds(frmP, objIndex, &r); + if (draw) + { + RctInsetRectangle(&r, -2); //need to erase the frame as well + WinEraseRectangle(&r, 0); + RctInsetRectangle(&r, 2); + } + r.topLeft.y += y_diff; + FrmSetObjectBounds(frmP, objIndex, &r); +} + +/*********************************************************************** + * + * FUNCTION: PrvCenterObject + * + * DESCRIPTION: This routine centers an object within a form. + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvCenterObject(FormPtr frmP, UInt16 objIndex, Boolean draw) +{ + RectangleType r, fr; + +/*------------------------------------------------------------------------ + * Get the frame and bitmap size + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &fr); + FrmGetObjectBounds(frmP, objIndex, &r); + + if (draw) + { + RctInsetRectangle(&r, -2); //need to erase the frame as well + WinEraseRectangle(&r, 0); + RctInsetRectangle(&r, 2); + } + + r.topLeft.x = (fr.extent.x/2) - (r.extent.x/2); + r.topLeft.y = (fr.extent.y/2) - (r.extent.y/2); + + FrmSetObjectBounds(frmP, objIndex, &r); +} + + /*********************************************************************** + * + * FUNCTION: PrvSetHelloFont + * + * DESCRIPTION: Sets the font and centers the field horizontally + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvCenterTextField(FormPtr frmP, FieldPtr fldP, Boolean draw) +{ + RectangleType r, fr; + Int16 stringWidth; + +/*------------------------------------------------------------------------ + * First get the width of the field string in pixels. + *----------------------------------------------------------------------*/ + FntSetFont(FldGetFont(fldP)); + stringWidth = FntCharsWidth(helloStr, StrLen(helloStr)); + +/*------------------------------------------------------------------------ + * Now center the field based on width of string in pixels. + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &fr); + FrmGetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldEraseField(fldP); + + r.topLeft.x = (fr.extent.x/2) - (stringWidth/2); + FrmSetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldDrawField(fldP); +} + + /*********************************************************************** + * + * FUNCTION: MainFormResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void MainFormResize(FormPtr frmP, Boolean draw) +{ + Coord x, y, y_diff; + RectangleType r; + +/*------------------------------------------------------------------------ + * Get the new extent + *----------------------------------------------------------------------*/ + WinGetDisplayExtent(&x, &y); + +/*------------------------------------------------------------------------ + * Get the old extent + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &r); + +/*------------------------------------------------------------------------ + * Calculate change in form size. + *----------------------------------------------------------------------*/ + y_diff = y - (r.topLeft.y + r.extent.y); + +/*------------------------------------------------------------------------ + * Resize the form + *----------------------------------------------------------------------*/ + r.extent.y = y; + r.extent.x = x; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + PrvCenterObject (frmP, FrmGetObjectIndex(frmP, MainGlobeBitMap), draw); + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), false);; + PrvMoveObject (frmP, FrmGetObjectIndex(frmP, MainHelloField), y_diff, draw); + + if (draw) + FrmDrawForm(frmP); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + FieldPtr fldP; + Char *tmp; + + currentFont = stdFont; + +/*------------------------------------------------------------------------ + * Initialize the field to "Hello World" and set its font + *----------------------------------------------------------------------*/ + fldP = (FieldPtr)GetObjectPtr(MainHelloField); + if ((tmp = FldGetTextPtr(fldP)) != NULL) + MemPtrFree(tmp); + tmp = (Char *)MemPtrNew(StrLen(helloStr) + 1); + StrCopy(tmp, helloStr); + FldSetTextPtr(fldP, tmp); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + + if (vgaPresent) + VgaFormModify(frmP, vgaFormModify160To240); + + MainFormResize(frmP, false); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP, aboutFrmP; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + frmP = FrmGetActiveForm(); + formID = FrmGetFormId (frmP); + + switch (command) + { + case OptionsAboutExampleD: + MenuEraseStatus(0); + if (vgaPresent) + { + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + } + aboutFrmP = FrmInitForm (AboutForm); + FrmDoDialog (aboutFrmP); // Display the About Box. + FrmDeleteForm (aboutFrmP); + if (vgaPresent) + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + + case OptionsFont : + currentFont = FontSelect(currentFont); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), true); + handled = true; + break; + + case OptionsRotate : + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenMode1To1, VgaRotateSelect(rotateMode)); + MainFormResize(FrmGetActiveForm(), true); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + case menuOpenEvent : + if (vgaPresent) + MenuAddItem(OptionsFont, OptionsRotate, 0, "Rotate..."); + handled = true; + break; + + default: + break; + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Check for VGA Extension + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + vgaPresent = false; + + return(errNone); +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + +/*------------------------------------------------------------------------ + * You must set the screen mode before the form is loaded. + *----------------------------------------------------------------------*/ + if (vgaPresent) + { +/*------------------------------------------------------------------------ + * Call VgaGetScreenMode() to get the current rotation. We force the mode + * to 1to1 but want to keep the rotation. + * + * Note: If your app does not support screen rotation, simply call + * + * VgaSetScreenMode(screenMode1To1, rotateModeNone); + * + *----------------------------------------------------------------------*/ + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenMode1To1, rotateMode); + } + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/handera-sdk-105/examples/ExampleD/StarterRsc.h b/handera-sdk-105/examples/ExampleD/StarterRsc.h new file mode 100644 index 0000000..d5ef429 --- /dev/null +++ b/handera-sdk-105/examples/ExampleD/StarterRsc.h @@ -0,0 +1,68 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 10:08:10 AM on Thursday, May 03, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleD\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleD" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainGlobeBitMap 1200 //(Left Origin = 46, Top Origin = 43, Bitmap Resource ID = 1200, Usable = 1) +#define MainHelloField 1002 //(Left Origin = 40, Top Origin = 145, Width = 80, Height = 12, Usable = 1, Editable = 0, Underline = 0, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define AboutText1Label 1103 //(Left Origin = 20, Top Origin = 54, Usable = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: MBAR 1000 +#define MainMenuBar 1000 + +// Resource: MENU 1000 +#define OptionsMenu 1000 +#define OptionsFont 1000 +#define OptionsAboutExampleD 1001 + +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 5296 +#define VGAGlobeBitmap 5296 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 + +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 diff --git a/handera-sdk-105/examples/ExampleE/ExampleE.mcp b/handera-sdk-105/examples/ExampleE/ExampleE.mcp new file mode 100644 index 0000000000000000000000000000000000000000..c41d401ef62cdea8b07aaf7fbb9e854d135c47e0 GIT binary patch literal 50607 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleE/Rsc/HandEra.r b/handera-sdk-105/examples/ExampleE/Rsc/HandEra.r new file mode 100644 index 0000000..371e069 --- /dev/null +++ b/handera-sdk-105/examples/ExampleE/Rsc/HandEra.r @@ -0,0 +1,29 @@ +/*********************************************************************** + * + * Copyright (c) 1999-2001, TRG, All Rights Reserved + * + * PROJECT: HandEra 330 + * + * FILE: HandEra.r + * + * DESCRIPTION: + * + * AUTHOR: John Ehm + * + * DATE: 01/17/01 + * + **********************************************************************/ + + +type 'sKst' { + //Currently no data is stored in resource, need dummy otherwise + //resource is not linked in + unsigned longint; +}; + + +resource 'sKst' (1000, "HandEra Aware") +{ + 0x00000000; + +}; diff --git a/handera-sdk-105/examples/ExampleE/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleE/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..2ce9254780175f001be8fd90372f493c7865c821 GIT binary patch literal 18641 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleE/Rsc/Starter.rsrc b/handera-sdk-105/examples/ExampleE/Rsc/Starter.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleE/Src/starter.c b/handera-sdk-105/examples/ExampleE/Src/starter.c new file mode 100644 index 0000000..f1ced6c --- /dev/null +++ b/handera-sdk-105/examples/ExampleE/Src/starter.c @@ -0,0 +1,648 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : Example E + * + *****************************************************************************/ + +#include +#include "StarterRsc.h" + +#include "vga.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +FontID currentFont = stdFont; +Boolean vgaPresent = false; +Char helloStr[] = "Hello World"; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_E' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +#define OptionsRotate 1500 + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + /*********************************************************************** + * + * FUNCTION: PrvMoveObject + * + * DESCRIPTION: This routine moves an object vertically within a form. + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvMoveObject(FormPtr frmP, UInt16 objIndex, Coord y_diff, Boolean draw) +{ + RectangleType r; + + FrmGetObjectBounds(frmP, objIndex, &r); + if (draw) + { + RctInsetRectangle(&r, -2); //need to erase the frame as well + WinEraseRectangle(&r, 0); + RctInsetRectangle(&r, 2); + } + r.topLeft.y += y_diff; + FrmSetObjectBounds(frmP, objIndex, &r); +} + +/*********************************************************************** + * + * FUNCTION: PrvCenterObject + * + * DESCRIPTION: This routine centers an object within a form. + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvCenterObject(FormPtr frmP, UInt16 objIndex, Boolean draw) +{ + RectangleType r, fr; + +/*------------------------------------------------------------------------ + * Get the frame and bitmap size + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &fr); + FrmGetObjectBounds(frmP, objIndex, &r); + + if (draw) + { + RctInsetRectangle(&r, -2); //need to erase the frame as well + WinEraseRectangle(&r, 0); + RctInsetRectangle(&r, 2); + } + + r.topLeft.x = (fr.extent.x/2) - (r.extent.x/2); + r.topLeft.y = (fr.extent.y/2) - (r.extent.y/2); + + FrmSetObjectBounds(frmP, objIndex, &r); +} + + /*********************************************************************** + * + * FUNCTION: PrvSetHelloFont + * + * DESCRIPTION: Sets the font and centers the field horizontally + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvCenterTextField(FormPtr frmP, FieldPtr fldP, Boolean draw) +{ + RectangleType r, fr; + Int16 stringWidth; + +/*------------------------------------------------------------------------ + * First get the width of the field string in pixels. + *----------------------------------------------------------------------*/ + FntSetFont(FldGetFont(fldP)); + stringWidth = FntCharsWidth(helloStr, StrLen(helloStr)); + +/*------------------------------------------------------------------------ + * Now center the field based on width of string in pixels. + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &fr); + FrmGetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldEraseField(fldP); + + r.topLeft.x = (fr.extent.x/2) - (stringWidth/2); + FrmSetObjectBounds(frmP, FrmGetObjectIndex(frmP, MainHelloField), &r); + + if (draw) + FldDrawField(fldP); +} + + /*********************************************************************** + * + * FUNCTION: MainFormResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void MainFormResize(FormPtr frmP, Boolean draw) +{ + Coord x, y, y_diff; + RectangleType r; + +/*------------------------------------------------------------------------ + * Get the new extent + *----------------------------------------------------------------------*/ + WinGetDisplayExtent(&x, &y); + +/*------------------------------------------------------------------------ + * Get the old extent + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &r); + +/*------------------------------------------------------------------------ + * Calculate change in form size. + *----------------------------------------------------------------------*/ + y_diff = y - (r.topLeft.y + r.extent.y); + +/*------------------------------------------------------------------------ + * Resize the form + *----------------------------------------------------------------------*/ + r.extent.y = y; + r.extent.x = x; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + PrvCenterObject (frmP, FrmGetObjectIndex(frmP, MainGlobeBitMap), draw); + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), false);; + PrvMoveObject (frmP, FrmGetObjectIndex(frmP, MainHelloField), y_diff, draw); + + if (draw) + FrmDrawForm(frmP); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + FieldPtr fldP; + Char *tmp; + + currentFont = stdFont; + +/*------------------------------------------------------------------------ + * Initialize the field to "Hello World" and set its font + *----------------------------------------------------------------------*/ + fldP = (FieldPtr)GetObjectPtr(MainHelloField); + if ((tmp = FldGetTextPtr(fldP)) != NULL) + MemPtrFree(tmp); + tmp = (Char *)MemPtrNew(StrLen(helloStr) + 1); + StrCopy(tmp, helloStr); + FldSetTextPtr(fldP, tmp); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + + if (vgaPresent) + VgaFormModify(frmP, vgaFormModify160To240); + + MainFormResize(frmP, false); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP, aboutFrmP; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + frmP = FrmGetActiveForm(); + formID = FrmGetFormId (frmP); + + switch (command) + { + case OptionsAboutExampleD: + MenuEraseStatus(0); + if (vgaPresent) + { + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + } + aboutFrmP = FrmInitForm (AboutForm); + FrmDoDialog (aboutFrmP); // Display the About Box. + FrmDeleteForm (aboutFrmP); + if (vgaPresent) + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + + case OptionsFont : + currentFont = FontSelect(currentFont); + FldSetFont((FieldPtr)GetObjectPtr(MainHelloField), currentFont); + PrvCenterTextField(frmP, (FieldPtr)GetObjectPtr(MainHelloField), true); + handled = true; + break; + + case OptionsRotate : + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenMode1To1, VgaRotateSelect(rotateMode)); + MainFormResize(FrmGetActiveForm(), true); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + case displayExtentChangedEvent : + MainFormResize(FrmGetActiveForm(), true); + handled = true; + break; + + case menuOpenEvent : + if (vgaPresent) + MenuAddItem(OptionsFont, OptionsRotate, 0, "Rotate..."); + handled = true; + break; + + default: + break; + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Check for VGA Extension + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + vgaPresent = false; + + return(errNone); +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + +/*------------------------------------------------------------------------ + * You must set the screen mode before the form is loaded. + *----------------------------------------------------------------------*/ + if (vgaPresent) + { +/*------------------------------------------------------------------------ + * Call VgaGetScreenMode() to get the current rotation. We force the mode + * to 1to1 but want to keep the rotation. + * + * Note: If your app does not support screen rotation, simply call + * + * VgaSetScreenMode(screenMode1To1, rotateModeNone); + * + *----------------------------------------------------------------------*/ + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenMode1To1, rotateMode); + } + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/handera-sdk-105/examples/ExampleE/StarterRsc.h b/handera-sdk-105/examples/ExampleE/StarterRsc.h new file mode 100644 index 0000000..daf18c6 --- /dev/null +++ b/handera-sdk-105/examples/ExampleE/StarterRsc.h @@ -0,0 +1,68 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 10:11:42 AM on Thursday, May 03, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleE\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleE" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainGlobeBitMap 1200 //(Left Origin = 46, Top Origin = 43, Bitmap Resource ID = 1200, Usable = 1) +#define MainHelloField 1002 //(Left Origin = 40, Top Origin = 145, Width = 80, Height = 12, Usable = 1, Editable = 0, Underline = 0, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText1Label 1103 //(Left Origin = 20, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: MBAR 1000 +#define MainMenuBar 1000 + +// Resource: MENU 1000 +#define OptionsMenu 1000 +#define OptionsFont 1000 +#define OptionsAboutExampleD 1001 + +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 5296 +#define VGAGlobeBitmap 5296 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 + +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 diff --git a/handera-sdk-105/examples/ExampleF/ExampleF.mcp b/handera-sdk-105/examples/ExampleF/ExampleF.mcp new file mode 100644 index 0000000000000000000000000000000000000000..5af6031b7b1f95be3b287071800045ec9883f3f1 GIT binary patch literal 50607 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 D5z0jo literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleF/Rsc/HandEra.r b/handera-sdk-105/examples/ExampleF/Rsc/HandEra.r new file mode 100644 index 0000000..371e069 --- /dev/null +++ b/handera-sdk-105/examples/ExampleF/Rsc/HandEra.r @@ -0,0 +1,29 @@ +/*********************************************************************** + * + * Copyright (c) 1999-2001, TRG, All Rights Reserved + * + * PROJECT: HandEra 330 + * + * FILE: HandEra.r + * + * DESCRIPTION: + * + * AUTHOR: John Ehm + * + * DATE: 01/17/01 + * + **********************************************************************/ + + +type 'sKst' { + //Currently no data is stored in resource, need dummy otherwise + //resource is not linked in + unsigned longint; +}; + + +resource 'sKst' (1000, "HandEra Aware") +{ + 0x00000000; + +}; diff --git a/handera-sdk-105/examples/ExampleF/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleF/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..43446bdbb49ad3adfdb5f76c3298f9f1d02403e1 GIT binary patch literal 15010 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 +#include "StarterRsc.h" + +#include "Silk.h" + +/*********************************************************************** + * + * Entry Points + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +Boolean silkExtensionPresent; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_F' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ +static Err DrawHelloWorld(void); + + +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + +/*********************************************************************** + * + * FUNCTION: DrawHelloWorld + * + * DESCRIPTION: This routine prints "Hello World" to the center of the + * window. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err DrawHelloWorld(void) +{ + WinHandle silkWindow, savedWindow; + MemHandle resH; + BitmapPtr resP; + Coord x, y, winWidth, winHeight; + +/*------------------------------------------------------------------------ + * Get the WinHandle to the silkscreen window + *----------------------------------------------------------------------*/ + if ((silkWindow = SilkGetWindow()) == NULL) + return(-1); + + savedWindow = WinSetDrawWindow(silkWindow); + + if (SilkWindowMaximized()) + { + resH = DmGetResource(bitmapRsc, GlobeBitmap); + ErrFatalDisplayIf(!resH, "Missing bitmap"); + resP = MemHandleLock(resH); + +/*------------------------------------------------------------------------ + * Determine the size of the silkscreen area so we can center the globe. + *----------------------------------------------------------------------*/ + WinGetWindowExtent(&winWidth, &winHeight); + +/*------------------------------------------------------------------------ + * Draw the globe graphic + *----------------------------------------------------------------------*/ + x = (winWidth/2) - (resP->width/2); + x -= 20; //OK, fudge a little so we don't erase the down arrow. + y = (winHeight/2) - (resP->height/2); + WinPaintBitmap(resP, x, y); + + MemPtrUnlock(resP); + DmReleaseResource(resH); + + } + else + { + FntSetFont(stdFont); + WinDrawChars("Hello World", 11, 50, 3); + } + + WinSetDrawWindow(savedWindow); + + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormInit(FormPtr /*frmP*/) +{ +} + + +/*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + FormPtr frmP; + + switch (command) + { + case MainOptionsAboutExampleF: + MenuEraseStatus(0); // Clear the menu status from the display. + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + handled = true; + break; + + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case ctlSelectEvent : + switch(eventP->data.ctlSelect.controlID) + { + case MainHelloWorldButton : + if (!silkExtensionPresent) + FrmAlert(SilkExtNotFoundAlert); + else + if (DrawHelloWorld() != errNone) + FrmAlert(SilkDrawErrorAlert); + + break; + } + break; + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit( frmP); + FrmDrawForm ( frmP); + handled = true; + break; + + default: + break; + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + +/*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + + if (_TRGSilkFeaturePresent(&version)) + silkExtensionPresent = true; + else + silkExtensionPresent = false; + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + +/*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + error = AppStart(); + if (error) + return error; + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleF/StarterRsc.h b/handera-sdk-105/examples/ExampleF/StarterRsc.h new file mode 100644 index 0000000..b81de30 --- /dev/null +++ b/handera-sdk-105/examples/ExampleF/StarterRsc.h @@ -0,0 +1,72 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 6:29:08 PM on Friday, March 23, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleF\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleF" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainHelloWorldButton 1001 //(Left Origin = 50, Top Origin = 75, Width = 60, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define SilkExtNotFoundAlert 1000 +#define SilkExtNotFoundOK 0 + +// Resource: Talt 1100 +#define SilkDrawErrorAlert 1100 +#define SilkDrawErrorOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsAboutExampleF 1000 + +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleG/Bitmaps/silk-1bit.bmp b/handera-sdk-105/examples/ExampleG/Bitmaps/silk-1bit.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ce44140e6a3003777bf37671d132dcf48007c640 GIT binary patch literal 57654 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 oulk&J-@SpofxUsffw$ej%Kl|=r3;+NC literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleG/Bitmaps/silk-2bit.bmp b/handera-sdk-105/examples/ExampleG/Bitmaps/silk-2bit.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ee94d8eeb8b53ce17eae0af3347f74035164e84 GIT binary patch literal 57654 zcmeHL-H|l84f~vcpB;iDxB&cqRerh5oq#iN1~zt42V+5rt?u2eo}JNDeSIJZf)d61 zsr$$8zy15y`|me=|BgTZ!JmKP&tHE14PX3_|JPsnhs3X6|GoA1=PCAIpK1cP?$m9~ zpXv$sWj;>ewyiqf_>al&loM}%s^k^KAD80he|ugY__fEKtkoZvkI@&-+6CX6D0|_` z{?_t&KA>yrYGUpJI>{p7ITyvTKeKSrZACU~(eQ`1eq}vVQw5D@BlOf0;J96cUvj~9 z&vm5^hLV-4W`AZWwYUss&WC*8(XUM0PoU5Cy?%Q3JMO;jxvtclQF2&yxIZ(2x|{_w z!&CgMsb876pFp3Tb$Jec@$M^Q)If%wbdZK%s0>YnLmz2Q?axdsw?#1Xxxf!Q_E)YY z7p7WGekikYch@+cU3sVhS^3J$JjK7;eE9D}rLaHD>U&|MSR&6AaJfq@9JXt&JkvXm zau1&yuUytOj%Slu(Xe)1sa`0VRbf3m^)CEXcV>lAyF(y1wrjpp0!Zd0aqUQP<;lp( zWlqitpOVML5AWp~$Fsr}4Qtnx>V=YF6_-INf;Z`}Z(M2LMl{kPEAV5yo#|an;3mVB zrVO5}lDSO8RE?)z0mq1jS9Xo#p%~H?~xQ_b(E2~96b>$Fr&x4Qtnx>V=Y8rG1Djl_aHE2WmP5;p4s7 zkzd^udS~QGGTf8}@G9aN1KtZ?5U)(YHI8TFTG6m}U8!CuiK^Iy5Kv4qlq;e7RuJWJ zs?hTQGfh37morO74i$vJ9bN}(EX|c&<9JrGqG9d2QoT?TRk2qHLqk2uD()Hetsn}$ z3w!aan^I7HBydBQg^%zAViopa(a=qJ5@&o3ghR$gB%80w1-y}C z2?S;>SQSlW<-Dv2Leq!xk?b`AU*T)-zV5lM)Cu`;3S$R63?+L7DIWl)@O2Yl*9eCO zA^jx?;I^)GK0M_B4Susw{05kS59+H1vhKOA)Y(wtRj~sRhS&>b7=R`269R@VAf`FX z{YyO8i5(b*UP2r)7x1QFq)}@J$_k*w1%chrmCnnG zKn~F0r*MO20_%giSE(z!J*_=%?7%E!3BEG{c(-+>T05vdUhYa_H*}@*;VBbn@Kd-! zGl4p&%CNlhVE7Avkd;|fMqv%ZCw5>K@<{m31mLM*M_1M}fT=!SUQ65%*nicEj7%t2 zxIr@k%qp^#p&)n<9YfrNO)8Et3*q1(MJJYKJK&FmQ9Wuo%{41bMDq)<*< z=jrLp#cQ+h5~O?F*T~Hg0l<{ z$#bff2UfU2GlAJ#R6ZCF9ivwhHmT;2o`OS|AUj-6k<`D}eOPHQ(h$g*DepVPs-pRq zeBl|rXdC1XhZDf87Wq(m=ooHI*rbNXs3aW11e#dO8nOgmrfB-K%<-mDcqz zJyW~zjFsO^od9N4NivaY!X^bP&pM9O>=?nrAxtRfmxLwwx~w{bd2|2szf3|f3*GaR zc-VqR8m2ZG6TqyT;pp^@l!w4W8Tre~D6AoyRvt{hODKef<)M_PvP1tF8E&5mhb?rx zVRn-~0nEz72H&gH!J5ZCTqIqACi>ExAx+e75gfK&5zKn=V6*JzeFB)3hYh}0se|>8 zd$=~ka+3I7TV|c@u=`9PhaniAd8pi^p7Jhm_6b%VceXa->t&fbdzh+Mi*-;9>}u?i;Whqyy*7avU|65y}MrF)Z_N+q^!)p9H@nZ zvt3SI`K4zJ&NOI0qJY*=2=~ZP2YB=<%vS56j9Ea>N!)sT5%)5N|sfHW1Lb}E= z4%~!IYVoFU2$RLapDTO8D_?#r-wn=9-|%#0p9-aij$smE*bYOKT&Nma{S@*AuYCDw zd^dyz+;&J(5UD0?Qr@e z>PHJ+@XD9pD>jN@kTeexp?=XFyfYClrd;NjO`Umq{DN1${HAr;X44C0gnocXMc61k zHN$Xg3};n8nt#D7Uw*H;8?)(!GD1HohEZ~%YUcLcy#K#J$EW)KtSg_o z+Lw!myRkxY$ol%hYWYxxlB#r{A*R(Z)sVhRj+>Itq`XCg7h7Dr@}l{Z$<{aOUZuu< z>T#Q0@|4U!58QSUA2vO8)rJVi;ugwODs@Eb=Aw;m& z{>sCWmnAW)#k=3D)FGS4JzN{qQbUvBmjbn00p7Rj)f6(|UQn}Oc+O#JlQDtWghPff zlpM0Yt`8+^sdQQOjO;KR`cUb++SE1ZDs1pX&s|QQv0$Pb_fSM8vTZ5GBP%vzLc;@DWua=rkxXz&} zE5oW8k8GqOtW7I}l3JyO0Z>-J`@R*A{voMG$jVLR3`j{Zbaul-0ezw!s)mIj+aV?} z9MpG^oOU=zxbh+>sa3vLo+S=OA%OpMLb>(lkxT$?wZvP@1ac5?A38X*@oWOK30M74 z30dVULs{i3Q~L&klBm)S5Ja|y!Bl@YjI4()8@6_FgK?f}<$4J4b7te&1crlJCutk{ z2)%WrB6Q^pqa>&h_M;ZL7HJZ|h2LI|2WMtN025S~>7CN%7;)+=2?Tn*Lt&`rt> ze%u7&aqAjrPk6N&R>p^bYv#$Yg zD5(#UDC*&OKM0KoH05RavGVtHg4 zR_BmWFx#sTD^%+W;xIaZYQcDwcn2~8sC@Nw%@bo?T=RLT%j$SK6&PXyeZ@;jpv8b- z_M>K&1y4aZ_o4a@0eiuL0GjCTRl`Q^;DYe+)YId*yGHal7jI686wawHK|Q%I#wT$# z@0q@xuGY(DEm+R1-(9v&&P<+?*90E(b~>H_&Z);DU}|>$eqk1~GxI}!(Z9-i=eV*D zBvQT4^JRH`4dh`jSkI|5Gu5BGF3cj++pc668@cSzwq9BD(O3>mo>HJWJpS$KBl65M zK5pa-vxvjtGvU{ET)gsU4!mpcn!u^Y{o1{{aOL3vF8J`)`}>p=xUdhyy#jf`>aLQf qe9C>PyVhy<-4oao*b~?jc-RT-e>v_6Jktao_HVR(uswkb6Zjt*=dK_C literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleG/Bitmaps/silk_inv-1bit.bmp b/handera-sdk-105/examples/ExampleG/Bitmaps/silk_inv-1bit.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9aa8151d646359e9afeff76e8d2c53e7c08c0597 GIT binary patch literal 57654 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 a1)dAo1)hH&p9@^+0?%LS=K@!{z<&WaZJe_J literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleG/Bitmaps/silk_inv-2bit.bmp b/handera-sdk-105/examples/ExampleG/Bitmaps/silk_inv-2bit.bmp new file mode 100644 index 0000000000000000000000000000000000000000..458eabe91e514bc3362be527964042d6b63d53e1 GIT binary patch literal 57654 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleG/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleG/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..ebb9e5024bd74936307e77a8994af5ae78b21f5b GIT binary patch literal 36594 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleG/Rsc/Starter.rsrc b/handera-sdk-105/examples/ExampleG/Rsc/Starter.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleG/Src/starter.c b/handera-sdk-105/examples/ExampleG/Src/starter.c new file mode 100644 index 0000000..8ec24ba --- /dev/null +++ b/handera-sdk-105/examples/ExampleG/Src/starter.c @@ -0,0 +1,743 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : ExampleG + * + *****************************************************************************/ + +#include +#include "StarterRsc.h" + +#include "Silk.h" + +/*********************************************************************** + * + * Entry Points + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +Boolean silkPresent; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_G' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +#define NUM_NEW_BUTTONS 11 + +#define KEYPAD_TOPX 141 +#define KEYPAD_TOPY 21 +#define BUTTON_WIDTH 14 +#define BUTTON_HEIGHT 14 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + +/*********************************************************************** + * + * FUNCTION: SetNewButtons + * + * DESCRIPTION: Sets up the numeric keypad structure. + * + * PARAMETERS: + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void SetNewButtons(PenBtnListType *buttonList) +{ + UInt16 index, i; + + index = buttonList->numButtons; + +/*------------------------------------------------------------------------ + * Look for the numeric keyboard button. Simply set the width to 0 for this + * example. A complete app would competely remove it. + *----------------------------------------------------------------------*/ + for (i = 0;i < index; i++) + { + if (buttonList->buttons[i].asciiCode == vchrKeyboardNumeric) + { + buttonList->buttons[i].boundsR.extent.x = 1; + buttonList->buttons[i].boundsR.extent.y = 1; + } + } + +/*------------------------------------------------------------------------ + * '1' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+0].boundsR.topLeft.x = KEYPAD_TOPX ; + buttonList->buttons[index+0].boundsR.topLeft.y = KEYPAD_TOPY; + buttonList->buttons[index+0].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+0].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+0].asciiCode = '1'; + buttonList->buttons[index+0].keyCode = 0; + buttonList->buttons[index+0].modifiers = 0; + +/*------------------------------------------------------------------------ + * '2' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+1].boundsR.topLeft.x = KEYPAD_TOPX + BUTTON_WIDTH; + buttonList->buttons[index+1].boundsR.topLeft.y = KEYPAD_TOPY; + buttonList->buttons[index+1].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+1].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+1].asciiCode = '2'; + buttonList->buttons[index+1].keyCode = 0; + buttonList->buttons[index+1].modifiers = 0; + +/*------------------------------------------------------------------------ + * '3' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+2].boundsR.topLeft.x = KEYPAD_TOPX + (BUTTON_WIDTH*2); + buttonList->buttons[index+2].boundsR.topLeft.y = KEYPAD_TOPY; + buttonList->buttons[index+2].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+2].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+2].asciiCode = '3'; + buttonList->buttons[index+2].keyCode = 0; + buttonList->buttons[index+2].modifiers = 0; + +/*------------------------------------------------------------------------ + * '4' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+3].boundsR.topLeft.x = KEYPAD_TOPX; + buttonList->buttons[index+3].boundsR.topLeft.y = KEYPAD_TOPY + BUTTON_HEIGHT; + buttonList->buttons[index+3].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+3].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+3].asciiCode = '4'; + buttonList->buttons[index+3].keyCode = 0; + buttonList->buttons[index+3].modifiers = 0; + +/*------------------------------------------------------------------------ + * '5' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+4].boundsR.topLeft.x = KEYPAD_TOPX + BUTTON_WIDTH; + buttonList->buttons[index+4].boundsR.topLeft.y = KEYPAD_TOPY + BUTTON_HEIGHT; + buttonList->buttons[index+4].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+4].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+4].asciiCode = '5'; + buttonList->buttons[index+4].keyCode = 0; + buttonList->buttons[index+4].modifiers = 0; + +/*------------------------------------------------------------------------ + * '6' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+5].boundsR.topLeft.x = KEYPAD_TOPX + (BUTTON_WIDTH*2); + buttonList->buttons[index+5].boundsR.topLeft.y = KEYPAD_TOPY + BUTTON_HEIGHT; + buttonList->buttons[index+5].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+5].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+5].asciiCode = '6'; + buttonList->buttons[index+5].keyCode = 0; + buttonList->buttons[index+5].modifiers = 0; + +/*------------------------------------------------------------------------ + * '7' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+6].boundsR.topLeft.x = KEYPAD_TOPX; + buttonList->buttons[index+6].boundsR.topLeft.y = KEYPAD_TOPY + (BUTTON_HEIGHT*2); + buttonList->buttons[index+6].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+6].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+6].asciiCode = '7'; + buttonList->buttons[index+6].keyCode = 0; + buttonList->buttons[index+6].modifiers = 0; + +/*------------------------------------------------------------------------ + * '8' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+7].boundsR.topLeft.x = KEYPAD_TOPX + BUTTON_WIDTH; + buttonList->buttons[index+7].boundsR.topLeft.y = KEYPAD_TOPY + (BUTTON_HEIGHT*2); + buttonList->buttons[index+7].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+7].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+7].asciiCode = '8'; + buttonList->buttons[index+7].keyCode = 0; + buttonList->buttons[index+7].modifiers = 0; + +/*------------------------------------------------------------------------ + * '9' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+8].boundsR.topLeft.x = KEYPAD_TOPX + (BUTTON_WIDTH*2); + buttonList->buttons[index+8].boundsR.topLeft.y = KEYPAD_TOPY + (BUTTON_HEIGHT*2); + buttonList->buttons[index+8].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+8].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+8].asciiCode = '9'; + buttonList->buttons[index+8].keyCode = 0; + buttonList->buttons[index+8].modifiers = 0; + +/*------------------------------------------------------------------------ + * '0' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+9].boundsR.topLeft.x = KEYPAD_TOPX; + buttonList->buttons[index+9].boundsR.topLeft.y = KEYPAD_TOPY + (BUTTON_HEIGHT*3); + buttonList->buttons[index+9].boundsR.extent.x = BUTTON_WIDTH * 2; + buttonList->buttons[index+9].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+9].asciiCode = '0'; + buttonList->buttons[index+9].keyCode = 0; + buttonList->buttons[index+9].modifiers = 0; + +/*------------------------------------------------------------------------ + * '.' + *----------------------------------------------------------------------*/ + buttonList->buttons[index+10].boundsR.topLeft.x = KEYPAD_TOPX + (BUTTON_WIDTH*2); + buttonList->buttons[index+10].boundsR.topLeft.y = KEYPAD_TOPY + (BUTTON_HEIGHT*3); + buttonList->buttons[index+10].boundsR.extent.x = BUTTON_WIDTH; + buttonList->buttons[index+10].boundsR.extent.y = BUTTON_HEIGHT; + buttonList->buttons[index+10].asciiCode = '.'; + buttonList->buttons[index+10].keyCode = 0; + buttonList->buttons[index+10].modifiers = 0; + + buttonList->numButtons += NUM_NEW_BUTTONS; + +} + +/*********************************************************************** + * + * FUNCTION: SetTemplate + * + * DESCRIPTION: This routine changes the template to our template + * + * PARAMETERS: + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void SetTemplate(void) +{ + MemHandle normalH, invertedH; + BitmapPtr normal, inverted; + RectangleType alpha, numeric; + UInt16 numNewButtons; + PenBtnListType *currentPtr, *newPtr; + UInt16 currentSize, newSize; + +/*------------------------------------------------------------------------ + * First draw the new silscreen template + *----------------------------------------------------------------------*/ + normalH = DmGetResource(bitmapRsc, NormalSilkBitmapFamily); + ErrFatalDisplayIf(!normalH, "Missing normal bitmap"); + normal = MemHandleLock(normalH); + + invertedH = DmGetResource(bitmapRsc, InvertedSilkBitmapFamily); + ErrFatalDisplayIf(!invertedH, "Missing inverted bitmap"); + inverted = MemHandleLock(invertedH); + + SilkSetTemplateBitmaps(normal, inverted, NULL, NULL); + SilkMaximizeWindow(); + + MemPtrUnlock(normal); + DmReleaseResource(normalH); + MemPtrUnlock(inverted); + DmReleaseResource(invertedH); + +/*------------------------------------------------------------------------ + * The numeric graffiti area can not be removed, so make its width 1, which + * will effectively remove it. + *----------------------------------------------------------------------*/ + SilkGetAreas(&alpha, &numeric); + numeric.extent.x = 1; + SilkSetAreas(&alpha, &numeric); + +/*------------------------------------------------------------------------ + * First get the number of silk buttons so we know how much to allocate, + * with our additional buttons. + *----------------------------------------------------------------------*/ + currentSize = SilkGetButtonListSize(true); + + if ((currentPtr = MemPtrNew(currentSize)) == NULL) + { + ErrFatalDisplay("Allcoate Errror"); + return; + } + + SilkGetButtonList(currentPtr, true); + +/*------------------------------------------------------------------------ + * Allocate space for new button list. + *----------------------------------------------------------------------*/ + numNewButtons = currentPtr->numButtons + NUM_NEW_BUTTONS; + newSize = sizeof(PenBtnListType) + (sizeof(PenBtnInfoType) * (numNewButtons - 1)); + + if ((newPtr = MemPtrNew(newSize)) == NULL) + { + MemPtrFree(currentPtr); + ErrFatalDisplay("Allcoate Errror"); + return; + } + + MemMove(newPtr, currentPtr, currentSize); + + SetNewButtons(newPtr); + SilkSetButtonList(newPtr, true); + +/*------------------------------------------------------------------------ + * Since the button list is copied by the system, we can free our copy. + *----------------------------------------------------------------------*/ + MemPtrFree(currentPtr); + MemPtrFree(newPtr); + +} + +/*********************************************************************** + * + * FUNCTION: ResetTemplate + * + * DESCRIPTION: This routine restores the defaul template, areas and + * silk buttons. + * + * PARAMETERS: + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void ResetTemplate(void) +{ + SilkRestoreDefaultTemplates(); + SilkMaximizeWindow(); +} + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormInit(FormPtr /*frmP*/) +{ +} + + +/*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + FormPtr frmP; + + switch (command) + { + case MainOptionsAboutExampleG : + MenuEraseStatus(0); // Clear the menu status from the display. + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + handled = true; + break; + + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case ctlSelectEvent : + switch(eventP->data.ctlSelect.controlID) + { + case MainSetTemplateButton : + if (!silkPresent) + FrmAlert(SilkExtNotFoundAlert); + else + SetTemplate(); + break; + + case MainResetTemplateButton : + if (!silkPresent) + FrmAlert(SilkExtNotFoundAlert); + else + ResetTemplate(); + break; + } + break; + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit( frmP); + FrmDrawForm ( frmP); + handled = true; + break; + + default: + break; + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + +/*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + + if (_TRGSilkFeaturePresent(&version)) + silkPresent = true; + else + silkPresent = false; + + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + +/*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + error = AppStart(); + if (error) + return error; + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleG/StarterRsc.h b/handera-sdk-105/examples/ExampleG/StarterRsc.h new file mode 100644 index 0000000..262afc0 --- /dev/null +++ b/handera-sdk-105/examples/ExampleG/StarterRsc.h @@ -0,0 +1,81 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 4:38:50 PM on Saturday, March 24, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleG\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleG" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainSetTemplateButton 1001 //(Left Origin = 50, Top Origin = 75, Width = 60, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define MainResetTemplateButton 1002 //(Left Origin = 40, Top Origin = 110, Width = 80, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define SilkExtNotFoundAlert 1000 +#define SilkExtNotFoundOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsAboutExampleG 1000 + +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define Silk1Bitmap 1600 +// Resource: PICT 1700 +#define Silk2Bitmap 1700 +// Resource: PICT 1800 +#define Silk3Bitmap 1800 +// Resource: PICT 1900 +#define Silk4Bitmap 1900 +// Resource: PICT 2000 +#define VGABigIconInvertedBitmap 2000 +// Resource: tbmf 3000 +#define InvertedSilkBitmapFamily 3000 + +// Resource: tbmf 3100 +#define NormalSilkBitmapFamily 3100 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 + +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 diff --git a/handera-sdk-105/examples/ExampleH/ExampleH.mcp b/handera-sdk-105/examples/ExampleH/ExampleH.mcp new file mode 100644 index 0000000000000000000000000000000000000000..4b9cf00c0c317225a3fda8c67895dd799b7912a1 GIT binary patch literal 50607 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

HV=1Hb<>oXf=>CHAY@w%@bB+zDdR zKx^Y|z}&TAa@Dp|x`Eq)_xCRT9M0qF0zRN>+l_w#=I_@JJmHN$!5*$J0v}Yh?G^0m z;rcePf7N$x#;y*oJAe-cgIxC^nIfTZ{SPE}z5uyiLNZlC;d%>ln#TWxJXB#fcZ`^> zG5R2Pz<_YiM>0d}7eTUbAoqz#xO)W1OT7@jF}p<&D@0pe(afcC*hdXE-E1~dkM}p%t?uMlQK%O&@R1*PTf}}=5;kgNNfyQ@2)@u9^ zWSz#ph1AoDXB%*X*2CY%u8^KjfE$(G%f8U=ATM_&SuCOOa!f7JnD%2lfxPTTlZ3*{ zvd3%8zBFsR0a9z_09wf&t zD60esV+EAOSUX8Vkwu$vHxp16>sTeB$O=K8qVW}wt2JhOPSyBf$Tb=>HUb*I3fZCY zA0ayx_EB_cJQ|Yo2*}5nUn`;T9Rj&dW5(cmjpmA zL;H>eLhPy$7l2uqJKTJ)fZN~AEt~Cc8|>qoT*eLZzGInvyQj9esK&jQTzTx+n2h@A9b2D8_(*k^V!$y4mmZ6bZVApTDi%UP==^N<}R7Pfn%+b5r0#X0tM}D2V zx;3Bu`E&O9o5IiD=9x3@J{G`UwmtQmPHmK5svGs~IA z-REaHJV)IlehlswIYsL0Ky;JctnH7zar_ZX&whYi-?2yD8fe^)TXz380v zmpg^~zKNo^_$H`da`E%nC$ALSZkuS^L<*Vsxz|+WZxP!U_ls@!Uqg+oC&g8|$=DVv zp_Pq#4%ff0V$JcCem%(>lzu&Z@r|%(hEY$_iqftpxT#Mh@fWuoGj{z_&9wUK3I6s+ z`Ah%O$I=xWOx2zuqn@O_!WeAFZd3B_pCop?jGsRIDUl?Uem&S8C<&$N*AR|X?de>f zEE3bMNB^=ZQIk*)JeDX|>1BHc#QJ386xPKazB zML2eND}Yq>q`3k}P|c9po-|hgsp?6w0!U&ynPu8}Ah<5+$}dg7r#fG%e70u~UjZCF zU;l!5NUx0~eajqOW$tOCl!PWM&s3+!l^P{RK*@{=L z<%3Z&>s0mf|8YCp4@sh zNg>NKi3BZD2bYCA^!^UcmEjdoWAEsM_2f1sdMu>t%xP+>ZFH`Gc-pig9)BT=yW=OT zS=G~%{H_!A^x&^)M*rfYy~ZJYl=XDs?{tokR6Qg6w!^$uB#rmf4K?dYHF8qec?hSH z{fZYY(+HPujsA@oJI2XlNf&!=jSSx<_&H|1kaqdmOO86oZQ z_a_OSiw*n!Btbni@6NbCk@bx5G42{vqOQ2|@6@u&c*@@0o^A5vX z(|INz@8)<-sxO_z#N912GT%DKd(qIW0g%@meCwQycKX^U;deg6T>GS~C(X4_%6gJ7 zHOy;r>Uxq^ly*Iz_1Y&vzlOc`Nl?#_5r^rneNxr46J}mHE>hekqZ#~`Hz{Sl<&}S$ zErG{&zi)Z5;qSBjnkF<5iHV{@Jf+U3KIUzxNzi+#kNLG_?vV(LQt0*0twxwELH#+p ze!2Uu&RBCkHc`{{TlEK`ez&gQs&|#*z&!pH5Haar7Xa(`zFp^9SV{RQbnz!1@##Y9Ycn>z{TQVad_NObuJX8?02Uy#R-2z$)G*PkRQq6bw4li$urUj~4?oCP0TWE_A&8 zX)^F()I$FaBszXx;;zw$Qw#m;NOZjYh<#)qK-1|TUH;A&fM-$*J$F~u@iw#+xQtrp zuSTNcZSs`A0?(or`Ws;`9dFNYtj(5cQF=4ox9}6-HZW*v2uX+3 zd*0`qu#8&hX+PC3_geVK*i}340$^ol*M*k?Gu}b7XpbjkJ?;wHas#ypHTcanQR-dS zvkdxAy5>nFx2f{w=K<36V-nAs;>c`PAxVl$NV6!R`t8@2JWX;h&62UVx@2A+)TTI z+P{xPx2K1G*YCfz-vF%I<9c>1FxvrI{cR+=J%45WpQjf32a)LZ$X(UxW6gErCFI9(3Z8G)V zBROw$XgznDSMlcgA^Q|j`n;Kt%0Ax0Yk=u{(6lNfI-dJ}1N>!bvBCXENS=`W_1s7w zZKPI+t2Uc)=y~rKP@EyvV#NcHDh|Dub1vDW^t0H06^CB`?|{!#`rO|`=Hjp2cdO4v zn#*}IN1oTUnrj2j>7WqCns24jFM1n_KS;HREXVbwNa;sot`l37{>&iCD?7O4JpYQ) zUyHb#wn~-nwX_Y2H>6tR zz6+_YJFbb0^Eb8rPmn4eT$4Tq-m3I@Y=g4D%X=5_Hmx5IsoF389szz!=`Xwy?R-(S zr{I`k!XV;3Wrkt-A`={v)x(6D)ioe*VIE)@}2J(U@%x>LR7vqe)$iKxkN2JT?Fmsbr9PxA5z> zkO#j5bU?}Tk40LDpH9)VkcdV@TCWJTg|x7IZWV3O9_a7WdTAN0$E;2xIk?F-^ho;_ zeN)CrSaDPDWD9p_VQQign0Bc)2G_D8plzjf^fIj?e_>@Rb4nH}P0<^@F z_fsB4N(xfgaC-N`OVttwAe+o;MeGb9<|6rEB>!fYmFPmo_OU{_mhEwoEi1F+eH2wW zdh>S$E%ymnwhO^*llZOP#*a%C)z0&_wNfJoQ0Z-X>}1v>#f;su(6@DM$TpwPsz)C$ zRS;#K0retQs&c(p7Apbl8vDuduiV1|qbesP+R|nR&(5bf=);hHE{6!hoMI5 z%e}&5U9T{9%R;^4+K?^SanNh1I1Dpfox?DL12Gr#;ov!iAo8BVF6rciN=3${Mgi|> zFs&(S&K5Px6s0y8+~MT;zVtwFL{Su0|9?ZqB|o0e-{QKH*7~{LuD-jT|H0_T495@&t&vWVh2Eg~C3>J_oMJ*r-H?twb>5@}SA zJl<&B*JIt{w2& z6Ry_~-8eI-h1KMeaKavpA!?rA0bX{1|N-Rwuf_4`AH$KEAJk zIh%N7T7(?w%{#?%+(;|X3^8`be8*S|$?@k)@=AVZg2x-U}FlRl@M|4YO@I948}+~P@m&vZk64mgO|$9`3QiZRcF5B#W1L&x@? z17=7_dc)v9Bk@_X!EiBSoYQe=S2OmW;eCdL@o9PoWB!!*6ny~vJ!A0y1a@AN_yT~QbP{ua0O!>>P~QOGq}-xr93uF`y9D?g_`rsDyJP1k;OmsDYg2RdEBt&H;D3&yPMic#}T@f`iqESAZ)K<&#^ls5O3sglC zMm*j%kV<;nV#C~4Z`<7JKtEtnUtf}UB@uGM9GpiqYf71^x$7_sw@NA+Q>=)L#D>H_ DshR + +Boolean MainFormHandleEvent (EventPtr eventP); + +#endif + + diff --git a/handera-sdk-105/examples/ExampleH/Src/mainform.c b/handera-sdk-105/examples/ExampleH/Src/mainform.c new file mode 100644 index 0000000..8984be3 --- /dev/null +++ b/handera-sdk-105/examples/ExampleH/Src/mainform.c @@ -0,0 +1,707 @@ +/****************************************************************************** + * + * File: MainForm.c + * + * Project : Example H + * + *****************************************************************************/ + +#include +#include +#include "StarterRsc.h" + +#include "Vga.h" +#include "Audio.h" +#include "MainForm.h" + +/*********************************************************************** + * + * Local Types + * + ***********************************************************************/ + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ +extern Boolean vgaPresent; + +/*********************************************************************** + * + * Local Constants + * + ***********************************************************************/ +#define maxTableItems 13 +#define tblNameCol 0x00 + +/*********************************************************************** + * + * Local Functions + * + ***********************************************************************/ +static void *GetObjectPtr (UInt16 objectID); +static void PrvMoveObject (FormPtr frmP, UInt16 objIndex, Coord y_diff, Boolean draw); +static void PrvResizeObject (FormPtr frmP, UInt16 objIndex, Coord y_diff, Boolean draw); +static void TableDrawItem (void * tableP, Int16 row, Int16 column, RectanglePtr bounds); +static void MainFormScrollLines(Int16 lines, Boolean force_redraw); + + +/*********************************************************************** + * + * Local Variables + * + ***********************************************************************/ +static FontID currentFont; +static Int16 numTableItems; +static Int16 currentSelection; + + /*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + +/*********************************************************************** + * + * FUNCTION: PrvFrmGetGSI + * + * DESCRIPTION: FrmGetObjectIndex() does not work for the graffiti shift + * indicator. Therefore, we must do it ourselves. + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static UInt16 PrvFrmGetGSI(FormPtr frmP) +{ + UInt16 i, numObjects; + + numObjects = FrmGetNumberOfObjects(frmP); + + for (i=0; i 0) + currentSelection --; + else + { + if (valueP > minP) + MainFormScrollLines(-1, true); + } + } + + TblSelectItem(GetObjectPtr(MainAppTable), currentSelection, 0); +} + +/*********************************************************************** + * FUNCTION: HandleNextKey + * DESCRIPTION: + * PARAMETERS: + * RETURNED: + ***********************************************************************/ +static void HandleNextKey(void) +{ + ScrollBarPtr barP; + Int16 valueP, minP, maxP, pageSizeP; + + barP = GetObjectPtr(MainAppScrollBar); + SclGetScrollBar(barP, &valueP, &minP, &maxP, &pageSizeP); + + if (currentSelection == -1) + currentSelection = 0; + else + { + if (currentSelection < pageSizeP - 1) + currentSelection ++; + else + { + if (valueP < maxP) + MainFormScrollLines(1, true); + } + } + + TblSelectItem(GetObjectPtr(MainAppTable), currentSelection, 0); +} + + + /*********************************************************************** + * FUNCTION: TableDrawItem + * DESCRIPTION: + * PARAMETERS: + * RETURNED: + ***********************************************************************/ +static void TableDrawItem(void * tableP, Int16 row, Int16 column, RectanglePtr bounds) +{ + FontID saveID; + Int16 valueP, minP, maxP, pageSizeP; + ScrollBarPtr barP; + Char buf[20]; + + WinEraseRectangle(bounds, 0); + + barP = GetObjectPtr(MainAppScrollBar); + SclGetScrollBar(barP, &valueP, &minP, &maxP, &pageSizeP); + row += valueP; + + if(row < numTableItems) + { + StrPrintF(buf, "Line %d", row + 1); + + saveID = FntSetFont(currentFont); + WinDrawTruncChars(buf, StrLen(buf), bounds->topLeft.x, bounds->topLeft.y, TblGetColumnWidth((TablePtr) tableP, column)); + FntSetFont(saveID); + } +} + + + + /*********************************************************************** + * FUNCTION: TableLoad + * DESCRIPTION: + * PARAMETERS: + * RETURNED: + ***********************************************************************/ +static void TableLoad(Int16 listOffset) +{ + ScrollBarPtr barP; + Int16 listItems = 0; + RectangleType rect; + Int16 running_total, row_height; + Int16 tblRows, row, visibleRows; + TablePtr tableP; + + tableP = GetObjectPtr(MainAppTable); + tblRows = TblGetNumberOfRows(tableP); + + TblSetColumnUsable (tableP, tblNameCol, true); + + FntSetFont(currentFont); + row_height = FntLineHeight(); + TblGetBounds(tableP, &rect); + running_total = 0; + visibleRows = 0; + + for(row=0; row< tblRows; row++) + { + TblSetRowHeight(tableP, row, row_height); + + running_total += row_height; + + if(row < numTableItems) + TblSetRowUsable(tableP, row, running_total < rect.extent.y); + else + TblSetRowUsable(tableP, row, false); + + if (running_total < rect.extent.y) + visibleRows++; + + TblMarkRowInvalid(tableP, row); + } + + barP = GetObjectPtr(MainAppScrollBar); + if(numTableItems > visibleRows) + SclSetScrollBar(barP, listOffset, 0, numTableItems - visibleRows, visibleRows); + else + SclSetScrollBar(barP, 0, 0, 0, numTableItems); + +} + + /*********************************************************************** + * FUNCTION: TableInit + * DESCRIPTION: + * PARAMETERS: + * RETURNED: + ***********************************************************************/ +static void TableInit(void) +{ + ScrollBarPtr barP; + Int16 tblRows, row, row_height; + TablePtr tableP; + + currentSelection = -1; + + tableP = GetObjectPtr(MainAppTable); + tblRows = TblGetNumberOfRows(tableP); + + FntSetFont(currentFont); + + row_height = FntLineHeight(); + + for(row=0; row< tblRows; row++) + { + TblSetItemStyle(tableP, row, tblNameCol, customTableItem); + TblSetRowHeight(tableP, row, row_height); + } + +/*------------------------------------------------------------------------ + * Set the callback routine that draws the Name column. + *----------------------------------------------------------------------*/ + TblSetCustomDrawProcedure (tableP, tblNameCol, TableDrawItem); + + barP = GetObjectPtr(MainAppScrollBar); + SclSetScrollBar(barP, 0, 0, 0, 0); + +} + + /*********************************************************************** + * FUNCTION: + * DESCRIPTION: + * PARAMETERS: + * RETURNED: + * REVISION HISTORY: + ***********************************************************************/ +static void MainFormScroll(Int16 newValue, Int16 oldValue, Boolean force_redraw) +{ + TablePtr tableP; + + tableP = GetObjectPtr(MainAppTable); + + TblUnhighlightSelection(tableP); + + if(oldValue != newValue) + { + TableLoad(newValue); + + if(force_redraw) + TblDrawTable(tableP); + } + +} + +/*********************************************************************** + * FUNCTION: + * DESCRIPTION: + * PARAMETERS: + * RETURNED: + * REVISION HISTORY: + ***********************************************************************/ +static void MainFormScrollLines(Int16 lines, Boolean force_redraw) +{ + ScrollBarPtr barP; + Int16 valueP, minP, maxP, pageSizeP; + Int16 newValue; + + barP = GetObjectPtr(MainAppScrollBar); + SclGetScrollBar(barP, &valueP, &minP, &maxP, &pageSizeP); + + TblUnhighlightSelection(GetObjectPtr(MainAppTable)); + + //scroll up + if(lines < 0) + { + //we are at the start + if(valueP == minP) + return; + + newValue = valueP + lines; + if(newValue < minP) + newValue = minP; + } + else + { + if(valueP == maxP) + return; + + newValue = valueP + lines; + if(newValue > maxP) + newValue = maxP; + } + + SclSetScrollBar(barP, newValue, minP, maxP, pageSizeP); + MainFormScroll(newValue, valueP, force_redraw); + +} + + + /*********************************************************************** + * + * FUNCTION: MainFormResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void MainFormResize(FormPtr frmP, Boolean draw) +{ + Int16 valueP, minP, maxP, pageSizeP; + ScrollBarPtr barP; + UInt16 objIdx; + Coord x, y; + Coord y_diff; + RectangleType r, erase_rect; + +/*------------------------------------------------------------------------ + * Get the new extent + *----------------------------------------------------------------------*/ + WinGetDisplayExtent(&x, &y); + +/*------------------------------------------------------------------------ + * Get the old extent + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &r); + +/*------------------------------------------------------------------------ + * Calculate change + *----------------------------------------------------------------------*/ + y_diff = y - (r.topLeft.y + r.extent.y); + +/*------------------------------------------------------------------------ + * If the silkscreen was maximized, erase the area under maxmized silkscreen + *----------------------------------------------------------------------*/ + if (draw && (y_diff < 0)) + { + erase_rect = r; + erase_rect.topLeft.y = r.extent.y + y_diff; + erase_rect.extent.y = -y_diff; + WinEraseRectangle(&erase_rect, 0); + } + +/*------------------------------------------------------------------------ + * Resize the form + *----------------------------------------------------------------------*/ + r.extent.y += y_diff; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + +/*------------------------------------------------------------------------ + * Move Bottom Controls Button + *----------------------------------------------------------------------*/ + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, MainHelpButton), y_diff, draw); + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, MainTextField), y_diff, draw); + +/*------------------------------------------------------------------------ + * Move the GSI (graffiti shift indicator) + * Need to set the GSI's location as well as it's location on the form + *----------------------------------------------------------------------*/ + objIdx = PrvFrmGetGSI(frmP); + PrvMoveObject (frmP, objIdx, y_diff, draw); + FrmGetObjectPosition(frmP, objIdx, &x, &y); + GsiSetLocation (x, y+y_diff); + +/*------------------------------------------------------------------------ + * Resize Scrollbar + *----------------------------------------------------------------------*/ + PrvResizeObject(frmP, FrmGetObjectIndex(frmP, MainAppScrollBar), y_diff, draw); + +/*------------------------------------------------------------------------ + * Resize the table + *----------------------------------------------------------------------*/ + PrvResizeObject(frmP, FrmGetObjectIndex(frmP, MainAppTable), y_diff, draw); + + if (draw) + { + barP = GetObjectPtr(MainAppScrollBar); + SclGetScrollBar(barP, &valueP, &minP, &maxP, &pageSizeP); + + TableLoad(valueP); + FrmDrawForm(frmP); + + currentSelection = -1; + } +} + + + /*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + TableInit(); + + numTableItems = maxTableItems; + currentFont = stdFont; + + if (vgaPresent) + { + currentFont = VgaBaseToVgaFont(currentFont); + VgaTableUseBaseFont((TablePtr)GetObjectPtr(MainAppTable), false); + VgaFormModify(frmP, vgaFormModify160To240); + MainFormResize(frmP, false); + } + + TableLoad(0); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FontID newFont; + FormPtr frmP; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + formID = (FrmGetFormId (FrmGetActiveForm ())); + + switch (command) + { + case MainOptionsAboutExampleH: + MenuEraseStatus(0); + if (vgaPresent) + { + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + } + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + if (vgaPresent) + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + + case MainOptionsFont : + TblUnhighlightSelection(GetObjectPtr(MainAppTable)); + currentSelection = -1; + newFont = FontSelect(currentFont); +/*------------------------------------------------------------------------ + * Note: There is a bug in the OS which causes large Table Fonts to not + * highlight properly when selected. The work around is to implement + * the selection yourself. For simplicity sake, this example + * does not do this. + *----------------------------------------------------------------------*/ + currentFont = newFont; + if (vgaPresent) + { + if (VgaIsVgaFont(currentFont)) + VgaTableUseBaseFont((TablePtr)GetObjectPtr(MainAppTable), false); + else + VgaTableUseBaseFont((TablePtr)GetObjectPtr(MainAppTable), true); + } + MainFormResize(FrmGetActiveForm(), true); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + ***********************************************************************/ +Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + ScrollBarPtr barP; + Int16 valueP, minP, maxP, pageSizeP; + + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case ctlSelectEvent : + switch(eventP->data.ctlSelect.controlID) + { + case MainHelpButton : + FrmHelp(HelpString); + handled = true; + break; + } + break; + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + case displayExtentChangedEvent : + MainFormResize(FrmGetActiveForm(), true); + break; + + case frmCloseEvent : + handled = true; + break; + + case sclRepeatEvent: + currentSelection = -1; + MainFormScroll(eventP->data.sclRepeat.newValue, eventP->data.sclRepeat.value, true); + break; + + case tblSelectEvent : + HandleSelectItem(eventP->data.tblSelect.row); + break; + + case keyDownEvent: + barP = GetObjectPtr(MainAppScrollBar); + SclGetScrollBar(barP, &valueP, &minP, &maxP, &pageSizeP); + + switch (eventP->data.keyDown.chr) + { + case vchrPageUp : + currentSelection = -1; + MainFormScrollLines(-pageSizeP, true); + handled = true; + break; + case vchrPageDown : + currentSelection = -1; + MainFormScrollLines(pageSizeP, true); + handled = true; + break; + case vchrPrevField : + HandlePrevKey(); + handled = true; + break; + case vchrNextField : + HandleNextKey(); + handled = true; + break; + case chrCarriageReturn : + if (currentSelection != -1) + HandleSelectItem(currentSelection); + handled = true; + break; + } + break; + + default: + break; + } + return(handled); +} + + diff --git a/handera-sdk-105/examples/ExampleH/Src/starter.c b/handera-sdk-105/examples/ExampleH/Src/starter.c new file mode 100644 index 0000000..f8561bd --- /dev/null +++ b/handera-sdk-105/examples/ExampleH/Src/starter.c @@ -0,0 +1,306 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : Example H + * + *****************************************************************************/ + +#include +#include +#include "StarterRsc.h" + +#include "Vga.h" +#include "MainForm.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ +typedef StarterAppInfoType* StarterAppInfoPtr; + +Boolean vgaPresent = false; + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_H' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + /*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Check to see if VGA extension present + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + vgaPresent = false; + + return(errNone); +} + + /*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + + if (vgaPresent) + VgaSetScreenMode(screenMode1To1, rotateModeNone); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + + /*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleH/StarterRsc.h b/handera-sdk-105/examples/ExampleH/StarterRsc.h new file mode 100644 index 0000000..fec216a --- /dev/null +++ b/handera-sdk-105/examples/ExampleH/StarterRsc.h @@ -0,0 +1,76 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 4:46:29 PM on Wednesday, April 04, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleH\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleH" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainTextField 1001 //(Left Origin = 70, Top Origin = 146, Width = 60, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) +#define MainShiftGraffitiShift 1002 //(Left Origin = 140, Top Origin = 146) +#define MainAppLabel 1003 //(Left Origin = 4, Top Origin = 18, Usable = 1, Font = Bold) +#define MainAppTable 1005 //(Left Origin = 8, Top Origin = 30, Width = 141, Height = 110, Editable = 1, Rows = 20) +#define MainAppScrollBar 1006 //(Left Origin = 152, Top Origin = 29, Width = 7, Height = 112, Usable = 1, Value = 0, Minimum Value = 0, Maximum Value = 0, Page Size = 0) +#define MainAppGadget 1007 //(Left Origin = 4, Top Origin = 108, Width = 1, Height = 1, Usable = 1) +#define MainHelpButton 1008 //(Left Origin = 1, Top Origin = 146, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 61, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define LineNumberAlert 1000 +#define LineNumberOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsFont 1000 +#define MainOptionsAboutExampleH 1001 + +// Resource: tSTR 1000 +#define HelpString 1000 // "This is the help message for ExampleH." + +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleI/Memo.mcp b/handera-sdk-105/examples/ExampleI/Memo.mcp new file mode 100644 index 0000000000000000000000000000000000000000..19bc1e6636c4c122cf15929d4118a88a566e0891 GIT binary patch literal 238325 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 aoZ6>ra^2+4X`zgVE4S^P+N;-pIQT#3R2}XB literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoDelete.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..3f4e574f20fa73eea6ab724654c9723011f52e16 GIT binary patch literal 1003 zcmZXS&rVZ86vn?o9SjzXArgs5MglR>i2q1PAV%6-N{cOpwjlmn+?Juew!OFB4yYU5 zxFYJ>pmB$5UqSaifIff^;LeTs&9p?K_hx2(bIzGLXJ$Si0-)y;5HW4;yDmCeT7KwM zBFFKkE|tvux6URwM*5>0sBu2ZhG-EBW;9>4g!}Ygv%ChE%tre<0`d#Xckz<^&GH?* zW#Y4z?_r-jZFvketmOg*7&Bry2TlHLIeTzG z{%Uy{ugSj*$8w7OdEsCTLlH#cb-k?`4b_%8)eHt2d+kb1`L|5yps~oV#Tam$|Imfg z=K3%!QaFYcOd`f@?2r6y<2ff5ah0AMM?CRzIaFq66YwGDX}PIFnQv(?@a1?stkk@n zdeHKebho$YYswWzwp+^Mn$RDYPgJ<6d|6et9IfPn=j(8{s$^MtP3iAeYHiJcbfAmR z{L1C^AgsE6ReHWup3hXB6q~MAo=uUdg-nuE?Ya(H-1jh-o-!3qh$KdE1%sU<@S6Uw z(8LXk3@&1h$3I%G@hqVSH}M{B_iAVo^CHcD(YVnk;znj7VMHe!BQ=rKPGUo(bfUB@ z7HyyDN{|cw>b0-;qn=99G>R_}U9rw~#cNmdH43^|Dlq1e-64VttslA8)I+iReFc=Ieup=(v7G WHDX0~hjOtGqlW)kCL4TpdHoNv8`NR| literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..b0f00d16e960277907c03d145d98520935ab7cf6 GIT binary patch literal 1269 zcmY*ZT})F+6h4&MiiEPrsxd~%psU6J^)Eri7`H9i5GY`1Q6H4-rT5T|wo`KNlm`5P zYIo~~h-wJ@M1Ow@roM{@ znqh(#oqQi1ekHpBU%*b-099qw4gG`e4l=-6b`!ReW$OYaY~XsiD}SP0QF6l~PZ7YV(k#jIz2D zQ|YEc4^4u4mWSO?OW0Hl#I$GNff!*{z~SCA+4g(J;%Ya4^iStNp!UmZv?+CRI2RWm85!twO;= z?1l_ullg;3|8+ONP1L93@ zfCC(!yLL_ zaYE`BTtYZU{5M=iw21FOPNN>FEjW!ZP5h^}&?deOXAvI|{{aQWr^NpNN8CCKPdvL#muFO1g5on{pJzPai~xnj2)n++-MWoBKa1O`W|q=<92j1>iQ)n*tF zo2ZLeL~9~8|c&GPGvlU-7lU1kmClx()F zDoz!56<7l^nu3hZicU$)BwK(t^x}v2^@(|LCp1?snrj!#75(H;AmzRuS|oz<|D7`C zRyNoGo_kKT=kG9`Tt@7xA^e8sb}hImGw)7JCCL zpGHS_7+{%?B3vPU16n$pG1vOemZ|%iq}QlpZxgqni1?6r19Xu;C;AWzVoc%Q9W2I8 z)V4@3hk?k99(J7WZ%N^|rYn)#Zc8Oirz6|StOhOFbX6D~+iylwH)B%8xt2`Y@<1c+ RHTNVPtEBRU8LJ3e^B?35$RYp$ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoList.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..75374783648dae7aecbb8e432eaca5ef78c11078 GIT binary patch literal 767 zcmY*X&uddb5dPM!&1+0G)If@qvIfCaBq@p#Q7}zn2;t>fo7d{0w5BzbNKC@Z6O9z< z$&-jbF3rUTJXjUH2|fBJ1o7mh7ojOhX>wH|o!talXPNoFot@d)on3$dV1LPwvVkC+ z#_QlBoS)VM8^+_r&f53V?1#87A#PB}#z!rceN@zQWjij!<=~azwUF?atX#pKuqtWu ztPNOYYk4MpE5-&X;i!~)lP?*^c#rYuE0NTJPMf8!+ndv#V^LEs)CbkhM3f zD(iy2J@(I75R13>;WFyUi*T>}76EyX)4YkAI+08E0#o_C1TWvC-n_#ZxLCJ0U}WiB zz;W3GNie{hyhS+5sXRtdMMb)moS^h7F*ilrBTV$%%6fQ*)<)n!g>{eklZw|+JM{7f zAXSNjH*C|?dDEVrHTf=CowsZ~ZSp-kVj8?{n-QIN>~vJ8_`{nGtNr>nQxC)FuKz#% z;MxPv_2-l}h9A&m8RAJB&w{!m_uTo|^75HQk}R zCRu}c@~{LE!IKLT6!Efp5ClOF9`+)ri}(lZ!He0wc~Q|r{8i12lfb5+>;2yASMRG{ zJ)#s5WuGL<;7eCq4X}=O+bv4dwKi88{5x4AC3@6sS%+$dnw4#m19HXUI-Lg%NBC*b zOBOfi1<+S4cIZ{m%LZqTs15R&!AlkC2h8=NSR|}1wG!t~O4cM-kw53~zF?(D4f^4{ z)g3c+u`ASwNjGa#B_(*gY)gTrzYlwJzUucbZ z_Cy#mbC^HSZh3r%Uy2& z8=e1GnYv?aE@m3(>zMn?HLisp#b}7b4q6c+q>r^Y`H_gwRB*JimkQ4tIDa}!nriT2 zV@!>My?V;!Ut^aUM-0pZovq)*^$c&nKCU-zydRwmrA35-Kz1sM)8iqh?i_985!2(T zCun*!9#$Kx#TFis(9~t^o7ppFGf7N(Cpm)I|8oIB!^g#cd{ssGJVH}uF z`^2!>I$;>mErZeb1(0uY>Zco!zm6ew8~AICq#u#WMc{X{j_H}yt(^M#J=ocX&PGms z@d2vxHst?UJ4f_Bm7L)= wza`=XV`X&e;#!kA%{HqyOT~KiTA8&gRhPBOZgaC$DnC}f?gboU<^e(c2fQe^3IG5A literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/deDE/Resource.Frk/MemoPrefer.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..d05497bc9f6de851e08dd2ef0f151abaeb81c9a6 GIT binary patch literal 1150 zcmZux-A+?M5S~J}BnSowQQ}XssUb0@5RE?xcq6qK#6oLZHSx;Ro@u+X-P4?IQ+gpFrYUIJ0e}sM~bE+1c5d*>7hKKnwszHvmTHAG-x`!Q+9p+&oMr`m8a!)v`t70E+($4Lnot1Jq z#7Z3v8>|yQ2p?f-aEw%9TfE^dH^xMl*%T3TDRylBSyuFDE{R>6EtbR{b1U`-49|)P z;xI$Lia}@@A&Aix!Wtf3{-zmM6XWFPWtmtN)Zf{kqQs=$6=#eSFwCK45(9hc) zi>)8Y7if$uDwN5AhotNr)-{@x-1dtSAIhO)BJ&xuwpbt^j<`e+tq#*5n0s%DeSIX3%5#lcPkrDUX#IF+hyq}NZQ zhMiA_E=GZil#50etd3lAv^ZEN~L)=l4blzYa zWdRlCQ4MqrWk-d+e2q4;oNx`x#FUSAk@=k6z(%mJstggMb(?lwL7Z)-#KEuB$UCyW z0>?1sUO7hn)bFF0uD`gis1nE~Yxw8c_^@cp14zfhU}8B~~~w7A3yu?^z{ z_njQUWx}^k-i2#~pA!cscf<~G+Q&}cgC)Z6iG!bcs?`k1Cr;mm=kyu4%koHWEAh}X n71UFFQJD|1%Jo>m))*J3EO*Bp=ID{b|BKT@hn8J8|Ksa7$~z#a literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoApp.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoDelete.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/MemoPrefer.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoApp.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..556c548704f3f81907a939405bae7b8d2f41afa4 GIT binary patch literal 14314 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 Kx*tg<*na`sR)R_Z literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1a488528f50366d73b3ccf3e32955dfaaeeede21 GIT binary patch literal 1637 zcmb_cJ&YSg6n^&lat8$4Cr%_10j2_qV+Dvlv3={DCI89mT%vT7*|BfLde+R&UJ{8S zP!NgYilazFbrKR11w}%MpyWD~j)np#j#Nhj6p_L=d$ybekqC*m+TCy7d-LAR`y(n4 zQRxhkhqu_m;=j^sL>Kp|N;Qh`7?PCY*&+pWm3(kgyn>449h<)R)$Lzer``J`S0*)L z5C$8C6AwTO%^TAN{$J2;9)cnjdM1*Z8^+@izp`tU;1j8>q)@R`vLu&k7W0(p#Nzvy z-n!G8N~oEeOvc9>7#B9QhO5` zfL6#WwM(5+7x;tMt4`<$0r_@0h?G#b^vZ@zx4DppE@NjSF_s&;l*6e4Y!EH=B9!5I>*)~;s}$LZL4!$%`!6`glFFxYjscIcT*^E?Lm zq9Z4XZ?9Rmcso>@aU-_X4jlGPGLorEG>@sz4I-MwU_Va7!up)$QoYif3ha^Tax-)B zKcFU2rJkh%xv?_d9VI%UI?<^bZY}b&*5gFDGv|q!8x!>X9R91_=le#Eq>)-Eo*q!2 z=w#?}q#_>qzE7J^chf}G&nR~@kYklvldKI5*XaZiG)!D+!SH<@%R|5Y(mVdx^M&2Rj2hpBemfG|xexEsv9`JGGAInE~PJ@3A z6Y5U+=+=6v<4Tpj0Dld=@g8(OEFayz4?7=0=N#}~h|s6tzkyR%!T%ii9q8YO&2NCu z0^jiN6)MpG5_khTcfm)9Kn404{7)S84&C%A=4XS>@4)+xU#Z2@ZGJ_fs#%DxE4Pt# zwx#4%){#0Zqdgy5t}dj#sYQ9GFDw-Ld@S=#FD`g9ttYXo3!4KeFrQYNN=Ix{a*QB0 zR5q5U>XJ_wCWJ65cgsR+lpe3;{HBUA@FsG`tTc|R^g3(fUU6F9lE!uKO#Jdjk9B)P i*6uZG?bhXh4L4gM8w6qR!k`hn6kHSAT;n4D^!7JQ6P)V+ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/esES/Resource.Frk/MemoPrefer.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..5211c04ab1ac378a2cff34a1f96149c2a3765b7f GIT binary patch literal 1142 zcmcIjK~EDw6n-roNC-r!=tZIvO$;%l2}igA!5G~_Q))=m%WFH;#p!M{J0L9uyfyKF zH@tWv`cq7d@kiLR7k`4^TS{s0X5wsi-Z$^P{bt^qZ;3KQG`3EZ#hY2g;>sumakaR; zRzhBxUR?&?wJ!1hLoX%=+~cIa9s-a5^Ims|w$Esam}=xHp|?O%!<;&%MViMml|eV; zp*4eXvzgM}D=k zp^jxn{!P^(MR{;-y1I$D7JiJDg(s)FN(!7&U0R_$P1$5OLaaqNCVjK2K?-v6?PW1wI_S%99Z$O_*=V?7skYJJ;rv{?6Dl` z;*-Mk^wr|nHn@7?!`em3BXwQI(%K4oJpozs#K&NF#xz@&JM4PGpY}_0&7)NX>Eo@E zGY#WRga#y1<%aYsji@7B%RD_85y9qDiQL1j$bGEH0wY^YTTd&)L&6EkjQm8o{_Je_ zAzX9xohH(Y&(NxWR4&5zTx0^<5TU?2kqYdQ->Q^h-;0=FPenYiXE+%~R^|FPzCo&E zvdZ=Iztuj;&!KbuYh8%yHgE+04|PEIfqTFnT9U#)0E=XofIs6U)g}~|`33(^)b|qn wcY$ZKn{UR?wST>6nz0`C%On$9vGcmxo=mNX*NwoLk<4ZN*x1%z1S8ph02$u-{{R30 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoApp.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoDelete.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/MemoPrefer.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoApp.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..d590c10034d505b48e66d0ebf947845b241ff09e GIT binary patch literal 14314 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoDelete.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..5298a79972aaadb8131f5dcd00173a7b8970707d GIT binary patch literal 924 zcmcIi%Wl&^6g@8Oq=GcGDldsHrbws@AYu_VrBWL^IEhFoN>bDnlI2WOQ+sU2<47z) ztg~jpf`6#Q8a{xpK(OE^%AH9{X(g77G;_~=ojLX$zyUD#9&pUQh4~*jRxrQ=bP-`l zyN?tFB;g!YC^{8F%;6F>0`oujj=#6R9sgPyTK^wMuix{wX_?#3t?ZolpPYs9jM%~Y zwKn0uWvnp|9IFnTevxG=N`&H};K?LOw{6?WOJ=_SaRBFm2T}-Ur zSa7#cA}DyAD(VqD4tS>0@Gyv^;H^~m-^j4KWVAKt9klQfFJ>P^A-2O>bT&;IjMepE z&|$9j-7fQV$L+9&_S}8uYj^OBHO)C4$JrY!)o$+JH}7H%pTSHI;Z4Is);COKdxnMV zOUvNkmF^FE0IfGB<0iKikHfRNF{+CTRTi;xgU%LpZ)F2 W)2dCrdsI1vULZpemrvc6h_m0(ajY!> literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..9d3d92681f53f7ac2349305d05603ba9db54744b GIT binary patch literal 1294 zcmbVM+e=hI82?g~a-*3MA%zWPx)euqbI#C8+%}Z>mlri5x zZjmIcpfs;+w7`cVRg$syL>BwzRAh@|LYIUR%iiN9E42wD zZM;V3=|{mOTpNnx^35fa!t>uralET+pX%rVby9N;Zo~a(V$>b{20Nf`Xl|d=^l6>zo zhsHvL=xNYgHoMB7DlV6*a%7to@9_Gt;laGnb27ddx73~J)Y;2sdvZKqQ8KXT7cEzK zqUA}|O2PZAl#>dOHWVtFOC-N=J-O_?9Pdkb5G8S%7RM+@r4Z%gppoXKB+Yjh^+cfw zjrm_D!BzD*+?_7cQwogJO3sflgaLcwR7*6;V( zmYtmT**4Y!+p&JWz;;vlo*n3a#`bN0VVoVL>!Dlmnh5lFUhCRgf7RWBsFQwEV``D1 z5$6k;c9Gz);__kt-em#*=yHOu*?eIN92xUY{?!gmje&p1M5I*L*0PQnsKw?w@E0_E z6L2r^XEgQ|;1|vi?R*Uk{}I5u)CKl7#T#@7{8NgzF(^dnN7!u9Bd{MSKB5uupDErU z)SY>l;`QTW;7Nxw6QlJ5LI+aS4@xDitk26JmbMY&BQZY94U=)W2;4j-F(`x54T?F_ WHdW0+X|h$F$A_g_X#J~5JNXawf?CV~ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoEdit.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..cb2b78efb9924a8fb2fd474af4e6f41e111e2a77 GIT binary patch literal 894 zcma)5PiqrF6o0D|nl?t$l0!kkhaiYhTfab|HYQdkP1@ZiN}({xPLjdRZrFXr#FHnz z<)9#V(VqPPehg2Z#e+w`LwqwE5YdCP?EAgHGrxKJ7Qh35OLqZ0`v&Dz*}$=){s^~r zvD?6{e=R&r2>T=5f2Kp+!pS+IiXxOM9-gbA#zvH6nM!Aaj#dP@1GIztmvf;7^& zH3Rp*%6 z#Xg7D{pX|fat;|1KX^(!P1YME@6-HrPDiL zd;Hbua>4!ZHk{sqQ^uc8uO+cwscH9J*P5CeQa3sZHyf!M3=A3cM`l2H5QlbVll0oY uB0Wq}!y_$CMps?U!_W|RjDEi6_tS)biJnS}%goujOCduMk0Yf#i@yNx_RTl| literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoList.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..9ff4029f1ac73d8c2961d8518c58357b07b746b5 GIT binary patch literal 734 zcmb7BPfG$(5T9i%Tl+5+1r-|vm4}2nbm(Rpm8(R%K@<@tYb>cxcAu3U`T!le1VJ}H zLZ6^pU!!xSfgU>7%+rt#1QiCzu#?}$bWQ)DxF_tG&krIO(m zbHecDa6DlpE~HcRT~S>0d@pOvmpr#97d$JToRI+R?O2I8_x%y2mU{RY8*DLcQw{rN z5;Z+JSUNN!(SAMaOO~tOhtu`HHZA{S6P=_xbyE=PL=*T;XV%}%<%w1kB1UowMSjc^_>*yJA9?w4jSJ@^ob?i;s8M?kUVYR z8+|&!obnqmMHp4QuDqn;O;{m3QvBuflkl8*AmtQ9&ss)0C&H^>+Bpxkh3oh_7Y)<( SYdZ+{vQ0=j#f&}J zp0Hh@2aX(u3kMEJNIfIOol3y1m3jcg2_eLdQ1#ftt>Jl+unmX;mXi7W`T2d%&+i$a z005;LKoNfnXWiL2eUda}NF%<_2u%{gMPCwa%5^{R_Y4!7OW`T4LUJNeT$pE6P=Dn~ z17NvM;Mc9+xsgm}pWj(snV`aEF7^*f=ydSfbFY(=r;oUyHg@{LEI8M_-=^pP$0m$q z2^NZ@;;)DfL9x^*HA^kTm!Cd5i4tHu9)IchJ#O&GPDO|`VhYaV#+pnMgs;RrE@ z$VS#+2cR5e5ew}$!4xqvHP8hptXaoSEuurar2=rI!h4LIQ?%bl5jZyyUTS8s)D|B~ z1&MKDvD;*^^voV+8sJ1r3KB+C>kO)?Vl;)ijCsf-W|!y2C;3e;K%uKRp;59+FJ^|n znKB4CiI~n6G|^HRg4xbANvI-H^%NGsJ?5v-IGrtE*l0^=Xi^pt%@ie=kzVSNK&HEt z8@9hTl&K~|MS097t}z#X>b(T*lmi~a#<~u@S;(04@sckT8+gaNiV7VwV=$7Cnrt8y z&(Bx(#ZX>CcXO^=6?kuv|wOOecuGxYK0_9CQ{qYe>p0uu)?Wa?LP}1 z>#%T_Df|&})%rA9*3?Y5s#368L#H9Nn8l2gDy2N8>TtypQ+>UjKV&^O57eT|)mK zBEEwBSLpLo#Gg6tyQAVwxQq685MMx>uaW-(?XTf^zD53f#J8tDe?)u(ZGJ}n7Wz56 zQptOV86IL!D6`z)+K?U2-XcvV(q;Ru98AjxtJCUu=)ho$4p_cv^?;jN-H$G>bI~Ik zjP|g2yWB+V;VPpssWTlap4T7=^7r*v&adO^A!y8|E#`!?BhRO peyrXmt#+3*+OG8=C>?_(6NSQ}ZA3_rhH&Fz&yr{Q-v9(x3nU literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/frFR/Resource.Frk/MemoPrefer.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..322b2697a9eb3e24a6ed9a0cf11765d1dece1f36 GIT binary patch literal 1114 zcmZuwOKTHR6h4#mCQz-|Qber61+}$OgRZ1SEPWuNi4E=O!i`Lm6FWGWiFa;Flco>4 zu?R*NA}$m~C=^%z1b2cP|AdRW^B1V!z0;Jaz2VHc_dD-Lh#VqHj}oOo&K2jycG~&) zE1SNU{s~bJu-6^rNC$bpj|?ZsR;t(8g%_e-`b;lrlLB(-T59r)yTpYk^mU{PQMn%Q ztRL4rU0QOz#ej_gf;*pnL8dJcLEofBf61YMx>bkspW^P{=j#?g@2pv(VAros?~C?mcF_e^hSeBTI=SP@T* z$eyfdXxGh)rp{02#i}me&5IVku2|Fg1y`)=Y4?uUFkk2oiY8@f0KQ!1vywGWO&B-l z#2Q_t0V-ObD5>Cubq;7Ms4aPmZS6m<+gA377Bq?aMa$|_QjWE9Mt5XlCTpy!tYw*{ zwqdH)TfkKgwG23x)pj+CC5QG=Zr1|unFmqX3u760GVo)~Ia!SAN>)5yv3v+9M#A;b z+K$Ou@M4u(3Lb=CL>iwPF`1Ya&iXV5?paLi4%+@K+*?OZV45|In%DeqH0&#io+7e z6S83XVc@_2D4DGvV=1g9ou;ppwKH^RTHly20K0D{4qh>H23KbG;Ol1k;7|2}I}iTK z><9P#dur}cX2wHt!SMoDBUw~j;iTH^LZq}@Z1h?_r^>7jzxH<-O~{)Z)c*7J E2kdYLsQ>@~ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoApp.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoDelete.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/MemoPrefer.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoApp.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..10a9b8ba56baeb68a5854958e6cb22197bf266a1 GIT binary patch literal 14328 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 C03g5s literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..544ebf74f08ce15f17a5bc7ba89661dd73d0bb90 GIT binary patch literal 1270 zcmcgrJ#Q015FI;{Yw{ z8*8FOEi+R~IFo8nH!vSz-o}g(gT(0I(V|;6i11RQ5h+NRm<>8OH~`RgFSXm&!o*`; z5c~gmfc_lYp;L69u2Fvsce4-8P6MEeY!??ki9FW2>ifdNm)RaI0KVC^al%(+rG@8t zHX_BgX_T(e01etQcg7IgAVw(=jR_-5K}CrX3#C|#1}P2yTt(G{37mIeTpA-vzT#zB z4s2YSHEEbquw23fvJ=C`5MxcYg>RKv&)Y?3EK;0a z&?lPg{4;Q~HMV~UQy*J5`Fxgbm~1A?HqG4gENepM*_O%X@~q|j+h#2DlI@sG{u$eK za?eWJW!-(5XcUJ=Ib4_M5B0i;I8E8T@M(JzHqTn{nh01HuIKwGCu?T z&GJKk$De;R@UQn^altz9WA{M~JA0eXLN7RbgU&<0adwN+(C?kSjwT@b;_N2fgI-TG z#3I|Ihp>M*|2|DY|8(}6?f3WtXKxYi5Wi~e`0R9IOz4926XPhqk%^ovRHW(cG|Jo4 lQD?~h8T5kv@Iv|F5!!dyPclq)un|5f{guIEfM-=`{sLzCXBhwh literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoEdit.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..f0bac0f4ead40c32f0d33a58b0030a87a02551b9 GIT binary patch literal 895 zcmZ`&Uu#n_6hBw8t;~O$?xDySK^P2#qJpo2wzf{vt=qlr`~!ouN!!3(Qf^L}^~ooF zR}g&BJ^KOt1bzgc{RDo8dXm=q2hHW?cg`>8B)^;_00{t`y8)1dKeLKkhun`xBUhkS z+*po7rS}*d!cG>w8aYNPu!TF$O(5gr*5R}ViwOA>4G+Y zjU7-C-oh4KNT#z7szWnYh6Z7iWw1@7JHL(AG@=~jar`=KQ`8!~hsiuQWI-}ri+wVU zE`!(bj;uA-f)1_rFtW3*72yod=CR~5(iQ&LN=#su3AT@^$XE+Sny~}CpY5?M_HC?- z8tY(M73>Hb=`Lk$unsA@0xLn)e4YU7Y#%HE5sw~UKm!+pfZ^Aby1t}EpD2O4hi)nU9Xy<}n1li=j!uny8@J*0Q_#teK@Ke|v z;b%IGMWfO$k+T&DD)U8xyU~6Oiqs^eV22$+nK<$(rUgNM9&G{l2wz6K1EI)Yqb;UX zkmTyJte2@6&xrdT`I@tOg-%wQ+^@#{*Nx6qxlzb|-=N{?(Dae-T17V;U2(Ze*M8s% pL(f7OkFzR1PzHI&=+o7-SGYXqU0Iaok(2c}EgGbk3iQL0f$)w%ETvG?BqcC-mK3sMaCF26siB2i4B0jfR*bH-N2+5-Dt0Ye}Db#e8 zZ&Z%4I?_gywr1yj)X^!*wp(CN7HBMC%bg{*MpbbyQC>977G$X&tFB^ccci{%&B~*+ zf=7w%v5OUBNwOtVwe$6V1^C{jy6Ra*fLme&1J5>s8Do?YX}7*BF1b%%;6B_4X7djk zneF?u6)_TH4!R>IY`5SX3YX)@bxu2Hw#gB%7!T)eZ@0yi_qJda3SVuxb>PVW23KA& z1aQ-jRWYO}3dM+CA4cMWZ79YRHY0IK`%yzoDB2Ijl$y1Wg3=cfN@G-ldPhf-brRQU~%@}(=g$m<|=X1?Z@ayTr-A$kS$NAT4lGF#A e6r!Q>vb!#Z{2$(2xV1|CdcE0BY`2RonfwK^#lX)1 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..a6bc427cfde84f60840bcdaa763a438125112318 GIT binary patch literal 1639 zcma)6&2Jk;6n~C4bx4by00KmzybEnAHQOF~0|6VyNmjDg)_NONMI46Ru|4YUjF}yq zG{+tg;#v+I5fcAE5J$wdy`i2sA%r-jJ%tO1lX5{eW=1IKRs&^tj!o6awYR*hH@8MVsXn!g}jSO7i7*q9&s6S zeGP{xXF0cy$+_eyU3SWLf@8ryaTn1GHu1uTSZ@cB=LcO}t6VL3Yv(X%cp;vjk`(-> zMG6+6)YgfR3|ZP^A8{jMX5Hh^yrPN=ODT+%)|QQ9uJva~vE~#fM}Zm76mex=NkuVO zTSh!<%|)C(qvtB`LH7X!iX4G+uuwiMKOwXPWvA)1oPhBCD=YTWp2=kL!%|BnqDS6U zJSnLj4DOI-#QLdVa2sH;u7-r_02N=x$_nfP)Ve(7`&3hgW@L;451_PeZ7xMDH-ah- z5y0y9NF)psf!mt(dcp|UwnAjKMd4YnG?GQA7C&d1uGuq|SPzuMqASLNB8Mg$E3Keo zGbCBct<0J8LFw9@robkZ_Ru;gmg|h#&v4Bj!4|+uD5wWw@|z;)QEnjwxaiBC(itlh zFdyMYs^VB7HQMnz&Q14*wZGV6LRxU)8KL8l7$o-I9`fT)$40drjMP|7Bc&=l-$+Gf zyTexb5j5u6dm+*+&)iw@1w%gsA7I&+l!W6vSsJi8sLN8kPC9MIdZ zmo7miVyP|sMr*?hX@-JUBe(?)^h`Gjp$uOe&+pRxV?(1t-=B%L{ruE05!3gN%8&Fv zJLN;LUH-WxohH0VpD!$?X>e&T9aN9LeUi+R(Sad5 z_erKt_#q|y0r4*vb`Iei!q*G@1imNyc7dOkYJ~rq$vh@ZiJ?=1U+M3sDSt8{Z08cl z{_li;vAE`?!@+b_U{`5VZHnCBF6|#|aXG3s5^;)LJ-KZU?RL#yJQ3)yJ};DBKH<%z z{)@eGVl(8lnUd8lArsu;Ea4g>VN(9e24@*=@;ug}cow@x)82lm;BSePOWJcYX01M5 z()X}Qaiw{6mxh;Ion61N*~Xw9VY6NLn*N;zMmv5N!$!A#E37vzHumBHlN885U;7(g CMbP*F literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/itIT/Resource.Frk/MemoPrefer.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..026c7118a240e3fe219e9ced0a45dfb8e2aaed65 GIT binary patch literal 1195 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 O%{uq*-ml;9Z2TWl0H`+r literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoDelete.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..355f9595f713c274cf30ada3b80e1864609d53bd GIT binary patch literal 936 zcmZuwL2DC16n>lPP|{G5+M?oN5sHEmq$lacWH%;Tnl!SBQn7-YWyRHWcikNW;z2T_ zr_iXVc(Ble2#Q`*Y`rK7QYchBixm_+Xt0<+Ao^yvrHMMr&im$l-@JMI-YkFw0I}-; zl6bd+G;(L~h;NwGHZ9fgY-&`4q#yVu%5cOB*0h_ksus0^s%0kKWa)T8ycOGV#wm?~ zUeeWEzE}qG8%MM&oV^G?)qcH?P|t%77NnoUn83)rUc>W})VG38vI|QuB4v*rtYy_j zcP_q!%KM$Je{cq3pusF0ldu+|8UQ3kG@NtMf~0A=oF@v+Dg~m_ypkswsw$HtOO^5j z$%z@2LnI5E;V=wCB8r5uisK^04vci*FJ|HKr&k{Y*^AG>p26_o1g~?(mS#;Z6#EZv(4Qa*>_mJS{ohC$_9Jc}{)(+Ri1;qz&++Jw7?q3X`q!aqIHpzI ys=Cf;+n+Y5?K<+9={kMl50WF*mdMEGFIa&PBuYljk`3QHW7n+2dL+%NdVc^#0QhzQ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..c01d429843168e0c2b10f85311b25e8850bd7794 GIT binary patch literal 1215 zcmZ`(T}abW6hG?CnmQ{3`vk8KK|MIihXRpmPQ#BihnpW@AFSs%&v#_sR@&+nYyx%d3<29O2- z86JRi{HC2gM~l`Nb!gP7vlgc7%tsA&p*`R+Sdg}80Uy&XX0yA|YNGCrc1BHam7d})Ulv;QTMWS#jCZL zR~zuvyG#;LU{(CTyt%aKh^bVbZVlk!^T{-9fWxpCa?)@b@&mOsNWe}q0|(YI@!`eC zZzQ>!%tAAg`_`0&m!iEEi$&6TBo0<6fLzFx6HeMTG6wmOhdo5KV8SJClt^YfnF0cZ zGJHvN3Y)kRY8I`E$`v8OyYKQu^lf-SsT7h4I0|{_o7G;i;a{eb2$>+0_(F3A=&gpE zHGDq&_0}+t^UqR_KMz@BucD2eA8$Y7^RbhW`+S^#K`yx`J|7wEdDv5h+|Zr(ihIZ7 zp)#|{JV2E|B9)3#k$#>ijx1qjBKGU{F+LZ28E%rj_$YtMhxiAO`H`D(ZuIc+TXgWy1q#vY+Y{nNjPkT=5;CP=;sq2bR5X&sXprLwn!{Y*HENP%UdQ z)+Uv(;HvD0&)u>MVxR1ZIAploa_895CF4(w<8>zxU*Hu^8D829eAp!ect^7k4l6$n zTM-+SKL$Gx1KA6G!+7@!(HGeZ{gq@C_M_jYawgyq;)wFcacTgsmH!B;5f`!cCr%Uh zowlUnBg@NpN;Sar+L}z8r_IX(ndL0N43_C)UY!}6Z214ts_7jYox1-L`Z*`q1&x+7 e!{ZMGQ*2f;&Ci17Bv(Q!S)hIMAA;KbLE|?`tzs_# literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoEdit.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..42018cab2a7942b465dab87bab064ad42ef54aaf GIT binary patch literal 888 zcmZ8fO-vI(6n={XY-+_~F!n&mq>%&+Y3oHfm{_5dLWZTVOEJ-uEbX?ADZ6AlL@*pw z5*pi@MbBxYRsf}?`%$wy-Y>Y^b+1%eXS2UQ(j+z3o$eOD&zP?&(Awf)GHUF ze5%yx*MVR0^P^^8QfsK8pwoZye(TfMed^faA{}HqNi8xPn2(G^IOxWc_`DXT__9pO z$ksN}yO+DuZfzrWW_^je(6rXsk?DB{E%7J>g9*^xwrb+aPtdD-07ex$v}6zJ^qT|d)k3nc45y$G=8mEwA0cCShR}w*TB5+@rZTjnUkB>DHo%St-cvql|+4Xhs_B{;m2Iq*~z%=rUitFeo!dZc><* z?1X!e^=(-je%}|V(ILdAvL?h8SwG@i*#X24_!ka^Sb)=r@lmk4E`&{`UxfnVuLe7{ zN5-KC^=`#ypdK-ybOxspWlX@1T|`({I+N3=1u^?L_Tn0H-xZ(qT<2u3Eu50)bEiTX zuZSi&=2Xr(&2r~fW6}{eFINJJPI0GP2$*@_E0^h{?T7n)yIACcQ}YHd3Oe8xc-|JC UuOCF6YgT@Oi?Ty2!sl-34*^lfRR910 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoList.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..bf36c04bc452f54bcdaf1933d0b1bd58463f46d8 GIT binary patch literal 737 zcmZuuJxc>Y5S=iZczz>-A_|91EJPCZkcd?Rf_e#JP74dck246-K(e4g5R9ERVn9fj zf1#C?e?imO*r|yS8?nSQvqT;u@;t&}c_@+5Yc{O8B+!84p{d{` z;%}6S#ymnJRopWD(1O80K$~`Z{_AV|=o57^_Q$m0wVyUJx3^^<{C8N{ zCVS%=Jpa#y)h?p7G}^DE|)rvYmBfXGMZD`yLmYvM9j zoSG_p4;3gYvSV#1EP!>RA_iP?WykmO8*)A5qpY*tcWT}tMJm=+ej<|Pn2(>8Wtse< z7MD#f!&_WYX58Xe6}DnrRaV&KHx-YV@~Dju>@~)&XWk(V(hd2f3wT&M0Aunua8>#O zx1|p-Exmz9Zbv#*vrAFLm;4N0GmNeov|U2XsuSRM_zP}G6!9AO4_u`o@CC1Nm&80I zpYR%`QOscq{1EyFKYf0J=dq|MYVW36BJ0Xdq|#ZA+54@vV8_mAlGM$ejOwb3PTU&b MOsA4bePccS1$_IBs{jB1 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Localized/jpJP/Resource.Frk/MemoMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..7c3e1a0c6f5a2f17bdf52f9aa0465fbdcbbe9db3 GIT binary patch literal 1591 zcmaJ>ZA@EL7=HV~$JqE-wkU~ixrsmaNAdHgx_evNQEBOD`I<1ZYq`*yl(yd9!4|Yv z&RHPRmKI3IlI;hOiE++s0hRbUe&E!FMMG5TWE;`A6f);ba71I&_p~5vM$XN>@AE$A zJ@3~!=K|;ez_0+IXKy_}+|75+X&>{`H$E92TAAR@-6xmNkB+>)#GA&u`%e@)q_%)V z4tdIykmBJyf#A`g;*tGrYO|#HeLg)f-sQHGqu(%eqVs#k#Pvu2%2K&?+63Q|(%#^e zW$m41KCZ?1={tORaz%JjdqpF{<3DQerL>V0{|$ebKctmHi2e(j_R?tD(S_)QxZB(FM8l??=)$xm92PmQej8@Mqj}ERu^|LiEGfRWif; zkeOst-&nkdTuy!&YakP3iOiG9E>quBEJWUAn7p|c$YnALWE7t<7AqI@hO}W3QFu=Y zBiO*wE*O)u@%sGe1o`6lbutOH*v&+Wr2B4=G&JBk>Y|~pMld5k*hJDvm7Ih900kIj zj!gI4`fr09K=%mqS3vDpeJ8$Ns01k9r-&^rvMO`5gGOjO>|;g%d8~?oVFqjAb0*l> zw9z?4l%*JLe5&j*CiB-bh8%||`x*J~rXIX2*2-$E{6t-(GIld@7VubZ&2C)m z=lH2oC|~PWNtWG^iitHbv&S3Kxchz=TKAqdT*CMd>UKk3jp$=%$>cBzE<8?E4og)n z7@(eQ0O&8*GXvh2y zq8Q2GMR*J4nG9ai?ZUO~8JvcfP;O%w>-hos0}L9{I?P8eW-;K+(zh{OWS2uKS0_sy zoI~;-F0wSs8`K@^>VC0R%9z}@&N+js9Po!Wqf6HPyChFQX)ZR4s?-`#j&gSKMadW1 zZk7GbT!kd!-;=A6RiAXfNfO(*aw+6dMQbL&K>VjS6POi#X!`Yo?!ESrr!qrsR+?>necGkMgmO>#IJ#5i6sQ<;om|9oG zD`}Xh^F-P-1Z`lO+Ey{Kndpdk^lP1ssOQog8<7rwkQIQzNjL#}UDOTrfd2{w;1C;w zw*MmYuh$m7so-U301mUz{)a*?mSy8AWG^?%30>FNu+V%O8xetijpgaBvr(Z1byg5Q zy_b!tH|4jmVQ@nWX+8cRzfOITFFKUUF*XXP;Q$0|Nj0eTM{nT4YWc>*`?6hYH_KBF zKr_qRnE)R91UBL6a~yE=ZlYYq0mUa&n_R1`%X#@zR*RjbVoAzcDPEc=g-U+;PA*P& z-TN$8%H!o3x$N*M_pPkTmvTwIlB;sQ=<|3;-r38JqMw}TKQce$uMN7|;XYNnGACEm zew1VDZDjQd!d-G7g^%F2Tjc_uIN#SpzU!*7WTUE`WG&TVvIW&-viC($?<4y}je+bl znzOxFeNv~%?xH`33AeE8*2UC`y@1)7Lev5AQ&aipo Pldwr0c#)gwZCbwpn>Z_& literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoApp.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoDelete.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoList.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/MemoPrefer.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoApp.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoApp.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..956aaa71cd31ef38f40ce6b67ea76d8109e9bfe4 GIT binary patch literal 31608 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoDelete.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoDelete.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..cabd74754be0b1b5fb90a2fe533ab9fb729bf990 GIT binary patch literal 897 zcmZ8gQESvd5T4x8<+!`1NKvGSEEKJvl!9-EU@u8?cl2sYE)^e&5OY%-n@i$mPd!Cw z{Qr)^mF@(1skaR7&UMRxq_hok5S1F+2CLM{k9k+9p=%q|n-^&kM;dM8e|cPC zD=}%&T-~_Nb$}bfhb7p7JJ7YLGCW~_mn~~z09#iqZj{BCvb9^4L~?cbd{21Lh5KNG zZDLrH=ncw9#U}~LI4>45&*Xv2zPE)75?0Bt4ie9m!c5B<1$)dM9yDMGU*T!Zh#;{o zhO`gZ3_|pE7>U&dhCpar(Nfn@U;^@5d+@I??ZTk(lF`QOkBgH&B&C$Laom8U6s&8rUBI literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoDetails.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..ac7205e3cb8781dd19ab8b6fd827e0e129ddebe4 GIT binary patch literal 1215 zcmZ8h-A@xi5TBN9sf9a8jXoHaCB^`WDT*;lUyQUGlp>@(1mj1txh`en^{%;HXv&NK zgT5MHj1TGy-=7aA{sI0uzT)iOQ3~7K&g^eycYZrFTYv-r^e})Veu?)_oLeKQqQ_Zi znVB}3QatqSc-1${8$pRHCOmn6{K5F-BRbj)g|EiKcGVeH0HF-sO7&?ek;a3&M>AUd z;;+9&8u?udXoX9$&ifX8)Svs3hpMl_J9@_8#Z{FtASzjd%rmKY)?kqu`Dxw}YUtVq zEv+^^;WEW-MtsaE!g2u0s14zL`xDEYiGC!D` z(UxoE5bj>E6q)aGPg@DuA-gDZWFHDJ1UA?@>G2pu+a%;*`V>H!BYR-MFvge<#Ts%j z@!vucUcncbj$@-E*&xTAeOa=p9H&gSRC%gQw$=PXne5=~kX==-I%Ln_`>Hs#L=M!H z^O78z`AE-r$}rh6Odz@+sk6eVPPon-tqIxm zSew_V@To$JNq1RDMWq{Z?o%NtlTy@u^kJ(iXfTEK^1L=x0rh#y?2viOGADvJft2}RcgZ{5LwK_HRG`O}uepkYWfh5Lbec*DGo|9OW2(fW4?kQBPQ` zUSyyP1K52w3SsmuxPmfg^gVco^0U!5VM0qiup4gT-b<;W#X+(SBM9MN1mef=81Xry z?}Cp1(dZi|Cn$etJsov_I_ivcm1Ct<=JYjnlx&O$F8jM*p%oXSK&QFa960l$x^H^p JN0FSH`43baC=CDr literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoEdit.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoEdit.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..898c93750e2afb7d51befa5cd504866ba89a8e10 GIT binary patch literal 892 zcmYjQ&ubGw6n>*)y2MaZiCD0dF|?3MNh+dN6s$>_q+z>By4yrhQntw^uEb5*jMz#K zp7bVFLE4K6c(7XV;6Zv6)O-E{dl8B!dloUinWR77F!R0n-n^MN@67-Z05}!`Afg)) z@M>$31@OLK4>z@ksof`Emge6kf+=C7}SWC z?`)@bZ%(G1&UWPN<~nnrzcm)hMn6JeA`Cv?6e!Mcd+OF7P}+L{S{p*-3b{*)*hRZf z_BJ=9*9CQF=&x2}3z^^G)7t5A@K=Abun1(3<}eAbU>JO)(`^v1JC?AWqXvwkZS<(k z;wIi+m?=Di*NA?ag*7h=4KIJic2BB5eY#2AX0$%87pxhnE4T$3<(0SH;(XC>bIec_|Ib|3|fFF z>enTog%gM|sjF}Xu^{z4Tt(dK@*PYK@uTk=CgTorza%f}eJW;ht6Fz$tHD&e!Mm9e zZ=L0B>rr34TX(NaPr|lpWv^ax>$MtNG~L0ZYgQ`wEtr1Ku5dQvl#owj-g;$YPKj!1;I3lVF{bHHrv{Rw5BDLNZf?Yh(>zw zHaMYgTS#{To~rNs})kRfj3zU_}%I`^n(=F2iE#8v&8eq&aIOK#qglWrwr zUz7lD*e~$64dp?z-pp*WQGv=B)P%Lv z-8J@a%^FU3R}b!N2?x&9Cd2cwuP`zb0lz;AnloOH&iw(c-UhJh5N6leeYS#~+C$df zsj5>`=HA#pYelTy`3-)no|=Zh#xD_}K+f?d)Ko-%ss+py3IsuZh_!hK6X0jvUIQ!l zgqA#11R`*nH+c(jl%qThLlr9IR(2kbSCIv9$1{pDGB0mP+ctSq&M(^h07sLzq?xh#p^VuUZ%aF7@{Y{JP27K!*^s)gpP70XM!9Nq zsbVL-f#&QN$&ZLR=$xM2AEXpHU!)FZ%LtWpW{n^Y`D<_u`13 zd813oUcnAnbh4i`V5J8Uf{GugJ@nfEi#mjmP`stqA1K~|ONjW{RB7nGm&Bt1b@nfD mEuNLRjiOuO_-KRlV1mBw*}glUE33ILv+foP1+kWO+2#NC>!hv# literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoMisc.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..2c08946e6598ed2e9a67173101ad8486dac567dd GIT binary patch literal 1590 zcmaJ>UuYaf82>hRmt0GdrYiM8#d!;YhE{#@#o7ClCg$#P-dBVbb&wsGKNRu-s8)rT`b@~QPEX*7~5zq39 zo3(`Lntp{lQkY!4%)}#JKB+X(0iN*8f{{*XooM(jV^Kh3gYJ4gSfp>R1Rqnc5u9z% zcY^W-}iHHZY4OiLVut>eK9!m)*L-}Z1zKX;L_YIJ$!j?HaTBE zzTQ}`zjifw@^bKOaN=rxB=OCazgFvi{6?p5>AwUQ7Cxi$*Oi|Vk@`aL_KJQpV8K_* zt9pWtEGPQwZ=fe}h(t5dY&3_sQ(aFe_xi`2Nz3LXNch5XxDb%%o^TyztJ!VC?(f^w zo6Y8hXu4#{=$KP-VGKi?^d%esh$h`?4Uzz{JQI>b9$=@zZEi}U+cp>g+GEN}e1z8~ zT;`Qv1fXZX$0jE&X^|mrS7HCgF=_45f1KCs8m&spbwq5?b>tEZ0(9rguER;jbr1Pf z$N==}6Rt0bx*W-~(&p|iMk+`tb%&Z8kVm9a-V2MO12o;Pme~ZCmPriPlTa*kV)~wk zsU`vm;(8_Sk!j1e$pk01DWgsy%*}%ra5l z{v!Jvma?|9>wDBdyGQ*aYk+;AeX4LY0}m^y2BvEO`Ev>*Pw|-vJ1m-oB2s$D=im^^ z&lN^HM{!M$!WgG_@!zc=@~2VU3h{L~k2Yf=z5&a){-qGF!A+EV6vlhqMjqQp?QJ#@ zt2-gq&~^t?nD&MIcM9*iquP5j7MAn46(+^;dsSPv)!pscR{!1GUXW)~Dszs%r_Hri z{U6=ewz*Mvy9X`I?+|CI%Ziq?`Tb%3Q(Tyy6}CMwq-Qx(_l5i*zE}>c@D}+%`iNO( z4*K%%4ZAk0nPjlTZP7c9&l^4?t*sBGMoDh8NHU{IJv01#niPkI4N^!Oqhp0+`frJl B#XA51 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoPrefer.rsrc b/handera-sdk-105/examples/ExampleI/Rsc/Resource.Frk/MemoPrefer.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..94bf3bf576f7182409d7f2fb4010b910ea1a90c7 GIT binary patch literal 1086 zcmZuwJ8u&~5FR^TJ92O!7NQ6g0}&!f$l)QRBn46)ARrF0>WCdvt~sJ-=A9>Emsg4}icQEt zk+f=|Hn`TEWsxgl2W~?VDprx2v@C+M(O)uC&reQ!kAv?1x*Ya*rMLX^lEgqY&MxR>#BwA2xZ`+8+HOF(D!0fLUckK zcLO68B+f8EX+@HF5<$}C@SkU(xhQ(QvG)jfSajM4!+5{ + +#include + +#include "MemoDB.h" +#include "MemoMain.h" + + +/************************************************************ + * + * FUNCTION: MemoLocalizeAppInfo + * + * DESCRIPTION: Look for localize app info strings and copy + * them into the app info block. + * + * PARAMETERS: application info ptr + * + * RETURNS: nothing + * + * CREATED: 12/13/95 + * + * BY: Roger Flores + * + *************************************************************/ +static void MemoLocalizeAppInfo (MemoAppInfoPtr appInfoP) +{ + Int16 i; + Char ** stringsP; + MemHandle stringsH; + MemHandle localizedAppInfoH; + Char * localizedAppInfoP; + MemoAppInfoPtr nilP = 0; + + + localizedAppInfoH = DmGetResource(appInfoStringsRsc, LocalizedAppInfoStr); + if (localizedAppInfoH) + { + localizedAppInfoP = MemHandleLock(localizedAppInfoH); + stringsH = SysFormPointerArrayToStrings(localizedAppInfoP, + dmRecNumCategories); + stringsP = MemHandleLock(stringsH); + + // Copy each category + for (i = 0; i < dmRecNumCategories; i++) + { + if (stringsP[i][0] != '\0') + DmStrCopy(appInfoP, (UInt32) nilP->categoryLabels[i], stringsP[i]); + } + + MemPtrFree(stringsP); + MemPtrUnlock(localizedAppInfoP); + } +} + + +/************************************************************ + * + * FUNCTION: MemoAppInfoInit + * + * DESCRIPTION: Create an app info chunk if missing. Set + * the strings to a default. + * + * PARAMETERS: database pointer + * + * RETURNS: 0 if successful, errorcode if not + * + * CREATED: 1/3/95 + * + * BY: Roger Flores + * + *************************************************************/ +Err MemoAppInfoInit(DmOpenRef dbP) +{ + UInt16 cardNo; + MemHandle h; + LocalID dbID; + LocalID appInfoID; + MemoAppInfoPtr nilP = 0; + MemoAppInfoPtr appInfoP; + + if (DmOpenDatabaseInfo(dbP, &dbID, NULL, NULL, &cardNo, NULL)) + return dmErrInvalidParam; + if (DmDatabaseInfo(cardNo, dbID, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &appInfoID, NULL, NULL, NULL)) + return dmErrInvalidParam; + + if (appInfoID == 0) + { + h = DmNewHandle (dbP, sizeof (MemoAppInfoType)); + if (! h) return dmErrMemError; + + appInfoID = MemHandleToLocalID (h); + DmSetDatabaseInfo(cardNo, dbID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &appInfoID, NULL, NULL, NULL); + } + + appInfoP = MemLocalIDToLockedPtr(appInfoID, cardNo); + + // Clear the app info block. + DmSet (appInfoP, 0, sizeof(MemoAppInfoType), 0); + + // Initialize the categories. + CategoryInitialize ((AppInfoPtr) appInfoP, LocalizedAppInfoStr); + + // Initialize the sort order. + DmSet (appInfoP, (UInt32)&nilP->sortOrder, sizeof(appInfoP->sortOrder), + soAlphabetic); + + MemPtrUnlock(appInfoP); + + // The conduit ignores dmHdrAttrAppInfoDirty + return 0; +} + + +/************************************************************ + * + * FUNCTION: MemoGetAppInfo + * + * DESCRIPTION: Get the app info chunk + * + * PARAMETERS: database pointer + * + * RETURNS: MemHandle to the to do application info block + * (MemoAppInfoType) + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/18/96 Initial Revision + * + *************************************************************/ +static MemHandle MemoGetAppInfo (DmOpenRef dbP) +{ + Err error; + UInt16 cardNo; + LocalID dbID; + LocalID appInfoID; + + error = DmOpenDatabaseInfo (dbP, &dbID, NULL, NULL, &cardNo, NULL); + ErrFatalDisplayIf (error, "Get getting app info block"); + + error = DmDatabaseInfo (cardNo, dbID, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &appInfoID, NULL, NULL, NULL); + ErrFatalDisplayIf (error, "Get getting app info block"); + + return ((MemHandle) MemLocalIDToGlobal (appInfoID, cardNo)); +} + + +/************************************************************ + * + * FUNCTION: MemoCompareRecords + * + * DESCRIPTION: Compare two records. + * + * PARAMETERS: database record 1 + * database record 2 + * + * RETURNS: -n if record one is less (n != 0) + * n if record two is less + * + * COMMENTS: Compare the two records key by key until + * there is a difference. Return -n if r1 is less or n if r2 + * is less. A zero is never returned because if two records + * seem identical then their unique IDs are compared! + * + * This function accepts record data chunk pointers to avoid + * requiring that the record be within the database. This is + * important when adding records to a database. This prevents + * determining if a record is a deleted record (which are kept + * at the end of the database and should be considered "greater"). + * The caller should test for deleted records before calling this + * function! + * + * HISTORY: + * 07/18/96 art Created by Art Lamb. + * 11/30/00 kwk Use TxtCompare vs. StrCompare to avoid one + * extra trap call. + * + *************************************************************/ +static Int16 MemoCompareRecords (MemoDBRecordPtr r1, + MemoDBRecordPtr r2, Int16 sortOrder, SortRecordInfoPtr UNUSED_PARAM(info1), + SortRecordInfoPtr UNUSED_PARAM(info2), MemHandle UNUSED_PARAM(appInfoH)) +{ + Int16 result; + + // Alphabetize; + if (sortOrder == soAlphabetic) + { + result = TxtCompare( &r1->note, // const Char *s1 + 0xFFFF, // UInt16 s1Len, + NULL, // UInt16 *s1MatchLen, + &r2->note, // const Char *s2, + 0xFFFF, // UInt16 s2Len, + NULL); // UInt16 *s2MatchLen + } + else + result = 0; + + return result; +} + + +/************************************************************ + * + * FUNCTION: MemoGetSortOrder + * + * DESCRIPTION: This routine get the sort order value from the + * to do application info block. + * + * PARAMETERS: database pointer + * + * RETURNS: true - if the to do record are sorted by priority, + * false - if the records are sorted by due date. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/18/96 Initial Revision + * + *************************************************************/ +UInt8 MemoGetSortOrder (DmOpenRef dbP) +{ + UInt8 sortOrder; + MemoAppInfoPtr appInfoP; + + appInfoP = MemHandleLock (MemoGetAppInfo (dbP)); + sortOrder = appInfoP->sortOrder; + MemPtrUnlock (appInfoP); + + return (sortOrder); +} + + +/************************************************************ + * + * FUNCTION: MemoChangeSortOrder + * + * DESCRIPTION: Change the Memo Database's sort order + * + * PARAMETERS: database pointer + * TRUE if sort by company + * + * RETURNS: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/18/96 Initial Revision + * + *************************************************************/ +Err MemoChangeSortOrder(DmOpenRef dbP, Boolean sortOrder) +{ + MemoAppInfoPtr appInfoP; + MemoAppInfoPtr nilP = 0; + + + appInfoP = MemHandleLock (MemoGetAppInfo (dbP)); + + if (appInfoP->sortOrder != sortOrder) + { + DmWrite (appInfoP, (UInt32)&nilP->sortOrder, &sortOrder, sizeof(appInfoP->sortOrder)); + + if (sortOrder == soAlphabetic) + DmInsertionSort (dbP, (DmComparF *) &MemoCompareRecords, (Int16) sortOrder); + } + + MemPtrUnlock (appInfoP); + + return 0; +} + + +/************************************************************ + * + * FUNCTION: MemoSort + * + * DESCRIPTION: Sort the appointment database. + * + * PARAMETERS: database record + * + * RETURNS: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/18/96 Initial Revision + * gap 6/29/00 When in manual sort mode this + * routine was exiting immediately which caused + * deleted and non-deleted records to be mixed in + * the database as opposed to having deleted records + * all appended at the end of the database. Now check + * to move records above all deleted records (which can + * occur in the case of receiving multiple beamed records). + * + *************************************************************/ +void MemoSort (DmOpenRef dbP) +{ + Int16 sortOrder; + + sortOrder = MemoGetSortOrder (dbP); + DmInsertionSort (dbP, (DmComparF *) &MemoCompareRecords, (Int16) sortOrder); +} + + +/************************************************************ + * + * FUNCTION: MemoNewRecord + * + * DESCRIPTION: Create a new record + * + * PARAMETERS: database pointer + * database record + * + * RETURNS: zero if successful, errorcode if not + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * monty 9/13/95 Initial Revision + * + *************************************************************/ +Err MemoNewRecord (DmOpenRef dbP, MemoItemPtr item, UInt16 *index) +{ + Err result; + int size = 0; + UInt32 offset; + MemHandle recordH; + MemoDBRecordPtr recordP, nilP=0; + + // Compute the size of the new memo record. + size = StrLen (item->note); + + // Allocate a chunk in the database for the new record. + recordH = (MemHandle)DmNewHandle(dbP, (UInt32) size); + if (recordH == NULL) + return dmErrMemError; + + // Pack the the data into the new record. + recordP = MemHandleLock (recordH); + offset = (UInt32)&nilP->note; + DmStrCopy(recordP, offset, item->note); + + MemPtrUnlock (recordP); + + // Insert the record. + result = DmAttachRecord(dbP, index, recordH, 0); + if (result) + MemHandleFree(recordH); + + return result; +} + + +/************************************************************ + * + * FUNCTION: MemoSortRecord + * + * DESCRIPTION: Move the passed record to its correct sort + * position. + * + * PARAMETERS: database pointer + * record index + * + * RETURNS: zero if successful, errorcode if not + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/18/96 Initial Revision + * gap 6/29/00 When user is in manual sort mode, the sort + * routine was exiting immediately which caused + * deleted and non-deleted records to be mixed in + * the database as opposed to having deleted records + * all appended at the end of the database. Now check + * to move record above all deleted records (in the case + * of new records) before exiting the routine when + * manual sort is selected. + * + * + *************************************************************/ +Err MemoSortRecord (DmOpenRef dbP, UInt16 * indexP) +{ + Err err; + Int16 sortOrder; + UInt16 index; + UInt16 attributes; + UInt32 uniqueID; + MemHandle recordH; + MemHandle h; + Boolean dontMove; + MemoDBRecordPtr cmp; + MemoDBRecordPtr recordP; + + sortOrder = MemoGetSortOrder (dbP); + + // Check if the record is already in the correct position. + recordP = MemHandleLock (DmQueryRecord (dbP, *indexP)); + if (*indexP > 0) + { + // This record wasn't deleted and deleted records are at the end of the + // database so the prior record may not be deleted! + h = DmQueryRecord (dbP, *indexP-1); + if (! h) + dontMove = false; + else + { + if (sortOrder == soUnsorted) + dontMove = true; + else + { + cmp = MemHandleLock (h); + dontMove = (MemoCompareRecords (cmp, recordP, sortOrder, NULL, NULL, 0) < 1); + MemPtrUnlock (cmp); + } + } + } + else + dontMove = true; + + if (dontMove && (*indexP+1 < DmNumRecords (dbP))) + { + DmRecordInfo(dbP, *indexP+1, &attributes, NULL, NULL); + if ( ! (attributes & dmRecAttrDelete) ) + { + cmp = MemHandleLock (DmQueryRecord (dbP, *indexP+1)); + dontMove &= (MemoCompareRecords (recordP, cmp, sortOrder, NULL, NULL, 0) < 1); + MemPtrUnlock (cmp); + } + } + MemPtrUnlock (recordP); + + if (dontMove) return (0); + + + // Since the routine that determines the records sort position uses a + // binary search algorythm we need to remove the record from the database + // before we can determine its new position. We will also save and restore the + // record's attributes and unique ID. + DmRecordInfo (dbP, *indexP, &attributes, &uniqueID, NULL); + + err = DmDetachRecord (dbP, *indexP, &recordH); + if (err) return (err); + + recordP = MemHandleLock (recordH); + index = DmFindSortPosition (dbP, recordP, NULL, (DmComparF *)MemoCompareRecords, sortOrder); + MemPtrUnlock (recordP); + + err = DmAttachRecord (dbP, &index, recordH, 0); + if (err) return (err); + + DmSetRecordInfo (dbP, index, &attributes, &uniqueID); + + *indexP = index; + + return (err); +} + +/*********************************************************************** + * + * FUNCTION: MemoGetDatabase + * + * DESCRIPTION: Get the application's database. Open the database if it + * exists, create it if neccessary. + * + * PARAMETERS: *dbPP - pointer to a database ref (DmOpenRef) to be set + * mode - how to open the database (dmModeReadWrite) + * + * RETURNED: Err - zero if no error, else the error + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * jmp 10/02/99 Initial Revision + * + ***********************************************************************/ +Err MemoGetDatabase (DmOpenRef *dbPP, UInt16 mode) +{ + Err error = 0; + DmOpenRef dbP; + UInt16 cardNo; + LocalID dbID; + + *dbPP = NULL; + + // Find the application's data file. If it doesn't exist create it. + dbP = DmOpenDatabaseByTypeCreator (memoDBType, sysFileCMemo, mode); + if (!dbP) + { + error = DmCreateDatabase (0, memoDBName, sysFileCMemo, memoDBType, false); + if (error) + return error; + + dbP = DmOpenDatabaseByTypeCreator(memoDBType, sysFileCMemo, mode); + if (!dbP) + return (1); + + // Set the backup bit. This is to aid syncs with non Palm software. + SetDBBackupBit(dbP); + + error = MemoAppInfoInit (dbP); + if (error) + { + DmOpenDatabaseInfo(dbP, &dbID, NULL, NULL, &cardNo, NULL); + DmCloseDatabase(dbP); + DmDeleteDatabase(cardNo, dbID); + return error; + } + } + + *dbPP = dbP; + return 0; +} diff --git a/handera-sdk-105/examples/ExampleI/Src/MemoDB.h b/handera-sdk-105/examples/ExampleI/Src/MemoDB.h new file mode 100644 index 0000000..3119b3c --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/MemoDB.h @@ -0,0 +1,87 @@ +/****************************************************************************** + * + * Copyright (c) 1995-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MemoDB.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * Header for the Memo Manager + * + * History: + * 1/3/95 rsf - Created + * 9/13/95 mlb - added memo item type and MemoNewRecord + * 10/02/99 jmp - Added MemoGetDatabase() prototype. + * + *****************************************************************************/ + +#ifndef __MEMODB_H__ +#define __MEMODB_H__ + +#define LocalizedAppInfoStr 1000 + +typedef struct { + UInt16 renamedCategories; // bitfield of categories with a different name + char categoryLabels[dmRecNumCategories][dmCategoryLength]; + UInt8 categoryUniqIDs[dmRecNumCategories]; + UInt8 lastUniqID; // Uniq IDs generated by the device are between + // 0 - 127. Those from the PC are 128 - 255. + UInt8 reserved1; // from the compiler word aligning things + UInt16 reserved2; + UInt16 reserved3; + UInt8 sortOrder; + UInt8 reserved; +} MemoAppInfoType; + +typedef MemoAppInfoType * MemoAppInfoPtr; + + +// Sort orders +#define soUnsorted 0 +#define soAlphabetic 1 + + +typedef struct { + char note; // null terminated + UInt8 reserved; +} MemoDBRecordType; + +typedef MemoDBRecordType * MemoDBRecordPtr; + +typedef struct { + Char * note; +} MemoItemType; + +typedef MemoItemType * MemoItemPtr; + + +#ifdef __cplusplus +extern "C" { +#endif + + +//------------------------------------------------------------------- +// Routines +//------------------------------------------------------------------- +extern Err MemoAppInfoInit(DmOpenRef dbP); + +extern Err MemoNewRecord(DmOpenRef dbP, MemoItemPtr item, UInt16 *index); + +extern Err MemoChangeSortOrder(DmOpenRef dbP, UInt8 sortOrder); + +extern UInt8 MemoGetSortOrder (DmOpenRef dbP); + +extern void MemoSort (DmOpenRef dbP); + +extern Err MemoSortRecord (DmOpenRef dbP, UInt16 * indexP); + +extern Err MemoGetDatabase (DmOpenRef *dbPP, UInt16 mode); + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/handera-sdk-105/examples/ExampleI/Src/MemoMain.c b/handera-sdk-105/examples/ExampleI/Src/MemoMain.c new file mode 100644 index 0000000..f00d083 --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/MemoMain.c @@ -0,0 +1,4994 @@ +/****************************************************************************** + * + * Copyright (c) 1995-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MemoMain.c + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This is the Memo application's main module. This module + * starts the application, dispatches events, and stops + * the application. + * + * History: + * Feb 21, 1995 Created by Art Lamb + * + *****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "MemoDB.h" +#include "MemoRsc.h" +#include "MemoMain.h" + +/* TRG */ +#include "Vga.h" +/* end TRG */ + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define memoVersionNum 3 +#define memoPrefsVersionNum 3 +#define memoPrefID 0x00 + + +#define newMemoSize 64 + +#define noRecordSelected 0xffff +#define noRecordSelectedID -1 + +// Update codes, used to determine how the to do list view should +// be redrawn. +#define updateRedrawAll 0x00 +#define updateCategoryChanged 0x01 +#define updateDisplayOptsChanged 0x02 +#define updateFontChanged 0x04 + + +//The listViewIndexStringSize is the size of the character array +//that holds the string representation of the index that is displayed to +//the left of the memo title in the list view. The string can have a +//range of 1 - 99,999 with the current value. +#define listViewIndexStringSize 7 + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ + +typedef struct { + UInt16 topVisibleRecord; + UInt16 currentRecord; + UInt16 currentView; + UInt16 currentCategory; + FontID v20editFont; + UInt8 reserved1; + UInt16 editScrollPosition; + Boolean showAllCategories; + UInt8 reserved2; + UInt32 currentRecordID; + Boolean saveBackup; + + // Version 2 preferences + FontID v20listFont; + + // Version 3 preferences + FontID editFont; + FontID listFont; +} MemoPreferenceType; + +typedef struct { + DmOpenRef db; + Char * categoryName; + UInt16 categoryIndex; +} AcceptBeamType; + + + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + +static DmOpenRef MemoDB; +static char CategoryName [dmCategoryLength]; +static UInt16 MemosInCategory; +static privateRecordViewEnum PrivateRecordVisualStatus; +static MenuBarPtr CurrentMenu; + +/* TRG */ +static Boolean vgaExists = false; // larger screen support +static Int16 selectedItem = -1; // one hand operation +/* end TRG */ +// The following global variable are saved to a state file. +static UInt16 TopVisibleRecord = 0; +static UInt16 CurrentRecord = noRecordSelected; +static UInt16 CurrentView = ListView; +static UInt16 CurrentCategory = dmAllCategories; +static Boolean ShowAllCategories = true; +static FontID ListFont = stdFont; +static FontID EditFont = stdFont; +static UInt16 EditScrollPosition = 0; +static Boolean SaveBackup = true; + +static Boolean InPhoneLookup = false; + +static UInt16 TopRowPositionInCategory; + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ +static Boolean EditViewDeleteRecord (void); +static void MemoLoadPrefs(UInt32* currentRecordID); +static void MemoSavePrefs(UInt16 scrollPosition); +static void ListViewDisplayMask (RectanglePtr bounds); +static Boolean ListViewUpdateDisplay (UInt16 updateCode); +static void RegisterLocaleChangingNotification(void); + +/* TRG */ +static void ListViewResizeForm(FormPtr frmP, Boolean draw); +static void EditViewResizeForm(FormPtr frmP, Boolean draw); +static void ListViewSelectTableItem (Boolean selected, TablePtr table, Int16 row, Int16 column, RectangleType *r); +/* end TRG */ +/*********************************************************************** + * + * FUNCTION: SetDBBackupBit + * + * DESCRIPTION: This routine sets the backup bit on the given database. + * This is to aid syncs with non Palm software. + * If no DB is given, open the app's default database and set + * the backup bit on it. + * + * PARAMETERS: dbP - the database to set backup bit, + * can be NULL to indicate app's default database + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * grant 4/1/99 Initial Revision + * + ***********************************************************************/ +void SetDBBackupBit(DmOpenRef dbP) +{ + DmOpenRef localDBP; + LocalID dbID; + UInt16 cardNo; + UInt16 attributes; + + // Open database if necessary. If it doesn't exist, simply exit (don't create it). + if (dbP == NULL) + { + localDBP = DmOpenDatabaseByTypeCreator (memoDBType, sysFileCMemo, dmModeReadWrite); + if (localDBP == NULL) return; + } + else + { + localDBP = dbP; + } + + // now set the backup bit on localDBP + DmOpenDatabaseInfo(localDBP, &dbID, NULL, NULL, &cardNo, NULL); + DmDatabaseInfo(cardNo, dbID, NULL, &attributes, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); + attributes |= dmHdrAttrBackup; + DmSetDatabaseInfo(cardNo, dbID, NULL, &attributes, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); + + // close database if necessary + if (dbP == NULL) + { + DmCloseDatabase(localDBP); + } +} + +/*********************************************************************** + * + * FUNCTION: CreateDefaultDatabase + * + * DESCRIPTION: This routine creates the default database from the + * saved image in a resource in the application. + * + * PARAMETERS: none + * + * RETURNED: 0 - if no error + * otherwise appropriate error value + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * vivek 8/17/00 Initial Revision + * + ***********************************************************************/ +static Err CreateDefaultDatabase(void) +{ + MemHandle resH; + DmOpenRef dbP; + Err error = errNone; + + // Attempt to get our default data image and create our + // database. + resH = DmGet1Resource(sysResTDefaultDB, sysResIDDefaultDB); + if (resH) + { + error = DmCreateDatabaseFromImage(MemHandleLock(resH)); + + if (!error) + { + MemHandleUnlock(resH); + DmReleaseResource(resH); + + // Set the bakcup bit on the newly created DB. + SetDBBackupBit(NULL); + } + } + + // If there is no default data, or we had a problem creating it, + // then attempt to create an empty database. + if (!resH || error) + { + error = MemoGetDatabase (&dbP, dmModeReadWrite); + + if (!error) + DmCloseDatabase(dbP); + + } + return error; +} + +/* TRG */ +/*********************************************************************** + * + * FUNCTION: ToolsVgaModeSupported + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + * REVISION HISTORY: + * + ***********************************************************************/ +static Boolean ToolsVgaModeSupported(void) +{ + VgaScreenModeType mode; + VgaRotateModeType rotate; + + if (vgaExists) + { + VgaGetScreenMode(&mode, &rotate); + + return (mode == screenMode1To1); + } + + return false; +} +/* end TRG */ + +/*********************************************************************** + * + * FUNCTION: StartApplication + * + * DESCRIPTION: This routine opens the application's database, loads the + * saved-state information and initializes global variables. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * grant 4/6/99 Moved code to set backup bit into SetDBBackupBit + * jmp 10/2/99 Call new MemoGetDataBase() to create database + * if it doesn't already exist. + * + ***********************************************************************/ +static UInt16 StartApplication (void) +{ + Err err = 0; + UInt16 attr; + UInt16 mode; + UInt32 uniqueID; + UInt32 currentRecordID = 0; + Boolean recordFound = false; + UInt32 vgaVersion; + +/* TRG */ + if (_TRGVGAFeaturePresent(&vgaVersion)) + { + VgaRotateModeType rotate; + vgaExists = true; + + VgaGetScreenMode(NULL, &rotate); + VgaSetScreenMode(screenMode1To1, rotate); + } + else + vgaExists = false; +/* end TRG */ + + // Determime if secert record should be shown. + PrivateRecordVisualStatus = (privateRecordViewEnum)PrefGetPreference (prefShowPrivateRecords); + if (PrivateRecordVisualStatus == hidePrivateRecords) + { + mode = dmModeReadWrite; + } + else + { + mode = dmModeReadWrite | dmModeShowSecret; + } + + // Find the application's data file. If it doesn't exist, create it. + err = MemoGetDatabase (&MemoDB, mode); + if (err) + return err; + + // Read the preferences. + MemoLoadPrefs(¤tRecordID); + + // The file may have been synchronized since the last time we used it, + // check that the current record and the currrent category still + // exist. Also, if secret records are being hidden, check if the + // the current record is marked secret. + CategoryGetName (MemoDB, CurrentCategory, CategoryName); + if (*CategoryName == 0) + { + CurrentCategory = dmAllCategories; + ShowAllCategories = true; + } + + if ( DmQueryRecord (MemoDB, CurrentRecord) != 0) + { + DmRecordInfo (MemoDB, CurrentRecord, &attr, &uniqueID, NULL); + recordFound = (uniqueID == currentRecordID) && + ((PrivateRecordVisualStatus == showPrivateRecords) || + (!(attr & dmRecAttrSecret))); + } + + if (! recordFound) + { + TopVisibleRecord = 0; + CurrentRecord = noRecordSelected; + CurrentView = ListView; + EditScrollPosition = 0; + } + + if (ShowAllCategories) + MemosInCategory = DmNumRecordsInCategory (MemoDB, dmAllCategories); + else + MemosInCategory = DmNumRecordsInCategory (MemoDB, CurrentCategory); + + return (err); +} + + +/*********************************************************************** + * + * FUNCTION: StopApplication + * + * DESCRIPTION: This routine closes the application's database + * and saves the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static void StopApplication (void) +{ + UInt16 scrollPosition = 0; + FormPtr frm; + FieldPtr fld; + + + // If we are in the "edit view", get the current scroll position. + if ((CurrentView == EditView) && (CurrentRecord != noRecordSelected)) + { + frm = FrmGetFormPtr (EditView); + fld = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, EditMemoField)); + scrollPosition = FldGetScrollPosition (fld); + } + + // Close all open forms, this will force any unsaved data to + // be written to the database. + FrmCloseAllForms (); + + // Write the preferences / saved-state information. + MemoSavePrefs(scrollPosition); + + // Close the application's data file. + DmCloseDatabase (MemoDB); +} + + +/*********************************************************************** + * + * FUNCTION: SyncNotification + * + * DESCRIPTION: This routine is an entry point of the memo application. + * It is called when the application's database is + * synchronized. This routine will resort the database. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/17/96 Initial Revision + * jmp 10/02/99 Changed call to DmOpenDatabaseByTypeCreator() to + * MemoGetDatabase(). + * + ***********************************************************************/ +static void SyncNotification (void) +{ + DmOpenRef dbP; + Err err; + + // Find the application's data file. + err = MemoGetDatabase(&dbP, dmModeReadWrite); + if (err) + return; + + // Resort the database. + MemoSort (dbP); + + DmCloseDatabase (dbP); +} + + +/*********************************************************************** + * + * FUNCTION: RegisterLocaleChangingNotification + + * + * DESCRIPTION: Register for NotifyMgr notifications for locale chagning. + * DOLATER : This function and the one above can be rolled into one. + * + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * vivek 8/01/00 Initial Revision + * + ***********************************************************************/ +void RegisterLocaleChangingNotification(void) +{ + UInt16 cardNo; + LocalID dbID; + Err err; + + err = SysCurAppDatabase(&cardNo, &dbID); + ErrNonFatalDisplayIf(err != errNone, "can't get app db info"); + if(err == errNone) + { + err = SysNotifyRegister(cardNo, dbID, sysNotifyLocaleChangedEvent, + NULL, sysNotifyNormalPriority, NULL); + +#if EMULATION_LEVEL == EMULATION_NONE + ErrNonFatalDisplayIf((err != errNone) && (err != sysNotifyErrDuplicateEntry), "can't register"); +#endif + + } + + return; +} + +/*********************************************************************** + * + * FUNCTION: RegisterData + * + * DESCRIPTION: Register with the Exchange Manager to receive .txt and + * text/plain. + * + * PARAMETERS: none + * + * RETURNED: nothing + * + * HISTORY: + * 7/28/00 dje Initial Revision. + * + ***********************************************************************/ +static void RegisterData(void) +{ + MemHandle resH; + void *desc; + + resH = DmGetResource(strRsc, ExgDescriptionStr); + desc = MemHandleLock(resH); + + ExgRegisterDatatype(sysFileCMemo, exgRegExtensionID, memoExtension, desc, 0); + ExgRegisterDatatype(sysFileCMemo, exgRegTypeID, memoMIMEType, desc, 0); + + MemHandleUnlock(resH); + DmReleaseResource(resH); +} + + +/*********************************************************************** + * + * FUNCTION: MemoLoadPrefs + * + * DESCRIPTION: Load the preferences and do any fixups needed for backwards + * and forwards compatibility + * + * PARAMETERS: currentRecordID <- returned record id from preferences. + * + * RETURNED: nothing + * + * HISTORY: + * 01/13/98 BGT Initial Revision. + * 08/04/99 kwk Cleaned up setting EditFont/ListFont from prefs. + * + ***********************************************************************/ +void MemoLoadPrefs(UInt32* currentRecordID) +{ + MemoPreferenceType prefs; + UInt16 prefsSize; + Int16 prefsVersion; + Boolean needFontInfo = false; + + // Read the preferences / saved-state information. + prefsSize = sizeof (MemoPreferenceType); + prefsVersion = PrefGetAppPreferences (sysFileCMemo, memoPrefID, &prefs, &prefsSize, true); + if (prefsVersion > memoPrefsVersionNum) { + prefsVersion = noPreferenceFound; + } + + if (prefsVersion > noPreferenceFound) + { + // Try to carry forward the version 2 preferences for the font + if (prefsVersion < 2) + { + // No font data in original prefs + needFontInfo = true; + } + else if (prefsVersion == 2) + { + prefs.editFont = prefs.v20editFont; + prefs.listFont = prefs.v20listFont; + + // Use the 'better' large font if we've got it, since version 2 + // prefs would have been created on an older version of the OS + // which didn't have the largeBoldFont available. + if (prefs.editFont == largeFont) + prefs.editFont = largeBoldFont; + + if (prefs.listFont == largeFont) + prefs.listFont = largeBoldFont; + } + + TopVisibleRecord = prefs.topVisibleRecord; + CurrentRecord = prefs.currentRecord; + CurrentView = prefs.currentView; + CurrentCategory = prefs.currentCategory; + EditScrollPosition = prefs.editScrollPosition; + ShowAllCategories = prefs.showAllCategories; + SaveBackup = prefs.saveBackup; + *currentRecordID = prefs.currentRecordID; + } + else + { + needFontInfo = true; + } + + // If the prefs didn't supply us with font info, we'll need to get it ourselves. + if (needFontInfo) + { + UInt32 defaultFont; + FtrGet(sysFtrCreator, sysFtrDefaultFont, &defaultFont); +/* TRG */ + /* the default font feature is for 160x160 apps, + we need to convert to Vga font. */ + if (vgaExists) + defaultFont = VgaBaseToVgaFont(defaultFont); +/* end TRG */ + EditFont = (FontID)defaultFont; + ListFont = (FontID)defaultFont; + } + else + { + EditFont = prefs.editFont; + ListFont = prefs.listFont; + } + + // The first time this app starts register to handle .txt and text/plain. + if (prefsVersion != memoPrefsVersionNum) + RegisterData(); +} + + +/*********************************************************************** + * + * FUNCTION: MemoSavePrefs + * + * DESCRIPTION: Save the preferences and do any fixups needed for backwards + * and forwards compatibility + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * BGT 1/13/98 Initial Revision + * + ***********************************************************************/ +void MemoSavePrefs(UInt16 scrollPosition) +{ + MemoPreferenceType prefs; + UInt32 uniqueID; + + // Write the preferences / saved-state information. + prefs.topVisibleRecord = TopVisibleRecord; + prefs.currentRecord = CurrentRecord; + prefs.currentView = CurrentView; + prefs.currentCategory = CurrentCategory; + prefs.showAllCategories = ShowAllCategories; + prefs.editScrollPosition = scrollPosition; + prefs.saveBackup = SaveBackup; + prefs.editFont = EditFont; + prefs.listFont = ListFont; + + prefs.v20editFont = stdFont; + prefs.v20listFont = stdFont; + + // Clear reserved fields so prefs don't look "different" just from stack garbage! + prefs.reserved1 = 0; + prefs.reserved2 = 0; + + // Get the current record's unique id and save it with the state + // information. + if ( DmQueryRecord (MemoDB, CurrentRecord) != 0) + { + DmRecordInfo (MemoDB, CurrentRecord, NULL, &uniqueID, NULL); + prefs.currentRecordID = uniqueID; + } + else + prefs.currentRecordID = noRecordSelectedID; + + // Write the state information. + PrefSetAppPreferences (sysFileCMemo, memoPrefID, memoPrefsVersionNum, &prefs, + sizeof (MemoPreferenceType), true); + + +} + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static void * GetObjectPtr (UInt16 objectID) +{ + FormPtr frm; + + frm = FrmGetActiveForm (); + return (FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, objectID))); + +} + +/*********************************************************************** + * + * FUNCTION: GetFocusObjectPtr + * + * DESCRIPTION: This routine returns a pointer to the field object, in + * the current form, that has the focus. + * + * PARAMETERS: nothing + * + * RETURNED: pointer to a field object or NULL of there is no fucus + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static FieldPtr GetFocusObjectPtr (void) +{ + FormPtr frm; + UInt16 focus; + + frm = FrmGetActiveForm (); + focus = FrmGetFocus (frm); + if (focus == noFocus) + return (NULL); + + return (FrmGetObjectPtr (frm, focus)); +} + + +/*********************************************************************** + * + * FUNCTION: SeekRecord + * + * DESCRIPTION: Given the index of a 'to do' record, this routine scans + * forwards or backwards for displayable 'to do' records. + * + * PARAMETERS: indexP - pointer to the index of a record to start from; + * the index of the record sought is returned in + * this parameter. + * + * offset - number of records to skip: + * 0 - mean seek from the current record to the + * next display record, if the current record is + * a displayable record, its index is retuned. + * 1 - mean seek foreward, skipping one displayable + * record + * -1 - menas seek backwards, skipping one + * displayable record + * + * + * RETURNED: false is return if a displayable record was not found. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/5/95 Initial Revision + * + ***********************************************************************/ +static Boolean SeekRecord (UInt16 * indexP, Int16 offset, Int16 direction) +{ + DmSeekRecordInCategory (MemoDB, indexP, offset, direction, CurrentCategory); + if (DmGetLastErr()) return (false); + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: ChangeCategory + * + * DESCRIPTION: This routine updates the global varibles that keep track + * of category information. + * + * PARAMETERS: category - new category (index) + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 3/10/95 Initial Revision + * + ***********************************************************************/ +static void ChangeCategory (UInt16 category) +{ + if (ShowAllCategories) + MemosInCategory = DmNumRecordsInCategory (MemoDB, dmAllCategories); + else + MemosInCategory = DmNumRecordsInCategory (MemoDB, category); + + CurrentCategory = category; + TopVisibleRecord = 0; +/* TRG */ + selectedItem = -1; +/* end TRG */ +} + + +/*********************************************************************** + * + * FUNCTION: DrawMemoTitle + * + * DESCRIPTION: This routine draws the title of the specified memo. + * + * PARAMETERS: memo - pointer to a memo + * x - draw position + * y - draw position + * width - maximum width to draw. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 04/18/95 Initial Revision + * roger 07/27/95 Combined both cases + * kwk 05/15/99 Use Int'l code for truncation of title. + * + ***********************************************************************/ +static void DrawMemoTitle (Char * memo, Int16 x, Int16 y, Int16 width) +{ + Char * ptr = StrChr (memo, linefeedChr); + UInt16 titleLen = (ptr == NULL ? StrLen (memo) : (UInt16) (ptr - memo)); + if (FntWidthToOffset (memo, titleLen, width, NULL, NULL) == titleLen) + { + WinDrawChars (memo, titleLen, x, y); + } + else + { + Int16 titleWidth; + titleLen = FntWidthToOffset (memo, titleLen, width - FntCharWidth (chrEllipsis), NULL, &titleWidth); + WinDrawChars (memo, titleLen, x, y); + WinDrawChar (chrEllipsis, x + titleWidth, y); + } +} + + +/*********************************************************************** + * + * FUNCTION: ReplaceTwoColors + * + * DESCRIPTION: This routine does a selection or deselection effect by + * replacing foreground and background colors with a new pair + * of colors. In order to reverse the process, you must pass + * the colors in the opposite order, so that the current + * and new colors are known to this routine. This routine + * correctly handling the cases when two or more of these + * four colors are the same, but it requires that the + * affected area of the screen contains neither of the + * given NEW colors, unless these colors are the same as + * one of the old colors. + * + * PARAMETERS: rP - pointer to a rectangle to 'invert' + * cornerDiam - corner diameter + * oldForeground - UI color currently used for foreground + * oldBackground - UI color currently used for background + * newForeground - UI color that you want for foreground + * newBackground - UI color that you want for background + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * peter 05/19/00 Initial Revision + * + ***********************************************************************/ +static void ReplaceTwoColors (const RectangleType *rP, UInt16 cornerDiam, + UIColorTableEntries oldForeground, UIColorTableEntries oldBackground, + UIColorTableEntries newForeground, UIColorTableEntries newBackground) +{ + UInt8 oldForegroundIndex = UIColorGetTableEntryIndex(oldForeground); + UInt8 oldBackgroundIndex = UIColorGetTableEntryIndex(oldBackground); + UInt8 newForegroundIndex = UIColorGetTableEntryIndex(newForeground); + UInt8 newBackgroundIndex = UIColorGetTableEntryIndex(newBackground); + + WinPushDrawState(); + WinSetDrawMode(winSwap); + WinSetPatternType (blackPattern); + + if (newBackgroundIndex == oldForegroundIndex) + if (newForegroundIndex == oldBackgroundIndex) + { + // Handle the case when foreground and background colors change places, + // such as on black and white systems, with a single swap. + WinSetBackColor(oldBackgroundIndex); + WinSetForeColor(oldForegroundIndex); + WinPaintRectangle(rP, cornerDiam); + } + else + { + // Handle the case when the old foreground and the new background + // are the same, using two swaps. + WinSetBackColor(oldForegroundIndex); + WinSetForeColor(oldBackgroundIndex); + WinPaintRectangle(rP, cornerDiam); + WinSetBackColor(oldBackgroundIndex); + WinSetForeColor(newForegroundIndex); + WinPaintRectangle(rP, cornerDiam); + } + else if (oldBackgroundIndex == newForegroundIndex) + { + // Handle the case when the old background and the new foreground + // are the same, using two swaps. + WinSetBackColor(newForegroundIndex); + WinSetForeColor(oldForegroundIndex); + WinPaintRectangle(rP, cornerDiam); + WinSetBackColor(newBackgroundIndex); + WinSetForeColor(oldForegroundIndex); + WinPaintRectangle(rP, cornerDiam); + } + else + { + // Handle the case when no two colors are the same, as is typically the case + // on color systems, using two swaps. + WinSetBackColor(oldBackgroundIndex); + WinSetForeColor(newBackgroundIndex); + WinPaintRectangle(rP, cornerDiam); + WinSetBackColor(oldForegroundIndex); + WinSetForeColor(newForegroundIndex); + WinPaintRectangle(rP, cornerDiam); + } + + WinPopDrawState(); +} + + +/*********************************************************************** + * + * FUNCTION: Search + * + * DESCRIPTION: This routine searchs the memo database for records + * containing the string passed. + * + * PARAMETERS: findParams - text search parameter block + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 04/18/95 Initial Revision + * roger 07/26/95 converted to modern search mechanism + * kwk 05/15/99 Use TxtFindString, save match length in custom param. + * jmp 10/01/99 Changed call to DmOpenDatabaseByTypeCreator() to + * MemoGetDatabase(). + * jmp 10/21/99 Previous change caused bug #22965, but previous code + * caused yet another problem. Fixed #22965 by using + * everyone else's way: Call DmGetNextDatabaseByTypeCreator() + * first, then call DmOpenDatabase() if all is well. + * + ***********************************************************************/ +static void Search (FindParamsPtr findParams) +{ + UInt16 pos; + Char * header; + UInt16 recordNum; + MemHandle recordH; + MemHandle headerStringH; + RectangleType r; + Boolean done; + Boolean match; + DmOpenRef dbP; + DmSearchStateType searchState; + Err err; + UInt16 cardNo = 0; + LocalID dbID; + MemoDBRecordPtr memoRecP; + UInt32 longPos; + UInt16 matchLength; + + // Find the application's data file. + err = DmGetNextDatabaseByTypeCreator (true, &searchState, memoDBType, + sysFileCMemo, true, &cardNo, &dbID); + if (err) + { + findParams->more = false; + return; + } + + // Open the Memo database. + dbP = DmOpenDatabase(cardNo, dbID, findParams->dbAccesMode); + if (!dbP) + { + findParams->more = false; + return; + } + + // Display the heading line. + headerStringH = DmGetResource(strRsc, FindMemoHeaderStr); + header = MemHandleLock(headerStringH); + done = FindDrawHeader(findParams, header); + MemHandleUnlock(headerStringH); + DmReleaseResource(headerStringH); + if (done) + goto Exit; + + // Search the memos for the "find" string. + recordNum = findParams->recordNum; + while (true) + { + // Because applications can take a long time to finish a find when + // the result may be on the screen or for other reasons, users like + // to be able to stop the find. Stop the find if an event is pending. + // This stops if the user does something with the device. Because + // this call slows winDown the search we perform it every so many + // records instead of every record. The response time should still + // be Int16 without introducing much extra work to the search. + + // Note that in the implementation below, if the next 16th record is + // secret the check doesn't happen. Generally this shouldn't be a + // problem since if most of the records are secret then the search + // won't take long anyways! + if ((recordNum & 0x000f) == 0 && // every 16th record + EvtSysEventAvail(true)) + { + // Stop the search process. + findParams->more = true; + break; + } + + recordH = DmQueryNextInCategory (dbP, &recordNum, dmAllCategories); + + // Have we run out of records? + if (! recordH) + { + findParams->more = false; + break; + } + + memoRecP = MemHandleLock (recordH); + + // Search for the string passed, if it's found display the title + // of the memo. + match = TxtFindString (&(memoRecP->note), findParams->strToFind, &longPos, &matchLength); + pos = longPos; + + if (match) + { + // Add the match to the find paramter block, if there is no room to + // display the match the following function will return true. + done = FindSaveMatch (findParams, recordNum, pos, 0, matchLength, cardNo, dbID); + + if (!done) + { + // Get the bounds of the region where we will draw the results. + FindGetLineBounds (findParams, &r); + + // Display the title of the description. + DrawMemoTitle (&(memoRecP->note), r.topLeft.x+1, r.topLeft.y, + r.extent.x-2); + + findParams->lineNumber++; + } + } + + MemHandleUnlock(recordH); + if (done) break; + + recordNum++; + } + +Exit: + DmCloseDatabase (dbP); +} + + +/*********************************************************************** + * + * FUNCTION: GoToItem + * + * DESCRIPTION: This routine is an entry point of the memo application. + * It is generally called as the result of hitting a + * "Go to" button in the text search dialog. The record + * identifies by the parameter block passed will be display, + * with the character range specified highlighted. + * + * PARAMETERS: goToParams - parameter block that identifies the record to + * display. + * launchingApp - true if the application is being launched. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/06/95 Initial Revision + * roger 07/26/95 converted to modern search mechanism + * kwk 05/15/99 Use saved match length in matchCustom field, so + * that it works with Japanese. + * + ***********************************************************************/ +static void GoToItem (GoToParamsPtr goToParams, Boolean launchingApp) +{ + UInt16 recordNum; + UInt16 attr; + UInt32 uniqueID; + EventType event; + + + recordNum = goToParams->recordNum; + if (!DmQueryRecord(MemoDB, recordNum)) + { + // Record isn't accessible. This can happen when receiving a beam while in the + // Memo New form. This prevents a fatal alert, but doesn't fix the off-by-one + // error. (See DOLATER in sysAppLaunchCmdExgReceiveData case.) + if (!SeekRecord(&recordNum, 0, dmSeekBackward)) + if (!SeekRecord(&recordNum, 0, dmSeekForward)) + { + FrmAlert(secGotoInvalidRecordAlert); + FrmGotoForm(ListView); + return; + } + } + DmRecordInfo(MemoDB, recordNum, &attr, &uniqueID, NULL); + if ((attr & dmRecAttrSecret) && PrivateRecordVisualStatus == maskPrivateRecords) + { + FrmAlert(secGotoInvalidRecordAlert); + FrmGotoForm(ListView); + return; + } + + // Make the item the first item displayed. + TopVisibleRecord = recordNum; + + // Change the current category if necessary. + if (CurrentCategory != dmAllCategories) + { + ChangeCategory (attr & dmRecAttrCategoryMask); + } + + + // If the application is already running, close all open forms. This + // may cause in the database record to be reordered, so we'll find the + // records index by its unique id. + if (! launchingApp) + { + FrmCloseAllForms (); + DmFindRecordByID (MemoDB, uniqueID, &recordNum); + } + + + // Send an event to goto a form and select the matching text. + MemSet (&event, sizeof(EventType), 0); + + event.eType = frmLoadEvent; + event.data.frmLoad.formID = EditView; + EvtAddEventToQueue (&event); + + event.eType = frmGotoEvent; + event.data.frmGoto.recordNum = recordNum; + event.data.frmGoto.matchPos = goToParams->matchPos; + event.data.frmGoto.matchLen = goToParams->matchCustom; + event.data.frmGoto.matchFieldNum = goToParams->matchFieldNum; + event.data.frmGoto.formID = EditView; + EvtAddEventToQueue (&event); + + CurrentView = EditView; +} + + +/*********************************************************************** + * + * FUNCTION: CreateRecord + * + * DESCRIPTION: This routine creates a new memo record. + * + * PARAMETERS: none + * + * RETURNED: true if the record was sucessfully created. + * + * HISTORY: + * 10/03/95 art Created by Art Lamb. + * 10/11/95 kcr Set initial graffiti upshift. + * 09/25/99 kwk No longer take initial character parameter. + * 10/29/99 jmp Eliminate compiler's "has no side-effect" warning. + * + ***********************************************************************/ +static Boolean CreateRecord (void) +{ + MemPtr p; + Char zero = 0; + UInt32 offset = 0; + UInt16 attr = dmUnfiledCategory; + UInt16 index; + MemHandle memoRec; + + // Add a new record at the end of the database. + index = DmNumRecords (MemoDB); + memoRec = DmNewRecord (MemoDB, &index, newMemoSize); + + // If the allocate failed, display a warning. + if (! memoRec) + { + FrmAlert (DeviceFullAlert); + return (false); + } + + + p = MemHandleLock (memoRec); + + // Null terminate the new memo string. + DmWrite (p, offset, &zero, sizeof(Char)); + + MemPtrUnlock (p); + + // Set the category of the new record to the current category. + DmRecordInfo (MemoDB, index, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + if (CurrentCategory != dmAllCategories) + attr |= CurrentCategory; + DmSetRecordInfo (MemoDB, index, &attr, NULL); + + CurrentRecord = index; + MemosInCategory++; + + DmReleaseRecord (MemoDB, index, true); + + + // Set the graffiti state for an initial upshift of the + // first character of a new memo. + //GrfSetState (false, false, true); + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: DeleteRecord + * + * DESCRIPTION: This routine deletes the specified memo + * + * PARAMETERS: index - index of record to delete + * + * RETURNED: true if the record was sucessfully deleted. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/30/95 Initial Revision + * + ***********************************************************************/ +static Boolean DeleteRecord (UInt16 index) +{ + UInt16 ctlIndex; + UInt16 buttonHit; + FormPtr alert; + Boolean saveBackup; + + // Display an alert to confirm the delete operation. + alert = FrmInitForm (DeleteMemoDialog); + +/* TRG */ + if (vgaExists) + { + VgaScreenModeType mode; + VgaRotateModeType rotation; + + VgaGetScreenMode(&mode, &rotation); + + if((mode == screenMode1To1) && ((rotation == rotateModeNone) || (rotation == rotateMode180))) + VgaFormModify(alert, vgaFormModify160To240); + } +/* end TRG */ + + + ctlIndex = FrmGetObjectIndex (alert, DeleteMemoSaveBackup); + FrmSetControlValue (alert, ctlIndex, SaveBackup); + buttonHit = FrmDoDialog (alert); + saveBackup = FrmGetControlValue (alert, ctlIndex);; + + FrmDeleteForm (alert); + + if (buttonHit != DeleteMemoOk) + return (false); + + SaveBackup = saveBackup; + + // Delete or archive the record. + if (SaveBackup) + DmArchiveRecord (MemoDB, index); + else + DmDeleteRecord (MemoDB, index); + DmMoveRecord (MemoDB, index, DmNumRecords (MemoDB)); + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: SelectFont + * + * DESCRIPTION: This routine handles selection of a font in the List + * View. + * + * PARAMETERS: currFontID - id of current font + * + * RETURNED: id of new font + * + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/10/97 Initial Revision + * + ***********************************************************************/ +static FontID SelectFont (FontID currFontID) +{ + UInt16 formID; + FontID fontID; + + formID = (FrmGetFormId (FrmGetActiveForm ())); + + // Call the OS font selector to get the id of a font. + fontID = FontSelect (currFontID); + +/* TRG */ + if (vgaExists && (formID == ListView)) + { + FormPtr frm; + frm = FrmGetActiveForm(); + VgaTableUseBaseFont(FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, ListTable)), + !VgaIsVgaFont(fontID)); + } +/* end TRG */ + + + if (fontID != currFontID) + FrmUpdateForm (formID, updateFontChanged); + + return (fontID); +} + +/* TRG */ +// utility functions to move and resize form objects for the virtual silk screen +static void PrvMoveObject(FormPtr frmP, UInt16 objIndex, Coord x_diff, Coord y_diff, Boolean draw) +{ + Coord old_x, old_y; + + if(draw) + FrmHideObject(frmP, objIndex); + + FrmGetObjectPosition(frmP, objIndex, &old_x, &old_y); + FrmSetObjectPosition(frmP, objIndex, old_x + x_diff, old_y + y_diff); + + if(draw) + FrmShowObject(frmP, objIndex); +} + +static void PrvResizeObject(FormPtr frmP, UInt16 objIndex, Coord x_diff, Coord y_diff, Boolean draw) +{ + RectangleType r; + + if(draw) + FrmHideObject(frmP, objIndex); + + FrmGetObjectBounds(frmP, objIndex, &r); + r.extent.x += x_diff; + r.extent.y += y_diff; + FrmSetObjectBounds(frmP, objIndex, &r); + + if(draw) + FrmShowObject(frmP, objIndex); +} + +static UInt16 PrvFrmGetGSI(FormPtr frmP) +{ + UInt16 retval = -1; + UInt16 i, num; + + num = FrmGetNumberOfObjects(frmP); + + for (i=0;ieType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case PreferencesOkButton: + updateCode = PreferencesApply (); + FrmReturnToForm (ListView); + if (updateCode) + FrmUpdateForm (ListView, updateCode); + handled = true; + break; + + case PreferencesCancelButton: + FrmReturnToForm (ListView); + handled = true; + break; + + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); + PreferencesInit (); + FrmDrawForm (frm); + handled = true; + } + + return (handled); +} + + +#pragma mark ---- +/*********************************************************************** + * + * FUNCTION: DetailsSelectCategory + * + * DESCRIPTION: This routine handles selection, creation and deletion of + * categories form the Details Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: index of the selected category. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 03/10/95 Initial Revision + * gap 08/13/99 Update to use new constant categoryDefaultEditCategoryString. + * + ***********************************************************************/ +static UInt16 DetailsSelectCategory (UInt16* category) +{ + Char* name; + Boolean categoryEdited; + + name = (Char *)CtlGetLabel (GetObjectPtr (DetailsCategoryTrigger)); + + categoryEdited = CategorySelect (MemoDB, FrmGetActiveForm (), + DetailsCategoryTrigger, DetailsCategoryList, + false, category, name, 1, categoryDefaultEditCategoryString); + + return (categoryEdited); +} + + + +/*********************************************************************** + * + * FUNCTION: DetailsApply + * + * DESCRIPTION: This routine applies the changes made in the Details Dialog. + * + * PARAMETERS: category - new catagory + * + * RETURNED: code which indicates how the memo was changed, this + * code is sent as the update code, in the frmUpdate event. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 3/10/95 Initial Revision + * kcr 10/9/95 added 'private records' alert. + * + ***********************************************************************/ +static UInt16 DetailsApply (UInt16 category, Boolean categoryEdited) +{ + UInt16 attr; + UInt16 updateCode = 0; + Boolean dirty = false; + Boolean secret; + + + // Get the category and secret attribute of the current record. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + + // Get the current setting of the secret checkbox. + secret = (CtlGetValue (GetObjectPtr (DetailsSecretCheckbox)) != 0); + + // Has the secret attribute was been changed? + if (((attr & dmRecAttrSecret) == dmRecAttrSecret) != secret) + { + if (secret) + { + attr |= dmRecAttrSecret; + if (PrivateRecordVisualStatus == showPrivateRecords) + FrmAlert (privateRecordInfoAlert); + } + else + attr &= ~dmRecAttrSecret; + dirty = true; + } + + + // Has the category been changed? + if (CurrentCategory != category) + { + attr &= ~dmRecAttrCategoryMask; + attr |= category; + dirty = true; + updateCode = updateCategoryChanged; + } + + + // If the current category was deleted, renamed, or merged with + // another category, then the list view needs to be redrawn. + if (categoryEdited) + { + CurrentCategory = category; + updateCode |= updateCategoryChanged; + } + + + if (dirty) + { + attr |= dmRecAttrDirty; + DmSetRecordInfo (MemoDB, CurrentRecord, &attr, NULL); + } + + return (updateCode); +} + + +/*********************************************************************** + * + * FUNCTION: DetailsInit + * + * DESCRIPTION: This routine initializes the Details Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 3/10/95 Initial Revision + * + ***********************************************************************/ +static void DetailsInit (void) +{ + UInt16 attr; + UInt16 category; + Char* name; + Boolean secret; + ControlPtr ctl; + +/* TRG */ + PrvVgaAdjustModalForm(FrmGetActiveForm()); +/* end TRG */ + + // Get the category and secret attribute of the current record. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + category = attr & dmRecAttrCategoryMask; + secret = attr & dmRecAttrSecret; + + + // If the record is marked secret, turn on the secret checkbox. + ctl = GetObjectPtr (DetailsSecretCheckbox); + if (secret) + CtlSetValue (ctl, true); + else + CtlSetValue (ctl, false); + + + // Set the label of the category trigger. + ctl = GetObjectPtr (DetailsCategoryTrigger); + name = (Char *)CtlGetLabel (ctl); + CategoryGetName (MemoDB, category, name); + CategorySetTriggerLabel (ctl, name); +} + + +/*********************************************************************** + * + * FUNCTION: DetailsHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Details + * Dialog Box". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ + +static Boolean DetailsHandleEvent (EventType * event) +{ + static UInt16 category; + static Boolean categoryEdited; + + UInt16 updateCode; + FormPtr frm; + Boolean handled = false; + + if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case DetailsOkButton: + updateCode = DetailsApply (category, categoryEdited); + FrmReturnToForm (EditView); + if (updateCode) + FrmUpdateForm (EditView, updateCode); + handled = true; + break; + + case DetailsCancelButton: + if (categoryEdited) + FrmUpdateForm (EditView, updateCategoryChanged); + FrmReturnToForm (EditView); + handled = true; + break; + + case DetailsDeleteButton: + if ( EditViewDeleteRecord ()) + { + frm = FrmGetActiveForm(); + FrmEraseForm (frm); + FrmDeleteForm (frm); + FrmCloseAllForms (); + FrmGotoForm (ListView); + } + handled = true; + break; + + + case DetailsCategoryTrigger: + categoryEdited = DetailsSelectCategory (&category) || categoryEdited; + handled = true; + break; + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); + DetailsInit (); + FrmDrawForm (frm); + category = CurrentCategory; + categoryEdited = false; + handled = true; + } + + return (handled); +} + + +#pragma mark ---- +/*********************************************************************** + * + * FUNCTION: EditViewSetTitle + * + * DESCRIPTION: This routine formats and sets the title of the Edit View. + * If the Edit View is visible, the new title is drawn. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * HISTORY: + * 02/21/95 art Created by Art Labm. + * 08/31/00 kwk Re-wrote to use TxtParamString, versus hard-coding + * order of elements using '#' in template string. + * 11/22/00 FPa Added DmReleaseResource() + * 11/28/00 CS Use FrmSetTitle instead of FrmCopyTitle and leave it + * allocated until EditViewExit. This removes the + * dependency that the form title in the resource has to + * be wide enough to accomodate the longest possible title. + * 11/30/00 FPa Fixed bug #46014 + * + ***********************************************************************/ +static void EditViewSetTitle (void) +{ + MemHandle titleTemplateH; + Char * titleTemplateP; + Char * title; + Char * oldTitle; + Char posStr[maxStrIToALen + 1]; + Char totalStr[maxStrIToALen + 1]; + UInt16 pos; + FormType* formP; + + formP = FrmGetFormPtr(EditView); + + // If there's an old title, we must free it; nevertheless FrmSetTitle() uses the old title -> we need to free it *after* having called FrmSetTitle() + oldTitle = (Char*)FrmGetTitle(formP); + + // Format as strings, the memo's postion within its category, and + // the total number of memos in the category. + pos = DmPositionInCategory( MemoDB,CurrentRecord, ShowAllCategories ? dmAllCategories : CurrentCategory); + StrIToA(posStr, pos+1); + StrIToA(totalStr, MemosInCategory); + + titleTemplateH = DmGetResource(strRsc, EditTitleString); + titleTemplateP = MemHandleLock(titleTemplateH); + title = TxtParamString(titleTemplateP, posStr, totalStr, NULL, NULL); // title needs to be freed + + FrmSetTitle(formP, title); + + if (oldTitle != 0) + MemPtrFree(oldTitle); + + MemHandleUnlock(titleTemplateH); + DmReleaseResource(titleTemplateH); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewSelectCategory + * + * DESCRIPTION: This routine recategorizes a memo in the "Edit View". + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * The following global variables are modified: + * CurrentCategory + * CategoryName + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/03/95 Initial Revision + * grant 86/29/99 Adjust MemosInCategory when the record is private + * gap 08/13/99 Update to use new constant categoryDefaultEditCategoryString. + * + ***********************************************************************/ +static void EditViewSelectCategory (void) +{ + UInt16 attr; + FormPtr frm; + UInt16 category; + Boolean categorySelected; + Boolean categoryEdited; + + + // Get the current category. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + category = attr & dmRecAttrCategoryMask; + + // Process the category popup list. + frm = FrmGetActiveForm(); + categoryEdited = CategorySelect (MemoDB, frm, EditCategoryTrigger, + EditCategoryList, false, &category, CategoryName, 1, categoryDefaultEditCategoryString); + + + categorySelected = category != (attr & dmRecAttrCategoryMask); + + // If a different category was selected, set the category field + // in the new record. + if (categorySelected) + { + // Change the category of the record. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= category | dmRecAttrDirty; + DmSetRecordInfo (MemoDB, CurrentRecord, &attr, NULL); + } + + + // If the current category was changed or the name of the category + // was edited, draw the title. + if (categoryEdited || categorySelected) + { + ChangeCategory (category); + + // If the record is secret and secret records are hidden, then the record isn't + // accounted for by MemosInCategory. Adjust it, and EditViewSaveRecord will + // adjust when done with the record. + if ((PrivateRecordVisualStatus == hidePrivateRecords) && (attr & dmRecAttrSecret)) + MemosInCategory++; + + EditViewSetTitle (); + } +} + + +/*********************************************************************** + * + * FUNCTION: EditViewUpdateScrollBar + * + * DESCRIPTION: This routine update the scroll bar. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 07/01/96 Initial Revision + * gap 11/02/96 Fix case where field and scroll bars get out of sync + * + ***********************************************************************/ +static void EditViewUpdateScrollBar () +{ + UInt16 scrollPos; + UInt16 textHeight; + UInt16 fieldHeight; + Int16 maxValue; + FieldPtr fld; + ScrollBarPtr bar; + + fld = GetObjectPtr (EditMemoField); + bar = GetObjectPtr (EditMemoScrollBar); + + FldGetScrollValues (fld, &scrollPos, &textHeight, &fieldHeight); + + if (textHeight > fieldHeight) + { + // On occasion, such as after deleting a multi-line selection of text, + // the display might be the last few lines of a field followed by some + // blank lines. To keep the current position in place and allow the user + // to "gracefully" scroll out of the blank area, the number of blank lines + // visible needs to be added to max value. Otherwise the scroll position + // may be greater than maxValue, get pinned to maxvalue in SclSetScrollBar + // resulting in the scroll bar and the display being out of sync. + maxValue = (textHeight - fieldHeight) + FldGetNumberOfBlankLines (fld); + } + else if (scrollPos) + maxValue = scrollPos; + else + maxValue = 0; + + SclSetScrollBar (bar, scrollPos, 0, maxValue, fieldHeight-1); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewLoadRecord + * + * DESCRIPTION: This routine loads a memo record into the Edit View form. + * + * PARAMETERS: frm - pointer to the Edit View form + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * roger 6/24/99 Fixup MemosInCategory when the record is private + * peter 4/25/00 Add support for un-masking just the selected record. + * + ***********************************************************************/ +static void EditViewLoadRecord (FormPtr frm) +{ + UInt16 attr; + FieldPtr fld; + ControlPtr ctl; + MemHandle memoRec; + + Boolean capsLock, numLock, autoShifted; + UInt16 tempShift; + if ((GrfGetState(&capsLock, &numLock, &tempShift, &autoShifted) == 0) + && (autoShifted)) + { + GrfSetState(capsLock, numLock, false); + } + + // Get a pointer to the memo field. + fld = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, EditMemoField)); + + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + + // Get the current record. + memoRec = DmGetRecord (MemoDB, CurrentRecord); + ErrFatalDisplayIf ((! memoRec), "Bad record"); + + // Set the font used by the memo field. + FldSetFont (fld, EditFont); + + FldSetTextHandle (fld, memoRec); + FldSetScrollPosition (fld, EditScrollPosition); + + // Set the global variable that keeps track of the current category + // to the category of the current record. + CurrentCategory = attr & dmRecAttrCategoryMask; + + // If the record is secret and secret records are hidden, then the record isn't + // accounted for by MemosInCategory. Adjust it, and EditViewSaveRecord will + // adjust when done with the record. + if ((PrivateRecordVisualStatus == hidePrivateRecords) && (attr & dmRecAttrSecret)) + MemosInCategory++; + + // Set the view's title + EditViewSetTitle (); + + // Set the label that contains the note's category. + ctl = GetObjectPtr (EditCategoryTrigger); + CategoryGetName (MemoDB, CurrentCategory, CategoryName); + CategorySetTriggerLabel (ctl, CategoryName); + + EditViewUpdateScrollBar (); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewSaveRecord + * + * DESCRIPTION: This routine save a memo record to the memo database or + * deletes it if it's empty. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * kcr 11/16/95 use DmReleaseRecord to set dirty attribute + * jmp 9/29/99 Use FrmGetFormPtr() & FrmGetObjectIndex() instead of + * GetObjectPtr() because GetObjectPtr() calls FrmGetActiveForm(), + * and FrmGetActiveForm() may return a form that isn't the one we + * want when other forms are up when we are called. + * Fixes bug #22418. + * + ***********************************************************************/ +static void EditViewSaveRecord (void) +{ + UInt16 attr; + Char * ptr; + Boolean empty; + Boolean dirty; + FieldPtr fld; + FormPtr frm; + + // Find out if the field has been modified or if it's empty. + frm = FrmGetFormPtr (EditView); + fld = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, EditMemoField)); + ptr = FldGetTextPtr (fld); + dirty = FldDirty (fld); + empty = (*ptr == 0); + + FldReleaseFocus (fld); + + // Release any free space in the memo field. + FldCompactText (fld); + + // Clear the handle value in the field, otherwise the handle + // will be free when the form is disposed of. + FldSetTextHandle (fld, 0); + + // If there's data in an existing record, mark it dirty if + // necessary and release it. + if (! empty) + { + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + + if (PrivateRecordVisualStatus == hidePrivateRecords && (attr & dmRecAttrSecret)) + MemosInCategory--; + + DmReleaseRecord (MemoDB, CurrentRecord, dirty); + + // Move the current record to the correct sort position. + if (dirty) + MemoSortRecord (MemoDB, &CurrentRecord); + } + + // If the record is empty, delete it. + else + { + if (dirty) + { + DmDeleteRecord (MemoDB, CurrentRecord); + DmMoveRecord (MemoDB, CurrentRecord, DmNumRecords (MemoDB)); + } + else + DmRemoveRecord (MemoDB, CurrentRecord); + + CurrentRecord = noRecordSelected; + MemosInCategory--; + } + + ErrNonFatalDisplayIf(MemosInCategory > DmNumRecords(MemoDB), "invalid MemosInCategory"); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewChangeFont + * + * DESCRIPTION: This routine redisplay the memo in the font specified. + * It is called when one of the font push-buttons is presed. + * + * PARAMETERS: controlID - id to button pressed. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * kcr 10/20/95 handles two-button font change mechanism + * + ***********************************************************************/ +static void EditViewChangeFont (void) +{ + FontID fontID; + FieldPtr fld; + + // Call the OS font selector to get the id of a font. + fontID = FontSelect (EditFont); + + if (fontID != EditFont) + { + EditFont = fontID; + + // FldSetFont will redraw the field if it is visible. + fld = GetObjectPtr (EditMemoField); + FldSetFont (fld, fontID); + } + + EditViewUpdateScrollBar (); +} + + + +/*********************************************************************** + * + * FUNCTION: EditViewDeleteRecord + * + * DESCRIPTION: This routine deletes a memo record.. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static Boolean EditViewDeleteRecord (void) +{ + FormPtr frm; + FieldPtr fld; + Char * ptr; + UInt16 ctlIndex; + UInt16 buttonHit; + FormPtr alert; + Boolean empty; + Boolean saveBackup; + + frm = FrmGetFormPtr (EditView); + fld = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, EditMemoField)); + + // Find out if the field is empty. + ptr = FldGetTextPtr (fld); + empty = (*ptr == 0); + + // Display an alert to confirm the operation. + if (!empty) + { + alert = FrmInitForm (DeleteMemoDialog); + +/* TRG */ + PrvVgaAdjustModalForm(alert); +/* end TRG */ + + ctlIndex = FrmGetObjectIndex (alert, DeleteMemoSaveBackup); + FrmSetControlValue (alert, ctlIndex, SaveBackup); + buttonHit = FrmDoDialog (alert); + saveBackup = FrmGetControlValue (alert, ctlIndex);; + + FrmDeleteForm (alert); + + if (buttonHit == DeleteMemoCancel) + return (false); + + SaveBackup = saveBackup; + } + + // Clear the handle value in the field, otherwise the handle + // will be free when the form is disposed of. + FldSetTextHandle (fld, 0); + + // Delete or archive the record. + if (empty && (! FldDirty (fld))) + { + DmRemoveRecord (MemoDB, CurrentRecord); + } + else + { + if (SaveBackup) + DmArchiveRecord (MemoDB, CurrentRecord); + else + DmDeleteRecord (MemoDB, CurrentRecord); + DmMoveRecord (MemoDB, CurrentRecord, DmNumRecords (MemoDB)); + } + + MemosInCategory--; + CurrentRecord = noRecordSelected; + + ErrNonFatalDisplayIf(MemosInCategory > DmNumRecords(MemoDB), "invalid MemosInCategory"); + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: True if we handled the command. + * + * HISTORY: + * 03/29/95 art Created by Art Lamb. + * 11/07/95 kcr converted to common about box + * 08/21/99 kwk Deleted page top/bottom commands. + * 11/04/99 jmp To prevent other sublaunch issues, remind ourselves + * that we've sublaunched already into PhoneNumberLookup(). + * + ***********************************************************************/ +static Boolean EditViewDoCommand (UInt16 command) +{ + FieldPtr fld; + FormPtr frm; + Boolean handled = true; + + switch (command) + { + case NewMemoCmd: + EditViewSaveRecord (); + CreateRecord (); + EditScrollPosition = 0; + if (CurrentRecord != noRecordSelected) + { + EditViewLoadRecord (FrmGetActiveForm ()); + fld = GetFocusObjectPtr (); + if (fld) FldGrabFocus (fld); + } + else + FrmGotoForm (ListView); + break; + + case DeleteMemoCmd: + if (EditViewDeleteRecord ()) + FrmGotoForm (ListView); + break; + + case BeamMemoCmd: + case SendMemoCmd: + fld = GetObjectPtr (EditMemoField); + if (FldGetTextLength(fld) > 0) + { + EditViewSaveRecord(); + MemoSendRecord(MemoDB, CurrentRecord, (command == BeamMemoCmd ? exgBeamPrefix : exgSendPrefix)); + + // Redisplay the record. If the IR loopback mechanism sends the + // record to this app the goto action code closes all forms and + // send a frmGotoEvent. Load the record again only if the form + // still exits. + frm = FrmGetActiveForm (); + if (frm) + EditViewLoadRecord (frm); + } + else + FrmAlert(NoDataToBeamAlert); + break; + /* + case BeamCategoryCmd: + case SendCategoryCmd: + fld = GetObjectPtr (EditMemoField); + if (FldGetTextLength(fld) > 0) + { + FldCompactText (fld); + MemoSendCategory(MemoDB, CurrentCategory, (command == BeamCategoryCmd ? exgBeamPrefix : exgSendPrefix), (command == BeamCategoryCmd ? NoDataToBeamAlert : NoDataToSendAlert)); + } + else + FrmAlert(NoDataToBeamAlert); + break; + */ + + case EditOptionsFontsCmd: + EditViewChangeFont (); + break; + + case EditOptionPhoneLookupCmd: + fld = GetObjectPtr (EditMemoField); + if (fld) + { + InPhoneLookup = true; + PhoneNumberLookup (fld); + InPhoneLookup = false; + } + break; + + case EditOptionsAboutCmd: + AbtShowAbout (sysFileCMemo); + break; + + default: + handled = false; + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewScroll + * + * DESCRIPTION: This routine scrolls the memo edit view a page or a + * line at a time. + * + * PARAMETERS: linesToScroll - the number of lines to scroll, + * positive for winDown, + * negative for winUp + * updateScrollbar - force a scrollbar update? + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/1/96 Initial Revision + * grant 2/4/99 Use EditViewUpdateScrollBar() + * + ***********************************************************************/ +static void EditViewScroll (Int16 linesToScroll, Boolean updateScrollbar) +{ + UInt16 blankLines; + FieldPtr fld; + + fld = GetObjectPtr (EditMemoField); + blankLines = FldGetNumberOfBlankLines (fld); + + if (linesToScroll < 0) + FldScrollField (fld, -linesToScroll, winUp); + else if (linesToScroll > 0) + FldScrollField (fld, linesToScroll, winDown); + + // If there were blank lines visible at the end of the field + // then we need to update the scroll bar. + if (blankLines || updateScrollbar) + { + ErrNonFatalDisplayIf(blankLines && linesToScroll > 0, "blank lines when scrolling winDown"); + + EditViewUpdateScrollBar(); + } +} + + +/*********************************************************************** + * + * FUNCTION: EditViewPageScroll + * + * DESCRIPTION: This routine scrolls the message a page winUp or winDown. + * When the top of a memo is visible, scrolling up will + * display the display the botton of the previous memo. + * If the bottom of a memo is visible, scrolling down will + * display the top of the next memo. + * + * PARAMETERS: direction winUp or winDown + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/1/96 Initial Revision + * grant 2/4/99 Use EditViewScroll() to do actual scrolling. + * + ***********************************************************************/ +static void EditViewPageScroll (WinDirectionType direction) +{ + Int16 seekDirection; + UInt16 category; + UInt16 recordNum; + UInt32 uniqueID; + UInt16 linesToScroll; + FieldPtr fld; + UInt16 attr; + + fld = GetObjectPtr (EditMemoField); + + if (FldScrollable (fld, direction)) + { + linesToScroll = FldGetVisibleLines (fld) - 1; + + if (direction == winUp) + linesToScroll = -linesToScroll; + + EditViewScroll(linesToScroll, true); + + return; + } + + + // Move to the next or previous memo. + if (direction == winUp) + { + seekDirection = dmSeekBackward; + EditScrollPosition = maxFieldTextLen; + } + else + { + seekDirection = dmSeekForward; + EditScrollPosition = 0; + } + + if (ShowAllCategories) + category = dmAllCategories; + else + category = CurrentCategory; + + recordNum = CurrentRecord; + + //while to skip masked records. Even if the body never executes, we'll have done a DmSeekRecordInCategory + while (!DmSeekRecordInCategory (MemoDB, &recordNum, 1, seekDirection, category) && + !DmRecordInfo (MemoDB, recordNum, &attr, NULL, NULL) && + ((attr & dmRecAttrSecret) && PrivateRecordVisualStatus == maskPrivateRecords)) + { + } + + if (recordNum == CurrentRecord) return; + + // Don't show first/last record if it's private and we're masking. + if (!DmRecordInfo (MemoDB, recordNum, &attr, NULL, NULL) && + ((attr & dmRecAttrSecret) && PrivateRecordVisualStatus == maskPrivateRecords)) + return; + + SndPlaySystemSound (sndInfo); + + // Saving the current record may cause it to move if the records are + // sorted alphabeticly. + DmRecordInfo (MemoDB, recordNum, NULL, &uniqueID, NULL); + EditViewSaveRecord (); + DmFindRecordByID (MemoDB, uniqueID, &CurrentRecord); + + EditViewLoadRecord (FrmGetActiveForm ()); + FldGrabFocus (fld); + +} + + +/*********************************************************************** + * + * FUNCTION: EditViewExit + * + * DESCRIPTION: This routine is call when the Edit View is exited. It + * releases any memory allocated for the Edit View. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 3/17/95 Initial Revision + * + ***********************************************************************/ +static void EditViewExit (void) +{ + FormPtr frm; + void * title; + + // Free the title string. + frm = FrmGetActiveForm (); + title = (void *)FrmGetTitle (frm); + if (title) + { + MemPtrFree(title); + } +} + + +/*********************************************************************** + * + * FUNCTION: EditViewInit + * + * DESCRIPTION: This routine initials the Edit View form. + * + * PARAMETERS: frm - pointer to the Edit View form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 3/31/95 Initial Revision + * art 7/1/96 Set field hasScrollBar attribute + * FPa 11/30/96 Set title to 0 + * + ***********************************************************************/ +static void EditViewInit (FormPtr frm) +{ + FieldPtr fld; + FieldAttrType attr; + + + // Have the field send event to maintain the scroll bar. + fld = GetObjectPtr (EditMemoField); + FldGetAttributes (fld, &attr); + attr.hasScrollBar = true; + FldSetAttributes (fld, &attr); + + FrmSetTitle(frm, 0); // To avoid a crash into EditViewSetTitle when trying to free the old title + + EditViewLoadRecord (frm); + + CurrentView = EditView; +} + + +/*********************************************************************** + * + * FUNCTION: EditViewUpdateDisplay + * + * DESCRIPTION: This routine update the display of the edit view + * + * PARAMETERS: updateCode - a code that indicated what changes have been + * made to the view. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/3/95 Initial Revision + * + ***********************************************************************/ +static Boolean EditViewUpdateDisplay (UInt16 updateCode) +{ + UInt16 attr; + UInt16 category; + + if (updateCode == updateCategoryChanged) + { + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + category = attr & dmRecAttrCategoryMask; + ChangeCategory (category); + + // If we are editing a secret record and secret records are hidden + // then increment the record count so that the correct record count + // is shown. + if (PrivateRecordVisualStatus == hidePrivateRecords && (attr & dmRecAttrSecret)) + MemosInCategory++; + + // Set the title of the edit view. + EditViewSetTitle (); + + // Set the label of the category trigger. + CategoryGetName (MemoDB, CurrentCategory, CategoryName); + CategorySetTriggerLabel (GetObjectPtr (EditCategoryTrigger), + CategoryName); + return (true); + } + + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Edit View" + * of the Memo application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 02/21/95 Initial Revision. + * kwk 10/04/98 Explicitly disable Graffiti auto-shift if we get + * a printable key-down event. + * kwk 11/21/98 Handle cmd keys in separate code block, so TxtCharIsPrint + * doesn't get called w/virtual key codes. + * gap 10/27/00 change the command bar initialization to allow field + * code to add cut, copy, paste, & undo commands as + * appropriate rather than adding a fixed set of selections. + * CS 11/28/00 Call EditViewExit in response to frmCloseEvent. + * + ***********************************************************************/ +static Boolean EditViewHandleEvent (EventType * event) +{ + FormPtr frm; + Boolean handled = false; + FieldPtr fldP; + UInt32 numLibs; + + + if (event->eType == keyDownEvent) + { + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + { + EditViewSaveRecord (); + FrmGotoForm (ListView); + handled = true; + } + + else if (EvtKeydownIsVirtual(event)) + { + if (event->data.keyDown.chr == vchrPageUp) + { + EditViewPageScroll (winUp); + handled = true; + } + + else if (event->data.keyDown.chr == vchrPageDown) + { + EditViewPageScroll (winDown); + handled = true; + } + + // Send data key presed? + else if (event->data.keyDown.chr == vchrSendData) + { + if (FldGetTextLength(GetObjectPtr (EditMemoField)) > 0) + { + EditViewSaveRecord(); + MemoSendRecord(MemoDB, CurrentRecord, exgBeamPrefix); + + // Redisplay the record. If the IR loopback mechanism sends the + // record to this app the goto action code closes all forms and + // send a frmGotoEvent. Load the record again only if the form + // still exits. + frm = FrmGetActiveForm (); + if (frm) + EditViewLoadRecord (frm); + } + else + FrmAlert(NoDataToBeamAlert); + handled = true; + } +/* TRG */ + else if ((event->data.keyDown.chr == chrEscape) || + (event->data.keyDown.chr == chrCarriageReturn)) + { + EditViewSaveRecord (); + FrmGotoForm (ListView); + handled = true; + } +/* end TRG */ + } + + // If we get a printable character, then we can assume that any Graffiti + // auto-shifting is finished, so it's safe to turn it off. This solves the + // problem of a re-queued keydown event (e.g. when in list view & writing + // a character -> generate a new memo) not turning off the temp shift state + // because it wasn't created by Graffiti. + // DOLATER kwk - figure out if this is the best way to handle auto-shift + // problem with creation of memo from list view (input method coordination). + // Better would be for the field code to turn off auto-shift when it handles + // insertion or a keydown event. + + // LFe: This is done now by the field. + /* + else if (TxtCharIsPrint(event->data.keyDown.chr)) + { + Boolean capsLock, numLock, autoShifted; + UInt16 tempShift; + + if ((GrfGetState(&capsLock, &numLock, &tempShift, &autoShifted) == 0) + && (autoShifted)) + { + GrfSetState(capsLock, numLock, false); + } + } + */ + } + + else if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case EditCategoryTrigger: + EditViewSelectCategory (); + handled = true; + break; + + case EditDoneButton: + EditViewSaveRecord (); + FrmGotoForm (ListView); + handled = true; + break; + + case EditDetailsButton: + FrmPopupForm (DetailsDialog); + handled = true; + break; + } + } + + + else if (event->eType == menuOpenEvent) + { + if (ExgGetRegisteredApplications(NULL, &numLibs, NULL, NULL, exgRegSchemeID, exgSendScheme) || !numLibs) + MenuHideItem(SendMemoCmd); + else + MenuShowItem(SendMemoCmd); + // don't set handled = true + } + + else if (event->eType == menuEvent) + { + handled = EditViewDoCommand (event->data.menu.itemID); + } + + + // Add the buttons that we want available on the command bar, based on the current context + else if (event->eType == menuCmdBarOpenEvent) + { + UInt16 startPos, endPos; + FieldType* fldP; + + fldP = GetObjectPtr (EditMemoField); + FldGetSelection(fldP, &startPos, &endPos); + + if (startPos == endPos) // there's no highlighted text + { + // Call directly Field event handler so that System Edit buttons are added + FldHandleEvent(fldP, event); + + // Beam on the left + MenuCmdBarAddButton(menuCmdBarOnLeft, BarBeamBitmap, menuCmdBarResultMenuItem, BeamMemoCmd, 0); + + // Delete on the Right + MenuCmdBarAddButton(menuCmdBarOnRight, BarDeleteBitmap, menuCmdBarResultMenuItem, DeleteMemoCmd, 0); + + // Prevent the field package to automatically add cut, copy, paste, and undo buttons as applicable + // since it was done previously + event->data.menuCmdBarOpen.preventFieldButtons = true; + } + + // don't set handled to true; this event must fall through to the system. + } + + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* TRG */ + if (vgaExists) + VgaFormModify(frm, vgaFormModify160To240); + EditViewResizeForm(frm, false); +/* end TRG */ + EditViewInit (frm); + FrmDrawForm (frm); + FrmSetFocus (frm, FrmGetObjectIndex (frm, EditMemoField)); + handled = true; + } + + + else if (event->eType == frmGotoEvent) + { + frm = FrmGetActiveForm (); +/* TRG */ + if (vgaExists) + VgaFormModify(frm, vgaFormModify160To240); + EditViewResizeForm(frm, false); +/* end TRG */ + CurrentRecord = event->data.frmGoto.recordNum; + EditViewInit (frm); + fldP = GetObjectPtr (EditMemoField); + FldSetScrollPosition(fldP, event->data.frmGoto.matchPos); + FldSetSelection(fldP, event->data.frmGoto.matchPos, + event->data.frmGoto.matchPos + event->data.frmGoto.matchLen); + EditViewUpdateScrollBar (); + FrmDrawForm (frm); + FrmSetFocus (frm, FrmGetObjectIndex (frm, EditMemoField)); + handled = true; + } + + + else if (event->eType == frmUpdateEvent) + { + handled = EditViewUpdateDisplay (event->data.frmUpdate.updateCode); + } + + else if (event->eType == fldChangedEvent) + { + frm = FrmGetActiveForm (); + EditViewUpdateScrollBar (); + handled = true; + } + + + else if (event->eType == frmCloseEvent) + { + FormPtr frm; + + frm = FrmGetFormPtr (EditView); + if ( FldGetTextHandle (FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, EditMemoField)))) + EditViewSaveRecord (); // This deletes empty memos. + EditViewExit(); + } + + + else if (event->eType == sclRepeatEvent) + { + EditViewScroll (event->data.sclRepeat.newValue - + event->data.sclRepeat.value, false); + } +/* TRG */ + else if (event->eType == displayExtentChangedEvent) + { + EditViewResizeForm(FrmGetActiveForm(), true); + handled = true; + } +/* end TRG */ + + return (handled); +} + +/* TRG */ +/*********************************************************************** + * + * FUNCTION: EditViewResizeForm + * + * DESCRIPTION: This routine resizes the y extent of the form for + * virtual silk support. + * + * PARAMETERS: frmP - pointer to EditView form + * draw - if we can draw to the form at this time or not. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * DanF 3/04/01 Initial Revision + * + ***********************************************************************/ +static void EditViewResizeForm(FormPtr frmP, Boolean draw) +{ + Coord x, y; + Coord xDiff, yDiff; + RectangleType r; + FieldPtr fldP; + UInt16 tmpPos, tmpStart, tmpEnd; + UInt16 objIdx; + + // this will get the new extent + WinGetDisplayExtent(&x, &y); + + // this will get the old extent + FrmGetFormBounds(frmP, &r); + + xDiff = x - (r.topLeft.x + r.extent.x); + yDiff = y - (r.topLeft.y + r.extent.y); + if ((xDiff == 0) && (yDiff == 0)) + return; + + // resize form + r.extent.x += xDiff; + r.extent.y += yDiff; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + // resize field (save and restore insertion state around it) + if (draw) + { + fldP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, EditMemoField)); + FldGetSelection(fldP, &tmpStart, &tmpEnd); + if (InsPtEnabled() || (tmpStart != tmpEnd)) + tmpPos = FldGetInsPtPosition(fldP); + else + tmpPos = -1; + } + //Adjust Table + PrvResizeObject(frmP, FrmGetObjectIndex(frmP, EditMemoField), xDiff, yDiff, draw); + + // Adjust scrollbar + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, EditMemoScrollBar), xDiff, 0, false); + PrvResizeObject(frmP, FrmGetObjectIndex(frmP, EditMemoScrollBar), 0, yDiff, draw); + + if(xDiff != 0) + { + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, EditCategoryTrigger), xDiff, 0, draw); //do not double draw + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, EditCategoryList), xDiff, 0, draw); //do not double draw + } + + // move done button + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, EditDoneButton), 0, yDiff, draw); + + // move details button + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, EditDetailsButton), 0, yDiff, draw); + + // Adjust GSI + objIdx = PrvFrmGetGSI(frmP); + PrvMoveObject(frmP, objIdx, xDiff, yDiff, draw); + // You need to set the GSI's location as well as it's location on the form + // for everything to work properly. + FrmGetObjectPosition(frmP, objIdx, &x, &y); + GsiSetLocation(x + xDiff, y+yDiff); + + if (draw) + { + if (tmpPos != -1) + { + // restore the selection, this will make sure the cursor is still visible + fldP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, EditMemoField)); + FldSetInsPtPosition(fldP, tmpPos); + FldSendChangeNotification(fldP); + FldSetSelection(fldP, tmpStart, tmpEnd); + } + FrmDrawForm(frmP); + } +} +/* end TRG */ +#pragma mark ---- +/*********************************************************************** + * + * FUNCTION: ListViewDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 3/29/95 Initial Revision + * kcr 11/7/95 converted to common about box + * jmp 10/02/99 Changed call to DmOpenDatabaseByTypeCreator() to + * MemoGetDatabase(). + * jmp 03/19/00 Fixed bug #23669: Adjust the number of memos currently + * available so that scrollbar will be updated correctly + * after a change in security level. + * + ***********************************************************************/ +static void ListViewDoCommand (UInt16 command) +{ + Boolean wasHiding; + UInt32 currentRecordID; + UInt16 mode; + + + switch (command) + { + case ListOptionsFontsCmd: + ListFont = SelectFont(ListFont); + break; + + case ListRecordBeamCategoryCmd: + MemoSendCategory(MemoDB, CurrentCategory, exgBeamPrefix, NoDataToBeamAlert); + break; + + case ListRecordSendCategoryCmd: + MemoSendCategory(MemoDB, CurrentCategory, exgSendPrefix, NoDataToSendAlert); + break; + + case ListOptionsSecurityCmd: + wasHiding = (PrivateRecordVisualStatus == hidePrivateRecords); + + PrivateRecordVisualStatus = SecSelectViewStatus(); + + if (wasHiding ^ (PrivateRecordVisualStatus == hidePrivateRecords)) //xor on two logical values - mode to open DB has changed + { + // Close the application's data file. + MemoSavePrefs(0); + DmCloseDatabase(MemoDB); + + mode = (PrivateRecordVisualStatus == hidePrivateRecords) ? + dmModeReadWrite : (dmModeReadWrite | dmModeShowSecret); + + MemoGetDatabase(&MemoDB, mode); + ErrFatalDisplayIf(!MemoDB,"Can't reopen DB"); + // Read the preferences. + MemoLoadPrefs(¤tRecordID); + + // Adjust the number of memos currently available so the scrollbar will be updated correctly. + if (ShowAllCategories) + MemosInCategory = DmNumRecordsInCategory(MemoDB, dmAllCategories); + else + MemosInCategory = DmNumRecordsInCategory(MemoDB, CurrentCategory); + } + + //For safety, simply reset the currentRecord + CurrentRecord = noRecordSelected; + ListViewUpdateDisplay(updateDisplayOptsChanged); + break; + + case ListOptionsPreferencesCmd: + FrmPopupForm (PreferencesDialog); + break; + + case ListOptionsAboutCmd: + MenuEraseStatus(CurrentMenu); + AbtShowAbout(sysFileCMemo); + break; + } +} + + +/*********************************************************************** + * + * FUNCTION: ListViewNumberOfRows + * + * DESCRIPTION: This routine return the maximun number of visible rows, + * with the current list view font setting. + * + * PARAMETERS: table - List View table + * + * RETURNED: maximun number of displayable rows + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/28/97 Initial Revision + * + ***********************************************************************/ +static UInt16 ListViewNumberOfRows (TablePtr table) +{ + UInt16 rows; + UInt16 rowsInTable; + UInt16 tableHeight; + FontID currFont; + RectangleType r; + + + rowsInTable = TblGetNumberOfRows (table); + + TblGetBounds (table, &r); + tableHeight = r.extent.y; + + currFont = FntSetFont (ListFont); + rows = tableHeight / FntLineHeight (); + FntSetFont (currFont); + + if (rows <= rowsInTable) + return (rows); + else + return (rowsInTable); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewDrawRecord + * + * DESCRIPTION: This routine draws the title memo record in the list + * view. This routine is called by the table routine, + * TblDrawTable, each time a line of the table needs to + * be drawn. + * + * PARAMETERS: table - pointer to the memo list table (TablePtr) + * row - row of the table to draw + * column - column of the table to draw + * bounds - bound to the draw region + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * ADH 7/21/99 Increased the size of the posStr character array + * to allow for display of five digit numbers. + * Previously only four digit numbers could be + * displayed. + * ryw 1/11/01 use global TopRowPositionInCategory to determine numbering + * + ***********************************************************************/ +static void ListViewDrawRecord (void * table, Int16 row, Int16 UNUSED_PARAM(column), + RectanglePtr bounds) +{ + UInt16 len; + UInt16 category; + UInt16 recordNum; + MemHandle memoH; + Int16 x, y; + Char * memoP; + UInt16 pos; + // this string should handle up to "99999." but does not have to be 0 terminated when the . is added + char posStr[6]; + UInt16 attr; + RectangleType maskRectangle; + + // Get the record number that corresponds to the table item to draw. + // The record number is stored in the "intValue" field of the item. + recordNum = TblGetRowID (table, row); + + DmRecordInfo (MemoDB, recordNum, &attr, NULL, NULL); + // If the record is private and we are to hide private records, then get out of here. + // This should be taken care of by the calling function, but we will go ahead and + // take care of it here also. + if ((attr & dmRecAttrSecret) && PrivateRecordVisualStatus == hidePrivateRecords) + { + return; + } + + x = bounds->topLeft.x + 1; + y = bounds->topLeft.y; + + FntSetFont (ListFont); + + // Format the memo's postion, within its category, an draw it. + if (ShowAllCategories) + category = dmAllCategories; + else + category = CurrentCategory; + + //pos = DmPositionInCategory (MemoDB, recordNum, category); + pos = TopRowPositionInCategory + row; + StrIToA (posStr, pos+1); + len = StrLen(posStr); + // Warning if more than 99999 record (5 chars) + ErrNonFatalDisplayIf(len > sizeof(posStr) - 1, "Too many records"); + posStr[len++] = '.'; + // This string does not need 0 termination for up to the end of the function. So the size is ok + + if (len < 3) x += FntCharWidth ('1'); + WinDrawChars (posStr, len, x, y); + x += FntCharsWidth (posStr, len) + 4; + + // If we are here then we either we either mask the memo out or display the + // memo title. + if (((attr & dmRecAttrSecret) && PrivateRecordVisualStatus == maskPrivateRecords)) + { + MemMove (&maskRectangle, bounds, sizeof (RectangleType)); + maskRectangle.topLeft.x = x; + maskRectangle.extent.x = bounds->extent.x - x; + + //If next row is masked, thicken rect so as to keep boundary at 1 pixel. + /* // THIS CODE REMOVED because people didn't like combining the masks together. + if (TblGetLastUsableRow(table) > row) + { + DmRecordInfo (MemoDB, TblGetRowID (table, row+1), &attr, NULL, NULL); + if (attr & dmRecAttrSecret) + maskRectangle.extent.y++; + } + */ + ListViewDisplayMask (&maskRectangle); + } + else + { + // Display the memo's title, the title is the first line of the memo. + memoH = DmQueryRecord(MemoDB, recordNum); + memoP = MemHandleLock(memoH); + DrawMemoTitle (memoP, x, y, bounds->extent.x - x); + MemHandleUnlock(memoH); + } +} + +/*********************************************************************** + * + * FUNCTION: ListViewDisplayMask + * + * DESCRIPTION: Draws the masked display for the record. + * + * PARAMETERS: bounds (Input): The bounds of the table item to display. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * css 06/21/99 Initial Revision + * + ***********************************************************************/ +static void ListViewDisplayMask (RectanglePtr bounds) +{ + RectangleType tempRect; + CustomPatternType origPattern; + MemHandle bitmapH; + BitmapType * bitmapP; + + CustomPatternType pattern = {0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55}; + +MemMove (&tempRect, bounds, sizeof (RectangleType)); +// Make sure it fits nicely into the display. +tempRect.topLeft.y++; +tempRect.extent.y --; +/* TRG */ + if (vgaExists && VgaIsVgaFont(ListFont)) + tempRect.extent.x -= SecLockWidth + ((SecLockWidth+1)>>1) + 1; + else + tempRect.extent.x -= SecLockWidth + 1; +/* end TRG */ + +WinGetPattern(&origPattern); +WinSetPattern (&pattern); +WinFillRectangle (&tempRect, 0); +WinSetPattern(&origPattern); + +//draw lock icon + //draw lock icon +/* TRG */ + if (vgaExists && VgaIsVgaFont(ListFont)) + bitmapH = DmGetResource (bitmapRsc, SecLockBitmap+0x1000); + else + bitmapH = DmGetResource (bitmapRsc, SecLockBitmap); +/* end TRG */ +if (bitmapH) +{ + bitmapP = MemHandleLock (bitmapH); + WinDrawBitmap (bitmapP, tempRect.topLeft.x + tempRect.extent.x + 1, + tempRect.topLeft.y + ((tempRect.extent.y - SecLockHeight) / 2)); + MemPtrUnlock (bitmapP); +} +} + +/*********************************************************************** + * + * FUNCTION: ListViewUpdateScrollers + * + * DESCRIPTION: This routine draws or erases the list view scroll arrow + * buttons. + * + * PARAMETERS: frm - pointer to the to do list form + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/1/95 Initial Revision + * + ***********************************************************************/ +static void ListViewUpdateScrollers (FormPtr UNUSED_PARAM(frm)) +{ + UInt16 pos; + Int16 rows; + UInt16 maxValue; + + rows = ListViewNumberOfRows (GetObjectPtr(ListTable)); + if (MemosInCategory > rows) + { + pos = DmPositionInCategory (MemoDB, TopVisibleRecord, CurrentCategory); + maxValue = MemosInCategory - rows; + } + else + { + pos = 0; + maxValue = 0; + } + + SclSetScrollBar (GetObjectPtr (ListScrollBar), pos, 0, maxValue, rows); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewLoadTable + * + * DESCRIPTION: This routine loads memo database records into + * the list view form. + * + * PARAMETERS: recordNum index of the first record to display. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/16/95 Initial Revision + * grant 1/29/99 Set the heights of unused rows + * ryw 1/11/01 update global TopRowPositionInCategory on table load + * + ***********************************************************************/ +static void ListViewLoadTable (FormPtr frm) +{ + UInt16 row; + UInt16 recordNum; + UInt16 lineHeight; + UInt16 dataHeight; + UInt16 tableHeight; + UInt16 numRows; + UInt32 uniqueID; + FontID currFont; + TablePtr table; + MemHandle recordH; + RectangleType r; + + + table = GetObjectPtr (ListTable); + + TblGetBounds (table, &r); + tableHeight = r.extent.y; + + currFont = FntSetFont (ListFont); + lineHeight = FntLineHeight (); + FntSetFont (currFont); + + dataHeight = 0; + + recordNum = TopVisibleRecord; + + // For each row in the table, store the record number in the table item + // that will dispaly the record. + numRows = TblGetNumberOfRows (table); + for (row = 0; row < numRows; row++) + { + // Get the next record in the currunt category. + recordH = DmQueryNextInCategory (MemoDB, &recordNum, CurrentCategory); + if(row == 0) + { + // store the position of the first row so we can use TopRowPositionInCategory+row + // when drawing + TopRowPositionInCategory = recordH ? DmPositionInCategory(MemoDB, recordNum, CurrentCategory) : 0; + } + + // If the record was found, store the record number in the table item, + // otherwise set the table row unusable. + if (recordH && (tableHeight >= dataHeight + lineHeight)) + { + TblSetRowID (table, row, recordNum); + TblSetItemStyle (table, row, 0, customTableItem); + TblSetItemFont (table, row, 0, ListFont); + + TblSetRowHeight (table, row, lineHeight); + + DmRecordInfo (MemoDB, recordNum, NULL, &uniqueID, NULL); + if ((TblGetRowData (table, row) != uniqueID) || + ( ! TblRowUsable (table, row))) + { + TblSetRowUsable (table, row, true); + + // Store the unique id of the record in the row. + TblSetRowData (table, row, uniqueID); + + // Mark the row invalid so that it will draw when we call the + // draw routine. + TblMarkRowInvalid (table, row); + } + + if (row+1 < numRows) recordNum++; + + dataHeight += lineHeight; + } + else + { + // Set the row height - when scrolling winDown, the heights of the last rows of + // the table are used to determine how far to scroll. As rows are deleted + // from the top of the table, formerly unused rows scroll into view, and the + // height is used before the next call to ListViewLoadTable (which would set + // the height correctly). + TblSetRowHeight (table, row, lineHeight); + + TblSetRowUsable (table, row, false); + } + } + + + // Update the scroll arrows. + ListViewUpdateScrollers (frm); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewLoadRecords + * + * DESCRIPTION: This routine loads memo database records into + * the list view form. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/16/95 Initial Revision + * + ***********************************************************************/ +static void ListViewLoadRecords (FormPtr frm) +{ + TablePtr table; + UInt16 recordNum; + UInt16 rowsInTable; + + if (ShowAllCategories) + CurrentCategory = dmAllCategories; + + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, ListTable)); + rowsInTable = ListViewNumberOfRows (table); + + // Is the current record before the first visible record? + if (CurrentRecord != noRecordSelected) + { + if (TopVisibleRecord > CurrentRecord) + TopVisibleRecord = CurrentRecord; + + // Is the current record after the last visible record? + else + { + recordNum = TopVisibleRecord; + DmSeekRecordInCategory (MemoDB, &recordNum, rowsInTable-1, + dmSeekForward, CurrentCategory); + if (recordNum < CurrentRecord) + TopVisibleRecord = CurrentRecord; + } + } + + + // Make sure we show a full display of records. + if (MemosInCategory) + { + recordNum = dmMaxRecordIndex; + DmSeekRecordInCategory (MemoDB, &recordNum, (rowsInTable-1), + dmSeekBackward, CurrentCategory); + TopVisibleRecord = min (TopVisibleRecord, recordNum); + } + else + TopVisibleRecord = 0; + + ListViewLoadTable (frm); + + // Set the callback routine that will draw the records. + TblSetCustomDrawProcedure (table, 0, ListViewDrawRecord); + + TblSetColumnUsable (table, 0, true); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewSelectCategory + * + * DESCRIPTION: This routine handles selection, creation and deletion of + * categories form the Details Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: The index of the new category. + * + * The following global variables are modified: + * CurrentCategory + * ShowAllCategories + * CategoryName + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 03/10/95 Initial Revision + * gap 08/13/99 Update to use new constant categoryDefaultEditCategoryString. + * + ***********************************************************************/ +static UInt16 ListViewSelectCategory (void) +{ + FormPtr frm; + TablePtr table; + UInt16 category; + Boolean categoryEdited; + + + // Process the category popup list. + category = CurrentCategory; + + frm = FrmGetActiveForm(); + categoryEdited = CategorySelect (MemoDB, frm, ListCategoryTrigger, + ListCategoryList, true, &category, CategoryName, 1, categoryDefaultEditCategoryString); + + if (category == dmAllCategories) + ShowAllCategories = true; + else + ShowAllCategories = false; + + if (categoryEdited || (category != CurrentCategory)) + { + ChangeCategory (category); + + // Display the new category. + ListViewLoadRecords (frm); + table = GetObjectPtr (ListTable); + TblEraseTable (table); + TblDrawTable (table); + } + + return (category); +} + +/*********************************************************************** + * + * FUNCTION: ListViewNextCategory + * + * DESCRIPTION: This routine display the next category, if the last + * catagory isn't being displayed + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * The following global variables are modified: + * CurrentCategory + * ShowAllCategories + * CategoryName + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/15/95 Initial Revision + * + ***********************************************************************/ +static void ListViewNextCategory (void) +{ + UInt16 category; + FormPtr frm; + TablePtr table; + ControlPtr ctl; + + category = CategoryGetNext (MemoDB, CurrentCategory); + + if (category != CurrentCategory) + { + if (category == dmAllCategories) + ShowAllCategories = true; + else + ShowAllCategories = false; + + ChangeCategory (category); + + // Set the label of the category trigger. + ctl = GetObjectPtr (ListCategoryTrigger); + CategoryGetName (MemoDB, CurrentCategory, CategoryName); + CategorySetTriggerLabel (ctl, CategoryName); + + + // Display the new category. + TopVisibleRecord = 0; + frm = FrmGetActiveForm (); + ListViewLoadTable (frm); + table = GetObjectPtr (ListTable); + TblEraseTable (table); + TblDrawTable (table); + } +} + + +/*********************************************************************** + * + * FUNCTION: ListViewPageScroll + * + * DESCRIPTION: This routine scrolls the list of of memo titles + * in the direction specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * roger 7/27/95 Copied fixed code from Address Book + * + ***********************************************************************/ +static void ListViewPageScroll (WinDirectionType direction) +{ + TablePtr table; + Int16 rowsInTable; + UInt16 newTopVisibleRecord; + + table = GetObjectPtr (ListTable); + rowsInTable = ListViewNumberOfRows (table); + + newTopVisibleRecord = TopVisibleRecord; + CurrentRecord = noRecordSelected; + + // Scroll the table winDown a page (less one row). + if (direction == winDown) + { + // Try going forward one page + if (!SeekRecord (&newTopVisibleRecord, rowsInTable - 1, dmSeekForward)) + { + // Try going backwards one page from the last record + newTopVisibleRecord = dmMaxRecordIndex; + if (!SeekRecord (&newTopVisibleRecord, rowsInTable - 1, dmSeekBackward)) + { + // Not enough records to fill one page. Start with the first record + newTopVisibleRecord = 0; + SeekRecord (&newTopVisibleRecord, 0, dmSeekForward); + } + } + } + + // Scroll up a page (less one row). + else + { + if (!SeekRecord (&newTopVisibleRecord, rowsInTable - 1, dmSeekBackward)) + { + // Not enough records to fill one page. Start with the first record + newTopVisibleRecord = 0; + SeekRecord (&newTopVisibleRecord, 0, dmSeekForward); + } + } + + + + // Avoid redraw if no change + if (TopVisibleRecord != newTopVisibleRecord) + { +/* TRG */ + selectedItem = -1; +/* end TRG */ + TopVisibleRecord = newTopVisibleRecord; + ListViewLoadRecords (FrmGetActiveForm ()); + TblRedrawTable(table); + } +} + + + +/*********************************************************************** + * + * FUNCTION: ListViewScroll + * + * DESCRIPTION: This routine scrolls the list of of memo titles + * in the direction specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * roger 7/27/95 Copied fixed code from Address Book + * + ***********************************************************************/ +static void ListViewScroll (Int16 linesToScroll) +{ + Int16 i; + UInt16 rows; + UInt16 lastRow; + UInt16 scrollAmount; + UInt16 newTopVisibleRecord; + TablePtr table; + RectangleType scrollR; + RectangleType vacated; + WinDirectionType direction; + + + table = GetObjectPtr (ListTable); + CurrentRecord = noRecordSelected; + + + // Find the new top visible record + newTopVisibleRecord = TopVisibleRecord; + + // Scroll down. + if (linesToScroll > 0) + SeekRecord (&newTopVisibleRecord, linesToScroll, dmSeekForward); + + // Scroll up. + else if (linesToScroll < 0) + SeekRecord (&newTopVisibleRecord, -linesToScroll, dmSeekBackward); + + ErrFatalDisplayIf (TopVisibleRecord == newTopVisibleRecord, + "Invalid scroll value"); + + TopVisibleRecord = newTopVisibleRecord; + + + // Move the bits that will remain visible. + rows = ListViewNumberOfRows (table); + if (((linesToScroll > 0) && (linesToScroll < rows)) || + ((linesToScroll < 0) && (-linesToScroll < rows))) + { + scrollAmount = 0; + + if (linesToScroll > 0) + { + lastRow = TblGetLastUsableRow (table) - 1; + for (i = 0; i < linesToScroll; i++) + { + scrollAmount += TblGetRowHeight (table, lastRow); + TblRemoveRow (table, 0); + } + direction = winUp; + } + else + { + for (i = 0; i < -linesToScroll; i++) + { + scrollAmount += TblGetRowHeight (table, 0); + TblInsertRow (table, 0); + } + direction = winDown; + } + + TblGetBounds (table, &scrollR); + WinScrollRectangle (&scrollR, direction, scrollAmount, &vacated); + WinEraseRectangle (&vacated, 0); + } + + + ListViewLoadTable (FrmGetActiveForm ()); + TblRedrawTable(table); +/* TRG */ + if (selectedItem != -1) + ListViewSelectTableItem(true, table, selectedItem, 0, &vacated); +/* end TRG */ +} + + + +/*********************************************************************** + * + * FUNCTION: ListViewInit + * + * DESCRIPTION: This routine initializes the "List View" of the + * Memo application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static void ListViewInit (FormPtr frm) +{ + ControlPtr ctl; + +/* TRG */ + selectedItem = -1; +/* end TRG */ + + ListViewLoadRecords (frm); + + // Set the label of the category trigger. + ctl = GetObjectPtr (ListCategoryTrigger); + CategoryGetName (MemoDB, CurrentCategory, CategoryName); + CategorySetTriggerLabel (ctl, CategoryName); + + CurrentView = ListView; +} + + +/*********************************************************************** + * + * FUNCTION: ListViewInvertMoveIndicator + * + * DESCRIPTION: If draw is true, then save the area behind the rectangle, + * then draw the indicator there. If draw is false, then restore + * the screen bits. + * + * + * PARAMETERS: itemR - bounds of the move indicator + * savedBits - if draw is true, then restore this window of bits at + * itemR. + * draw - draw or erase the move indicator. + * + * RETURNED: WinHandle - handle to a saved window of screen bits, if the move + * indicator is visible. Otherwise, the value is 0. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/29/96 Initial Revision + * + ***********************************************************************/ +static WinHandle ListViewInvertMoveIndicator (RectanglePtr itemR, WinHandle savedBits, + Boolean draw) +{ + UInt16 i; + UInt16 err; + WinHandle winH = 0; + RectangleType indictatorR; + CustomPatternType pattern; + CustomPatternType savedPattern; + + + indictatorR.topLeft.x = itemR->topLeft.x; + indictatorR.topLeft.y = itemR->topLeft.y + itemR->extent.y - 2; + indictatorR.extent.x = itemR->extent.x; + indictatorR.extent.y = 2; + + if (draw) + { + WinGetPattern (&savedPattern); + + for (i = 0; i < sizeof (CustomPatternType) / sizeof (*pattern); i++) + pattern[i]= 0xAA55; + + WinSetPattern (&pattern); + + winH = WinSaveBits (&indictatorR, &err); + + WinFillRectangle (&indictatorR, 0); + + WinSetPattern (&savedPattern); + } + + else + { + WinRestoreBits (savedBits, indictatorR.topLeft.x, indictatorR.topLeft.y); + } + + return (winH); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewSelectTableItem + * + * DESCRIPTION: This routine either selects or unselects the specified + * table item. + * + * PARAMETERS: selected - specifies whether an item should be selected or + * unselected + * table - pointer to a table object + * row - row of the item (zero based) + * column - column of the item (zero based) + * rP - pointer to a structure that will hold the bound + * of the item + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * jmp 10/29/99 Initial Revision + * jmp 11/12/99 While a table item is "on the move," having it be selected + * can cause the Table code grief. So, instead of using + * the TblSelectItem()/TblUnhighlightSelect() calls, we now + * manually select/unselect the table's row. Before color, + * only WinInvertRectangle() was called, so this is now in line + * again with the way things used to work. Sigh. + * + ***********************************************************************/ + +static void ListViewSelectTableItem (Boolean selected, TablePtr table, Int16 row, Int16 column, RectangleType *r) +{ + // Get the item's rectangle. + // + TblGetItemBounds (table, row, column, r); + + // Set up the drawing state the way we want it. + // + WinPushDrawState(); + WinSetBackColor(UIColorGetTableEntryIndex(UIFieldBackground)); + WinSetForeColor(UIColorGetTableEntryIndex(UIObjectForeground)); + WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground)); + + // Erase and (re)draw the item. + // + WinEraseRectangle(r, 0); + ListViewDrawRecord(table, row, column, r); + + // If selected, make it look that way. + // + if (selected) + ReplaceTwoColors (r, 0, + UIObjectForeground, UIFieldBackground, + UIObjectSelectedForeground, UIObjectSelectedFill); + + // Restore the previous drawing state. + // + WinPopDrawState(); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewSelectMemo + * + * DESCRIPTION: This routine tracks a Memo item for either selection + * to go to EditView, or movement in the ListView. + * + * + * PARAMETERS: event + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/29/96 Initial Revision + * jmp 10/29/99 Replaced WinInvertRectangle() calls with calls to + * ListViewSelectTableItem() to eliminate general + * color inversion problem. + * peter 4/25/00 Add support for un-masking just the selected record. + * gap 06/06/00 Correct what appears to be a copy/paste error. When + * row < 0, the row was properly incremented but the + * y value of the move indicator was decremented causing the + * tracking line to draw up across the title area of the form. + * + ***********************************************************************/ + +static void ListViewSelectMemo (EventType * event) +{ + Int16 sortOrder; + Int16 row; + Int16 selectedRow; + Int16 column; + UInt16 recordNum; + Int16 selectedRecord; + Coord x, y; + Boolean penDown = true; + Boolean moving = false; + Boolean selected = true; + TablePtr table; + WinHandle savedBits; + RectangleType r; + UInt16 attr; + + sortOrder = MemoGetSortOrder (MemoDB); + + row = event->data.tblSelect.row; + column = event->data.tblSelect.column; + table = event->data.tblSelect.pTable; + + // Highlight the item the pen when winDown on. + selectedRecord = TblGetRowID (table, row); + ListViewSelectTableItem (selected, table, row, column, &r); + + // Trace the pen until it move enough to constitute a move operation or until + // the pen it released. + while (true) + { + PenGetPoint (&x, &y, &penDown); + if (! penDown) break; + + if (! moving) + { + if (sortOrder != soAlphabetic) + { + // Is the pen still within the bounds of the item it went winDown on, + // if not draw the move indicator. + if (! RctPtInRectangle (x, y, &r)) + { + moving = true; + + TblGetItemBounds (table, row, column, &r); + savedBits = ListViewInvertMoveIndicator (&r, 0, true); + } + } + else + selected = RctPtInRectangle (x, y, &r); + } + + else if (! RctPtInRectangle (x, y, &r)) + { + // Above the first item ? + if (row < 0) + { + if (y >= r.topLeft.y) + { + row++; + ListViewInvertMoveIndicator (&r, savedBits, false); + r.topLeft.y += r.extent.y; + savedBits = ListViewInvertMoveIndicator (&r, 0, true); + } + } + + // Move winUp. + else if (y < r.topLeft.y) + { + recordNum = TblGetRowID (table, row); + if (SeekRecord (&recordNum, 1, dmSeekBackward)) + { + ListViewInvertMoveIndicator (&r, savedBits, false); + if (row) + row--; + else + { + ListViewScroll (-1); + if (TblFindRowID (table, selectedRecord, &selectedRow)) + ListViewSelectTableItem (selected, table, selectedRow, column, &r); + } + TblGetItemBounds (table, row, column, &r); + savedBits = ListViewInvertMoveIndicator (&r, 0, true); + } + else if (row == 0) + { + row--; + ListViewInvertMoveIndicator (&r, savedBits, false); + r.topLeft.y -= r.extent.y; + savedBits = ListViewInvertMoveIndicator (&r, 0, true); + } + } + + // Move winDown + else + { + recordNum = TblGetRowID (table, row); + if (SeekRecord (&recordNum, 1, dmSeekForward)) + { + ListViewInvertMoveIndicator (&r, savedBits, false); + if (row < TblGetLastUsableRow (table)) + row++; + else + { + ListViewScroll (1); + if (TblFindRowID (table, selectedRecord, &selectedRow)) + ListViewSelectTableItem (selected, table, selectedRow, column, &r); + } + TblGetItemBounds (table, row, column, &r); + savedBits = ListViewInvertMoveIndicator (&r, 0, true); + } + } + } + } + + + // Turn off the move indicator, if it is on. + if (moving) + { + savedBits = ListViewInvertMoveIndicator (&r, savedBits, false); + } + + // If the highlighted item is visible, unhighlight it. + if (TblFindRowID (table, selectedRecord, &selectedRow)) + ListViewSelectTableItem (false, table, selectedRow, column, &r); + + if (moving) + { + if (row >= 0) + { + recordNum = TblGetRowID (table, row); + if (selectedRecord == recordNum) + return; + + recordNum++; + } + else + { + recordNum = TblGetRowID (table, 0);; + } + + DmMoveRecord (MemoDB, selectedRecord, recordNum); + /* Was + if (selectedRecord < TopVisibleRecord) + TopVisibleRecord--; + CurrentRecord = recordNum; + ListViewLoadTable (FrmGetActiveForm()); + */ + ListViewLoadRecords (FrmGetActiveForm()); + TblRedrawTable (table); + } + + // If we didn't move the item then it's been selected for editing, go to the + // edit view. + else if (sortOrder != soAlphabetic || selected) + { + CurrentRecord = TblGetRowID (event->data.tblSelect.pTable, + event->data.tblSelect.row); + EditScrollPosition = 0; + + // Get the category and secret attribute of the current record. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + + // If this is a "private" record, then determine what is to be shown. + if (attr & dmRecAttrSecret) + { + switch (PrivateRecordVisualStatus) + { + case showPrivateRecords: + FrmGotoForm (EditView); + break; + + case maskPrivateRecords: + if (SecVerifyPW (showPrivateRecords) == true) + { + // We only want to unmask this one record, so restore the preference. + PrefSetPreference (prefShowPrivateRecords, maskPrivateRecords); + + FrmGotoForm (EditView); + } + break; + + // This case should never be executed!!!!!!! + case hidePrivateRecords: + default: + break; + } + } + else + { + FrmGotoForm (EditView); + } + } +} + +/*********************************************************************** + * + * FUNCTION: ListViewUpdateDisplay + * + * DESCRIPTION: This routine update the display of the list view + * + * PARAMETERS: updateCode - a code that indicated what changes have been + * made to the view. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/19/95 Initial Revision + * + ***********************************************************************/ +static Boolean ListViewUpdateDisplay (UInt16 updateCode) +{ + TablePtr table; + + if (updateCode & (updateDisplayOptsChanged | updateFontChanged)) + { + if (updateCode & updateDisplayOptsChanged) + TopVisibleRecord = 0; + + ListViewLoadRecords (FrmGetActiveForm()); + table = GetObjectPtr (ListTable); + TblEraseTable (table); + TblDrawTable (table); + + return (true); + } + + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "List View" + * of the Memo application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * HISTORY: + * 02/21/95 art Created by Art Lamb. + * 11/22/98 kwk Handle command keys in separate code block so that + * TxtCharIsPrint doesn't get called w/virtual chars. + * 09/25/99 kwk Use TxtGlueUpperChar to capitalize initial char for + * memo that's autocreated by writing a printable char. + * + ***********************************************************************/ +static Boolean ListViewHandleEvent (EventPtr event) +{ + FormPtr frm; + Boolean handled = false; + UInt16 attr; + UInt32 numLibs; + + if (event->eType == keyDownEvent) + { + // Memo button pressed? + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + { + if (!(event->data.keyDown.modifiers & poweredOnKeyMask)) + ListViewNextCategory (); + handled = true; + } + + else if (EvtKeydownIsVirtual(event)) + { + // Scroll up key presed? + if (event->data.keyDown.chr == vchrPageUp) + { + ListViewPageScroll (winUp); + handled = true; + } + + // Scroll down key presed? + else if (event->data.keyDown.chr == vchrPageDown) + { + ListViewPageScroll (winDown); + handled = true; + } + + // Send Data key presed? + else if (event->data.keyDown.chr == vchrSendData) + { + ListViewDoCommand(ListRecordSendCategoryCmd); + handled = true; + } +/* TRG */ + else if (event->data.keyDown.chr == chrCarriageReturn) + { + if (selectedItem != -1) + { + CurrentRecord = TblGetRowID (GetObjectPtr(ListTable), selectedItem); + EditScrollPosition = 0; + + // Get the category and secret attribute of the current record. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + selectedItem = -1; + + // If this is a "private" record, then determine what is to be shown. + if (attr & dmRecAttrSecret) + { + switch (PrivateRecordVisualStatus) + { + case showPrivateRecords: + FrmGotoForm (EditView); + break; + + case maskPrivateRecords: + if (SecVerifyPW (showPrivateRecords) == true) + { + PrivateRecordVisualStatus = showPrivateRecords; + FrmGotoForm (EditView); + } + break; + + // This case should never be executed!!!!!!! + case hidePrivateRecords: + default: + break; + } + } + else + { + FrmGotoForm (EditView); + } + } + handled = true; + } + else if (event->data.keyDown.chr == vchrNextField) + { + TablePtr tblP; + RectangleType r; + Int16 pos; + + if (DmNumRecordsInCategory(MemoDB, CurrentCategory) == 0) + return true; + + tblP = (TablePtr)GetObjectPtr(ListTable); + + if (selectedItem == TblGetLastUsableRow(tblP)) + { + ListViewSelectTableItem(false, tblP, selectedItem, 0, &r); + pos = DmPositionInCategory (MemoDB, TopVisibleRecord, CurrentCategory); + if ((TblGetLastUsableRow(tblP) + pos+1) < MemosInCategory) + ListViewScroll(1); + } + else if (selectedItem > TblGetLastUsableRow(tblP)) // can happen with silk/font changes + selectedItem = TblGetLastUsableRow(tblP); + else if (selectedItem != -1) + ListViewSelectTableItem(false, tblP, selectedItem, 0, &r); + + if (selectedItem < TblGetLastUsableRow(tblP)) + selectedItem++; + if (selectedItem != -1) + { + ListViewSelectTableItem(true, tblP, selectedItem, 0, &r); + handled = true; + } + } + else if (event->data.keyDown.chr == vchrPrevField) + { + TablePtr tblP; + RectangleType r; + Int16 pos; + + if (DmNumRecordsInCategory(MemoDB, CurrentCategory) == 0) + return true; + + tblP = (TablePtr)GetObjectPtr(ListTable); + + if (selectedItem == 0) + { + ListViewSelectTableItem(false, tblP, selectedItem, 0, &r); + pos = DmPositionInCategory (MemoDB, TopVisibleRecord, CurrentCategory); + if (pos != 0) + ListViewScroll(-1); + } + else if (selectedItem > TblGetLastUsableRow(tblP)) // can happen with silk/font changes + selectedItem = -1; + else if (selectedItem != -1) + ListViewSelectTableItem(false, tblP, selectedItem, 0, &r); + + if ((selectedItem == -1) && (MemosInCategory > 0)) + selectedItem = 0; + + if (selectedItem > 0) + selectedItem--; + + if (selectedItem != -1) + { + ListViewSelectTableItem(true, tblP, selectedItem, 0, &r); + handled = true; + } + } + } +/* end TRG */ + // If printable character, create a new record. + else if (TxtCharIsPrint (event->data.keyDown.chr)) + { + if (CreateRecord ()) + { + FrmGotoForm (EditView); + + event->data.keyDown.chr = TxtGlueUpperChar(event->data.keyDown.chr); + EvtAddEventToQueue (event); + } + + handled = true; + } + } + + + else if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case ListNewButton: + if (CreateRecord ()) + FrmGotoForm (EditView); + handled = true; + break; + + case ListCategoryTrigger: + ListViewSelectCategory (); + handled = true; + break; + } + } + + + else if (event->eType == tblEnterEvent) + { + ListViewSelectMemo (event); + handled = true; + } + + + else if (event->eType == tblSelectEvent) + { + // An item in the list of memos was selected, display it. + CurrentRecord = TblGetRowID (event->data.tblSelect.pTable, + event->data.tblSelect.row); + EditScrollPosition = 0; + + // Get the category and secret attribute of the current record. + DmRecordInfo (MemoDB, CurrentRecord, &attr, NULL, NULL); + + // If this is a "private" record, then determine what is to be shown. + if (attr & dmRecAttrSecret) + { + switch (PrivateRecordVisualStatus) + { + case showPrivateRecords: + FrmGotoForm (EditView); + break; + + case maskPrivateRecords: + // FrmGotoForm (); TODO XXXX + break; + + // This case should never be executed!!!!!!! + case hidePrivateRecords: + default: + break; + } + } + else + { + FrmGotoForm (EditView); + } + + handled = true; + } + + + else if (event->eType == menuOpenEvent) + { + if (ExgGetRegisteredApplications(NULL, &numLibs, NULL, NULL, exgRegSchemeID, exgSendScheme) || !numLibs) + MenuHideItem(ListRecordSendCategoryCmd); + else + MenuShowItem(ListRecordSendCategoryCmd); + // don't set handled = true + } + + else if (event->eType == menuEvent) + { + ListViewDoCommand (event->data.menu.itemID); + return (true); + } + + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* TRG */ + if (vgaExists) + { + VgaFormModify(frm, vgaFormModify160To240); + VgaTableUseBaseFont(FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, ListTable)), + !VgaIsVgaFont(ListFont)); + } + ListViewResizeForm(frm, false); +/* end TRG */ + ListViewInit (frm); + FrmDrawForm (frm); + handled = true; + } + + else if (event->eType == menuCmdBarOpenEvent) + { + MenuCmdBarAddButton(menuCmdBarOnLeft, BarSecureBitmap, menuCmdBarResultMenuItem, ListOptionsSecurityCmd, 0); + + // tell the field package to not add buttons automatically; we've done it all ourselves. + event->data.menuCmdBarOpen.preventFieldButtons = true; + + // don't set handled to true; this event must fall through to the system. + } + + else if (event->eType == frmUpdateEvent) + { + handled = ListViewUpdateDisplay (event->data.frmUpdate.updateCode); + } + + else if (event->eType == sclRepeatEvent) + { + ListViewScroll (event->data.sclRepeat.newValue - + event->data.sclRepeat.value); + } +/* TRG */ + else if (event->eType == displayExtentChangedEvent) + { + ListViewResizeForm(FrmGetActiveForm(), true); + handled = true; + } +/* end TRG */ + + return (handled); +} + +/* TRG */ +/*********************************************************************** + * + * FUNCTION: ListViewResizeForm + * + * DESCRIPTION: This routine resizes the y extent of the form for + * virtual silk support. + * + * PARAMETERS: frmP - pointer to ListView form + * draw - if we can draw to the form at this time or not. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * DanF 3/04/01 Initial Revision + * + ***********************************************************************/ +static void ListViewResizeForm(FormPtr frmP, Boolean draw) +{ + Coord x, y; + Coord xDiff, yDiff; + RectangleType r, tableR; + TablePtr tblP; + + // this will get the new extent + WinGetDisplayExtent(&x, &y); + + // this will get the old extent + FrmGetFormBounds(frmP, &r); + + xDiff = x - (r.topLeft.x + r.extent.x); + yDiff = y - (r.topLeft.y + r.extent.y); + if ((xDiff==0) && (yDiff == 0)) + return; + + // resize form + r.extent.x += xDiff; + r.extent.y += yDiff; + if ((xDiff > 0) || (yDiff > 0)) // only resize here if growing + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + // adjust table + //PrvResizeObject(frmP, FrmGetObjectIndex(frmP, ListTable), xDiff, yDiff, draw); + tblP = GetObjectPtr(ListTable); + TblGetBounds(tblP, &tableR); + tableR.extent.x += xDiff; + tableR.extent.y += yDiff; + TblSetBounds(tblP, &tableR); + + if(draw && (yDiff < 0)) + { + tableR.topLeft.y = (tableR.topLeft.y + tableR.extent.y); + tableR.extent.y = -yDiff; + WinEraseRectangle (&tableR, 0); + } + + //Only one column so do it here. + if(xDiff != 0) + { + x = TblGetColumnWidth (FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, ListTable)), 0); + TblSetColumnWidth (FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, ListTable)), 0, x + xDiff); + } + + // adjust scrollbar + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, ListScrollBar), xDiff, 0, false); //do not double draw + PrvResizeObject(frmP, FrmGetObjectIndex(frmP, ListScrollBar), 0, yDiff, draw); + + if(xDiff != 0) + { + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, ListCategoryTrigger), xDiff, 0, draw); //do not double draw + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, ListCategoryList), xDiff, 0, draw); //do not double draw + } + + // move new button + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, ListNewButton), 0, yDiff, draw); + + // don't resize form until here if shrinking so we can erase our old controls + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + if (draw) + { + // ListViewLoadRecords() can scroll the table. We need to make sure + // we are still selecting the same item after we are all done, so save + // the current state. + if (selectedItem != -1) + selectedItem += TopVisibleRecord; + ListViewLoadRecords(frmP); + FrmDrawForm(frmP); + + if (selectedItem != -1) + { + selectedItem -= TopVisibleRecord; + tblP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, ListTable)); + if (selectedItem > TblGetLastUsableRow(tblP)) + { + ListViewScroll(selectedItem - TblGetLastUsableRow(tblP)); + selectedItem -= selectedItem - TblGetLastUsableRow(tblP); + } + ListViewSelectTableItem(true, tblP, selectedItem, 0, &r); + } + } +} +/* end TRG */ + + +#pragma mark ---- +/*********************************************************************** + * + * FUNCTION: CustomAcceptBeamDialog + * + * DESCRIPTION: This routine uses uses a new exchange manager function to + * Ask the user if they want to accept the data as well as set + * the category to put the data in. By default all data will go + * to the unfiled category, but the user can select another one. + * We store the selected category index in the appData field of + * the exchange socket so we have it at the when we get the receive + * data launch code later. + * + * PARAMETERS: dbP - open database that holds category information + * askInfoP - structure passed on exchange ask launchcode + * + * RETURNED: Error if any + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * bhall 9/7/99 Initial Revision + * gavin 11/9/99 Rewritten to use new ExgDoDialog function + * + ***********************************************************************/ +static Err CustomAcceptBeamDialog(DmOpenRef dbP, ExgAskParamPtr askInfoP) +{ + ExgDialogInfoType exgInfo; + Err err; + Boolean result; + + // set default category to unfiled + exgInfo.categoryIndex = dmUnfiledCategory; + // Store the database ref into a gadget for use by the event handler + exgInfo.db = dbP; + + // Let the exchange manager run the dialog for us + result = ExgDoDialog(askInfoP->socketP, &exgInfo, &err); + + + if (!err && result) { + + // pretend as if user hit OK, we'll now accept the data + askInfoP->result = exgAskOk; + + // Stuff the category index into the appData field + askInfoP->socketP->appData = exgInfo.categoryIndex; + } else { + // pretend as if user hit cancel, we won't accept the data + askInfoP->result = exgAskCancel; + } + + return err; +} + + + +/*********************************************************************** + * + * FUNCTION: ApplicationHandleEvent + * + * DESCRIPTION: This routine loads form resources and sets the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/11/95 Initial Revision + * + ***********************************************************************/ +static Boolean ApplicationHandleEvent (EventType * event) +{ + UInt16 formID; + FormPtr frm; + + if (event->eType == frmLoadEvent) + { + // Load the form resource. + formID = event->data.frmLoad.formID; + frm = FrmInitForm (formID); + FrmSetActiveForm (frm); + + // Set the event handler for the form. The handler of the currently + // active form is called by FrmHandleEvent each time it receives an + // event. + switch (formID) + { + case ListView: + FrmSetEventHandler (frm, ListViewHandleEvent); + break; + + case EditView: + FrmSetEventHandler (frm, EditViewHandleEvent); + break; + + case DetailsDialog: + FrmSetEventHandler (frm, DetailsHandleEvent); + break; + + case PreferencesDialog: + FrmSetEventHandler (frm, PreferencesHandleEvent); + break; + + } + return (true); + } + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: EventLoop + * + * DESCRIPTION: This routine is the event loop for the Memo + * aplication. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static void EventLoop (void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent (&event, evtWaitForever); + + if (! SysHandleEvent (&event)) + + if (! MenuHandleEvent (CurrentMenu, &event, &error)) + + if (! ApplicationHandleEvent (&event)) + + FrmDispatchEvent (&event); + + } + while (event.eType != appStopEvent); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the Memo + * application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * art 1/3098 Removed sysAppLaunchCmdSaveData logic + * grant 6/25/99 In sysAppLaunchCmdInitDatabase, set the backup bit on the DB. + * In sysAppLaunchCmdExgReceiveData, update MemosInCategory. + * jmp 10/02/99 Made the support for the sysAppLaunchCmdExgReceiveData + * sysAppLaunchCmdExgAskUser launch codes more like their + * counterparts in Address, Databook, and ToDo. + * jmp 10/18/99 If the default "demo" database image doesn't exist, then + * create an empty database instead. + * jmp 11/04/99 Eliminate extraneous FrmSaveAllForms() call from sysAppLaunchCmdExgAskUser + * since it was already being done in sysAppLaunchCmdExgReceiveData if + * the user affirmed sysAppLaunchCmdExgAskUser. Also, in sysAppLaunchCmdExgReceiveData + * prevent call FrmSaveAllForms() if we're being call back through + * PhoneNumberLookup() as the two tasks are incompatible with each other. + * + ***********************************************************************/ +UInt32 PilotMain (UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + UInt16 error; + DmOpenRef dbP; + + if (cmd == sysAppLaunchCmdNormalLaunch) + { + error = StartApplication (); + if (error) + return (error); + + FrmGotoForm (CurrentView); + EventLoop (); + StopApplication (); + } + + else if (cmd == sysAppLaunchCmdFind) + { + Search ((FindParamsPtr)cmdPBP); + } + + + // This action code might be sent to the app when it's already running + // if the use hits the Find soft key next to the Graffiti area. + else if (cmd == sysAppLaunchCmdGoTo) + { + if (launchFlags & sysAppLaunchFlagNewGlobals) + { + error = StartApplication (); + if (error) return (error); + + GoToItem ((GoToParamsPtr) cmdPBP, true); + + EventLoop (); + StopApplication (); + } + else + GoToItem ((GoToParamsPtr) cmdPBP, false); + } + + + // Launch code sent to running app before sysAppLaunchCmdFind + // or other action codes that will cause data searches or manipulation. + // We don't need to respond to this launch code because memos are + // edited in place. + // else if (cmd == sysAppLaunchCmdSaveData) + // { + // FrmSaveAllForms (); + // } + + + // This launch code is sent after the system is reset. We use this time + // to create our default database. If there is no default database image, + // then we create an empty database. + else if (cmd == sysAppLaunchCmdSystemReset) + { + if (((SysAppLaunchCmdSystemResetType*)cmdPBP)->createDefaultDB) + { + error = CreateDefaultDatabase(); + // Register to receive .txt and text/plain on hard reset. + RegisterData(); + + } + RegisterLocaleChangingNotification(); + } + + + else if (cmd == sysAppLaunchCmdSyncNotify) + { + SyncNotification (); + } + + + else if (cmd == sysAppLaunchCmdExgAskUser) + { + // if our app is not active, we need to open the database + // the subcall flag is used here since this call can be made without launching the app + if (!(launchFlags & sysAppLaunchFlagSubCall)) + { + error = MemoGetDatabase (&dbP, dmModeReadWrite); + } + else + dbP = MemoDB; + + if (dbP != NULL) + { + CustomAcceptBeamDialog (dbP, (ExgAskParamPtr) cmdPBP); + + if (!(launchFlags & sysAppLaunchFlagSubCall)) + error = DmCloseDatabase(dbP); + } + } + + + // Present the user with ui to perform a lookup and return a string + // with information from the selected record. + else if (cmd == sysAppLaunchCmdExgReceiveData) + { + UInt16 numReceived = 0; + UInt32 currentUID; + + // if our app is not active, we need to open the database + // the subcall flag is used here since this call can be made without launching the app + if (!(launchFlags & sysAppLaunchFlagSubCall)) + error = MemoGetDatabase (&dbP, dmModeReadWrite); + else + { + dbP = MemoDB; + + // We don't delete the current record if it's empty because the user + // could cancel the beam receive. + + // MemoReceiveData() calls MemoSort(), which may change the index of + // the current record. So we remember its UID here, and refresh our + // copy of its index afterwards. + if (CurrentRecord != noRecordSelected) + DmRecordInfo(dbP, CurrentRecord, NULL, ¤tUID, NULL); + } + + if (dbP != NULL) + { + error = MemoReceiveData(dbP, (ExgSocketPtr) cmdPBP, &numReceived); + + // We may have just added some memos to the current category. + // If the app is currently running, update MemosInCategory to reflect this. + if (launchFlags & sysAppLaunchFlagSubCall) + { + MemosInCategory += numReceived; + + if (CurrentRecord != noRecordSelected) + { + if (DmFindRecordByID(dbP, currentUID, &CurrentRecord) != 0) + CurrentRecord = noRecordSelected; // Can't happen, but... + + // DOLATER dje - + // To fix the off-by-one error, we can decrement exgSocketP->goToParams.recordNum + // if it's after the current empty record in order to compensate for the + // current empty record getting deleted when we exit before the goto launch. + } + } + else + DmCloseDatabase(dbP); + } + else + error = exgErrAppError; // DOLATER dje - use a new error code - "try again after switching apps" + + // If we can't open our database, return the error since it wasn't passed to ExgDisconnect + return error; + } + + else if(cmd == sysAppLaunchCmdExgPreview) + { + MemoTransferPreview((ExgPreviewInfoType *)cmdPBP); + } + + // This action code is sent by the DesktopLink server when it create + // a new database. We will initializes the new database. + else if (cmd == sysAppLaunchCmdInitDatabase) + { + MemoAppInfoInit (((SysAppLaunchCmdInitDatabaseType*)cmdPBP)->dbP); + + // Set the backup bit. This is to aid syncs with non Palm software. + SetDBBackupBit(((SysAppLaunchCmdInitDatabaseType*)cmdPBP)->dbP); + } + + else if (cmd == sysAppLaunchCmdNotify) + { + if (((SysNotifyParamType*)cmdPBP)->notifyType == sysNotifyLocaleChangedEvent) + { + DmSearchStateType searchState; + LocalID dbID; + UInt16 cardNo; + + // Since the locale has changed, delete the existing database + // and re-create it for the new locale + error = DmGetNextDatabaseByTypeCreator (true, &searchState, memoDBType, + sysFileCMemo, true, &cardNo, &dbID); + if (!error) + DmDeleteDatabase(cardNo, dbID); + + error = CreateDefaultDatabase(); + + } + } + + return (errNone); +} diff --git a/handera-sdk-105/examples/ExampleI/Src/MemoMain.h b/handera-sdk-105/examples/ExampleI/Src/MemoMain.h new file mode 100644 index 0000000..ab61a71 --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/MemoMain.h @@ -0,0 +1,66 @@ +/****************************************************************************** + * + * Copyright (c) 1995-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MemoMain.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * Include file the Memo application + * + * History: + * 9/27/95 Created by Christopher Raff + * 10/02/99 Externed the SetDBBackupBit() routine. + * + *****************************************************************************/ + +#ifndef __MEMOMAIN_H__ +#define __MEMOMAIN_H__ + +#include +#include + +#define memoDBName "MemoDB" +#define memoDBType 'DATA' +#define memoMaxLength 4096 // note: must be same as tFLD 1109 max length!!! + // dje - Was 8192. Changed to fix bug #24574. +#define memoExtension "txt" +#define memoMIMEType "text/plain" + + +/************************************************************ + * Function Prototypes + *************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + + +typedef UInt32 ReadFunctionF (const void * stream, Char * bufferP, UInt32 length); +typedef UInt32 WriteFunctionF (void * stream, const Char * const bufferP, Int32 length); + + +// From MemoTransfer.c +extern void MemoSendRecord (DmOpenRef dbP, Int16 recordNum, const Char * const prefix); + +extern void MemoSendCategory (DmOpenRef dbP, UInt16 categoryNum, const Char * const prefix, UInt16 noDataAlertID); + +extern Err MemoReceiveData(DmOpenRef dbP, ExgSocketPtr exgSocketP, UInt16 *numRecordsReceived); +extern void MemoTransferPreview(ExgPreviewInfoType *infoP); + +extern Boolean MemoImportMime(DmOpenRef dbR, void * inputStream, ReadFunctionF inputFunc, + Boolean obeyUniqueIDs, Boolean beginAlreadyRead, UInt16 *numRecordsReceivedP, Char* descriptionP, UInt16 descriptionSize); + +extern void MemoExportMime(DmOpenRef dbP, Int16 index, MemoDBRecordType *recordP, + void * outputStream, WriteFunctionF outputFunc, + Boolean writeUniqueIDs, Boolean outputMimeInfo); + +extern void SetDBBackupBit(DmOpenRef dbP); + +#ifdef __cplusplus +} +#endif + +#endif // __MEMOMAIN_H__ diff --git a/handera-sdk-105/examples/ExampleI/Src/MemoRsc.h b/handera-sdk-105/examples/ExampleI/Src/MemoRsc.h new file mode 100644 index 0000000..4951cfe --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/MemoRsc.h @@ -0,0 +1,101 @@ +/****************************************************************************** + * + * Copyright (c) 1999-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MemoRsc.h + * + * Release: Palm OS SDK 4.0 (63220) + * + *****************************************************************************/ + +// List View +#define ListView 1000 +#define ListCategoryTrigger 1003 +#define ListCategoryList 1004 +#define ListNewButton 1005 +#define ListTable 1008 +#define ListScrollBar 1009 + +// Edit View +#define EditView 1100 +#define EditViewTitle 1101 +#define EditCategoryTrigger 1103 +#define EditCategoryList 1104 +#define EditDoneButton 1105 +#define EditDetailsButton 1108 +#define EditMemoField 1109 +#define EditMemoScrollBar 1110 +#define EditTitleString 1112 +#define EditFontGroup 1 + +// Details Dialog Box +#define DetailsDialog 1200 +#define DetailsCategoryTrigger 1204 +#define DetailsCategoryList 1205 +#define DetailsSecretCheckbox 1207 +#define DetailsOkButton 1208 +#define DetailsCancelButton 1209 +#define DetailsDeleteButton 1210 +#define DetailsHelpString 1211 + +// Options Dialog +#define PreferencesDialog 1400 +#define PreferencesSortByTrigger 1404 +#define PreferencesSortByList 1405 +#define PreferencesOkButton 1406 +#define PreferencesCancelButton 1407 +#define PreferencesFontGroup 1 + +// Delete Memo Dialog +#define DeleteMemoDialog 1600 +#define DeleteMemoSaveBackup 1604 +#define DeleteMemoOk 1606 +#define DeleteMemoCancel 1607 + +// Sort Memo Alert +#define alphabeticSortAlert 2000 +#define alphabeticSortYes 0 +#define alphabeticSortNo 1 + +// Menus +#define ListViewMenuBar 1000 + +#define EditViewMenuBar 1100 + +// List View Menu commands +#define ListRecordBeamCategoryCmd 100 +#define ListRecordSendCategoryCmd 101 +#define ListOptionsFontsCmd 200 +#define ListOptionsPreferencesCmd 201 +#define ListOptionsSecurityCmd 202 +#define ListOptionsAboutCmd 203 + +// Edit View Menu commands +#define NewMemoCmd 100 +#define DeleteMemoCmd 101 +#define BeamMemoCmd 103 +#define SendMemoCmd 104 + +#define UndoCmd 200 +#define CutCmd 201 +#define CopyCmd 202 +#define PasteCmd 203 +#define SelectAllCmd 204 +#define EditSeparator 205 +#define KeyboardCmd 206 + +#define EditOptionsFontsCmd 300 +#define EditOptionPhoneLookupCmd 301 +#define EditOptionsAboutCmd 302 + +//Command bars +#define EditMenuCtl 100 // hasCCP, has extras +#define ListMenuCtl 200 // don't use MenuCtlxxxButtonIndex defaults +#define ListMenuCtlSecure 0 + +// Strings +#define FindMemoHeaderStr 100 +#define BeamDescriptionStr 1000 +#define BeamFilenameStr 1001 +#define ExgDescriptionStr 1002 diff --git a/handera-sdk-105/examples/ExampleI/Src/MemoTransfer.c b/handera-sdk-105/examples/ExampleI/Src/MemoTransfer.c new file mode 100644 index 0000000..0fba172 --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/MemoTransfer.c @@ -0,0 +1,1521 @@ +/****************************************************************************** + * + * Copyright (c) 1997-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MemoTransfer.c + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * Memo Book routines to transfer records. + * + * History: + * 9/17/97 roger - Created + * + *****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "MemoDB.h" +#include "MemoMain.h" +#include "MemoRsc.h" + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define identifierLengthMax 40 +#define mimeVersionString "MIME-Version: 1.0\015\012" +#define mimeMultipartString "Content-type: multipart/mixed;" +#define mimeBoundaryString "boundary=" +#define memoSuffix ("." memoExtension) +#define simpleBoundary "simple boundary" +#define delimiter "--" simpleBoundary +#define crlf "\015\012" + +#define importBufferMaxLength 80 + +#define stringZLen -1 // pass to WriteFunc to calculate strlen + + +// Stream interface to exgsockets to optimize performance +#define maxStreamBuf 512 // MUST BE LARGER than importBufferMaxLength + +typedef struct StreamType { + ExgSocketPtr socket; + UInt16 pos; + UInt16 len; + UInt16 bufSize; + Char buf[maxStreamBuf]; +} StreamType; + + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ +static void PrvMemoImportMimeCleanup(DmOpenRef dbP, UInt32 firstRecordID, void* inputStream, UInt16 numRecordsReceived, UInt16* numRecordsReceivedP); +static void PrvStreamInit(StreamType *streamP, ExgSocketPtr exgSocketP); +static void PrvStreamFlush(StreamType *streamP); +static UInt32 PrvStreamWrite(StreamType *streamP, const Char * stringP, Int32 length, Err *errP); +static UInt32 PrvStreamRead(StreamType * streamP, Char *bufP, UInt32 length, Err *errP); +static ExgSocketPtr PrvStreamSocket(StreamType *streamP); +static UInt32 PrvReadFunction(const void * stream, Char * bufferP, UInt32 length); +static UInt32 PrvWriteFunction(void * stream, const Char * const bufferP, Int32 length); +static void PrvTransferCleanFileName(Char* ioFileName); +static void PrvSetDescriptionAndFilename(Char * textP, Char **descriptionPP, MemHandle *descriptionHP, Char **filenamePP, MemHandle *filenameHP, const Char * const prefix); +static Err PrvMemoSendRecordTryCatch (DmOpenRef dbP, Int16 recordNum, MemoDBRecordPtr recordP, ExgSocketPtr exgSocketP); +static Err PrvMemoSendCategoryTryCatch (DmOpenRef dbP, UInt16 categoryNum, ExgSocketPtr exgSocketP, UInt16 index); +static void PrvMemoSetGoToParams (DmOpenRef dbP, ExgSocketPtr exgSocketP, UInt32 uniqueID); +static Err PrvReadThroughCRLF(ReadFunctionF inputFunc, void * inputStreamP, Char * bufferP, UInt16 * bufferLengthP); +static void PrvMemoImportFinishRecord(DmOpenRef dbP, UInt16 indexNew, MemHandle *newRecordHPtr, UInt16 *newRecordSizePtr, void * inputStream); + +/************************************************************ + * + * FUNCTION: MemoImportMime + * + * DESCRIPTION: Import a Mime record. + * + * PARAMETERS: + * dbP - pointer to the database to add the record to + * inputStream - pointer to where to import the record from + * inputFunc - function to get input from the stream + * obeyUniqueIDs - true to obey any unique ids if possible + * beginAlreadyRead - whether the begin statement has been read + * numRecordsRecievedP - number of records received + * + * RETURNS: true if the input was read + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * rsf 4/24/97 Initial Revision + * bob 01/26/98 re-wrote MIME parser part to get delimiters right + * grant 6/25/99 Return count of records received in numRecordsReceivedP. + * kwk 06/25/99 Moved return out of ErrTry block. + * FPa 11/22/00 Fixed ErrTry/Catch/Throw problems + * + *************************************************************/ +extern Boolean +MemoImportMime(DmOpenRef dbR, void * inputStream, ReadFunctionF inputFunc, + Boolean UNUSED_PARAM(obeyUniqueIDs), Boolean UNUSED_PARAM(beginAlreadyRead), UInt16 *numRecordsReceivedP, Char* descriptionP, UInt16 descriptionSize) +{ + char *c; + char boundaryString[69+2] = ""; + MemHandle newRecordH = NULL; + Char * newRecordP; + MemHandle newHandle; // Used to follow resized records which move + UInt16 indexNew = dmMaxRecordIndex; + DmOpenRef dbP = dbR; + Err err = 0; + Char buffer[importBufferMaxLength + 1]; + UInt16 bufferLength = 0; + UInt16 charsRead; + UInt16 charsToWrite; + UInt16 newRecordSize = 0; + Char * nextCrChr; + int addCr; + Char * boundaryP; + Char * boundaryEndP; + UInt16 numRecordsReceived = 0; + UInt32 firstRecordID = 0; + + // Keep the buffer always null terminated so we can use string functions on it. + buffer[importBufferMaxLength] = nullChr; + + // Read chars into the buffer + charsRead = inputFunc( inputStream, buffer, importBufferMaxLength - bufferLength); + bufferLength += charsRead; + buffer[bufferLength] = nullChr; + + if (charsRead == 0) + { + *numRecordsReceivedP = 0; + return false; + } + + // An error happens usually due to no memory. It's easier just to + // catch the error. If an error happens, we remove the last record. + // Then we throw a second time so the caller receives it and displays a message. + ErrTry + { + // MIME start, find MIME ID and version + if (StrNCompare(buffer, mimeVersionString, StrLen(mimeVersionString)) == 0) + { + // Remove the MIME header + MemMove(buffer, &buffer[StrLen(mimeVersionString)], bufferLength - StrLen(mimeVersionString)); + bufferLength -= StrLen(mimeVersionString); + + // Read chars into the buffer + charsRead = inputFunc( inputStream, &buffer[bufferLength], importBufferMaxLength - bufferLength); + bufferLength += charsRead; + buffer[bufferLength] = nullChr; + + // scan header for a multi-part identifier + // skip anything else until we get an entirely blank line + do { + if (StrNCompare(buffer, mimeMultipartString, StrLen(mimeMultipartString)) == 0) + { + // found a multi-part header, parse out the boundary string + + // PREVIEW Aba: Here we know that the memo is multipart => several memos + if (descriptionP) + { + MemHandle headerStringH; + Char* headerStringP; + + headerStringH = DmGetResource(strRsc, FindMemoHeaderStr); + headerStringP = MemHandleLock(headerStringH); + StrCopy(descriptionP, headerStringP); + MemHandleUnlock(headerStringH); + DmReleaseResource(headerStringH); + + return true; + } + + boundaryP = StrStr(buffer, mimeBoundaryString); + boundaryP += StrLen(mimeBoundaryString); + + // Remove the boundary stuff so we can read in more into the buffer + MemMove(buffer, boundaryP, &buffer[bufferLength] - boundaryP); + bufferLength = (&buffer[bufferLength] - boundaryP); + + // Read chars into the buffer + charsRead = inputFunc( inputStream, &buffer[bufferLength], importBufferMaxLength - bufferLength); + bufferLength += charsRead; + buffer[bufferLength] = nullChr; + + boundaryP = buffer; + if (*boundaryP == '"') + { + boundaryP++; + boundaryEndP = StrChr(boundaryP, '"'); + } + else + { + boundaryEndP = StrChr(boundaryP, crChr); + } + if (boundaryEndP == NULL) + { + ErrThrow(exgErrBadData); + } + boundaryString[0] = '-'; + boundaryString[1] = '-'; + MemMove(&boundaryString[2], boundaryP, boundaryEndP - boundaryP); + boundaryString[boundaryEndP - boundaryP + 2] = nullChr; + + c = StrChr(boundaryEndP, crChr); + if (c == NULL) + { + ErrThrow(exgErrBadData); + } + c += sizeOf7BitChar(crChr) + sizeOf7BitChar(linefeedChr); + + // Remove the boundary stuff so we can read in more into the buffer + MemMove(buffer, c, &buffer[bufferLength] - c); + bufferLength = (&buffer[bufferLength] - c); + } + else + { + // just an ordinary header line, skip it + err = PrvReadThroughCRLF(inputFunc, inputStream, buffer, &bufferLength); + if (err) + ErrThrow(err); + } + + // Read chars into the buffer + charsRead = inputFunc( inputStream, &buffer[bufferLength], importBufferMaxLength - bufferLength); + bufferLength += charsRead; + buffer[bufferLength] = nullChr; + + // stop at blank line by itself or EOF + } while (buffer[0] != crChr && buffer[0] != nullChr); + + // We've now parsed the MIME header. Preamble, segments, and postamble below. + } // end of MIME parser + + do { + // find the boundary and remove it, along with any header info in the body part + if (*boundaryString != nullChr) + { + // Keep reading until we find a boundary + while (buffer[0] != nullChr && StrNCompare(buffer, boundaryString, StrLen(boundaryString)) != 0) + { + err = PrvReadThroughCRLF(inputFunc, inputStream, buffer, &bufferLength); + if (err) + ErrThrow(err); + } + + // Remove the boundary by removing all text until the end of the line. + err = PrvReadThroughCRLF(inputFunc, inputStream, buffer, &bufferLength); + if (err) + ErrThrow(err); + + while (buffer[0] != nullChr && buffer[0] != crChr) + { + err = PrvReadThroughCRLF(inputFunc, inputStream, buffer, &bufferLength); + if (err) + ErrThrow(err); + } + err = PrvReadThroughCRLF(inputFunc, inputStream, buffer, &bufferLength); + if (err) + ErrThrow(err); + } + + // could be that everything was header, and we're out of data. + // weird error, but MemHandle it. + if (bufferLength == 0) + { + ErrThrow(exgErrBadData); + } + + + addCr = 0; + while (bufferLength > 0 && + (*boundaryString == nullChr || StrNCompare(buffer, boundaryString, StrLen(boundaryString)) != 0)) + { + // find CR or end of buffer + nextCrChr = StrChr(buffer, crChr); + if (nextCrChr != NULL) + charsToWrite = nextCrChr - buffer; + else + charsToWrite = bufferLength; + + // PREVIEW Aba: Here we have the first line and we can exit + if (descriptionP) + { + if (charsToWrite >= descriptionSize) + charsToWrite = descriptionSize - 1; + + StrNCopy(descriptionP, buffer, charsToWrite); + descriptionP[charsToWrite] = '\0'; + return true; + } + + // if we're going to overflow record, close it out (leave room for terminating null) + if (newRecordSize + charsToWrite + addCr > memoMaxLength) + { + // since we try to stop parsing at each CR, and most records from other sources (MIME) + // should have a CR at least every 76 characters, we probably don't have to worry about + // word wrap. Still, beaming a lot of just plain text could break records on random + // boundaries... + PrvMemoImportFinishRecord(dbP, indexNew, &newRecordH, &newRecordSize, inputStream); + addCr = 0; + numRecordsReceived++; + } + + // Make a record if we need one + if (newRecordH == NULL) + { + indexNew = dmMaxRecordIndex; + newRecordH = DmNewRecord(dbP, (UInt16 *)&indexNew, bufferLength); + if (newRecordH == 0) + ErrThrow(exgMemError); + newRecordSize = 0; + } + + // Write the buffer out to the record + newHandle = DmResizeRecord(dbP, indexNew, newRecordSize + charsToWrite + addCr); + if (newHandle) + newRecordH = newHandle; + else + ErrThrow(exgMemError); + + newRecordP = MemHandleLock(newRecordH); + if (addCr != 0) + DmWrite(newRecordP, newRecordSize++, "\n", 1); + DmWrite(newRecordP, newRecordSize, buffer, charsToWrite); + newRecordSize += charsToWrite; + MemHandleUnlock(newRecordH); + + // Remove the chars written so we can read more into the buffer + if (nextCrChr != NULL) + { + if (charsToWrite < importBufferMaxLength-1) + { + MemMove(buffer, nextCrChr+2, bufferLength-(charsToWrite+2)); // delete LF + bufferLength -= charsToWrite+2; + } + else + // CR/LF was split by end of buffer, so DON'T delete the CR, catch it next time 'round + { + MemMove(buffer, nextCrChr, bufferLength-(charsToWrite)); // don't delete CR or LF + bufferLength -= charsToWrite; + nextCrChr = NULL; + } + } + else + buffer[bufferLength = 0] = nullChr; + + // Now read more + charsRead = inputFunc( inputStream, &buffer[bufferLength], importBufferMaxLength - bufferLength); + bufferLength += charsRead; + buffer[bufferLength] = nullChr; + + if (nextCrChr != NULL) + addCr = 1; + else + addCr = 0; + } // end of segment parser + + // Set the category for the record + if (PrvStreamSocket(inputStream)->appData) { + UInt16 attr; + Err err; + UInt16 categoryID = PrvStreamSocket(inputStream)->appData; + + // Get the attributes + err = DmRecordInfo(dbP, indexNew, &attr, NULL, NULL); + + // Set them to include the category, and mark the record dirty + if ((attr & dmRecAttrCategoryMask) != categoryID) { + attr &= ~dmRecAttrCategoryMask; + attr |= categoryID | dmRecAttrDirty; + err = DmSetRecordInfo(dbP, indexNew, &attr, NULL); + } + } + + PrvMemoImportFinishRecord(dbP, indexNew, &newRecordH, &newRecordSize, inputStream); + numRecordsReceived++; + + // save the uniqueID of the first record we loaded + // we will goto this record when we are done (after sorting) + if (!firstRecordID) + { + // Store the information necessary to navigate to the record inserted. + DmRecordInfo(dbP, indexNew, NULL, &firstRecordID, NULL); + } + + // Now that the record is imported check if we need to import any more + + // Stop if there isn't any more input + if (bufferLength == 0) + break; + + // Stop if the boundary is followed by "--" + if ((*boundaryString != nullChr) + && bufferLength >= StrLen(boundaryString) + 2 + && StrNCompare(&buffer[StrLen(boundaryString)], "--", 2) == 0) + break; + + } while (true); // end of segment parser + } // end of Try + + ErrCatch(inErr) + { + // PREVIEW Aba + if (descriptionP) + return false; + + // Remove the incomplete record + if (inErr) + DmRemoveRecord(dbP, indexNew); + + // if we got at least one record, sort and set goto parameters... + if (firstRecordID) + { + MemoSort(dbP); + PrvMemoSetGoToParams (dbP, PrvStreamSocket(inputStream), firstRecordID); + } + + // return number of records received + *numRecordsReceivedP = numRecordsReceived; + + if ( inErr != exgMemError ) + PrvMemoImportMimeCleanup(dbP, firstRecordID, inputStream, numRecordsReceived, numRecordsReceivedP); + + ErrThrow(inErr); + } ErrEndCatch + + PrvMemoImportMimeCleanup(dbP, firstRecordID, inputStream, numRecordsReceived, numRecordsReceivedP); + + return false; +} + + +/*********************************************************************** + * + * FUNCTION: MemoSendRecord + * + * DESCRIPTION: Beam or send a record. + * + * PARAMETERS: dbP - pointer to the database to add the record to + * recordNum - the record to send + * prefix - the scheme with ":" suffix and optional "?" prefix + * + * RETURNED: true if the record is found and sent + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 5/9/97 Initial Revision + * dje 4/21/00 Add Send support + * dje 4/24/00 Don't specify target creator ID + * + ***********************************************************************/ +extern void MemoSendRecord (DmOpenRef dbP, Int16 recordNum, const Char * const prefix) +{ + MemoDBRecordPtr recordP; + MemHandle recordH; + MemHandle descriptionH; + Err error; + ExgSocketType exgSocket; + MemHandle nameH; + + + // important to init structure to zeros... + MemSet(&exgSocket, sizeof(exgSocket), 0); + + // Form a description of what's being sent. This will be displayed + // by the system send dialog on the sending and receiving devices. + recordH = DmQueryRecord (dbP, recordNum); + recordP = (MemoDBRecordType *) MemHandleLock(recordH); + + // Set the description to be the beginning of the memo + descriptionH = NULL; + exgSocket.description = NULL; + + // Set the exg description to the record's description. + PrvSetDescriptionAndFilename(&recordP->note, &exgSocket.description, + &descriptionH, &exgSocket.name, &nameH, prefix); + + // ABa: Clean superfluous '.' characters + PrvTransferCleanFileName(exgSocket.name); + + exgSocket.length = MemHandleSize(recordH); // rough guess + //exgSocket.target = sysFileCMemo; // commented out 4/24/00 dje + exgSocket.type = (Char *)memoMIMEType; + error = ExgPut(&exgSocket); // put data to destination + if (!error) + { + error = PrvMemoSendRecordTryCatch(dbP, recordNum, recordP, &exgSocket); + + ExgDisconnect(&exgSocket, error); + } + + + // Clean up + if (descriptionH) + { + MemHandleUnlock (descriptionH); + if (MemHandleDataStorage (descriptionH)) + DmReleaseResource(descriptionH); // DOLATER dje - this shouldn't be possible any more + else + MemHandleFree(descriptionH); + } + if (nameH) + { + MemHandleUnlock (nameH); + if (MemHandleDataStorage (nameH)) + DmReleaseResource(nameH); // DOLATER dje - this shouldn't be possible any more + else + MemHandleFree(nameH); + } + MemHandleUnlock(recordH); + + + return; +} + + +/*********************************************************************** + * + * FUNCTION: MemoSendCategory + * + * DESCRIPTION: Beam or send all visible records in a category. + * + * PARAMETERS: dbP - pointer to the database to add the record to + * categoryNum - the category of records to send + * prefix - the scheme with ":" suffix and optional "?" prefix + * noDataAlertID - alert to put up if there is nothing to send + * + * RETURNED: true if any records are found and sent + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 5/9/97 Initial Revision + * dje 4/21/00 Add Send support + * dje 4/24/00 Don't specify target creator ID + * + ***********************************************************************/ +extern void MemoSendCategory (DmOpenRef dbP, UInt16 categoryNum, const Char * const prefix, UInt16 noDataAlertID) +{ + Err error; + Char description[dmCategoryLength]; + UInt16 index; + Boolean foundAtLeastOneRecord; + ExgSocketType exgSocket; + UInt16 mode; + LocalID dbID; + UInt16 cardNo; + Boolean databaseReopened; + + + // If the database was opened to show secret records, reopen it to not see + // secret records. The idea is that secret records are not sent when a + // category is sent. They must be explicitly sent one by one. + DmOpenDatabaseInfo(dbP, &dbID, NULL, &mode, &cardNo, NULL); + if (mode & dmModeShowSecret) + { + dbP = DmOpenDatabase(cardNo, dbID, dmModeReadOnly); + databaseReopened = true; + } + else + databaseReopened = false; + + + // important to init structure to zeros... + MemSet(&exgSocket, sizeof(exgSocket), 0); + + // Make sure there is at least one record in the category. + index = 0; + foundAtLeastOneRecord = false; + while (true) + { + if (DmSeekRecordInCategory(dbP, &index, 0, dmSeekForward, categoryNum) != 0) + break; + + foundAtLeastOneRecord = DmQueryRecord(dbP, index) != 0; + if (foundAtLeastOneRecord) + break; + + + index++; + } + + + // We should send the category because there's at least one record to send. + if (foundAtLeastOneRecord) + { + // Form a description of what's being sent. This will be displayed + // by the system send dialog on the sending and receiving devices. + CategoryGetName (dbP, categoryNum, description); + exgSocket.description = description; + + // Now form a file name + exgSocket.name = MemPtrNew(StrLen(prefix) + StrLen(description) + StrLen(memoSuffix) + sizeOf7BitChar('\0')); + if (exgSocket.name) + { + StrCopy(exgSocket.name, prefix); + StrCat(exgSocket.name, description); + StrCat(exgSocket.name, memoSuffix); + } + + // ABa: Clean superfluous '.' characters + PrvTransferCleanFileName(exgSocket.name); + + exgSocket.length = 0; // rough guess + //exgSocket.target = sysFileCMemo; // commented out 4/24/00 dje + exgSocket.type = (Char *)memoMIMEType; + error = ExgPut(&exgSocket); // put data to destination + + if (!error) + { + error = PrvMemoSendCategoryTryCatch (dbP, categoryNum, &exgSocket, index); + + ExgDisconnect(&exgSocket, error); + } + + // Clean up + if (exgSocket.name) + MemPtrFree(exgSocket.name); + } + else + FrmAlert(noDataAlertID); + + if (databaseReopened) + DmCloseDatabase(dbP); + + return; +} + + +/*********************************************************************** + * + * FUNCTION: MemoReceiveData + * + * DESCRIPTION: Receives data into the output field using the Exg API + * + * PARAMETERS: dbP - database to put received memos in + * exgSocketP - socket from the app code sysAppLaunchCmdExgReceiveData + * numRecordsReceivedP - number of records received is returned here + * + * RETURNED: error code or zero for no error. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * grant 6/25/99 Keep count of received records and return in numRecordsReceivedP + * + ***********************************************************************/ +extern Err MemoReceiveData(DmOpenRef dbP, ExgSocketPtr exgSocketP, UInt16 *numRecordsReceivedP) +{ + volatile Err err; + UInt16 numRecordsReceived; + StreamType stream; + + // initialize new record count + ErrNonFatalDisplayIf(numRecordsReceivedP == NULL, "NULL numRecordsReceivedP"); + *numRecordsReceivedP = 0; + + PrvStreamInit( &stream, exgSocketP); + + // accept will open a progress dialog and wait for your receive commands + err = ExgAccept(exgSocketP); + + if (!err) + { + // Catch errors receiving records. The import routine will clean up the + // incomplete record. This routine displays an error message. + ErrTry + { + // Keep importing records until it can't + while (MemoImportMime(dbP, &stream, PrvReadFunction, false, false, &numRecordsReceived, NULL, 0)) + { + *numRecordsReceivedP += numRecordsReceived; + }; + +// catch the records from the final MemoImportMime + *numRecordsReceivedP += numRecordsReceived; + } + + ErrCatch(inErr) + { + err = inErr; + } ErrEndCatch + + // Aba: A record has been added in the Database iff the GoTo + // uniqueID parameter != 0. + // In the case no record is added, return an error + if (err == errNone && exgSocketP->goToParams.uniqueID == 0) + err = exgErrBadData; + + ExgDisconnect(exgSocketP, err); // closes transfer dialog + err = errNone; // error was reported, so don't return it + } + + return err; +} + + +/************************************************************ + * + * FUNCTION: MemoExportMime + * + * DESCRIPTION: Export a record as a Imc Mime record + * + * PARAMETERS: + * dbP - pointer to the database to export the records from + * index - the record number to export + * recordP - whether the begin statement has been read + * outputStream - pointer to where to export the record to + * outputFunc - function to send output to the stream + * writeUniqueIDs - true to write the record's unique id + * + * RETURNS: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * rsf 8/6/97 Initial Revision + * + *************************************************************/ + +void MemoExportMime(DmOpenRef UNUSED_PARAM(dbP), Int16 UNUSED_PARAM(index), MemoDBRecordType * recordP, + void * outputStream, WriteFunctionF outputFunc, Boolean UNUSED_PARAM(writeUniqueIDs), + Boolean outputMimeInfo) +{ + Char * c; + Char * eolP; + UInt32 len; + + + // Write out all of the memo. All linefeeds must be replaced with CRLF combos. + c = &recordP->note; + + if (outputMimeInfo) + { + if (!ImcStringIsAscii(c)) + outputFunc(outputStream, "Content-Type: Text/plain; charset=ISO-8859-1" crlf, stringZLen); + + outputFunc(outputStream, crlf, stringZLen); + } + + while (*c != '\0') + { + eolP = StrChr(c, linefeedChr); + if (eolP) + { + len = outputFunc( outputStream, c, eolP - c); + + outputFunc(outputStream, crlf, stringZLen); + c = eolP + sizeOf7BitChar(linefeedChr); + } + else if (*c != '\0') + { + eolP = StrChr(c, '\0'); + len = outputFunc( outputStream, c, eolP - c); + + c = eolP; + } + } + outputFunc(outputStream, crlf, stringZLen); // always end with an extra crlf +} + +/*********************************************************************** + * + * FUNCTION: MemoTransferPreview + * + * DESCRIPTION: Create a short string preview of the data coming in. + * + * PARAMETERS: infoP - the preview info from the command parameter block + * of the sysAppLaunchCmdExgPreview launch + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * ABa 11/10/00 Created + * + ***********************************************************************/ +void MemoTransferPreview(ExgPreviewInfoType *infoP) +{ + volatile Err err; + UInt16 numRecordsReceived; + StreamType stream; + + if (infoP->op == exgPreviewQuery) + { + infoP->types = exgPreviewShortString; + return; + } + if (infoP->op != exgPreviewShortString) + { + infoP->error = exgErrNotSupported; + return; + } + + // if we have a description we don't have to parse the vObject + if (infoP->socketP->description && *infoP->socketP->description) + { + StrNCopy(infoP->string, infoP->socketP->description, infoP->size - 1); + infoP->string[infoP->size - 1] = 0; + infoP->error = errNone; + return; + } + + PrvStreamInit(&stream, infoP->socketP); + + err = ExgAccept(infoP->socketP); + + if (!err) + { + ErrTry + { + MemoImportMime((DmOpenRef) NULL, &stream, PrvReadFunction, false, false, &numRecordsReceived, infoP->string, infoP->size); + } + + ErrCatch(inErr) + { + err = inErr; + } ErrEndCatch + + ExgDisconnect(infoP->socketP, err); // closes transfer dialog + } + + infoP->error = err; +} + + +#pragma mark - + +/*********************************************************************** + * + * FUNCTION: PrvStreamInit + * + * DESCRIPTION: Function to put Initialize a stream socket. + * + * PARAMETERS: streamP - the output stream + * exgSocketP - pointer to an intitialized exgSocket + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gavin 10/5/99 Initial revision + * + ***********************************************************************/ +static void PrvStreamInit(StreamType *streamP, ExgSocketPtr exgSocketP) +{ + streamP->socket = exgSocketP; + streamP->bufSize = maxStreamBuf; + streamP->pos = 0; + streamP->len = 0; +} + +/*********************************************************************** + * + * FUNCTION: PrvStreamFlush + * + * DESCRIPTION: Function to put a string to the exg transport. + * + * PARAMETERS: streamP - the output stream + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gavin 10/5/99 Initial revision + * + ***********************************************************************/ +static void PrvStreamFlush(StreamType *streamP) +{ + Err err = 0; + while (streamP->len && !err) + streamP->len -= ExgSend(streamP->socket,streamP->buf,streamP->len,&err); + +} + +/*********************************************************************** + * + * FUNCTION: PrvStreamWrite + * + * DESCRIPTION: Function to put a string to the exg transport. + * + * PARAMETERS: streamP - the output stream + * stringP - the string to put + * + * RETURNED: nothing + * If the all the string isn't sent an error is thrown using ErrThrow. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gavin 10/5/99 Initial revision + * + ***********************************************************************/ +static UInt32 PrvStreamWrite(StreamType *streamP, const Char * stringP, Int32 length, Err *errP) +{ + UInt32 count = 0; + *errP = 0; + + while (count < length && !*errP) + { + if (streamP->len < streamP->bufSize) + { + streamP->buf[streamP->len++] = *stringP++; + count++; + } + else + streamP->len -= ExgSend(streamP->socket, streamP->buf, streamP->len, errP); + } + return count; +} + +/*********************************************************************** + * + * FUNCTION: PrvStreamRead + * + * DESCRIPTION: Function to get a character from the input stream. + * + * PARAMETERS: streamP - the output stream + * + * RETURNED: a character of EOF if no more data + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gavin 10/5/99 Initial revision + * + ***********************************************************************/ +static UInt32 PrvStreamRead(StreamType * streamP, Char *bufP, UInt32 length, Err *errP) +{ + UInt32 count = 0; + + *errP = 0; + while (count < length) + { + if (streamP->pos < streamP->len) + bufP[count++] = streamP->buf[streamP->pos++]; + else + { streamP->pos = 0; + streamP->len = ExgReceive(streamP->socket, streamP->buf, streamP->bufSize, errP); + if (!streamP->len || *errP) + break; + } + } + return count; +} + +/*********************************************************************** + * + * FUNCTION: PrvStreamSocket + * + * DESCRIPTION: returns the socket from a stream. + * + * PARAMETERS: streamP - the output stream + * + * RETURNED: The socket associated with the stream + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gavin 10/5/99 Initial revision + * + ***********************************************************************/ +static ExgSocketPtr PrvStreamSocket(StreamType *streamP) +{ + return streamP->socket; +} + +/*********************************************************************** + * + * FUNCTION: GetChar + * + * DESCRIPTION: Function to get a character from the exg transport. + * + * PARAMETERS: exgSocketP - the exg connection + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 8/15/97 Initial Revision + * + ***********************************************************************/ +static UInt32 PrvReadFunction(const void * stream, Char * bufferP, UInt32 length) +{ + Err err; + UInt32 bytesRead; + bytesRead = PrvStreamRead((StreamType *)stream, bufferP, length, &err); + if (err) + ErrThrow(err); + return bytesRead; +} + + +/*********************************************************************** + * + * FUNCTION: PutString + * + * DESCRIPTION: Function to put a string to the exg transport. + * + * PARAMETERS: exgSocketP - the exg connection + * stringP - the string to put + * + * RETURNED: nothing + * If the all the string isn't sent an error is thrown using ErrThrow. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 8/15/97 Initial Revision + * + ***********************************************************************/ +static UInt32 PrvWriteFunction(void * stream, const Char * const bufferP, Int32 length) +{ + UInt32 len; + Err err; + + // passing -1 length will assume a null terminated string + if (length == -1) length = StrLen(bufferP); + + len = PrvStreamWrite( stream, bufferP, length, &err); + + // If the bytes were not sent throw an error. + if ((len == 0 && length > 0) || err) + ErrThrow(err); + + return len; +} + + +/*********************************************************************** + * + * FUNCTION: PrvTransferCleanFileName + * + * DESCRIPTION: Remove dot characters in file name but not the least + * PARAMETERS: a pointer to a string + * + * RETURNED: String parameter doesn't contains superfluous dot characters + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * ABa 7/28/00 Created + * + ***********************************************************************/ +static void PrvTransferCleanFileName(Char* ioFileName) +{ + Char* mayBeLastDotP; + Char* lastDotP; + UInt32 chrFullStopSize = TxtCharSize(chrFullStop); + + // prevent NULL & empty string + if (ioFileName == NULL || *ioFileName == 0) + return; + + // remove dot but not the last one + mayBeLastDotP = StrChr(ioFileName, chrFullStop); + while ((lastDotP = StrChr(mayBeLastDotP + chrFullStopSize, chrFullStop))) + { + // remove the dot + StrCopy(mayBeLastDotP, mayBeLastDotP + chrFullStopSize); + mayBeLastDotP = lastDotP - chrFullStopSize; + } +} + +/*********************************************************************** + * + * FUNCTION: PrvSetDescriptionAndFilename + * + * DESCRIPTION: Derive and allocate a decription and filename from some text. + * The filename will be a URL which includes the specified scheme. + * + * PARAMETERS: textP - the text string to derive the names from + * descriptionPP - pointer to set to the allocated description + * descriptionHP - MemHandle to set to the allocated description + * filenamePP - pointer to set to the allocated filename + * filenameHP - MemHandle to set to the allocated description + * prefix - the scheme with ":" suffix and optional "?" prefix + * + * RETURNED: a description and filename are allocated and the pointers are set + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 11/4/97 Initial Revision + * + ***********************************************************************/ +static void PrvSetDescriptionAndFilename(Char * textP, Char **descriptionPP, + MemHandle *descriptionHP, Char **filenamePP, MemHandle *filenameHP, const Char * const prefix) +{ + Char * descriptionP; + Int16 descriptionSize; + Coord descriptionWidth; + Boolean descriptionFit; + Char * spaceP; + Char * filenameP; + MemHandle resourceH; + Char * resourceP; + UInt8 filenameLength; + UInt8 schemeLength; + Coord unused; + + + descriptionSize = StrLen(textP); + WinGetDisplayExtent(&descriptionWidth, &unused); + FntCharsInWidth (textP, &descriptionWidth, &descriptionSize, &descriptionFit); + + if (descriptionSize > 0) + { + *descriptionHP = MemHandleNew(descriptionSize+sizeOf7BitChar('\0')); + if (*descriptionHP) + { + descriptionP = MemHandleLock(*descriptionHP); + MemMove(descriptionP, textP, descriptionSize); + descriptionP[descriptionSize] = nullChr; + } + } + else + { + *descriptionHP = DmGetResource(strRsc, BeamDescriptionStr); + descriptionP = MemHandleLock(*descriptionHP); + } + + + if (descriptionSize > 0) + { + // Now form a file name. Use only the first word or two. + spaceP = StrChr(descriptionP, spaceChr); + if (spaceP) + // Check for a second space + spaceP = StrChr(spaceP + sizeOf7BitChar(spaceChr), spaceChr); + + // If at least two spaces were found then use only that much of the description. + // If less than two spaces were found then use all of the description. + if (spaceP) + filenameLength = spaceP - descriptionP; + else + filenameLength = StrLen(descriptionP); + + + // Allocate space and form the filename + schemeLength = StrLen(prefix); + *filenameHP = MemHandleNew(schemeLength + filenameLength + StrLen(memoSuffix) + sizeOf7BitChar('\0')); + filenameP = MemHandleLock(*filenameHP); + if (filenameP) + { + StrCopy(filenameP, prefix); + MemMove(&filenameP[schemeLength], descriptionP, filenameLength); + MemMove(&filenameP[schemeLength + filenameLength], memoSuffix, + StrLen(memoSuffix) + sizeOf7BitChar('\0')); + } + } + else + { + resourceH = DmGetResource(strRsc, BeamFilenameStr); + resourceP = MemHandleLock(resourceH); + + // Allocate space and form the filename + filenameLength = StrLen(resourceP); + schemeLength = StrLen(prefix); + *filenameHP = MemHandleNew(schemeLength + filenameLength + sizeOf7BitChar('\0')); + filenameP = MemHandleLock(*filenameHP); + if (filenameP) + { + StrCopy(filenameP, prefix); + StrCat(filenameP, resourceP); + } + + MemHandleUnlock(resourceH); + DmReleaseResource(resourceH); + } + + + *descriptionPP = descriptionP; + *filenamePP = filenameP; +} + + +/*********************************************************************** + * + * FUNCTION: PrvMemoSendRecordTryCatch + * + * DESCRIPTION: Send a record. + * + * PARAMETERS: dbP - pointer to the database to add the record to + * recordNum - the record number to send + * recordP - pointer to the record to send + * exgSocketP - the exchange socket used to send + * + * RETURNED: 0 if there's no error + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 12/11/97 Initial Revision + * + ***********************************************************************/ +static Err PrvMemoSendRecordTryCatch (DmOpenRef dbP, Int16 recordNum, + MemoDBRecordPtr recordP, ExgSocketPtr exgSocketP) +{ + volatile Err error = 0; + StreamType stream; + + PrvStreamInit(&stream, exgSocketP); + + // An error can happen anywhere during the send process. It's easier just to + // catch the error. If an error happens, we must pass it into ExgDisconnect. + // It will then cancel the send and display appropriate ui. + ErrTry + { + MemoExportMime(dbP, recordNum, recordP, &stream, PrvWriteFunction, true, false); + } + + ErrCatch(inErr) + { + error = inErr; + } ErrEndCatch + + PrvStreamFlush( &stream); + return error; +} + + +/*********************************************************************** + * + * FUNCTION: PrvMemoSendCategoryTryCatch + * + * DESCRIPTION: Send all visible records in a category. + * + * PARAMETERS: dbP - pointer to the database to add the record to + * categoryNum - the category of records to send + * exgSocketP - the exchange socket used to send + * index - the record number of the first record in the category to send + * + * RETURNED: 0 if there's no error + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * roger 12/11/97 Initial Revision + * + ***********************************************************************/ +static Err PrvMemoSendCategoryTryCatch (DmOpenRef dbP, UInt16 categoryNum, + ExgSocketPtr exgSocketP, UInt16 index) +{ + volatile Err error = 0; + volatile MemHandle outRecordH = 0; + MemoDBRecordType *outRecordP; + StreamType stream; + + // An error can happen anywhere during the send process. It's easier just to + // catch the error. If an error happens, we must pass it into ExgDisconnect. + // It will then cancel the send and display appropriate ui. + ErrTry + { + + PrvStreamInit(&stream, exgSocketP); + + // Write out the beginning of a multipart mime message + PrvWriteFunction(&stream, + mimeVersionString + "Content-type: multipart/mixed; boundary=\"" simpleBoundary "\"" crlf crlf, stringZLen); + + // Loop through all records in the category. + while (DmSeekRecordInCategory(dbP, &index, 0, dmSeekForward, categoryNum) == 0) + { + // Emit the record. If the record is private do not emit it. + outRecordH = DmQueryRecord (dbP, index); + + if (outRecordH != 0) + { + outRecordP = (MemoDBRecordType *) MemHandleLock(outRecordH); + + // Emit a mime boundary + PrvWriteFunction(&stream, delimiter crlf, stringZLen); + + MemoExportMime(dbP, index, outRecordP, &stream, PrvWriteFunction, true, true); + + MemHandleUnlock(outRecordH); + } + + index++; + } + outRecordH = 0; + dbP = 0; + + // All done. Write out an epilogue. + PrvWriteFunction(&stream, delimiter "--" crlf crlf, stringZLen); + } + + ErrCatch(inErr) + { + error = inErr; + + if (outRecordH) + MemHandleUnlock(outRecordH); + } ErrEndCatch + + PrvStreamFlush(&stream); + + return error; +} + +/*********************************************************************** + * + * FUNCTION: PrvMemoSetGoToParams + * + * DESCRIPTION: Store the information necessary to navigate to the + * record inserted into the launch code's parameter block. + * + * PARAMETERS: dbP - pointer to the database to add the record to + * exgSocketP - parameter block passed with the launch code + * uniqueID - unique id of the record inserted + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/17/97 Created + * + ***********************************************************************/ +static void PrvMemoSetGoToParams (DmOpenRef dbP, ExgSocketPtr exgSocketP, UInt32 uniqueID) +{ + UInt16 recordNum; + UInt16 cardNo; + LocalID dbID; + + + if (! uniqueID) return; + + DmOpenDatabaseInfo (dbP, &dbID, NULL, NULL, &cardNo, NULL); + + // The this the the first record inserted, save the information + // necessary to navigate to the record. + if (! exgSocketP->goToParams.uniqueID) + { + DmFindRecordByID (dbP, uniqueID, &recordNum); + + exgSocketP->goToCreator = sysFileCMemo; + exgSocketP->goToParams.uniqueID = uniqueID; + exgSocketP->goToParams.dbID = dbID; + exgSocketP->goToParams.dbCardNo = cardNo; + exgSocketP->goToParams.recordNum = recordNum; + } + + // If we already have a record then make sure the record index + // is still correct. Don't update the index if the record is not + // in your the app's database. + else if (dbID == exgSocketP->goToParams.dbID && + cardNo == exgSocketP->goToParams.dbCardNo) + { + DmFindRecordByID (dbP, exgSocketP->goToParams.uniqueID, &recordNum); + + exgSocketP->goToParams.recordNum = recordNum; + } +} + + +/************************************************************ + * + * FUNCTION: PrvReadThroughCRLF + * + * DESCRIPTION: Consume data up to and including the next CRLF. + * + * PARAMETERS: + * inputStreamP - pointer to where to import from + * bufferP - where the input stream is stored + * bufferLengthP - the length of bufferP used + * + * RETURNED: error code or zero for no error. + * + * ASSUMPTIONS: + * Buffer is full when called + * Buffer is big enough to hold a full line (including LF) + * ...so CR/LF will never split + * END CONDITION: + * Buffer is full when routine exits. + * + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * bob 1/26/98 initial revision + * + *************************************************************/ +static Err PrvReadThroughCRLF(ReadFunctionF inputFunc, void * inputStreamP, Char * bufferP, UInt16 * bufferLengthP) +{ + char *c; + UInt16 charsRead; + Err err = 0; + Boolean gotOne = false; + + while (*bufferLengthP > 0 && !gotOne) + { + c = StrChr(bufferP, crChr); + if (c == NULL) + c = &bufferP[*bufferLengthP]; // end of the buffer + else if (c < bufferP + *bufferLengthP - 1) // guard against buffer splitting cr/lf + { + c += sizeOf7BitChar(crChr) + sizeOf7BitChar(linefeedChr); + gotOne = true; + } + + // Consume everything up to the CR/NULL + MemMove(bufferP, c, &bufferP[*bufferLengthP] - c); + *bufferLengthP = &bufferP[*bufferLengthP] - c; + + // Read in more chars + charsRead = inputFunc(inputStreamP, bufferP + *bufferLengthP, importBufferMaxLength - *bufferLengthP); + *bufferLengthP += charsRead; + bufferP[*bufferLengthP] = nullChr; + } + + return err; +} + + +/************************************************************ + * + * FUNCTION: PrvMemoImportFinishRecord + * + * DESCRIPTION: Make sure record is null terminated, and close it. + * + * PARAMETERS: + * dbP - pointer to the database to add the record to + * indexNew - index of new record + * newRecordH - MemHandle to new record + * newRecordSize - bytes currently in new record + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * bob 1998-02-05 Moved out of MemoImportMime + * + *************************************************************/ +static void PrvMemoImportFinishRecord(DmOpenRef dbP, UInt16 indexNew, MemHandle *newRecordHPtr, UInt16 *newRecordSizePtr, void * inputStream) +{ + Char * newRecordP; + MemHandle newHandle; // Used to follow resized records which move + + + ErrNonFatalDisplayIf(*newRecordHPtr == NULL, "Null record MemHandle."); + + // Make sure the record is nullChr terminated + newRecordP = MemHandleLock(*newRecordHPtr); + if (newRecordP[*newRecordSizePtr - sizeof(char)] != nullChr) + { + MemHandleUnlock(*newRecordHPtr); + newHandle = DmResizeRecord(dbP, indexNew, *newRecordSizePtr + sizeOf7BitChar(nullChr)); + if (newHandle) + *newRecordHPtr = newHandle; + else + ErrThrow(exgMemError); + + newRecordP = MemHandleLock(*newRecordHPtr); + DmWrite(newRecordP, *newRecordSizePtr, "", sizeOf7BitChar(nullChr)); + } + + // let the record go + MemHandleUnlock(*newRecordHPtr); + DmReleaseRecord(dbP, indexNew, true); + + + *newRecordHPtr = NULL; + *newRecordSizePtr = 0; +} + + +/************************************************************ + * + * FUNCTION: PrvMemoImportMimeCleanup + * + * DESCRIPTION: Cleanup function for MemoImportMime + * + * PARAMETERS: + * dbP - pointer to the database to add the record to + * firstRecordID - uniqueID of the first record we loaded + * inputStream - pointer to where to import the record from + * numRecordsReceived - number of records received + * numRecordsReceivedP - pointer to the number of records received + * + * RETURNS: None + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * FPa 11/22/00 Initial Revision + * + *************************************************************/ +void PrvMemoImportMimeCleanup(DmOpenRef dbP, UInt32 firstRecordID, void* inputStream, UInt16 numRecordsReceived, UInt16* numRecordsReceivedP) +{ + // if we got at least one record, sort and set goto parameters... + if (firstRecordID) + { + MemoSort(dbP); + PrvMemoSetGoToParams (dbP, PrvStreamSocket(inputStream), firstRecordID); + } + + // return number of records received + *numRecordsReceivedP = numRecordsReceived; +} diff --git a/handera-sdk-105/examples/ExampleI/Src/Trg.h b/handera-sdk-105/examples/ExampleI/Src/Trg.h new file mode 100644 index 0000000..c220ea8 --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/Trg.h @@ -0,0 +1,56 @@ +/*********************************************************************** + * + * Copyright (c) 2001 TRG, All Rights Reserved + * + * FileName: + * TRG.h + * + * Description: + * + * + * History: + * 7-10-00 -- original version + * + **********************************************************************/ +#ifndef _TRG_H_ +#define _TRG_H_ + +#include +#include + +#define TRGSysFtrID 'TRG ' + +#ifdef __GNUC__ + +#define _TRG_CALL_WITH_16BIT_SELECTOR(table, vector, selector)\ + __attribute__ ((__callseq__ (\ + "move.w #" _Str(selector) ",%%d2; "\ + "trap #" _Str(table) "; dc.w " _Str(vector) ))) + +#elif defined (__MWERKS__) /* The equivalent in CodeWarrior syntax */ + +#define _TRG_CALL_WITH_16BIT_SELECTOR(table, vector, selector) \ + = { 0x343C, selector, 0x4E40 + table, vector } + +#endif + +#define TRG_TRAP(sel) \ + _TRG_CALL_WITH_16BIT_SELECTOR(_SYSTEM_TABLE, sysTrapOEMDispatch, sel) + +#ifdef BUILDING_EXTENSION + #define EXT_TRAP(x) +#else + #define EXT_TRAP(x) TRG_TRAP(x) +#endif + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifdef __cplusplus + } +#endif + + +#endif diff --git a/handera-sdk-105/examples/ExampleI/Src/Vga.h b/handera-sdk-105/examples/ExampleI/Src/Vga.h new file mode 100644 index 0000000..38d4cb9 --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/Src/Vga.h @@ -0,0 +1,368 @@ +/**************************************************************************** + * + * Copyright (c) 2001, TRG, All Rights Reserved + * + *--------------------------------------------------------------------------- + * FileName: + * Vga.h + * + * Description: + * VGA API definitions. + * + * + ****************************************************************************/ + +#ifndef __VGA_H__ +#define __VGA_H__ + +#include "Trg.h" + +#define TRGVgaFtrNum 2 + +/*-------------------------------------------------------------------------- + * Vga result codes + * (oemErrorClass is reserved for Palm licensees). + *-------------------------------------------------------------------------*/ +#define vgaErrorClass (oemErrorClass | 0x200) + +#define vgaErrUnimplemented (vgaErrorClass | 0) // function not implemented (on this hardware) +#define vgaErrBadParam (vgaErrorClass | 1) // invalid parameter +#define vgaErrModeUnsupported (vgaErrorClass | 2) // does not support screen mode +#define vgaErrScreenLocked (vgaErrorClass | 3) // ??? +#define vgaErrFontUndefined (vgaErrorClass | 4) // ??? + +/*--------------------------------------------------------------------------- + * Extension Installed + *--------------------------------------------------------------------------*/ +#define _TRGVGAFeaturePresent(versionPtr) \ + (Boolean)(FtrGet(TRGSysFtrID, TRGVgaFtrNum, versionPtr) == 0) + + +/*--------------------------------------------------------------------------- + * Notification that the screen area changed (silk minimize/maximized, rotation) + *--------------------------------------------------------------------------*/ +#define displayExtentChangedEvent ((eventsEnum)(firstUserEvent-2)) +typedef struct displayExtentChangedDataType +{ + RectangleType oldDim; + RectangleType newDim; +} displayExtentChangedDataType; + +/*--------------------------------------------------------------------------- + * Macro to simplify getting the data out of the event structure. + * Example: + * yDiff = displayExtentChangedData(eventP)->newDim->extent.y - + * displayExtentChangedData(eventP)->oldDim->extent.y; + *--------------------------------------------------------------------------*/ +#define displayExtentChangedData(eventP) ((displayExtentChangedDataType *)(&((eventP)->data.generic))) + +/*--------------------------------------------------------------------------- + * Vga Font ID's + *--------------------------------------------------------------------------*/ +enum vgaFontID { + vga4x8FixedFont = 0x00, + vga10x16FixedFont, + vga14x22FixedFont +}; + +typedef enum vgaFontID VgaFontID; + +/*--------------------------------------------------------------------------- + * Screen and rotation modes + *--------------------------------------------------------------------------*/ +typedef enum +{ + screenModeScaleToFit = 0, + screenMode1To1, + screenModeOffset //System Use Only +} VgaScreenModeType; + +typedef enum +{ + rotateModeNone = 0, + rotateMode90, + rotateMode180, + rotateMode270 +} VgaRotateModeType; + +/*--------------------------------------------------------------------------- + * Legacy app display modes. + *--------------------------------------------------------------------------*/ +typedef enum +{ + offsetModeTopLeft = 0, + offsetModeTopCenter, + offsetModeTopRight, + offsetModeCenterLeft, + offsetModeCenterCenter, + offsetModeCenterRight, + offsetModeBottomLeft, + offsetModeBottomCenter, + offsetModeBottomRight +} VgaOffsetModeType; + +/*--------------------------------------------------------------------------- + * Font Select Types + *--------------------------------------------------------------------------*/ +typedef enum +{ + vgaFontSelectPalm = 0, + vgaFontSelectVgaText +} VgaFontSelectType; + +/*--------------------------------------------------------------------------- + * Form Modify Types + *--------------------------------------------------------------------------*/ +typedef enum +{ + vgaFormModify160To240 = 0 +} VgaFormModifyType; + +/*--------------------------------------------------------------------------- + * Vga Screen State + *--------------------------------------------------------------------------*/ +typedef struct VgaScreenStateType +{ + VgaScreenModeType mode; + VgaRotateModeType rotate; + VgaOffsetModeType offset; +} VgaScreenStateType; + +/*--------------------------------------------------------------------------- + * Vga System State + *--------------------------------------------------------------------------*/ +typedef struct VgaSystemStateType +{ + VgaScreenModeType screenMode; + Int16 offset_X; + Int16 offset_Y; + + UInt8 draw_override; + UInt8 list_draw; + UInt8 use_large_font; + UInt8 use_large_nontextfont; + + UInt8 reserved[16]; +} VgaSystemStateType; + + +#ifdef __cplusplus +extern "C" { +#endif + +#define trgMinVgaFunction 0x0200 +#define trgGetScreenMode (trgMinVgaFunction + 0) +#define trgSetScreenMode (trgMinVgaFunction + 1) + +#define trgBitmapExpandedExtent (trgMinVgaFunction + 2) +#define trgNOP (trgMinVgaFunction + 3) //Remove +#define trgWinDrawBitmapExpanded (trgMinVgaFunction + 4) + +#define trgBaseToVgaFont (trgMinVgaFunction + 5) +#define trgFontSelect (trgMinVgaFunction + 6) +#define trgGetFrmTitleHeight (trgMinVgaFunction + 7) +#define trgIsVgaFont (trgMinVgaFunction + 8) +#define trgVgaEnable (trgMinVgaFunction + 9) +#define trgVgaDisable (trgMinVgaFunction + 10) +#define trgVgaIsEnabled (trgMinVgaFunction + 11) +#define trgGetLegacyMode (trgMinVgaFunction + 12) +#define trgSetLegacyMode (trgMinVgaFunction + 13) + +#define trgTableUseBaseFont (trgMinVgaFunction + 14) + +#define trgFrmModify (trgMinVgaFunction + 15) + +#define trgVgaToBaseFont (trgMinVgaFunction + 16) + +#define trgReloadAppPrefs (trgMinVgaFunction + 17) + +#define trgSaveScreenState (trgMinVgaFunction + 18) +#define trgRestoreScreenState (trgMinVgaFunction + 19) + +#define trgRotateSelect (trgMinVgaFunction + 20) + +#define trgGetSystemState (trgMinVgaFunction + 21) + +#define trgGetFontPtr (trgMinVgaFunction + 22) +#define trgSetFontPtr (trgMinVgaFunction + 23) +#define trgGetNumVgaFonts (trgMinVgaFunction + 24) +#define trgPalmFontID (trgMinVgaFunction + 25) + +#define trgMaxVgaFunction 0x0219 + + +/******************************************************************** + * VGA API Prototypes + ********************************************************************/ + +/*--------------------------------------------------------------------------- + * Returns the current mode and rotation settings + *--------------------------------------------------------------------------*/ +extern void VgaGetScreenMode(VgaScreenModeType *mode, VgaRotateModeType *rotation) + EXT_TRAP(trgGetScreenMode); + +/*--------------------------------------------------------------------------- + * Set current screen mode. + *--------------------------------------------------------------------------*/ +extern Err VgaSetScreenMode(VgaScreenModeType mode, VgaRotateModeType rotation) + EXT_TRAP(trgSetScreenMode); + +/*--------------------------------------------------------------------------- + * Pass in non-expanded bitmap and destination, returns the X & Y extent + * the expanded bitmap. + *--------------------------------------------------------------------------*/ +extern void VgaBitmapExpandedExtent(BitmapPtr bitmapP, Coord *extentX, Coord *extentY) + EXT_TRAP(trgBitmapExpandedExtent); + +/*--------------------------------------------------------------------------- + * Draw the bitmap at 1.5 scale. This is needed for non 160x160 applications + * that need to expand existing small bitmaps. (IE Launcher) + *--------------------------------------------------------------------------*/ +extern void VgaWinDrawBitmapExpanded(BitmapPtr bitmapP, Coord x, Coord y) + EXT_TRAP(trgWinDrawBitmapExpanded); + +/*--------------------------------------------------------------------------- + * Take the Palm font and return the 1.5 scale font + *--------------------------------------------------------------------------*/ +extern FontID VgaBaseToVgaFont(FontID font) + EXT_TRAP(trgBaseToVgaFont); + +/*--------------------------------------------------------------------------- + * Take the Vga font and return the Palm font + *--------------------------------------------------------------------------*/ +extern FontID VgaVgaToBaseFont(FontID font) + EXT_TRAP(trgVgaToBaseFont); + +/*--------------------------------------------------------------------------- + * Display the TRG Select Font dialog which shows the 4 Palm text fonts + * plus the 4 equivalent TRG larger fonts. + *--------------------------------------------------------------------------*/ +extern FontID VgaFontSelect(VgaFontSelectType selectFormType, FontID fontID) + EXT_TRAP(trgFontSelect); + +/*--------------------------------------------------------------------------- + * Is font a 1.5 expanded font. + *--------------------------------------------------------------------------*/ +extern Boolean VgaIsVgaFont(FontID font) + EXT_TRAP(trgIsVgaFont); + +/*--------------------------------------------------------------------------- + * Use small Palm font when drawing tableItemStyles excluding customTableItem + * which determines its + *--------------------------------------------------------------------------*/ +extern void VgaTableUseBaseFont(TablePtr table, Boolean on) + EXT_TRAP(trgTableUseBaseFont); + +/*--------------------------------------------------------------------------- + * Return the heigth of the Titlebar. Necessary for placement of form text + * and objects + *--------------------------------------------------------------------------*/ +extern UInt16 VgaGetFrmTitleHeight(void) + EXT_TRAP(trgGetFrmTitleHeight); + +/*--------------------------------------------------------------------------- + * VgaEnable + *--------------------------------------------------------------------------*/ +extern void VgaEnable(Boolean redraw) + EXT_TRAP(trgVgaEnable); + +/*--------------------------------------------------------------------------- + * VgaDisable + *--------------------------------------------------------------------------*/ +extern void VgaDisable(Boolean redraw) + EXT_TRAP(trgVgaDisable); + +/*--------------------------------------------------------------------------- + * VgaIsEnabled + *--------------------------------------------------------------------------*/ +extern Boolean VgaIsEnabled(void) + EXT_TRAP(trgVgaIsEnabled); + +/*--------------------------------------------------------------------------- + * VgaGetLegacyMode + *--------------------------------------------------------------------------*/ +extern void VgaGetLegacyMode(VgaScreenModeType *viewMode, VgaOffsetModeType *offsetMode) + EXT_TRAP(trgGetLegacyMode); + +/*--------------------------------------------------------------------------- + * VgaSetLegacyMode + *--------------------------------------------------------------------------*/ +extern void VgaSetLegacyMode(VgaScreenModeType viewMode, VgaOffsetModeType offsetMode) + EXT_TRAP(trgSetLegacyMode); + +/*--------------------------------------------------------------------------- + * VgaFormModify + *--------------------------------------------------------------------------*/ +extern Err VgaFormModify(FormType *frmP, VgaFormModifyType type) + EXT_TRAP(trgFrmModify); + +/*--------------------------------------------------------------------------- + * VgaFormModify + * + * #define to allow the old VgaFrmModify routine. Please change your code to + * use the new VgaFormModify routine above. This #define will be removed in + * the future. + *--------------------------------------------------------------------------*/ +#define VgaFrmModify(frmP, type) (VgaFormModify((frmP, type))) + +/*--------------------------------------------------------------------------- + * VgaLoadAppPrefs + *--------------------------------------------------------------------------*/ +extern void VgaReloadAppPrefs(void) + EXT_TRAP(trgReloadAppPrefs); + +/*--------------------------------------------------------------------------- + * VgaSaveScreenState + *--------------------------------------------------------------------------*/ +extern void VgaSaveScreenState(VgaScreenStateType *state) + EXT_TRAP(trgSaveScreenState); + +/*--------------------------------------------------------------------------- + * VgaRestoreScreenState + *--------------------------------------------------------------------------*/ +extern Err VgaRestoreScreenState(VgaScreenStateType *state) + EXT_TRAP(trgRestoreScreenState); + +/*--------------------------------------------------------------------------- + * VgaRotateSelect + *--------------------------------------------------------------------------*/ +extern VgaRotateModeType VgaRotateSelect (VgaRotateModeType rotateMode) + EXT_TRAP(trgRotateSelect); + +/*--------------------------------------------------------------------------- + * VgaGetSystemState + *--------------------------------------------------------------------------*/ +extern void VgaGetSystemState(VgaSystemStateType *pState) + EXT_TRAP(trgGetSystemState); + +/*--------------------------------------------------------------------------- + * VgaGetFontPtr + *--------------------------------------------------------------------------*/ +extern Err VgaGetFontPtr(FontID font, FontPtr *fontP) + EXT_TRAP(trgGetFontPtr); + +/*--------------------------------------------------------------------------- + * VgaSetFontPtr + *--------------------------------------------------------------------------*/ +extern Err VgaSetFontPtr(FontID font, FontPtr fontP) + EXT_TRAP(trgSetFontPtr); + +/*--------------------------------------------------------------------------- + * VgaGetNumVgaFonts + *--------------------------------------------------------------------------*/ +extern UInt16 VgaGetNumVgaFonts(void) + EXT_TRAP(trgGetNumVgaFonts); + + +/*--------------------------------------------------------------------------- + * VgaPalmFontID + *--------------------------------------------------------------------------*/ +extern FontID VgaPalmFontID(VgaFontID font) + EXT_TRAP(trgPalmFontID); + +#ifdef __cplusplus +} +#endif + + +#endif // __VGA_H__ diff --git a/handera-sdk-105/examples/ExampleI/TRGChangeLog.txt b/handera-sdk-105/examples/ExampleI/TRGChangeLog.txt new file mode 100644 index 0000000..57105d5 --- /dev/null +++ b/handera-sdk-105/examples/ExampleI/TRGChangeLog.txt @@ -0,0 +1,57 @@ +Changes required to convert MemoPad to a QVGA aware application. +Based on the PalmOS 4.0 SDK version, all changes are surrounded by: +/* TRG */ +changes +/* end TRG */ +to make them easier to find. All code changes are within MemoMain.c + +1. Resource changes. + + a. Add QVGA IconsAdd IconID 2000 and 2001 which are 32x32 (1.5x icon view icon) and + 22x15 (1.5x list view icon). + b. Change ListView table number of rows to 25. + c. Add HandEra.r resource to indicate it is a Handera 330 aware application. + d. Fix typo in AlertID 2000, remove extra space before first period. + +2. Support the larger screen. Switching to 1to1 mode (240x240) gives + access to the additional fonts and allows supporting the minimized + silk screen. Note that if you have any bitmaps, you'll need to add + 1.5x versions at originalID + 0x1000 to your resources. + + a. Add #include "vga.h" to the top. + b. Add a vgaExists global (Boolean). + c. Add a check for vga existence in StartApplication() and set the + vgaExists global. + d. Add a call to VgaSetScreenMode() in StartApplication(). + e. Add call to VgaFormModify() in EditViewHandleEvent and + ListViewHandleEvent frmOpenEvent and frmGotoEvent cases. + f. Add VgaFormModify() to the modal forms in: DetailsInit(), + DeleteRecord(), EditViewDeleteRecord(), and PreferencesInit(). + +3. Cleanup font issues. The default font needs to be changed to the + standard font instead of the smallest. Also, calls to + VgaTableUseBaseFont() need to be put in where the table is using + small fonts. + + a. ListViewHandleEvent() frmOpenCase, add VgaTableUseBaseFont(, !VgaIsVgaFont()). + b. SelectFont() add VgaTableUseBaseFont(, !VgaIsVgaFont()) if it is ListView. + c. MemoLoadPrefs() add VgaBaseToVgaFont() to get the correct default font. + d. ListViewDisplayMask() adjust for new lock bitmap size and use new bitmap + when using a Vga font. + +4. Support the virtual silk screen. + + a. Add functions EditViewResizeForm() and ListViewResizeForm(), + and the utility functions PrvMoveObject(), PrvResizeObject(), + and PrvFrmGetGSI(). + b. Call appropriate ResizeForm function from frmOpenEvent to + handle the case where the app is launched with the silk minimized. + c. Add vgaChangedEvent to ListViewHandleEvent and EditViewHandleEvent + and call appropriate ResizeForm(). + +5. Support one-hand operation. + a. Add handler for chrCarriageReturn and chrEscape to EditViewHandleEvent() + which returns to the ListView. + b. Add handlers for chrCarriageReturn, vchrNextField, and vchrPrevField + to ListViewHandleEvent(). + c. Unselect item if category changes. diff --git a/handera-sdk-105/examples/ExampleJ/ExampleJ.mcp b/handera-sdk-105/examples/ExampleJ/ExampleJ.mcp new file mode 100644 index 0000000000000000000000000000000000000000..f61741bcbeb7dd2cfa77b29694e87a9a09ec12c9 GIT binary patch literal 50607 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 qxOOO)9nDyM*?gvf1 +#include +#include "StarterRsc.h" + +#include "Vga.h" +#include "Audio.h" +#include "TrgChars.h" +#include "Wave.h" +#include "starter.h" +#include "MainForm.h" + +/*********************************************************************** + * + * Local Types + * + ***********************************************************************/ +typedef enum { + audioStateNoVolume, + audioStateNoFile, + audioStateOpen, + audioStatePlaying, + audioStateRecording +} AudioStateType; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ +extern Boolean vgaPresent; +extern Boolean auxButtonPresent; +extern Boolean cardChangedOccurred; + +/*********************************************************************** + * + * Local Constants + * + ***********************************************************************/ +#define WAVE_FILE "ExampleJ.wav" + +#define recordStartEvent ((eventsEnum)((Int16)firstUserEvent)) + +/*********************************************************************** + * + * Local Functions + * + ***********************************************************************/ +static void *GetObjectPtr (UInt16 objectID); +static void SetControls (void); +static void SetSliderPercent (FormPtr frmP, UInt16 percent); +static void HideObject (UInt16 id); +static void ShowObject (UInt16 id); + +static void HandlePlayButton (void); +static void HandleStopButton (void); +static void HandleRecordButton (void); +static void HandleProgress (EventPtr eventP); +static void HandlePauseButton (void); +static void HandleSliderControl(EventPtr eventP); + + +/*********************************************************************** + * + * Local Variables + * + ***********************************************************************/ +static AudioStateType audioState; +static Boolean canRecord; +static Boolean launchedFromButton; + + + /*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + +/*********************************************************************** + * + * FUNCTION: PrvMoveObject + * + * DESCRIPTION: This routine moves an object vertically within a form. + * + * PARAMETERS: + * + * RETURNED: nothing + * + ***********************************************************************/ +static void PrvMoveObject(FormPtr frmP, UInt16 objIndex, Coord y_diff, Boolean draw) +{ + RectangleType r; + + FrmGetObjectBounds(frmP, objIndex, &r); + if (draw) + { + RctInsetRectangle(&r, -2); //need to erase the frame as well + WinEraseRectangle(&r, 0); + RctInsetRectangle(&r, 2); + } + r.topLeft.y += y_diff; + FrmSetObjectBounds(frmP, objIndex, &r); +} + + +/*********************************************************************** + * + * FUNCTION: SetSliderPercent + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void SetSliderPercent(FormPtr frmP, UInt16 percent) +{ + ControlPtr sliderP; + + sliderP = (ControlPtr)GetObjectPtr(MainProgressSliderControl); + CtlSetSliderValues(sliderP, NULL, NULL, NULL, &percent); +} + + /*********************************************************************** + * + * FUNCTION: HideObject + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HideObject(UInt16 id) +{ + UInt16 obj_index; + + obj_index = FrmGetObjectIndex(FrmGetActiveForm(), id); + FrmHideObject(FrmGetActiveForm(), obj_index); +} + +/*********************************************************************** + * + * FUNCTION: ShowObject + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void ShowObject(UInt16 id) +{ + UInt16 obj_index; + + obj_index = FrmGetObjectIndex(FrmGetActiveForm(), id); + FrmShowObject(FrmGetActiveForm(), obj_index); +} + + + /*********************************************************************** + * + * FUNCTION: SetControls + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void SetControls(void) +{ + FieldPtr fldP; + Char *tmp; + FormPtr frmP; + + switch (audioState) + { + case audioStateNoVolume : + HideObject(MainPlayButton); + HideObject(MainPauseButton); + HideObject(MainRecordButton); + HideObject(MainStopButton); + HideObject(MainProgressSliderControl); + ShowObject(MainCardNotFoundLabel); + HideObject(MainProgressField); + break; + case audioStateNoFile : + HideObject(MainPlayButton); + HideObject(MainPauseButton); + canRecord ? ShowObject(MainRecordButton) : HideObject(MainRecordButton); + HideObject(MainStopButton); + HideObject(MainProgressSliderControl); + HideObject(MainCardNotFoundLabel); + HideObject(MainProgressField); + break; + case audioStateOpen : + ShowObject(MainPlayButton); + ShowObject(MainPauseButton); + canRecord ? ShowObject(MainRecordButton) : HideObject(MainRecordButton); + ShowObject(MainStopButton); + ShowObject(MainProgressSliderControl); + HideObject(MainCardNotFoundLabel); + HideObject(MainProgressField); + break; + case audioStatePlaying : + HideObject(MainPlayButton); + ShowObject(MainPauseButton); + HideObject(MainRecordButton); + ShowObject(MainStopButton); + ShowObject(MainProgressSliderControl); + HideObject(MainCardNotFoundLabel); + HideObject(MainProgressField); + break; + case audioStateRecording : + HideObject(MainPlayButton); + HideObject(MainPauseButton); + HideObject(MainRecordButton); + ShowObject(MainStopButton); + HideObject(MainProgressSliderControl); + HideObject(MainCardNotFoundLabel); + frmP = FrmGetActiveForm(); + ShowObject(MainProgressField); + fldP = (FieldPtr)GetObjectPtr(MainProgressField); + if ((tmp = FldGetTextPtr(fldP)) != NULL) + MemPtrFree(tmp); + tmp = (Char *)MemPtrNew(10); + StrCopy(tmp, "00:00"); + FldSetTextPtr(fldP, tmp); + FldDrawField(fldP); + break; + } +} + + /*********************************************************************** + * + * FUNCTION: HandlePlayButton + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandlePlayButton(void) +{ + Err retval; + + if (audioState != audioStateOpen) + return; + + audioState = audioStatePlaying; + SetControls(); + if ((retval = WavePlay()) == errNone) + audioState = audioStateOpen; + SetControls(); + + if (retval != errNone) + ErrAlert(retval); +} + +/*********************************************************************** + * + * FUNCTION: HandlePauseButton + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandlePauseButton(void) +{ + if (audioState != audioStatePlaying) + return; + +/*------------------------------------------------------------------------ + * Note : There is no pause state. WavePlay() will return after call to + * WavePause(), which will put state into audioStateStop. + *----------------------------------------------------------------------*/ + WavePause(); +} + + /*********************************************************************** + * + * FUNCTION: HandleStopButton + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandleStopButton(void) +{ + WaveStop(); + SetSliderPercent(FrmGetActiveForm(), 0); +} + +/*********************************************************************** + * + * FUNCTION: HandleRecordButton + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandleRecordButton(void) +{ + Boolean savedLaunchedFlag = false; + Err retval; + + if (audioState == audioStatePlaying) + return; + + WaveClose(); + + if ((retval = WaveCreate(WAVE_FILE)) == errNone) + { + audioState = audioStateRecording; + SetControls(); + + if (launchedFromButton) + { + savedLaunchedFlag = true; + SndPlaySystemSound(sndInfo); + SysTaskDelay(8); + } + + retval = WaveRecord(); + + if (savedLaunchedFlag) + { + SndPlaySystemSound(sndInfo); + SysTaskDelay(10); + SndPlaySystemSound(sndInfo); + } + + WaveClose(); + + if (retval == errNone) + { + if (WaveOpen(WAVE_FILE) == errNone) + { + audioState = audioStateOpen; + SetSliderPercent(FrmGetActiveForm(), 0); + } + else + audioState = audioStateNoFile; + } + } + else + audioState = audioStateNoFile; + + if (retval != errNone) + ErrAlert(retval); + + SetSliderPercent(FrmGetActiveForm(), 0); + SetControls(); +} + + /*********************************************************************** + * + * FUNCTION: HandleProgress + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandleProgress(EventPtr eventP) +{ + FormPtr frmP; + FieldPtr fldP; + UInt8 percent; + UInt16 minutes, seconds; + + percent = eventP->tapCount; + minutes = eventP->screenX; + seconds = eventP->screenY; + + frmP = FrmGetActiveForm(); + + if (launchedFromButton) + { +/*------------------------------------------------------------------------ + * If user let go of the Aux button + *----------------------------------------------------------------------*/ + if (auxButtonPresent && ((KeyCurrentState() & keyBitAux) == 0)) + { + launchedFromButton = false; + WaveStop(); + SetSliderPercent(FrmGetActiveForm(), 0); + return; + } + } + + if (audioState == audioStatePlaying) + SetSliderPercent(frmP, percent); + else if (audioState == audioStateRecording) + { + Char *buf, *tmp; + + buf = (Char *)MemPtrNew(20); + StrPrintF(buf, "%02d:%02d", minutes, seconds); + fldP = (FieldPtr)GetObjectPtr(MainProgressField); + if ((tmp = FldGetTextPtr(fldP)) != NULL) + MemPtrFree(tmp); + FldSetTextPtr(fldP, buf); + FldDrawField(fldP); + } + + EvtResetAutoOffTimer(); +} + +/*********************************************************************** + * + * FUNCTION: HandleSliderControl + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandleSliderControl(EventPtr eventP) +{ + static Err retval; + + retval = WaveSeek(eventP->data.ctlSelect.value); // tapCount is percent + +} + + /*********************************************************************** + * + * FUNCTION: MainFormHandleVolumeMounted + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +void MainFormHandleVolumeMounted (Boolean draw) +{ + if (WaveOpen(WAVE_FILE) == errNone) + audioState = audioStateOpen; + else + audioState = audioStateNoFile; + + if (draw) + { + SetSliderPercent(FrmGetActiveForm(), 0); + SetControls(); + FrmDrawForm(FrmGetActiveForm()); + } +} + +/*********************************************************************** + * + * FUNCTION: MainFormHandleVolumeUnmounted + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: Nothing + * + ***********************************************************************/ +void MainFormHandleVolumeUnmounted(Boolean draw) +{ + audioState = audioStateNoVolume; + + if (draw) + { + SetControls(); + FrmDrawForm(FrmGetActiveForm()); + } +} + + /*********************************************************************** + * + * FUNCTION: MainFormResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void MainFormResize(FormPtr frmP, Boolean draw) +{ + Coord x, y; + Coord y_diff; + RectangleType r; + +/*------------------------------------------------------------------------ + * Get the new extent + *----------------------------------------------------------------------*/ + WinGetDisplayExtent(&x, &y); + +/*------------------------------------------------------------------------ + * Get the old extent + *----------------------------------------------------------------------*/ + FrmGetFormBounds(frmP, &r); + +/*------------------------------------------------------------------------ + * Calculate change, if none, do nothing + *----------------------------------------------------------------------*/ + y_diff = y - (r.topLeft.y + r.extent.y); + if (y_diff == 0) + return; + +/*------------------------------------------------------------------------ + * Resize the form + *----------------------------------------------------------------------*/ + r.extent.y += y_diff; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + +/*------------------------------------------------------------------------ + * Move the buttons. + *----------------------------------------------------------------------*/ + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, MainPlayButton), y_diff, draw); + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, MainPauseButton), y_diff, draw); + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, MainRecordButton), y_diff, draw); + PrvMoveObject(frmP, FrmGetObjectIndex(frmP, MainStopButton), y_diff, draw); + + if (draw) + FrmDrawForm(frmP); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + UInt32 features; + VolumeInfoType info; + +/*------------------------------------------------------------------------ + * Check to see if we were started using the Aux Button + *----------------------------------------------------------------------*/ + if (auxButtonPresent && ((KeyCurrentState() & keyBitAux) != 0)) + { + EventType new_event; + + new_event.eType = recordStartEvent; + EvtAddEventToQueue(&new_event); + launchedFromButton = true; + } + else + launchedFromButton = false; + + if (vgaPresent) + { + VgaFormModify(frmP, vgaFormModify160To240); + MainFormResize(frmP, false); + } + +/*------------------------------------------------------------------------ + * Check to see if unit has record capability + *----------------------------------------------------------------------*/ + AudioGetSupportedFeatures(&features); + + if (features & audioFtrRecordWave) + canRecord = true; + else + canRecord = false; + + WaveInit(); + + if (VFSVolumeInfo(VOLUME_REF_NUM, &info) == errNone) + { + if (WaveOpen(WAVE_FILE) == errNone) + { + audioState = audioStateOpen; + SetSliderPercent(FrmGetActiveForm(), 0); + } + else + audioState = audioStateNoFile; + } + else + audioState = audioStateNoVolume; + + SetControls(); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + formID = (FrmGetFormId (FrmGetActiveForm ())); + + switch (command) + { + case MainOptionsAboutExampleJ: + MenuEraseStatus(0); + if (vgaPresent) + { + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + } + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + if (vgaPresent) + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + ***********************************************************************/ +Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + frmP = FrmGetActiveForm(); + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case ctlSelectEvent : + switch(eventP->data.ctlSelect.controlID) + { + case MainPlayButton : + HandlePlayButton(); + handled = true; + break; + case MainPauseButton : + HandlePauseButton(); + handled = true; + break; + case MainStopButton : + HandleStopButton(); + handled = true; + break; + case MainRecordButton : + HandleRecordButton(); + handled = true; + break; + case MainProgressSliderControl : + HandleSliderControl(eventP); + handled = true; + break; + + } + break; + case frmOpenEvent: + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + case displayExtentChangedEvent : + MainFormResize(frmP, true); + break; + +/*------------------------------------------------------------------------ + * Check to see if a card was removed or inserted while we were not the + * active form. + *----------------------------------------------------------------------*/ + case winEnterEvent : + if (cardChangedOccurred) + { + SetControls(); + MainFormResize(frmP, true); + cardChangedOccurred = false; + } + break; + + case frmCloseEvent : + WaveClose(); + handled = true; + break; + + case recordStartEvent : + HandleRecordButton(); + break; + + case audioProgressEvent : + HandleProgress(eventP); + handled = true; + break; + + default: + break; + } + return(handled); +} + + diff --git a/handera-sdk-105/examples/ExampleJ/Src/MainForm.h b/handera-sdk-105/examples/ExampleJ/Src/MainForm.h new file mode 100644 index 0000000..33107f0 --- /dev/null +++ b/handera-sdk-105/examples/ExampleJ/Src/MainForm.h @@ -0,0 +1,19 @@ +/****************************************************************************** + * + * File: MainForm.h + * + * Project : Example J + * + *****************************************************************************/ +#ifndef _MAINFORM_H_ +#define _MAINFORM_H_ + +#include + +Boolean MainFormHandleEvent (EventPtr eventP); +void MainFormHandleVolumeMounted (Boolean draw); +void MainFormHandleVolumeUnmounted(Boolean draw); + +#endif + + diff --git a/handera-sdk-105/examples/ExampleJ/Src/STARTER.H b/handera-sdk-105/examples/ExampleJ/Src/STARTER.H new file mode 100644 index 0000000..fecce7f --- /dev/null +++ b/handera-sdk-105/examples/ExampleJ/Src/STARTER.H @@ -0,0 +1,23 @@ +/****************************************************************************** + * + * File: Starter.h + * + * Project : Example J + * + *****************************************************************************/ +#ifndef _STARTER_H_ +#define _STARTER_H_ + +/*********************************************************************** + * + * Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_J' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +#endif + + diff --git a/handera-sdk-105/examples/ExampleJ/Src/Wave.c b/handera-sdk-105/examples/ExampleJ/Src/Wave.c new file mode 100644 index 0000000..c207f3c --- /dev/null +++ b/handera-sdk-105/examples/ExampleJ/Src/Wave.c @@ -0,0 +1,202 @@ +/****************************************************************************** + * + * File: wave.c + * + * Project : Example 7 + * + *****************************************************************************/ + +#include +#include +#include "Audio.h" +#include "Wave.h" + +static Err WriteCallback(void *dataP, UInt32 offset, UInt32 *sizeP, void *userDataP); +static Err ReadCallback (void *dataP, UInt32 offset, UInt32 *sizeP, void *userDataP); + +static FileRef fd; +static AudioFormatType format; //format of current wave file. +static Boolean wave_open; + +/*-------------------------------------------------------------------------- + * Function : WaveInit() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +void WaveInit(void) +{ + wave_open = false; +} + + /*-------------------------------------------------------------------------- + * Function : WaveOpen() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WaveOpen(char *filename) +{ + Err retval; + + if ((retval = VFSFileOpen(VOLUME_REF_NUM, filename, vfsModeRead, &fd)) != errNone) + return(retval); + + retval = AudioOpenWave(&format, ReadCallback, &fd); + + if (retval != 0) + VFSFileClose(fd); + else + wave_open = true; + + return(retval); +} + +/*-------------------------------------------------------------------------- + * Function : WaveClose() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +void WaveClose(void) +{ + if (!wave_open) + return; + + VFSFileClose(fd); + AudioCloseWave(); + wave_open = false; +} + + /*-------------------------------------------------------------------------- + * Function : WaveCreate() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WaveCreate(char *filename) +{ + Err retval; + AudioFormatType record_format; //format of current wave file. + +/*------------------------------------------------------------------------ + * Currently, this is the only format that is supported. + *----------------------------------------------------------------------*/ + record_format.samplesPerSecond = 8000; + record_format.bitsPerSample = 8; + record_format.channels = 1; + + if ((retval = VFSFileOpen(VOLUME_REF_NUM, filename, vfsModeReadWrite | vfsModeCreate | vfsModeTruncate, &fd)) != errNone) + return(retval); + + retval = AudioCreateWave(&record_format, WriteCallback, &fd); + + if (retval != 0) + VFSFileClose(fd); + else + wave_open = true; + + return(retval); +} + + +/*-------------------------------------------------------------------------- + * Function : WavePlay() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WavePlay(void) +{ + return(AudioPlayData()); +} + +/*-------------------------------------------------------------------------- + * Function : WavePause() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WavePause(void) +{ + return(AudioPause()); +} + + + /*-------------------------------------------------------------------------- + * Function : WaveRecord() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WaveRecord(void) +{ + return(AudioRecordData()); +} + +/*-------------------------------------------------------------------------- + * Function : WaveStop() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WaveStop(void) +{ + Err retval; + + if ((retval = AudioPause()) == errNone) + return(WaveSeek(0)); + return(retval); +} + +/*-------------------------------------------------------------------------- + * Function : WaveSeek() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +Err WaveSeek(UInt16 percent) +{ + return(AudioSeekPercent(percent)); +} + + + /*-------------------------------------------------------------------------- + * Function : WriteCallback() + * Description : + * Params : userDataP - points to file handle + * Returns : + *--------------------------------------------------------------------------*/ +static Err WriteCallback(void *dataP, UInt32 offset, UInt32 *sizeP, void *userDataP) +{ + Err retval = 0; + + retval = VFSFileSeek(*((FileRef *)userDataP), vfsOriginBeginning, offset); + + if ((retval == errNone) || (retval == vfsErrFileEOF)) + retval = VFSFileWrite(*((FileRef *)userDataP), *sizeP, dataP, sizeP); + + return(retval); +} + +/*-------------------------------------------------------------------------- + * Function : ReadCallback() + * Description : + * Params : + * Returns : + *--------------------------------------------------------------------------*/ +static Err ReadCallback(void *dataP, UInt32 offset, UInt32 *sizeP, void *userDataP) +{ + Err retval = 0; + + if ((retval = VFSFileSeek(*((FileRef *)userDataP), vfsOriginBeginning, offset)) != errNone) + return(retval); + + retval = VFSFileRead(*((FileRef *)userDataP), *sizeP, dataP, sizeP); + + return(retval); +} + + + + diff --git a/handera-sdk-105/examples/ExampleJ/Src/Wave.h b/handera-sdk-105/examples/ExampleJ/Src/Wave.h new file mode 100644 index 0000000..ee3a063 --- /dev/null +++ b/handera-sdk-105/examples/ExampleJ/Src/Wave.h @@ -0,0 +1,27 @@ +/**************************************************************************** + * File : Wave.h + * Date : 8-30-00 + * Description : + ****************************************************************************/ +#ifndef _WAVE_H_ +#define _WAVE_H_ + +/*------------------------------------------------------------------------ + * Hard code to first volume for this example, actual apps need to iterate + * through all the volumes. + *----------------------------------------------------------------------*/ +#define VOLUME_REF_NUM 1 + +void WaveInit (void); +Err WaveOpen (char *filename); +Err WaveCreate(char *filename); +void WaveClose (void); +Err WavePlay (void); +Err WavePause (void); +Err WaveRecord(void); +Err WaveStop (void); +Err WaveSeek (UInt16 percent); + +#endif + + diff --git a/handera-sdk-105/examples/ExampleJ/Src/starter.c b/handera-sdk-105/examples/ExampleJ/Src/starter.c new file mode 100644 index 0000000..2652b3d --- /dev/null +++ b/handera-sdk-105/examples/ExampleJ/Src/starter.c @@ -0,0 +1,371 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : Example J + * + *****************************************************************************/ + +#include +#include +#include +#include "StarterRsc.h" + +#include "Vga.h" +#include "Audio.h" +#include "TrgChars.h" +#include "MainForm.h" +#include "starter.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ +typedef StarterAppInfoType* StarterAppInfoPtr; + +Boolean vgaPresent; +Boolean audioPresent; +Boolean auxButtonPresent; +Boolean cardChangedOccurred; + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + /*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version, keys; + UInt16 cardNo; + LocalID appID; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Verify system has VFS Manager + *----------------------------------------------------------------------*/ + if (FtrGet(sysFileCVFSMgr, vfsFtrIDVersion, &version) != errNone) + { + FrmAlert(VfsExtNotFoundAlert); + return(-1); + } + +/*------------------------------------------------------------------------ + * Make sure Audio Extension is present + *----------------------------------------------------------------------*/ + if (_TRGAudioFeaturePresent(&version)) + audioPresent = true; + else + { + audioPresent = false; + FrmAlert(AudioExtNotFoundAlert); + return(-1); + } + +/*------------------------------------------------------------------------ + * Check for an Aux Button + *----------------------------------------------------------------------*/ + if (_TRGKeyFeaturePresent(&keys) && (keys & keyBitAux)) + auxButtonPresent = true; + else + auxButtonPresent = false; + +/*------------------------------------------------------------------------ + * Check to see if VGA extension present + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + vgaPresent = false; + +/*------------------------------------------------------------------------ + * Register for Card Removal/Insertion notifications + *----------------------------------------------------------------------*/ + SysCurAppDatabase(&cardNo, &appID); + SysNotifyRegister(0, appID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL); + SysNotifyRegister(0, appID, sysNotifyVolumeUnmountedEvent, NULL, sysNotifyNormalPriority, NULL); + + cardChangedOccurred = false; + + return(errNone); +} + + /*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + LocalID appID; + UInt16 cardNo; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Unregister for Card Removal/Insertions + *----------------------------------------------------------------------*/ + SysCurAppDatabase(&cardNo, &appID); + SysNotifyUnregister(0, appID, sysNotifyVolumeMountedEvent, sysNotifyNormalPriority); + SysNotifyUnregister(0, appID, sysNotifyVolumeUnmountedEvent, sysNotifyNormalPriority); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + Boolean draw; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + + if (vgaPresent) + VgaSetScreenMode(screenMode1To1, rotateModeNone); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + case sysAppLaunchCmdNotify : // HandEra popup silk screen + switch (((SysNotifyParamType *)cmdPBP)->notifyType) + { + case sysNotifyVolumeMountedEvent : + if ((FrmGetActiveFormID() == MainForm) && FrmVisible(FrmGetActiveForm())) + draw = true; + else + { + draw = false; + cardChangedOccurred = true; + } + MainFormHandleVolumeMounted(draw); + break; + case sysNotifyVolumeUnmountedEvent : + if ((FrmGetActiveFormID() == MainForm) && FrmVisible(FrmGetActiveForm())) + draw = true; + else + { + draw = false; + cardChangedOccurred = true; + } + MainFormHandleVolumeUnmounted(draw); + break; + } + break; + + default: + break; + + } + return(errNone); +} + + + /*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleJ/StarterRsc.h b/handera-sdk-105/examples/ExampleJ/StarterRsc.h new file mode 100644 index 0000000..90e7123 --- /dev/null +++ b/handera-sdk-105/examples/ExampleJ/StarterRsc.h @@ -0,0 +1,84 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 9:23:56 AM on Tuesday, April 17, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleJ\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleJ" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainPlayButton 1001 //(Left Origin = 2, Top Origin = 138, Width = 31, Height = 18, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Large) +#define MainRecordButton 1002 //(Left Origin = 78, Top Origin = 138, Width = 46, Height = 18, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Large) +#define MainProgressSliderControl 1003 //(Left Origin = 10, Top Origin = 53, Width = 140, Height = 30, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 10, Thumb Bitmap = 1700, Background Bitmap = 1800) +#define MainStopButton 1004 //(Left Origin = 127, Top Origin = 138, Width = 32, Height = 18, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Large) +#define MainPauseButton 1005 //(Left Origin = 37, Top Origin = 138, Width = 37, Height = 18, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Large) +#define MainCardNotFoundLabel 1006 //(Left Origin = 42, Top Origin = 70, Usable = 1, Font = Bold) +#define MainProgressField 1007 //(Left Origin = 68, Top Origin = 34, Width = 50, Height = 20, Usable = 1, Editable = 0, Underline = 0, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Bold, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutTitleLabel 1102 //(Left Origin = 52, Top Origin = 23, Usable = 1, Font = Large) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define AudioExtNotFoundAlert 1000 +#define AudioExtNotFoundOK 0 + +// Resource: Talt 1100 +#define VfsExtNotFoundAlert 1100 +#define VfsExtNotFoundOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsAboutExampleJ 1000 + +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: PICT 1700 +#define ThumbBitmap 1700 +// Resource: PICT 1800 +#define SliderLineBitmap 1800 +// Resource: PICT 5896 +#define VGASliderLineBitmap 5896 +// Resource: PICT 5796 +#define VGAThumbBitmap 5796 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleK/ExampleK.mcp b/handera-sdk-105/examples/ExampleK/ExampleK.mcp new file mode 100644 index 0000000000000000000000000000000000000000..5e34120ba9af3bcb243df5467ed0a78806e358be GIT binary patch literal 50607 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 Ob^U*s2tAG$;{O4%$wy=W literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleK/Rsc/HandEra.r b/handera-sdk-105/examples/ExampleK/Rsc/HandEra.r new file mode 100644 index 0000000..371e069 --- /dev/null +++ b/handera-sdk-105/examples/ExampleK/Rsc/HandEra.r @@ -0,0 +1,29 @@ +/*********************************************************************** + * + * Copyright (c) 1999-2001, TRG, All Rights Reserved + * + * PROJECT: HandEra 330 + * + * FILE: HandEra.r + * + * DESCRIPTION: + * + * AUTHOR: John Ehm + * + * DATE: 01/17/01 + * + **********************************************************************/ + + +type 'sKst' { + //Currently no data is stored in resource, need dummy otherwise + //resource is not linked in + unsigned longint; +}; + + +resource 'sKst' (1000, "HandEra Aware") +{ + 0x00000000; + +}; diff --git a/handera-sdk-105/examples/ExampleK/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleK/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..40a4ce2e196d6a1c829e5221ee7d1e65c218823d GIT binary patch literal 7265 zcmeI1eRNdC8OEQxdy@?$BoHxRMY(`gv^9img@9N{5G5r*AOW@7mQC1&)MOJkiv+}G z6&2cAON-XhqQ#H;+16N#{lH2PTU(6^*bi$_Vxen*)}qjgBw_nJvv)~o;q)AOdQShy zZ07#v&O9^kd*{y0zB?DN0Gx3bFqGNTHY)}vl~-hV9$Nc$qHFDz#Njm-GVUCaXvwOG z1|rd5BtOy^sUCCDm!#bS+Ua)PmRK4<~1g~3C6A3PKqV-N>N!W=l zW@VtEp|+-)L)3@!F?)tCw+J47)?>Yu&_`8vnT~Fb{A{gzlP-q<6fDOqTsWVMoYWm>ycF1AxUODOACx zY9BvJdHf9WB(luSGBwFswItKoT-5zdQQ9>z`&ii(U^)xRTK@VRpGKN`cQG8-s_~Ru z^7(1-j?WHkwfv*}*16VNly$v?s}t8^>8ef0w_d{lY{jr!c4O%DY78xKGpaERyOG7V zY-=lgt5(9B;8aAIP=Z%a=C-xzS;T2=OypqoB2RB?3x&wMwl=??9MaaN#}-4SV)+c|$&W}+o+&*! zOnUMxW-y;EJ?#vansjs|M@UbOl%5@PpHE27^NX0}&p277o$(rtERu?x z5Mm-HhC;@li$fvf&m`5-&Lz^5pOl`QEIm0zda_u0vP62?nW|RuQt8QQ(vz1-PhKuP zIbGIhw^XB$pHeG1!|yl#l=+!>KGW|v{>;)D?aY>*ESH{~BRx4+da^=#vQm25nWtKE zzVzf3(vw$8PhKTG`Dt09y{pxmyhgR;X8_~RX945S=k$=Ueu0j(6Of*)lAf%Vo?IwB z8I+zhvr0RQbVe?go~)6c{Jiw!wbGNd@`iI&Co5!FS3}mTmTb`aC$FO~903vOc`c37 zlTqo(CDN1EtCd_TJ=r8ZO)WE50W3GO1>9h)0xQgDz>P))d_l89JI%UUGN!8_Z_*ig zv#gRUd9Cv27U^l{R_V#xq$gKNPp(!i`9pR8@u)*{O?lZN({aPio^MLL?`JnD9`CWNKKBTKAA7++6k4R5Dk4jHICO!GM z)a3VcB)=~``2({GfhWxB0$R+f0iKkee*Mt&0-iEwz>lC8sNItFAMgCY`kU!Dr z6TPmOriLX#lpERSrC7RxhyCj0!w&)W9#KXZod{ z7utD2>!19URyp}=StnoAsN_o$lUxJFpO>ZQ7_UfAzN%JooAl&%>B$}DsRUj#PaE(X z^ArKUHKPH)Gb-TsgG|EfBTd2|E;R{n%rgmpTxt?_t~Lp8K4uc$+GG-Ty=fBK-!%zu zx0-}M#bWXVyG7*%PyDQE|0p@|BO^R?)yHy3*GTfWF3VSk9Q{z*^HFB z<7tTV>f=W-(8Fms8n;yTs&0TPx>9FZmQK3a#M%Mr>chWI4uu?_ipt&akoG~A757-V zR<3c!fpdbm$6=eYQcv6?Z7RxBIh9T|?n#Z2VsbnmW3$_=*1^S|(W4in4<7i!?u-$e zyKkA=eDt}?5{at1!^5AxxZSsNNUOKQx5jGstsc~#V><_OJW~$jSg~XV4lpb`;ES4MW=>{vGAou$ z#gnO+Qhj{w?&v1~yC9D{x!T)w_e78F>#AihcNF`jT6%5a=lQlV=5|soX-&t*&hu^O zSlP!~cJ^x7(YsIjlvInwLeEPXZ_CTm$8jeI!}yyab7o2LT$Zb5PMbB43`dJgXOYXJ zmvMvGgWI(8OgnDGW+Gkj7sl{gY))CEj%F2k~{0`3=lDP*fdKz1_ksU063KHAZiK0orAzY<{KL zEh<~j_Gm2LP}$SYG<`-ewPBil| zdz^j1J9s;gb(hM##=Gg^Jt}if?qlC4RQBz_qkMICgDG#vGb{&8d7E|shF-2RZShz8 z&n#y*0ptde^W}qhQzGtyjPBSlC(#*?@fphsPp!e&jw8~&pbgVfRCd--g z!r?$&aN*d3g2H3v!h*4$*)#Z;!50l?q}=(J7njs5D&;GN(lFOWG`KK}RTXuC+FDii Q?`iLMtkUQ9_^&$u6K$LX0RR91 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleK/Rsc/Starter.rsrc b/handera-sdk-105/examples/ExampleK/Rsc/Starter.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleK/Src/starter.c b/handera-sdk-105/examples/ExampleK/Src/starter.c new file mode 100644 index 0000000..b6452e9 --- /dev/null +++ b/handera-sdk-105/examples/ExampleK/Src/starter.c @@ -0,0 +1,537 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : Example K + * + *****************************************************************************/ + +#include +#include "StarterRsc.h" + +#include "vga.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +Boolean vgaPresent = false; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_K' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + +/*********************************************************************** + * + * FUNCTION: HandleAlarm() + * + * DESCRIPTION: + * + * PARAMETERS: None + * + * RETURNED: Nothing + * + ***********************************************************************/ +static void HandleAlarm(void) +{ + VgaScreenStateType saveScreenState; + FormActiveStateType stateP; + UInt32 version; + FormPtr frmP; + Boolean vga_present; + + vga_present = _TRGVGAFeaturePresent(&version); + +/*------------------------------------------------------------------------ + * You must set the screen mode before the form is loaded. +--------------------------------------------------------------------*/ + FrmActiveState(&stateP, true); //Save the active form state + +/*------------------------------------------------------------------------ + * Load the Alarm Form. + *----------------------------------------------------------------------*/ + frmP = FrmInitForm (AlarmForm); + + if(vga_present) + { +/*------------------------------------------------------------------------ + * Get and save the current screen state. + *----------------------------------------------------------------------*/ + VgaSaveScreenState(&saveScreenState); + +/*------------------------------------------------------------------------ + * If the screen is rotated 0 or 180 degrees then modify the alarm to fit the + * entire screen. + *----------------------------------------------------------------------*/ + if ((saveScreenState.rotate == rotateModeNone) || + (saveScreenState.rotate == rotateMode180)) + { + VgaFormModify(frmP, vgaFormModify160To240); + } +/*------------------------------------------------------------------------ + * Set the screen mode to 1To1. Keep the same rotation. + *----------------------------------------------------------------------*/ + VgaSetScreenMode(screenMode1To1, saveScreenState.rotate); + } + +/*------------------------------------------------------------------------ + * Display the Alarm + *----------------------------------------------------------------------*/ + FrmDoDialog (frmP); + FrmDeleteForm (frmP); + +/*------------------------------------------------------------------------ + * Restore the VGA screen state + *----------------------------------------------------------------------*/ + if(vga_present) + VgaRestoreScreenState(&saveScreenState); + +/*------------------------------------------------------------------------ + * Restore the active form state. + *----------------------------------------------------------------------*/ + FrmActiveState(&stateP, false); + +} + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + if(vgaPresent) + VgaFormModify(frmP, vgaFormModify160To240); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP, aboutFrmP; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + frmP = FrmGetActiveForm(); + formID = FrmGetFormId (frmP); + + switch (command) + { + case MainOptionsAboutExampleK: + MenuEraseStatus(0); + if (vgaPresent) + { + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + } + aboutFrmP = FrmInitForm (AboutForm); + FrmDoDialog (aboutFrmP); // Display the About Box. + FrmDeleteForm (aboutFrmP); + if (vgaPresent) + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + } + + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit(frmP); + FrmDrawForm (frmP); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + UInt16 cardN; + LocalID dbID; + + case MainSetAlarmButton: +/*------------------------------------------------------------------------ + * Set the alarm to 10 seconds from now. + *----------------------------------------------------------------------*/ + if(SysCurAppDatabase(&cardN, &dbID) == 0) + AlmSetAlarm (cardN, dbID, 1, TimGetSeconds() + 10, true); + + handled = true; + break; + } + + default: + break; + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Check for VGA Extension + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + vgaPresent = false; + + return(errNone); +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + +/*------------------------------------------------------------------------ + * You must set the screen mode before the form is loaded. + *----------------------------------------------------------------------*/ + if (vgaPresent) + VgaSetScreenMode(screenMode1To1, rotateModeNone); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + case sysAppLaunchCmdDisplayAlarm: + HandleAlarm(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/handera-sdk-105/examples/ExampleK/StarterRsc.h b/handera-sdk-105/examples/ExampleK/StarterRsc.h new file mode 100644 index 0000000..b2a7a10 --- /dev/null +++ b/handera-sdk-105/examples/ExampleK/StarterRsc.h @@ -0,0 +1,70 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 8:40:08 AM on Tuesday, March 27, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleK\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleK" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainSetAlarmButton 1001 //(Left Origin = 54, Top Origin = 75, Width = 50, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define MainUnnamed1002Label 1002 //(Left Origin = 4, Top Origin = 39, Usable = 1, Font = Standard) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutText1Label 1103 //(Left Origin = 20, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: tFRM 1200 +#define AlarmForm 1200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AlarmUnnamed1201Label 1201 //(Left Origin = 54, Top Origin = 25, Usable = 1, Font = Bold 12) +#define AlarmText1Label 1203 //(Left Origin = 20, Top Origin = 58, Usable = 1, Font = Standard) +#define AlarmOKButton 1205 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: MBAR 1000 +#define PalmMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsAboutExampleK 1000 + +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleL/ExampleL.mcp b/handera-sdk-105/examples/ExampleL/ExampleL.mcp new file mode 100644 index 0000000000000000000000000000000000000000..3f49c804f42c3ffba5cc12d6d304c281ba9cbefb GIT binary patch literal 50607 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%0D!%HPVTKMgz+3_8(|K>OR*mIKo# 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¥__zm^rbcM z)XTJw_o^Z@3)K-m)Wh3w^wx0B`G^;ifT5NCmR^PheB!7iNt?3@4WtBlnjgBAfJ5;UZmGYj|z3gk1;+MfEQ>i zOxjp=sVjb*Bd;9md1|c3?;X=S!dkXtyL-4$HANP4(M28A(*Z*^Pjj5A`uYpKlbkEN z+v_(t4n5}o+wh`H`%fud)$3$t_P;uV?UQbKy}U^`vEnYv6BC!EXyF*?nB3XXCGmJH zjx}d5V#GHQirQh(XiO(CH%8ah2iyabn&a`Kw!ZrwU3xN)e&JB(E=*azc+pCh+m@3t8DEYY)f1cinINJ)?i11?T_5gv$m{1siUGiV489di#la3 zjc2sN@6;uNkuY(kyAPaG$ZMX88 z@%A|nS$P)@6)I8wu{=<0G8gjmI%V2X5yrnyp{@vaSKYzGtP4oJ1G}rI^W^CgZoXoc zZ{T6mWh@7D5m!ZPj?uUO9FSbyz! Wdt;RAoCvKuK+~jKCWv~io__-*jD~ao literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleL/Rsc/Starter.rsrc b/handera-sdk-105/examples/ExampleL/Rsc/Starter.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/ExampleL/Src/starter.c b/handera-sdk-105/examples/ExampleL/Src/starter.c new file mode 100644 index 0000000..11288f5 --- /dev/null +++ b/handera-sdk-105/examples/ExampleL/Src/starter.c @@ -0,0 +1,597 @@ +/****************************************************************************** + * + * File: Starter.c + * + * Project : Example L + * + *****************************************************************************/ + +#include +#include "StarterRsc.h" + +#include "Vga.h" +#include "TrgRsc.h" + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +typedef struct +{ + LocalID dbID; + UInt32 creator; +} db_type; + + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_L' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +#define appLrgIconID 1000 +#define appSmallIconID 1001 + +#define maxDbs 50 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + +/*********************************************************************** + * + * Local variables + * + ***********************************************************************/ +static Boolean vgaPresent = false; +static db_type db[maxDbs]; +static Int16 numDbs; + + + /*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + + + /*********************************************************************** + * + * FUNCTION: LoadDbs + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void LoadDbs(void) +{ + DmSearchStateType search; + LocalID dbID; + UInt32 creator; + Err err; + + err = DmGetNextDatabaseByTypeCreator(true, &search, 'appl', 0, true, 0, &dbID); + + for (numDbs = 0; (err == errNone) && (numDbs < maxDbs); numDbs++) + { + + DmDatabaseInfo(0, dbID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &creator); + + db[numDbs].dbID = dbID; + db[numDbs].creator = creator; + + err = DmGetNextDatabaseByTypeCreator(false, &search, 'appl', 0, true, 0, &dbID); + } +} + + +/*********************************************************************** + * + * FUNCTION: DrawLargeVgaIcon + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void DrawLargeVgaIcon(LocalID dbID, UInt32 creator, Coord x, Coord y) +{ + DmOpenRef appDB = NULL; + BitmapPtr iconP = NULL; + MemHandle iconH = NULL; + +/*------------------------------------------------------------------------- + * First look for icons in VGA Resource Database, if not found look in the + * app itself. + *------------------------------------------------------------------------*/ + if ((appDB = DmOpenDatabaseByTypeCreator(vgaResourceDbType, creator, dmModeReadOnly)) == NULL) + appDB = DmOpenDatabase(0, dbID, dmModeReadOnly); + + if(appDB != NULL) + { +/*------------------------------------------------------------------------- + * If 32x32 exists, use it, otherwise expand the 22x22 icon + *------------------------------------------------------------------------*/ + if ((iconH = DmGet1Resource(iconType, vgaAppIconID)) != NULL) + { + iconP = MemHandleLock(iconH); + WinDrawBitmap(iconP, x, y); + MemHandleUnlock(iconH); + DmReleaseResource(iconH); + } + else if ((iconH = DmGet1Resource(iconType, appLrgIconID)) != NULL) + { + iconP = MemHandleLock(iconH); + VgaWinDrawBitmapExpanded(iconP, x, y); + MemHandleUnlock(iconH); + DmReleaseResource(iconH); + } + DmCloseDatabase(appDB); + } + +/*------------------------------------------------------------------------ + * Draw Default Icon - Left as an exercise for the reader + *----------------------------------------------------------------------*/ +} + + + /*********************************************************************** + * + * FUNCTION: MainFormResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void MainFormResize(FormPtr frmP, Boolean draw) +{ + Coord x,y; + RectangleType r; + + WinGetDisplayExtent(&x, &y); + RctSetRectangle(&r, 0, 0, x, y); + + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + if (vgaPresent) + { + VgaFormModify(frmP, vgaFormModify160To240); + MainFormResize(frmP, false); + } + + LoadDbs(); +} + +/*********************************************************************** + * + * FUNCTION: MainFormDrawIcons + * + * DESCRIPTION: Draw the first n icons on the screen. Do not worry about + * cosmetic appearance. + * + * PARAMETERS: + * + * RETURNED: Nohting + * + ***********************************************************************/ +static void MainFormDrawIcons(void) +{ + Int16 index = 0; + Coord x,y; + + for (y = 30; y < 210; y+=50) + { + for (x = 10; x < 210; x += 50) + { + DrawLargeVgaIcon(db[index].dbID, db[index].creator, x, y); + index++; + + if (index == numDbs) + return; + } + } +} + + + /*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + formID = (FrmGetFormId (FrmGetActiveForm ())); + + switch (command) + { + case MainOptionsAboutExampleL: + MenuEraseStatus(0); + if (vgaPresent) + { + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + } + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + if (vgaPresent) + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit( frmP); + FrmDrawForm ( frmP); + MainFormDrawIcons(); + handled = true; + break; + + default: + break; + } + return(handled); +} + + + /*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + + /*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Check for VGA Extension + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + { + FrmAlert(VgaNotFoundAlert); + vgaPresent = false; + return(-1); + } + + return(errNone); +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + + /*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + if ((error = AppStart()) != errNone) + return(error); + + if (vgaPresent) + VgaSetScreenMode(screenMode1To1, rotateModeNone); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleL/StarterRsc.h b/handera-sdk-105/examples/ExampleL/StarterRsc.h new file mode 100644 index 0000000..aa7fe29 --- /dev/null +++ b/handera-sdk-105/examples/ExampleL/StarterRsc.h @@ -0,0 +1,66 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 7:19:48 AM on Saturday, March 24, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleL\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleL" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutTitleLabel 1102 //(Left Origin = 52, Top Origin = 23, Usable = 1, Font = Large) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define VgaNotFoundAlert 1000 +#define VgaNotFoundOK 0 + +// Resource: MBAR 1000 +#define MainMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsAboutExampleL 1000 + +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/ExampleX/ExampleX.mcp b/handera-sdk-105/examples/ExampleX/ExampleX.mcp new file mode 100644 index 0000000000000000000000000000000000000000..03b9ab4a3366890b8464f95703071ca6935f1d28 GIT binary patch literal 50607 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/ExampleX/Rsc/Resource.frk/Starter.rsrc b/handera-sdk-105/examples/ExampleX/Rsc/Resource.frk/Starter.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..ba09137fdafc1cbbdcac8e3e146b4cf2c33f30f5 GIT binary patch literal 18753 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 +#include "StarterRsc.h" +#include "starter.rh" //MainForm definition + +#include "Trg.h" +#include "Vga.h" +#include "Silk.h" + +/*********************************************************************** + * + * Entry Points + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct +{ + UInt8 replaceme; +} StarterPreferenceType; + +typedef struct +{ + UInt8 replaceme; +} StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + +FontID currentFont = stdFont; +Boolean vgaPresent = false; +Boolean screenChanged = false; + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'Ex_X' +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support (2.0 for now). +#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ +static void DrawHelloWorld(void); + + +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + +/*------------------------------------------------------------------------ + * See if we're on in minimum required version of the ROM or later. + *----------------------------------------------------------------------*/ + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + +/*------------------------------------------------------------------------ + * Palm OS 1.0 will continuously relaunch this app unless we switch to + * another safe one. + *----------------------------------------------------------------------*/ + if (romVersion < ourMinVersion) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return(FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID))); +} + +/*********************************************************************** + * + * FUNCTION: MainFormResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormResize(FormPtr frmP, Boolean draw) +{ + Coord x,y; + RectangleType r; + + WinGetDisplayExtent(&x, &y); + RctSetRectangle(&r, 0, 0, x, y); + + frmP = FrmGetActiveForm(); + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + screenChanged = false; + + if (draw) + DrawHelloWorld(); +} + +/*********************************************************************** + * + * FUNCTION: DrawHelloWorld + * + * DESCRIPTION: This routine prints "Hello World" to the center of the + * window. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void DrawHelloWorld(void) +{ + MemHandle resH; + BitmapPtr resP; + char *str = "Hello World"; + FontID savedFont; + Coord x, y, winWidth, winHeight; + FormPtr formP; + UInt8 *ptr; + + formP = FrmGetActiveForm(); + +/*------------------------------------------------------------------------ + * Lock the screen to remove flicker + *----------------------------------------------------------------------*/ + ptr = WinScreenLock(winLockCopy); + + FrmEraseForm(formP); + FrmDrawForm(formP); + + if (vgaPresent) + resH = DmGetResource(bitmapRsc, VGAGlobeBitmap); + else + resH = DmGetResource(bitmapRsc, GlobeBitmap); + ErrFatalDisplayIf(!resH, "Missing bitmap"); + resP = MemHandleLock(resH); + + WinGetDisplayExtent(&winWidth, &winHeight); + savedFont = FntSetFont(currentFont); + +/*------------------------------------------------------------------------ + * Draw the globe graphic + *----------------------------------------------------------------------*/ + x = (winWidth/2) - (resP->width/2); + y = (winHeight/2) - (resP->height/2); + WinDrawBitmap(resP, x, y); + +/*------------------------------------------------------------------------ + * Draw String below the globe + *----------------------------------------------------------------------*/ + x = (winWidth/2) - (FntCharsWidth(str, StrLen(str))/2); + y = y + resP->height + 5; + WinDrawChars(str, StrLen(str), x, y); + + FntSetFont(savedFont); + MemPtrUnlock(resP); + DmReleaseResource(resH); + + if (ptr) + WinScreenUnlock(); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormInit(FormPtr frmP) +{ + currentFont = stdFont; + + if (vgaPresent) + { + currentFont = VgaBaseToVgaFont(currentFont); + MainFormResize(frmP, false); + } +} + + +/*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + UInt16 formID; + FormPtr frmP; + FontID newFont; + VgaScreenModeType screenMode; + VgaRotateModeType rotateMode; + + formID = (FrmGetFormId (FrmGetActiveForm ())); + + switch (command) + { + case MainOptionsAboutExampleX: + MenuEraseStatus(0); + VgaGetScreenMode(&screenMode, &rotateMode); + VgaSetScreenMode(screenModeScaleToFit, rotateMode); + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + VgaSetScreenMode(screenMode, rotateMode); + handled = true; + break; + + case MainOptionsFont : + newFont = FontSelect(currentFont); + FrmEraseForm(FrmGetActiveForm ()); + currentFont = newFont; + handled = true; + break; + } + + FrmUpdateForm (formID, frmRedrawUpdateCode); + + return(handled); +} + +/*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit( frmP); + FrmDrawForm ( frmP); + DrawHelloWorld(); + handled = true; + break; + + case frmUpdateEvent : + DrawHelloWorld(); + handled = true; + break; + + case winEnterEvent: + if (screenChanged && (FrmGetActiveFormID() == MainForm)) + MainFormResize(FrmGetActiveForm(), true); + break; + + default: + break; + } + return(handled); +} + + +/*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { +/*------------------------------------------------------------------------ + * Load the form resource. + *----------------------------------------------------------------------*/ + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); +/*------------------------------------------------------------------------ + * Set the event handler for the form. The handler of the currently + * active form is called by FrmHandleEvent each time is receives an event. + *----------------------------------------------------------------------*/ + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + default: + ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return(true); + } + + return(false); +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + +/*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + UInt32 version; + UInt16 cardNo; + LocalID appID; + +/*------------------------------------------------------------------------ + * Read the saved preferences / saved-state information. + *----------------------------------------------------------------------*/ + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + +/*------------------------------------------------------------------------ + * Check for the VGA Extension + *----------------------------------------------------------------------*/ + if (_TRGVGAFeaturePresent(&version)) + vgaPresent = true; + else + { + FrmAlert(VgaNotFoundAlert); + vgaPresent = false; + return(-1); //some generic error for now + } + +/*------------------------------------------------------------------------ + * Register for silk screen change notifications. + * Note: You do not need to check for the presense of the silk extension to + * register for its notifications. If the silk extension is not present + * you simply will not receive any notifications. + *----------------------------------------------------------------------*/ + SysCurAppDatabase(&cardNo, &appID); + SysNotifyRegister(0, appID, trgNotifySilkEvent, NULL, sysNotifyNormalPriority, NULL); + + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + UInt16 cardNo; + LocalID appID; + +/*------------------------------------------------------------------------ + * Write the saved preferences / saved-state information. This data + * will be backed up during a HotSync. + *----------------------------------------------------------------------*/ + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + +/*------------------------------------------------------------------------ + * Unregister for silk screen change notifications + *----------------------------------------------------------------------*/ + SysCurAppDatabase(&cardNo, &appID); + SysNotifyUnregister(cardNo, appID, trgNotifySilkEvent, sysNotifyNormalPriority); + +/*------------------------------------------------------------------------ + * Close all the open forms. + *----------------------------------------------------------------------*/ + FrmCloseAllForms (); +} + + +/*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + Err error; + + if ((error = RomVersionCompatible (ourMinVersion, launchFlags)) != 0) + return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + error = AppStart(); + if (error) + return error; + + if (vgaPresent) + VgaSetScreenMode(screenMode1To1, rotateModeNone); + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + case sysAppLaunchCmdNotify : // HandEra popup silk screen + if ( ((SysNotifyParamType *)cmdPBP)->notifyType == trgNotifySilkEvent) + { + if ((FrmGetActiveFormID() == MainForm) && FrmVisible(FrmGetActiveForm())) + MainFormResize(FrmGetActiveForm(), true); + else + screenChanged = true; + } + break; + + default: + break; + + } + return(errNone); +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} + diff --git a/handera-sdk-105/examples/ExampleX/StarterRsc.h b/handera-sdk-105/examples/ExampleX/StarterRsc.h new file mode 100644 index 0000000..33d31a6 --- /dev/null +++ b/handera-sdk-105/examples/ExampleX/StarterRsc.h @@ -0,0 +1,67 @@ +// Header generated by Constructor for Palm OS¨ 1.6 +// +// Generated at 3:50:42 PM on Wednesday, April 25, 2001 +// +// Generated for file: T:\TRGProd\StarKist\sw\sdk\cw\examples\ExampleX\Rsc\Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE FROM CONSTRUCTOR FOR PALM OS¨; +// - DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ExampleX" +// +// Palm App Version: "1.0" + + + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutTitleLabel 1102 //(Left Origin = 61, Top Origin = 23, Usable = 1, Font = Large) +#define AboutText1Label 1103 //(Left Origin = 57, Top Origin = 58, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define VgaNotFoundAlert 1000 +#define VgaNotFoundOK 0 + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsFont 1000 +#define MainOptionsAboutExampleX 1001 + +// Resource: PICT 1200 +#define GlobeBitmap 1200 +// Resource: PICT 1100 +#define SmallIconBitmap 1100 +// Resource: PICT 1000 +#define BigIconBitmap 1000 +// Resource: PICT 1400 +#define VGABigIconBitmap 1400 +// Resource: PICT 1500 +#define VGASmallIconBitmap 1500 +// Resource: PICT 17584 +#define VGAGlobeBitmap 17584 +// Resource: PICT 1600 +#define VGABigIconInvertedBitmap 1600 +// Resource: taif 2002 +#define VGABigIconInvertedAppIconFamily 2002 + +// Resource: taif 2001 +#define VGASmallIconAppIconFamily 2001 + +// Resource: taif 2000 +#define VGABigIconAppIconFamily 2000 + +// Resource: taif 1001 +#define SmallIconAppIconFamily 1001 + +// Resource: taif 1000 +#define BigIconAppIconFamily 1000 diff --git a/handera-sdk-105/examples/Mail/Mail.mcp b/handera-sdk-105/examples/Mail/Mail.mcp new file mode 100644 index 0000000000000000000000000000000000000000..e595c14fec4a8b2cf91e157317e62142f23397f2 GIT binary patch literal 117602 zcmeI52Y?mD{l|B&7s}DA`V{|M~defRg>-^|X={N^{a?d@!ROG~3=S-F;F zkFxCB_q6OgmReTXo9J$`b8LhT6)kh)vuoSh8d}<7Rc$Q`n)veeB~8h(mesR*Nqa}UsiLvAy*=I@lEQ0-kVvDFw#wx% zo3yEOk(eBEDM_Cs>sU&YUt8X?D4ny6m)w+jSs1ySeUe?AbBJ$0`L^|Tm9zfC54L67 zs;X;if&cDqSwDO~?g#n93dIGLEzPy{EzTxkGS?bqmDmsDbhIY z+bVd#um4f}e_qRiA64wteIt5wrh$DNVM0~abcW_m4Qsq*&AIO zCpbW-DUogMZr^S_mpjIqXjyyw%d!?9NL?NWZ(7zyCtB7fY%J@cp�Hq;G(u5PfA` z910vIiz9wuC3z`5NOd40RUU;9AbAY3iaA`R4zjzatRh<Qw6c5{EN5hESCnWnp}7^g)$;b@D)O3Qr)tstv+5|J1^yF zs@^Wea@?`!?D_fg(>~w$;}KWA@!+M`oO}BQZ|(8rzh2n(@HZ|hob}ols-&{d0p{wU zrEQG2%P}c(T@BUPz|I{rW(}%wcq4K;o@3d?t~Vs7y5^-XUYX5@hPC3#c-#DVY)0A(sx%q9 z$7C5~@+M8+X-@tA4RfWDW>;5L1gsUz#rB=TGg`?2O%4)*gLUdLPG_z*Q-j3_wk5R+ zl9i0NGIq(1WSEyjUMVO7#Xv4edw`yx7w8SjKp!Ca$Z=ARPXoX}FbE6=L%>il3=9Wr zfwg61b%Ic{miE|6ni^0G>cBh@2le0}uox@>2ZKYvq2MrZI5+}yf+N9FaFp6%$;=ru zW;vx0nY+`>-JEM&yFd@0s0*e{oj#eZYK*Kkvd+kQBjZNS^JSA$JTu;|hJFs^R!@^+ zv5`xRJlM!Xj6BrH!;C!K$RmvGH1bFzml}DLZ_h<}3tOj2ZAvAQ7E(Jys!Wk;r%1I^ zq}nM`?F^}QhEzL4s+}R#&XE3{74)j21IK1m$0o%OY^axGoNdZ<5Iia1Ts5E;)PZ>* z4(h={U@=$%4hDySL&0I-aBu|Z1V@6U;HcoamT{~+$EA{XoxP&_Zp7d`Dqyu5Pz&n7 zJP-%>&hu{*ShZicHdIo zS1mOf+RkOfGip%cxNqr`uV>Buv**kS+w=Oo)q25L?P(+5GEVX*HON`ki)Q`LIzQ_r zqkmiP&w5!6gqHPJlkY1k-<3PpmH}D*8E8`v>&IMh%)>t{9W2A`Z-J`iMG$)fS!~QA z?Z|01k&#0jQ|CGhM%nLir zxTj_qBae=qD`WIZT?e~X$LDcC?H=nNLIHxP-Y$^Qy1jA>^t}}L>P&v7L z@|?-x)*dfvb%0`FWb$n=we1(bcnIIPV?e>cV{^Y6cWka)HgQUm_wLp!c?U;%oZ3a= z!snb`qC$Pv8Qwva>i%8%kX`oOR9Tge55ku$UOL08 z&jn)Urm?LO@5y-zi=l6L=H62wnp3 zfOWwJU~TXXkRNny2<8BO$84<+jsxGe1LuPaz%}4na2>cF+yHI_H-VeME#Ovg8>j?3ft|rrAkUsbd=p*3$TBC9Y8u;ws{To0#AbP!1v%na67mI+zajl_k%mZ zUEl%mAb1Eo3?2cGg8z_b0rClOF}NE%2JQim6NfGB^+6Hq67oPkkagLvHz*^16tWP+ z0A;n_2F2hFFpKyNkR{-s;4Ls5{1q$%eZXHp5AZH{4}1ka0-u8~z~8~Ag{U@+(h`hx*rC>RK^qk6RZIHKw4YM@eFbZpv*Qt zX0MB`djr-pkBX!|QHU(yT0p$HskWinRYYWUwLq~|P*TY+Co5)`cQm#Bs9Mgfo;<0o zy{(?{q;pOu1LR5u-^&3U-;&-lBX_&gw+k70yC*ounC{7KwaKM2-qcc6J9muvrEsjW zp}pR6l$Evf8|q^fwXHGrc4VxgrKz={G2RxEV0uII{-F^jV|SC;4b3wvl5<+T-8Lxa z#&?Q0yGcctkguo`bDTW4p`*ns)0CFx4mXRc+V=X|#^l`@J@3>uH#E<0chh^9{_G|` z&(&8L{wjI#p~|vGK;qt)bOPjiFxKoEbmZEfPF=<5{)*Cc8rl-w|la zDR?Ts`)+OZYpWZYLS0?-nY=xiCRp2GTtc-aGTiMYCdBg{b@Dz!{9h6WyMSo?y+GDe zbOc{iqWL8%MR$;>V2@DwBzFo&9p*DmTyiB7dWVxR#HwL^L?sXHCK8jPr$|&-XAyl^ ze-V9Bml0)1uW{6=jF8-SoGn6X9NvRugYZryF^T<1bYWdd^eK9iL}AY`iVW#Ew2-Uq_j^KSv+jnWGIfg`@PF+^-AR+aF;(&aZMT?dTHB98|kK#Zgb4 z8Jp4C(a_XzFo!@#Sy@}p590M3BYF^bV%+v{6oJMtO0jsNv-+aKj2YH`zD+_+D%*rv zRrDc-b<|f2Nb+ic<7InChy_iHhOH7!lMW52z5}9al(S_OE8Pt46GsE13xpUh% zk|wo?qYpHPqfGQ|M;~kmM;mAbN9k_@zb;^Ze}pldW>+x*%Znz=_@Yl~e~CBLXepY7_16Mg*+X&GQr{rde`2bUR&E;57^q(CR^H#N<70#j7Z+4oaZ=K5ngJP z;Z>L9iB)$_l>(b5*&=Y7BDGseY%0(6 z#f6q2%s=o*+vO%cFN<<2$m8dYkb@UI{JX)I?6<+b@V}pb+iFzb(DTb_3Hvo>W?s$^Q#nFhQTRH^1|_X%ijKACXXB$Km`*66+suG$&!e$sA>ZgE?xybNO`%W$`I4g z2{@f-!u(G3DP2z@Q+S^*Ds1N=KB%@x;f79JvOyA@(McF$qcE40)%vUBIExz@s9V56RFZ&eC{2P>D4pLO zT!nwPeiu*)0*x=;kT^U^D$ysofGESfK=jFuAlf8f5M`n}IJzW{a3Xxwaa4ZWi7v!7 zJawS?l-hF;Sxxd0QHHyT#DsZ@PoK26M1N6f!(7IRNT{#hahxQH^-ppiNton8q6~2& zQ78J5qf01DqBlvhfJ2R$6t7z}e}23zrai?{J~w4nmGi_yMjXjy^5Xh9H`iL4Htw$$-3$-C93y9q568Y6oa7fu-|?G+m7 zP8t&0<-FLWj^{;%bw4jQxf6PENnO#43bVKuo7i20F-e^^7@ffmlDE&pg4_Ci+=~h6 z>4}kn9_WkodcCJi>ib?)_z2*|C%cm`4j*vt0f;*VW6~Hc3+Is}p+=Jk_4qMqhvB9q zz3)+EV56j=!#p#J&1#D?o3831uG`F9)XZJ-xYA1R(2tjVNkti&+A~YiHeOWvE%%cN zagulGZm#3Qj&TV|QujKYMcS^Xlcec?Izj4AsN=J#s+-0)z$R2BWtY`^k?7Pe=%q>D zdA)RD&gjL4`kszX*O&b%!aKA{5z?!5Oosle6Q$|ICPAv6>_um?W#&HZ<(1l&p}pJN zFpZg0_jA2@VrOrrzv`I8Ug^bzbSN(}u`78oA)UyJOzJ*fRAR^RV%+ZF8-+q*z0TrA zCUlcvL}H@`W5c>eFooBULA|e?yoltEkQnFh0=_uc`8{2z+k4ST4)2Q!x_U4owLMa~ zcX0bKd-z;Bm^jo(iEiv|lIXyV;ofW1A+Bp;68+YwL!8#cBzdgSC%UUqhxuw^l;@}> zCc#U6+QcUDMTPmNFWPGipVDV^qfK_pK!o2Xoe0+yzI+Hlb<PK2ip>s$|r`1V`RYu8YZTo3`azE61wUld1 z-&o&hwh8T|db5yTsw0xSX~KT|ol!?6S5WIy)G&0c(OXEr4mGx^P*T6wn>jzw;&k1Y zFu7xx)Cs@L3vT827o9$&OM0aZbPlaf>ISAvdgO2ih}GtIwW~};qPMoCsra3F4dM>@ zjthYgm;`=#?yf*;iN7<8bakY=D~ojewBEWqi*#|)-IGPSd8E5Hi*yH(F3(FB_-Vht zzKcnBpO;SF(Q<=7-4e9-XOZq;(mjwxI(gyk!7S3rOK}fnk?t_kJ)A{4dAaV9EYcl8 zx<|7}*Gam^vPgF%=^oD_-BQv$kwvSB&TW}6I7n}#q2bY1%!4=?2a1po^Tm`NM*MJMbCE!|c9k?Fc z0PX=df}6n2;1+NzxDDJ6E(UjiJHcJxZtxIz7(4~)7V53( zeukNb^<$tv0x7{9_$FFf@xqEFdbBaUBL`c1%3r)f@&}a>;URO zJ(vsPU>?{T><8w91)u@!1!_Po*cU7W`-4W%1e!q$Xaxs=HqZ|C1p9!&U3;4yGNxCh({?gY1khrwOoQE)T34J-#|fHT4G!5_d$ z;3jY?_#-$AoDEI{r-9SKDd0+Q6*vc+3(f=QgA2fg;39A_xCGn?E(Irmlfkv%a&QH> z4qOec0f&Oaz~SHs&`zXivF#bVIaCefc8|gX!JzV2I|dy+D*NkZzFR+E+_$|fHqG0d_-S#_=9?@9%02m53nx4 zpWImi3gCs{mtY65BNzwpH8o4ac;p1IIoJ;13u-nDd_m3Vu>o>JfM2MY8YUvQ0QjJq znE}61vpQ^p+!l-g6<{+k35*3J0e+`ubHLx!OdHdYm0(ve1MCcT0abv$sAjI%2{{eS z1l3>`*bPhtdx5>dK44!k8|(@812teC*d6QvYC#>S2Xnz3@Kc6dGQY^y?VmoZr!IarY$~Ii*T7_em%|0J_DJXhkhbFEM z)V-$Su{Af1fIk6Bwp>1g>sED7sB~=oK5}jI576V1E2gr4xvygN9NT=nT+6C!#orcu z^bWineebcS|MzwHM0nXz>s-P)hTN~P`ixyZmFrNsH(~Yt-Lt20Z6w#jR==^Q961Ee zwYSy($=g4@8ZKoUF!t0@lufSpt$}ZRxyM`Zm*IoPE^Fi3(Eb=cxMP>k{%*`MnusTWjo;Z=Z%s-PRs_$&nwy4}-5W zwsFf!xY#Q8ukS~Wfpfht*ST^JA?FVGdVto*c>yUl8wg*4YH0R{n$27+GUIJoh+@q@hrB)cqMSThTTegQ(ilK>)QJL zYteI$L0w}b^0-f;{7m?bEVi8=FDGr@lW@6yC*-}yg6sR9)wrD~#xT1MY4Qid<$9cu zFC~3~om zZGn$SD0r5|u8LX(;sY}b{{~s5c_D4A?lB+=#TRC3`xlB0syQr+UVKvSHxLRNS;&0{ zLg8U7cGs3DJOxgh(WF-4)hy=N#W{z-ABOM2t>yFKZ^HK^{{r}b;Cu1$QAAN67T8)o zl3FBww~w{9jQd5C;QONg9=<1hznscl-h>|juc13#1wRg63kXFQv#3+lD!Lmfwj&h1 z#$v9bR?(-(xaP%_L){xe6wBB(-{_?uEHGT!T*fRyvDjdtqE@lkVSmGyB4wRWdqFxRm!G z!=+usR|q9%vRI<1RdOBjV8fq8(moPO-eqy9qE^YbNZFoH+KIuPi~Nn@!;#YG2|c!Cajc?N zk6n<*8D57x-f*e+?+h0yeU;GTQWhsFYW0vlBIP6Wc#g%%idsEZAjOXfJ!NsKEZ}7< zWXvV>ls^;UAC0`y@bSp244;F%+HkSMHHJ$&Tx+SJGojx$ETk<7{id;aRZ*+oKFHS$ zKL9CyM(DSch4?+8pZNakidy}|K5rN<<^7xCA0pq>yuXc<@)7zEX7RS7R{yP$?-(v+ zc-L^T$$N$$f_&fb(~%z-ekpQ=;nL=^KSF;g<41~G{r`>pSn~mWk$*RQG*WzsFhKnC zQ$?)-dm;Z}cr)^!h98am%y6mu=Y~t&|7EzeoAd|504eX6idqA{MSi9EzHgX_sH)Jm%jUh;n+mXE@2?;BFAdQ zv9Wp%Dth)W&pss#q93W5%Y_ew=PR`}Xj6EB;S=G7hR=o<8NL8sZ1~}D@j1ev6X2zW z{}C>IgD~hScu&LeXL)uiVUU!wx8YLGGQ+W@%$_b`Fy)eGvx-YO#ioS8>%;pSjy>gB zp@hM|f|E}12KXSukARCW5(b|JA7c1r@S%p^4rzik;+Hsp7=T^HRlkfYYvuSHa5-p9|m2@I~;=4L=sXh2i*{JkOOd^hWqrhBMB| zGg%2kUx)v~aC}*w^-351{08_G!=HlhWcY{h zoi$&J{vprnC9H+N$a8zeskc18SA2K)bi>==m4+V=mp)He>q__x!=HiEHWJqQ0FECk z{vCX#=4<22^88=I+O&y{Zz)dR@*4-m_k*)<#idQDv*OaGa}2)_zK7w`ANMr;b@*O} z%YOIPe4QA4AH&DP_cgp8&i*8<^J{pGqSiVW!D|hF3|?pW$8ffh5G#StH5`AG-!Djr ziQVQIF8(mz@KfOn48IxPVECWm3l0AazQ5+{4um%vzAe1TaLK>f@PpwkhF<`0HT*vK z0fzqtPWwq%SA4r&^Yw0)DvR_>TNOK*9*wSEr)Zh~L7GG+gSn)NpC*qYQryPMb*> z@hSXh&DWPcyUg%W@M8?8KgsV2B&;t!#y%8hKl1wm#ibunPsOi+J}8vZ$) zvP#&n5Bv{?ZwUXR;fy`mgx7Y%jn0P@L`T^9;Wce!k(4!)XHv z8@>y_Q1g+w@QVzW_PyBfjo_CUJ|0eeB#fL5$8QvuGF)yrZ6d!PQF_WHzeiF0ZunJ( zKM%j!@D*^{M#9MN;MZzCsvrD1!^QsB8@>zt2E)bv)J?)DDZ@>M<2&+O8VRGs4!0OC zcDU8>C*ijl{sH`U%}3|J?=XBA{7%ESg5PEMu5jujVKifdy2mH{F!;SnZH=aF?fVR8 zKl0lj38SBdKVZ1{-h+lq-5=6?qe1Y84c`?0h~ZP+!rV8M^+c+RTIKEd^2UZbXBOykcYgA6H8H)(g;!B6c`0Q^wUcmWdp&8jZWOPi zj8?hmb$2gHH@S)T)SJueTdnE^@y5oArnwYER>zpk)%5w(8|q?Hn_64iI%2$XV^vno z4y?|O>33Nqj<;RBZJTQAok?LSkC|Ikm))%BlByM5-&o~t)w5!C@z}hEw)T#7tufA4 zGL66Cp3=7ivBJdK#>SSG=Ge~h##W2h{Qaf$@8iHN%Wt;Es3|aJRO>zXtnIT~Or`WG z+^sybPHtM%Sj#l*7*;3uDXcNh%7n&7U2%7}Va+kdO#Z2?Zn)(trMBMepo&h4H^w{S zj+VA_sD7);S(_B^;I*c9XH_Q6cDS0r*yK8$xiFar-K?nz@eP+L;oZ%vaRjCochc?N z5I@M_G_%=a(nOEze7$wu>L%f=w%X?QdGR)){Y{~5>DMTS9mBTDAg1Q-I&;)Y_5JI{ z27Z-e2)|BQ!>>>#2`IE({3>M}zd~EcuW`)e*C|_#sczGCpviKi)N+U+Fhl zs2j-+yskYav2QaZ80S}RY)tKQb8Tv0F?EXtTBEgXp(QiQ`*SK6rLU){b$`AR?@V@S zjd7TAcV|U9vKJ#huc|K56B=vVnjDLHiUnQ@na$OoK&>anw*}KXb;D*(8ARpV%4-!# zz?wg%Mru8%SG8uCC6P zZgxB#Fp63yUb>QOqs;29`g@kDuNget^rn8^7G8%@6_XEXxQSJ*5>^|RcnYZ$bBDX> zs}}K518;R^yft3i;jK&Al?UlU>+-2F&|g%=bt|aEs(^0U6cOvII8{JOBwAA#MO8V3 znIZ^PdpAdH_dsfC#g>+tw2(nx&y=a$+MCJH)4NVhuXs1p;_n5f+{ zCuyZY%<<4JpAMJva&1XY5CB$ZPFuii=WWbI6ylmvR-8KMG{#~Q;pStu)}xr-zr=ecQhB-#>CeY z56M*dkgh#?)8(YN2|9P9*rQd9S z6<=oy*iLnGuVPc=5|Gau&2NhHVXHB<X4j@i}sMV#*JesF{=TyEUJ_|%MMMjyA~ z5|x2zoZPPcKOtN!2KvZ#&YjGFKxp(0A> z)TY6mx5uhp($0Kx?aGg4#TR!}$J-8UkYklN*3{;X#>)9^)e9QtbxfODt(|R&&cD2a z&5SDrROGl{ym_~3UxM}}?Rrh(=Ef&Y_QeHNvNo@6%FKiWo=OtL+b8>T7ga;Y)LGsx zyfuH7FtRRhf>Je_Ul;RSM74rHPMNT$vJ4|;U0ZD%=bGX&iMA3?5S@HbjI$pcKadWs z@lKT}VUH#=-Cq9POLuc}_P31dcj5@T{XM38w}st&igf>b3vg#U3XugO3#70BPuTdWhRw2gy!<#5J|;!dNWErR zK%C+S!g#56j+G-v&lumE+q!)7SoNY-c}k&Pik9dotO*v-zwPn)MJ|3(rN$5Qde)j? zg;aIyKeA%Rq{$;=BPUImH33mIwPM!DREbwdee^AGY1O>Mrj`B@g_X0w&*ClAm8(M6 zw*DVFO@X{S!|&kLt4VTpm|~(r($$hK<3xp|t0P^;i3&+qPr8f~6_PGax{MPQl5QU9 zGEP)Ty2Yf+I8h<#B$ zZ^=`Nq=-ndMq0q;4n}tc_lVhD8Aka;7FaDUFu=SKnqw80=~FWK1WNevc<6+xs_83h zg&H#8SIaAX?2~*dE2mFHqzya~cYYI3&BBvbR!yH09^+}V%4c@PByWo!$7^7FhM0eRUmE&J4Et^*ays>$a@-eexu0#btv7FAxyP`?u>8|EBfB zv^HzSo$6gGm5MWMQoPuh&K&L_UO z)k@P|^14Z*dE-MD+23AI3>KYguLUV8WYn3;Q|9E8wpR4P+5G0Hy}q_Fmb&3pd0K1R z)0HUueCpHIEK|KY-Fnq8Nau-J=abWD0GLB=C#(hgDMU%~Kspnm`l?yd&u6~raa@kmtPy2#Kxo?>^_}+a=Q7iK4Skx`~ zNI}XmQrZG#h^!*s9C1_M1R1`HA91N!xEZ>5#7&(~Hyv?jOq>=AFR7LwTS#JSSLR3(|xwC zVSSZ814!9gT|5KGm{0l+=#JnS^GSb*>q0(hGs-%jOlJUntsgi;`;YZ?-R8IoM|}U0 z;76PRq_9sJnd>7rBu$`R<_sW3Mr_-)Gk{F_WO)XVBAZUPJXxLrWXdPQ89*A-sVLXZ z?eY0(&-}7%_e}fC6ffmj#m@k?*>3;vT6XaaAZ0$1d$*hc@YT(&wv5RaIm55Hi&f7_ zKhSyCOym<@?=FtK8S`mPwHu{(N4m`Uq|GSnd|I;{5mJ<=lTzyuD$5ZeQ$D;MlP*v% z^|jS>X(Uelu0Bm7-#v*GCDI$0x7006la0k~c;_BT%6y6|Q{5IaITuw{R_vT^FWJUr zU@|2AWfiB6^*s+?J@U_u3+L$R#iT87rtlU+Dd#p%%4V<}b zZa$fMP6j)7vMW`ujys4uh6m`|4HJ{j{#f2!f0BV^7eZAMw=^Z$MBlcHW-KKDtHPp9LD*`E7k%BLGfUezx$ zTqaWtdCHqML{E9uw45ng?C1BCH`6U%Yk=~M^aG1`HI(uWT^C2XjQON5kUO$u%qQ&t z)rERxd6k!`Jl%CCFZ}^7W4+vwF736M`hAVQnodzKFQ1jOkDE_R+uXFnPZp8RRcE@S znf#}djh%e5x_V7vA2*+FxF@g5BXbO;336kfX>s-3!70);OrP47-z}!786UgiXA3EI z;i|K_w=apyYu!ykN!HIAy5V;*syvO%R+J`WU7nUSnGlt=eY)WpO7xDt*A~$``c^@S ze=aM}G+DEm)srXb>v_9#PG@e`+oei4j^M`aW}l?L3+QSfcBgNx``@zY{v3V9jc8YE!qUBHdyEd9$a9`A54YvsE<{=22VOqwK0$^{Cw10!4C`CA03< zr@y1Iy4ovmjepgAb#2+GUfEcnmbXng4mP^;sMuDn%d^QKT^gCSGe_lCFy5K9Q@&F$ zy@gle8V-)n9kZ}?T2(a3K{^|*rg3sHE3eJMBSt_a(A2R)kO zuDh(d%H|Wzap!#bWtDBhl`D8O$KA@=Z*|)`nq@0Pi~4@mk@EL_mEH92S$F@!Ki%v- z$-j5@&)E>ovgQ67EM==Zzi!O(S8kc|$u!4CG|N`n-#2DzuTJ`TmwvsMqP^UFGW`CU z@??DdOqC~^Wh-<9u0fm48$Ho1TcPGdDHi-6&1;$Bz0KA9ZEtzKF`8v7)E(7Gm+d^8 zDZR%z;--IU?j8v;=9A@n0Gabin^D%~$#e#g-|wfWm;1Z>w6#+CM6+y# zdV6+C*Ur%_TcHN4LEFVMfRwXib@?s!6ti_nLA&EE_OeW`U`4ZRRcySm%t9s>4-3w@ zd{~^Lb4T73`E-)d$>-`-egX3W+>-;-Sa(xZk^rO@8Caz*RV}@-+4_}jO077$*J`imaO+{+@o8{ z)^e_w(vO$f=d&7LclizbBe-g>ZoBTva_-O+?cPcGyL48QDWBwVGGL*Mw>h2iM6+zA zuymJah)9`_G)#9~pQwCRa$=?$GKpr{5=*8ESsw|yp$D#HW2!3Du*~L)JXL-D`e>Fd zzcmv1s{GVBu`d4gtUW&csfIU~Ns6a*vQK>umF2ll#(dHj$UTS3m{0nfs$Iw@ZAMw= z6V0+!;rCC6cRK#l4I{7e!?ZKBSQc&*&9dbfKSZvIPkA%l;*Dn6k~?`B@A1}W`TLp_ z_jtvbR1b`1*$Tav?%olMX4wiEceG0RPc+L`njY4TSDmZlEL*uLT`P)+ED%{>4YNSc zCuW+fH{0s@#9p1ebL)nlPfU|T^6DM(5~~+YvzBO)uCMR6UwcPwTSwP7?7l7j*Uk99 z-hcO5GRi5kz)xubXSTj*HnN}6%Bw`)(QITg6;l)<3#^$I2$_wHqe3^?BD(X@O@@rJ zS%oc-V^zs~YwB+mu10qheT|=GzdMY$YUU9g3s%i`i%K0?;3u%a8h;mD+f>f9W1t8) z&jI?vbH}~A;tk|FATOtK%$vx~K>oP*w)+yfJt)|5&%GZ*P637E-aFA3gTlevN=uE&YXKajjn1wF^T-!u<-0qFJJfmch~ zYeDaE@89}+(ijmxDTw$kgtKhqX!)JEmF$eZ`=nvpMm@s^#9`Bg#(aM z?g8UIIFYw2)%F8-d;ZbC!F!`0H130!M!`3N4_^Dq``MShEquth6+@nfkAn|wpSd&p zvZup`ja#u#1AI1oc;2*MvL9Q%6Smg473Y2hmtS11{j2x>i9PIJ!`B(N;;lpAXTxKA zUvU0V_%-l#0l~h5#d?Zb_EX3ahQE$n-|!ES8yNl#azo8?1|vrrF7ebuLe8cvMk{LN z$c)QUH$u*27UmtcoGSPxqD8+K3)zN{L*1-$MXj90NNFEJj?`syMXj8ZkXsmj4suJw zuRv~P_^rsT4Sxjr3&USPnqP$E{1q;?CgiMOv7Mq;&eursGeT}Y3#kJkcMyxQidwl+ zzh4?I@jDnk4Y{M?dm^R%2)Rux#tVZV$zp<{R_-atiH2W@tT6l*yt=#XCJ8PcT6FJrJwUJULLY~-W7e%c+(TP71^7dm7FU#ZyD@WYWa z3_lGiZAQqun1%E=LY~-J`WzweF&5Q|T6y9>vkaGV?q>LR$lW#1FF?*Vygzb|;W6YM zhKnzV9SQkjOYs##zLaHeMXmfA~dxrU2x#0?k!pQm|252X2mdcj)o1xCLqQv8@uumg*QidqF?GsXZ31(IK*qE^8o zWRu}XBc%-p1!D6SMXiF1kWx27!ObiVP}C}T1leZzi^z7v-$r&A{uxsCK`6{&aiF4B zVPE7yhRb*${f$t#1&bw$GQ1)WHe7t_5W{C74>i07d6?l+C-ECXq3rVrMXf^7bsGK~ zr1Swoq117yqE_L#$fFFu9QkX*Z$gS)2!(gESf;2|_z?0K!=FJ)zJ$V;S^QQ}tMCov zv4%5NTE`jw74mq^i*k{_GhF)k35IWsJkjtSktZ20?Rc```y!kVEC8FKWbiFiag73X}hxx{{`|K z!=;alO$o))SI!d#7ymk6QL9+&eSzVU--U)>ixi(D6pQ^YR@5rK2PyrBP%OT8siIc# zbI8jK|0`1JMkxM>#TANL#or>Y)V!oO@+!mEMqX`rIr19ACnBXBgc2DWu2a-15j$UR z_~FPK3>SOfXt0{45kt!MgdS3_rxdk%j72_e z_%6t23>TX}Yxn}Bv@xN_fh?X^)aoJrBQ_=U5a0ikqE-*_yB7_Yc6-TismsfTOWFTy zxaeLn{5|BWhD#g0X82dgzi8ew7b*28^ekiXx}sLkA;>ojAB~j$L+H6Zi#LVAD_Fdx zsMS;I__pEmknb3N5b|BaPee+Y2tB1SNRX!x7Rj|~45`LW?& zBc*PHUeZRNC~EbRz98ucy`;?lP}J&GiTtPGbCJ^CgkJ3|K3CN0bqw-fhM$A{!tnc$ zUm7lLB6cM7lC=L;)avy;Qp!Z=E#>)-qE_$0$p0F?A@Uo;w?=+zxcJX^hR;AsUWDFz zvG_qzt9KLUnwna@4}+VP-lxEGOd4!!OS=+!<1==i;Sa*|4X1tV0>iO^U8s2(Y3(Az z*Mb)tj-T5lhHnEeHGC(y>L{GnQ%<|5(Ko=Q{)Dna;k^w%7A}59C_5A0$M8$weGR`I z-p}wy;r$KAf9(N=<0JM!!?C43Nb^3F*A`n7`V4^s#kYhHHGC?3nBleX;f6QEsk4MW z_<$`wBz!r19mB7J#|*y{zOLaK2H;@51+8 zCdKO(&0p19@<*0muAyesEsU<7p`o2qQD~Wx&b)Mnq`!4cKJT&MdZn|+-jhJfg_E?(P zOLac=q5E)@?g*YSpDfP+GUt;vqpZu5=?ozHzDssz04dt569?(i89=6dGMoW8{+LS2 zLvmG~==(0ACaOW(#WR5D`z}eA?9#}aW(F^vPuhXbn{_pFK4~*@N6bw5Wco_QZ2dKm zRC5S+Vy!NX2r0_r=F^t($i$?NGb@rBDM1l^-zC8y?rQXX7uOU&inzy|Og$&VcXT@0 zyXrX|?LVp<{*88RX^#8Xlek@3S+$bKTK!5vrpqoX`o2r_eU~Kn%T`fCLe(eg(w?ST z-9E>8it|({w?1k|*IiG>JCrFb&2>)4qB?JjaF$IzvSsvrmvH-K*4B{ZXZfYCZs>v0_gyl#f9e$C8I_gO zC#FuJW3qZ$Ts3`4x8&1J-`e|GdVKl|Y41)$rl+deep5VSKIseO-m%D-Pud$FU8q-< zUp>fFp8xN2pA_Zk^0`lnd^+h^T{`#4lutK|ysA7IE|V!n^nI5!gQD-;Cq;{O`5Y=` zK2nVCIERY9?~&7z&oglj}xuS#Z-)~_Cvw`O=w zxH=jnPwKxqRxGMhWPvO!5HgE)uA18*i*2(>Qr?n2RaVC-vMBG4<6Un0vP7|w1=auy zL}z_#KqIHGVszFQo%N;nkSKO_w!lw%))##>!gZZB{i_j$dd}WEa%5sGnKi9g6JsEE zg><#(?#v>c{2t}5EYit?(Yv!qC%^H$CyR9RNOx}*>15u?JTG0~lEYu$#iYB>OUD#_ zUht<|g8Kd}(j82?2eL?a2+zeo9 zipzyM{i6kvMkTlGi;(MUecQh9e4~F1S)lc&OB&gRU_Zm+B(0x%6P%%6LXK=ZP3s?e z4PGQ#^p~;V&a{;OBbf`8c~&Llyv)L+zgOleWfmz3xiJ>o==9Yca5GrfhKAtaq@m{Q#kzV}Pr;pvwy0OEIP2ge+LhMNv+OLMGIo&r5$(#C`hWM8^{hxLxZrQZ@Z_&W<@=dohrtwf9d zD;C<{hLtwLw-zmCy@ULLNZt7%4V1{`TgDa48dE)Uhm#zpe8FT>O$S>NXa} z-(LP5d^^!%zEeDZtDK4Amr8AQoI|tVKl3Sze_R?!|H|2L^(UFrnh%k zL*JKki=A{nB{8HKC;jRBOL-5)58IJGKP>)|^&ZN9titEvCX^II25EiHKOHTmlx>Sl z`WHNXv79drRr+Oziygk!ao4PkJC9fTqgT9-?mt?8H{(!&w$HLF&qnuOt$*Y!Y&1{j zGwoh<-)Q})rzm!z)?dRh#hH`4_|I^Y&o9NNzSHT8Pew=bUw4C zU8Jmp?e-;q-7l6^F~&P4D%qXL9d&x~VP`(?lGD(ed^Ycm-W(SW{s^we!)2E-o;&k= zms~)4ZRcgBJEG5HozVMA7IixRwqK*qS8A)|E#!7ue>r~Q%mrTZ0D9eDj=p;wdUIST zxdy$q!_lulguY1UQ~WVf+u`VUvA;84`0%6AKcVxV#Mt1>9lka;u?K7Y&?J(E7FaN1Ae0y^4Ngtsg=i9lx554V<~XkN7)!Q_k%kL%*p` zAETd|@o?D$#&Ww{>%X2we~zj0TT3oNzq!_bNx5>j)cQRhLBEC8mx*0<|FU|2fqqM^ ze{i9j-Y)zNdNYp2_VLo6z}RS;ajaPET+~$C*r>O6mII_*r#028#He$zoetx@GU zptpOSt^7%27b*VK}D9@t0x)Hz-kNJ<@UBfWdP_UX%HymH1vpT1by z-8o+S^!+|Xzq2{M`}C!p7n$*}M=ZUNnN+loNUZvw`Bl{$!w(S?O=Nwh9l7+{h zKUwQb$={5JC4V~t{V7`CH^&_hOa6Nq`cswOnzt0L$HUSQjOq4iI{gj{T)UM{8jN1X zLBgSo3C7<_n($3~xz?A;IH3Do$rEzyJHzOIkJRHv$+2&vKU3?=Mj~}PmKJ}4UeXcD zwql{j!;%Z|CHoIbZQUew*W+r*!Z`eoT0h_cq#jpGH$5CZRc9Qz3yUBW_-pQXFf*6REo)%H?fJ${z7{0T1QLzGTosmITf z^RGc6+Y@49Pd$E?T(cSaOO@LCobsFTv*gBG(9`x3hFrlymuGnnerR8=)YcHvn0lRl z%M0iw9bvfi8|{b7mwb%=N~N|ZJ?D-a%X{vJ{wk%nhGS|N_9kM@(ClkP%s zgVI|i96QYUaLzG((BG)^cF`tY`kJNaZ_?>YXL#xF5}%>%B@CR*!WkdL2XwG+#!l|| z;OVXYvVUiM@ac=iznt;Gr|-)##XbM`=}X05^!S$dB6-@l~L!}Su@gaZI1MoYwe(O2z zIFR?JW6)!330HjY+B3iBXXx+N`cizu*gwDY74(!(LYdfE`&HguhoQe$sjV`xgKppa zLK#o))B1iDNZs%93!g=QztY^th4t z&Y9>L*CY%qVWG#3{2?2ne^{yQ3wL(MfxNE{LH~%-TVM2oYk$ix9tVF^r~eh>r|Eb3 Zqt8SCm`*=%FjD8AcT-RF9IGtr{{Wfm&Sd}q literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/HandEra.r b/handera-sdk-105/examples/Mail/Rsc/HandEra.r new file mode 100644 index 0000000..bf63623 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Rsc/HandEra.r @@ -0,0 +1,29 @@ +/*********************************************************************** + * + * Copyright (c) 1999-2001, TRG, All Rights Reserved + * + * PROJECT: HandEra 330 + * + * FILE: HandEra.r + * + * DESCRIPTION: + * + * AUTHOR: John Ehm + * + * DATE: 01/17/01 + * + **********************************************************************/ + + +type 'sKst' { + //Currently no data is stored in resource, need dummy otherwise + //resource is not linked in + unsigned longint; +}; + + +resource 'sKst' (1000, "HandEra Aware") +{ + 0x00000001; + +}; diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailEdit.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailList.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailMessage.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailNewMsg.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailOptions.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailPreferences.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailReply.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailSync.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/MailTruncate.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..6f920f704308a655418d4460a4529423c2a1fb7f GIT binary patch literal 1809 zcma)7O>A355FXcA)F#bOLntCNVtFcvL*zC^;!xB|i4#bO%IBjH?y-d z^Jd2YF#upM0o2hQ`#ZzCgFs^xH6$han)fNAr&_!7MqKfY2o=xxQ!?~}|DamZAs5;Zr@a2%`|kJZu#r7{Bp7V(PMad*nI!-&z=9=`SlxU`0;MXjbDB`!?xyDXZ~#d z^jtv6pJrRY-~)ILPR6Jj_6Ng*q<{|g5YCe3!ahxRE~hbHLS+qF*#ijR95g|bEo1d+ zWt+qf9%0vsy>x_KA@;>XY!h3CA@C@ao@DZ(b^AP9gA;I>m=s2+cn%{oZ3NZGsh?%5 z@B*AC^_ViKqkKt=f^n)gHV<9UN~(+&p%%2v@$GDbc1;og4lVFiQ1zK`+Oup43h*?% zQq3veALdJt4t3d=kQNwdQM9T$wn&x$*Weh{;cE!VpDiF=>>k^8z&@JUeUr_m*t|*g zq}YPVjHTEjJ+o}dq(-xB+3_nT+4CM-b@+k9YYwkFyy5Vs!&{~&n`RH~lf1X3eVcK< zWKacYd?6#Z^C`9nc{oM5@kvy0tZR<<3gmr4MFyp;C@LZkQ1jsl+u`)$?JuI&$-Toh z_jrZsf6!Kd5+^eAOYiU<0%CitkiZ~!uZ5gUWW8<9jIXIxCC<9I{Bn5tF&HPGXH{^WDm!=@6sr|V(glg8~Modi5R<<0X%q_>g-8y;VM|?1(VG~L@J{=i*!VY~0UiS64Ky5>s6guF3nZ{Fq zF2$lf74+$?GKao0lc6^DmFKQaCio-@Iu=w>D=k|q9fe({Z$D7d$Pd)Xr@ko67EPj& z+Q)YE-jIy%wD#8BAnHu)0vvZe7=yQLUqT#mwo9Q7KC^vIHn(iAle}Zz7#SkDX3qi1 z9ozjRADhwa2<=c$W2kn~;EB^qyCrDG)RTDK;Z0~G`L@IBKqDL6F=Q(=qyRp2{4%^o z@^gpRz#iv0hgacElD|7V?|dvcyaDf%eB|&Fj8iPnIJ^MY314#f9(+Q$&*A&lckDNZ z7vWpNcOBk_9|&*9cbfW-4G%t*^i>|^iBVBhzNu(zNrtK*beYrNg1CZu>f{q*1pOdR zlg{1;$i2nKtHW#Rh?nN7hB}z1L}Y4~O})F5pxV{VL-eoa7m>Di1EOZvSS2pf=^~~32#7AW`0p-NhO5mQktsZl30=o=5Yom7v<;V zD1;VpLs>5Q<#`hBMTu!?nI)MD!5NupB?_K-DVfQMCHX~So+YWd>ctAqK>g`JGgFJf zrm%u7tGGEaD~r+M(eetBtEne!>wAqgtq<>TX_!0zOW69^uh#BZ{il^d{FC%A5bi;#4X4dNGE}82GV&@o2o#r0`l8{!3PGM6@C`L&|(L2 zWPxl4Rw+<`GFSuI9>9k literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailList.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailList.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..44886806447dbc63d7da3932c2737009d5bc0669 GIT binary patch literal 894 zcmZ8f%Wl&^6us^=&8tlX0#PKOR?~=wssI}n?9wD4z>P}mRIqfy;94?vWRDd!AHaeg zumT|zDXb7khy@G2fp0)8)26Ql`*3Cwr4?h%%$ai^bMEyJX+$*hlt`1aP_pt@6J?Lv z;euNAwk-q?{oLe~v4Toa;T{(}hT%nIwu8Xqp~FM7@+cNWVHCFNX0@WtA+b#U-}p`+ zevT>j>RF)IdE|C^w&4Rm@FO0IY@JVWO7Z1bq!bB|QOu?t37%2h7>@m2Xn7q2vr3Qco#b&_-irM0eRf3CO=OAre*BcWmFGQXHxMKKI^7t!+W2 zrh|4kf~vmg#Nl%paDg2l_AOnZd2KZQsK#SyT4sk-fa&HbQ_1gg*WrG#Sd=bH>=q^g^`;hL15#62(rh3s%V4|0SU1?AShs3yC^j1w+rw(GePNguJ5cVvhaxeYkC1gw*p}+$5}Q+ z_td{Xd05H*%HP{}kmnNprj%3!{7|aFz9sb_peYsM+!gog8`xh?w7rov;rvlnh5fUv z1^W;DIyI90)o-{njl=n5KmP>%zX)uCzlDZh2KJNv!Zmbu1^6}a68g3V{1wW+pmu1} zl8BvWgAtyAwhaCcDlP$EN1jh?Pw|i8^D9-xdvbzsXK?~t9_fY~30C8sS#vw+q-EO_ Ub%HWxD-1kOZ`xr(xWeQA09Nhg)Bpeg literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailMessage.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..ac298b36e3b3e0ae7c376c7f4cf5c22742c49aa2 GIT binary patch literal 1580 zcmcIk&ubf35T2EvY)4%i*ErNPiP?&f%1)8fLy8L~j%7tv!+I@Ct92qmQptL?wx}zy zTE{ko)`vi$zlaM>ogNxP15F9EPbRIkJ zdo%Oq&6}CGL>du^JW(G$?bm6FS=Xj7QSAHO`Ht&?$V&ObK;6NZs261$WhDb+|53mo5^~eyVEb--ZeZL-kVJ1Qa{kxi6rUzX&Uq< z+Nb9q(_s4%k=3Sz_J(#ryNHj+d)lMhH`J~v^TFXK)pT z?QhU14bYa>2_sWHE|xKm&{wq8BPFdf(z}ekCF@_eR%^I9=!mdrnl$9pDzDa(#wN(P z-0&1&gV1b`_Bib!2@}cxqq`UuW?iltz!SrIwKmxGL%7WtsCV2VPJvMpgN zUR2ysd`0ndil0}!#2mhFVK5!Qcrnt^sRL4yP|BK+CeRTvhJEjfZQ9+AC^7Hbrz`+} z=od8r`j3Bfj|D`fc`#g#{o{mZ*9^~QldiA14~b^GO~GQ~c>eb|@6^;;R7zp~&vBkY zoO9T~k3hwFNSvcQeL)G*!z93!$$cO_HhEbTC<65a)SYlpM*4xf#@a)|rlZhKk^WB( z=e=N~;j8vIB8tzct)$VCUUlEQ^PE9Smi>zAXG5G@n62E~3pO^CxUI4Fx%n}F!0nIuW7WO`be*37?Ec1^9EW^7S{%E@ z4+r!QDwAaaB=w9gdI(-6;5=hgedR4soBcn|ON7{q4OnY@ouBJRk^sFRpM z-By5Y*x0Dj1z;ce8cI?D-U0qaIOGEV1YAR|QSe9`ey$>?8^C`-{tnW36;EggKDQCu z4)8J9{EXP}5c_6MQ7dB&CXYHXpg?geJKBI~2`m5MJf zyX8PujjSxAq%UOFu_?s;X<3(n6zPU1qj}k^Z}k^F?iz8X>IQ>Fv=8g`9DEqvGjvOC K2K$SD@&6Rv^)kKy literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..586e3b9f4aa698ed824f916e900e5b1c74eff61a GIT binary patch literal 19331 zcmeI)d3+Q_+6VBbXF?7_LO?)wSJwt5UL;Be6%oZSoDu?(fQpJvlAdHFnZe0~0HQ`k z(BOfBlAwa(jf(eup~f@gjrXmnnC!Z`A9h7ZChza5`ArVRcX$8T_x*?FllfLxS65e6 zS9cdPH6vn)i1$p9vG_~hY*HBF)QWFsgSBFby6pbHeB_rcqEceTG_s64M>&im*45vD<$Vs0WM0j$r z+6hO}XE>eVR1@#5iKLoH1bUm8>AvcS)7!+wgYk4)?s%*zZl;MHS2M3NQ0j{~nI?Vb zYG2)ok{oTCz$I3pue2f@D6NRtm20X?E1aN=3pmw|{hRnPa=cFpoj_3QQEzs4iz~mR z(pT<;=0yUb;4b#94TQ_=K+rC8g7&muyuaLSx;g%d7!a1tvkBX+G5Myupz zuLuSYi8nHj1NX?Yr=lJdY*%0qFB;(61z8SJlT-0 zbY0o?Xx52|W<|!VWxRnqv(>iTRYB*6!WF)tR*y}0mbl|*sAwUoU&Th58>+&U7ASEl zWp+)KonKS!U#F+pF4Ha;w)2CvPOz*dSZ)WZBX(5)Ib!c%wH?nzyAQgZJtFro+X?$a zXwNV@eMRD+zQjQb94FkZjRjrHu`7E<+H-xu#K}UP*p}7ER68xs8XL9q#Ia^WP3xoY zjdMzB%5yrKM&=C9n3I<=$CJT?$>MTvb$^d$NENrc#og-u3&VeP|KR=`!kXeo_fH5V ziRJz~ERmP-YL*Txsnd9!^)Awj)*s2u&6NovS*VcdRcI=-IU>i4>@g`6DOwmT%}MN} z@smW-Oedcl^y_WFETg3?5!9okb=JXM=+sD|$e=_Q?AGBmw}SX?6RctX`~JPmB_ZSf zWll$0E4t^DJQlaMlH62tZ$Q5guSj3LUaIvXsjaW5L|lG+kJGJf-FN+unkwtpO||QG zI^K0s_d|5GQ@`I{c_;qMx`tg(cF*lUD)8@}+w@}GS^c44Nlj^mjNR3_u0J5F+fkok z3-_L}u5@mBeXu-Gj@ya!!Ig*`bI=Lk5*Adt#~DaPZ}YE1N0V8*J{?w$9wN0Ek1JoK zCM?AwnG?f4zdsNO9ogR;|JSh@`jE3(DLrgjO|Z-k;o+hy{mp@Xy-(lK-FG@x6ZVTojjx*L$A#sD zO=RYNUDb-8jZDo-TWda^WJ7hwUA17JZu=pLl{z&L!5|@Q$8YZTkX_uNha^TII`Z-9 zCa4{E$xavB?P%YI)^^PsF2{Hv&d0HOmauJ%=Ws2N9H-|OBdUCVxmh3U z7cHT9{r<)^*nb?_LECFQ!V-N+CN%$S@}H=sY~Cr8)Y#85S+{#~<#^R!DpNE*Z>JQf zPPu6&!zhM@K`82&Saet!jd~8p zm=U!@9Wg+TMp2KGbRFeAIXXXD)9{1Lj=rWXBByk8XiLedXuo!Nn#ZFxmN|Y$Yb>Wb z9a>X40|yPgX(OPRmItUG?USw}Lhfs{KAO8$dXH2h7^j0Cim zknfqzF^`~6%|+?_INy~W9gfrRy;Py}I71RNr4|X9T39mAl-`oFqS5Fp*dC7R*|VfN z*50h*{%uN7BbG2{)hg)SoF@fYaXfEQ|S!1-CCy#rpPy#npLRIehO$7Nby#9yqv1n1|H zh99-2Qm>^#e#@Jq+Jog%bYg_$GTbfnxR-mxqu1dT9`UOyaF8Pqf2GIc_rt54c)3=h zp|#~#`Abc?u67)!9NVwaQsKC(^FDK)$oo_p@;=p&H0FKkJOS5eEaI=l+T-v#U3VUr z>yaN8S*u4!`Pb=Dki9XsS9UGLZ_59|IY-y_X2Z7F$F*PWg6nC6FaKCbCeuP0Q$ zPoC8MQ0}MD8#MjX+6%D#8C2p`q~D~a$M$EnmmvN*6tWFI58Dyngg&Xu3vuK{`VxJa zYTwo6)i}~j^;**9wK(!ReS^M9-=c5Rcj#vNE`5)_Pd}g^QoX0@@^Kvbgnmjtqo30+ z=$G^>`Ze7`zoFmK@90+gJ;f8Xb4fgljp;kGcX+L)rnYSSN2Cp5cT0l7ggG^49wX~RtWYn%UeJgsA+#Q5mHGrCGLN4L)3P}gI0HPbBO+F%y*#-b*S zr^f$5%wGByUVKTRX3U0g8rOAnrHhWPbmd<-eF zC*${`I=a#&G1|oF$}D@+edwR*zSO3J=@7af-JcGndM0(j=*lb@U76(|dN4hN#?Q4# z4%hKtII|o|^@*#CKH+u27|1NRF3d859!`&-N79k>C_0KBO-IvXsQFJi!Wi$H zjn1K`(=(`#me5jKMjh&><+OqZ=$Ujbt)x{nNJDfUJ&T5EHI2|3I-l0k1#}@@M9-#+ z={fXVdLFH#=hF-5g>(tMh%Tke=*9FBT2GhLOX+3wa(V?_L9e7&(Uo)+y_#M_SJMXC zNY~J7>2>sax|Xh^H_#jDdU_MRnchNgrMJ=B=^bJf3&tpkG&>{-g+Puml;oefLpu(YiDO$W+s*!36fK@s4VzJ6e1MXKx56yc z5D~wi{24Lng>`9Z*^V0aZWk9e{A{&Ja-00q+9}D}P``AJmm~?Ferjvxxwo1Y#o=@{ zX{x?rap_A^p}t~C)i)87iV-qBDYZCN!#Y06*u`io!)!4Le)C?I?(zHYWo4S3G)-ce zgn<5O89Lv~THR)1tR;8UiL`cmFUv&7%Z{KszPfv~#da7xoh(Hxpf z52dCfAv~PxdDKHk(8K8w^hi3A9z{pdqv>dR3_X^Pp~umDI+l9rI69tApc84le~C=y z`tfuMEud3r;;NX&_388kI)fI`__d-lF5=59dLliEo=j)cQ|PJmG&+Z#PS2n|T0%={ z8Fi?imeUFvpl8y#w31fQAPv!Z^eh^t)igqD=zLmB7tn=t5j~qOrsvRe>3Ot{o=-2J z7t$s4BD$0=qZiXlXgys{FQu2!%jp$#1-+79MOV^Q^lEwyT}>NkBV9wUrPtBx=~}vu z-av1p>*-DOW_k;~mEJ~gr+3f|^iFygy_;^N_t1Okee{0%0DX`?L?5P)&`0TG^l|zG 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 Q+nRRYvd?cW#qI_EAF$aqT>t<8 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailNewMsg.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..e5e00ce44ad6555c79d1bd3f4b7328ca8757bbc9 GIT binary patch literal 782 zcmZQzU}RumU;+}1Ak2HrH;&=v!7utr@p+yHe&=Mbh)|8GxpLw2gewI%c;;MjhH~Z#(wY{k!+B=Rwu2J3PPm zK5^Q`aJBivwjVRJUASi?f1NqUDy!bs*ss81?c^sn%l|}QXt{dg0849T+Jd(glbb&O zRbpvg*bbtew@D-nDb8a!nc+MY0u3U8|I&#qQ65VNnKm{Ba79; z8yo+m>kFI&dS1XUwKP@1FEKfzC^I>u1SrD5AjPr?7%-C=lo)szfea922u{sQNzDVv z%Cc-`PzTByAjvu=B^9M6XFwFlv20<81}acTQs9zWl9-uOtf!|3v0y8Z5@MLnPzj0v zFkoe1VvuC01+qn0wlT~E%CaNLf|Rf@OkkJ>q`g2Kh6M}@;CdNYHZU+SzXFRhFtD?1 zEC~tmVcAsT6ynFS8BA^glUqwdoP1cel>|Hcuxu}J5B3B`I#3fL0kALBn__$dC?vzM zj)4_q3Xp9C(hGE*9Y{Bjp9Inmr1KyqFjSSe1^EK`Z7dssBoMGK)I9(ULLMMfgngmT z7hr%10@+4Db^tJJB!KK-_J!J8Shg}K0NJHLaRZ>AwSer&K=uum?F^8UKB2w`(h%u7zqVTXn;r!O#!6?`&_OSpoQi}G`F6p|8) qB;1P<)6z0aG8KX|GSf;FJo8dAlM_qwiv*x1DL5CUCYEI8=K%oPD(LS3 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailOptions.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..d1aff63cae2e1d0dd5682e369fd0f04c2d07b2a8 GIT binary patch literal 1112 zcmZuw%}*0S6n`x{v>@dx#zdpZgv1aNBosIpJeZbGp-@6s@MgB{Ydc{(OJ=7+m+}z~ z#&|NGjW;fyjW^@J;0;g4zr^@vwh)MJ)A_x9AM<vp7DYb@c)(6!iXv0jBDr!|VWol6 zBye^N4vfPf3>q0BK@_bf_hf{k9;d)v7C{O|Y1>kuv_OTDORv(HGX=xBI5pTa)5jGf ztOG8LP&8wEF?le~j$j)`;jw+A6SGW^D~Bkns34D8VXbDO4(m`dz$PSN1wO)dcP4VN z19oOo?2~3~?YadP=|aB14)x}X0_)J~vLjt6x$Ica=U=iDop(3bsadJ&_c_m_;5%N! z=S0i9BgO6WG27G_-$zxYDXRjx#1@8{UN&fCB`OVLM=eyLCYkDJgwm5dlR4+>p4yG& zDN$k73;9}LuA1-fz6-UHyi0JU@7M%UNg|?LOFcm$>Z@s~uQS%s>ZJL8%d}?ly4;t| zhQu?Op%HI>56;E+FUddTz7M}3ZBL++=?FeoYzOr_k_yIcB?!Y6$_s+$)w{*_4WS^7$ zgdM^&vVYi|16U>eY3(!Ep{XW}oh<@SK}6zxR}`>nG` VTB-k=H?l`aPZKv(Xc1m_Tp=z$PDdGW3x(UbA)*?2YaH=jK#I_2qvIPprDv^;E(yyGIOHv*H^a@a z@fsvfaHH1OkuGCrrMX>tf|Oe5AX*~A22W(90g*vsf`_`!+rnQ{(m!5W7Xe@FXybQ0 zZ*4m;R!N@dzDi=sUU*A*6Z?{rx;wJ@PC&z^YP$j4@`Z&hp2mi6h` z>Dl3uFB?|XnhbbG39r)}_#1vP=Zi)|8O6&jJT+d>byX9l;}3N$o#T1wt@mYQLxi5O I@2}hc17pt+BLDyZ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailReply.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..a677811dfbb4ce7499ce9ecccaaae48d4ecb8a7a GIT binary patch literal 944 zcmZ`%OHUL*5U!nBdZO}*2>8HcLX;Rxd?iYPiODXHfGjM5jdIe=?l#h4=pnPMxP*9< zKj77PkvB`?NU-eE19PG(deO*;kQ&nFPrHIIxCra@<cLE)AREsd3n!rQZ|2s-N@+t6N#7KO%~# z*W%CA1O3?IPt*ZDV(}N6f&OmsKHY=&%|m zFu80_Y%+6V%gSvlcg#R`M(kQyV}8Y+Wtpf`Y|?4!rmNJ%xiiIz)MXiS-ZrrXqPpo! z;tE5_<_lt*reW@@n;%LA5<-^T*YQ>J+zoTxfw_ymQA4s=x3~-h-sfWBD<+GllSNy$ zi|5cPNVCUt*H=IjFWGs|efb-V@FL#z+_ez%R=~=0S647mANUpG_r*G00j>du7}Xu% zub%t%0PPNsG&2$y3O;d6) otonINROR@srS3D4Ums}W;XMdLZ#asVg1Fp15G^c7ZH}k^2X9W({r~^~ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/deDE/Resource.Frk/MailSync.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1a462037c857662985ba1bcd1a68129a4387c6c1 GIT binary patch literal 4033 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailMessage.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..719c1ac3f4428db85664886996e0962a49b5518c GIT binary patch literal 1582 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%0DX`?L?5P)&`0TGbTi#Tx6;Sy6LcHhPM@St z(WhxOeTF_upQF#y9dswHp>g^GeUZLIU#73nSLti?b@~Qq>3j5j`T_lr zendZ}pU_X~XY_OW1^tqKMZc!IXf0LRU0rpomwL;pt=%o18<29>)(X-Yjj~&F8}VM; zfU6T}NX)sh)M}JomPn)KG)QV~t%bZMT%JgiX4OkNej^KIy1NDGpHT@eT2M|pVfK4X zT6pKh0?guK3QM|T)q0)9wG?K1VzxnNaVe!mtXf=tC5zOfNG>)CKMf)?FBo*^gTl)+4uv4SBu;6E_ zLDCxJCu_H)X-ECqa=j!!@+nDa;%N|`A0?io;r69nf(JrQq%?>pYRJ?FBW)j2wchfy z=alOW>QF4`gdFp%1nXk`J=8ha&W*-=b{O^g63^eF_J&vxPvFXZA>2vEjpJe@ik*@| zJ5gO(*zZG4rQt}>XV1rtU47hF=*&W6oM;&;38QfZ5y$r78I!qH9xb=aB5UUbOMP}U z81hHLq2PkV#*&Ygbog{@b0ZqJw>7KHy=mMB)|`yiLU=fcsZ;B%Va)Z%AL!i|9BF>!hARe9RQK)btQGI?nZ153w*e(mB3fvKopl4btOg@*} zfL1QRjXkUVp>93W?H>N2gUzEE-3Z5mIZ(Kx-f}##vqgG?dvFFHznYB1W3t~IdaQ1|Yy9)OvR%zeS|&M-Lqh-K zuNNGcbWOMdYa3LtmfTh;QrG6LtjRWaWi{na%`}o<4a^b z=TD?3(Ft@SokSr_T0!U1d2~KqK+mBI>ACbgdOoeBi|Ar{ z0bN2bq)X{Cx}07_SJ0Jo6}^~VLNBGO>1A{cy_{Y_ucTMewX}+^qwDF_bOXJHUQ4f| z8|n3Q6TN}nNN=Jy(_84R^fr1sy@TFK@1l3pd+5FNK6*cWfIdhcq7TzY=%e&8x|wdF zTj}HU3A&ALr%%$S=+m^CK0}|S&(Y`U4!V=p&^Ud8zDQr9FVk1(tMoPcI(>t_N#CMx z(|72*^ga4M{eXT*KcXMgPw1!gGx|CGf__QAqF>Wpw3gOUCHbCgO!)zeI!GO^yX)`_ zv+h?(sjI^qahqgkscVwPI$UYjwUpdbo~cTBKQet%`XsYW-OBHu_GXxNm;!&$b;U2H za%<_~m3!|;ir9&+mVWd=dJsLB_NSTj5PB#*j1HiO(}8pl9ZZMNBj`|?MLl#FJ(3

L)dNQ3# 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 CUw!fb literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailNewMsg.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..ce857d5ba5473ebc7c0d198e82470c71cefb80ea GIT binary patch literal 780 zcmZvZ!A}%16vn^R!bAlFs|Peh=3p=}W+Nnc^uU4yGqW+yCY;M`S868RWLhAac=fCy zF){H#3>Pnk1r|Jb^x(n&Lh)eyAN1=i;sofVufNy#zSqtxPytZ+L&I4ah9F_-J+2^v z#3~F@tUw`0LYr}>aH!F@oGAvG{hgA3y3td*CDzfWG(Sq35yVAKhB?-EM{G}=a#&If zA1mh3I-~l}Gjk(m+LJfI&UA`9z6C znbu&x?}2Zx&g_MlHjK1&7n3yaWLdZ@^Rb0ow%gk2Fj>)U7cQEXPNnPQBS)3Odak6? G9rG6~%$s)r literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailOptions.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..dcba1e27a959c52b298b82ed664a723088db074c GIT binary patch literal 1033 zcmZ8g%Tg0T6g>&FAVpB3#fq|ehi-78D|Uo};t@=WjNn4bYLW&qB;ocwc6Z{rWHy}f%tLL7+eNOuJnHwMnApaZ4xjBt-G&l@2QjV%et3;zj zDQ6wGfTgb#b#r3r3+{DjYKY0R2oYheL-#GCyW62#q(Wo6L-9SMC}08#P1X=FCS>2N z>PLoq=RbFo3dMR{RX6!R$p?nT5uRWY57D2a8*X4iMRna&#_c~42fXVD1~9-KnlvA$ z)+i%ab$wmA%#diI2Sq9?rlBKlC9xTEJH;z*oYccO(y2?LTeQVKV-pseL1Lv1#?Z`P(!}yC{Z%Pic&M4+qoRN%?vz4*s zEM@Gyj@$5w`D_F-BXK= jl`FgbK2u378!PSeN%y_YjeOCQ;tSH4oYu`GL(RZ{@@(7E literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailPreferences.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..5a9b78764c304d069fb5553d6ef0c151989f4356 GIT binary patch literal 1277 zcmd^9&ubGw6n>M`5ltK0A}W%@pruqO#enn>JfumQA8l$wv&EhQlVlQCH@k5%DOC`m z2f>S86ff#YFXBZ+FJ6j&K&>7<_2kKu;MMxgrj*)$!CCU&H}8G>X5Nnt5hJ2#hA4s` z`-IK^w$AW*I!5}JSjqE%KFdp3j7l|IU8uL0@2l~ITO0- z6roXiPLKAF2b-t)LiDG74=cvg#&OC#W3rhwo;Br6ndeNtoa6H*<6PtUP!>#~TH-}h zS#|gvWSN&tx$5wWJQ82!IbfCb-?VL{w4K1M|!mIc22h zsh%~WbY1D&y|ghJTFHhBP800?L#D+YAsfbB4-4IpJ=c=+wly;&BQ~3OMXQ$5%5S)` z7p6DHi&UhGR2eiov=O(8*(!|k(!M)1SwTa*2DaKkS5S$hh9yIqVl@2oNCFwXO^Vv9manF$&Cm( literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailReply.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..257b3c591c6a69c2fb7be69c444dca3ec7a2421f GIT binary patch literal 1013 zcmcIiJ8#oa6#i_;tyJ|Pq&9RYlFLF61*8HC3sM55DWQp+NOZu1&z-_q*qH&kHaBnC}2X|1mmfVvan7;^|`< zE2zUmgcuSDZt+a`doXc49VE%&}w<*RMak3yMPEosG6c4VSlt(g!zn7|ZnV_3g!%T-^= zP)V&D6Fp903Rf~+BWgv7mR}aTSfc#;sgDd_`dPYpaey4lx%N*v)hF6%P#htTYFZ%h zoCCapO(goBbwhmAW+yZ#wp6205!|D=vs$%6C(~r%J^|v7hn-RctJX!;~Ls zd&Ve;eYT?1Z(Au^Wm)byebcY^SI~6k)zuA(Ch-+H9h2$J=y!O|r_l{Gb#AnIqh{@= zJU4Vstmp%)*PZ)fI&<$i*cD=!&f^}3sL3*&d+W?B&kcA+n=S`7O?kz1%IoaUTjKAO z*Tfd?5-$-SvoA&BpQcj)2T~*6r2H3$;1D0vcZ@@fh`YqoA6O6+YviUjNM4u@l>g?IyQVC@r$5Vh08x<Ga4Q!CbA_!$cq$(>AEZ890ErLx|Ar>q_bb}D6QdjH|P`-2Co4+J&CEjS>JMZ3e z@A>=Ax#tm;h^YJ$(JcPsWxRamHNRG{lxXt(P0+l>|93&=8$YE}R3}S;I@G4Clz_g6 ze@Zp-l;I!I7>(xw-c;}YeP{38k3P&kO`y+wbfbRtN{K$kHQ@YydqDT8b#dI# z%B7FP*z({1C8EdHTdq)ECAW$ISj z^j>WINvac<>6T41bH`?trfs_{4yK7gn`)cr!_HfeQr)zb%p`HsZ0NT2PG@ndy^T6} zFfJQbiDjEwae%>* zgBXVZ>Zo&qcnn;_It6di?8y3<{bmNL=w=5q!Ro|ldk1cbV)0o|L`}17Z;ul^AUR0H znhx|)oWiT(Y%FH=u(F6Ki!|*djtrz>?;-WYXB&DuPN1&t>N?_)SnG%Es#Pkx{T+v~ z(9^1CwYFI>hX@ldk6|8Mox|p&WwCvZAn1lz7vAf;&P65xZxLE(_%b}GTaTKy^~#6> zg{A{vYX^_VUY7Q7)PteE+hG7fjr16{cTyef{lM-D9HC5~XG0g+^-2-NAP{Yt6ebO9=8z6=#(N-Mz;v7jlhyQr^Bmt+J8>J} zl#sMdVh%m{s;_sT>viKFnku^#5Xm>gT&`NKl<0%V#>c5c@;s4&Pnga@?@8FmMO5{^ zuI6HDhOE8uq=HSG>;uld4m8Pe-ZNQOZ&hLTeiaa}?%{z5^+DjVoU6u>Bta&d z0`ZZ_;sijr(JxQA4N<3Sblbj7lMvwC z>5G&Ym?*^e3|GpLl7?Ld!bLFD?-ya%)pkCdggDWrld_8)s?D>t&~e&~!IBDCn)VR5 zD*~3;k*w>Ng`vDd*^Up9cwOCc8Ds#`k~nQtFvE`HLf$K~I(wA3QA1d_)G-I}jkHVb zL)35NBO(a1dvyY3tf&%jM86L86|zapiHx9|WrBHHMuP&5A ziAYd@imBc~g;!VwMd0zQqYp0Ev>Z4Ks!ZFofFrWPhc%y-L+GsLqCC5#PSH)wuI00N0py7lHBEOh z@%ds|QM!5RH)vSK=rKJm+6fG)DTQXIxK`CvXf$@!bU3)Qr)I+LrCl{E_i{M6*-&S2 z-&K{cTW_d2;hC5FDY-8Q=c3$Chs&4VR74W8Lhr*Z!p&EdyaNeV`-sCc8f z%Jc82Su`wP1|yI@3`I#1gD#6t(34b}q5esRHl}wlC%W z1EHr_?(_qpPt$)u|BmUg{qH`Pf8dNa+}32hb9iTKa@)Js)>PiH20L4~0o~HEK5~9m zx@)d`)=vq2F-aDMaP5FLJloROY|<{*t>ra1$(>)_;kL-?S8;v^AKQCYU$+woD*J2+}1 b6P&MHi;r*X1L+?^cZN6U?UkGSS?d1}0b3kS literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/esES/Resource.Frk/MailTruncate.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1d91b76157a2c4a3adb4e06fb4a8f89baa82c243 GIT binary patch literal 1083 zcmah|O=}ZD7=E)gT`3AxAtLnfB0?>cP@@&e!9!#GXj4;?#h!YY?oN~FW_B|(8#GYy z=E-v}J@qg67sNl}!Ha*ulRlHAO%sT|%gp;ZAN#z|5aozy;USTSk-G|Kjx6tu6CUNi z--7MUDg1w!iT2OvI_*-26iM16jroX*&;}#K-V38`_J4o<@#=*e|Jqg?9X6WPXSu~c zkV)mIbYjo7R{S27=$O{%S`KKqk19fiG8Wn`TJ;rOp__;YI#Z$0+?C3Rw~|H7CQGFj z+Q_miE!5MnlPGC8l5B_7QQ{Kx(N8E(_h`q#4e?8x8;rd~Xr-2hHaDi+2OHCVX~usv z<3FD9pUn6;@hL#PL8tU({EO}qvEO%>8A{&o+90U;%GS1Oeqw9Qz)$T~@Y?UW88yF} z9kv~*BzLp0otSeR3`@l_=EH1oqPVK87LizI3wZi+04R(+M?-Ubd0m(Z6(ww?Y6-;- zk`tarqR180*ucoLOf$#!vv(8=dVOXp`Pgjo{XSkP1PLl}vRwi_W zo{oN@jr+7^92FfT1wTd4j%oE0G3q-=Og|a#VB6mRhVTlVQGSS3j!F(i#I_x#&~F@` z(1-SUV;5T4X3&5h;0%a&$IT$(nD($0Eg{6ic$e-%yQ2v_!b8P#adwQZ68#+7eX8ST zYu-Wiy;py?IAZYa5oIk}CXEp-aP|mS#kQwzqLrAm8DMuVKA`6O4k2qdH8 JGQX5@`WJN5?!*89 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailEdit.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailList.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailMessage.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailNewMsg.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailOptions.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailPreferences.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailReply.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailSync.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/MailTruncate.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..fd20bf132799b3a85ae526b827d9503739e30b78 GIT binary patch literal 1787 zcmZuyTW=dh6h5vq0aw|ib*oBT1QUAUq9{RtxU>Y?ID}Sl8WTGd@q#AaNiywvcbT2F z5*OZ4A1onwLWs9M^MsK26TI=1M!7YYRzj5!FBK?!Gj^ObVWZvi`I~RfoHKLIgeXHq z>@-mq-prQwwRcvAzMAzs?`*8aTutyq&eddS__ff;+(hXHFVD*$NCvOUARdbXU+O?= znJmhMc!uaosZ^XOm3cp0QXb9^JwLzm=4Cp*{ucEV{;EqZcwGdk1H$^Xxu- zMMKm}y_sE0xF^qcz>Xhbx4;e`Vb{U-A7an5RVefHM%!cdsz{Bb>yfUBK+>2{Gcb4> zbPUV?NKrd#P;7}kYEL8TV@sw|DY9i#94WFDQ<|=@d-xXFswtK$Y|ZiOrZDmu+i>{4 z!8YkNaZ?vXunwFBwL~P=_HV6*LSOC9^d6fneZq!Dhd-`R&${+sg?u0 z5QVc!*QDlw;DM}KmP>PpS9L8^5``SE;ju)@A!<)1gYd=cQJP?G!jq=;fF(lN;Bk~{ zo}zwal88Ahh3bR`C24HgqF7WNzn#nuv~}>3s=5eGGU$1C`KQ)5GTYLMWB3{#uG z_14M8%1XL9+tf0wB2-^s6EO$FkozRvbX){VJ*0c(wo?; zgbNtcEgkfW9*nma407;OvM7kMAp)VVQ_WZl; zCu46E&eo`pUP571?BqdSwa4${Jd{11i&jW4vQ3ov2N3;VakMn2*#>S8PCGNMzXO(PVN@zcG!0Q=;f*mdW_f1Wx6 z`uWTlLA30lQ|q4fan{u1vu`{$=7u0iL^U|H0;M zXTrXK+o$v3zRBXpvzEZ+avbJ8hj$3KGfg_YMdxAN1;EzbC2`yFYxFizcG}@hLYmoz z!yEK5@J|je(=^R!~a@*Y;wH2AW+3Yu5)rH+ULwiWq_X4i#>b9loWn;q)@Q$6XgEnr`zYe hc*ILzdqkm(iz+d_qq23Vqple{6TLQnk=uV={{hNj_)q`< literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailEdit.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailEdit.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..8947442b585069b0b1a6558f2f140fc0259ba099 GIT binary patch literal 783 zcmb7CPiqrF6n|+l2`w!|S&}qbeC)y6L!e%BuxhhgDyg8ms25FRc0xzDyJa#PjkXuP zdFa7||4zO53B)fT_yPPF;>n{R)b}P!K?;Ji?EC#@e*6B++XqkpfSDpdf!}#$dOd|I z!R<@FiscAf2A4zcUbu{{A+|>7J`Z+e9CwtK1C#2>fqN@c=Hpk~-^V~23{2l-BV1j< zPZ-H@JIUgBdtsKA_f!rtBPl|!$3B$kz-7ftq6J1j)p#QPtA^7>a6H^Ja(C2r|Em(Z z{5i1*m*F+6z&v%}m>&prnvJC??-3}yTKipoM$&os0%eX&_iuA%I(uOJ z+gpT>xCX*;p7RCQNBhIiTX)w9KTuOo7Im;fn+tp(n%ri%VtEbD5Z<@kp?m-@Ew95x z!f%!@QF{TtTkah5eSR{(TDANa^Kv&$A7^`|PMXM4Ad_g$i)bEvCF5w;(mP5%nF|Iw cjbnV+*NqL`9}bmK80@GaO->T2L7&F?4-7i5QUCw| literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailList.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailList.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..14cdf19868206a2236fc734c9d8e24d439aa173f GIT binary patch literal 887 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 A82|tP literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailNewMsg.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..57322e58f21e6588d22d6473fd33ef6a0769162a GIT binary patch literal 781 zcmbVJO=}ZT6g^{Z9n=U_3awxDA%Y+hLE~0xQZ11ri%b@}oTe{2FwV%#OQnJv7rJwy zpt$S03u*JwuGEEpz@H$v^EVXqyqOq-h=_N1_nvp}oO9p14{!h+;Ih#ni<7XES$)t<0%ekp8 zv(31-uKk{Rpwra9r>)E>>2oNrZ~;Y!hqE7UM(gp0PV({qmsvhPRlX5Ly)Z8?$`E&d zV=uojeh{XmQppOOlo9=Lyurp~gfr}T0#BHqlU=-J)t#zZmf$&FGv2lvY+`f5g=_Lb9?MhvCjaRM9o>}o~`4j$nf44k;=h8#!oW?uMSQX+c zmdn#!w`}fLEuS&U74X>HYBjijCOhjzT2tH7mY|?g=AyY3@gQ1?wn?i+6H}7)2S^Xo?9^`E>@KsDnuhd; zJ$lH=Q}J5=0E6I35O4kgQauU1c=8~4@(|yf#87L|S$4i}-n@C=)_UY>uY-u-Tph`Utk)ZTBphJ{q!;JDU7%X{csZ``1mW-^A4$f zM72+-Hge3_zf7cNS^rQQF=`C*5P*Yfm97#)`wvw5+&aLZr`Q%Sn1k~$Xtg^Z6mFB+ zS+)%qkL=9&e$|tTw#V5fBp?mLFl@DPZOtq%yX6(BxFfVAk5SfuD=>;|hys%d-~!u# zDHy}QGvc%4Jy#2xj;m!=L1AfCYT8?X7|g>9xYx}JO{~UtI>&H6!D`yJbF8j&nH+2A zg}XLe$2rF~bgpExO`Xj=U|Tw4-(lM{V~)u^o=XRzb_1W=%Ee?up*W?$H7>a)Bi{6y z73u4UOP?P394crO%}a?6szO49K%BQiZV%?kSds3kytN0 z*%PdReLV7d63?dg`zi7{_zp=^aSMvn1+=YFmk`&ePl!9zBgCe@QOqOm>XKbVeEB+m zKa2Q^dW-m$I*RxK?`dz~&5YyX3>okm4j^1LybdXR%gpcw<^k}~@D04E0HNVExP-WC z_zql0{6>6wq>We9`f2Pn;<0hV*A2f+JXUzzmlb|lddbpC@Wk}7zZ59Vm(~Xi7L+5^ VAv$RMx>X!Ai%u`2Nj@*V@E1442&(`9 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/frFR/Resource.Frk/MailPreferences.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..e2b69ec73e12aa4bfe064c4d08c85bd85dd4821b GIT binary patch literal 1329 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailEdit.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailList.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailMessage.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailNewMsg.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailOptions.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailPreferences.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailReply.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailSync.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/MailTruncate.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..92366c44ff931a7171e26416a76d6bba51475e28 GIT binary patch literal 1680 zcmd5+Pi&M$6o1QhY$a@4pdmp#yeJ@tO+`pdB*xg?iV9!5Yr7`IU}V^xE)%CS>-Wvq zgmUG;RXup|P(!$JS8v9XiAFsbV+el=EiHdEF~+m;H`8smQo`B!{>*QFZ|2Q=Z{8cC z0ul9nK~%(7_#K088>`n7TWh?rK7L{^zPi?xpQb(Ee+GQ|iSz$Y!ad>v3HpHc(vAY6 z5gw|Y3>NMa4{1Ln2R2E@tj&#)LA*=cr86{2gEWXG>ur~~5B9_sb`|WaTi7MA{0KWJ z?$F!x91N*eCyxca`@{+r>9xQ(JEPKB$wqmfr!tC%#WKB4hao<$A&cB@ag&bH2)KHx zU8?=1NbeQ*XeT9`HEBDiT@*eqZqxg;n+|n-DUKO0Y0^QbQB;vx7X9uMiPuu84 z`kWlJg`lB{>*CJ{!f#02@Qp?yZu+E>h+Dq?ZXy=(Z;0DInQn+XkzexF$|mdn2rFK)~%w#*H<`E>^k$> zSrV`&XiF>mE_#Mu%=aoc^LMrDYMy-&8alK z#8Bgv&Anu+dS-K$H=A%l&*{-p=?d4ON6&U#=4Gl_8}=&mj#~<8$1~x8%iKJt^Ol16 zqa4COTlA^qmc}cMYr8Ug*KBrGbaIo0&3OX*!_Ta#5V@eBo+>1ivh#{t(!hGiYin_O zjJw^)JRnL%3kQEWGz03{!VwyXxlo`JAwN(dXG6A7AAJ(?3v+%9Ifwq5KRz{qekJ51 z`oBUJqW{NFH>R+|c3c6m^)DPagQ72D@C@)pRQPt_SAYjl*CDHF{R{iQ5v#Zqh!pq* zu|!9JF94rH<-QF3F|1rh&4#MF4E}Ev=$pXbV(kwo%y)o)1>c8id=K~!;Ga=b9|l{n zc39k^3&1adzbdZNMPS%)(2E=NDe#xze?y*M2L1{7J5=3O;AQBdZMBn6Ri$kz^YpZC zTZwBz4ToGu>hQQS8V7ZL$2u{kWUE-IR>SunvbT7kdxM=#-WK=q6*tbdShOxOC003l1fW9r^vfg zIxvZP)gLRK$YVXpCkT)u#gR!l)Y&wab2q{a-DTGpGgm}~8uW%P(>gYB;$CWETnUb< z!lyGJFVgxS%8_H8huX0fQT^{|CzmDK<}!m*C3NxD z>ASnmJbmZhqVe@=1ot+5B;oR5CPXn1?d;_fr`~+G-BQIXH?w<)GDNiSi74a8>O0w1+%+veY}tBK zrmDe`V_jECs(9B}R|)9ra) zE#|o+Q%;P7y_GarC+wPvEAl|G#JbpMSe2$+GG?F6)R`Wty57}bGR;${{*!#Q_&+&O z{4Fu06KJ9vnMu%?*2Nh)^ybyfu(VlVX{~M>0&1mo?IgX4^?^>L(^N#WbX$8^GQFPi zQ7hsc366;AdS){HsM0dX0J$$NXbsM1aAKGLsBBVarT5+wBh0r!t2?K34O>oN-NGQC zlevdPpTY>9oann+EfND4l_GKBO0|j@y3LO@af&$-XD+JN#CfofTn&51uDTH+_Kq0S zH=KIq(y2b>@+OD{UQfjUj2FQ5351gZ$I3a4n}y&xI2mgnu_%VZ}zlut|ykK?bE|DNY6;<(8eK&L^@H??$bJ)C#T~N01m}??dmy*~+NCun*x^%a@i@?# zuM$oT<(Hb&2TjnyjX<9%=%&9t zP!8HUaMiTynX~1CMEf+%Iis^_J;5L)~B^<7wZG7MEKM-%r$Qt!TQj5g4ad j*M2NnuhV?5X0)4_(KT1M&SmH))WvqMM8(sOPZ|3c&=%dD literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..d87501349214b5f2443a905eb2c19c5f2d487296 GIT binary patch literal 19252 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 DHXF%s literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailNewMsg.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1fc83e1a20950b4f403a4485dd214591e5b423ff GIT binary patch literal 780 zcmd^6%SyvQ6us5a)EB69(W+<`Rz$F%Ah;52#ZpOwm@eFoZCVFn0?GIUx4Lm7g5oX< zH*Unff5Z=P?N8{LDB6E;hMYNf&fJ^1XNY1%6#E3=i;ZFZZ)4m%_D($g$PNNts|io_ zpJEN_qdS_V(HI<3lM3#M;7XikO-e(Y?-4g$_tgE{V&ZAXK>TsXl{5vUs?ki%Bl_Z&w*;C?di f^J-N{p<9QdD)oX}5oIntfBdJCp7U)kh39?&z-4h9 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailOptions.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..48657f309afa7c2e6b7ca32a4af85ffbc0200286 GIT binary patch literal 1037 zcmd^7%}x_h6h1AS3WO5CpBQCv7Y5=2*ccPp7>k+)rw*axU*f`n-qah1naT8m?NFd` z;R6tN0y|>D1Na6$fJ-+%iAnv=#iTXy4ZM??^UZhenK|EgE>VGqirh<$(Jh)Rzzw;`e}V+v}Ge4Ah5XU=F6iRxI4``GYXo{x9L@Lyhmd!%d2(8Os z<($UpGCt^M4HJhd)!B+G^wZoVu~7}9c1>$1j7*+~LTO3U40owQvp{9njU(rIpYDQO zbZ59K#CW37&@CcoL#)+Ul1(4yy;u-M1_38m1*wxBQKD3qKDfi@ws!wOiTS#2{S`B15%|lv5s!B7nZIn^ly44Ds zO`}qCqB6aOe$7(3e5UF;(xN)dv>Nix6%TwtGP*ET{4(*bNmN4*KD&gr#Q(t|F7;0v z%SBLg^pnP1=LK35HQ+WyEn+O%5pz+D_)#BG@OR*8 zZqpj@59|prr58}O2>x}^e^*)!<1HPH*WV`Z#cF-2o@7>Sb|xL;rxq@@CLD>O=gb;*W6g+v58ATtz3;tO?|ZMRh$14I z^F$SV(Nn2!n_%2z`MM7}Z~3I21mj)HJAI<*3!6&kgB%-|N+q|qdNO!vRpFAIm4$Pd zpF7!9j!je%{0x9~mO~MON_M8&h2MueCYPyC3ZBVi<}lJSHTkYpcXTR^lP2WSXJ%rY zvU2RRsS0wW6IJ9Im`uD2%D5b9%2@^S?fQQ?Ci$}JV5@K zxIznbkKUrg(f;hE&1(SY9nq%KK;Aom)SWA=RSdr?nlw)r;4;+6L8cl2vz@9{#^>oF zJ%If4TiMr{RFjD*+(c)(EDrdXL~#Yc$4XTD^$-#nb2JAM+Q_NSbB=)0+%j-IE0vKq z3uTSWjm%Iv?^2Kh?rq3Qi{O()VL61~Eo`oMsg_0`Ch&4)wzo_k6bdhsOshR~`hTlw znQN;V;6O+yK~*_1c0mg=kGje>b6$yKW_?C9ztFYxs z(Sl{29+x#l=~)SfecqBUpAl7PiJs7d7p(yx*2LAhzg}2W#ab8+d!iAVjgLe#^cp?U z3hiD?TnUZgb&jP!BF(s9+9g3Oe0I}_B6*`66@5ZQ`9dP zndKvR9P#*w=#nbY!%=yD7?~GcIPtFNgVkvOeb2Ss#op9tqY34%VE^CA8hpUiEHr9o<0iw<+!GQ0+XA#7@+@RNvz>0 zQ1lJ-zoBoJFuns{5*=#8{^Pjz*>Q1|KEYVwLyz{+&&mSUdV;###rP=fFRU$<`u9tl zE`0_42XXE04N))k9oRgtY+e(%MiOn`7?_Dup~&=`FGn~kx5Mi4e+^4;z*|OHKUsX; z0 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailReply.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..d3ae364f617b64c4690b711a2738d174905fa577 GIT binary patch literal 944 zcmaJ=&ubGw6n^QC3DGuUX{y*#=3r|o2qGv%L21$is@p{4TEvS?GLv@fbSBKslD6R0 zgIBK}da%FKn@0~GM0)VpKgc)RkXjLU*_m(N_vX#_-kSwT0l>f-K+1n*t&O7%L0cx) zoJvjIs-T=X)?kqstBaNu(d;U%NTGO?sT9WlGSPgcFgM*dhBnqs<^-n;rWvmb?QjqM z51s7Kl(}?t$#9Xa3&!sltu~Y8NItB;s+Q)%^1>XwT#-u9WhpwsPL{1TmIj7#saI$% zDAPbTEVEKXAH!7{QQkYBc34EMXe*iM!sI7N7lxqK$oe8eYEd^;%q4Xqa)uf!SEOc2cN08@jWO9nA7;GP-jYU3iWcjs$R$#iVE~@MXL#GwkFMm4-_Uz9WXFYJKz3bF z49K2)UaXS+WIRa5Lsu%kCP&HGb;Ynsj{S(cuaP}?1Xm#sqdxYMbPi=FIgOKj;7DCR zqr%uZ>Cc-W2k;*4Q)l)?ZIrWKrmxcZRZDNrp5|LedtL%MKJ`M8Yk1i> zYgef+;k@PLVzM8wX~~n`o*BY64dUVkV&9WXhzp3nV$CUHk>0-f3oH5n@h8OJ$PPS4 z+(n-gER&D_1J!I`s&7!`H2QqU+}o*nSaH#BG`4cX w<$8_1XidK~7XPcw(K_C|O|%6rb>)o1n-dAmg&paynNsPBu^ndlZ_D`cCIA2c literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailSync.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..57fe7080be8f5419defadc9c17b7bc6fa298892d GIT binary patch literal 3661 zcmai1O>7&-6&^~Khx(y^6j_$#pFFFG71uP=zZ|M0KxNCel+dCeGC)zF1xCveHO_K} z*&Q;LFZn?NB!v+NIR-u?mmHGzRG_CI$gx0^06rB(d+5o?A-4oYfC5#&H@jR?wVRUQ z^6|}^_xsJ8MHbI!VawsEBUq z*jCDGk<)RY!;q4W3QW}c9^v!rux4YJ=lwr<^2yY!3PbynZgLnZ^Xy#iSmqFI!#THO z5(GahPm3{eTbvP7g}wAGYR_RooRnw8d8|A(w6YvU-7r+VJS&fjY4IyDAxgrh5xnIk zUYV08q4K6U;aB#UC2FmfUpp?DYsBH9T`S5jotBS^2JBscJt*Y2Xv8)ORHag39cB55 z7!^;6LwNJ6u&IM?N5_gfHgR~y#>U2}*mwuUaXA4$rlDx9?Ims*8yRow4LOaar=epF z^-L1gY8i@iGoD6+_J&nRcg*d94vd9jP_hNZ(r z)#-#LP;3t?k&P(d7iT^@<74_rPG*kOy8|=WudvrrVna(MGvp(5h1$8)kfKuRE>}B_ zP0tS5zgWsVs8FNJJBHMhVgsbM*aS!YUk*1-mQl^7Py)o_y*2V^=IsL-`vH~`69v5G z)-9xm9I9hND)kcx%;VnOP%otZ#jc8A zDz9Ttr;#NApb)SZ$xv>aT@(;Xy3wL#@T5h`Y*eTUZpuorM?Ira#H^x#0}hy`RL114 z`E-=&stMs0XsZuHpG!Da%V7ra%`e;mwPsGw!+%!mNg7$+(}a3hERWrY&={dV>FB_0o4}&k zt%ZFiHv~eH#3`cKv=lwQT&5LOCY*T$XwPRU1QeW8P{TdYHUU*1Bfix@7i)m^EPS?u zn#VeVI3n#R)LhfTHG?x~=sF+u1+FeU@TON3-C^t|X3Icuo9n@m4h5I(t);tRp`I&* zDn_jBA)b9YA@QKCEW9$~J26N=TV)0rkzryKwDm!W%L0gH^fLCc02cW0QJ_$LB#f@) zRtD_M2uk`xs^$r}g5)yFYU^k$DcIAZLU-E5ni@Ar+e8_>o7$wlnN(8_^8ejJDb)zP zb9)=$GS$NnK;j(ZFHni^oOcM{nh%e1DE}aMjvePM@6c}&2*_mqqt6Z>!TeydPkA@VIt4aqfHgt& zxP9TL@4rKVa4S#S?@&uYDwdmMTR`N49i@zh*Y79;<7mHK+uMiB2h_qB+$R9D@hRPR zJ?-oF==sSD&UPx?HpNjnC04~zP$hqbG7rpSxH_L@W`0?ViY$ROE&OedrICK44Sin` z{hzV#F05u%&WeNB^BVuaYh=y0k{sn3$boSqa%A<7!0;mW9*|S8&)>(ORfrjRNJz0L z=2E|XM+IA)kcS0<{{;AZ1+m6R@pa+FWAcdDz~Y&7F>Q9dFek@_#lm8`kY}FPJ`p2$ z-xYVWAp#W~3>vtV@mm2GG&Rwmp$P=EP_w-3mpYrr+PoMG6NBxuB zwfY)7T#$3(EGDm>FD8aIl+=GPFb!S{@)V?QK3t0B{cAzaL&`i{Dpz(uyo0w8M{4`8 zWU$!gV1OPEzx-;0r?XRqFU2H#jd@{?8fc_`=A?7sX zzVI^WS1<)N0RD^P;h%qj)AnoN=N|Y1hwKLE``9}JY`+2eU!dOyzTXw12>CBQlQZJ? zpm#yPBhT)k4#ig?a~tUY6X>_VZvyf6Kz{)GTLAnYpg#ruBVhV#(0>6vBa7lY(BEM1 z5jj^F6Jq=i@Mlh*DilHg6*4PwzJL=pz6bhiNrh?r&3O!TSr*yu1pN8@TY0W<0kOOX z{@+JxFC4s#zN^F0hFuz~ceidVja`jxd#TunyBNfsF0JBzrj2yc-kq%TD2l%+_(L)2 zXEZ*6I-X$q`3QfHnnllE4#TOs)-0Q_@Vsvvnx3Fd?P8g>aY0$kfG@PJNv6{94E1>Pki$_5eqIfCHbq7OU-TgAua6W40Zp5x#Jo Qji>zh($ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/itIT/Resource.Frk/MailTruncate.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..4cbc9208d8e8499a73ce57e477b53b3e74b5d90e GIT binary patch literal 1057 zcmY*ZJ#SMn6m?pPQPlxDw0sR$Ra;?CBE(PXScyNu$iQ(LrFo7L-;ZNo``qI&R$+`y-eYV6-^#6y)H!vPJfp1eff|wo z}6(~_Ur4%g0U(ovrFY+7W}1WK(5LK#mr zWllT=OSbVzroq!$N2MLg#Ca@ei$JzTO%Y_3-g`;=O%+yY|8tPe2z|A>vJ%%9c|?)M zei1LK^SiaM85i-kTnQdbVtwl@|H|z$R#e&3HlM2eD_oCfamYO!VTM=`&p7)eBikgbT02QgQ zF~!cfMd3wu5L#|h8FPV$zY#$RCm9D{cej~gWTpm){>LCTPDPIc{| z*-9Eo2F-WYs}Vb^1ScE9vAlIj{rdHNrxDkrYcMGO9#}%2r}5N8VW^yp(z(S6HZof!}7!6{pE|57QzqNFE%wGp~BW9 zJ&3)DWMTdgiNf3nFOLo}n{b>QVeUaL)iL_f+cn#1+sVUc!|E@n~C+(AMq5As^%Q fJV1qhdbb04rO0{YhHHkoxlzDgfw$-t{tW&DtY|G_ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailDetails.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailEdit.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailEdit.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailList.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailList.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailMessage.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailMisc.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailNewMsg.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailOptions.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailPreferences.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailReply.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailSync.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/MailTruncate.rsrc new file mode 100644 index 0000000..e69de29 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailDetails.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailDetails.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..af1babce8726c2fdde3547eeb371402ee40930bc GIT binary patch literal 1498 zcmZvcYiLtR6vxj^GBuGleX$G0*Y&x(AM9=myDMdVG>N5}#7YyzCAQsE@0KfRQj%*~ zm1Ub5R8U&eT(N!-KZt^FP+9s##06Ql5{3QbuJn<e00{uhe*>8Ck^b87({EO5*O#X)E33+{l{hv@CRhXVia!dwEJrU}cZ>p zS7P2tFu~_=1tNTq2n=M9EaYMqlOfIT_mE-Dh=f@cKJ3ZBy({(WSg_n5;%(qt5E1@=u)4xbu%&D|7|XCTRaU?*en6>Pxe zIh@WKu9TB0*bF;R>3NgzCZ8wUgwD+`KM#7l_ecHRqHXcR!Y6;* zZ9B)`u3d}LYN;Bmn$O>eyq6a(+Jn5D(Y9)Jjb5~2Ueah!@^VIdh8HVXAj!)W%{5fFNLzlKF+o*gvPX?+X1t1p&Pe!sHQFvW zD#4>RpV}4+Q({lQBqBS0-b^iOrP)@X2>Dr|FGUS+^tBRjWh~hlqMPSJVyT zf^Cc7js-Q96x@3>sOFzxcFBwLzutG5`2AK~VVUZ3q9fdy?udcDejhMWa+xFko1tRrZNAfVZxoz5QFCuX!I0UzQKsaUBZiLBz^v&@DJxsRq`78_AGub2?u+`}-3))lpITmv4pks&aSv5^N4zmE+ zKD7B)`0Q2@_WJhAIS^z)h``$-{CTj5FU4U01?7vhlg;6@Uy6V*dnzG@u$R}k-8M|ZQ@^o zvzAt^>b4$MYkJiVr;V~+((I&jDNjlmWmc zM!U~$jg~Zv{j%GFFM9%|=<0yhn)G%;;_lVDP%M=;Qj=WIOlC&KpjVGv2*p#DHN?4s z;mB~`Y2&PkDu;v?|0fe=@cPW}4`sxx77tLB%-aLeZ`w8QyLz1+wy*RAoS&V68w%7{ zZ@P7Lt;2GeTG(zqW^}Re)QJG9WAHxGNP*>TLCp$ZP zF*_&XXl6TT-}mwIrTG`Su8Z(-VuaJ`M}WNLxsNx$VEOan2C`$> zyIGzkPWK%oB|l*t@{+p+U*QpD5*`!;kRB0qkdE(_Y4QHy5ZTv7@uY7HDrmunf*7*b z1X-jvSiW+ks9i$n2nnjCUwWuXRpgRerxy4K2W8GKnn|xnT%_uOw-WE*27fa5T3PPym8{9)S^`mAzjg^2S5&75JEPF*q8w8AMCXgyQg*h5-d3z%UNh5 zRV{>8Js=uVDNQT&K&z^XT2-woxl%6$Zc#5qRSy-SRS{989^l9U37PNBI*^J3r_O3; zzBk{S_vX#cTOy5!M3TslSG#?h0*U1D6cKBUb&Pd1y3^PP?v;@`ZfjgqgJ{(1Bp_Eopk-hw;b1c&O)lYgf`g(hS=a-i#gXIatod zqn%DXO4exfJwc)Mw(%PLhsTdXABrvXf29vYuj@w4={cy67}199%zXasG|{lp+l%~X zcJ6wcG<{DoyFW^gzMkEWc+6Yy{TNyYeT#gvy{FDdhf*{DSOuH0Y#?8>i8e{$A4MV>yTFzK|YZ9kpM>@~Wk>gkCvQPqFDgB`+j zEz1-c*BmoN)}3iqMUM3uH)SS8-Yq0dQEF)VmM0W9B+8u8K3*AJh`OnaKKy6-rs7`_6LgtY zC`dchzRD$h9#NrH5PjPSzaqZGqa=vuWnU*m|LMOVGduw&)esKxPm2rm$pv1Q<2;^d z96-G|w3ixDVDASv*h7_L?C15-;Yj?csJ)eRZTwxLXt(d#ug>wm=lRW9-is<@u*go; z;l+6#L7s60L{+fLGc2Z{LX{a1CjDNLT$1 zJf^xIHlz9+w&JGps*R>q_rtchpLKdCcQRpN!N1hqfPIMD`Ba3-e-uMGa1Z-oB8*LX z6*d)Y|Gk0x@H+6%?4P6qu$znvbjZsTu@=REhuB}F1TZ-GOLPjj!njO0v38#E1Wf{e z%(y}l_&df~Y5{Kq+jsAvF7Ffhn!tacRx9YPLEugJ(U<-R@QuF2+&RZJ?W%0_6{cEq zjfPRRTcPg%)F{>ETQ6-5Qgzv=1(LEMT`7`tj_k?HW@9l>bmpZ~6US?Hx3}ojm=EPz l^1RWF3}xhkyEOJFJo^9u literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1bedba7bfbbf58f80d89dd1b36bf2ebf50d9f132 GIT binary patch literal 19052 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 Wbf12Y(fB0a*`ZWisp-yoyZ#r+Zjh${ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailNewMsg.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailNewMsg.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..dd5a9d131169cb5092b8b4ef5766224c3931c788 GIT binary patch literal 769 zcmY*XO=uHA6#gciCfY`?Yl`3vnAZ10v|5 z6cpM>BZBqk5^o-g*z^xtkRlYMi1a2cc=P0;C-GES-=q=iTjqP;dvE6Ld@}cM!J#6dIO;`u-*qu=>t5&Z#ufeia&c|;L7QkVddiHy;xyFbqY=3_f_z~{hV)9_HKM~5BqI* z$9-{gK5Vo`*6L{n5UK8_jIun5BjfLZx*xT`$CpGh8RZob zNXGec6<4abDw2UHUlV#T%GX6mAE6Z-kMW#*3tz)aG{cAc|N2tCov#u$W8ql79v-ye zA>~_nh4?dcz|ZJr!!(&zCG_2ODW{_avu&wx}%aYSk*pOVUHk7;=(6hD$@ zC5>(TTIB0ELp07d1A_ElAf95IK~9=46Ss-?k-|aZMH(PQ!{pvp`3gqKZ&&#ebn@RN zZ;F|Pf-zw#LB}+NHD$Mk93z{xgr(?{R#qq@_PCWX#FW#ZXPl{APDvZiN%>5bs8tYL ZH|=q6(6BRR&Npld$`=~x0V}n(e*pCXyfy#; literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailOptions.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..875937e1e8f291151d6a357e1bf30d76beb62597 GIT binary patch literal 1026 zcmZuwT}V@57=F+4%PCIOA`C=NMr480y70n=qnR>wI~(q}6g70ZQW|Gto=WHZ*>@tL zzfDEE36UU4>#B%>^y5`v-4{VdRA6-xyYNDySnv03LyW$0zUMj5`*WUe?>PVh0O(c$ z1a?`gDui6K3A&ayZ9hx&$?MWN>5}9Iux<+aIwRy4*n0|tb z(rQ^Xs>j=+OtB6KbpfbK{qh1Q9{!dcJw_H02Lz|+ESD>-$?eLfjI$1^yk)zVL5 znW!YU%a!ETBF}EF5TpwLSNT)Jq6yE-j5t9DR=5jp0q?m2WSG#DN8I&fM3rS538^-V zjf|?!HX8}!E|W3U=90;{T5oA56RJg)$RyjbCX0m07~&z^YoG`!)7|#W{+d(aRy^vD z`QT=B{u$E?Nf=H-Au>b806@W9*X<>(NxQ7MwJB|u*O!oS$bzGg5Bc1uz`D@{%jEF` zWC92@z!AtxodvTTEi819OhWZPk@%yH7w=hc9|=J=6k*BS8htnYmM+yYdEvg;nGw20 zx-NFI$019^HfFxjIQ>pvMNY@u^eMfkMIxQr4Z2J>qf>O98KO_<5Bh<|BNl@J8|^sl z7PTI&QS)e$sEsnv+Gzq0I!o6xJ=5J1(|2Na?Eah=uk7xM2HAhG^XBH5zigG3qErGO zL9aHp+L1T2X(77Vq!2x9ZitHNl3Ni&Y_f>g*lZDJ*enqj_#6dTA;Wl=USt#uNLfAL zT#FI9I1j^N#0cjU&Z4v89P{TjG6F`_=D8k%Q>Zh`fK#kTSmAsEn9tXoPvW}>@RjjA z*MR?unEudmUH+gdI)eS);Q#5a>};Ox8Oh--`g>Kc&T(;XeXr8z^%Zf=pZb1lMXT2r F_zMSU9Ekt` literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailPreferences.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..bd551df764620d4e42cf092c2243d73bff7c10b4 GIT binary patch literal 1241 zcmah|O-vI}5S}gglq~;5qlqyaC2G9+6ApOk&r(__*w88@1Y(gbZc+-V4?{GX_AM%c z6tJiqj5iY{#*0A?{v3=RYF0fG4O}!KYBV8UHK{X?3gzTxJKwkS&CHwk<`qBzfTBGB z4*V(4a)l2n0A}py5rE>QRBi^Yh|+`s=b{B(N&ACTkVrcE0yZB#-(tOxlyQw zawwObDr?%r&&j*#dm=m5KjRe(;+yPm2Wx;Wa2a-iJOJ7QoMV0B=OA0xB4$dXt{xu@?;wa6tF z#G-gD?0i$%^ux^Kj9+ABBXiT2GJnJq@qI0)tPGpo{O?e!zYN#Yo!G7H2bB&Vc@G^w zVtl@(-Gg|6MuT{jhKYEShr(@$_h@j4b2L)Kr`+4tg7``fPJ#C{cKlwUG2_C&m@6mm znOZYy%Nq)?O|7{x|1N%>$Bq@#=%(BChI2G%^(9EfF(T z$g6@0BWfg!_!;9|z2-AwgF71&k!aN9rWQJDM!DvX_nK!Sd>~OCGW+5YK9n#tZVdD4 nf=o>}Be8+Lip>%A>dAOK(r@%0t~*>;vaUH!G&4^G7mWP{8I^~l literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailReply.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..a6a52096229ae85c36d84cdfc5c89c5d48c4b0c6 GIT binary patch literal 922 zcmZuvUr19?82|33$0a&zVI+v%%t#~V2m%YkwvkTU?qr+8q>RnoVs*WD+#NGZdbkVn zCDdd&!Uv1|GyfC>CG-#x5<#!M^w4WkNca-OC~x1nw-loT=lg!=_nq^7=lh)lzyW}z z3xH$uY}kDXAa`;Yia5KwU=tdAT-04CeT2RT{klC6OG+UzB@H>%wAz<8tTTKr5Kqc- z2c;GWg+type=q_>$AQWJj+69JkQ-x(kk<=;JA9IKv&q z`*57i|84(>{#oc1285`dYb>jm!FGBW;`*lNiC*X$O>qanC+mgAV_a!VGc@PdaFxTk z+34J2oAPTer#|g_%}emImR+Qh%t0OOfqE$CP>s7Qqso}X0(;3k1Tauz2FAl9-%UCX z(l$MDVSJL&QLsP@Ou{yPyo3oQw4pT>4IKn3Sfd8M)w@t!{_Ni z9<15gDSVMD2&)iJlROL}b|KFFQM%2V&P*M*JLcH_B6o_#NU1%D^;R zN8E`GcH)g|5c{#EFybb}zH;N6^T8BNDsp<~swAwal#dTpw#$73QbObvHF-HH$0VML t*J-6!>F*b1x|6j8uM%%e?h~a7Gc#5Av?wP;wQOr0lcbVXMIDT(iQjpD^VI+V literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Localized/jpJP/Resource.Frk/MailSync.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..e9874c47bad3d737f5e9522d53c4472872e69230 GIT binary patch literal 4044 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 OsWOSyOL$rNgZ}_mKC!I; literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailEdit.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailEdit.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..0d3776432b90dad880de4d5f6ec11756ce38a973 GIT binary patch literal 746 zcmYjP&ubGw6n>j#nz%$M5|eF6!x*%rQj#htRRn8I({0$UH5+r1mNY+fHSC6UidK5? zARa|MXzHZ_4@QKZd-UKRkpG|;p->MNPa;BmZ#ER)@ZR^$dow%Vz8L@o0F+-C$baWR zHDBk}K>ggw?wA|;!Sk=}yB`Z_onOcD&Zm>hRlBuNw?)=_?A0#kuFmpI+p`@pt?f^~R6{AB1rA^FqOqS>(ofZ`^qsT~Ve`$*mZEVy86a@ZtPJ+_ zgB!EDGuX?;dmZk;sqR!}Wquc;Gg*j4<{<2(`g1q`K)8PdVD=%STv6^RtLQWyDo4F- zx$A}e87IV|wS+r@(1CY|8cRqmsPkBh)o|+c(KL%;9E10yga##P)tFEG7%aQjC`*2P z<0JZq7fBscN!SHOCu27*kuuCxM4_~dxK0`oouQ^@q#x%mu|MY#ljwkbB5pSHt0>PGV5+4uGI`$Qlq-@?3|kAt&@l~b%D58Fk1g^nCrx2-%MvrC%p=K$ne z&}QP&IV?E6*1N_RquM0z@~dE@E~A;OMMmHlDsl@MpD<*OlL27aOY++ z-`R_d>~70>xKJ4j&BwmNa5M}a&lI@wzUtK7Kj5mi0n{plq#M#hX%P?YHL1N@7FFZQ z{^(zIQC^yBfk&;TCSYjww;U!SmslMtg3+MV5r|@h9phx)fDb%Ur@KKlpHSG#S|~4L zP3a{6JSJDrJIvZp##sNU7`kDSHGpHzI2pM5?&p^an=rS*3F2nXSoiwd~V=&9M literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailMessage.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailMessage.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..0c7f7a3e1ca1a0aca69a4cac39e8ee5d3ef63e9f GIT binary patch literal 1565 zcmcIkO=whC6#m}KH5sSRkOqsXq{DNNkf=@Uq7sT2GZ}|bUf#USUy?x#Gnr>PW%_1# zd8r8qjf>JnX{m+MxY3}3ilAF@<*v&Han*uuETP@#%7qHkbIzNXfD7I9T;4g~J>R?c zo^$WH7tjExaUe{e_UAC7*3ZMUh~8Qqx?(M+H&z}r3)fQdv~iUFyKh;{XuUzm*3|D?9Ap)B()A2uw9x#=XSX>7N8w>e=<&)Pm)@EDSAFW z8LuH?T|9hV>osU)Ahh2qw(g}jMn}?a>)!C5o2!P4uC>7dJ8=iQ4-Y}tk0av7){l?9 zL}dLrV69_7JEEP|&d|s0EA9EsOET(!`K0f)b;g*@JcDknpE`u@`KQJZ2hyu@2;mpR zplhw5A=z*p=Ju*-*u=%Rb57myh25>PxP%^bVp(hP?``>5<0_Cu#Vl{t}hn)PMo z_o~8MWWil<+$yuZs`wUrqFSSU1>$OwbT@v3OvEl0t<@cXKu3}ipUl>$W+ePW+X5-L z)i(*ml!akv6#Uo0ks3=RM&qnlp6??yg&%McJJH37uuFvkqJ&?Gh;AdoOh~9$!x|S> zAj+ij`lsFLQl_8Jo67RdgsC$Ae6yl#(UX44OscG(8#h(XPvk9?7hMot6g?$+TJ((Q z5^I|KIyIJ^)IJQgbhJps6L^^kBt|tKWf(rIRao+w?)-URBg^eCH-eamaJleb{&2?<}=P@i8WSD$tOopL&zNbuQ`@2a25PLRE0pB&HA z!25jK)PKk|LH03M1=)YOB8Y!M7jT67ee{7YYCl^Rx?%^(WCa)S8QF&5qNMSo;2H3m ze+iz#G)4M};1cNmYDWZ5qL=I~!MrlGO!&gzk0@V{@bBWc@g2QK!Tee5BHtI{H>JY< z5Nv_-dL=kR7X#rvf^DwL@TZLR_QPouYtFf7Zq94e>qe#Q?b`IGYEHeX`0?2x??p%O zFmwc0TJb{=*}T8e@y4R-o8^jA*KN=F#%NEXTh5Zd+36XpREVpUeWz-qopROjK1eOn JssVln{U5OMGw=Wa literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailMisc.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailMisc.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..995486db052e4652adf45526fe92e14dd6e9e810 GIT binary patch literal 18874 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 literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailOptions.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailOptions.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..41765399b667cd79da4e9c41dcd3991aa7d370c9 GIT binary patch literal 997 zcmZuv%}*0i5T7nQs6eYUQIp1)7sYTe661jwPDqQXP%P;#>e20Xq?NMUy!RTQe9D1% zG{L9_)E>DU~ z4SkicR@QxEP=(3f*O?{1S}W8|H462V(kcj4fThOjDk?X-h}r=ri|%|jHU!h~or<4$ zK0Wz$u}cm7C`Yo0y4u9im5}hAP@^)VMeO6a1DLE(hLBKp*fw34(gI_2tvc$AFfa@ntGJY6fjZc$qCEAd^ zSug=9(S%`0Q3W?rMwYf_m`#g47=%ekLXu}qhn$xsLHso?cHjn#6H3^BW)23$j@TtX zL3SEaaLuv+12)UWu#5`aM(HsIhL4uPfgHSodp-F?iA{0X%L0gtE#rB4(KPwFyx2C& zD|xX)))TuX?|Nd-Wab`-eKY6X6$fl7^ROko3d&w5R)h z3@|jZYH(dkU!i~L?iW5@5&h$Rb(7W{vB%0~0doWj~r T_cs1hA!P%)o6<8fhqd}2!ubGw literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailPreferences.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailPreferences.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..a84e8123e67ab789931421e62c58938ac69ad3cf GIT binary patch literal 1274 zcmZ8hOK%e~5S~p_t2Ax;00FHy7+Ud=prR5gr5DodHjg%?QL+`>kehYd72Dn5ozRB_ z5)wkPklAHWab2XKKC;!GKPLmJp9p3mQm?QiU{0W1LMy9tn@zx8p^ zox0F(2U4hE)AE);lq$@2dM8$eA5@iWN+rXFjAvA=8p;pxlG>}gXAwXXwfd4{F`Bsd zYbBj`a^*#W(qmr4YclrtWoA7jTn=NYFjJFVJYaacjRS@xFld;nh*1t2E`dp$)}63M zZq~3)yA}8ifii32yWJ7(B_$`>67<6(n1CVcF!{mSik3LZ3NTHcsUD9lDD6OdCzuUs zxJD!D{$?n!tt3aeiwoL$k>$xb4q3=rht#+1C~W#_n|m^lC_TO{<5+A;9h-&&ctZBm z8}3G2v@zNiNQ#4Cj|brr z?FdCAik2DaNTh>|`9>Qt3i-~K47nc~S4SCdC`mHN`M{Suw1&qUTe5M_#2jU8xQ%Fc zW_VcVa*jEa&mz1u8$;WvNlO1vms$5a#i|rFO{^oEq8%XDWo0&Q15z*wui&6_5;TV8 z*mB>G&fpBoq3c#y9_{=cW@9B^VGb554qL*!dy5rJTf}0$%t}~YciAGf6;{Sd-DOoB zPcseml(3$7jFq57=Uh!rI$6sUu%(5MvU10*JxMBQRwDMl>yv)|eg4KW#hkIuLqjt$P~);ciQf$M~|CSXMUY|-#EFTi-uZga;ML9{t?R6*v>9P9Q| zYbz|dWZ5of?$zm{63wQMKCf^2O{CYt)7LsuV?EO^@RAH#^qhoZTY9r|vvZkFiRlXK G#eV>7dq6<| literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailReply.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailReply.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..76886900aaf33e76d4b3da5e13724dab49f3928f GIT binary patch literal 925 zcmZuvPfrs;6n|UofIyds782rN{a50JsEN^dF>QgQP+HQihHxQEJ24xF+0E=UQa*q; zPhRz;w3Nclt5-jRpTN)Idv9yC=rn!r_kM47=Dpt=00#gvy8sUT*Ngt$m26qbz~tC^ zabT@9+8ssib`YwDj8%8lB&LJKK9I{Y@`!MIA8uWwu7L~XxF5uy%OgYdksVIxbp$uLl>L85!#xbmxA{;{{61 dkAs9qIyD+q{=X{a@qKjE<@b@PzY*yx`vq03(((WR literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailSync.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailSync.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..9b454b8adfc09eccae1f6aee7d0a62a868dd27c0 GIT binary patch literal 3640 zcmbVPPiP$18UJ=A<*l_lYfFx7Np|FCC5_@BD+LoM4wTALWXsVXqg|KM+i2&lcH-HY zW#+9VmC{lOIkZqHgdReAX=w|+lpdN>PdyY$p*iK!ODU9`0s$X-Z1VfQH#6F`-AhO4 z%{T9R@B4o5d*8n$st{3qm1r9O6OHxu%PUhGk?~VcMm_MYHEG<;zr0;Pj9RC0XD!Xr zPG`X5*AH(U9htPX`OeT*iDwR4Z*Nv!posnj;ZHq(_|cOkH`TlqB>KQ);rC4aVGMdZ z&P;0S2d1QJGQTmjHJJo4Ei(`N%$jMLbEI3xxZSM4ZOZKCa1ezZ-BO2O?AYV{d zz&aUYwT6f9=F9~!!!hPon)HQvOw#J}W)kPfQEo$PApGt`o zCe`=Cqn>_{hDjP)u@tQPQ~DX!EvtEY8F;P3%QkWU92e!Ytgd3!$@5ngc7&`&tO}pM zs+4shcLu#buwfEs%$QT>sE>n^il4hm{K+MDld^| zQPpg_y`#?A2Y2?=wB5P0qv|p??1P7G^&-X{<=LH9TQz0Pc^NOrI3p`(WxQxN?tDkh z$*$|N>yqrcZ11%9)V$r=*;ETcFA9A{=&M4%B=nMu*JRZ8ZVT=0WZI`+j_?`-SiMaKs=vj-$j6Ou%cgCDlDY4tgdEu(LlH!pn6qOyQu~ zFM>-a1C#n};Wgdv8D01b=6O;yXC^WotNj5o1pFMrEmjs#-NH=6fmXGPrBw~R+Fj3@ z=e7NT>=+GFJqSCGbQETmd|AnbNcYGTV@WiV@(8Ilw!P?ExH{Uk8`8zbs-{26Nk zE(f8&??+K`oD~K%A&{p!bdd|8X%VQUCE3O)^jHQ$e5tBjw7Vwx8zdwk~swg>5(je2z z_mf_%cm4EqxzNt)oc4}C%*>e^jDVM2`vStt@dZuNEXOlJ+O zUe)^t4&vT^TeIi8`waAP&%m$-e%_ZnT!1QN{O@d6_)GHGq-hwy%@c7IXEP3&+|QrB zsIV({b(oy6DLXyWd1QiB-Q!d`$W!Ur1u@!;eLN4MGC)x*Vhve-{CvGITp;B+(;*_H zmkeP#+-ZLF-1l9`6=xau{USX`YzARAi2PGrJ^XSgdGrjV3;VO|fg`V5ZTwE}*{E}# zI<7ZGq&|iP$6Ueod@EtdIh$Q>JV9~70HO}Iu|50jD6#@q@yI3vbUiS!)Ue;GI%?os zs6bL(bKPYCOO$!C_wAe9hq=UsBFOp76FK@gM7e|cayuYUnFqzsrpz_YY}za3%T^?g zKBtCa*Rz@gYN%#%s4Qb#1hi+T@lCJOOOqJQ9bczCHgE&L@Jh!hGdEj^0ea8T#Z3#n zuV!;)yG2>ZqpcL?71CBRy+5?vH zy+D5j{l3uG=rhp268a*28}wg~5Apt7Xb(Lc5zYc^m*_+2l2%H+NZirdgkGdi zLE}8Ypy>(L{72}T=p8U!&xi(noyQ$yp mhBnl#Uf8urJd${mbXKJ1W#G2HXQF{SlgmKU%ywjHj;{d55Bcx_ literal 0 HcmV?d00001 diff --git a/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailTruncate.rsrc b/handera-sdk-105/examples/Mail/Rsc/Resource.Frk/MailTruncate.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..7d5392043b48bec420689bb8f3bdddecbb7e0726 GIT binary patch literal 1032 zcmZ8fU2YRG5T2x@j#3D1g^E-mWD1CvDhg2xRUeROT106|P_ppuY#b7?Yj16DODlxn z0Nfx?+<*s;z)d&-7l0Y>c1z;@nVE0K_WXPRB>-5!uZ&-*`aHP*sM3z4FgN_4C&D>t zR6Vy=j>RMjOsYcRWW!h!;%lS|r8V4)Y#9ja^$+$-i}2kaj_3Zreti9NH?tT14mIyd zJGqccZx!l?%1Yywda}@~9&e|v>OoX$9(g0IlQoZJY8FR%XQ)rN?$P};i6)e8-NzT^ zP4Z$UYb=2Ze1eB?y@UzV1KlG^ah;t&bI#KiSZhSy)yp>UZsI0dSpwl6Q*aGd@sz?H zOKZh@$;Ajexl2LMu-hvzg>U(F2(gHrlFP3Oi(L?Om~x%H4%4pF4_M;%g4gVX{uuL_ zX-xV79MSl2vDS8zhht$xh?iK{ZqAsGo3nOn&fc1{pUl}ib2i@i>u|)+b;`%$6iefg zc3h8mUaRF3MP7q59q5mnJ~9^P{7fjvo#rm5(A5UvIMtvHpUu6&c`%lE{+Tq~p_XsO zj&qg918Fur9BU)5PNU31p}2JfV<_z$3pE_eXvjkyCn@%+fpyICzdXIQwecI_JILOO zZ*~b + +#include + +#include "Mail.h" + +/* HandEra */ +#include "vga.h" +/* end HandEra */ + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ + +// Define the minimum OS version we support +#define ourMinVersion sysMakeROMVersion(4,0,0,sysROMStageDevelopment,0) + +#define noRecordSelected -1 +#define noNewRecord -1 +#define noDate 0 + +// Categories +#define inboxCategory 0 +#define outboxCategory 1 +#define deletedCategory 2 +#define filedCategory 3 +#define draftCategory 4 +//mgmg +#define ignoreCategory 13 +// this category is used to store a "Revert" record. AS needed. +// It will be marked as deleted, and stored at the end. So if the user Sync's it +// will properly dissapear. + + +// Column widths in List View +/* HandEra */ +#define listDateWidth (vgaExists ? (VgaIsVgaFont(ListFont) ? 38 : 25) : 25) +#define listScrollBarWidth (vgaExists ? 11 : 9) +#define listColumnSpacing (vgaExists ? 6 : 4) +#define listIconWidth (vgaExists ? 23 : 15) +//#define listDateWidth 25 +//#define listScrollBarWidth 9 +//#define listColumnSpacing 4 +//#define listIconWidth 15 +/* end HandEra */ + +// Options dialog sort order list items. +#define sortByDateItem 0 +#define sortByFromItem 1 +#define sortBySubjectItem 2 + + +// Update codes, used to determine how the to do list should +// be redrawn. +#define updateDisplayOptsChanged 0x01 +#define updatePurge 0x02 +#define updateFontChanged 0x04 +#define updateSelectCurrentRecord 0x80 + + +// Maximum length and width of the Mesage View's title. +#define maxMessageTitleLen 40 +#define maxMessageTitleLenWidth 130 + +// Maximum length and width of the Edit View's title. +#define maxEditTitleLen 40 +#define maxEditTitleLenWidth 110 + + +// Edit view table's rows and columns +#define newToRow 0 +#define newCCRow 1 +#define newBCCRow 2 +#define newSubjectRow 3 +#define newBodyRow 4 + +#define maxNewRows 5 + +#define newLabelColumn 0 +#define newTextColumn 1 + +//mgmg add some space after the label +#define spaceAfterLabel 3 + +// Max lines per field in new view +#define maxNewAddressLines 2 +#define maxNewSubjectLines 2 + +//mgmg +//#define maxNewFieldChars 4000 +#define maxNewFieldChars 10000 + +// Update codes +#define updateRestoreFocus 1 +#define updateReinitialize 2 + +// Space between columns in find results dialog. +#define findColumnSpacing 4 + +// Max name length for addresses in the find results dialog. +#define maxFindFromNameLen 40 + +// Maximum width of a commented message (message where each line starts +// with a >). +#define commentedMsgWidth 119 + +// Length the buffer used to format a reply message. +#define replayBufferLen 200 + + +// Maximin input length for new message fields +#define maxAddressLength 4096 +#define maxSubjectLength 256 +#define maxBodyLength 4096 +#define maxFilterLength 256 + +//distance from the title to draw the Message x of y text in the message view +#define kMessageTitleOffset 9 + +/*********************************************************************** + * + * Internal Structutes + * + ***********************************************************************/ + +// This is the structure of the data stored in the state file. +typedef struct { + FontID messageFont; + FontID listFont; + FontID editFont; + Boolean showDates; + Boolean includeOriginalText; + Boolean commentOriginalText; + Boolean confirmDelete; + Boolean showFullHeader; + Boolean attachSignature; + Boolean confirmRead; + Boolean confirmDelivery; + UInt8 reserved; + UInt16 revertCategory; +} MailPreferenceType; + +#define kDefaultListFont stdFont +#define kDefaultMessageFont stdFont +#define kDefaultEditFont stdFont + +typedef struct { + VgaRotateModeType rotation; + Boolean rememberRotation; +} MailRotationPrefType; + + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + + DmOpenRef MailDB; // Mail database + + TimeFormatType TimeFormat; // system preference + DateFormatType DateFormat; + +static char CategoryName [dmCategoryLength]; // name of the current categorg + +// The following global variables are used to keep track of the edit +// state of the application. + UInt16 CurrentRecord = -1; // record being edited +static UInt16 NewRecord = -1; // index of unsend new message +static UInt16 TopVisibleRecord = 0; // top visible record in list view +static UInt16 CurrentCategory = 0; // currently displayed category +static Int16 MessagesInCategory; // number of messages in the current category +static UInt16 UnreadMessages = 0; // number of unread messages + +static UInt16 NewViewCurrentRowID = 0; +static Boolean NewViewShowBCC = false; +static UInt16 NewScrollPosition [maxNewRows]; // Scroll position of each field in the New View. + +static Boolean ItemSelected = false; // true if a list view item is selected +static UInt16 EditPosition = 0; // position of the insertion point in the current field +static UInt16 EditBodyPosition = 0; // position of the insertion point in the body field +static UInt16 EditSelectionLength = 0; // length of the current selection. + EditFieldType EditViewField; // field to edit in the Edit view + Boolean EditViewEditRecord; // true if editing a record, false if editing hotsync options +static Boolean RestoreFromEditView = false; // true if we a re returning from the edit view +static Boolean StashedNewViewShowBCC = false; + +// Global variable used by Message View + MsgFieldType MessageTopField; // top visible field + UInt16 MessageScrollPos; // position of first visible character in top visible field + MsgSelectFieldType MessageSelectStartField; + MsgSelectFieldType MessageSelectEndField; + UInt16 MessageSelectStartPos; + UInt16 MessageSelectEndPos; + +//mgmg + MemHandle MessageOriginalRecordData = NULL; + UInt16 MessageRevertCategory = 0; + +// globals for the New view +// * mgolden 10/6/97 changed for the rocky fonts + UInt16 gNewViewTableHeight; // the original height of the table object, used to calculate the + // correct new height based on the font. + +// The following global variables are saved to a state file. + FontID MessageFont = kDefaultListFont; // font used in message view + FontID ListFont = kDefaultMessageFont; // font used in message view + FontID EditFont = kDefaultEditFont; // font used in message view + +static Boolean ShowDates = true; // true if dates are displayed in the list view +static Boolean IncludeOriginalText = true; // true to include original message in reply +static Boolean CommentOriginalText = false; // true to comment original message in reply +static Boolean ConfirmDelete = true; // true if we display an alert before deleting a message + +static MemHandle MessageTitleH; // Title of message view. + Boolean ShowFullHeader = false; // True to display full header in message view +static Boolean AttachSignature = false; // True to always attach signature +static Boolean ConfirmRead = false; // True to always confirm that a message was read +static Boolean ConfirmDelivery = false; // True to always confirm that a message was delivered + +static MemHandle EditTitleH; // Title of edit view. + + UInt16 TruncateLen; // Maximun length of retrieved message + MemHandle SyncUIStateH = 0; // Save save of the HotSync dialog + + +static UInt16 ReturnToView = ListView; // View to return to when a message is sent +static UInt32 *crIDs = NULL; // The creator IDs for default +static Char *appNames = NULL; // App names for default +static Char **appNamesArray = NULL; +static UInt32 appCnt = 0; // Num of possible defaults + +/* HandEra */ +static VgaScreenStateType gScreenState; +Boolean vgaExists = false; +/* end HandEra */ +/*********************************************************************** + * + * Internal Routines + * + ***********************************************************************/ + +static UInt16 NewViewGetFieldHeight (UInt16 recordNum, Int16 rowID, UInt16 width); +static void NewViewInitRow (TablePtr table, Int16 row, Int16 rowID, UInt16 height); +static void DrawString (Char * str, Int16 x, Int16 y, Int16 width); +static void MessageViewDrawMessage (void); +static void MessageViewToggleFont (void); +static void EditViewToggleFont (void); +static UInt16 NewViewGetLineCount (UInt16 recordNum, Int16 rowID, UInt16 width); +static Boolean MessageUndelete(void); +static void MessageViewMarkUnRead (void); +static void MessageViewEnableButtons(FormPtr frm); +static void ListViewSelectRecord (FormPtr frm, UInt16 recordNum, Boolean scrollToSelect); +static void Search (FindParamsPtr findParams); +static Err MessageViewRevert(DmOpenRef dbP, UInt16 * index); +static void MessageViewInitializRevert(void); +static void MessageViewCleanUpRevert(void); +static void SaveRevert(void); +static void RestoreRevert(Boolean keepIt); +static void ListViewLoadTable (FormPtr frm, UInt16 recordNum); +static void ListViewLoadRecords (FormPtr frm); +#ifdef DO_ROM_CHECK +static Err RomVersionCompatible (UInt32 requiredVersion, UInt16 launchFlags); +#endif +static FontID SelectFont (FontID currFontID); +static UInt16 ListViewNumberOfRows (TablePtr table); +static void NewViewToggleFont (void); +static UInt16 NewViewNumberOfRows (TablePtr table); +static void NewViewLoadTable(FormPtr frm); + +static void MailLoadPrefs(void); // BGT +static void MailSavePrefs(void); // BGT +static Err ParseMailtoURL(MailAddRecordParamsPtr newMsgP, MemPtr cmdPBP, + Char *buf); +static Boolean PrvGetNameValuePair(Char **strP, Int16 * strLen, Char **nameP, + Int16 * nameLen, Char **valueP, + Int16 * valueLen); +static void PrvSetMailAppsList(Int32 listSelection); +static void RegisterLocaleChangedNotification(void); +static Err CreateDefaultDatabase(void); +static void EventLoop (void); + +#ifdef DO_ROM_CHECK +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: Check that the ROM version meets the + * minimum requirement. Warn if the app was switched to. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags indicating how the application was + * launched. A warning is displayed only if + * these flags indicate that the app is + * launched normally. + * + * RETURNED: zero if rom is compatible else an error code + * + ***********************************************************************/ +static Err RomVersionCompatible (UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + + + // See if we're on in minimum required version of the ROM or later. + // The system records the version number in a feature. A feature is a + // piece of information which can be looked winUp by a creator and feature + // number. + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + // If the user launched the app from the launcher, explain + // why the app shouldn't run. If the app was contacted for something + // else, like it was asked to find a string by the system find, then + // don't bother the user with a warning dialog. These flags tell how + // the app was launched to decided if a warning should be displayed. + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + + // Pilot 1.0 will continuously relaunch this app unless we switch to + // another safe one. The sysFileCDefaultApp is considered "safe". + if (romVersion < 0x02000000) + { + Err err; + + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + + return (sysErrRomIncompatible); + } + + return 0; +} +#endif + +/*********************************************************************** + * + * FUNCTION: SetDBBackupBit + * + * DESCRIPTION: This routine sets the backup bit on the given database. + * This is to aid syncs with non Palm software. + * If no DB is given, open the app's default database and set + * the backup bit on it. + * + * PARAMETERS: dbP - the database to set backup bit, + * can be NULL to indicate app's default database + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * grant 4/1/99 Initial Revision + * + ***********************************************************************/ +void SetDBBackupBit(DmOpenRef dbP) +{ + DmOpenRef localDBP; + LocalID dbID; + UInt16 cardNo; + UInt16 attributes; + + // Open database if necessary. If it doesn't exist, simply exit (don't create it). + if (dbP == NULL) + { + localDBP = DmOpenDatabaseByTypeCreator (mailDBType, sysFileCMail, dmModeReadWrite); + if (localDBP == NULL) return; + } + else + { + localDBP = dbP; + } + + // now set the backup bit on localDBP + DmOpenDatabaseInfo(localDBP, &dbID, NULL, NULL, &cardNo, NULL); + DmDatabaseInfo(cardNo, dbID, NULL, &attributes, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); + attributes |= dmHdrAttrBackup; + DmSetDatabaseInfo(cardNo, dbID, NULL, &attributes, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); + + // close database if necessary + if (dbP == NULL) + { + DmCloseDatabase(localDBP); + } +} + + +/*********************************************************************** + * + * FUNCTION: StartApplication + * + * DESCRIPTION: This routine opens the application's database, laods the + * saved-state information and initializes global variables. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * MGolden 7/14/97 Added a call to RestoreRevert() + * MGolden 8/11/97 Fixed the Missing app info block bug (code from Roger.) + * grant 4/7/99 Set the backup bit when creating the DB. + * jmp 10/18/99 Replaced inline code with call to MailGetDatabase(). + * CS 11/14/00 Use PrefGetPreference instead of PrefGetPreferences. + * + ***********************************************************************/ +static UInt16 StartApplication (void) +{ + Err err = errNone; + UInt16 index; + UInt32 uniqueID; + Boolean synchronize = false; + MailPackedDBRecordPtr recordP; + UInt32 vgaVersion; + + // Get the date format from the system preferences. + DateFormat = (DateFormatType)PrefGetPreference(prefDateFormat); + TimeFormat = (TimeFormatType)PrefGetPreference(prefTimeFormat); + + // Find the application's data file. If it doesn't exist create it. + err = MailGetDatabase (&MailDB, dmModeReadWrite); + if (err) + return err; + + /* HandEra */ + if (_TRGVGAFeaturePresent(&vgaVersion)) + { + VgaRotateModeType rotate; + + vgaExists = true; + + VgaGetScreenMode(NULL, &rotate); + VgaSetScreenMode(screenMode1To1, rotate); + } + else + vgaExists = false; + /* end HandEra */ + + // Read the preferences / saved-state information. + MailLoadPrefs(); + + // Get the MemHandle of an unsent message for the last time the application + // ran. + NewRecord = noNewRecord; + uniqueID = MailGetUnsentMessage (MailDB); + + //do the restore here...since the database may move around before it returns + RestoreRevert(uniqueID); + + //now find the unique id record to edit. + if (uniqueID) + { + DmFindRecordByID (MailDB, uniqueID, &NewRecord); + if (DmQueryRecord (MailDB, NewRecord) == 0) + NewRecord = noNewRecord; + } + + + // Get the count of the unread messages. + index = 0; + while (true) + { + DmSeekRecordInCategory (MailDB, &index, 0, dmSeekForward, inboxCategory); + if (DmGetLastErr()) break; + + recordP = MemHandleLock (DmQueryRecord (MailDB, index)); + if (! recordP->flags.read) + UnreadMessages++; + MemPtrUnlock (recordP); + index++; + } + + + TopVisibleRecord = 0; + CurrentRecord = noRecordSelected; + + //RestoreRevert(NewRecord); + + MessagesInCategory = DmNumRecordsInCategory (MailDB, CurrentCategory); + + return (err); +} + + +/*********************************************************************** + * + * FUNCTION: StopApplication + * + * DESCRIPTION: This routine closes the application's database + * and saves the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * MGolden 7/14/97 Added a call to SaveRevert() + * + ***********************************************************************/ +static void StopApplication (void) +{ + // Write the preferences / saved-state information. + MailSavePrefs(); // (BGT) + + // Send a frmSave event to all the open forms. + FrmSaveAllForms (); + + // Close all the open forms. + FrmCloseAllForms (); + + //save revert info + SaveRevert(); + + // Free all of the list selection stuff for default app + if(appNamesArray) + MemPtrFree(appNamesArray); + if(appNames) + MemPtrFree(appNames); + if(crIDs) + MemPtrFree(crIDs); + + // Bug fix since SyncUIStateH was never freed when exiting the application + // in the EditView coming from the Sync Dialog + // There should be a better way but it should work for now + if (SyncUIStateH) + { + MemHandleFree(SyncUIStateH); + } + + // Close the application's data file. + DmCloseDatabase (MailDB); +} + + +/*********************************************************************** + * + * FUNCTION: SyncNotification + * + * DESCRIPTION: This routine is a entry point of the to do application. + * It is called when the to do application's database is + * synchronized. This routine will resort the database and + * reset the state file info if necessary. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * jmp 10/18/99 Use MailGetDatabase() instead of DmOpenDatabaseByTypeCreator(). + * + ***********************************************************************/ +static void SyncNotification (void) +{ + Err err = errNone; + DmOpenRef dbP; + + // Open the application's data file. + err = MailGetDatabase (&dbP, dmModeReadWrite); + if (err) return; + + // Resort the database. + MailSort (dbP); + + DmCloseDatabase (dbP); +} + + + +/*********************************************************************** + * + * FUNCTION: CreateDefaultDatabase + * + * DESCRIPTION: This routine creates the default database from the + * saved image in a resource in the application. + * + * PARAMETERS: none + * + * RETURNED: 0 - if no error + * otherwise appropriate error value + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * vivek 02/01/01 Initial Revision + * + ***********************************************************************/ +static Err CreateDefaultDatabase(void) +{ + MemHandle resH; + DmOpenRef dbP; + Err error = errNone; + + // Attempt to get our default data image and create our + // database. + resH = DmGet1Resource(sysResTDefaultDB, sysResIDDefaultDB); + if (resH) + { + error = DmCreateDatabaseFromImage(MemHandleLock(resH)); + + if (!error) + { + MemHandleUnlock(resH); + DmReleaseResource(resH); + + // Set the bakcup bit on the newly created DB. + SetDBBackupBit(NULL); + } + } + + // If there is no default data, or we had a problem creating it, + // then attempt to create an empty database. + if (!resH || error) + { + error = MailGetDatabase (&dbP, dmModeReadWrite); + + if (!error) + DmCloseDatabase(dbP); + + } + return error; + +} + + +/*********************************************************************** + * + * FUNCTION: RegisterLocaleChangedNotification + + * + * DESCRIPTION: Register with NotifyMgr for localeChanged notifications. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * vivek 02/01/01 Initial Revision + * + ***********************************************************************/ +static void RegisterLocaleChangedNotification(void) +{ + UInt16 cardNo; + LocalID dbID; + Err err; + + err = SysCurAppDatabase(&cardNo, &dbID); + ErrNonFatalDisplayIf(err != errNone, "can't get app db info"); + if(err == errNone) + { + err = SysNotifyRegister(cardNo, dbID, sysNotifyLocaleChangedEvent, + NULL, sysNotifyNormalPriority, NULL); + +#if EMULATION_LEVEL == EMULATION_NONE + ErrNonFatalDisplayIf((err != errNone) && (err != sysNotifyErrDuplicateEntry), "can't register"); +#endif + + } + + return; +} + + + + + +/*********************************************************************** + * + * FUNCTION: GoToItem + * + * DESCRIPTION: This routine is called when the "Go to" button + * in the text search dialog is pressed. + * + * PARAMETERS: goToParams - where to go to + * launchingApp - true is the application is being launched + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/27/96 Initial Revision + * kwk 12/03/98 Fixed param order in call to MemSet. + * + ***********************************************************************/ +static void GoToItem (GoToParamsPtr goToParams, Boolean launchingApp) +{ + UInt16 attr; + UInt16 category; + UInt16 recordNum; + UInt32 uniqueID; + EventType event; + + recordNum = goToParams->recordNum; + + + // If the application is already running, close all the open forms. If + // the current record is blank, then it will be deleted, so we'll get + // the unique id of the record and use it to find the record index + // after all the forms are closed. + if (! launchingApp) + { + DmRecordInfo (MailDB, recordNum, NULL, &uniqueID, NULL); + + FrmSaveAllForms (); + FrmCloseAllForms (); + + DmFindRecordByID (MailDB, uniqueID, &recordNum); + } + + // Make the record visible in the List View. + TopVisibleRecord = recordNum; + + + // Change the current category. + DmRecordInfo (MailDB, recordNum, &attr, NULL, NULL); + category = (attr & dmRecAttrCategoryMask); + if (CurrentCategory != category) + { + CurrentCategory = category; + MessagesInCategory = DmNumRecordsInCategory (MailDB, CurrentCategory); + } + + + // Change the "show full header" setting such that the found string + // will be displayable. + switch (goToParams->matchFieldNum) + { + case msgFieldSentTo: + ShowFullHeader = false; + break; + + case msgFieldTo: + case msgFieldFrom: + case msgFieldSubject: + case msgFieldCC: + ShowFullHeader = true; + break; + } + + // Send an event to goto a form and select the matching text. + MemSet (&event, sizeof(EventType), 0); + + event.eType = frmLoadEvent; + event.data.frmLoad.formID = MessageView; + EvtAddEventToQueue (&event); + + event.eType = frmGotoEvent; + event.data.frmGoto.formID = MessageView; + event.data.frmGoto.recordNum = recordNum; + event.data.frmGoto.matchPos = goToParams->matchPos; + event.data.frmGoto.matchLen = goToParams->matchCustom; + event.data.frmGoto.matchFieldNum = goToParams->matchFieldNum; + EvtAddEventToQueue (&event); +} + + +/*********************************************************************** + * + * FUNCTION: AddMessage + * + * DESCRIPTION: This routine add a mail new message to the mail datebase + * it is called via a launch command by other applications. + * + * PARAMETERS: msgParams - parameter block containing the new message. + * outBox - put in outBox if true, otherwise drafts + * + * RETURNED: error code + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/21/97 Initial Revision + * MGolden 7/9/97 Fixed bug where database was not open. + * jmp 10/18/99 Replace inline code with call to MailGetDatabase(). + * grant 11/30/99 Re-fixed bug where database was not open. + * + ***********************************************************************/ +static Err AddMessage (MailAddRecordParamsPtr msgParams, Boolean outBox) +{ + Err err; + UInt16 attr; + UInt16 index; + DmOpenRef dbP; + MailDBRecordType record; + + if (! msgParams->to) + return (0); + + MemSet (&record, sizeof (MailDBRecordType), 0); + + record.flags.signature = msgParams->signature; + record.flags.confirmRead = msgParams->confirmRead; + record.flags.confirmDelivery = msgParams->confirmDelivery; + record.flags.priority = msgParams->priority; + + if (msgParams->subject) + record.subject = msgParams->subject; + +//removed this because the from field is ignored for outgoing e-mail +// if (msgParams->from) +// record.from = msgParams->from; + + if (msgParams->to) + record.to = msgParams->to; + + if (msgParams->cc) + record.cc = msgParams->cc; + + if (msgParams->bcc) + record.bcc = msgParams->bcc; + + if (msgParams->replyTo) + record.replyTo = msgParams->replyTo; + + if (msgParams->body) + record.body = msgParams->body; + + // Find the application's data file; if it doesn't exist, create it. + err = MailGetDatabase (&dbP, dmModeReadWrite); + if (err) return err; + + // Insert the new record. + err = MailNewRecord (dbP, &record, &index); + if (err) goto exit; + + // Put the new record in the outbox category. + DmRecordInfo (dbP, index, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + if(outBox) + attr |= outboxCategory | dmRecAttrDirty; + else + attr |= draftCategory | dmRecAttrDirty; + if (msgParams->secret) + attr |= dmRecAttrSecret; + DmSetRecordInfo (dbP, index, &attr, NULL); + + +exit: + DmCloseDatabase (dbP); + + return (err); +} + + + +/*********************************************************************** + * + * FUNCTION: SeekRecord + * + * DESCRIPTION: Given the index of a to do record, this routine scans + * forewards or backwards for displayable 'to do' records. + * + * PARAMETERS: indexP - pointer to the index of a record to start from; + * the index of the record sought is returned in + * this parameter. + * + * offset - number of records to skip: + * 0 - mean seek from the current record to the + * next display record, if the current record is + * a displayable record, its index is retuned. + * 1 - mean seek foreward, skipping one displayable + * record + * -1 - menas seek backwards, skipping one + * displayable record + * + * + * RETURNED: false is return if a displayable record was not found. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static Boolean SeekRecord (UInt16 * indexP, Int16 offset, Int16 direction) +{ + DmSeekRecordInCategory (MailDB, indexP, offset, direction, CurrentCategory); + if (DmGetLastErr()) return (false); + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: CreateRecord + * + * DESCRIPTION: This routine creates a new message record. + * + * PARAMETERS: nothing + * + * RETURNED: true if the record was sucessfully created. + * + * NOTE: This routine may change the index of the CurrentRecord, + * the global variable the holds this index is changed by + * this routine. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/6/96 Initial Revision + * + ***********************************************************************/ +static Boolean CreateRecord (void) +{ + Err err; + UInt16 attr; + UInt32 uniqueID; + MailDBRecordType record; + + if (CurrentRecord != noRecordSelected) + DmRecordInfo (MailDB, CurrentRecord, NULL, &uniqueID, NULL); + + + MemSet (&record, sizeof (MailDBRecordType), 0); + record.flags.priority = priorityNormal; + record.flags.signature = AttachSignature; + record.flags.confirmRead = ConfirmRead; + record.flags.confirmDelivery = ConfirmDelivery; + + // Add a new record into the database. + err = MailNewRecord (MailDB, &record, &NewRecord); + + // If the allocate failed, display a warning. + if (err) + { + FrmAlert (DeviceFullAlert); + NewRecord = noNewRecord; + return (false); + } + + // Put the new record in the draft category. + DmRecordInfo (MailDB, NewRecord, &attr, NULL, NULL); + attr &= ~(dmRecAttrCategoryMask | dmRecAttrDirty); + attr |= draftCategory; + DmSetRecordInfo (MailDB, NewRecord, &attr, NULL); + + if (CurrentCategory == draftCategory) + MessagesInCategory++; + + if (CurrentRecord != noRecordSelected) + DmFindRecordByID (MailDB, uniqueID, &CurrentRecord); + + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: DirtyRecord + * + * DESCRIPTION: Mark a record dirty (modified). Record marked dirty + * will be synchronized. + * + * PARAMETERS: record index + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * + ***********************************************************************/ +static void DirtyRecord (UInt16 index) +{ + UInt16 attr; + + DmRecordInfo (MailDB, index, &attr, NULL, NULL); + attr |= dmRecAttrDirty; + DmSetRecordInfo (MailDB, index, &attr, NULL); +} + + +/*********************************************************************** + * + * FUNCTION: PurgeDeletedRecord + * + * DESCRIPTION: This routine deletes all the mail messages in the + * "deleted" category. + * + * PARAMETERS: nothing + * + * RETURNED: true if record were purged + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/96 Initial Revision + * + ***********************************************************************/ +static Boolean PurgeDeletedRecord (void) +{ + UInt16 attr; + UInt16 index; + UInt16 numRecords; + UInt32 uniqueID; + UInt32 newUniqueID; + + + // Check if there are any records to delete. + index = 0; + DmSeekRecordInCategory (MailDB, &index, 0, dmSeekForward, deletedCategory); + if (DmGetLastErr()) + { + FrmAlert(NothingToPurgeAlert); + return (false); + } + + if (FrmAlert(PurgeAlert) != PurgeYes) + return (false); + + + if (CurrentRecord != noRecordSelected) + { + DmRecordInfo (MailDB, CurrentRecord, &attr, &uniqueID, NULL); + if ((attr & dmRecAttrCategoryMask) == deletedCategory) + CurrentRecord = noRecordSelected; + } + + + if (NewRecord != noRecordSelected) + DmRecordInfo (MailDB, NewRecord, &attr, &newUniqueID, NULL); + + + + numRecords = DmNumRecords (MailDB); + + index = numRecords; + while (true) + { + DmSeekRecordInCategory (MailDB, &index, 0, dmSeekBackward, + deletedCategory); + if (DmGetLastErr()) break; + + DmDeleteRecord (MailDB, index); + + // Move deleted record to the end of the index so that the + // sorting routine will work. + DmMoveRecord (MailDB, index, numRecords); + } + + + if (CurrentRecord != noRecordSelected) + DmFindRecordByID (MailDB, uniqueID, &CurrentRecord); + + + if (NewRecord != noRecordSelected) + DmFindRecordByID (MailDB, newUniqueID, &NewRecord); + + + MessagesInCategory = DmNumRecordsInCategory (MailDB, CurrentCategory); + + // If we're in the deleted category, set the following global the controls + // which view we return to, so that we will return to the List View. + if (CurrentCategory == deletedCategory) + ReturnToView = ListView; + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: SendMessage + * + * DESCRIPTION: This routine send a new mail message. + * + * PARAMETERS: nothing + * + * RETURNED: true if the record was sucessfully send. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/6/96 Initial Revision + * + ***********************************************************************/ +static Boolean SendMessage (void) +{ + Err err; + UInt16 attr; + UInt32 uniqueID; + Boolean noAddress; + MemHandle recordH; + MailDBRecordType record; + + + // Varify that we have a "to" address. + MailGetRecord (MailDB, NewRecord, &record, &recordH); + noAddress = (*record.to == 0); + MemHandleUnlock (recordH); + + if (noAddress) + { + FrmAlert (NoAddressAlert); + return (false); + } + + // Get the unique id of the current record, it may move. + if (CurrentRecord != noRecordSelected) + DmRecordInfo (MailDB, CurrentRecord, NULL, &uniqueID, NULL); + + + // Move the record to its corrent sort position. + err = MailSortRecord (MailDB, &NewRecord); + if (err) + { + FrmAlert (DeviceFullAlert); + return (false); + } + + + // Put the new record in the outbox category. + DmRecordInfo (MailDB, NewRecord, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= outboxCategory | dmRecAttrDirty; + DmSetRecordInfo (MailDB, NewRecord, &attr, NULL); + + + // Clear the datebase value that keep track of the unsent message. + NewRecord = noNewRecord; + MailSetUnsentMessage (MailDB, 0); + + if (CurrentCategory == outboxCategory) + MessagesInCategory++; + else if (CurrentCategory == draftCategory) + MessagesInCategory--; + + + // Find the current record. + if (CurrentRecord != noRecordSelected) + DmFindRecordByID (MailDB, uniqueID, &CurrentRecord); + + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: SaveDraftMessage + * + * DESCRIPTION: This routine stores an new mail message in the draft + * catagory + * + * PARAMETERS: quite - if false an alert is displayed to confirm + * the operation + * deleted - returned: true if record was removed from the + * database + * + * RETURNED: true if the record was sucessfully saved. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/18/96 Initial Revision + * MGolden 7/14/97 revert the message if the user says no to the save + * in draft dialog + * MGolden 7/16/97 fixed bug where current record was not correct if the + * User says no to the save in draft dialog from the draft folder. + * MGolden 7/17/97 Changed tohe code so if the user is clearing a message, + * It is not deleted if there is a mesage to revert to. So when + * They are editing a message in the draft folder, and press cancel. + * It's not deleted. + * MGolden 7/28/97 Added the input Param MenuCmd. If true, the user did not select the + * cancel button, but selected the menu command. + ***********************************************************************/ +static Boolean SaveDraftMessage (Boolean quiet, Boolean * deleted, Boolean menuCmd) +{ + Err err; + UInt16 attr; + UInt16 button; + UInt32 uniqueID; + Boolean empty; + Boolean save = false; + MemHandle recordH; + MailDBRecordType record; + Boolean uniqueIdValid = false; + *deleted = false; + + if (NewRecord == noNewRecord) + return (false); + + + // Get the unique id of the current record, it may move. + if (CurrentRecord != noRecordSelected) + { + DmRecordInfo (MailDB, CurrentRecord, NULL, &uniqueID, NULL); + uniqueIdValid = true; + } + + // If the record if empty delete it. + MailGetRecord (MailDB, NewRecord, &record, &recordH); + empty = (! *record.to) && + (! *record.cc) && + (! *record.bcc) && + (! *record.subject) && + (! *record.body); + MemHandleUnlock (recordH); + + + DmRecordInfo (MailDB, NewRecord, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= draftCategory; + + if (empty) + { + if (MessageOriginalRecordData && !menuCmd) + { + //we need to "Revert" this message to the old state + MessageViewRevert(MailDB, &NewRecord); + + //return (true); + } + else + { + if (menuCmd) + { + //show the user an alert! They can not save an empty message + button = FrmAlert (SaveEmptyAlert); + return false; + } + + *deleted = true; + if (attr & dmRecAttrDirty) + { + DmDeleteRecord (MailDB, NewRecord); + DmMoveRecord (MailDB, NewRecord, DmNumRecords (MailDB)); + } + else + DmRemoveRecord (MailDB, NewRecord); + } + } + + else if (quiet) + save = true; + + else + { + button = FrmAlert (SaveDraftAlert); + + if (button == SaveDraftYes) + save = true; + + else if (button == SaveDraftCancel) + return (false); + + else + { + //mgmg + // Was this from the deleted category? If so, leave it there + if (MessageOriginalRecordData) + { + //we need to "Revert" this message to the old state + MessageViewRevert(MailDB, &NewRecord); + + return (true); + } + else + { + *deleted = true; + if (attr & dmRecAttrDirty) + { + DmDeleteRecord (MailDB, NewRecord); + DmMoveRecord (MailDB, NewRecord, DmNumRecords (MailDB)); + } + else + DmRemoveRecord (MailDB, NewRecord); + + //mgmg 7/16 + // clear current record, (we just deleted it) + if (CurrentRecord == NewRecord) + CurrentRecord = noRecordSelected; + } + } + } + + + if (save) + { + // Move the record to its corrent sort position. + err = MailSortRecord (MailDB, &NewRecord); + if (err) + { + if (! quiet) + FrmAlert (DeviceFullAlert); + return (false); + } + + DmSetRecordInfo (MailDB, NewRecord, &attr, NULL); + + //mgmg 7/16 + // assign this record as the current record, if we are in + // the draft folder, it will be selected in the list. + if (CurrentCategory == draftCategory) + CurrentRecord = NewRecord; + } + + + // Clear the datebase value that keep track of the unsent message. + NewRecord = noNewRecord; + MailSetUnsentMessage (MailDB, 0); + + if (CurrentCategory == draftCategory && *deleted) + MessagesInCategory--; + + // Find the current record. + if (CurrentRecord != noRecordSelected && uniqueIdValid) + if (DmFindRecordByID (MailDB, uniqueID, &CurrentRecord) != 0) + CurrentRecord = noRecordSelected; + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: ChangeCategory + * + * DESCRIPTION: This routine updates the global varibles that keep track + * of category information. + * + * PARAMETERS: category - new category (index) + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static void ChangeCategory (UInt16 category) +{ + MessagesInCategory = DmNumRecordsInCategory (MailDB, category); + CurrentCategory = category; + TopVisibleRecord = 0; +} + + +/*********************************************************************** + * + * FUNCTION: DrawString + * + * DESCRIPTION: This routine draws the string passed, truncating and + adding an ellipsis to the end if necessary. + * + * PARAMETERS: str - pointer to a string + * x - draw position + * y - draw position + * width - maximum width to draw. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 05/30/96 Initial Revision + * kwk 05/28/99 Revised for Int'l support. + * + ***********************************************************************/ +static void DrawString (Char * str, Int16 x, Int16 y, Int16 width) +{ + Char * eol = StrChr (str, linefeedChr); + WinDrawTruncChars (str, (eol == NULL ? StrLen (str): (Int16) (eol - str)), x, y, width); +} + + +/*********************************************************************** + * + * FUNCTION: GetSignature + * + * DESCRIPTION: This routine returns a copy of the message signature + * string. This routine allocates a new MemHandle to hold + * signature, the caller is responsible for freeing this + * MemHandle. + * + * PARAMETERS: nothing + * + * RETURNED: MemHandle of a signature or zero + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/24/96 Initial Revision + * + ***********************************************************************/ +static MemHandle GetSignature (void) +{ + UInt16 prefsSize; + Int16 version; + Char * p; + MemHandle h; + + // Get the length of the signature. + prefsSize = 0; + version = PrefGetAppPreferences (sysFileCMail, mailSignaturePrefID, NULL, &prefsSize, true); + if (version == noPreferenceFound) + return (0); + + // Copy the signature. + h = MemHandleNew (prefsSize); + p = MemHandleLock (h); + PrefGetAppPreferences (sysFileCMail, mailSignaturePrefID, p, &prefsSize, true); + MemPtrUnlock (p); + + return (h); +} + + +/*********************************************************************** + * + * FUNCTION: SetSignature + * + * DESCRIPTION: This routine save the passed signature to the + * applicatiion information block. + * + * PARAMETERS: dpP - database pointer + * h - MemHandle of the signature + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/24/96 Initial Revision + * + ***********************************************************************/ +static void SetSignature (MemHandle h) +{ + UInt32 size = 0; + Char * p = 0; + + + if (h) + { + p = MemHandleLock (h); + size = StrLen (p) + 1; + } + + PrefSetAppPreferences (sysFileCMail, mailSignaturePrefID, mailVersionNum, + p, size, true); + + if (h) + MemPtrUnlock (p); +} + + +/*********************************************************************** + * + * FUNCTION: ClearEditState + * + * DESCRIPTION: This routine take the appication out of edit mode. + * The edit state of the current record is remember until + * this routine is called. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/18/96 Initial Revision + * + ***********************************************************************/ +static void ClearEditState (void) +{ + // Clear the global variables that keeps track of the edit start of the + // current record. + ItemSelected = false; + EditPosition = 0; + EditSelectionLength = 0; + NewViewCurrentRowID = editToField; + + +} + + +/*********************************************************************** + * + * FUNCTION: PrefApply + * + * DESCRIPTION: This routine applies the changes made in the Pref Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/96 Initial Revision + * + ***********************************************************************/ +static void PrefApply (void) +{ + MemHandle h; + FieldPtr fld; + ControlPtr ctl; + UInt16 listItem; + + // Get the "confirm delete message" setting from the dialog box + ctl = GetObjectPtr (PrefConfirmDeleteCheckbox); + ConfirmDelete = (CtlGetValue (ctl) != 0); + + // Get the signature field. + fld = GetObjectPtr (PrefSignatureField); + if (FldDirty (fld)) + { + h = FldGetTextHandle (fld); + SetSignature (h); + } + + // Set the default mail app + if(appCnt && crIDs) + { + UInt32 crID; + + listItem = LstGetSelection(GetObjectPtr(PrefDefaultMailList)); + crID = crIDs[listItem]; + ExgSetDefaultApplication(crID, exgRegSchemeID, "mailto"); + } +} + +/*********************************************************************** + * + * FUNCTION: PrvSetMailAppsList + * + * DESCRIPTION: This routine sets or initializes the list of mail apps + * + * PARAMETERS: The list selection to make current, or -1 to get from the + * exchange manager setting. + * + * RETURNED: Nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gcd 10/11/00 Initial Revision + ***********************************************************************/ +void PrvSetMailAppsList(Int32 listSelection) +{ + ControlPtr ctl; + ListPtr lst; + UInt32 defaultID; + + ctl = GetObjectPtr(PrefDefaultMailTrigger); + lst = GetObjectPtr(PrefDefaultMailList); + + if(!crIDs) // If we don't already have the id list + { + ExgGetRegisteredApplications(&crIDs, &appCnt, &appNames, NULL, exgRegSchemeID, "mailto"); + if(appCnt) + { + MemHandle tmpH = SysFormPointerArrayToStrings(appNames, appCnt); + if(tmpH) + appNamesArray = MemHandleLock(tmpH); + else + return; + } + else + return; + } + + if(appNamesArray) + LstSetListChoices(lst, appNamesArray, appCnt); + LstSetHeight(lst, appCnt < 6 ? appCnt : 6); + + if(listSelection == -1) + { + UInt16 i; + ExgGetDefaultApplication(&defaultID, exgRegSchemeID, "mailto"); + + for(i=0;ieType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case PrefOkButton: + PrefApply (); + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + break; + + case PrefCancelButton: + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + break; + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + if(vgaExists) + VgaSaveScreenState(&gScreenState); + ToolsVgaAdjustModalForm(frm, true); +/* end HandEra */ + PrefInit (); + FrmDrawForm (frm); + FrmSetFocus (frm, FrmGetObjectIndex (frm, PrefSignatureField)); + handled = true; + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: OptionsApply + * + * DESCRIPTION: This routine applies the changes made in the Options Dialog + * (aka Preferences). + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static void OptionsApply (void) +{ + UInt8 sortOrder; + UInt16 listItem; + ControlPtr ctl; + + // Update the sort order. Reset the To Do list to the top. + listItem = LstGetSelection (GetObjectPtr (OptionsSortByList)); + switch (listItem) + { + case sortByDateItem: sortOrder = sortByDate; break; + case sortByFromItem: sortOrder = sortByFrom; break; + case sortBySubjectItem: sortOrder = sortBySubject; break; + } + + + if (MailGetSortOrder (MailDB) != sortOrder) + { + MailChangeSortOrder (MailDB, sortOrder); + TopVisibleRecord = 0; + } + + // Show or hide the due date column. + ctl = GetObjectPtr (OptionsShowDates); + ShowDates = CtlGetValue (ctl); +} + + +/*********************************************************************** + * + * FUNCTION: OptionsInit + * + * DESCRIPTION: This routine initializes the Options Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static void OptionsInit (void) +{ + UInt16 sortOrder; + Char * label; + ListPtr lst; + ControlPtr ctl; + + // Set the trigger and popup list that indicates the sort order. + sortOrder = MailGetSortOrder (MailDB); + + lst = GetObjectPtr (OptionsSortByList); + label = LstGetSelectionText (lst, sortOrder); + ctl = GetObjectPtr (OptionsSortByTrigger); + CtlSetLabel (ctl, label); + LstSetSelection (lst, sortOrder); + + + // Initialize the checkboxes in the dialog box. + ctl = GetObjectPtr (OptionsShowDates); + CtlSetValue (ctl, ShowDates); +} + + +/*********************************************************************** + * + * FUNCTION: OptionsHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Options + * Dialog Box" of the Mail application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static Boolean OptionsHandleEvent (EventPtr event) +{ + Boolean handled = false; + FormPtr frm; + + if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case OptionsOkButton: + OptionsApply (); + FrmReturnToForm (ListView); + FrmUpdateForm (ListView, updateDisplayOptsChanged); + handled = true; + break; + + case OptionsCancelButton: + FrmReturnToForm (ListView); + handled = true; + break; + + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + ToolsVgaAdjustModalForm(frm, false); +/* end HandEra */ + OptionsInit (); + FrmDrawForm (frm); + handled = true; + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: ReplyFormatMessage + * + * DESCRIPTION: This routine format the message body of a reply message. + * + * PARAMETERS: recordP - message to reply to + * forward - true in forwarding the message + * + * RETURNED: true if the new message was sucessfully created. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/15/96 Initial Revision + * + ***********************************************************************/ +static Err ReplyFormatMessage (MailDBRecordPtr record, Boolean forward) +{ + Err err = 0; + Char chr; + UInt16 len; + UInt16 offset = 0; + UInt16 bufferLen; + Char * buffer; + Char * str; + Char * name; + MemHandle resH; + + if ((!*record->body) || (! IncludeOriginalText)) + return (0); + + buffer = MemHandleLock (MemHandleNew (replayBufferLen)); + + // Forwarded Message ? + if (forward) + { + // Start the message with a linefeed. + chr = linefeedChr; + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, &chr, 1, offset); + if (err) goto exit; + offset++; + + // Prepend "-- Forwarded Message --" to the beginning of the message + // text. + resH = DmGetResource (strRsc, forwardMessageStrId); + str = MemHandleLock (resH); + len = StrLen (str); + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, str, len, offset); + + MemHandleUnlock (resH); + offset += len; + if (err) goto exit; + } + + + else if (record->from && *record->from) + { + // Start the message with a linefeed. + chr = linefeedChr; + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, &chr, 1, offset); + if (err) goto exit; + offset++; + + // Add the email name of the sender, formatted as: + // <> wrote on <> + + // Get the friendly name if there is one. + name = MemPtrNew (maxFriendlyNameLen); + MailParseAddress (record->from, true, name, maxFriendlyNameLen); + if (*name) + str = name; + else + str = record->from; + len = StrLen (str); + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, str, len, offset); + MemPtrFree (name); + offset += len; + if (err) goto exit; + + + // Append the string " wrote on ". + resH = DmGetResource (strRsc, wroteOnStrId); + str = MemHandleLock (resH); + len = StrLen (str); + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, str, len, offset); + MemHandleUnlock (resH); + offset += len; + if (err) goto exit; + + + // Add the message date, a colon and a couple of linefeeds. + DateToAscii (record->date.month, record->date.day, + (record->date.year+firstYear) % 100, DateFormat, buffer); + len = StrLen (buffer); + buffer [len++] = spaceChr; + + TimeToAscii (record->time.hours, record->time.minutes, TimeFormat, &buffer[len]); + + len = StrLen (buffer); + buffer [len++] = colonChr; + buffer [len++] = linefeedChr; + buffer [len++] = linefeedChr; + + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, buffer, len, offset); + offset += len; + if (err) goto exit; + } + + + // Append the message body. + if (! CommentOriginalText) + { + // Add the body of the message to the forwarded message. + len = StrLen (record->body); + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, record->body, + len, offset); + if (err) goto exit; + } + + // Comment original text. + else if (record->body) + { + bufferLen = 0; + + str = record->body; + while (true) + { + len = FntWordWrap (str, commentedMsgWidth); + + // Write the buffer if we at the end of the message or if there + // is not enought space in the buffer for the next line plus + // a ">" and a linefeed. + if ((len + bufferLen > replayBufferLen - 2) || (len == 0)) + { + err = MailInsertIntoField (MailDB, NewRecord, mailFieldBody, + buffer, bufferLen, offset); + if (err) goto exit; + offset += bufferLen; + + if (len == 0) + break; + else + bufferLen = 0; + } + + buffer[bufferLen++] = '>'; + MemMove (&buffer[bufferLen], str, len); + str += len; + bufferLen += len; + + if (buffer[bufferLen-1] != linefeedChr) + buffer[bufferLen++] = linefeedChr; + } + } + +exit: + MemPtrFree (buffer); + return (err); +} + + + +/*********************************************************************** + * + * FUNCTION: ReplyApply + * + * DESCRIPTION: This routine applies the changes made in the Reply Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: true if the new message was sucessfully created. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/15/96 Initial Revision + * + ***********************************************************************/ +static Boolean ReplyApply (void) +{ + Err err = 0; + UInt16 len; + UInt16 toID; + UInt16 size; + UInt32 uniqueID; + Char * MemPtr; + Char * prefix; + Char * to = 0; + Char * cc = 0; + Char * subject = 0; + Char * addresses; + FormPtr frm; + MemHandle resH; + MemHandle recordH; + ControlPtr ctl; + MailDBRecordType record; + + + // Save the include original text checkbox setting. + ctl = GetObjectPtr (ReplayIncludeTextCheckbox); + IncludeOriginalText = (CtlGetValue (ctl) != 0); + + // Save the comment original text checkbox setting. + ctl = GetObjectPtr (ReplyCommentTextCheckbox); + CommentOriginalText = (CtlGetValue (ctl) != 0); + + // Get the reply to setting (sender, all, or forward). + frm = FrmGetActiveForm (); + toID = FrmGetObjectId (frm, FrmGetControlGroupSelection (frm, ReplyToGroup)); + + // Create the replay message. + if (! CreateRecord ()) + return (false); + + // Get the curernt record. + err = MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + ErrFatalDisplayIf (err, "Error get record"); + + // The current record may get move when we change the subject field. + DmRecordInfo (MailDB, CurrentRecord, NULL, &uniqueID, NULL); + + // Format the subject of the new message. Append the appropriate + //prefix (Re: or Fwd:) to the beginning of the subject. If the + //subject already begins with the prefix don't add it. + if (toID == ReplyForwardPushButton) + resH = DmGetResource (strRsc, forwardPrefixStrId); + else + resH = DmGetResource (strRsc, replyPrefixStrId); + prefix = MemHandleLock (resH); + + if (MemCmp (record.subject, prefix, StrLen(prefix)) == 0) + err = MailChangeRecordField (MailDB, &NewRecord, mailFieldSubject, + record.subject); + else + { + subject = MemPtrNew (StrLen(prefix) + StrLen (record.subject) + 1); + StrCopy (subject, prefix); + StrCat (subject, record.subject); + err = MailChangeRecordField (MailDB, &NewRecord, mailFieldSubject, subject); + MemPtrFree (subject); + } + MemHandleUnlock (resH); + if (err) goto errorExit; + + + // Set the "To" field of the new record. If we're replying to the sender + // or to all, then set the "To" field to the "From" field of the + // original message. If we're forwarding the message then the "To" field + // is blank. + if (toID == ReplyToSenderPushButton) + { + size = StrLen (record.from) + 1; + if (size) + { + to = MemPtrNew (size); + MailParseAddress (record.from, false, to, size); + } + } + + else if (toID == ReplyToAllPushButton) + { + size = StrLen (record.from) + StrLen (record.to) + 2; // one for linfeedand one for terminator + if (size) + { + to = MemPtrNew (size); + MailParseAddress (record.from, false, to, size); + + // Add all the addresses in the "To" field of the original message. + addresses = record.to; + MemPtr = to; + while (addresses && *addresses) + { + len = StrLen (MemPtr); + if (len) + MemPtr[len++] = linefeedChr; + size -= len; + MemPtr += len; + MailParseAddress (addresses, false, MemPtr, size); + addresses = StrChr (addresses, linefeedChr); + if (addresses) addresses++; + } + } + } + + if (to) + { + err = MailChangeRecordField (MailDB, &NewRecord, mailFieldTo, to); + MemPtrFree (to); + if (err) goto errorExit; + } + + + // Add all the addresses in the "CC" field of the original message. + if (toID == ReplyToAllPushButton && *record.cc) + { + size = StrLen (record.cc) + 1; + cc = MemPtrNew (size); + *cc = 0; + MemPtr = cc; + addresses = record.cc; + while (addresses && *addresses) + { + MailParseAddress (addresses, false, MemPtr, size); + addresses = StrChr (addresses, linefeedChr); + if (addresses) + { + addresses++; + len = StrLen (MemPtr); + MemPtr[len] = linefeedChr; + size -= len + 1; + MemPtr += len + 1; + } + } + if (cc) + { + err = MailChangeRecordField (MailDB, &NewRecord, mailFieldCC, cc); + MemPtrFree (cc); + if (err) goto errorExit; + } + } + + + // Format message body. + err = ReplyFormatMessage (&record, (toID == ReplyForwardPushButton)); + if (err) goto errorExit; + + + // Clean winUp + MemHandleUnlock (recordH); + DmFindRecordByID (MailDB, uniqueID, &CurrentRecord); + + return (true); + + +errorExit: + MemHandleUnlock (recordH); + DmFindRecordByID (MailDB, uniqueID, &CurrentRecord); + + // If the allocate failed, display a warning. + FrmAlert (DeviceFullAlert); + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: ReplyInit + * + * DESCRIPTION: This routine initializes the Reply Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/15/96 Initial Revision + * + ***********************************************************************/ +static void ReplyInit (void) +{ + ControlPtr ctl; + + // Turn on the reply to send push button. + FrmSetControlGroupSelection (FrmGetActiveForm (), ReplyToGroup, + ReplyToSenderPushButton); + + // Set the include original text checkbox. + ctl = GetObjectPtr (ReplayIncludeTextCheckbox); + CtlSetValue (ctl, (IncludeOriginalText == true)); + + // Set the comment original text checkbox. + ctl = GetObjectPtr (ReplyCommentTextCheckbox); + CtlSetValue (ctl, (CommentOriginalText == true)); +} + + +/*********************************************************************** + * + * FUNCTION: ReplyHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Reply + * Dialog Box". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/15/96 Initial Revision + * + ***********************************************************************/ +static Boolean ReplyHandleEvent (EventPtr event) +{ + FormPtr frm; + Boolean handled = false; + + if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case ReplyOkButton: + if (ReplyApply ()) + { + FrmCloseAllForms (); + FrmGotoForm (NewView); + } + else + FrmReturnToForm (0); + handled = true; + break; + + case ReplyCancelButton: + FrmReturnToForm (0); + handled = true; + break; + + case ReplyForwardPushButton: + CtlSetValue (GetObjectPtr (ReplayIncludeTextCheckbox), true); +// CtlSetValue (GetObjectPtr (ReplyCommentTextCheckbox), true); + break; + + case ReplyCommentTextCheckbox: + if (event->data.ctlSelect.on) + CtlSetValue (GetObjectPtr (ReplayIncludeTextCheckbox), true); + break; + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + ToolsVgaAdjustModalForm(frm, false); +/* end HandEra */ + ReplyInit (); + FrmDrawForm (frm); + handled = true; + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: DetailsApply + * + * DESCRIPTION: This routine applies the changes made in the Details Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: update code that is sent to the "New View". + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/11/96 Initial Revision + * + ***********************************************************************/ +static UInt16 DetailsApply (void) +{ + UInt16 updateCode = 0; + ListPtr lst; + MemHandle recordH; + ControlPtr ctl; + Boolean on; + MailFlagsType flags; + MailDBRecordType record; + + + MailGetRecord (MailDB, NewRecord, &record, &recordH); + flags = record.flags; + MemHandleUnlock (recordH); + + + // Get the priority setting from the dialog box. + lst = GetObjectPtr (DetailsPriorityList); + flags.priority = LstGetSelection (lst); + + // Get the signature setting from the dialog box + ctl = GetObjectPtr (DetailsSignatureCheckbox); + on = (CtlGetValue (ctl) != 0); + flags.signature = on; + AttachSignature = on; + + // Get the "confirm read" setting from the dialog box. + ctl = GetObjectPtr (DetailsReadCheckbox); + on = (CtlGetValue (ctl) != 0); + flags.confirmRead = on; + ConfirmRead = on; + + // Get the "confirm delivery" setting from the dialog box. + ctl = GetObjectPtr (DetailsDeliveryCheckbox); + on = (CtlGetValue (ctl) != 0); + flags.confirmDelivery = on; + ConfirmDelivery = on; + + // Update the record if necessary. + if (MemCmp (&flags, &record.flags, sizeof (MailFlagsType) != 0)) + MailChangeRecordField (MailDB, &NewRecord, mailFieldFlags, &flags); + + // Get the bcc setting + ctl = GetObjectPtr (DetailsBCCCheckbox); + on = (CtlGetValue (ctl) != 0); + + if (NewViewShowBCC != on) + updateCode = updateReinitialize; + else + updateCode = updateRestoreFocus; + NewViewShowBCC = on; + + return (updateCode); +} + + +/*********************************************************************** + * + * FUNCTION: DetailsInit + * + * DESCRIPTION: This routine initializes the Details Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/11/96 Initial Revision + * + ***********************************************************************/ +static void DetailsInit (void) +{ + UInt16 priority; + Char * label; + ListPtr lst; + MemHandle recordH; + ControlPtr ctl; + MailDBRecordType record; + + MailGetRecord (MailDB, NewRecord, &record, &recordH); + + // Set the priority + priority = record.flags.priority; + ctl = GetObjectPtr (DetailsPriorityTrigger); + lst = GetObjectPtr (DetailsPriorityList); + label = LstGetSelectionText (lst, priority); + CtlSetLabel (ctl, label); + LstSetSelection (lst, priority); + + // Set the BCC. + ctl = GetObjectPtr (DetailsBCCCheckbox); + CtlSetValue (ctl, (NewViewShowBCC == true)); + + // Set the signature checkbox. + ctl = GetObjectPtr (DetailsSignatureCheckbox); + CtlSetValue (ctl, (record.flags.signature == true)); + + // Set the "confirm read" checkbox. + ctl = GetObjectPtr (DetailsReadCheckbox); + CtlSetValue (ctl, (record.flags.confirmRead == true)); + + // Set the "confirm delivery" checkbox. + ctl = GetObjectPtr (DetailsDeliveryCheckbox); + CtlSetValue (ctl, (record.flags.confirmDelivery == true)); + + // Unlock the new message. + MemHandleUnlock (recordH); +} + + +/*********************************************************************** + * + * FUNCTION: DetailsHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Details + * Dialog Box". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/11/96 Initial Revision + * + ***********************************************************************/ +static Boolean DetailsHandleEvent (EventPtr event) +{ + UInt16 updateCode; + FormPtr frm; + Boolean handled = false; + + if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case DetailsOkButton: + updateCode = DetailsApply (); + FrmReturnToForm (NewView); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + FrmUpdateForm (NewView, updateCode); + handled = true; + break; + + case DetailsCancelButton: + FrmReturnToForm (NewView); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + FrmUpdateForm (NewView, updateRestoreFocus); + handled = true; + break; + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); + +/* HandEra */ + if(vgaExists) + VgaSaveScreenState(&gScreenState); + ToolsVgaAdjustModalForm(frm, true); +/* end HandEra */ + + DetailsInit (); + FrmDrawForm (frm); + handled = true; + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewUpdateScrollBar + * + * DESCRIPTION: This routine update the scroll bar. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/10/96 Initial Revision + * + ***********************************************************************/ +static void EditViewUpdateScrollBar () +{ + UInt16 scrollPos; + UInt16 textHeight; + UInt16 fieldHeight; + Int16 maxValue; + FormPtr frm; + FieldPtr fld; + ScrollBarPtr bar; + + frm = FrmGetActiveForm (); + fld = GetObjectPtr (EditField); + bar = GetObjectPtr (EditScrollBar); + + FldGetScrollValues (fld, &scrollPos, &textHeight, &fieldHeight); + + if (textHeight > fieldHeight) + maxValue = textHeight - fieldHeight; + else if (scrollPos) + maxValue = scrollPos; + else + maxValue = 0; + + SclSetScrollBar (bar, scrollPos, 0, maxValue, fieldHeight-1); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewScroll + * + * DESCRIPTION: This routine scrolls the message view by the number of + * lines specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/10/96 Initial Revision + * + ***********************************************************************/ +static void EditViewScroll (Int16 linesToScroll) +{ + FieldPtr fld; + + fld = GetObjectPtr (EditField); + + if (linesToScroll < 0) + FldScrollField (fld, -linesToScroll, winUp); + + else if (linesToScroll > 0) + FldScrollField (fld, linesToScroll, winDown); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewPageScroll + * + * DESCRIPTION: This routine scrolls the message a page winUp or winDown. + * + * PARAMETERS: direction winUp or winDown + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/10/96 Initial Revision + * + ***********************************************************************/ +static void EditViewPageScroll (WinDirectionType direction) +{ + Int16 value; + Int16 min; + Int16 max; + Int16 pageSize; + UInt16 linesToScroll; + FieldPtr fld; + ScrollBarPtr bar; + + fld = GetObjectPtr (EditField); + + if (FldScrollable (fld, direction)) + { + linesToScroll = FldGetVisibleLines (fld) - 1; + FldScrollField (fld, linesToScroll, direction); + + + // Update the scroll bar. + bar = GetObjectPtr (EditScrollBar); + SclGetScrollBar (bar, &value, &min, &max, &pageSize); + + if (direction == winUp) + value -= linesToScroll; + else + value += linesToScroll; + + SclSetScrollBar (bar, value, min, max, pageSize); + } +} + +/*********************************************************************** + * + * FUNCTION: EditViewToggleFont + * + * DESCRIPTION: This routine changes the font used to display a note. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/10/97 Change the font for the message view + * + ***********************************************************************/ +static void EditViewToggleFont () + { + FieldPtr fld; + FontID originalFont = EditFont; + + fld = GetObjectPtr (EditField); + + EditFont = FontSelect (originalFont); + + // FldSetFont will redraw the field if it is visible. + + if (EditFont != originalFont) + { + FldSetFont (fld, EditFont); + EditViewUpdateScrollBar (); + } + }//EditViewToggleFont + +/*********************************************************************** + * + * FUNCTION: EditViewSetTitle + * + * DESCRIPTION: This routine sets the title of the note view. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/10/96 Initial Revision + * kwk 12/11/98 Modified for int'l support. + * + ***********************************************************************/ + static void EditViewSetTitle (void) + { + Int16 i; + UInt16 len; + UInt16 width; + Int16 maxWidth; + Char * resP; + Char * title; + Char * subject; + MemHandle resH; + MemHandle recordH; + MailDBRecordType record; + + if (EditTitleH) + MemHandleFree (EditTitleH); + + EditTitleH = MemHandleNew (maxEditTitleLen + 2); + if (! EditTitleH) return; + title = MemHandleLock (EditTitleH); + + + // If we are editing the to, cc, bcc, or subject field, get the title + // from a resource. + if (EditViewField < editBodyField) + { + resH = DmGetResource (strRsc, editViewTitlesStrId); + resP = MemHandleLock (resH); + for (i = 1; i <= EditViewField; i++) + resP = StrChr (resP, commaChr) + 1; + len = (UInt16) (StrChr (resP, commaChr) - resP); + + MemMove (title, resP, len); + title[len] = 0; + MemHandleUnlock (resH); + } + + // If we're editing the body of the message then use the subject field + // as the title. Truncate the tile if it's to long. + else + { + maxWidth = maxEditTitleLenWidth; + width = 0; + *title = 0; + + // Get a pointer to the start of the requested field. + MailGetRecord (MailDB, NewRecord, &record, &recordH); + + subject = record.subject; + + if (*subject) + { + title[0] = 0; + len = 0; + while (true) + { + WChar ch; + UInt16 charSize = TxtGetNextChar (subject, len, &ch); + + if ((ch == '\0') + || (ch == linefeedChr) + || (len + charSize > maxEditTitleLen)) break; + + TxtSetNextChar (title, len, ch); + len += charSize; + title[len] = 0; + + width += FntWCharWidth (ch); + if (width >= maxWidth) break; + } + + if ((width >= maxWidth) && (subject[len] != linefeedChr)) + { + maxWidth -= FntWCharWidth (chrEllipsis); + while ((width > maxWidth) && (len > 0)) + { + WChar ch; + len -= TxtGetPreviousChar (title, len, &ch); + width -= FntWCharWidth(ch); + } + + title[len] = chrEllipsis; + title[len+1] = 0; + } + } + + else + { + subject = MemHandleLock (DmGetResource (strRsc, noSubjectStrID)); + StrCopy (title, subject); + MemPtrUnlock (subject); + } + + MemHandleUnlock (recordH); + } + + FrmSetTitle (FrmGetActiveForm (), title); + } + + +/*********************************************************************** + * + * FUNCTION: EditViewDoCommand + * + * DESCRIPTION: This routine preforms the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: true if the menu command was handled + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/27/97 Initial Revision + * + ***********************************************************************/ +static Boolean EditViewDoCommand (UInt16 command) +{ + FieldPtr fld; + Boolean handled = false; + + switch (command) + { + case editLookupMenuCmd: + if (EditViewField == editSubjectField || + EditViewField == editBodyField) + { + MenuEraseStatus (0); + SndPlaySystemSound (sndError); + break; + } + + fld = GetObjectPtr (EditField); + AddressLookup (fld); + handled = true; + break; + + case editChangeFontCmd: + EditViewToggleFont (); + handled = true; + break; + + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewClose + * + * DESCRIPTION: This routine initializes the Edit View form. + * + * PARAMETERS: frm - pointer to the Edit View form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/10/96 Initial Revision + * + ***********************************************************************/ +static void EditViewClose (void) +{ + UInt16 selectStart; + UInt16 selectEnd; + FieldPtr fld; + MemHandle textH; + SyncUIStatePtr stateP; + + // Release the block that holds the title. + if (EditTitleH) + { + MemHandleFree (EditTitleH); + EditTitleH = NULL; + } + + // Save the insertion point position, and length of the selection. + // We'll ues these values to restore the edit state in the New View. + fld = GetObjectPtr (EditField); + if (ItemSelected) + { + EditPosition = FldGetInsPtPosition (fld); + if (EditViewField == editBodyField) + EditBodyPosition = EditPosition; + + FldGetSelection (fld, &selectStart, &selectEnd); + EditSelectionLength = selectEnd - selectStart; + if (EditSelectionLength) + EditPosition = selectStart; + } + + + // If we're editing HotSync option, get the MemHandle of the field, the + // field routines may have allocated a new MemHandle if the passed + // MemHandle was null. + if (! EditViewEditRecord) + { + stateP = MemHandleLock (SyncUIStateH); + + textH = FldGetTextHandle (fld); + + switch (EditViewField) + { + case editToField: stateP->to = textH; break; + case editFromField: stateP->from = textH; break; + case editSubjectField: stateP->subject = textH; break; + } + + MemPtrUnlock (stateP); + } + + + // Clear the MemHandle value in the field, otherwise the MemHandle + // will be freed when the form is disposed of, this call also unlocks + // the MemHandle that contains the note string. + FldSetTextHandle (fld, 0); +} + +/* HandEra */ +/*********************************************************************** + * + * FUNCTION: EditViewResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void EditViewResize(Boolean draw) +{ + Coord x,y; + FormPtr frmP; + Coord xDiff, yDiff; + Boolean drawBtn; + FieldPtr fldP; + RectangleType fldR; + RectangleType r; + + WinGetDisplayExtent(&x, &y); + + // this will get the old extent + // resize form + frmP = FrmGetActiveForm(); + FrmGetFormBounds(frmP, &r); + + xDiff = x - (r.topLeft.x + r.extent.x); + yDiff = y - (r.topLeft.y + r.extent.y); + if ((xDiff == 0) && (yDiff == 0)) + return; + + // resize form + r.extent.x += xDiff; + r.extent.y += yDiff; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + // Need to erase the field first, otherwise it will erase moved controls + // when shrinking it. + fldP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, EditField)); + if (draw) + FldEraseField(fldP); + + FldGetBounds(fldP, &fldR); + fldR.extent.x += xDiff; + fldR.extent.y += yDiff; + FldSetBounds(fldP, &fldR); + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, EditDoneButton), 0, yDiff, draw); + drawBtn = (EditViewField <= editBCCField) ? draw : false; + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, EditLookupButton), 0, yDiff, draw && drawBtn); + + drawBtn = (EditViewField == editBodyField) ? draw : false; + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, EditSendButton), 0, yDiff, draw && drawBtn); + + ToolsMoveObject(frmP, ToolsFrmGetGSI(frmP), xDiff, yDiff, draw); + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, EditScrollBar), xDiff, 0, false); + ToolsResizeObject(frmP, FrmGetObjectIndex(frmP, EditScrollBar), 0, yDiff, draw); + + if (draw) + FrmDrawForm(frmP); +} +/* end HandEra */ + +/*********************************************************************** + * + * FUNCTION: EditViewInit + * + * DESCRIPTION: This routine initializes the Edit View form. + * + * PARAMETERS: frm - pointer to the Edit View form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/10/96 Initial Revision + * MGolden 7/7/97 removed the font butotns. added menu + * + ***********************************************************************/ +static void EditViewInit (FormPtr frm) +{ + UInt16 size; + UInt16 offset; + //UInt16 controlID; + Char * textP; + MemHandle textH; + FieldPtr fld; + MemHandle recordH; + FieldAttrType attr; + MailDBRecordType record; + SyncUIStatePtr stateP; + + + EditViewResize(false); + + fld = GetObjectPtr (EditField); + FldSetFont (fld, EditFont); + + EditViewSetTitle (); + + // Are we editing an expense record or Hotsync options. + if (EditViewEditRecord) + { + // Set the value of the edit field to the proper record field. + MailGetRecord (MailDB, NewRecord, &record, &recordH); + + switch (EditViewField) + { + case editToField: textP = record.to; break; + case editCCField: textP = record.cc; break; + case editBCCField: textP = record.bcc; break; + case editSubjectField: textP = record.subject; break; + case editBodyField: textP = record.body; break; + } + + // MailGetRecord returns a locked handle. + // We need to get the Ptr, so we lock it again, and then unlock it twice. Ick. + + offset = textP - ((Char *) MemHandleLock(recordH)); + size = StrLen (textP) + 1; // one for null terminator + MemHandleUnlock (recordH); + MemHandleUnlock (recordH); + + FldSetMaxChars (fld, maxNewFieldChars); + FldSetText (fld, recordH, offset, size); + } + + // We're editing the HotSync options + else + { + stateP = MemHandleLock (SyncUIStateH); + + switch (EditViewField) + { + case editToField: textH = stateP->to; break; + case editFromField: textH = stateP->from; break; + case editSubjectField: textH = stateP->subject; break; + } + + FldSetMaxChars (fld, maxFilterLength); + FldSetTextHandle (fld, textH); + MemPtrUnlock (stateP); + } + + + // Use the edit state from the new view. + if (ItemSelected) + { + FldSetInsPtPosition (fld, EditPosition); + if (EditSelectionLength) + FldSetSelection (fld, EditPosition, + EditPosition + EditSelectionLength); + } + + + // Have the field send event to maintain the scroll bar. + FldGetAttributes (fld, &attr); + attr.hasScrollBar = true; + + // Only the subject and message body are auto-shift fields. + if (EditViewField == editSubjectField || EditViewField == editBodyField) + attr.autoShift = true; + + FldSetAttributes (fld, &attr); + + + // If we're editing the "To", "CC" or "BCC" field then show the + // lookup button. + if (EditViewField <= editBCCField) + FrmShowObject (frm, FrmGetObjectIndex (frm, EditLookupButton)); + + // If we're editing the body of the message then shoe the send button. + if (EditViewField == editBodyField) + FrmShowObject (frm, FrmGetObjectIndex (frm, EditSendButton)); + + + // Highlight the corect font push button. +//mgmg removed the font buttons +/* + if (MessageFont == stdFont) + controlID = EditSmallFontButton; + else + controlID = EditLargeFontButton; + FrmSetControlGroupSelection (frm, EditFontGroup, controlID); +*/ + + EditViewUpdateScrollBar (); +} + + +/*********************************************************************** + * + * FUNCTION: EditViewHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Edit View". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/10/96 Initial Revision + * MGolden 7/7/97 Removed the font buttons...added the menu + * MGolden 7/14/947 added MessageViewCleanUpRevert + * CSS 06/22/99 Standardized keyDownEvent handling + * (TxtCharIsHardKey, commandKeyMask, etc.) + * + ***********************************************************************/ +static Boolean EditViewHandleEvent (EventPtr event) +{ + UInt32 uniqueID; + FormPtr frm; + FieldPtr fld; + Boolean deleted; + Boolean handled = false; + + if (event->eType == keyDownEvent) + { + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + { + } + else if (EvtKeydownIsVirtual(event)) + { + if (event->data.keyDown.chr == vchrPageUp) + { + EditViewPageScroll (winUp); + handled = true; + } + + else if (event->data.keyDown.chr == vchrPageDown) + { + EditViewPageScroll (winDown); + handled = true; + } + } + // Don't allow linefeeds in the subject field or in any of the filter + // fields. + else if (event->data.keyDown.chr == chrLineFeed) + { + handled = (EditViewField == editSubjectField || + (! EditViewEditRecord)); + } + } + + + else if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case EditDoneButton: + if (EditViewEditRecord) + { + RestoreFromEditView = true; + FrmGotoForm (NewView); + } + else + FrmGotoForm (SyncDialog); + handled = true; + break; + + case EditLookupButton: + fld = GetObjectPtr (EditField); + AddressLookup (fld); + handled = true; + break; + + case EditSendButton: + if (SendMessage ()) + { + RestoreFromEditView = false; + EditViewClose (); + MessageViewCleanUpRevert(); + ClearEditState (); + FrmGotoForm (ReturnToView); + } + handled = true; + break; + } + } + + else if (event->eType == menuEvent) + { + handled = EditViewDoCommand (event->data.menu.itemID); + } + + + else if (event->eType == fldChangedEvent) + { + EditViewUpdateScrollBar (); + } + + else if (event->eType == sclRepeatEvent) + { + EditViewScroll (event->data.sclRepeat.newValue - + event->data.sclRepeat.value); + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); + /* HandEra */ + if (vgaExists) + VgaFormModify(frm, vgaFormModify160To240); + /* end HandEra */ + EditViewInit (frm); + FrmDrawForm (frm); + FrmSetFocus (frm, FrmGetObjectIndex (frm, EditField)); + handled = true; + } + + else if (event->eType == frmSaveEvent) + { + // If we're editing an expense record then save the unique id + // of the unsent message. + if (EditViewEditRecord) + { + DmRecordInfo (MailDB, NewRecord, NULL, &uniqueID, NULL); + ClearEditState (); + EditViewClose (); + SaveDraftMessage (true, &deleted, false); + if (deleted) + uniqueID = 0; + MailSetUnsentMessage (MailDB, uniqueID); + } + } + + else if (event->eType == frmCloseEvent) + { + EditViewClose (); + } + /* HandEra */ + else if (event->eType == displayExtentChangedEvent) + { + EditViewResize(true); + handled = true; + } + /* end HandEra */ + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewRestoreEditState + * + * DESCRIPTION: This routine restores the edit state of the new message + * view, if the view was in edit mode. This routine is + * called after returning from the details dialog + * or the edit view. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/18/96 Initial Revision + * + ***********************************************************************/ +static void NewViewRestoreEditState (void) +{ + Int16 row; + FormPtr frm; + TablePtr table; + FieldPtr fld; + FieldAttrType attr; + + + // Determine the current edit view, the lookup function need this + // value set. + switch (NewViewCurrentRowID) + { + case newToRow: EditViewField = editToField; break; + case newCCRow: EditViewField = editCCField; break; + case newBCCRow: EditViewField = editBCCField; break; + case newSubjectRow: EditViewField = editSubjectField; break; + case newBodyRow: EditViewField = editBodyField; break; + } + + // Find the row that the current record is in. Its possible + // that the current record is nolong displayable (ex: it + // was scrolled out of view). + table = GetObjectPtr (NewTable); + if ( ! TblFindRowID (table, NewViewCurrentRowID, &row) ) + { +// ClearEditState (); + return; + } + + frm = FrmGetActiveForm (); + FrmSetFocus (frm, FrmGetObjectIndex (frm, NewTable)); + TblGrabFocus (table, row, newTextColumn); + + // Restore the insertion point position. + fld = TblGetCurrentField (table); + + if (ItemSelected) + { + FldSetInsertionPoint (fld, EditPosition); + if (EditSelectionLength) + FldSetSelection (fld, EditPosition, + EditPosition + EditSelectionLength); + } + + FldGrabFocus (fld); + + + // Restore the dynamiclly resizeable attribute that + // was cleared in NewViewGetField to allow drag selection. + FldGetAttributes (fld, &attr); + attr.dynamicSize = true; + FldSetAttributes (fld, &attr); + +} + + +/*********************************************************************** + * + * FUNCTION: NewViewClearEditState + * + * DESCRIPTION: This routine clears the edit state of the to do list. + * It is caled whenever a table item is selected. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/18/96 Initial Revision + * jmp 9/29/99 Use FrmGetFormPtr() & FrmGetObjectIndex() instead of + * GetObjectPtr() because GetObjectPtr() calls FrmGetActiveForm(), + * and FrmGetActiveForm() may return a form that isn't the one we + * want when other forms are up when we are called. + * Fixes bug #22418. + * + ***********************************************************************/ +static void NewViewClearEditState (void) +{ + TablePtr table; + FormPtr frm; + + frm = FrmGetFormPtr (NewView); + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, NewTable)); + TblReleaseFocus (table); + ClearEditState (); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewSaveEditState + * + * DESCRIPTION: This routine is called by the table object, as a callback + * routine. We want to capture the current edit state here. + * + * PARAMETERS: table - pointer to the memo list table (TablePtr) + * row - row of the table to draw + * column - column of the table to draw + * + * RETURNED: true if the table needs to be redrawn + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/18/96 Initial Revision + * + ***********************************************************************/ +static Boolean NewViewSaveEditState (void * table, Int16 row, Int16 UNUSED_PARAM(column)) +{ + Int16 rowID; + UInt16 selectStart; + UInt16 selectEnd; + FieldPtr fld; + + fld = TblGetCurrentField (table); + + // Save the insertion point position, and length of the selection. + // We'll need the insertion point position an selection length + // if we put the table back into edit mode. + EditPosition = FldGetInsPtPosition (fld); + + FldGetSelection (fld, &selectStart, &selectEnd); + EditSelectionLength = selectEnd - selectStart; + if (EditSelectionLength) + EditPosition = selectStart; + + if (TblGetRowID (table, row) == newBodyRow) + EditBodyPosition = EditPosition; + + + if (FldDirty (fld) && (NewRecord != noNewRecord)) + DirtyRecord (NewRecord); + + + // Get the current scroll position. + rowID = TblGetRowID (table, row); + NewScrollPosition [rowID] = FldGetScrollPosition (fld); + + + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewGetField + * + * DESCRIPTION: This routine returns a pointer to a field of a mail + * record. This routine is called by the table + * object as a callback routine when it wants to display or + * edit a mail message field. + * + * PARAMETERS: table - pointer to the to do list table (TablePtr) + * row - row of the table + * column - column of the table + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/06/96 Initial Revision + * kwk 04/23/99 Reload fld attributes after calling FldSetScrollPosition. + * + ***********************************************************************/ +static Err NewViewGetField (void * table, Int16 row, Int16 UNUSED_PARAM(column), + Boolean editable, MemHandle *textHP, UInt16 * textOffset, UInt16 * textAllocSize, + FieldPtr fld) +{ + UInt16 rowID; + Char * textP; + MemHandle recordH; + FieldAttrType attr; + MailDBRecordType record; + + + // Get a pointer to the start of the requested field. + MailGetRecord (MailDB, NewRecord, &record, &recordH); + + rowID = TblGetRowID (table, row); + switch (rowID) + { + case newToRow: textP = record.to; break; + case newCCRow: textP = record.cc; break; + case newBCCRow: textP = record.bcc; break; + case newSubjectRow: textP = record.subject; break; + case newBodyRow: textP = record.body; break; + default: + ErrDisplay ("Invalid row"); + } + + + // Set the maximum number of characters that may be input. + FldSetMaxChars (fld, maxNewFieldChars); + + // Compute the offset within the record of the field requested, and the + // length the the field. + *textOffset = textP - ((Char *) MemHandleLock (recordH)); + *textAllocSize = StrLen (textP) + 1; // one for null terminator + *textHP = recordH; + + MemHandleUnlock (recordH); + MemHandleUnlock (recordH); + + // Normally the table object would initial the text of the current + // field, but since we want to also set the scroll position of the + // text will do it outself. The table will not initialize the field + // if it already has a text value +// if (rowID == newBodyRow) + { + FldSetText (fld, *textHP, *textOffset, *textAllocSize); + if (editable) + { + FldGetAttributes (fld, &attr); + attr.visible = false; + FldSetAttributes (fld, &attr); + + FldSetScrollPosition (fld, NewScrollPosition[rowID]); + + // Remember to reload attributes, in case they've been changed + // by the call to FldSetScrollPosition. + FldGetAttributes (fld, &attr); + attr.visible = true; + FldSetAttributes (fld, &attr); + } + else + FldSetScrollPosition (fld, NewScrollPosition[rowID]); + } + + // Set the field to support auto-shift. Only the subject and message + // body are auto-shift fields. + if (editable && (rowID == newSubjectRow || rowID == newBodyRow)) + { + FldGetAttributes (fld, &attr); + attr.autoShift = true; + FldSetAttributes (fld, &attr); + } + + + // We need to clear the dynamiclly resizeable attribute + // so that we can select text in the to, cc, bcc, and + // subject fields. These fields are resizeable but we + // limit there maximum height to a value less than the + // table routines allow, this results in the field routines + // attemping to make the field fully visible on a tblEnter + // event and preventing drag selecting. We restore the + // dynamiclly resizeable attribute after the tblEnter event + // in precessed. + if (editable && rowID != newBodyRow) + { + FldGetAttributes (fld, &attr); + attr.dynamicSize = false; + FldSetAttributes (fld, &attr); + } + + + return (0); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewDrawLabel + * + * DESCRIPTION: This routine the draw the labels in the edit view. + * This routine is called by the table routine + * TblDrawTable each time a line of the table needs to + * be drawn. + * + * PARAMETERS: table - pointer to the memo list table (TablePtr) + * row - row of the table to draw + * column - column of the table to draw + * bounds - bound to the draw region + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/6/96 Initial Revision + * + ***********************************************************************/ +static void NewViewDrawLabel (void * table, Int16 row, Int16 UNUSED_PARAM(column), + RectanglePtr bounds) +{ + Int16 i; + Int16 x; + UInt16 len; + Int16 rowID; + Int16 width; + Char ch; + FontID curFont; + Char * label; + MemHandle resH; + + rowID = TblGetRowID (table, row); + + resH = DmGetResource (strRsc, newViewLabelsStrId); + label = MemHandleLock (resH); + for (i = 1; i <= rowID; i++) + label = StrChr (label, commaChr) + 1; + len = (UInt16) (StrChr (label, commaChr) - label); + + /* HandEra */ + if ((vgaExists) && VgaIsVgaFont(EditFont)) + curFont = FntSetFont (VgaBaseToVgaFont(stdFont)); + else + curFont = FntSetFont (stdFont); + /* end HandEra */ + + width = FntCharsWidth (label, len); + x = bounds->topLeft.x + bounds->extent.x - width - FntCharWidth (colonChr); + WinDrawChars (label, len, x, bounds->topLeft.y); + x += width; + + ch = colonChr; + WinDrawChars (&ch, 1, x, bounds->topLeft.y); + + FntSetFont (curFont); + + MemHandleUnlock (resH); +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewNextMessage + * + * DESCRIPTION: This routine displays the next mail message. If the + * last message in the category is currently displayed then + * the first message is shown. + * + * PARAMETERS: direction to find the next message + * + * RETURNED: true if a message is found + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/96 Initial Revision + * roger 6/17/97 Added scrolling backwards + * + ***********************************************************************/ +static Boolean MessageViewNextMessage (Int16 direction) +{ + UInt16 recordNum; + Boolean messageFound; + + // Find the next record + recordNum = CurrentRecord; + messageFound = SeekRecord (&recordNum, 1, direction); + + if (!messageFound && MessagesInCategory > 1) + { + if (direction == dmSeekBackward) + { + //go to the last record in the category + //we are at the first record, seek MessagesInCategory - 1 records forward + messageFound = SeekRecord (&recordNum, MessagesInCategory - 1, dmSeekForward); + } + else + { + //go to the first record in the category + //we are at the last record, seek MessagesInCategory - 1 records backwards + messageFound = SeekRecord (&recordNum, MessagesInCategory - 1, dmSeekBackward); + } + } + + if (messageFound) + { + CurrentRecord = recordNum; +//update the buttons +//mgmg mg add this code + MessageViewEnableButtons(FrmGetActiveForm ()); +//end code + MessageViewDrawMessage (); + } + + return messageFound; +} + + +/*********************************************************************** + * + * FUNCTION: NewViewUpdateScrollBar + * + * DESCRIPTION: This routine visually updates the new message view's scroll + * bar. + * + * PARAMETERS: table - pointer to the new message tabel + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 12/12/96 Initial Revision + * + ***********************************************************************/ +static void NewViewUpdateScrollBar (void) +{ + UInt16 width; + UInt16 lines; + Int16 rowID; + UInt16 pos; + Int16 rowLines; + UInt16 maxLines; + Int16 row, column; + Int16 pageSize; + Int16 maxValue; + FontID currFont; + Char * textP; + TablePtr table; + FieldPtr fld; + MemHandle recordH; + ScrollBarPtr bar; + RectangleType r; + MailDBRecordType record; + + currFont = FntSetFont (EditFont); + + table = GetObjectPtr (NewTable); + + + // Copute the page size, + TblGetBounds (table, &r); + pageSize = (r.extent.y / FntLineHeight ()) - 1; + + + // Compute the height of all the rows + MailGetRecord (MailDB, NewRecord, &record, &recordH); + width = TblGetColumnWidth (table, newTextColumn); + + + // If we're editing the body field then get scroll position within the + // body text. + if (TblEditing(table)) + { + TblGetSelection (table, &row, &column); + if (TblGetRowID (table, row) == newBodyRow) + { + fld = TblGetCurrentField (table); + NewScrollPosition [newBodyRow] = FldGetScrollPosition (fld); + } + } + + + // Get the scroll values of the body row. + FntGetScrollValues (record.body, width, NewScrollPosition [newBodyRow], + &lines, &pos); + TblFindRowID (table, newBodyRow, &row); + rowLines = TblGetRowHeight (table, row) / FntLineHeight (); + + + /* CS2 (43540): The scroll logic is a little odd, but it makes sense once you think + about it. Here goes. The body field can be autoscrolled, if you drag across it. + When this happens, it does -not- resize in the message form. Therefore, we don't + want to count the lines that are scrolled out of view when we're calculating the + scroll bar values. -However-, if the body field is the topmost displayed row in + the table, then when you scroll up, you will scroll up through the body field + first, then the rows above it will be added to the table once you reach the top. + SO, if the body field is not the top row, we subtract off the number of lines + currently scrolled out of view from the total number of lines. Whew. + */ + //if ( 0 != row ) + // { + // lines -= pos; + // pos = 0; + // } + + + lines = max (lines, rowLines); + + + for (rowID = newToRow; rowID < newBodyRow; rowID++) + { + if (rowID == newBCCRow && (! NewViewShowBCC)) + continue; + + //is the row visible? + if (TblFindRowID (table, rowID, &row)) + { + rowLines = TblGetRowHeight (table, row) / FntLineHeight (); + } + else + { + switch (rowID) + { + case newToRow: + textP = record.to; + maxLines = maxNewAddressLines; + break; + case newCCRow: + textP = record.cc; + maxLines = maxNewAddressLines; + break; + case newBCCRow: + textP = record.bcc; + maxLines = maxNewAddressLines; + break; + case newSubjectRow: + textP = record.subject; + maxLines = maxNewSubjectLines; + break; + } + rowLines = min (FldCalcFieldHeight (textP, width), maxLines); + pos += rowLines; + } + + lines += rowLines; + } + + + if (lines > pageSize + 1) + { + maxValue = lines - pageSize - 1; + } + else + { + maxValue = 0; + pos = 0; + } + + + bar = GetObjectPtr (NewScrollBar); + SclSetScrollBar (bar, pos, 0, maxValue, pageSize); + + MemHandleUnlock (recordH); + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewScroll + * + * DESCRIPTION: This routine scrolls the new message view. It is called + * when the scroll bar sends a scroll event or when the + * winUp or doww button is pressed. + * + * PARAMETERS: linesToScroll - line to scroll, if < 0 then scroll winUp, + * if > 0 then scroll winDown. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/17/96 Initial Revision + * + ***********************************************************************/ +static void NewViewScroll (Int16 linesToScroll) +{ + Int16 i; + Int16 row; + UInt16 lines; + UInt16 rowID; + Int16 width; + Int16 length; + Int16 height; + Int16 columnWidth; + Int16 value; + Int16 minValue; + Int16 maxValue, maxDelta; + Int16 pageSize; + FontID currFont; + Char * chars; + TablePtr table; + MemHandle recordH; + ScrollBarPtr bar; + RectangleType r; + MailDBRecordType record; + + currFont = FntSetFont (EditFont); + + table = GetObjectPtr (NewTable); + + TblReleaseFocus (table); + + MailGetRecord (MailDB, NewRecord, &record, &recordH); + + rowID = TblGetRowID (table, 0); + + columnWidth = TblGetColumnWidth (table, newTextColumn); + + maxDelta = 0; + + // Scroll winUp. + if (linesToScroll < 0) + { + if (rowID == newBodyRow && NewScrollPosition [newBodyRow]) + { + lines = -linesToScroll; + FntWordWrapReverseNLines (record.body, columnWidth, &lines, + &NewScrollPosition [newBodyRow]); + linesToScroll += lines; + } + + while (linesToScroll < 0 && rowID> newToRow) + { + TblInsertRow (table, 0); + if (rowID-1 == newBCCRow && (! NewViewShowBCC)) + rowID -= 2; + else + rowID--; + + height = NewViewGetFieldHeight (NewRecord, rowID, columnWidth); + NewViewInitRow (table, 0, rowID, height); + + linesToScroll += height / FntLineHeight(); + } + } + + + + // Scroll winDown. + else if (linesToScroll > 0) + { + while (linesToScroll > 0 && rowID < newBodyRow) + { + height = TblGetRowHeight (table, 0); + TblRemoveRow (table, 0); + linesToScroll -= height / FntLineHeight ();; + rowID++; + if (rowID == newBCCRow && (! NewViewShowBCC)) + rowID++; + + /* CS2 (43540): While scrolling down, if we cause the body row to hit the top, + we have to resynch the scroll bar, because when we start scrolling back up, + we will go through the body field first. If the body field happens to be + scrolled, this will cause the scrollbar to jump and the thumb to resize. + Looks odd, but it keeps things in synch. + */ + if ( newBodyRow == rowID ) + { + maxDelta = NewScrollPosition[newBodyRow]; + } + } + + if (linesToScroll > 0) + { + width = TblGetColumnWidth (table, newTextColumn); + while (linesToScroll) + { + chars = &record.body[NewScrollPosition [newBodyRow]]; + length = FntWordWrap (chars, width); + if (! length) break; + + NewScrollPosition [newBodyRow] += length; + linesToScroll--; + } + + TblMarkRowInvalid (table, 0); + } + } + + MemHandleUnlock (recordH); + + + // Reinitialize the message row so that it has the correct height. + TblFindRowID (table, newBodyRow, &row); + TblGetBounds (table, &r); + height = r.extent.y; + for (i = 0; i < row; i++) + height -= TblGetRowHeight (table, i); + NewViewInitRow (table, row, newBodyRow, height); + + if ( 0 != maxDelta ) + { + /* CS2 (43540): Do the complete job of recalculating the scroll bar. */ + NewViewUpdateScrollBar(); + } + // The "to", "cc", "bcc", and "subject" fields alway scroll there entire + // height when moved on or off the display. This causes the scroll bar + // to be out of sync with what is displayed. + else if ( linesToScroll != 0 ) + { + bar = GetObjectPtr (NewScrollBar); + SclGetScrollBar (bar, &value, &minValue, &maxValue, &pageSize); + value -= linesToScroll; + SclSetScrollBar (bar, value, minValue, maxValue, pageSize); + } + + + TblMarkTableInvalid (table); + TblRedrawTable (table); + + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewPageScroll + * + * DESCRIPTION: This routine scrolls the message creation view winUp + * or winDown by a page. + * + * PARAMETERS: direction winUp or winDown + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 11/14/96 Initial Revision + * + ***********************************************************************/ +static void NewViewPageScroll (WinDirectionType direction) +{ + UInt16 linesToScroll; + Int16 value; + Int16 minValue; + Int16 maxValue; + Int16 pageSize; + FontID currFont; + TablePtr table; + ScrollBarPtr bar; + RectangleType r; + + + // Determine if we should scroll at all. + bar = GetObjectPtr (NewScrollBar); + SclGetScrollBar (bar, &value, &minValue, &maxValue, &pageSize); + if (direction == winUp) + { + if (value == minValue) + return; + } + else + { + if (value == maxValue) + return; + } + + + // Copute the page size, + currFont = FntSetFont (EditFont); + table = GetObjectPtr (NewTable); + TblGetBounds (table, &r); + pageSize = (r.extent.y / FntLineHeight ()); + FntSetFont (currFont); + + + // Scroll the view. + linesToScroll = pageSize - 1; + if (direction == winUp) + { + if (linesToScroll > value - minValue) + linesToScroll = value - minValue; + linesToScroll = -linesToScroll; + } + else + { + if (linesToScroll > maxValue - value) + linesToScroll = maxValue - value; + } + NewViewScroll (linesToScroll); + + NewViewRestoreEditState (); + + // Update the scroll bar. + value += linesToScroll; + SclSetScrollBar (bar, value, minValue, maxValue, pageSize); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewNextField + * + * DESCRIPTION: If a field is being edited, advance the focus to the + * next or previous field in the table. + * + * PARAMETERS: direction - winDown (next) or winUp (previous) + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/27/95 Initial Revision + * + ***********************************************************************/ +static void NewViewNextField (WinDirectionType direction) +{ + Int16 row; + Int16 sRow; + Int16 rowID; + Int16 column; + TablePtr table; + FieldPtr fld; + FieldAttrType attr; + UInt16 zeroRowID; + ScrollBarPtr bar; + Int16 value, min, max, pageSize; + Int16 columnWidth; + + + // Find out which field is being edited. + table = GetObjectPtr (NewTable); + if (! TblEditing (table)) + return; + + TblGetSelection (table, &row, &column); + rowID = TblGetRowID (table, row); + sRow = row; + if (direction == winDown) + { + if (rowID >= newBodyRow) + { + rowID = 0; + + //find the rowID...the table may need to be scrolled + //get the rowID of the 0 row. then figure out how many to scroll + zeroRowID = TblGetRowID (table, sRow); + sRow = newToRow - zeroRowID; + + bar = GetObjectPtr (NewScrollBar); + SclGetScrollBar (bar, &value, &min, &max , &pageSize); + if (max > 0) + { + sRow = value * -1; + } + //add the number of lines of body that is above the screen + //mgmgmg + } + else + { + row++; + sRow = row; + } + } + else //UP + { + //if the row id is 0 then we want to wrap around and select the body row... + if (rowID == 0) + { + TblFindRowID (table, newBodyRow, &row); + sRow = row; + } + else if (rowID >= newBodyRow) + { + //is the subject row visible? + TblFindRowID (table, newSubjectRow, &row); + row = TblGetRowID (table, row); + if (row == newSubjectRow) + { + //yes + sRow --; + } + else + { + //subject is not visible...how far winUp is it? + bar = GetObjectPtr (NewScrollBar); + SclGetScrollBar (bar, &value, &min, &max , &pageSize); + columnWidth = TblGetColumnWidth (table, newTextColumn); + + value -= NewViewGetLineCount (NewRecord, newToRow, columnWidth); + value -= NewViewGetLineCount (NewRecord, newCCRow, columnWidth); + value -= NewViewGetLineCount (NewRecord, newSubjectRow, columnWidth); + if (NewViewShowBCC) + value -= NewViewGetLineCount (NewRecord, newBCCRow, columnWidth); + + sRow = (value + 1) * -1; + } + } + else + //select the previous row + sRow--; + } + + if (sRow < 0) + { + //scroll the table winUp, and select the first row + NewViewScroll (sRow); + NewViewUpdateScrollBar (); + sRow = 0; + } + + NewViewClearEditState (); + + NewViewCurrentRowID = TblGetRowID (table, sRow); + + NewViewRestoreEditState (); + + fld = TblGetCurrentField (table); + if (fld) + { + FldGetAttributes (fld, &attr); + if (! fld->attr.insPtVisible) + { + FldMakeFullyVisible (fld); + } + } + +/* + if (NewViewCurrentRowID == newBodyRow) + { + if (TblGetRowID (table, 0) != newBodyRow) + { + FieldPtr fld; + FieldAttrType attr; + + } + } +*/ + + + ItemSelected = true; +/* + Int16 row; + Int16 rowID; + Int16 column; + TablePtr table; + + + // Find out which field is being edited. + table = GetObjectPtr (NewTable); + if (! TblEditing (table)) + return; + + TblGetSelection (table, &row, &column); + rowID = TblGetRowID (table, row); + if (direction == winDown) + { + if (rowID >= newBodyRow) + row = 0; + else + row++; + } + else + { + if (row == 0) + TblFindRowID (table, newBodyRow, &row); + else + row--; + } + + NewViewClearEditState (); + + NewViewCurrentRowID = TblGetRowID (table, row); + + NewViewRestoreEditState (); + + ItemSelected = true; +*/ +} + + +/*********************************************************************** + * + * FUNCTION: NewViewResizeBodyField + * + * DESCRIPTION: This routine sets the height of the body field to: + * the height of the table minus the height of any other + * visible lines. + * + * PARAMETERS: table - pointer to a table object. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 12/13/96 Initial Revision + * mgolden 10/6/97 changed for the rocky fonts + * + ***********************************************************************/ +static void NewViewResizeBodyField (TablePtr table) +{ + Int16 i; + Int16 row, maxRows; + UInt16 height; + RectangleType r; + FieldPtr fld; + + //new mg + if (!TblFindRowID (table, newBodyRow, &row)) + { + //show the body field + maxRows = TblGetNumberOfRows(table); + for ( row = 0; row < maxRows; row ++) + { + if (TblGetRowID (table, row) == newBodyRow) + break; + } + if (row == maxRows) + { + //this is an error...what should we do here? + return; + } + + //set the row usable + TblSetRowUsable ( table, row, true); + } + + TblGetBounds (table, &r); + height = r.extent.y; + for (i = 0; i < row; i++) + height -= TblGetRowHeight (table, i); + + if (TblGetRowHeight (table, row) != height) + TblMarkRowInvalid (table, row); + + TblSetRowHeight (table, row, height); + + //do we need to resize the field? (only if we are editing the body!) + if (NewViewCurrentRowID == newBodyRow) + { + fld = TblGetCurrentField (table); + + if (fld->rect.extent.y != height) + { + RctCopyRectangle (&(fld->rect), &r); + r.extent.y = height; + FldSetBounds (fld, &r); + } + }//if + + //do we need to resize the field? + // + //FldSetInsPtPosition (&table->currentField, + // event->data.fldHeightChanged.currentPos); + + +} + + +/*********************************************************************** + * + * FUNCTION: NewViewResizeFieldHeight + * + * DESCRIPTION: This routine is called when the height of a line in + * the Edit View is changed as a result of user input. + * If the new height of the field is shorter, more items + * may need to be added to the top of the list. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/6/96 Initial Revision + * + ***********************************************************************/ +static void NewViewResizeFieldHeight (EventPtr event) +{ + Int16 row, i; + Int16 column; + UInt16 newRowID; + UInt16 rowID; + Int16 height; + Int16 freeSpace; + Int16 newHeight; + Int16 maxHeight; + Int16 columnWidth; + FontID currFont; + Boolean insPtState; + FieldPtr fld; + TablePtr table; + RectangleType fieldR; + + + // Get the current height of the field; + fld = event->data.fldHeightChanged.pField; + FldGetBounds (fld, &fieldR); + + // Get the id of the current row. + table = GetObjectPtr (NewTable); + TblGetSelection (table, &row, &column); + NewViewCurrentRowID = TblGetRowID (table, row); + rowID = NewViewCurrentRowID; + + columnWidth = TblGetColumnWidth (table, newTextColumn); + + // Is the field's height contracting? + if (event->data.fldHeightChanged.newHeight < fieldR.extent.y) + { + // if there are no items scrolled off the top of the table, + // scroll the text of the field winUp. + if (TblGetRowID (table, 0) == 0) + { + if (rowID == newBodyRow) + { + goto doBodyRowThing; + //return; + } + else + { + TblHandleEvent (table, event); + + // Add the freed space to the "body" field. + NewViewResizeBodyField (table); + TblRedrawTable (table); + } + } + + + // Add an item to the table to fill in the space made available by the + // shortening the field. This is because as the field shortens, we may + // now have space to show the fields above it...picture the bodfy field + // is expanded to fill the screen, as the user deletes lines, and once + // it is small enough not to fill the screen, the field dire3ctly above + // the body (the subject) should now be visible. (ie scroll into view) + else + { + freeSpace = fieldR.extent.y - event->data.fldHeightChanged.newHeight; + newRowID = TblGetRowID (table, 0); + + while (newRowID > newToRow && freeSpace) + { + // Add a row to the top of the table an initialize it. + if (newRowID-1 == newBCCRow && (! NewViewShowBCC)) + newRowID -= 2; + else + newRowID--; + height = NewViewGetFieldHeight (NewRecord, newRowID, columnWidth); + if (height > freeSpace) + break; + + // If there room to scroll a field onto the screen then do it. + TblInsertRow (table, 0); + NewViewInitRow (table, 0, newRowID, height); + + freeSpace -= height; + } + + if (freeSpace != fieldR.extent.y - event->data.fldHeightChanged.newHeight) + { + // Reinitialize the current row so that it has the correct size. + if (rowID != newBodyRow) + { + height = NewViewGetFieldHeight (NewRecord, rowID, columnWidth); + TblFindRowID (table, rowID, &row); + NewViewInitRow (table, row, rowID, height); + } + + // Add the freed space to the "body" field. + NewViewResizeBodyField (table); + + insPtState = InsPtEnabled (); + InsPtEnable (false); + + TblMarkTableInvalid (table); + TblRedrawTable (table); + + InsPtEnable (insPtState); + } + } + } + + // The field's height is expanding, have the table object resize the field. + // OR the field is the body field and we need to do the stuff below anyway. + else + { +doBodyRowThing: + + currFont = FntSetFont (EditFont); + newHeight = event->data.fldHeightChanged.newHeight; + + if (rowID == newSubjectRow) + maxHeight = maxNewSubjectLines * FntLineHeight (); + else + maxHeight = maxNewAddressLines * FntLineHeight (); + + if (rowID != newBodyRow && + newHeight > maxHeight && + TblGetRowHeight (table, row) >= maxHeight) + { + FldSetInsPtPosition (fld, event->data.fldHeightChanged.currentPos); + InsPtEnable (true); + } + else + { + if (rowID != newBodyRow && newHeight > maxHeight) + event->data.fldHeightChanged.newHeight = maxHeight; + else if (rowID == newBodyRow && row == 0) + { + //set the max height based on the font + maxHeight = table->bounds.extent.y; + + if (row == 0) + { + //get the max size of the body field + // subtract the fields above it + for (i = 0; i < row; i++) + maxHeight -= TblGetRowHeight (table, i); + } + + //is the new height larger than the size that the table want's to grow? + if (newHeight > maxHeight) + // set the new size to the max Size + event->data.fldHeightChanged.newHeight = maxHeight; + } + + //in all cases...make sure that the .newHeight is not > than the table height! + if (event->data.fldHeightChanged.newHeight > table->bounds.extent.y) + event->data.fldHeightChanged.newHeight = table->bounds.extent.y; + + TblHandleEvent (table, event); + + NewViewResizeBodyField (table); + + fld = TblGetCurrentField (table); + NewScrollPosition [rowID] = FldGetScrollPosition (fld); + + if (rowID != newBodyRow) + { + TblMarkTableInvalid (table); + TblRedrawTable (table); + } + } + FntSetFont (currFont); + } + + NewViewUpdateScrollBar (); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewItemSelected + * + * DESCRIPTION: This routine is called when an item in the new table is + * selected. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static Boolean NewViewItemSelected (EventPtr event) +{ + Int16 rowID; + TablePtr table; + Boolean handled = false; + + table = event->data.tblSelect.pTable; + rowID = TblGetRowID (table, event->data.tblSelect.row); + + + // Keep track of which row we're in with the global variable. We + // need this information to draw the correct title on view such as + // the Lookup View. + switch (rowID) + { + case newToRow: EditViewField = editToField; break; + case newCCRow: EditViewField = editCCField; break; + case newBCCRow: EditViewField = editBCCField; break; + case newSubjectRow: EditViewField = editSubjectField; break; + case newBodyRow: EditViewField = editBodyField; break; + } + + + // If we've changed row then store the new row in a global variable, + // we need this information so that we can later restore the edit + // state of the tabe. + // If the item selected is a label clear the edit state. + if (NewViewCurrentRowID != rowID) + { + if (event->data.tblSelect.column == newLabelColumn) + { + ClearEditState (); + NewViewCurrentRowID = rowID; + if (rowID != newBodyRow) + NewViewRestoreEditState (); + else + { + EditPosition = EditBodyPosition; + EditSelectionLength = 0; + } + } + else + NewViewCurrentRowID = rowID; + } + + + if (event->data.tblSelect.column == newLabelColumn) + { + + EditViewEditRecord = true; + FrmGotoForm (EditView); + handled = true; + } + + ItemSelected = true; + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewDoCommand + * + * DESCRIPTION: This routine preforms the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: true if the menu command was handled + * + * HISTORY: + * 06/26/96 art Created by Art Lamb. + * 08/28/00 kwk Use new FrmGetActiveField trap. + * + ***********************************************************************/ +static Boolean NewViewDoCommand (UInt16 command) +{ + Int16 row; + Int16 column; + Boolean deleted; + FieldPtr fld; + TablePtr table; + Boolean handled = true; + + switch (command) + { + case newSaveDraftMenuCmd: + NewViewClearEditState (); + if (SaveDraftMessage (true, &deleted, true)) + //mgmg + //FrmGotoForm (ListView); + FrmGotoForm (ReturnToView); + break; + + case newLookupMenuCmd: + table = GetObjectPtr (NewTable); + if (TblEditing (table)) + { + TblGetSelection (table, &row, &column); + switch (TblGetRowID (table, row)) + { + case newToRow: + case newCCRow: + case newBCCRow: + fld = FrmGetActiveField (NULL); + AddressLookup (fld); + break; + + default: + SndPlaySystemSound (sndError); + } + } + else + SndPlaySystemSound (sndError); + break; + + case newPreferencesMenuCmd: + FrmPopupForm (PrefDialog); + break; + + case newHotSyncMenuCmd: + FrmPopupForm (SyncDialog); + break; + + case newPurgeMenuCmd: + PurgeDeletedRecord (); + break; + + case newAboutMenuCmd: + AbtShowAbout (sysFileCMail); + break; + + case newChangeFontMenuCmd: + NewViewToggleFont(); + break; + + default: + handled = false; + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewGetLineCount + * + * DESCRIPTION: This routine returns the height, in # of rows, of a field + * in a mail message. + * + * PARAMETERS: recordNum - record index + * width - width of description + * + * RETURNED: height in pixels + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 11/28/96 Initial Revision + * + ***********************************************************************/ +static UInt16 NewViewGetLineCount (UInt16 recordNum, Int16 rowID, UInt16 width) +{ + UInt16 height; + UInt16 maxLines; + FontID curFont; + Char * textP; + MemHandle recordH; + MailDBRecordType record; + + MailGetRecord (MailDB, recordNum, &record, &recordH); + ErrFatalDisplayIf ((! recordH), "Record not found"); + + // Compute the height of the to do item's description. + curFont = FntSetFont (EditFont); + + switch (rowID) + { + case newToRow: + textP = record.to; + maxLines = maxNewAddressLines; + break; + + case newCCRow: + textP = record.cc; + maxLines = maxNewAddressLines; + break; + + case newBCCRow: + textP = record.bcc; + maxLines = maxNewAddressLines; + break; + + case newSubjectRow: + textP = record.subject; + maxLines = maxNewSubjectLines; + break; + + case newBodyRow: + textP = record.body; + maxLines = maxFieldLines; + break; + } + + height = FldCalcFieldHeight (textP, width); + height = min (height, maxLines); + + FntSetFont (curFont); + + MemHandleUnlock (recordH); + + return (height); +} + +/*********************************************************************** + * + * FUNCTION: NewViewGetFieldHeight + * + * DESCRIPTION: This routine returns the height, in pixels, of a field + * in a mail message. + * + * PARAMETERS: recordNum - record index + * width - width of description + * + * RETURNED: height in pixels + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 11/28/96 Initial Revision + * + ***********************************************************************/ +static UInt16 NewViewGetFieldHeight (UInt16 recordNum, Int16 rowID, UInt16 width) +{ + UInt16 height; + UInt16 maxLines; + FontID curFont; + Char * textP; + MemHandle recordH; + MailDBRecordType record; + + MailGetRecord (MailDB, recordNum, &record, &recordH); + ErrFatalDisplayIf ((! recordH), "Record not found"); + + // Compute the height of the to do item's description. + curFont = FntSetFont (EditFont); + + switch (rowID) + { + case newToRow: + textP = record.to; + maxLines = maxNewAddressLines; + break; + + case newCCRow: + textP = record.cc; + maxLines = maxNewAddressLines; + break; + + case newBCCRow: + textP = record.bcc; + maxLines = maxNewAddressLines; + break; + + case newSubjectRow: + textP = record.subject; + maxLines = maxNewSubjectLines; + break; + + case newBodyRow: + textP = record.body; + maxLines = maxFieldLines; + break; + } + + height = FldCalcFieldHeight (textP, width); + height = min (height, maxLines); + height *= FntLineHeight (); + + FntSetFont (curFont); + + MemHandleUnlock (recordH); + + return (height); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewHandleKey + * + * DESCRIPTION: This routine handles special processing of key events + * in the New View. If a key event is received while the + * body field has the focus and the insertion point in not + * visible, then the table needs to be scrolled + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 12/15/96 Initial Revision + * + ***********************************************************************/ +static Boolean NewViewHandleKey (EventPtr event) +{ + Boolean handled = false; + FieldPtr fld; + TablePtr table; + FieldAttrType attr; + + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + return (false); + + if (NewViewCurrentRowID == newBodyRow) + { + table = GetObjectPtr (NewTable); + if (TblGetRowID (table, 0) != newBodyRow) + { + fld = TblGetCurrentField (table); + if (fld) + { + FldGetAttributes (fld, &attr); + if ( ! fld->attr.insPtVisible) + { + if (FldMakeFullyVisible (fld)) + { + handled = true; + EvtAddEventToQueue (event); + } + } + } + } + } + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: NewViewInitRow + * + * DESCRIPTION: This routine initializes a row of the "Edit View" table. + * + * PARAMETERS: table - pointer to a table object + * row - row to initialize + * rowID - id of row + * height - row height in pixels + * + * RETURNED: tnothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/6/96 Initial Revision + * MGolden 10/3/97 added rocky font code + * + ***********************************************************************/ +static void NewViewInitRow (TablePtr table, Int16 row, Int16 rowID, UInt16 height) +{ + + TblSetItemStyle (table, row, newLabelColumn, customTableItem); + TblSetItemStyle (table, row, newTextColumn, textTableItem); + + + TblSetRowUsable (table, row, true); + + TblSetRowID (table, row, rowID); + + TblSetRowHeight (table, row, height); + + // font code + TblSetItemFont (table, row, newLabelColumn, stdFont); + TblSetItemFont (table, row, newTextColumn, EditFont); +} + + +/* TRG */ +/*********************************************************************** + * + * FUNCTION: NewViewResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void NewViewResize(Boolean draw) +{ + FormPtr frmP; + Coord xDiff, yDiff; + Coord x,y; + TablePtr tableP; + Boolean editing; + RectangleType r; + + WinGetDisplayExtent(&x, &y); + + // this will get the old extent + // resize form + frmP = FrmGetActiveForm(); + FrmGetFormBounds(frmP, &r); + + xDiff = x - (r.topLeft.x + r.extent.x); + yDiff = y - (r.topLeft.y + r.extent.y); + if ((xDiff == 0) && (yDiff == 0)) + return; + + // resize form + r.extent.x += xDiff; + r.extent.y += yDiff; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + + // Need to erase the table first, otherwise it will erase moved controls + // when shrinking it. Also, FrmHideObject doesn't do anything for tables. + tableP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, NewTable)); + editing = TblEditing(tableP); + if (draw) + { + TblReleaseFocus(tableP); + TblEraseTable(tableP); + } + + TblGetBounds(tableP, &r); + r.extent.x += xDiff; + r.extent.y += yDiff; + gNewViewTableHeight = r.extent.y; + TblSetBounds(tableP, &r); + +// x = TblGetColumnWidth(tableP, newTextColumn); +// TblSetColumnWidth(tableP, newTextColumn, x + xDiff); + TblSetColumnWidth(tableP, newTextColumn, r.extent.x - (TblGetColumnWidth(tableP, newLabelColumn) + spaceAfterLabel)); + + if(draw && (yDiff < 0)) + { + r.topLeft.y = (r.topLeft.y + r.extent.y); + r.extent.y = -yDiff; + WinEraseRectangle (&r, 0); + } + + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, NewSendButton), 0, yDiff, draw); + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, NewCancelButton), 0, yDiff, draw); + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, NewDetailsButton), 0, yDiff, draw); + + ToolsMoveObject(frmP, ToolsFrmGetGSI(frmP), xDiff, yDiff, draw); + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, NewScrollBar), xDiff, 0, false); + ToolsResizeObject(frmP, FrmGetObjectIndex(frmP, NewScrollBar), 0, yDiff, draw); + + if (draw) + { + NewViewLoadTable(frmP); + FrmDrawForm(frmP); + if (editing) + NewViewRestoreEditState(); + } + +} +/* end TRG */ + +/*********************************************************************** + * + * FUNCTION: NewViewInit + * + * DESCRIPTION: This routine initializes the "Edit View" of the + * Mail application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has MemHandle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/5/96 Initial Revision + * MGolden 7/7/97 add some space after the label column + * mgolden 10/6/97 changed for the rocky fonts + * + ***********************************************************************/ +static void NewViewInit (FormPtr frm) +{ + MemHandle recordH; + MailDBRecordType record; + TablePtr table; + + NewViewResize(false); + + MailGetRecord (MailDB, NewRecord, &record, &recordH); + + if (RestoreFromEditView) + { + //check the stashed NewViewShowBCC + NewViewShowBCC = StashedNewViewShowBCC; + RestoreFromEditView = false; + } + + + // If the record has a BCC field, make sure it is visible. + if (!NewViewShowBCC) + { + NewViewShowBCC = (*record.bcc != 0); + } + + // If we'er replying to or forwarding a message then set the insertion + // point's position in the body field to the start of the text, otherwise + // place the insertion point at the end. + if (CurrentCategory == inboxCategory || CurrentCategory == filedCategory) + EditBodyPosition = 0; + else + EditBodyPosition = StrLen (record.body); + + MemHandleUnlock (recordH); + + //remember the table height... + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, NewTable)); + gNewViewTableHeight = table->bounds.extent.y; + + NewViewLoadTable(frm); + } + +/*********************************************************************** + * + * FUNCTION: NewViewLoadTable + * + * DESCRIPTION: Loads the rows of the table (broken out from NewViewInit) + * so the change font code can re-load the table + * + * PARAMETERS: FormPtr + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 10/6/97 initial revision + * mgolden 10/6/97 changed for the rocky fonts + * + ***********************************************************************/ +static void NewViewLoadTable(FormPtr frm) + { + Int16 i; + Int16 row; + Int16 rowID; + UInt16 height; + UInt16 bodyHeight; + Int16 columnWidth; + Int16 rowsInTable; + TablePtr table; + RectangleType tableR; + FontID currFont; + + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, NewTable)); + + /* HandEra */ + if (vgaExists) + VgaTableUseBaseFont(table, !VgaIsVgaFont(EditFont)); + /* end HandEra */ + + //set the bounds of the table, to a direct multiple of the current fontHeight + currFont = FntSetFont (EditFont); + table->bounds.extent.y = (gNewViewTableHeight / FntLineHeight ()) * FntLineHeight (); + FntSetFont (currFont); + + columnWidth = TblGetColumnWidth (table, newTextColumn); + TblGetBounds (table, &tableR); + bodyHeight = tableR.extent.y; + + rowID = newToRow; + + //rowsInTable = NewViewNumberOfRows (table); + rowsInTable = TblGetNumberOfRows (table); + for (row = 0; row < rowsInTable; row++) + { + if (rowID <= newBodyRow) + { + if (rowID < newBodyRow) + { + height = NewViewGetFieldHeight (NewRecord, rowID, columnWidth); + bodyHeight -= height; + } + else + height = bodyHeight; + + NewViewInitRow (table, row, rowID, height); + + if (rowID+1 == newBCCRow && (! NewViewShowBCC)) + rowID += 2; + else + rowID++; + } + else + TblSetRowUsable (table, row, false); + } + + TblSetColumnUsable (table, newLabelColumn, true); + TblSetColumnUsable (table, newTextColumn, true); + + // add some space after the label column + TblSetColumnSpacing (table, newLabelColumn, spaceAfterLabel); + + // Set the callback routine that will draw the labels. + TblSetCustomDrawProcedure (table, newLabelColumn, NewViewDrawLabel); + + // Set the callback routines that will load and save fields + // of the mail message. + TblSetLoadDataProcedure (table, newTextColumn, (TableLoadDataFuncPtr) NewViewGetField); + TblSetSaveDataProcedure (table, newTextColumn, (TableSaveDataFuncPtr) NewViewSaveEditState); + + TblHasScrollBar (table, true); + + //init the scroll position + for (i = newToRow; i <= newBodyRow; i++) + NewScrollPosition [i] = 0; + + NewViewUpdateScrollBar (); + } + +/*********************************************************************** + * + * FUNCTION: NewViewHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Edit View" + * of the Mail application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/5/96 Initial Revision + * MGolden 7/14/947 added MessageViewCleanUpRevert + * CSS 06/22/99 Standardized keyDownEvent handling + * (TxtCharIsHardKey, commandKeyMask, etc.) + * + ***********************************************************************/ +static Boolean NewViewHandleEvent (EventPtr event) +{ + UInt32 uniqueID; + FormPtr frm; + FieldPtr fld; + TablePtr table; + Boolean deleted; + Boolean handled = false; + FieldAttrType attr; + + + if (event->eType == keyDownEvent) + { + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + { + } + else if (EvtKeydownIsVirtual(event)) + { + // Scroll winUp key presed? + if (event->data.keyDown.chr == vchrPageUp) + { + NewViewPageScroll (winUp); + handled = true; + } + + // Scroll winDown key presed? + else if (event->data.keyDown.chr == vchrPageDown) + { + NewViewPageScroll (winDown); + handled = true; + } + + // Move the focus to the next field ? + else if (event->data.keyDown.chr == vchrNextField) + { + NewViewNextField (winDown); + handled = true; + } + + // Move the focus to the previous field ? + else if (event->data.keyDown.chr == vchrPrevField) + { + NewViewNextField (winUp); + handled = true; + } + + // DOLATER CSS - Figure out if we still need to call this guy to + // process other virtual characters. + else + handled = NewViewHandleKey (event); + } + + // Don't allow linefeeds in the subject field. + else if (event->data.keyDown.chr == chrLineFeed) + handled = (NewViewCurrentRowID == newSubjectRow); + + else + handled = NewViewHandleKey (event); + } + + + else if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case NewSendButton: + if (SendMessage ()) + { + MessageViewCleanUpRevert(); + ClearEditState (); + FrmGotoForm (ReturnToView); + } + else + { + FrmUpdateForm (NewView, updateReinitialize); + } + handled = true; + break; + + case NewCancelButton: + if (SaveDraftMessage (false, &deleted, false)) + { + MessageViewCleanUpRevert(); + ClearEditState (); + FrmGotoForm (ReturnToView); + } + else + NewViewRestoreEditState (); + handled = true; + break; + + case NewDetailsButton: + FrmPopupForm (DetailsDialog); + handled = true; + break; + } + } + + + else if (event->eType == ctlExitEvent) + { + switch (event->data.ctlExit.controlID) + { + case NewSendButton: + case NewCancelButton: + case NewDetailsButton: + NewViewRestoreEditState (); + break; + } + } + + + else if (event->eType == fldHeightChangedEvent) + { + NewViewResizeFieldHeight (event); + handled = true; + } + + + else if (event->eType == fldChangedEvent) + { + NewViewUpdateScrollBar (); + handled = true; + } + + + else if (event->eType == tblEnterEvent) + { + if (event->data.tblEnter.column == newTextColumn) + { + table = event->data.tblEnter.pTable; + if (TblEditing (table)) + { + fld = TblGetCurrentField (table); + FldGetAttributes (fld, &attr); + attr.dynamicSize = false; + FldSetAttributes (fld, &attr); + } + + TblHandleEvent (table, event); + handled = true; + + // Restore the dynamiclly resizeable attribute that + // was cleared in NewViewGetField to allow drag selection. + fld = TblGetCurrentField (table); + FldGetAttributes (fld, &attr); + attr.dynamicSize = true; + FldSetAttributes (fld, &attr); + + /* CS2 (43540): when the body field is auto-scrolled, the scrollbar can get + out of synch. We can't let that happen! + */ + NewViewUpdateScrollBar(); + } + } + + + else if (event->eType == tblSelectEvent) + { + handled = NewViewItemSelected (event); + } + + + else if (event->eType == tblExitEvent) + { + NewViewRestoreEditState (); + handled = true; + } + + + else if (event->eType == menuEvent) + { + handled = NewViewDoCommand (event->data.menu.itemID); + } + + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + if (vgaExists) + VgaFormModify(frm, vgaFormModify160To240); +/* end HandEra */ + NewViewInit (frm); + FrmDrawForm (frm); + + NewViewRestoreEditState (); + handled = true; + } + + + else if (event->eType == frmUpdateEvent) + { + if (event->data.frmUpdate.updateCode == updateRestoreFocus) + { + NewViewRestoreEditState (); + handled = true; + } + else if (event->data.frmUpdate.updateCode == updateReinitialize) + { + frm = FrmGetActiveForm (); + table = GetObjectPtr (NewTable); + TblEraseTable (table); + ClearEditState (); + + NewViewCurrentRowID = editToField; + NewViewInit (frm); + TblDrawTable (table); + NewViewRestoreEditState (); + handled = true; + } + } + + + else if (event->eType == frmSaveEvent) + { + // Save the unique id of the unsent message if there is one. + DmRecordInfo (MailDB, NewRecord, NULL, &uniqueID, NULL); + NewViewClearEditState (); + SaveDraftMessage (true, &deleted, false); + if (deleted) + uniqueID = 0; + MailSetUnsentMessage (MailDB, uniqueID); + } + + + else if (event->eType == frmCloseEvent) + { + StashedNewViewShowBCC = NewViewShowBCC; + NewViewShowBCC = false; + } + + + else if (event->eType == sclRepeatEvent) + { + NewViewScroll (event->data.sclRepeat.newValue - + event->data.sclRepeat.value); + } + + + else if (event->eType == sclExitEvent) + { + //mgmg mg + //why is this here? + NewViewRestoreEditState (); + } +/* HandEra */ + else if (event->eType == displayExtentChangedEvent) + { + NewViewResize(true); + handled = true; + } +/* end HandEra */ + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewMarkRead + * + * DESCRIPTION: This routine marks the current message as read. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/27/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewMarkRead (void) +{ + MemHandle recordH; + MailDBRecordType record; + MailChangedFieldsType changedFields; + + + if (CurrentCategory != inboxCategory) + return; + + // Get the current record + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + + // If the current record hasn't been read yet, mark it read. + if (! record.flags.read) + { + MemHandleUnlock (recordH); + record.flags.read = true; + MemSet (&changedFields, sizeof (changedFields), 0); + changedFields.flags = true; + MailChangeRecord (MailDB, &CurrentRecord, &record, changedFields); + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + DirtyRecord (CurrentRecord); + UnreadMessages--; + } + + MemHandleUnlock (recordH); +} + +/*********************************************************************** + * + * FUNCTION: MessageViewMarkUnRead + * + * DESCRIPTION: This routine marks the current message as unread. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/10/97 Initial Revision + * + ***********************************************************************/ +static void MessageViewMarkUnRead (void) + { + MemHandle recordH; + MailDBRecordType record; + MailChangedFieldsType changedFields; + + + if (CurrentCategory != deletedCategory) + return; + + // Get the current record + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + + // If the current record hasn't been read yet, mark it read. + if (record.flags.read) + { + MemHandleUnlock (recordH); + record.flags.read = false; + MemSet (&changedFields, sizeof (changedFields), 0); + changedFields.flags = true; + MailChangeRecord (MailDB, &CurrentRecord, &record, changedFields); + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + DirtyRecord (CurrentRecord); + UnreadMessages++; + } + + MemHandleUnlock (recordH); + }//MessageViewMarkUnRead + + +/*********************************************************************** + * + * FUNCTION: MessageViewUpdateScrollBar + * + * DESCRIPTION: This routine update the scroll bar. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewUpdateScrollBar (void) +{ + UInt16 topLine; + UInt16 textHeight; + UInt16 pageHeight; + Int16 maxValue; + ScrollBarPtr bar; + + bar = GetObjectPtr (MessageScrollBar); + MsgGetScrollValues (&textHeight, &pageHeight, &topLine); + + if (textHeight > pageHeight) + maxValue = textHeight - pageHeight; + else + maxValue = 0; + +//the topLine & textHeight needs to be re-caclulated! + + + + SclSetScrollBar (bar, topLine, 0, maxValue, pageHeight-1); +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewScroll + * + * DESCRIPTION: This routine scrolls the message view by the number of + * lines specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewScroll (Int16 linesToScroll) +{ + if (linesToScroll < 0) + MsgScroll (-linesToScroll, winUp); + + else if (linesToScroll > 0) + MsgScroll (linesToScroll, winDown); +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewPageScroll + * + * DESCRIPTION: This routine scrolls the message a page winUp or winDown + * or to the next message if scrolling past the end. + * + * PARAMETERS: direction winUp or winDown + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * roger 6/17/97 Added scrolling to the next message + * MGolden 7/28/97 Reversed rogers scroll dirctions + * + ***********************************************************************/ +static void MessageViewPageScroll (WinDirectionType direction) +{ + UInt16 objIndex; + Int16 value; + Int16 min; + Int16 max; + Int16 pageSize; + UInt16 linesToScroll; + FontID currFont; + FormPtr frm; + ScrollBarPtr bar; + RectangleType bounds; + Boolean movedToAnotherMessage; + + + // Compute the page size. + frm = FrmGetActiveForm (); + objIndex = FrmGetObjectIndex (frm, MessageGadget); + FrmGetObjectBounds (frm, objIndex, &bounds); + currFont = FntSetFont (MessageFont); + linesToScroll = (bounds.extent.y / FntLineHeight ()) - 1; + FntSetFont (currFont); + + + // Update the scroll bar. + bar = GetObjectPtr (MessageScrollBar); + SclGetScrollBar (bar, &value, &min, &max, &pageSize); + + if (direction == winUp) + { + value -= linesToScroll; + if (value < min) + { + linesToScroll -= min - value; + value = min; + } + } + else + { + value += linesToScroll; + if (value > max) + { + linesToScroll -= value - max; + value = max; + } + } + + if (linesToScroll) + { + MsgScroll (linesToScroll, direction); + SclSetScrollBar (bar, value, min, max, pageSize); + } + else + { + // Scroll to the next message + + if (direction == winUp) + movedToAnotherMessage = MessageViewNextMessage(dmSeekBackward); + else + movedToAnotherMessage = MessageViewNextMessage(dmSeekForward); + + if (movedToAnotherMessage) + SndPlaySystemSound (sndInfo); + } +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewChangeHeader + * + * DESCRIPTION: This routine toggles beteewn the abbreviated and + * full header display. + * + * PARAMETERS: controlID - font button pressed (small or large). + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewChangeHeader (UInt16 controlID) +{ + if (controlID == MessageFullHeaderButton) + { + ShowFullHeader = true; + MessageTopField = msgFieldTo; + } + else + { + ShowFullHeader = false; + MessageTopField = msgFieldSentTo; + } + + // Reset to the top of the message. + MessageScrollPos = 0; + + MsgErase (); + MsgDraw (); + + MessageViewUpdateScrollBar (); + + MessageViewMarkRead (); +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewToggleFont + * + * DESCRIPTION: This routine changes the font used to display a note. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/79/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewToggleFont () + { + FontID originalFont = MessageFont; + + MessageFont = FontSelect (originalFont); + + if (MessageFont == originalFont) + return; + + MsgChangeFont (); + + MessageViewUpdateScrollBar(); + + MessageViewMarkRead (); + + }//MessageViewToggleFont + +/*********************************************************************** + * + * FUNCTION: MessageViewSetTitle + * + * DESCRIPTION: This routine sets the title of the note view. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/4/96 Initial Revision + * MGolden 07/14/97 Set the title to the current category name + * Set the message x of y text + * MGolden 08/11/97 Left Justified the message next to + * the title. + * kwk 05/28/99 Use const Char* for form label text. + * kwk 06/28/99 Fixed bug w/passing obj ID vs. index to FrmGetObjectBounds + * and FrmSetObjectPosition. + * + ***********************************************************************/ + static void MessageViewSetTitle (void) + { + UInt16 len; + Char * title; + FontID currFont; + MemHandle titleH; + Char countStr [6]; + Char * titleTemplateP; + Char * tmp; + Char * MemPtr; + FormPtr frm; + Int16 total; + UInt16 labelIndex; + UInt16 titleWidth = 0; + RectangleType r; + + currFont = FntSetFont (boldFont); + + //set the title to the catgory name + titleH = MemHandleNew (dmCategoryLength); + if (titleH) + { + title = MemHandleLock (titleH); + + CategoryGetName ( MailDB, CurrentCategory, title); + + titleWidth = FntCharsWidth (title, StrLen(title)); + + FrmSetTitle (FrmGetActiveForm (), title); + } + + //free the old title MemHandle + if (MessageTitleH) + MemHandleFree (MessageTitleH); + + MessageTitleH = titleH; + + FntSetFont (currFont); + + //now set the label's "Message # of %" + titleTemplateP = MemHandleLock (DmGetResource (strRsc, MessageTitleStrID)); + + //get the position of this item in the category + StrIToA (countStr, DmPositionInCategory ( MailDB, CurrentRecord, CurrentCategory) + 1); + len = StrLen (countStr) + StrLen (titleTemplateP); + + tmp = MemPtrNew (len + 1); + ErrNonFatalDisplayIf (!tmp, "Out of memory"); + + MemPtr = StrChr (titleTemplateP, '#'); + len = MemPtr - titleTemplateP; + if (len) + StrNCopy (tmp, titleTemplateP, len); + tmp[len] = 0; + StrCat (tmp, countStr); + MemPtr++; + StrCat (tmp, MemPtr); + + //now title has the message #...add the total count of the category + total = DmNumRecordsInCategory (MailDB, CurrentCategory); + StrIToA (countStr, total); + len = StrLen (countStr) + StrLen (tmp); + + title = MemPtrNew (len + 1); + ErrFatalDisplayIf (!title, "Out of memory"); + + MemPtr = StrChr (tmp, '%'); + len = MemPtr - tmp; + if (len) + StrNCopy (title, tmp, len); + title[len] = 0; + StrCat (title, countStr); + MemPtr++; + StrCat (title, MemPtr); + + //free the tmp MemPtr + MemPtrFree(tmp); + + frm = FrmGetActiveForm (); + labelIndex = FrmGetObjectIndex(frm, MessageTitleLabel); + + // erase the old label in case it gets shorter + if (FrmVisible(frm)) + { + FrmGetObjectBounds(frm, labelIndex, &r); + WinEraseRectangle(&r, 0); + } + + //move the label if needed + if (titleWidth > 0) + FrmSetObjectPosition(frm, labelIndex, titleWidth + kMessageTitleOffset, r.topLeft.y); + + //set the label text + FrmCopyLabel ( frm, MessageTitleLabel, title); + + MemPtrUnlock(titleTemplateP); + MemPtrFree(title); + + +/* OLDWAY + Int16 maxWidth; + UInt16 len; + UInt16 width; + Char * title; + Char * subject; + FontID currFont; + MemHandle titleH; + MemHandle recordH; + MailDBRecordType record; + + currFont = FntSetFont (boldFont); + + titleH = MemHandleNew (maxMessageTitleLen + 2); + if (titleH) + { + title = MemHandleLock (titleH); + + maxWidth = maxMessageTitleLenWidth; + width = 0; + *title = 0; + + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + subject = record.subject; + + if (*subject) + { + for (len = 0; len < maxMessageTitleLen; len++) + { + if (subject[len] == linefeedChr) break; + + title[len] = subject[len]; + title[len+1] = 0; + + width += FntCharWidth (subject[len]); + if (width >= maxWidth) break; + } + + if ( (width >= maxWidth) && (subject[len] != linefeedChr) ) + { + maxWidth -= FntCharWidth (chrEllipsis); + while (width > maxWidth) + { + width -= FntCharWidth (title[len]); + len--; + } + title[len+1] = chrEllipsis; + title[len+2] = 0; + } + } + + else + { + subject = MemHandleLock (DmGetResource (strRsc, noSubjectStrID)); + StrCopy (title, subject); + MemPtrUnlock (subject); + } + + MemHandleUnlock (recordH); + + FrmSetTitle (FrmGetActiveForm (), title); + } + + if (MessageTitleH) + MemHandleFree (MessageTitleH); + + MessageTitleH = titleH; + + FntSetFont (currFont); +*/ + } + + +/*********************************************************************** + * + * FUNCTION: MessageViewDrawMessage + * + * DESCRIPTION: This routine displays the next mail message. If the + * last message in the category is currently displayed then + * the first message is shown. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewDrawMessage (void) +{ + // Set and draw the title. + MessageViewSetTitle (); + + // Reset to the top of the message. + if (ShowFullHeader) + MessageTopField = msgFieldTo; + else + MessageTopField = msgFieldSentTo; + MessageScrollPos = 0; + + MessageSelectStartField = msgSelectNone; + MessageSelectEndField = msgSelectNone; + MessageSelectStartPos = 0; + MessageSelectEndPos = 0; + + + // Draw the message. + MsgErase (); + MsgDraw (); + + MessageViewUpdateScrollBar (); + + MessageViewMarkRead (); +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewDeleteMessage + * + * DESCRIPTION: This routine deletes a the current message from the + * inbox. It does not delete the record from the database. + * + * PARAMETERS: nothing + * + * RETURNED: true if the message view should be exited + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * MGolden 9/97 changed the UI so that the user always go + * back to the list view after a delete. + * + ***********************************************************************/ +static Boolean MessageViewDeleteMessage (void) +{ + UInt16 attr; + UInt16 recordNum; + + if (CurrentCategory == deletedCategory) + return (false); + + if (ConfirmDelete) + { + if (FrmAlert(DeleteMessageAlert) != DeleteMessageYes) + return (false); + } + + // Move the record to the "deleted" category and mark it dirty. + DmRecordInfo (MailDB, CurrentRecord, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= deletedCategory | dmRecAttrDirty; + DmSetRecordInfo (MailDB, CurrentRecord, &attr, NULL); + + MessagesInCategory--; + ErrNonFatalDisplayIf (MessagesInCategory < 0, "invalid message count"); + + + // Find the next record + recordNum = CurrentRecord; + if (! SeekRecord (&recordNum, 0, dmSeekForward)) + { + // Find the prior record. + if (! SeekRecord (&recordNum, 0, dmSeekBackward)) + { + //mgmg + //clear the current record, we are going back to the + //list view and the current record is not in the category eny more + CurrentRecord = noRecordSelected; + return (true); + } + } + CurrentRecord = recordNum; + return true; + + //MessageViewDrawMessage (); + //return (false); + } + +/*********************************************************************** + * + * FUNCTION: MessageUndelete + * + * DESCRIPTION: Move the current message to the inbox, + * and mark it as unread. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/10/97 Initial Revision + * MGolden 7/11/97 Removed the seek next & prev since we want to just + * return to the list view. + * + ***********************************************************************/ +static Boolean MessageUndelete() + { + MemHandle recordH; + MailDBRecordType record; + UInt16 attr; + Err err = 0; + //UInt16 recordNum; + + + //get the record + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + + // Change the records category to "inbox" and mark it dirty. + DmRecordInfo (MailDB, CurrentRecord, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= inboxCategory | dmRecAttrDirty; + DmSetRecordInfo (MailDB, CurrentRecord, &attr, NULL); + + MemHandleUnlock (recordH); + + //don't mark the message unread...it will cause sync problems. + //MessageViewMarkUnRead (); + MessageViewMarkRead (); + + MessagesInCategory--; + ErrNonFatalDisplayIf (MessagesInCategory < 0, "invalid message count"); + +#ifdef NEEDED + // If the record was deleted go to the next record. If there is + // no next record go to the prior record. + recordNum = CurrentRecord; + if (! SeekRecord (&recordNum, 0, dmSeekForward)) + { + // Find the prior record. + if (! SeekRecord (&recordNum, 0, dmSeekBackward)) + return (true); + } + CurrentRecord = recordNum; + + MessageViewDrawMessage (); + + return (false); +#endif + return (true); + + //I think we should alert the users to tell them it's in the inbox now... + //Or change the category to the inbox and select this record + //MGMG + + }//MessageUndelete + +/*********************************************************************** + * + * FUNCTION: MessageViewFileMessage + * + * DESCRIPTION: This routine files a the current message, optionally + * deleting it from the inbox. It does not delete the + * record from the database. + * + * PARAMETERS: nothing + * + * RETURNED: true if the message view should be exited + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/5/96 Initial Revision + * MGolden 9/9/97 added returnToLlist bool If + * the message is changing categories, then return to the + * list view... + ***********************************************************************/ +static Boolean MessageViewFileMessage (void) +{ + Err err = 0; + UInt16 attr; + UInt16 button; + UInt16 recordNum; + Boolean copyRecord = false; + MemHandle recordH; + MailDBRecordType record; + Boolean returnToList = true; + + if (CurrentCategory == inboxCategory) + { + button = FrmAlert(FileMessageAlert); + + if (button == FileMessageCancel) + return (false); + + else if (button == FileMessageYes) + copyRecord = true; + } + + // If we're going to leave the message in the inbox, make a copy of the + // record. + if (copyRecord) + { + returnToList = false; + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + + err = MailNewRecord (MailDB, &record, &recordNum); + + MemHandleUnlock (recordH); + + if (err) + { + FrmAlert (DeviceFullAlert); + return (false); + } + } + else + recordNum = CurrentRecord; + + + // Change the records category to "filed" and mark it dirty. + DmRecordInfo (MailDB, recordNum, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= filedCategory | dmRecAttrDirty; + DmSetRecordInfo (MailDB, recordNum, &attr, NULL); + + + // If the record was deleted go to the next record. If there is + // no next record go to the prior record. + if (! copyRecord) + { + MessagesInCategory--; + ErrNonFatalDisplayIf (MessagesInCategory < 0, "invalid message count"); + + recordNum = CurrentRecord; + if (! SeekRecord (&recordNum, 0, dmSeekForward)) + { + // Find the prior record. + if (! SeekRecord (&recordNum, 0, dmSeekBackward)) + return (true); + } + CurrentRecord = recordNum; + + //we a re going to the list view, we do not need to draw the record + //MessageViewDrawMessage (); + } + + return returnToList; + } + + +/*********************************************************************** + * + * FUNCTION: MessageViewUnsendMessage + * + * DESCRIPTION: This routine removes the current message from the inbox + * and makes it an unsend message. + * + * PARAMETERS: nothing + * + * RETURNED: true if the note was deleted. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/5/96 Initial Revision + * MGolden 7/14/97 What do to if the message was in the deleted folder? + ***********************************************************************/ +static Boolean MessageViewUnsendMessage (void) + { + UInt16 attr; + + //mgmg + // if the current category is "deleted", save a copy of the message. + // Since this is called only from the edit button, it's safe to assume that if the category is filedCategory, + // then it is an editable message, not a reply ot message. + if (CurrentCategory == deletedCategory + || CurrentCategory == outboxCategory + || CurrentCategory == draftCategory + || CurrentCategory == filedCategory) + { + MessageViewInitializRevert(); + } + + + // Change the records category to "filed" and mark it dirty. + DmRecordInfo (MailDB, CurrentRecord, &attr, NULL, NULL); + attr &= ~dmRecAttrCategoryMask; + attr |= draftCategory | dmRecAttrDirty; + DmSetRecordInfo (MailDB, CurrentRecord, &attr, NULL); + + if (CurrentCategory != draftCategory) + MessagesInCategory--; + ErrNonFatalDisplayIf (MessagesInCategory < 0, "invalid message count"); + + NewRecord = CurrentRecord; + + return (true); + } + +/*********************************************************************** + * + * FUNCTION: MessageViewRevert + * + * DESCRIPTION: This routine reverts the index record to the + * global copy of the record + * + * PARAMETERS: database & current record + * + * RETURNED: error code. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/14/97 Initial Revision + ***********************************************************************/ +static Err MessageViewRevert(DmOpenRef dbP, UInt16 * index) + { + MailChangedFieldsType changedFields; + MailDBRecordType record; + MailPackedDBRecordPtr src; + Err err; + UInt16 attr; + + if (!MessageOriginalRecordData) + return -1; + + //set all of the change fields + changedFields.date = 1; + changedFields.time = 1; + changedFields.flags = 1; + changedFields.subject = 1; + changedFields.from = 1; + changedFields.to = 1; + changedFields.cc = 1; + changedFields.bcc = 1; + changedFields.replyTo = 1; + changedFields.sentTo = 1; + changedFields.body = 1; + + //unpack the record copy into a recordPtr + src = (MailPackedDBRecordPtr) MemHandleLock (MessageOriginalRecordData); + MailUnpackRecord (src, &record); + + err = MailChangeRecord (dbP, index, &record, changedFields); + MemHandleUnlock (MessageOriginalRecordData); + MemHandleFree(MessageOriginalRecordData); + MessageOriginalRecordData = NULL; + + //set the record back to the original category + DmRecordInfo (MailDB, *index, &attr, NULL, NULL); + attr &= ~(dmRecAttrCategoryMask | dmRecAttrDirty); + attr |= MessageRevertCategory; + DmSetRecordInfo (MailDB, *index, &attr, NULL); + + if (CurrentCategory != draftCategory) + MessagesInCategory ++; + + NewRecord = noNewRecord; + MailSetUnsentMessage (MailDB, 0); + + //we want to back to thelist view now... + ReturnToView = ListView; + + return err; + }//MessageViewRevert + +/*********************************************************************** + * + * FUNCTION: MessageViewInitializRevert + * + * DESCRIPTION: This routine stores a copy of the current record, in case of a revert. + * + * PARAMETERS: nothing + * + * RETURNED: error code. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/14/97 Initial Revision + ***********************************************************************/ +static void MessageViewInitializRevert() + { + MemHandle recordH; + MailDBRecordType record; + Err err; + MailPackedDBRecordPtr src, dest; + + //if there was one already, free it + if (MessageOriginalRecordData) + { + MemHandleFree(MessageOriginalRecordData); + MessageOriginalRecordData = NULL; + } + + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + + //make a copy of the record + MessageOriginalRecordData = MemHandleNew(MemHandleSize(recordH)); + MemHandleUnlock(recordH); + + //lock winDown both Handles + src = (MailPackedDBRecordPtr) MemHandleLock (recordH); + dest = (MailPackedDBRecordPtr) MemHandleLock (MessageOriginalRecordData); + + //copy the data into the new MemHandle + err = MemMove( dest, src, MemHandleSize(recordH)); + + //unlock the handles + MemHandleUnlock(recordH); + MemHandleUnlock(MessageOriginalRecordData); + + MessageRevertCategory = CurrentCategory; + }//MessageViewInitializRevert + +/*********************************************************************** + * + * FUNCTION: RestoreRevert + * + * DESCRIPTION: Find if a record was stored in the database for revert... + * It would be the only record in the ignoreCategory. If it exists, + * get a MemHandle to it's data, then remove the record. + * + * PARAMETERS: nothing + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/14/97 Initial Revision + ***********************************************************************/ +static void RestoreRevert(Boolean keepIt) + { + UInt16 theRecordID, numInCategory; + MemHandle recordH; + MailDBRecordType record; + MailPackedDBRecordPtr src, dest; + Err err; + UInt16 attr; + + MessageOriginalRecordData = NULL; + + numInCategory = DmNumRecordsInCategory ( MailDB, ignoreCategory); + + + if (numInCategory == 0) + return; + +/* +{ +//debug +char tmp[32]; +StrIToA(tmp, (long)numInCategory); +FrmCustomAlert ( 2009, "RestoreRevert", "numInCategory" , tmp); +} +*/ + theRecordID = 0; + err = DmSeekRecordInCategory (MailDB, &theRecordID, 0, dmSeekForward, ignoreCategory); + if (err) + return; + + + if (!keepIt) + { + DmRemoveRecord (MailDB, theRecordID); + return; + } + + + //remove any revert data & return + //set the record back to the original category + DmRecordInfo (MailDB, theRecordID, &attr, NULL, NULL); + attr &= ~(dmRecAttrCategoryMask | dmRecAttrDirty); + attr |= MessageRevertCategory; + DmSetRecordInfo (MailDB, theRecordID, &attr, NULL); + + //if found, read it and delete it + MailGetRecord (MailDB, theRecordID, &record, &recordH); + + //make a copy of the record + MessageOriginalRecordData = MemHandleNew(MemHandleSize(recordH)); + MemHandleUnlock(recordH); + + //lock winDown both Handles + src = (MailPackedDBRecordPtr) MemHandleLock (recordH); + dest = (MailPackedDBRecordPtr) MemHandleLock (MessageOriginalRecordData); + + //copy the data into the new MemHandle + err = MemMove( dest, src, MemHandleSize(recordH)); + + //unlock the handles + MemHandleUnlock(recordH); + MemHandleUnlock(MessageOriginalRecordData); + + //remove the record + DmRemoveRecord (MailDB, theRecordID); + + CurrentCategory = MessageRevertCategory; + }//RestoreRevert + +/*********************************************************************** + * + * FUNCTION: SaveRevert + * + * DESCRIPTION: Store the revert MemHandle in the databasein the ignoreCategory, + * Mark it deleted (Archived), move it to the end of the database. + * + * PARAMETERS: none + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/14/97 Initial Revision + * grant 7/7/99 Free MessageOriginalRecordData handle once the data is + * added to the DB. + ***********************************************************************/ +static void SaveRevert() + { + Err err; + UInt16 attr; + UInt16 theNewRecord, numRecords; + MailPackedDBRecordPtr src; + MemHandle h; + MailDBRecordType record; + + if (!MessageOriginalRecordData) + return; + + h = MessageOriginalRecordData; + src = (MailPackedDBRecordPtr) MemHandleLock (h); + MailUnpackRecord (src, &record); + + // Add a new record into the database. + err = MailNewRecord (MailDB, &record, &theNewRecord); + if (err) + return; + MemHandleUnlock(h); + + // MessageOriginalRecordData has been added to DB, so release the memory + MemHandleFree(h); + MessageOriginalRecordData = NULL; + + // Put the new record in the ignore category. + DmRecordInfo (MailDB, theNewRecord, &attr, NULL, NULL); + attr &= ~(dmRecAttrCategoryMask | dmRecAttrDirty); + attr |= ignoreCategory; + DmSetRecordInfo (MailDB, theNewRecord, &attr, NULL); + + numRecords = DmNumRecords (MailDB); + //DmArchiveRecord (MailDB, theNewRecord); + DmMoveRecord (MailDB, theNewRecord, numRecords); + }//SaveRevert + +/*********************************************************************** + * + * FUNCTION: MessageViewCleanUpRevert + * + * DESCRIPTION: This routine removed the data stored by the revert code. + * + * PARAMETERS: nothing + * + * RETURNED: error code. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/14/97 Initial Revision + ***********************************************************************/ +static void MessageViewCleanUpRevert() + { + //if there was one already, free it + if (MessageOriginalRecordData) + { + MemHandleFree(MessageOriginalRecordData); + MessageOriginalRecordData = NULL; + } + }//MessageViewCleanUpRevert + +/*********************************************************************** + * + * FUNCTION: MessageViewDoCommand + * + * DESCRIPTION: This routine preforms the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * MGolden 7/7/97 Added the change font menu + * MGolden 7/21/97 Set the ReturnToView when the user selects NEW + * So we will come back to the mesage that they were editing + * when they are done with the new message. + * + ***********************************************************************/ +static void MessageViewDoCommand (UInt16 command) +{ + switch (command) + { + case messageNewMenuCmd: + if (CreateRecord ()) + { + //Set the ReturnToView when the user selects NEW + ReturnToView = MessageView; + FrmGotoForm (NewView); + } + break; + + case messageFileMenuCmd: + if (CurrentCategory != filedCategory) + { + if (MessageViewFileMessage()) + FrmGotoForm (ListView); + } + else + SndPlaySystemSound (sndError); + break; + + case messageCopyCmd: + MsgCopy (); + break; + + case messageSelectAllCmd: + MsgSelectAll (); + break; + + //mgmg added change font menu item + case messageChangeFontCmd: + MessageViewToggleFont (); + break; + + case messagePreferencesMenuCmd: + FrmPopupForm (PrefDialog); + break; + + case messageHotSyncMenuCmd: + FrmPopupForm (SyncDialog); + break; + + case messagePurgeMenuCmd: + if (PurgeDeletedRecord () && CurrentCategory == deletedCategory) + { + CurrentRecord = noRecordSelected; + ChangeCategory (deletedCategory); + FrmGotoForm (ListView); + } + break; + + case messageAboutMenuCmd: + AbtShowAbout (sysFileCMail); + break; + + } +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewGoTo + * + * DESCRIPTION: This routine handles a frmGotoEvent + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/29/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewGoTo (EventPtr event) +{ + MsgSelectFieldType selFld; + + MessageTopField = (MsgFieldType) event->data.frmGoto.matchFieldNum; + MessageScrollPos = event->data.frmGoto.matchPos; + + switch (MessageTopField) + { + case msgFieldSentTo: selFld = msgSelectSentTo; break; + case msgFieldTo: selFld = msgSelectTo; break; + case msgFieldFrom: selFld = msgSelectFrom; break; + case msgFieldSubject: selFld = msgSelectSubject; break; + case msgFieldCC: selFld = msgSelectCC; break; + case msgFieldDate: selFld = msgSelectDate; break; + case msgFieldBlankLine: selFld = msgSelectBlankLine; break; + case msgFieldBody: selFld = msgSelectBody; break; + } + + MessageSelectStartField = selFld; + MessageSelectEndField = selFld; + MessageSelectStartPos = event->data.frmGoto.matchPos; + MessageSelectEndPos = event->data.frmGoto.matchPos + + event->data.frmGoto.matchLen; +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewClose + * + * DESCRIPTION: This routine initializes the Message View form. + * + * PARAMETERS: frm - pointer to the Message View form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * + ***********************************************************************/ +static void MessageViewClose (void) +{ + // Release the block that holds the title. + if (MessageTitleH) + { + MemHandleFree (MessageTitleH); + MessageTitleH = NULL; + } +} + + +/*********************************************************************** + * + * FUNCTION: MessageViewInit + * + * DESCRIPTION: This routine initializes the Message View form. + * + * PARAMETERS: frm - pointer to the Message View form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * MGolden 7/7/97 removed the font buttons + * MGolden 7/10/97 Added the undelete button to the deleted view + * Changed the ReturnToView for the deleted category. + * Otherwise, error occurs after an edit then send of + * Deleted (Created) mail. + * MGolden 7/21/97 Always set the return to view to the list view. It will be set + * To the message view if the user selects new from the message view. + * + ***********************************************************************/ +static void MessageViewInit (FormPtr frm) +{ + UInt16 controlID; + //MailDBRecordType record; + //MemHandle recordH; + + MessageViewSetTitle (); + + // Highlight the correct Header push button. + if (ShowFullHeader) + controlID = MessageFullHeaderButton; + else + controlID = MessageAbbrHeaderButton; + FrmSetControlGroupSelection (frm, MessageHeaderGroup, controlID); + + + // Highlight the corect font push button. + //mgmg removed the font buttons + + // If the outbox is being shown then hide the reply button, otherwise + // hide the unsend button. + MessageViewEnableButtons(frm); + + if (ShowFullHeader) + MessageTopField = msgFieldTo; + else + MessageTopField = msgFieldSentTo; + + MessageScrollPos = 0; + MessageSelectStartField = msgSelectNone; + MessageSelectEndField = msgSelectNone; + MessageSelectStartPos = 0; + MessageSelectEndPos = 0; + +#ifdef NEEDED + // Set the following global so that we will return to the Message + // View when a new message is sent. + if (CurrentCategory == outboxCategory || CurrentCategory == draftCategory || +//mgmg new??? +//ROGER? + CurrentCategory == deletedCategory || CurrentCategory == filedCategory ) + ReturnToView = ListView; + else + ReturnToView = MessageView; +#endif + + //always return to the list view! + ReturnToView = ListView; +} + +/*********************************************************************** + * + * FUNCTION: MessageViewEnableButtons + * + * DESCRIPTION: Show & hide the buttons in the message view, based on the current + * Category & message. The form may already be open, so we can not + * assume what buttons are already visible. + * + * PARAMETERS: the formPtr + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/10/97 Initial Revision + * Mgolden 9/29/97 added code to hide the next & prev buttons if + * there is only one message in the category. + * + ***********************************************************************/ +static void MessageViewEnableButtons(FormPtr frm) + { + MemHandle recordH; + MailDBRecordType record; + Boolean read = false; + + //how many messages are there...show or hide the next & prev buttons + if (DmNumRecordsInCategory (MailDB, CurrentCategory) == 1) + { + FrmHideObject (frm, FrmGetObjectIndex (frm, MessagePrevMessageButton)); + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageNextMessageButton)); + } + else + { + FrmShowObject (frm, FrmGetObjectIndex (frm, MessagePrevMessageButton)); + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageNextMessageButton)); + } + + if (CurrentCategory == inboxCategory) + { + //hide edit & undelete + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageEditButton)); + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageUndeleteButton)); + + //show reply & delete + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageReplyButton)); + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageDeleteButton)); + return; + } + + if (CurrentCategory == outboxCategory || CurrentCategory == draftCategory) + { + //hide reply & undelete + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageReplyButton)); + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageUndeleteButton)); + + //show edit & delete + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageEditButton)); + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageDeleteButton)); + return; + } + + //read the record and find out if it is a read message, or a created one + MailGetRecord (MailDB, CurrentRecord, &record, &recordH); + //if ((!record.flags.read) && (!record.from || (record.from[0] == '\0'))) + if ((!record.from || (record.from[0] == '\0'))) + read = false; + else + read = true; + //unlock the record + MemHandleUnlock (recordH); + + if (CurrentCategory == deletedCategory) + { + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageDeleteButton)); + + if (read) + { + //hide edit + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageEditButton)); + + //show reply & undelete + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageReplyButton)); + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageUndeleteButton)); + } + else + { + //hide reply, & undelete + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageReplyButton)); + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageUndeleteButton)); + + //show edit + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageEditButton)); + } + return; + } + + if (CurrentCategory == filedCategory) + { + if (read) + { + //hide edit & undelete + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageEditButton)); + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageUndeleteButton)); + + //show reply & delete + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageReplyButton)); + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageDeleteButton)); + } + else + { + //hide reply, & undelete + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageReplyButton)); + FrmHideObject (frm, FrmGetObjectIndex (frm, MessageUndeleteButton)); + + //show edit & delete + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageEditButton)); + FrmShowObject (frm, FrmGetObjectIndex (frm, MessageDeleteButton)); + } + return; + } + + }//MessageViewEnableButtons + + +/*********************************************************************** + * + * FUNCTION: MessageViewHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Message View". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * MGolden 7/7/97 removed the font buttons + * MGolden 7/10/97 added code for the Undelete button. + * kwk 11/22/98 MemHandle command keys in separate code block so that + * TxtCharIsPrint doesn't get called w/virtual chars. + * jmp 10/29/99 Handle frmUpdateEvent ourselves now so we don't + * have partially drawn screens. + * jmp 10/31/99 Factored out commonality among frmOpenEvent, frmUpdateEvent, and + * frmGotoEvent since they are all substantially the same. + * + ***********************************************************************/ +static Boolean MessageViewHandleEvent (EventPtr event) +{ + UInt16 objIndex; + FormPtr frm; + RectangleType r; + Boolean handled = false; + + if (event->eType == keyDownEvent) + { + // Mail key pressed? If so display the next mail message. + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + { + if (! (event->data.keyDown.modifiers & poweredOnKeyMask)) + { + if (! MessageViewNextMessage (dmSeekForward)) + FrmGotoForm (ListView); + handled = true; + } + } + + else if (EvtKeydownIsVirtual(event)) + { + if (event->data.keyDown.chr == vchrPageUp) + { + MessageViewPageScroll (winUp); + handled = true; + } + + else if (event->data.keyDown.chr == vchrPageDown) + { + MessageViewPageScroll (winDown); + handled = true; + } + } + } + + else if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case MessageDoneButton: + FrmGotoForm (ListView); + handled = true; + break; + + case MessageDeleteButton: + if (MessageViewDeleteMessage()) + FrmGotoForm (ListView); + handled = true; + break; + + case MessageReplyButton: + //mgmg return to the message after the reply! + ReturnToView = MessageView; + FrmPopupForm (ReplyDialog); + handled = true; + break; + + case MessageEditButton: + if (MessageViewUnsendMessage ()) + FrmGotoForm (NewView); + break; + + case MessageUndeleteButton: + if (MessageUndelete()) + { + //change the category to the inBox, we are going to follow this message there + ChangeCategory (inboxCategory); + FrmGotoForm (ListView); + } + break; + + case MessageAbbrHeaderButton: + case MessageFullHeaderButton: + MessageViewChangeHeader (event->data.ctlSelect.controlID); + handled = true; + break; + +//mgmg new 9/9/97 + case MessagePrevMessageButton: + MessageViewNextMessage (dmSeekBackward); + handled = true; + break; + + case MessageNextMessageButton: + MessageViewNextMessage (dmSeekForward); + handled = true; + break; + } + } + + else if (event->eType == penDownEvent) + { + frm = FrmGetActiveForm (); + objIndex = FrmGetObjectIndex (frm, MessageGadget); + FrmGetObjectBounds (frm, objIndex, &r); + if (RctPtInRectangle (event->screenX, event->screenY, &r)) + MsgSelect (event->screenX, event->screenY); + } + + else if (event->eType == menuEvent) + { + MessageViewDoCommand (event->data.menu.itemID); + return (true); + } + + else if (event->eType == menuCmdBarOpenEvent) + { + MenuCmdBarAddButton(menuCmdBarOnRight, BarCopyBitmap, menuCmdBarResultMenuItem, messageCopyCmd, 0); + + // tell the field package to not add cut/copy/paste buttons automatically + event->data.menuCmdBarOpen.preventFieldButtons = true; + + handled = false; // mustn't say it is handled, otherwise the OS won't bring up the bar. + } + + else if (event->eType == sclRepeatEvent) + { + MessageViewScroll (event->data.sclRepeat.newValue - + event->data.sclRepeat.value); + } + + else if (event->eType == frmOpenEvent || event->eType == frmUpdateEvent || event->eType == frmGotoEvent) + { + frm = FrmGetActiveForm (); + if (event->eType == frmGotoEvent) + CurrentRecord = event->data.frmGoto.recordNum; + if (event->eType == frmOpenEvent || event->eType == frmGotoEvent) + MessageViewInit (frm); + if (event->eType == frmGotoEvent) + MessageViewGoTo (event); + MessageViewUpdateScrollBar (); + FrmDrawForm (frm); + MsgDraw (); + MessageViewMarkRead (); + handled = true; + } + + else if (event->eType == frmCloseEvent) + { + MessageViewClose (); + } + + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewSetTitle + * + * DESCRIPTION: This routine formats and sets the title of the List View. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/12/96 Initial Revision + * MGolden 7/7/97 changed format to "x Unread, y Total". + * Also changed it from the title to a label object next to the title + * # = UnreadMessages, % = MessagesInCategory + * MGolden 7/9/97 Inbox works as above, all others use "# Total" instead + * kwk 05/28/99 Use const Char* for label text. + * kwk 06/28/99 Fixed calls to FrmHide/ShowObject using object id vs. index. + * + ***********************************************************************/ +static void ListViewSetTitle (void) +{ + UInt16 len; + Char countStr [6]; + Char * titleTemplateP; + Char * tmp; + Char * title; + Char * MemPtr; + FormPtr frm; + Int16 total; + UInt16 objIndex; + + //check the count of records in the inBox + total = DmNumRecordsInCategory (MailDB, inboxCategory); + + if (CurrentCategory == inboxCategory && total > 0) + { + // Format the title string. A string resource is used as a template, the + // '#' character in the template indicates the postions of the numeric + // value. + // DOLATER kwk - use new IntlGlue call to create text MemPtr from template + // plus parameters. + + total = DmNumRecordsInCategory (MailDB, inboxCategory); + + if (total > 999) + titleTemplateP = MemHandleLock (DmGetResource (strRsc, listTitleShortStrID)); + else if (total == 1) + titleTemplateP = MemHandleLock (DmGetResource (strRsc, listTitleSingularStringId)); + else + titleTemplateP = MemHandleLock (DmGetResource (strRsc, listTitleStringId)); + + StrIToA (countStr, UnreadMessages); + len = StrLen (countStr) + StrLen (titleTemplateP); + + tmp = MemPtrNew (len + 1); + ErrFatalDisplayIf (!tmp, "Out of memory"); + + MemPtr = StrChr (titleTemplateP, '#'); + len = MemPtr - titleTemplateP; + if (len) + StrNCopy (tmp, titleTemplateP, len); + tmp[len] = 0; + StrCat (tmp, countStr); + MemPtr++; + StrCat (tmp, MemPtr); + + //now title has the unread count...add the total count of the inbox category + //total = DmNumRecordsInCategory (MailDB, inboxCategory); + StrIToA (countStr, total); + len = StrLen (countStr) + StrLen (tmp); + + title = MemPtrNew (len + 1); + ErrFatalDisplayIf (!title, "Out of memory"); + + MemPtr = StrChr (tmp, '%'); + len = MemPtr - tmp; + if (len) + StrNCopy (title, tmp, len); + title[len] = 0; + StrCat (title, countStr); + MemPtr++; + StrCat (title, MemPtr); + + //free the tmp MemPtr + MemPtrFree(tmp); + } + else + { + // Format the title string. A string resource is used as a template, the + // '#' character in the template indicates the postions of the numeric + // value. + total = DmNumRecordsInCategory (MailDB, CurrentCategory); + + if (total == 1) + titleTemplateP = MemHandleLock (DmGetResource (strRsc, listTitleNotInboxSingularStrId)); + else + titleTemplateP = MemHandleLock (DmGetResource (strRsc, listTitleNotInboxStringId)); + + StrIToA (countStr, total); + len = StrLen (countStr) + StrLen (titleTemplateP); + + title = MemPtrNew (len + 1); + ErrFatalDisplayIf (!title, "Out of memory"); + + MemPtr = StrChr (titleTemplateP, '#'); + len = MemPtr - titleTemplateP; + StrNCopy (title, titleTemplateP, len); + title[len] = 0; + StrCat (title, countStr); + + MemPtr++; + StrCat (title, MemPtr); + } + + //erase the title area then re-draw it + frm = FrmGetFormPtr (ListView); + + objIndex = FrmGetObjectIndex (frm, ListTitleLabel); + FrmHideObject (frm, objIndex); + FrmCopyLabel (frm, ListTitleLabel, title); + FrmShowObject (frm, objIndex); + + MemPtrUnlock(titleTemplateP); + MemPtrFree(title); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewDrawDate + * + * DESCRIPTION: This routine draws a messages date. + * + * PARAMETERS: table - pointer to a table object + * row - row the item is in + * column - column the item is in + * bounds - region to draw in + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static void ListViewDrawDate (DateType date, Int16 x, Int16 y) +{ + UInt16 dateStrLen; + Char dateBuffer [dateStringLength]; + Int16 drawX, drawY; + Char * dateStr; + FontID currFont; + + currFont = FntSetFont (ListFont); + + // If there is no date draw a dash to indicate such. + if (DateToInt (date) == noDate) + { + drawX = x + ((listDateWidth - 5) >> 1); + drawY = y + ((FntLineHeight () + 1) / 2); + WinDrawLine (drawX, drawY, drawX+5, drawY); + } + + else + { + DateToAscii (date.month, date.day, date.year + firstYear, + DateFormat, dateBuffer); + + // Remove the year from the date string. + dateStr = dateBuffer; + if ((DateFormat == dfYMDWithSlashes) || + (DateFormat == dfYMDWithDots) || + (DateFormat == dfYMDWithDashes)) + dateStr += 3; + else + { + dateStr[StrLen(dateStr) - 3] = 0; + } + + + // Draw the due date, right aligned. + dateStrLen = StrLen (dateStr); + WinDrawChars (dateStr, + dateStrLen, + x + listDateWidth - FntCharsWidth (dateStr, dateStrLen), + y); + } + + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewDrawRecord + * + * DESCRIPTION: This routine the draw the title memo record in the list + * view. This routine is called by the table routine, + * TblDrawTable, each time a line of the table needs to + * be drawn. + * + * PARAMETERS: table - pointer to the memo list table (TablePtr) + * row - row of the table to draw + * column - column of the table to draw + * bounds - bound to the draw region + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/31/96 Initial Revision + * MGolden 7/9/97 Draw the missing subject text (noSubjectListViewStrID) + * if there is no subject to draw. Also draw the Missing + * To: text if there is no To: + * MGolden 7/9/97 Set drawing order back to: To, Subject, Date + * MGolden 7/9/97 Removed code to strip the to/from field at a space or @ + * + ***********************************************************************/ +static void ListViewDrawRecord (void * table, Int16 row, Int16 UNUSED_PARAM(column), + RectanglePtr bounds) +{ + //Char ch; + Char name [maxListFromNameLen]; + Int16 x, y, offset; + Int16 width; + UInt16 recordNum; + MemHandle recordH; + Boolean showDateColumn; + MailDBRecordType record; +// Char * atSymbolP; +// Char * lastSpaceP; + Int16 subjectWidth; + Int16 addressWidth; + Char * subject; + Char title[32]; + FontID curFont; + UInt16 iconID = 0; + MemHandle h; + BitmapPtr bitmapP; + + // Get the record number that corresponds to the table item to draw. + // The record number is stored in the "intValue" field of the item. + recordNum = TblGetRowID (table, row); + MailGetRecord (MailDB, recordNum, &record, &recordH); + + x = bounds->topLeft.x; + y = bounds->topLeft.y; + width = bounds->extent.x; + + // Draw the check mark icon. + if (CurrentCategory == inboxCategory) + { + iconID = 0; + if (record.flags.read) + { + if (record.flags.priority == priorityHigh) + iconID = readUrgentIconID; + else + iconID = readIconID; + } + else if (record.flags.priority == priorityHigh) + iconID = urgentIconID; + + if (iconID > 0) + { + //draw the icon + h = DmGetResource ('Tbmp', iconID); + if (h) + { + bitmapP = (BitmapPtr)MemHandleLock(h); + if (bitmapP) + { + //center the icon vertically in the space + if ((*bitmapP).height < bounds->extent.y) + offset = (bounds->extent.y - (*bitmapP).height)/2; + else + offset = 0; + + WinDrawBitmap (bitmapP , bounds->topLeft.x, bounds->topLeft.y + offset); + MemPtrUnlock (bitmapP); + } + DmReleaseResource (h); + } + } + x += listIconWidth; + width -= listIconWidth; + } + + + +#ifdef OLDWAY + if (CurrentCategory == inboxCategory) + { +//draw the check centered in the line height + + FntSetFont (symbolFont); + ch = symbolCheckMark; + if (record.flags.read) + WinDrawChars (&ch, 1, x, y); + x += FntCharWidth (ch) + 2; + width -= x; + + listIconWidth + + } +#endif + + showDateColumn = ShowDates && + CurrentCategory != outboxCategory && + CurrentCategory != draftCategory; + + if (showDateColumn) + width -= listDateWidth + listColumnSpacing; + + width -= listColumnSpacing; + +// addressWidth = width / 3; + addressWidth = width / 2; + subjectWidth = width - addressWidth; + +/* + if (record.flags.priority == priorityHigh) + curFont = FntSetFont (boldFont); + else + curFont = FntSetFont (stdFont); +*/ + curFont = FntSetFont (ListFont); + + // Draw the address. If the current category is the outbox then + // draw the "to" field, otherwise draw the "from" field. + if (CurrentCategory != outboxCategory && CurrentCategory != draftCategory) + { + if (*record.from) + { + // Get the friendly name if there is one. + MailParseAddress (record.from, true, name, sizeof (name)); + +/* + // Because the name column is only a third of the width + // show only the most important part of the sender's name + + // Strip off the domain name + atSymbolP = StrChr(name, '@'); + if (atSymbolP) + { + *atSymbolP = '\0'; + } + else + { + // Strip off the last name. The last name is stripped instead of + // of the first name because users probably get mail from people with + // the same last name (family members) than the same first names. + lastSpaceP = StrChr(name, ' '); + if (lastSpaceP) + { + *lastSpaceP = '\0'; + } + } +*/ + DrawString (name, x, y, addressWidth); + } + // check the to field ... + else if (*record.to) + { + //is there a to? + MailParseAddress (record.to, true, name, sizeof (name)); + DrawString (name, x, y, addressWidth); + } + else + { + //draw the missing string? + subject = MemHandleLock (DmGetResource (strRsc, noToListViewStrID)); + StrCopy (title, subject); + MemPtrUnlock (subject); + DrawString (title, x, y, addressWidth); + } + } + else + { + if (*record.to) + { + //mgmg changed 8/4/97 + //DrawString (record.to, x, y, addressWidth); + MailParseAddress (record.to, true, name, sizeof (name)); + DrawString (name, x, y, addressWidth); + } + else + { + //there is no To Field, draw the missing to field message + subject = MemHandleLock (DmGetResource (strRsc, noToListViewStrID)); + StrCopy (title, subject); + MemPtrUnlock (subject); + DrawString (title, x, y, addressWidth); + } + } + x += addressWidth; + + // Draw a line between the address and subject columns. + WinDrawLine (x + 1, y, x + 1, y + bounds->extent.y - 1); + x += listColumnSpacing; + + // Draw the "subject" field. + if (*record.subject) + DrawString (record.subject, x, y, subjectWidth); +//mgmg : draw the noSubjectListViewStrID if there is no subject + else + { + subject = MemHandleLock (DmGetResource (strRsc, noSubjectListViewStrID)); + StrCopy (title, subject); + MemPtrUnlock (subject); + DrawString (title, x, y, subjectWidth); + } + + + x += subjectWidth; + + if (showDateColumn) + { + // Draw a line between the subject and date columns. + WinDrawLine (x + 1, y, x + 1, y + bounds->extent.y - 1); + x += listColumnSpacing; + + + // Draw the "date" field. + FntSetFont (stdFont); + ListViewDrawDate (record.date, x, y); + } + + MemHandleUnlock (recordH); + + FntSetFont (curFont); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewUpdateScrollers + * + * DESCRIPTION: This routine draws or erases the list view scroll arrow + * buttons. + * + * PARAMETERS: frm - pointer to the to do list form + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static void ListViewUpdateScrollers (TablePtr table) +{ + Int16 rows; + UInt16 width; + UInt16 minValue; + UInt16 maxValue; + RectangleType r; + + ErrNonFatalDisplayIf (DmNumRecordsInCategory (MailDB, CurrentCategory) != + MessagesInCategory, "Invalid record count"); + + //rows = TblGetNumberOfRows (table); + rows = ListViewNumberOfRows (GetObjectPtr(ListTable)); + + // Leave room for the scroll bar if it will be visible. + FrmGetFormBounds (FrmGetActiveForm (), &r); + width = r.extent.x; + if (MessagesInCategory > rows) + width -= listScrollBarWidth; + + TblSetColumnWidth (table, 0, width); + TblGetBounds (table, &r); + r.extent.x = width; + TblSetBounds (table, &r); + + + if (MessagesInCategory) + minValue = DmPositionInCategory (MailDB, TopVisibleRecord, CurrentCategory); + else + minValue = 0; + + if (MessagesInCategory > rows) + maxValue = MessagesInCategory - rows; + else + maxValue = 0; + + SclSetScrollBar (GetObjectPtr (ListScrollBar), minValue, 0, maxValue, rows); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewLoadTable + * + * DESCRIPTION: This routine loads memo database records into + * the list view form. + * + * PARAMETERS: recordNum index of the first record to display. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/31/96 Initial Revision + * + ***********************************************************************/ +static void ListViewLoadTable (FormPtr frm, UInt16 recordNum) +{ + UInt16 row; + UInt16 lastRecordNum; + UInt16 numRows; + UInt32 uniqueID; + TablePtr table; + MemHandle recordH; + FontID currFont; + RectangleType r; + UInt16 dataHeight; + UInt16 tableHeight; + UInt16 lineHeight; + + + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, ListTable)); + + /* HandEra */ + if (vgaExists) + VgaTableUseBaseFont(table, !VgaIsVgaFont(ListFont)); + /* end HandEra */ + + TblGetBounds (table, &r); + tableHeight = r.extent.y; + + dataHeight = 0; + + currFont = FntSetFont (ListFont); + lineHeight = FntLineHeight (); + FntSetFont (currFont); + + // For each row in the table, store the record number in the table item + // that will dispaly the record. + numRows = TblGetNumberOfRows (table); + for (row = 0; row < numRows; row++) + { + // Get the next record in the currunt category. + recordH = DmQueryNextInCategory (MailDB, &recordNum, + CurrentCategory); + + // If the record was found, store the record number in the table item, + // otherwise set the table row unusable. +// if (recordH) + if (recordH && (tableHeight >= dataHeight + lineHeight)) + { + TblSetRowID (table, row, recordNum); + +//new font stuff + TblSetItemStyle (table, row, 0, customTableItem); + TblSetItemFont (table, row, 0, ListFont); + TblSetRowHeight (table, row, lineHeight); + + DmRecordInfo (MailDB, recordNum, NULL, &uniqueID, NULL); + if (TblGetRowData (table, row) != uniqueID || + (!TblRowUsable (table, row))) + { + TblSetRowUsable (table, row, true); + + // Store the unique id of the record in the row. + TblSetRowData (table, row, uniqueID); + + // Mark the row invalid so that it will draw when we call the + // draw routine. + TblMarkRowInvalid (table, row); + } + + lastRecordNum = recordNum; + if (row+1 < numRows) + recordNum++; + + dataHeight += lineHeight; + } + else + { + TblSetRowUsable (table, row, false); + TblSetItemFont (table, row, 0, ListFont); + TblSetRowHeight (table, row, lineHeight); + } + } + + // Update the scroll arrows. + ListViewUpdateScrollers (table); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewLoadRecords + * + * DESCRIPTION: This routine loads memo database records into + * the list view form. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * + ***********************************************************************/ +static void ListViewLoadRecords (FormPtr frm) +{ + TablePtr table; + UInt16 recordNum; + UInt16 rowsInTable; + + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, ListTable)); + //rowsInTable = TblGetNumberOfRows (table); + rowsInTable = ListViewNumberOfRows (table); + + + // Is the current record before the first visible record? + if (CurrentRecord != noRecordSelected) + { + if (TopVisibleRecord > CurrentRecord) + TopVisibleRecord = CurrentRecord; + + // Is the current record after the last visible record? + else + { + recordNum = TopVisibleRecord; + DmSeekRecordInCategory (MailDB, &recordNum, rowsInTable-1, + dmSeekForward, CurrentCategory); + if (recordNum < CurrentRecord) + TopVisibleRecord = CurrentRecord; + } + } + + + // Make sure we show a full display of records. + recordNum = dmMaxRecordIndex; + if (DmSeekRecordInCategory (MailDB, &recordNum, (rowsInTable-1), + dmSeekBackward, CurrentCategory) == 0) + TopVisibleRecord = min (TopVisibleRecord, recordNum); + else + TopVisibleRecord = 0; + + ListViewLoadTable (frm, TopVisibleRecord); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewChangeCategory + * + * DESCRIPTION: This routine display the category specified + * + * PARAMETERS: category - new category + * + * RETURNED: The index of the new category. + * + * The following global variables are modified: + * CurrentCategory + * ShowAllCategories + * CategoryName + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * + ***********************************************************************/ +static void ListViewChangeCategory (UInt16 category) +{ + FormPtr frm; + TablePtr table; + + frm = FrmGetActiveForm (); + table = GetObjectPtr (ListTable); + + ChangeCategory (category); + + // Display the new category. + TblEraseTable (table); + + ListViewLoadTable (frm, TopVisibleRecord); + + TblDrawTable (table); + + ListViewSetTitle (); + + //unset the current record..it will not be in the new category! + CurrentRecord = noRecordSelected; + + //mgmg 7/16 + //ListViewSelectRecord(frm, CurrentRecord, true); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewUpdateDisplay + * + * DESCRIPTION: This routine updates the display of the List View + * + * PARAMETERS: updateCode - a code that indicated what changes have been + * made to the to do list. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * MGolden 10/3/97 Rocky font changes + * jmp 10/31/99 Handle frmRedrawUpdateCode as the generic form + * handling code no longer works for us in Palm + * OS 3.5 and later. + * + ***********************************************************************/ +static Boolean ListViewUpdateDisplay (UInt16 updateCode) +{ + TablePtr table; + + table = GetObjectPtr (ListTable); + + // Was the UI unable to save an image of the ListView when it + // obscured part of the view with another dialog? If so we'll + // handle it here. + if (updateCode & frmRedrawUpdateCode) + { + FormPtr frm = FrmGetActiveForm (); + FrmDrawForm (frm); + ListViewSelectRecord (frm, CurrentRecord, true); + return (true); + } + + // Were the display options modified (ToDoOption dialog)? + if (updateCode & (updateDisplayOptsChanged | updateFontChanged)) + { + //new for rocky font + TopVisibleRecord = 0; + + ListViewLoadRecords (FrmGetActiveForm()); + table = GetObjectPtr (ListTable); + TblEraseTable (table); + TblDrawTable (table); + + //TblEraseTable (table); + //ListViewLoadTable (FrmGetActiveForm (), TopVisibleRecord); + //TblDrawTable (table); + //mgmg + //ListViewSelectRecord(FrmGetActiveForm (), CurrentRecord, true); + return (true); + } + + // Were deleted records purged? + if (updateCode & updatePurge) + { + SeekRecord (&TopVisibleRecord, 0, dmSeekForward); + ListViewLoadTable (FrmGetActiveForm (), TopVisibleRecord); + TblRedrawTable(table); + return (true); + } + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewScroll + * + * DESCRIPTION: This routine scrolls the list of of message + * in the direction specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/3/96 Initial Revision + * MGolden 7/16/97 De-select the current selction before scrolling + * because of a bug in the table code that will trash the table struct + * if the selected item is not a valid row. + * + * TABLE does not MemHandle font's correctly! + * + ***********************************************************************/ +static void ListViewScroll (Int16 linesToScroll) +{ + Int16 i; + UInt16 rows; + UInt16 lastRow; + UInt16 scrollAmount; + UInt16 lastRecord; + UInt16 newTopVisibleRecord; + TablePtr table; + RectangleType scrollR; + RectangleType vacated; + WinDirectionType direction; + + //CurrentRecord = noRecordSelected; + + table = GetObjectPtr (ListTable); + //rows = TblGetNumberOfRows (table); + rows = ListViewNumberOfRows (table); + + //de-select the table item... + TblUnhighlightSelection (table); + + // Find the new top visible record + newTopVisibleRecord = TopVisibleRecord; + + // Scroll winDown. + if (linesToScroll > 0) + { + if (! SeekRecord (&newTopVisibleRecord, linesToScroll, dmSeekForward)) + return; + + lastRecord = TopVisibleRecord; + if (!SeekRecord (&lastRecord, rows, dmSeekForward)) + return; + + } + + // Scroll winUp. + else if (linesToScroll < 0) + { + if (! SeekRecord (&newTopVisibleRecord, -linesToScroll, dmSeekBackward)) + return; + } + + + TopVisibleRecord = newTopVisibleRecord; + + // Move the bits that will remain visible. + if (((linesToScroll > 0) && (linesToScroll < rows)) || + ((linesToScroll < 0) && (-linesToScroll < rows))) + { + scrollAmount = 0; + + if (linesToScroll > 0) + { + lastRow = TblGetLastUsableRow (table) - 1; + for (i = 0; i < linesToScroll; i++) + { + scrollAmount += TblGetRowHeight (table, lastRow); + TblRemoveRow (table, 0); + } + direction = winUp; + } + else + { + for (i = 0; i < -linesToScroll; i++) + { + scrollAmount += TblGetRowHeight (table, 0); + TblInsertRow (table, 0); + } + direction = winDown; + } + + TblGetBounds (table, &scrollR); + WinScrollRectangle (&scrollR, direction, scrollAmount, &vacated); + WinEraseRectangle (&vacated, 0); + } + + + ListViewLoadTable (FrmGetActiveForm (), TopVisibleRecord); + + TblRedrawTable(table); + + //mgmg 7/16 + //re-select the current record (only if it's visible now) + ListViewSelectRecord (FrmGetActiveForm (), CurrentRecord, false); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewPageScroll + * + * DESCRIPTION: This routine scrolls the list of of expense items + * in the direction specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/2/96 Initial Revision + * + ***********************************************************************/ +static void ListViewPageScroll (WinDirectionType direction) +{ + TablePtr table; + Int16 row; + UInt16 recordNum; + Int16 rowsInTable; + UInt16 newTopVisibleRecord; + + table = GetObjectPtr (ListTable); + //rowsInTable = TblGetNumberOfRows (table); + rowsInTable = ListViewNumberOfRows (table); + + newTopVisibleRecord = TopVisibleRecord; + + //mgmg no reason for this that I can see... + //CurrentRecord = noRecordSelected; + + //de-select the table item... + TblUnhighlightSelection (table); + + // Scroll the table winDown a page (less one row). + if (direction == winDown) + { + // Get the record index of the last visible record. A row + // number of minus one indicates that there are no visible rows. + row = TblGetLastUsableRow (table); + if (row == -1) return; + + newTopVisibleRecord = TblGetRowID (table, row); + recordNum = newTopVisibleRecord; + + // Try going forward one page + if (!SeekRecord (&recordNum, rowsInTable - 1, dmSeekForward)) + { + // Try going backwards one page from the last record + newTopVisibleRecord = dmMaxRecordIndex; + if (!SeekRecord (&newTopVisibleRecord, rowsInTable - 1, dmSeekBackward)) + { + // Not enough records to fill one page. Start with the first record + newTopVisibleRecord = 0; + SeekRecord (&newTopVisibleRecord, 0, dmSeekForward); + } + } + } + + // Scroll winUp a page (less one row). + else + { + if (!SeekRecord (&newTopVisibleRecord, rowsInTable - 1, dmSeekBackward)) + { + // Not enough records to fill one page. Start with the first record + newTopVisibleRecord = 0; + SeekRecord (&newTopVisibleRecord, 0, dmSeekForward); + } + } + + // Avoid redraw if no change + if (TopVisibleRecord != newTopVisibleRecord) + { + TopVisibleRecord = newTopVisibleRecord; + +//mgmg do later +// ListViewLoadRecords (FrmGetActiveForm ()); +// TblRedrawTable(table); + + TblMarkTableInvalid (table); + ListViewLoadTable (FrmGetActiveForm (), TopVisibleRecord); + TblRedrawTable (table); + + } + //mgmg 8/4 + //re-select the current record (only if it's visible now) + ListViewSelectRecord (FrmGetActiveForm (), CurrentRecord, false); +} + + +/*********************************************************************** + * + * FUNCTION: ListViewDoCommand + * + * DESCRIPTION: This routine preforms the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/4/96 Initial Revision + * + ***********************************************************************/ +static void ListViewDoCommand (UInt16 command) +{ + switch (command) + { + case newMenuCmd: + if (CreateRecord ()) + FrmGotoForm (NewView); + break; + +// case showMenuCmd: +// FrmPopupForm (OptionsDialog); +// break; + + case preferencesMenuCmd: + FrmPopupForm (PrefDialog); + break; + + case hotSyncMenuCmd: + FrmPopupForm (SyncDialog); + break; + + case purgeMenuCmd: + if (PurgeDeletedRecord ()) + { + // If the "deleted" catagory is shown, erease the table. + if (CurrentCategory == deletedCategory) + ListViewChangeCategory (deletedCategory); + else + FrmUpdateForm (ListView, updatePurge); + } + break; + + case aboutMenuCmd: + AbtShowAbout (sysFileCMail); + break; + + case ListChangeFontMenuCmd: + ListFont = SelectFont (ListFont); + break; + } +} + + +/* HandEra */ +/*********************************************************************** + * + * FUNCTION: ListViewResize + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + ***********************************************************************/ +static void ListViewResize(Boolean draw) +{ + FormPtr frmP; + Coord x, y; + Coord xDiff, yDiff; + TablePtr table; + RectangleType r; + + WinGetDisplayExtent(&x, &y); + + // this will get the old extent + // resize form + frmP = FrmGetActiveForm(); + FrmGetFormBounds(frmP, &r); + + xDiff = x - (r.topLeft.x + r.extent.x); + yDiff = y - (r.topLeft.y + r.extent.y); + if ((xDiff == 0) && (yDiff == 0)) + return; + + // resize form + r.extent.x += xDiff; + r.extent.y += yDiff; + WinSetWindowBounds(FrmGetWindowHandle(frmP), &r); + + // resize table + table = GetObjectPtr(ListTable); + TblGetBounds(table, &r); + r.extent.x += xDiff; + r.extent.y += yDiff; + TblSetBounds(table, &r); + + if(draw && (yDiff < 0)) + { + r.topLeft.y = (r.topLeft.y + r.extent.y); + r.extent.y = -yDiff; + WinEraseRectangle (&r, 0); + } + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, ListNewButton), 0, yDiff, draw); + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, ListShowButton), 0, yDiff, draw); + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, ListScrollBar), xDiff, 0, false); + ToolsResizeObject(frmP, FrmGetObjectIndex(frmP, ListScrollBar), 0, yDiff, draw); + + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, ListCategoryTrigger), xDiff, 0, draw); + ToolsMoveObject(frmP, FrmGetObjectIndex(frmP, ListCategoryList), xDiff, 0, draw); + + if (draw) + { + ListViewLoadTable(frmP, TopVisibleRecord); + FrmDrawForm(frmP); + } +} +/* end HandEra */ + +/*********************************************************************** + * + * FUNCTION: ListViewInit + * + * DESCRIPTION: This routine initializes the "List View" of the + * Mail application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has MemHandle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/31/96 Initial Revision + * + ***********************************************************************/ +static void ListViewInit (FormPtr frm) +{ + Int16 row; + Int16 rowsInTable; + ListPtr lst; + TablePtr table; + ControlPtr ctl; + + ListViewResize(false); + + MessagesInCategory = DmNumRecordsInCategory (MailDB, CurrentCategory); + + ListViewSetTitle (); + + // Set the label of the category trigger. + ctl = GetObjectPtr (ListCategoryTrigger); + CategoryGetName (MailDB, CurrentCategory, CategoryName); + CategorySetTriggerLabel (ctl, CategoryName); + + // Set the category list selection. + lst = GetObjectPtr (ListCategoryList); + LstSetSelection (lst, CurrentCategory); + + //now get the current table + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, ListTable)); + + rowsInTable = TblGetNumberOfRows (table); + for (row = 0; row < rowsInTable; row++) + { + TblSetItemStyle (table, row, 0, customTableItem); + TblSetRowUsable (table, row, false); + } + + // Set the callback routine that will draw the records. + TblSetCustomDrawProcedure (table, 0, ListViewDrawRecord); + + TblSetColumnUsable (table, 0, true); + + ListViewLoadRecords (frm); + + // Set the following global so that we will return to the List + // View when a new message is sent. + ReturnToView = ListView; +} + + +/*********************************************************************** + * + * FUNCTION: ListViewHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "List View" + * of the Mail application. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 05/31/96 Initial Revision + * kwk 11/22/98 MemHandle command keys in separate code block so that + * TxtCharIsPrint doesn't get called w/virtual chars. + * jmp 10/31/99 Perform FrmDrawForm() in frmOpenForm BEFORE calling + * ListViewSelectRecord() to prevent selected record from + * getting drawn as unselected. Fixes bug #23416. + * + ***********************************************************************/ +static Boolean ListViewHandleEvent (EventPtr event) +{ + FormPtr frm; + TablePtr table; + Boolean handled = false; + + if (event->eType == keyDownEvent) + { + // Mail key pressed? If so display the first mail message. + if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) + { + if (! (event->data.keyDown.modifiers & poweredOnKeyMask)) + { + table = GetObjectPtr (ListTable); + if (TblRowUsable (table, 0)) + { + CurrentRecord = TblGetRowID (table, 0); + FrmGotoForm (MessageView); + } + handled = true; + } + } + + else if (EvtKeydownIsVirtual(event)) + { + // Scroll up key presed? + if (event->data.keyDown.chr == vchrPageUp) + { + ListViewPageScroll (winUp); + handled = true; + } + + // Scroll down key presed? + else if (event->data.keyDown.chr == vchrPageDown) + { + ListViewPageScroll (winDown); + handled = true; + } + } + } + + else if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case ListNewButton: + if (CreateRecord ()) + FrmGotoForm (NewView); + handled = true; + break; + + case ListShowButton: + FrmPopupForm (OptionsDialog); + handled = true; + break; + } + } + + else if (event->eType == tblSelectEvent) + { + // An item in the list of messages was selected, display it. + CurrentRecord = TblGetRowID (event->data.tblSelect.pTable, + event->data.tblSelect.row); + FrmGotoForm (MessageView); + handled = true; + } + + else if (event->eType == menuEvent) + { + ListViewDoCommand (event->data.menu.itemID); + return (true); + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + if (vgaExists) + VgaFormModify(frm, vgaFormModify160To240); +/* end HandEra */ + ListViewInit (frm); + FrmDrawForm (frm); + ListViewSelectRecord (frm, CurrentRecord, true); + handled = true; + } + + else if (event->eType == frmUpdateEvent) + { + handled = ListViewUpdateDisplay (event->data.frmUpdate.updateCode); + } + + else if (event->eType == popSelectEvent) + { + ListViewChangeCategory (event->data.popSelect.selection); + } + + else if (event->eType == sclRepeatEvent) + { + ListViewScroll (event->data.sclRepeat.newValue - + event->data.sclRepeat.value); + } +/* HandEra */ + else if (event->eType == displayExtentChangedEvent) + { + ListViewResize(true); + handled = true; + } +/* end HandEra */ + return (handled); +} + + +/*********************************************************************** + * + * FUNCTION: ApplicationHandleEvent + * + * DESCRIPTION: This routine loads form resources and sets the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * + ***********************************************************************/ +static Boolean ApplicationHandleEvent (EventPtr event) +{ + UInt16 formID; + FormPtr frm; + + if (event->eType == frmLoadEvent) + { + // Load the form resource. + formID = event->data.frmLoad.formID; + frm = FrmInitForm (formID); + FrmSetActiveForm (frm); + + // Set the event handler for the form. The handler of the currently + // active form is called by FrmDispatchEvent each time is receives an + // event. + switch (formID) + { + case ListView: + FrmSetEventHandler (frm, ListViewHandleEvent); + break; + + case MessageView: + FrmSetEventHandler (frm, MessageViewHandleEvent); + break; + + case NewView: + FrmSetEventHandler (frm, NewViewHandleEvent); + break; + + case EditView: + FrmSetEventHandler (frm, EditViewHandleEvent); + break; + + case ReplyDialog: + FrmSetEventHandler (frm, ReplyHandleEvent); + break; + + case DetailsDialog: + FrmSetEventHandler (frm, DetailsHandleEvent); + break; + + case OptionsDialog: + FrmSetEventHandler (frm, OptionsHandleEvent); + break; + + case PrefDialog: + FrmSetEventHandler (frm, PrefHandleEvent); + break; + + case SyncDialog: + FrmSetEventHandler (frm, SyncHandleEvent); + break; + + case TruncateDialog: + FrmSetEventHandler (frm, TruncateHandleEvent); + break; + + } + return (true); + } + return (false); +} + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the Mail application + * + * PARAMETERS: cmd - launch code + * cmdPBP - paramenter block (launch code specific) + * launchFlags - SysAppLaunch flags (ses SystemMgr.h) + * + * RETURNED: error code + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * MGolden 7/28/97 Added call to RomVersionCompatible + * jmp 10/18/99 If the default database image doesn't exist, then create + * an empty database. + * + ***********************************************************************/ +UInt32 PilotMain (UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + UInt16 error; + MailAddRecordParamsType newMsg; + + + // This app makes use of PalmOS 2.0 features. It will crash if run on an + // earlier version of PalmOS. Detect and warn if this happens, then exit. + // Actually, require 4.0 ROM since that's what it's tested to run on. +#ifdef DO_ROM_CHECK + error = RomVersionCompatible (ourMinVersion, launchFlags); + if (error) + return error; +#endif + // Normal Launch + if (cmd == sysAppLaunchCmdNormalLaunch) + { + error = StartApplication (); + if (error) return (error); + + #if ERROR_CHECK_LEVEL == ERROR_CHECK_FULL + ECMailDBValidate (MailDB); + #endif + + if (NewRecord == noNewRecord) + FrmGotoForm (ListView); + else + FrmGotoForm (NewView); + EventLoop (); + + StopApplication (); + } + + + // This action code is sent to the app by the system when it is + // doing a text search. + else if (cmd == sysAppLaunchCmdFind) + { + Search ((FindParamsPtr)cmdPBP); + } + + + // This action code is sent to the app when the user hit the "Go To" + // button in the Find Results dialog. + else if (cmd == sysAppLaunchCmdGoTo) + { + Boolean launched; + launched = launchFlags & sysAppLaunchFlagNewGlobals; + + if (launched) + { + error = StartApplication (); + if (error) return (error); + + GoToItem ((GoToParamsPtr) cmdPBP, launched); + + EventLoop (); + StopApplication (); + } + else + GoToItem ((GoToParamsPtr) cmdPBP, launched); + } + + + else if (cmd == sysAppLaunchCmdSyncNotify) + { + ExgRegisterDatatype(sysFileCMail, exgRegSchemeID, "mailto", + "Email URL", 0); + SyncNotification (); + } + + + // This launch code is sent after the system is reset. We use this time + // to create our default database. If there is no default database image, + // then we create an empty database. + else if (cmd == sysAppLaunchCmdSystemReset) + { + if (((SysAppLaunchCmdSystemResetType*)cmdPBP)->createDefaultDB) + { + error = CreateDefaultDatabase(); + } + ExgRegisterDatatype(sysFileCMail, exgRegSchemeID, "mailto", + "Email URL", 0); + RegisterLocaleChangedNotification(); + } + + + // This action code is sent by the DesktopLink server when it creates + // a new database. We will initializes the new database. + else if (cmd == sysAppLaunchCmdInitDatabase) + { + MailAppInfoInit (((SysAppLaunchCmdInitDatabaseType*)cmdPBP)->dbP); + + // Set the backup bit. This is to aid syncs with non-Palm software. + SetDBBackupBit(((SysAppLaunchCmdInitDatabaseType*)cmdPBP)->dbP); + } + + + // This action code is sent by an other application when it want to + // add a record to the Mail outbox. + else if (cmd == sysAppLaunchCmdAddRecord) + { + error = AddMessage ((MailAddRecordParamsPtr)cmdPBP, true); + if (error) return (error); + } + + // This action code is sent by exchange manager when we want to + // open a mailto: url + else if (cmd == sysAppLaunchCmdGoToURL) + { + Char *buf; + UInt16 button; + buf = MemPtrNew(StrLen(cmdPBP)); + if(!buf) return memErrNotEnoughSpace; + error = ParseMailtoURL(&newMsg, cmdPBP, buf); + if (error) { + MemPtrFree(buf); + return (error); + } + button = FrmAlert (SaveDraftAlert); + if (button == SaveDraftYes) + error = AddMessage(&newMsg, false); + MemPtrFree(buf); + if (error) return (error); + } + else if (cmd == sysAppLaunchCmdNotify) + { + if (((SysNotifyParamType*)cmdPBP)->notifyType == sysNotifyLocaleChangedEvent) + { + DmSearchStateType searchState; + LocalID dbID; + UInt16 cardNo; + + // Since the locale has changed, delete the existing database + // and re-create it for the new locale + error = DmGetNextDatabaseByTypeCreator (true, &searchState, mailDBType, + sysFileCMail, true, &cardNo, &dbID); + if (!error) + DmDeleteDatabase(cardNo, dbID); + + error = CreateDefaultDatabase(); + + } + } + + return (errNone); + } +/*********************************************************************** + * + * FUNCTION: EventLoop + * + * DESCRIPTION: This routine is the event loop for the Mail + * aplication. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * + ***********************************************************************/ +static void EventLoop (void) +{ + UInt16 error; + EventType event; + + do + { + EvtGetEvent (&event, evtWaitForever); + + if (! SysHandleEvent (&event)) + + if (! MenuHandleEvent (NULL, &event, &error)) + + if (! ApplicationHandleEvent (&event)) + + FrmDispatchEvent (&event); + } + + while (event.eType != appStopEvent); +} + +/*********************************************************************** + * + * FUNCTION: PrvGetNameValuePair + * + * DESCRIPTION: Called from anyone that must parse name/value pairs. + * + * PARAMETERS: + * strP -> ptr to ptr to string holding HTML name/value pairs + * strLen -> ptr to Int16 holding length of string + * nameP -> ptr to ptr to location to store the resulting name string pointer + * nameLen -> ptr to Int16 to hold resulting nameP length + * valueP -> ptr to ptr to location to store the resulting value string pointer + * valueLen -> ptr to Int16 to hold resulting valueP length + * + * RETURNED: false if nothing found else true if found + * + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * tgh 4/23/98 Initial Version + * gcd 7/25/00 Move into Msg.c instead of INetLib + * + ***********************************************************************/ +static Boolean PrvGetNameValuePair(Char **strP, Int16 * strLen, Char **nameP, + Int16 * nameLen, Char **valueP, + Int16 * valueLen) +{ + Boolean result = false; + Int16 i, j, index = 0; + + if (*strLen == 0) + return false; + + *nameP = *strP; // assume name to be first character + + for (i = 0; i < *strLen; i++) + { + if ((*strP)[i] == '=') + { + index++; + break; + } + } + + *nameLen = i; // set the length of the name + *valueP = *strP + i + 1; // skip past the '=' sign + + for (j = 0; j < *strLen - i - 1; j++) + { + if ((*valueP)[j] == '&') + { + index++; + break; + } + } + + *valueLen = j; + + index += i + j; // name + value + '=' and/or '&' (if any) + if (index <= *strLen) + { + result = true; + *strP = *strP + index; + *strLen = *strLen - index; + } + + return result; +} + +/*********************************************************************** + * + * FUNCTION: ParseMailtoURL + * + * DESCRIPTION: Parse a mailto: url that exchange manager has given us + * + * PARAMETERS: newMsgP - MailAddRecordParamsType to fill in + * cmdPBP - parameter block + * + * RETURNED: error code + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * gcd 7/24/00 Initial Revision + ***********************************************************************/ +static Err ParseMailtoURL(MailAddRecordParamsPtr newMsgP, MemPtr cmdPBP, + Char *buf) +{ + Char *c, *nameP, *valueP; + Int16 strLen, nameLen, valueLen; + UInt16 i = 0; + + MemSet(newMsgP, sizeof(MailAddRecordParamsType), 0); + buf[0] = '\0'; + c = (Char *)StrChr((Char *)cmdPBP, ':'); + if(c) + { + c++; + while(*c && *c != '?') + buf[i++] = *c++; + buf[i] ='\0'; + newMsgP->to = buf; + if(*c == '?') + { + strLen = StrLen(c); + while (PrvGetNameValuePair(&c, &strLen, &nameP, &nameLen, &valueP, &valueLen)) + { + if(nameLen == 2 && (valueP) && + (!StrNCaselessCompare(nameP, "to", nameLen))) + { + StrNCat(&buf[i], valueP, valueLen); + newMsgP->to = &buf[i]; + i+=valueLen; + buf[i]='\0'; + } + if(nameLen == 7 && (valueP) && + (!StrNCaselessCompare(nameP, "subject", nameLen))) + { + StrNCat(&buf[i], valueP, valueLen); + newMsgP->subject = &buf[i]; + i+=valueLen; + buf[i]='\0'; + } + if(nameLen == 4 && (valueP) && + (!StrNCaselessCompare(nameP, "body", nameLen))) + { + StrNCat(&buf[i], valueP, valueLen); + newMsgP->body = &buf[i]; + i+=valueLen; + buf[i]='\0'; + } + } + } + return 0; + } + + return exgErrBadParam; +} + +/*********************************************************************** + * + * FUNCTION: TestAddRecord + * + * DESCRIPTION: Test the dd record function. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 1/23/97 Initial Revision + * + ***********************************************************************/ +/* +static void TestAddRecord (void) +{ + MailMessageParamsType params; + + + params.secret = false; + params.signature = true; + params.confirmRead = true; + params.confirmDelivery = true; + params.priority = priorityHigh; + params.subject = "Test two of add record"; + params.from = "Art Lamb"; + params.to = "To All"; + params.cc = "Copy"; + params.bcc = "Blind copy"; + params.replyTo = "Reply to"; + params.body = "This is a test"; + + AddMessage (¶ms, true); +} +*/ + +/*********************************************************************** + * + * FUNCTION: ListViewSelectRecord + * + * DESCRIPTION: Selects (highlights) a record on the table, scrolling + * to the record if neccessary. + * + * PARAMETERS: recordNum - record to select + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/11/97 select the current record in the list view if + * there is one. + * jmp 10/31/99 Allow scrollToSelect param to force a redraw + * of the currently selected record if necessary. + * + ***********************************************************************/ +static void ListViewSelectRecord (FormPtr frm, UInt16 recordNum, Boolean scrollToSelect) + { + Int16 row, column; + TablePtr tableP; + UInt16 attr; + + if (recordNum == -1) + return; + + ErrFatalDisplayIf (recordNum >= DmNumRecords(MailDB), "Record outside MailDB"); + + // Make sure that recordNum is in CurrentCategory + // Get the category and the secret attribute of the current record. + DmRecordInfo (MailDB, recordNum, &attr, NULL, NULL); + if ((attr & dmRecAttrCategoryMask) != CurrentCategory) + { + //the current record is not in the current category. Clear the current record global + CurrentRecord = noRecordSelected; + return; + } + + tableP = GetObjectPtr (ListTable); + + // Don't change anything if the same record is selected and we're not + // trying to force a selection. + if (TblGetSelection(tableP, &row, &column) && + recordNum == TblGetRowID (tableP, row) && + !scrollToSelect) + { + return; + } + + // See if the record is displayed by one of the rows in the table + // A while is used because if TblFindRowID fails we need to + // call it again to find the row in the reloaded table. + while (!TblFindRowID(tableP, recordNum, &row)) + { + if (!scrollToSelect) + return; + +/* + if (HideSecretRecords) + { + // If the record is hidden stop trying to show it. + DmRecordInfo(AddrDB, recordNum, &attr, NULL, NULL); + if (attr & dmRecAttrSecret) + { + return; + } + } +*/ + + // Scroll the view winDown placing the item + // on the top row + TopVisibleRecord = recordNum; + + //ListLoadTable(); + ListViewLoadTable (frm, TopVisibleRecord); + TblRedrawTable(tableP); + } + + // Select the item + TblSelectItem (tableP, row, 0); + }// + + +// ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ +//Branch Islands! + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * + ***********************************************************************/ +void * GetObjectPtr (UInt16 objectID) +{ + FormPtr frm; + + frm = FrmGetActiveForm (); + return (FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, objectID))); + +} + +/*********************************************************************** + * + * FUNCTION: SearchDraw + * + * DESCRIPTION: This routine draw the address and subject of a message + * found by the text search routine. + * + * PARAMETERS: recordP - a mail record + * category - category the record is in + * r - draw region + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/27/96 Initial Revision + * CS2 10/17/00 Fix bug 42153: address is not displayed in results of [Find] + * + ***********************************************************************/ +static void SearchDraw (MailDBRecordPtr recordP, UInt16 category, RectanglePtr r) +{ + Char name [maxFindFromNameLen]; + Int16 x, y; + Int16 width; + + x = r->topLeft.x + 1; + y = r->topLeft.y; + width = ((r->extent.x - 2) / 2) - findColumnSpacing; + +/* CS2 (42153): revised logic: If there is a from address, use it, otherwise use the to + address. This should superset the previous behavior as outbox messages or draft messages + will lack Froms, inbox messages will have Froms, and deleted or filed messages will have + either Froms or Tos based on whether they were received messages or created messages. +*/ + + if ( *recordP->from ) + { + // Get the friendly name if there is one. + MailParseAddress( recordP->from, true, name, sizeof( name ) ); + DrawString( name, x, y, width ); + } + else if ( *recordP->to ) + { + DrawString( recordP->to, x, y, width ); + } + else + { + MemHandle missingH = DmGetResource( strRsc, noToListViewStrID ); + + if ( missingH ) + { + MemPtr missingP = MemHandleLock( missingH ); + + DrawString( missingP, x, y, width ); + + MemPtrUnlock( missingP ); + DmReleaseResource( missingH ); + } + } + +/* CS2 (42153): old logic + if (category == outboxCategory || category == draftCategory) + { + DrawString (recordP->to, x, y, width); + } + else if (*recordP->from) + { + // Get the friendly name if there is one. + MailParseAddress (recordP->from, true, name, sizeof (name)); + DrawString (name, x, y, width); + } + +*/ + + x += width + findColumnSpacing; + DrawString (recordP->subject, x, y, width); +} + +/*********************************************************************** + * + * FUNCTION: Search + * + * DESCRIPTION: This routine searchs the to do database for records + * contains the string passed. + * + * PARAMETERS: findParams - text search parameter block + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/27/96 Initial Revision + * MGolden 7/28/97 Added code from 2.0 sdk example for canceling the search + * jmp 10/21/99 Changed params to findParams to match other routines + * like this one. + * + ***********************************************************************/ +static void Search (FindParamsPtr findParams) +{ + Err err; + UInt16 pos; + UInt16 attr; + UInt16 cardNo = 0; + UInt16 fieldNum; + UInt16 recordNum; + Char * header; + Boolean done; + Boolean match; + MemHandle recordH; + MemHandle headerH; + LocalID dbID; + DmOpenRef dbP; + RectangleType r; + FindParamsPtr params; + MailDBRecordType record; + DmSearchStateType searchState; + UInt16 matchLength; + + params = (FindParamsPtr)findParams; + + // Find the application's data file. + err = DmGetNextDatabaseByTypeCreator (true, &searchState, mailDBType, + sysFileCMail, true, &cardNo, &dbID); + if (err) + { + findParams->more = false; + return; + } + + // Open the to do database. + dbP = DmOpenDatabase(cardNo, dbID, findParams->dbAccesMode); + if (!dbP) + { + findParams->more = false; + return; + } + + // Display the heading line. + headerH = DmGetResource (strRsc, findHeaderStrId); + header = MemHandleLock (headerH); + done = FindDrawHeader (findParams, header); + MemHandleUnlock(headerH); + if (done) + goto Exit; + + // Search the description and note fields for the "find" string. + recordNum = findParams->recordNum; + while (true) + { + // Because applications can take a long time to finish a find when + // the result may be on the screen or for other reasons, users like + // to be able to stop the find. Stop the find if an event is pending. + // This stops if the user does something with the device. Because + // this call slows winDown the search we perform it every so many + // records instead of every record. The response time should still + // be Int16 without introducing much extra work to the search. + + // Note that in the implementation below, if the next 16th record is + // secret the check doesn't happen. Generally this shouldn't be a + // problem since if most of the records are secret then the search + // won't take long anyway! + if ((recordNum & 0x000f) == 0 && // every 16th record + EvtSysEventAvail(true)) + { + // Stop the search process. + findParams->more = true; + break; + } + + recordH = DmQueryNextInCategory (dbP, &recordNum, dmAllCategories); + + // Have we run out of records? + if (! recordH) + { + findParams->more = false; + break; + } + + MailGetRecord (dbP, recordNum, &record, &recordH); + + // Search the description field, if a match is not found search the + // note field. + match = MsgSearch (&record, findParams->strToFind, &fieldNum, &pos, &matchLength); + if (match) + { + // Add the match to the find paramter block, if there is no room to + // display the match the following function will return true. + done = FindSaveMatch (findParams, recordNum, pos, fieldNum, matchLength, cardNo, dbID); + if (done) + { + MemHandleUnlock (recordH); + break; + } + + // Get the bounds of the region where we will draw the results. + FindGetLineBounds (findParams, &r); + + // Display the match. + DmRecordInfo (dbP, recordNum, &attr, NULL, NULL); + SearchDraw (&record, (attr & dmRecAttrCategoryMask), &r); + + findParams->lineNumber++; + } + + MemHandleUnlock (recordH); + recordNum++; + } + +Exit: + DmCloseDatabase (dbP); +} + +/*********************************************************************** + * + * FUNCTION: ListViewSelectFont + * + * DESCRIPTION: This routine handles selection of a font in the List + * View. + * + * PARAMETERS: currFontID - id of current font + * + * RETURNED: id of new font + * + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/10/97 Initial Revision + * + ***********************************************************************/ +static FontID SelectFont (FontID currFontID) +{ + UInt16 formID; + FontID fontID; + + formID = (FrmGetFormId (FrmGetActiveForm ())); + + // Call the OS font selector to get the id of a font. + fontID = FontSelect (currFontID); + + if (fontID != currFontID) + FrmUpdateForm (formID, updateFontChanged); + + return (fontID); +} + +/*********************************************************************** + * + * FUNCTION: ListViewNumberOfRows + * + * DESCRIPTION: This routine return the maximun number of visible rows, + * with the current list view font setting. + * + * PARAMETERS: table - List View table + * + * RETURNED: maximun number of displayable rows + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/28/97 Initial Revision + * + ***********************************************************************/ +static UInt16 ListViewNumberOfRows (TablePtr table) +{ + UInt16 rows; + UInt16 rowsInTable; + UInt16 tableHeight; + FontID currFont; + RectangleType r; + + + rowsInTable = TblGetNumberOfRows (table); + + TblGetBounds (table, &r); + tableHeight = r.extent.y; + + currFont = FntSetFont (ListFont); + rows = tableHeight / FntLineHeight (); + FntSetFont (currFont); + + if (rows <= rowsInTable) + return (rows); + else + return (rowsInTable); +} + +/*********************************************************************** + * + * FUNCTION: NewViewNumberOfRows + * + * DESCRIPTION: This routine return the maximun number of visible rows, + * with the current list view font setting. + * + * PARAMETERS: table - List View table + * + * RETURNED: maximun number of displayable rows + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/28/97 Initial Revision + * + ***********************************************************************/ +static UInt16 NewViewNumberOfRows (TablePtr table) +{ + UInt16 rows; + UInt16 rowsInTable; + UInt16 tableHeight; + FontID currFont; + RectangleType r; + + rowsInTable = TblGetNumberOfRows (table); + + TblGetBounds (table, &r); + tableHeight = r.extent.y; + + currFont = FntSetFont (EditFont); + rows = tableHeight / FntLineHeight (); + FntSetFont (currFont); + + if (rows <= rowsInTable) + return (rows); + else + return (rowsInTable); + }//NewViewNumberOfRows + +/*********************************************************************** + * + * FUNCTION: NewViewToggleFont + * + * DESCRIPTION: This routine changes the font used to display a note. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * MGolden 7/79/96 Initial Revision + * mgolden 10/6/97 changed for the rocky fonts + * + ***********************************************************************/ +static void NewViewToggleFont () + { + FontID originalFont = EditFont, newFont; + TablePtr table; + FormPtr frm; + + newFont = FontSelect (originalFont); + + if (newFont == originalFont) + return; + + frm = FrmGetActiveForm (); + table = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, NewTable)); + + TblReleaseFocus (table); + + // HACK! for some reason, the table does not erase the + // right edge of the underlined rows (of the edit fields!) + table->bounds.extent.x += 3; + TblEraseTable (table); + table->bounds.extent.x -= 3; + + + //change the table rect to be a direct multiple of the new line height? + table->bounds.extent.y = (gNewViewTableHeight / FntLineHeight ()) * FntLineHeight (); + + // DOLATER (bug 44154) - At this point, if there's a BCC field, and + // every field has two lines in it, and the font is getting changed + // from small to big, then the body row is no longer visible. This + // triggers a field error when the table tries to draw the body text, + // since it winds up creating a field with a height of zero. On release + // ROMs, the only problem is that the Body row label gets drawn over + // the top of the bottom-left button...which seems like a table clipping + // bug, but something that should be avoided in the app. So I think + // there are three useful changes that should be made to really fix + // this bug. (a) Modify the table drawing code to skip drawing a field + // when the field height is zero. Maybe report this as a non-fatal alert. + // (b) Modify the table code to not draw static text outside the bounds + // of the table - this might be a more general fix that covers both + // a & b. (c) Call a new routine here, which disabled/enables the body + // row based on whether it's visible. + + EditFont = newFont; + NewViewLoadTable(frm); + TblDrawTable (table); + NewViewRestoreEditState (); + }//NewViewToggleFont + +/*********************************************************************** + * + * FUNCTION: MailLoadPrefs + * + * DESCRIPTION: Load the preferences and MemHandle backward and forward + * compatibility + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * BGT 1/9/98 Initial Revision + * + ***********************************************************************/ +static void MailLoadPrefs(void) +{ + UInt16 prefsSize; + MailPreferenceType prefs; + Int16 prefsVersion; + UInt32 fontAttr; + + MessageFont = ListFont = EditFont = (FtrGet (sysFtrCreator, sysFtrDefaultFont, &fontAttr) == 0 ? (FontID) fontAttr : stdFont); + +/* HandEra */ + if (vgaExists) + MessageFont = ListFont = EditFont = VgaBaseToVgaFont(EditFont); +/* end HandEra */ + + prefsSize = sizeof (MailPreferenceType); + prefsVersion = PrefGetAppPreferences (sysFileCMail, mailPrefID, &prefs, &prefsSize, true); + if (prefsVersion > mailPrefsVersionNum) { + prefsVersion = noPreferenceFound; + } + if (prefsVersion != noPreferenceFound) + { + MessageFont = prefs.messageFont; + ListFont = prefs.listFont; + EditFont = prefs.editFont; + ShowDates = prefs.showDates; + IncludeOriginalText = prefs.includeOriginalText; + CommentOriginalText = prefs.commentOriginalText; + ConfirmDelete = prefs.confirmDelete; + ShowFullHeader = prefs.showFullHeader; + AttachSignature = prefs.attachSignature; + ConfirmRead = prefs.confirmRead; + ConfirmDelivery = prefs.confirmDelivery; + + //mgmg + MessageRevertCategory = prefs.revertCategory; + } +} + +/*********************************************************************** + * + * FUNCTION: MailSavePrefs + * + * DESCRIPTION: Save the preferences and prepare for backward compatibility + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * BGT 1/9/98 Initial Revision + * + ***********************************************************************/ +void MailSavePrefs(void) +{ + MailPreferenceType prefs; + + prefs.messageFont = MessageFont; + + prefs.listFont = ListFont; + prefs.editFont = EditFont; + + prefs.showDates = ShowDates; + prefs.includeOriginalText = IncludeOriginalText; + prefs.commentOriginalText = CommentOriginalText; + prefs.confirmDelete = ConfirmDelete; + prefs.showFullHeader = ShowFullHeader; + prefs.attachSignature = AttachSignature; + prefs.confirmRead = ConfirmRead; + prefs.confirmDelivery = ConfirmDelivery; + prefs.revertCategory = MessageRevertCategory; + + PrefSetAppPreferences (sysFileCMail, mailPrefID, mailPrefsVersionNum, + &prefs, sizeof (MailPreferenceType), true); +} + +#pragma mark - + +/*********************************************************************** + * + * FUNCTION: ToolsMoveObject + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + * REVISION HISTORY: + * + ***********************************************************************/ +void ToolsMoveObject(FormPtr frmP, UInt16 objIndex, Coord x_diff, Coord y_diff, Boolean draw) +{ + Coord old_x, old_y; + + if(draw) + FrmHideObject(frmP, objIndex); + + FrmGetObjectPosition(frmP, objIndex, &old_x, &old_y); + FrmSetObjectPosition(frmP, objIndex, old_x + x_diff, old_y + y_diff); + + if(draw) + FrmShowObject(frmP, objIndex); +} + +/*********************************************************************** + * + * FUNCTION: ToolsResizeObject + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + * REVISION HISTORY: + * + ***********************************************************************/ +void ToolsResizeObject(FormPtr frmP, UInt16 objIndex, Coord x_diff, Coord y_diff, Boolean draw) +{ + RectangleType r; + + if(draw) + FrmHideObject(frmP, objIndex); + + FrmGetObjectBounds(frmP, objIndex, &r); + r.extent.x += x_diff; + r.extent.y += y_diff; + FrmSetObjectBounds(frmP, objIndex, &r); + + if(draw) + FrmShowObject(frmP, objIndex); +} + + +/*********************************************************************** + * + * FUNCTION: ToolsFrmGetGSI + * + * DESCRIPTION: + * + * PARAMETERS: + * + * RETURNED: + * + * REVISION HISTORY: + * + ***********************************************************************/ +UInt16 ToolsFrmGetGSI(FormPtr frmP) +{ + UInt16 retval = -1; + UInt16 i, num; + + num = FrmGetNumberOfObjects(frmP); + + for (i=0;i +#include +#include "Mail.h" + +/************************************************************ + * DB initialization date + *************************************************************/ + +// DOLATER kwk - decide if this data should be put into a resource +// for localization into other languages. + +MailAppInfoType DefaultMailApplicationInfo = { + // Renamed categories + 0x000f, + + // Category labels + "Inbox", + "Outbox", + "Deleted", + "Filed", + "Draft", "", "", "", + "", "", "", "", + "", "", "", "", + + // Category Uniq IDs + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + + // Last Uniq ID + 15, + + // Reserved + 0, 0, + + // Dirty app info + 0xFFFF, + + // sort by priority, due date + sortByDate, + + // unsend message MemHandle + 0, + + // signature offset + sizeof (MailAppInfoType), + }; + + +/************************************************************ + * + * FUNCTION: ECMailDBValidate + * + * DESCRIPTION: This routine validates the integrity of the mail + * datebase. + * + * PARAMETERS: database pointer + * + * RETURNS: nothing + * + * CREATED: 11/6/96 + * + * BY: Art Lamb + * + *************************************************************/ +#if ERROR_CHECK_LEVEL == ERROR_CHECK_FULL + +void ECMailDBValidate (DmOpenRef dbP) +{ + UInt16 i; + UInt16 numRecord; + MemHandle recordH; + MailDBRecordType record; + + numRecord = DmNumRecords (dbP); + for (i = 0 ; i < numRecord; i++) + { + recordH = DmQueryRecord (dbP, i); + if (! recordH) continue; + + MailGetRecord (dbP, i, &record, &recordH); + + ErrFatalDisplayIf ((record.flags.priority > priorityLow), + "Invalid priority"); + + ErrFatalDisplayIf ((record.flags.addressing > sentBCC), + "Invalid addressing flag"); + + MemHandleUnlock (recordH); + } +} +#endif + + +/*********************************************************************** + * + * FUNCTION: DateCompare + * + * DESCRIPTION: This routine compares two dates. + * + * PARAMETERS: d1 - a date + * d2 - a date + * + * RETURNED: if d1 > d2 returns a positive int + * if d1 < d2 returns a negative int + * if d1 = d2 returns zero + * + * NOTE: This routine treats the DateType structure like an unsigned int, + * it depends on the fact the the members of the structure are ordered + * year, month, day form high bit to low low bit. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/95 Initial Revision + * + ***********************************************************************/ +static Int16 DateCompare (DateType d1, DateType d2) +{ + UInt16 int1, int2; + + int1 = DateToInt(d1); + int2 = DateToInt(d2); + + if (int1 > int2) + return (1); + else if (int1 < int2) + return (-1); + return 0; +} + +/*********************************************************************** + * + * FUNCTION: TimeCompare + * + * DESCRIPTION: This routine compares two times. "No time" is represented + * by minus one, and is considered less than all times. + * + * PARAMETERS: nothing + * + * RETURNED: if t1 > t2 returns a positive int + * if t1 < t2 returns a negative int + * if t1 = t2 returns zero + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/95 Initial Revision + * + ***********************************************************************/ +static Int16 TimeCompare (TimeType t1, TimeType t2) +{ + Int16 int1, int2; + + int1 = TimeToInt(t1); + int2 = TimeToInt(t2); + + if (int1 > int2) + return (1); + else if (int1 < int2) + return (-1); + return 0; + +} + + +/************************************************************ + * + * FUNCTION: CompareRecords + * + * DESCRIPTION: Compare two records. + * + * PARAMETERS: database record 1 + * database record 2 + * + * RETURNS: -n if record one is less (n != 0) + * n if record two is less + * + * CREATED: 1/23/95 + * + * BY: Roger Flores + * + * COMMENTS: Compare the two records key by key until + * there is a difference. Return -n if r1 is less or n if r2 + * is less. A zero is never returned because if two records + * seem identical then their unique IDs are compared! + * + * This function accepts record data chunk pointers to avoid + * requiring that the record be within the database. This is + * important when adding records to a database. This prevents + * determining if a record is a deleted record (which are kept + * at the end of the database and should be considered "greater"). + * The caller should test for deleted records before calling this + * function! + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * Roger Flores 1/23/95 Initial Revision + * MGolden 7/14/97 added sort by read at the end if the result was 0. + * + *************************************************************/ +static Int16 CompareRecords (MailPackedDBRecordPtr r1, MailPackedDBRecordPtr r2, + Int16 sortOrder, SortRecordInfoPtr UNUSED_PARAM(info1), + SortRecordInfoPtr UNUSED_PARAM(info2), MemHandle UNUSED_PARAM(appInfoH)) +{ + Int16 i; + Int16 result; + Char name1 [maxFriendlyNameLen]; + Char name2 [maxFriendlyNameLen]; + Char * p1; + Char * p2; + + // Sort high priority message to the top. + if (r1->flags.priority == priorityHigh || + r2->flags.priority == priorityHigh) + result = (Int16)r1->flags.priority - (Int16)r2->flags.priority; + else + result = 0; + + + if (result == 0) + { + // Sort by date + if (sortOrder == sortByDate) + { + result = DateCompare (r2->date, r1->date); + if (result == 0) + { + result = TimeCompare (r2->time, r1->time); + } + } + + // Sort by subject. + else if (sortOrder == sortBySubject) + result = StrCaselessCompare (&r1->firstField, &r2->firstField); + + // Sort by "from" field. + else + { + p1 = &r1->firstField; + p2 = &r2->firstField; + for (i = mailFieldSubject; i < mailFieldFrom; i++) + { + p1 += StrLen(p1) + 1; + p2 += StrLen(p2) + 1; + } + MailParseAddress (p1, true, name1, maxFriendlyNameLen); + MailParseAddress (p2, true, name2, maxFriendlyNameLen); + + result = StrCaselessCompare (name1, name2); + } + } + +//mgmg + if (result == 0) + { + //sort by the read flag + if (r2->flags.read != r1->flags.read) + { + if (r1->flags.read) + result = 1; + else + result = -1; + } + } + + return result; +} + + +/************************************************************ + * + * FUNCTION: FindSortPosition + * + * DESCRIPTION: Return where a record is or should be + * Useful to find or find where to insert a record. + * + * PARAMETERS: database record (not deleted!) + * + * RETURNS: the size in bytes + * + * CREATED: 5/30/96 + * + * BY: Art Lamb + * + *************************************************************/ +static UInt16 FindSortPosition (DmOpenRef dbP, MailPackedDBRecordPtr r) +{ + int sortOrder; + + sortOrder = MailGetSortOrder (dbP); + + return (DmFindSortPosition (dbP, r, NULL, (DmComparF *) CompareRecords, sortOrder)); +} + + +/************************************************************ + * + * FUNCTION: PackedRecordSize + * + * DESCRIPTION: Return the packed size of an MailDBRecordType + * + * PARAMETERS: database record + * + * RETURNS: the size in bytes + * + * CREATED: 5/30/96 + * + * BY: Art Lamb + * + *************************************************************/ +static UInt16 PackedRecordSize (MailDBRecordPtr r) +{ + UInt16 size; + + size = sizeof (MailPackedDBRecordType) + + (mailFieldBody - mailFieldSubject); + + if (r->subject != NULL) + size += StrLen (r->subject); + + if (r->from != NULL) + size += StrLen (r->from); + + if (r->to != NULL) + size += StrLen (r->to); + + if (r->cc != NULL) + size += StrLen (r->cc); + + if (r->bcc != NULL) + size += StrLen (r->bcc); + + if (r->replyTo != NULL) + size += StrLen (r->replyTo); + + if (r->sentTo != NULL) + size += StrLen (r->sentTo); + + if (r->body != NULL) + size += StrLen (r->body); + + return size; +} + + +/************************************************************ + * + * FUNCTION: PackRecord + * + * DESCRIPTION: Pack an MailDBRecordType + * + * PARAMETERS: database record + * + * RETURNS: the MailPackedDBRecord is packed + * + * CREATED: 5/30/96 + * + * BY: Art Lamb + * + *************************************************************/ +static void PackRecord (MailDBRecordPtr s, MailPackedDBRecordPtr d) +{ + UInt16 size; + Char zero = 0; + UInt32 offset = 0; + + + // Write date field. + DmWrite (d, offset, &s->date, sizeof(DateType)); + offset += sizeof (DateType); + + // Write time field. + DmWrite (d, offset, &s->time, sizeof(TimeType)); + offset += sizeof (TimeType); + + // Write flags field. + DmWrite (d, offset, &s->flags, sizeof(MailFlagsType)); + offset += sizeof (MailFlagsType); + + // Write subject field. + if (s->subject != NULL) + { + size = StrLen (s->subject) + 1; + DmWrite (d, offset, s->subject, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "from" field. + if (s->from != NULL) + { + size = StrLen (s->from) + 1; + DmWrite (d, offset, s->from, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "to" field. + if (s->to != NULL) + { + size = StrLen (s->to) + 1; + DmWrite (d, offset, s->to, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "cc" field. + if (s->cc != NULL) + { + size = StrLen (s->cc) + 1; + DmWrite (d, offset, s->cc, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "bcc" field. + if (s->bcc != NULL) + { + size = StrLen (s->bcc) + 1; + DmWrite (d, offset, s->bcc, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "reply to" field. + if (s->replyTo != NULL) + { + size = StrLen (s->replyTo) + 1; + DmWrite (d, offset, s->replyTo, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "sent to" field. + if (s->sentTo != NULL) + { + size = StrLen (s->sentTo) + 1; + DmWrite (d, offset, s->sentTo, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } + + // Write "body" field. + if (s->body != NULL) + { + size = StrLen (s->body) + 1; + DmWrite (d, offset, s->body, size); + offset += size; + } + else + { + DmWrite (d, offset, &zero, 1); + offset++; + } +} + + +/************************************************************ + * + * FUNCTION: MailUnpackRecord + * + * DESCRIPTION: Fills in the MailDBRecord structure + * + * PARAMETERS: database record + * + * RETURNS: the record unpacked + * + * CREATED: 5/30/96 + * + * BY: Art Lamb + * + *************************************************************/ +void MailUnpackRecord (MailPackedDBRecordPtr src, MailDBRecordPtr dest) +{ + char *p; + + + dest->date = src->date; + dest->time = src->time; + dest->flags = src->flags; + + p = &src->firstField; + + // Get the "subject" field. + if (*p) + { + dest->subject = p; + p += StrLen(p) + 1; + } + else + { + dest->subject = p; + p++; + } + + // Get the "from" field. + if (*p) + { + dest->from = p; + p += StrLen(p) + 1; + } + else + { + dest->from = p; + p++; + } + + // Get the "to" field. + if (*p) + { + dest->to = p; + p += StrLen(p) + 1; + } + else + { + dest->to = p; + p++; + } + + // Get the "cc" field. + if (*p) + { + dest->cc = p; + p += StrLen(p) + 1; + } + else + { + dest->cc = p; + p++; + } + + // Get the "bcc" field. + if (*p) + { + dest->bcc = p; + p += StrLen(p) + 1; + } + else + { + dest->bcc = p; + p++; + } + + // Get the "reply to" field. + if (*p) + { + dest->replyTo = p; + p += StrLen(p) + 1; + } + else + { + dest->replyTo = p; + p++; + } + + // Get the "sent to" field. + if (*p) + { + dest->sentTo = p; + p += StrLen(p) + 1; + } + else + { + dest->sentTo = p; + p++; + } + + // Get the "body" field. + if (*p) + { + dest->body = p; + p += StrLen(p) + 1; + } + else + { + dest->body = p; + p++; + } +} + + +/************************************************************ + * + * FUNCTION: MailLocalizeAppInfo + * + * DESCRIPTION: Look for localize app info strings and copy + * them into the app info block. + * + * PARAMETERS: application info ptr + * + * RETURNS: nothing + * + * CREATED: 12/13/95 + * + * BY: Roger Flores + * + *************************************************************/ +static void MailLocalizeAppInfo (MailAppInfoPtr appInfoP) +{ + MemHandle localizedAppInfoH; + Char * localizedAppInfoP; + MailAppInfoPtr nilP = 0; + MemHandle stringsH; + Char * *stringsP; + int i; + + + localizedAppInfoH = DmGetResource (appInfoStringsRsc, mailLocalizedAppInfoStr); + if (localizedAppInfoH) + { + localizedAppInfoP = MemHandleLock (localizedAppInfoH); + stringsH = SysFormPointerArrayToStrings (localizedAppInfoP, + dmRecNumCategories); + stringsP = MemHandleLock (stringsH); + + // Copy each category + for (i = 0; i < dmRecNumCategories; i++) + { + if (stringsP[i][0] != '\0') + DmStrCopy (appInfoP, (UInt32) nilP->categoryLabels[i], stringsP[i]); + } + + MemPtrFree (stringsP); + MemPtrFree (localizedAppInfoP); + } +} + + +/************************************************************ + * + * FUNCTION: MailAppInfoInit + * + * DESCRIPTION: Create an app info chunk if missing. Set + * the strings to a default. + * + * PARAMETERS: database pointer + * + * RETURNS: 0 if successful, errorcode if not + * + * CREATED: 1/20/95 + * + * BY: Roger Flores + * + *************************************************************/ +Err MailAppInfoInit (DmOpenRef dbP) +{ + UInt16 size; + UInt16 cardNo; + UInt16 wordValue; + MemHandle h; + LocalID dbID; + LocalID appInfoID; + MailAppInfoPtr nilP = 0; + MailAppInfoPtr appInfoP; + + if (DmOpenDatabaseInfo (dbP, &dbID, NULL, NULL, &cardNo, NULL)) + return dmErrInvalidParam; + + if (DmDatabaseInfo (cardNo, dbID, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, &appInfoID, NULL, NULL, NULL)) + return dmErrInvalidParam; + + if (appInfoID == 0) + { + // Add one for signature null-terminator. + size = sizeof (MailAppInfoType) + 1; + h = DmNewHandle (dbP, size); + if (! h) return dmErrMemError; + + appInfoID = MemHandleToLocalID (h); + DmSetDatabaseInfo(cardNo, dbID, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, &appInfoID, NULL, NULL, NULL); + } + + appInfoP = MemLocalIDToLockedPtr (appInfoID, cardNo); + + // Clear the app info block. + DmSet (appInfoP, 0, size, 0); + + // Initialize the categories. + CategoryInitialize ((AppInfoPtr) appInfoP, mailLocalizedAppInfoStr); + + // I don't know this field is used for. + wordValue = 0xFFFF; + DmWrite (appInfoP, (UInt32)&nilP->dirtyAppInfo, &wordValue, + sizeof(appInfoP->dirtyAppInfo)); + + // Initialize the sort order. + DmSet (appInfoP, (UInt32)&nilP->sortOrder, sizeof(appInfoP->sortOrder), + sortByDate); + + // Initialize the field the holds the index of the last unsent message. +// wordValue= noUnsendMessage; +// DmWrite (appInfoP, (UInt32)&nilP->unsentMessage, &wordValue, +// sizeof(appInfoP->unsentMessage)); + + // Initialize the offset of message signature. + wordValue = sizeof (MailAppInfoType); + DmWrite (appInfoP, (UInt32)&nilP->signatureOffset, &wordValue, + sizeof(appInfoP->signatureOffset)); + + // Initialize the message signature. + DmSet (appInfoP, appInfoP->signatureOffset, 1, 0); + + MemPtrUnlock (appInfoP); + + return 0; +} + + +/************************************************************ + * + * FUNCTION: MailGetAppInfo + * + * DESCRIPTION: Get the app info chunk + * + * PARAMETERS: database pointer + * + * RETURNS: MemHandle to the to do application info block (MailAppInfoType) + * + * CREATED: 5/12/95 + * + * BY: Art Lamb + * + *************************************************************/ +MemHandle MailGetAppInfo (DmOpenRef dbP) +{ + Err error; + UInt16 cardNo; + LocalID dbID; + LocalID appInfoID; + + error = DmOpenDatabaseInfo (dbP, &dbID, NULL, NULL, &cardNo, NULL); + ErrFatalDisplayIf (error, "Get getting app info"); + + error = DmDatabaseInfo (cardNo, dbID, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &appInfoID, NULL, NULL, NULL); + ErrFatalDisplayIf (error, "Get getting app info"); + + return (MemLocalIDToGlobal (appInfoID, cardNo)); +} + + +/************************************************************ + * + * FUNCTION: MailGetSortOrder + * + * DESCRIPTION: This routine get the sort order value from the + * mail application info block. + * + * PARAMETERS: database pointer + * + * RETURNS: sort order: + * 0 - by date + * 1 - by subject + * 2 - by form + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 5/30/96 Initial Revision + * + *************************************************************/ +UInt8 MailGetSortOrder (DmOpenRef dbP) +{ + UInt8 sortOrder; + MailAppInfoPtr appInfoP; + + appInfoP = MemHandleLock (MailGetAppInfo (dbP)); + sortOrder = appInfoP->sortOrder; + MemPtrUnlock (appInfoP); + + return (sortOrder); +} + + +/************************************************************ + * + * FUNCTION: MailChangeSortOrder + * + * DESCRIPTION: Change the Mail Database's sort order + * + * PARAMETERS: database pointer + * TRUE if sort by company + * + * RETURNS: nothing + * + * CREATED: 1/17/95 + * + * BY: Roger Flores + * + *************************************************************/ +Err MailChangeSortOrder(DmOpenRef dbP, Boolean sortOrder) +{ + MailAppInfoPtr appInfoP; + MailAppInfoPtr nilP = 0; + UInt16 dirtyAppInfo; + + + appInfoP = MemHandleLock (MailGetAppInfo (dbP)); + + if (appInfoP->sortOrder != sortOrder) + { + dirtyAppInfo = appInfoP->dirtyAppInfo | mailSortByDirty; + DmWrite(appInfoP, (UInt32)&nilP->dirtyAppInfo, &dirtyAppInfo, sizeof(appInfoP->dirtyAppInfo)); + DmWrite(appInfoP, (UInt32)&nilP->sortOrder, &sortOrder, sizeof(appInfoP->sortOrder)); + + DmInsertionSort(dbP, (DmComparF *) &CompareRecords, (Int16) sortOrder); + } + + MemPtrUnlock (appInfoP); + + return 0; +} + + +/************************************************************ + * + * FUNCTION: MailSort + * + * DESCRIPTION: Sort the appointment database. + * + * PARAMETERS: database record + * + * RETURNS: nothing + * + * CREATED: 10/17/95 + * + * BY: Art Lamb + * + *************************************************************/ +void MailSort (DmOpenRef dbP) +{ + int sortOrder; + + sortOrder = MailGetSortOrder (dbP); + DmInsertionSort(dbP, (DmComparF *) &CompareRecords, (Int16) sortOrder); +} + + +/*********************************************************************** + * + * FUNCTION: MailGetUnsentMessage + * + * DESCRIPTION: This routine returns the ihndex of the unsent message, + * if there is one. If the application is exited while + * a new message is being edited, the MemHandle of the unsent + * message is save in the application info block. The + * record is not yet attached to the database index. + * + * PARAMETERS: dpP - database pointer + * + * RETURNED: unique id of a packed record or -1 + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/96 Initial Revision + * + ***********************************************************************/ +UInt32 MailGetUnsentMessage (DmOpenRef dbP) +{ + UInt32 uniqueID; + MailAppInfoPtr appInfoP; + + appInfoP = MemHandleLock (MailGetAppInfo (dbP)); + uniqueID = appInfoP->unsentMessage; + MemPtrUnlock (appInfoP); + + return (uniqueID); +} + + +/*********************************************************************** + * + * FUNCTION: MailSetUnsentMessage + * + * DESCRIPTION: This routine sets the index of the unsent message. + * If the application is exited while a new message + * is being edited, the index of the unsent message + * is save in the application info block. + * + * PARAMETERS: dpP - database pointer + * uniqueID - unique id of a packed record or -1 + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/12/96 Initial Revision + * + ***********************************************************************/ +void MailSetUnsentMessage (DmOpenRef dbP, UInt32 uniqueID) +{ + MailAppInfoPtr nilP = 0; + MailAppInfoPtr appInfoP; + + appInfoP = MemHandleLock (MailGetAppInfo (dbP)); + DmWrite(appInfoP, (UInt32)&nilP->unsentMessage, &uniqueID, + sizeof(appInfoP->unsentMessage)); + + MemPtrUnlock (appInfoP); +} + + +/*********************************************************************** + * + * FUNCTION: MailGetSignature + * + * DESCRIPTION: This routine returns a copy of the message signature + * string. This routine allocates a new MemHandle to hold + * signature, the caller is responsible for freeing this + * MemHandle. + * + * PARAMETERS: dpP - database pointer + * + * RETURNED: MemHandle of a signature or zero + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/25/96 Initial Revision + * + ***********************************************************************/ +MemHandle MailGetSignature (DmOpenRef dbP) +{ + UInt16 len; + Char * p; + Char * signatureP; + MemHandle h = 0; + MailAppInfoPtr appInfoP; + + appInfoP = MemHandleLock (MailGetAppInfo (dbP)); + + signatureP = ((Char *)appInfoP) + appInfoP->signatureOffset; + len = StrLen (signatureP); + + if (len) + { + h = MemHandleNew (len + 1); + p = MemHandleLock (h); + StrCopy (p, signatureP); + MemPtrUnlock (p); + } + + MemPtrUnlock (appInfoP); + + return (h); +} + + +/*********************************************************************** + * + * FUNCTION: MailParseAddress + * + * DESCRIPTION: This routine parses a mail address + * + * PARAMETERS: address - address string, ex: "art@palm (Art Lamb)" + * realName - if true return the name part, else return the + * address part + * buffer - buffer to hold return value + * len - length of buffer + * + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/12/96 Initial Revision + * kwk 12/02/98 Fixed bug w/calling TxtCharIsCntrl with bytes. + * + ***********************************************************************/ +void MailParseAddress (Char * address, Boolean realName, Char * buffer, + UInt16 bufferLen) +{ + UInt16 len; + Char* p; + Char* endP; + Char* startP; + + *buffer = 0; + + if (realName) + { + // Get the name portion of the string passed. + endP = StrChr (address, linefeedChr); + if (! endP) + endP = StrChr (address, 0); + + startP = StrChr (address, '('); + + if (startP && startP < endP) + { + startP++; + len = endP - startP; + while (endP-- > startP) + { + if (*endP == ')') + { + len = endP - startP; + break; + } + } + if (len > bufferLen - 1) + len = bufferLen - 1; + + p = buffer; + while (len--) + { + *p++ = *startP++; + } + *p = 0; + } + } + + if (*buffer == 0) + { + len = 0; + while (true) + { + WChar theChar; + address += TxtGetNextChar(address, 0, &theChar); + if (TxtCharIsCntrl(theChar) || (theChar == chrLeftParenthesis)) + break; + else if (len + TxtCharSize(theChar) > bufferLen - 1) + break; + else + len += TxtSetNextChar(buffer, len, theChar); + } + + buffer[len] = 0; + + // Remove trailing spaces. + while (len) + { + WChar theChar; + len -= TxtGetPreviousChar(buffer, len, &theChar); + if (TxtCharIsSpace(theChar)) + buffer[len] = 0; + else + break; + } + } +} + + +/************************************************************ + * + * FUNCTION: MailNewRecord + * + * DESCRIPTION: Create a new packed record. The new record is + * + * PARAMETERS: database pointer + * database record + * + * RETURNS: record MemHandle or 0 if error + * + * CREATED: 6/6/96 + * + * BY: Art Lamb + * + *************************************************************/ +Err MailNewRecord (DmOpenRef dbP, MailDBRecordPtr r, UInt16 *indexP) +{ + Err err; + UInt16 index; + MemHandle recordH; + MailPackedDBRecordPtr recordP; + + // Make a new chunk with the correct size. + recordH = DmNewHandle (dbP, (UInt32) PackedRecordSize (r)); + if (recordH == NULL) + return dmErrMemError; + + // Copy the data from the unpacked record to the packed one. + recordP = MemHandleLock (recordH); + PackRecord (r, recordP); + + // Determine the sort position of the new record. + index = FindSortPosition (dbP, recordP); + + MemPtrUnlock (recordP); + + err = DmAttachRecord (dbP, &index, recordH, 0); + if (err) + MemHandleFree (recordH); + else + *indexP = index; + + return (err); +} + + +/************************************************************ + * + * FUNCTION: MailAttachRecord + * + * DESCRIPTION: Attach a packed record in sorted position. + * + * PARAMETERS: database pointer + * database record MemHandle + * + * RETURNS: 0 if successful, error code if not + * + * CREATED: 6/6/96 + * + * BY: Art Lamb + * + *************************************************************/ +Err MailAttachRecord (DmOpenRef dbP, MemHandle recordH, UInt16 * indexP) +{ + Err err; + UInt16 index; + MailPackedDBRecordPtr recordP; + + recordP = MemHandleLock (recordH); + + index = FindSortPosition (dbP, recordP); + + MemPtrUnlock (recordP); + + err = DmAttachRecord (dbP, &index, recordH, 0); + if (err) + MemHandleFree (recordH); + else + *indexP = index; + + return err; +} + + +/************************************************************ + * + * FUNCTION: MailGetRecord + * + * DESCRIPTION: Get a record from a Mail database + * + * PARAMETERS: database pointer + * database index + * database record + * + * RETURNS: 0 if successful, errorcode if not + * + * CREATED: 5/12/95 + * + * BY: Art Lamb + * + *************************************************************/ +Err MailGetRecord (DmOpenRef dbP, UInt16 index, MailDBRecordPtr r, + MemHandle * handleP) +{ + MemHandle handle; + MailPackedDBRecordPtr src; + + + handle = DmQueryRecord(dbP, index); + ErrFatalDisplayIf(DmGetLastErr(), "Error Querying record"); + + src = (MailPackedDBRecordPtr) MemHandleLock (handle); + + if (DmGetLastErr()) + { + *handleP = 0; + return DmGetLastErr(); + } + + MailUnpackRecord (src, r); + + *handleP = handle; + return 0; +} + + +/************************************************************ + * + * FUNCTION: MailChangeRecord + * + * DESCRIPTION: Change a record in the Appointment Database + * + * PARAMETERS: database pointer + * database index + * database record + * changed fields + * + * RETURNS: 0 if successful, errorcode if not + * + * RETURNS: 0 if successful, errorcode if not + * + * CREATED: 5/12/95 + * + * COMMENTS: Records are not stored with extra padding - they + * are always resized to their exact storage space. This avoids + * a database compression issue. The code works as follows: + * + * 1) get the size of the new record + * 2) make the new record + * 3) pack the packed record plus the changes into the new record + * 4) if the sort position is changes move to the new position + * 5) attach in position + * + *************************************************************/ +Err MailChangeRecord (DmOpenRef dbP, UInt16 * index, MailDBRecordPtr r, + MailChangedFieldsType changedFields) +{ + Err result; + Int16 newIndex; + UInt16 attributes; + Boolean dontMove; + MemHandle oldH; + MemHandle srcH; + MemHandle dstH; + MailDBRecordType src; + MailPackedDBRecordPtr dst; + MailPackedDBRecordPtr cmp; + + // We do not assume that r is completely valid so we get a valid + // MailDBRecordPtr... + if ((result = MailGetRecord(dbP, *index, &src, &srcH)) != 0) + return result; + + // and we apply the changes to it. + if (changedFields.date) + src.date = r->date; + + if (changedFields.time) + src.time = r->time; + + if (changedFields.flags) + src.flags = r->flags; + + if (changedFields.subject) + src.subject = r->subject; + + if (changedFields.from) + src.from = r->from; + + if (changedFields.to) + src.to = r->to; + + if (changedFields.cc) + src.cc = r->cc; + + if (changedFields.bcc) + src.bcc = r->bcc; + + if (changedFields.replyTo) + src.replyTo = r->replyTo; + + if (changedFields.sentTo) + src.sentTo = r->sentTo; + + if (changedFields.body) + src.body = r->body; + + + // Allocate a new chunk with the correct size and pack the data from + // the unpacked record into it. + dstH = DmNewHandle(dbP, (UInt32) PackedRecordSize (&src)); + if (dstH) + { + dst = MemHandleLock (dstH); + PackRecord (&src, dst); + } + + MemHandleUnlock (srcH); + if (dstH == NULL) + return dmErrMemError; + + + // If the sort position is changed move to the new position. + // Check if any of the key fields have changed. + if ((! changedFields.date) && + (! changedFields.time) && + (! changedFields.subject) && + (! changedFields.from)) + goto attachRecord; + + + // Make sure *index-1 < *index < *index+1, if so it's in sorted + // order. Leave it there. + if (*index > 0) + { + // This record wasn't deleted and deleted records are at the end of the + // database so the prior record may not be deleted! + cmp = MemHandleLock (DmQueryRecord(dbP, *index-1)); + dontMove = (CompareRecords (cmp, dst, 0, NULL, NULL, 0) == -1); + MemPtrUnlock (cmp); + } + else + dontMove = true; + + + if (dontMove && (*index+1 < DmNumRecords (dbP))) + { + DmRecordInfo(dbP, *index+1, &attributes, NULL, NULL); + if ( ! (attributes & dmRecAttrDelete) ) + { + cmp = MemHandleLock (DmQueryRecord(dbP, *index+1)); + dontMove &= (CompareRecords (dst, cmp, 0, NULL, NULL, 0) == -1); + MemPtrUnlock (cmp); + } + } + + if (dontMove) + goto attachRecord; + + + // The record isn't in the right position. Move it. + newIndex = FindSortPosition (dbP, dst); + DmMoveRecord (dbP, *index, newIndex); + if (newIndex > *index) newIndex--; + *index = newIndex; // return new position + + +attachRecord: + // Attach the new record to the old index, the preserves the + // category and record id. + result = DmAttachRecord (dbP, index, dstH, &oldH); + + MemPtrUnlock (dst); + + if (result) return result; + + MemHandleFree (oldH); + + return 0; +} + + +/*********************************************************************** + * + * FUNCTION: GetRecordField + * + * DESCRIPTION: This routine changes a field of the passed record. + * + * PARAMETERS: dpP - database pointer + * recordField - fields to chance + * data - new field value + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/17/96 Initial Revision + * + ***********************************************************************/ +static void * GetRecordField (MailDBRecordPtr recordP, + MailRecordFieldType recordField) +{ + void * ptr; + + switch (recordField) + { + case mailFieldSubject: + ptr = recordP->subject; + break; + + case mailFieldFrom: + ptr = recordP->from; + break; + + case mailFieldTo: + ptr = recordP->to; + break; + + case mailFieldCC: + ptr = recordP->cc; + break; + + case mailFieldBCC: + ptr = recordP->bcc; + break; + + case mailFieldReplyTo: + ptr = recordP->replyTo; + break; + + case mailFieldSentTo: + ptr = recordP->sentTo; + break; + + case mailFieldBody: + ptr = recordP->body; + break; + + default: + ErrDisplay ("Invalid record field"); + } + + return (ptr); +} + + +/*********************************************************************** + * + * FUNCTION: MailChangeRecordField + * + * DESCRIPTION: This routine changes a field of the passed record. + * + * PARAMETERS: dpP - database pointer + * hP - pointer to the MemHandle of a packed database + * record. A new MemHandle may be returned as + * the result of resizing the record. + * recordField - fields to chance + * + * RETURNED: nothing + * + * COMMENTS: This routine does not move the modified record to to + * correct sort position if one of the sort key field is + * modified. This function is intented for use on + * records that have not been attached to the database. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/11/96 Initial Revision + * + ***********************************************************************/ +/* +Err MailChangeRecordField (DmOpenRef dbP, UInt16 index, + MailRecordFieldType recordField, void * data) +{ + Err err = 0; + UInt16 newSize; + UInt16 oldSize; + MemHandle recordH; + MailDBRecordType record; + MailPackedDBRecordPtr r; + + + recordH = DmQueryRecord (dbP, index);; + r = MemHandleLock (recordH); + MailUnpackRecord (r, &record); + oldSize = PackedRecordSize (&record); + + ChangeRecordField (&record, recordField, data); + + newSize = PackedRecordSize (&record); + + // If the record the same size? + if (oldSize == newSize) + { + PackRecord (&record, r); + MemPtrUnlock (r); + } + + // Is the record smaller? + else if (oldSize > newSize) + { + PackRecord (&record, r); + MemPtrUnlock (r); + err = MemHandleResize (recordH, newSize); + } + + // The record is larger. + else + { + MemPtrUnlock (r); + + recordH = DmResizeRecord (dbP, index, newSize); + if (! recordH) return (err); + + r = MemHandleLock (recordH); + MailUnpackRecord (r, &record); + ChangeRecordField (&record, recordField, data); + PackRecord (&record, r); + MemPtrUnlock (r); + } + + return (err); +} +*/ + +/*********************************************************************** + * + * FUNCTION: MailInsertIntoField + * + * DESCRIPTION: This routine inserts the passed string into the + * specified a field of the passed record. + * + * PARAMETERS: dpP - database pointer + * index - index of a packed database record + * recordField - fields to insert into + * insertData - string to insert + * insertLen - length of insert string + * insertOffset - offset from start of field to insert at + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/17/96 Initial Revision + * + ***********************************************************************/ +Err MailInsertIntoField (DmOpenRef dbP, UInt16 index, + MailRecordFieldType recordField, Char * insertData, UInt16 insertLen, + UInt16 insertOffset) +{ + Err err = 0; + UInt16 newSize; + UInt16 oldSize; + UInt32 offset; + UInt32 bytes; + Char * ptr; + UInt16 * srcP=0, dstP=0; + MemHandle recordH; + MailDBRecordType record; + MailPackedDBRecordPtr r; + + + if (! insertLen) return (0); + + // Resize the record. + recordH = DmQueryRecord (dbP, index);; + oldSize = MemHandleSize (recordH); + newSize = oldSize + insertLen; + recordH = DmResizeRecord (dbP, index, newSize); + if (recordH == NULL) + return dmErrMemError; + + + r = MemHandleLock (recordH); + MailUnpackRecord (r, &record); + + switch (recordField) + { + case mailFieldSubject: + ptr = record.subject; + break; + + case mailFieldFrom: + ptr = record.from; + break; + + case mailFieldTo: + ptr = record.to; + break; + + case mailFieldCC: + ptr = record.cc; + break; + + case mailFieldBCC: + ptr = record.bcc; + break; + + case mailFieldReplyTo: + ptr = record.replyTo; + break; + + case mailFieldSentTo: + ptr = record.sentTo; + break; + + case mailFieldBody: + ptr = record.body; + break; + + default: + ErrDisplay ("Invalid record field"); + } + + + // Move the rest of the record. + ptr += insertOffset; + offset = (ptr - (Char *)r) + insertLen; + bytes = oldSize - (UInt32)(ptr - (Char *)r); + if (bytes) + DmWrite (r, offset, ptr, bytes); + + // Write the new field. + offset = (ptr - (Char *)r); + DmWrite (r, offset, insertData, insertLen); + + MemHandleUnlock (recordH); + + + return (err); +} + +/************************************************************ + * + * FUNCTION: MailSortRecord + * + * DESCRIPTION: Move the passed record to its correct sort + * position. + * + * PARAMETERS: database pointer + * record index + * + * RETURNS: zero if successful, errorcode if not + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/18/96 Initial Revision + * + *************************************************************/ +Err MailSortRecord (DmOpenRef dbP, UInt16 * indexP) +{ + Err err; + Int16 sortOrder; + UInt16 index; + UInt16 attributes; + UInt32 uniqueID; + MemHandle recordH; + Boolean dontMove; + MailPackedDBRecordPtr cmp; + MailPackedDBRecordPtr recordP; + + sortOrder = MailGetSortOrder (dbP); + + // Check if the record is already in the correct position. + recordP = MemHandleLock (DmQueryRecord (dbP, *indexP)); + if (*indexP > 0) + { + // This record wasn't deleted and deleted records are at the end of the + // database so the prior record may not be deleted! + cmp = MemHandleLock (DmQueryRecord (dbP, *indexP-1)); + dontMove = (CompareRecords (cmp, recordP, sortOrder, NULL, NULL, 0) <= 0); + MemPtrUnlock (cmp); + } + else + dontMove = true; + + if (dontMove && (*indexP+1 < DmNumRecords (dbP))) + { + DmRecordInfo(dbP, *indexP+1, &attributes, NULL, NULL); + if ( ! (attributes & dmRecAttrDelete) ) + { + cmp = MemHandleLock (DmQueryRecord (dbP, *indexP+1)); + dontMove &= (CompareRecords (recordP, cmp, sortOrder, NULL, NULL, 0) <= 0); + MemPtrUnlock (cmp); + } + } + MemPtrUnlock (recordP); + + if (dontMove) return (0); + + + // Since the routine that determines the records sort position uses a + // binary search algorythm we need to remove the record from the database + // before we can determine its new position. We will also save and restore the + // record's attributes and unique ID. + DmRecordInfo (dbP, *indexP, &attributes, &uniqueID, NULL); + + err = DmDetachRecord (dbP, *indexP, &recordH); + if (err) return (err); + + recordP = MemHandleLock (recordH); + index = DmFindSortPosition (dbP, recordP, NULL, (DmComparF *) CompareRecords, sortOrder); + MemPtrUnlock (recordP); + + err = DmAttachRecord (dbP, &index, recordH, 0); + if (err) return (err); + + DmSetRecordInfo (dbP, index, &attributes, &uniqueID); + + *indexP = index; + + return (err); +} + + +/*********************************************************************** + * + * FUNCTION: MailChangeRecordField + * + * DESCRIPTION: This routine changes a field of the passed record. + * + * PARAMETERS: dpP - database pointer + * hP - pointer to the MemHandle of a packed database + * record. A new MemHandle may be returned as + * the result of resizing the record. + * recordField - fields to chance + * + * RETURNED: nothing + * + * COMMENTS: This routine does not move the modified record to to + * correct sort position if one of the sort key field is + * modified. This function is intented for use on + * records that have not been attached to the database. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/17/96 Initial Revision + * + ***********************************************************************/ +Err MailChangeRecordField (DmOpenRef dbP, UInt16 * indexP, + MailRecordFieldType recordField, void * data) +{ + Err err = 0; + UInt16 newSize; + UInt16 curSize; + UInt32 offset; + UInt32 bytes; + Char * ptr; + Char * fieldP; + MemHandle recordH; + MailDBRecordType record; + MailPackedDBRecordPtr r; + MailPackedDBRecordPtr nilP = 0; + + // Get the record which we are going to change + recordH = DmQueryRecord (dbP, *indexP);; + r = MemHandleLock (recordH); + + + // We MemHandle the fixed size fields here. + switch (recordField) + { + case mailFieldDate: + DmWrite (r, (UInt32)&nilP->date, data, sizeof(r->date)); + goto sort; + + case mailFieldTime: + DmWrite (r, (UInt32)&nilP->time, data, sizeof(r->time)); + goto sort; + + case mailFieldFlags: + DmWrite (r, (UInt32)&nilP->flags, data, sizeof(r->flags)); + goto sort; + } + + + + // Calculate the size of the changed record + MailUnpackRecord (r, &record); + fieldP = GetRecordField (&record, recordField); + curSize = MemPtrSize (r); + newSize = curSize + StrLen (data) - StrLen (fieldP); + + + // If the new record is longer, expand the record. + if (newSize > curSize) + { + MemPtrUnlock (r); + + recordH = DmResizeRecord (dbP, *indexP, newSize); + if (! recordH) return (dmErrMemError); + + r = MemHandleLock (recordH); + MailUnpackRecord (r, &record); + } + + + // Change the record field. First Move the rest of the record. + fieldP = GetRecordField (&record, recordField); + offset = (fieldP - (Char *)r) + StrLen (data) + 1; + ptr = fieldP + StrLen (fieldP) + 1; + bytes = curSize - (UInt32)(ptr - (Char *)r); + if (bytes) + DmWrite (r, offset, ptr, bytes); + + // Write the new field. + offset = (fieldP - (Char *)r); + DmStrCopy (r, offset, data); + + + // If the new record is shorter, shrink the record. + if (newSize < curSize) + MemPtrResize (r, newSize); + + +sort: + MemPtrUnlock (r); + + + // If the sort position is changed move to the new position. + // Check if any of the key fields have changed. + switch (recordField) + { + case mailFieldDate: + case mailFieldTime: + case mailFieldSubject: + case mailFieldFrom: + err = MailSortRecord (dbP, indexP); + } + + + return err; +} + + +/*********************************************************************** + * + * FUNCTION: MailGetDatabase + * + * DESCRIPTION: Get the application's database. Open the database if it + * exists, create it if neccessary. + * + * PARAMETERS: *dbPP - pointer to a database ref (DmOpenRef) to be set + * mode - how to open the database (dmModeReadWrite) + * + * RETURNED: Err - zero if no error, else the error + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * jmp 10/18/99 Initial Revision + * + ***********************************************************************/ +Err MailGetDatabase (DmOpenRef *dbPP, UInt16 mode) +{ + Err error = errNone; + DmOpenRef dbP; + UInt16 cardNo; + LocalID dbID; + + *dbPP = NULL; + + // Find the application's data file. If it doesn't exist create it. + dbP = DmOpenDatabaseByTypeCreator (mailDBType, sysFileCMail, mode); + if (!dbP) + { + error = DmCreateDatabase (0, mailDBName, sysFileCMail, mailDBType, false); + if (error) + return error; + + dbP = DmOpenDatabaseByTypeCreator(mailDBType, sysFileCMail, mode); + if (!dbP) + return (1); + + // Set the backup bit. This is to aid syncs with non-Palm software. + SetDBBackupBit(dbP); + + error = MailAppInfoInit (dbP); + if (error) + { + DmOpenDatabaseInfo(dbP, &dbID, NULL, NULL, &cardNo, NULL); + DmCloseDatabase(dbP); + DmDeleteDatabase(cardNo, dbID); + return error; + } + } + + *dbPP = dbP; + return 0; +} diff --git a/handera-sdk-105/examples/Mail/Src/MailDB.h b/handera-sdk-105/examples/Mail/Src/MailDB.h new file mode 100644 index 0000000..4ca18ac --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailDB.h @@ -0,0 +1,228 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailDB.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file defines the database structures and functions of the Mail + * application. + * + * History: + * May 30, 1996 Created by Art Lamb + * + *****************************************************************************/ + +/************************************************************ + * + * Mail database constants. + * + *************************************************************/ + +// String resource used to initialize application info block. +#define mailLocalizedAppInfoStr 1000 + +// Dirty flags for to do application info +#define mailSortByDirty 0x0001 + + +// Sort orders +#define sortByDate 0 +#define sortByFrom 1 +#define sortBySubject 2 + + +#define noUnsendMessage -1 + +/************************************************************ + * + * Mail database structures. + * + *************************************************************/ + +// The format of a packed mail record is as follows: +// +// DateType date; +// TimeType time; +// MailDBRecordFlags flags; +// char [] subject; // null terminated +// char [] from; // null terminated +// char [] to; // null terminated +// char [] cc; // null terminated +// char [] bcc; // null terminated +// char [] replyTo; // null terminated +// char [] sentTo; // null terminated +// char [] body; // null terminated + + +// Application info block +typedef struct { + UInt16 renamedCategories; // bitfield of categories with a different name + char categoryLabels [dmRecNumCategories] [dmCategoryLength]; + UInt8 categoryUniqIDs [dmRecNumCategories]; + UInt8 lastUniqID; // Uniq IDs generated by the device are between + // 0 - 127. Those from the PC are 128 - 255. + UInt8 reserved1; // from the compiler word aligning things + UInt16 reserved2; + UInt16 dirtyAppInfo; + UInt8 sortOrder; + UInt8 reserved3; + UInt32 unsentMessage; // unique id of unsend message. + UInt16 signatureOffset; +} MailAppInfoType; + +typedef MailAppInfoType * MailAppInfoPtr; + +typedef enum { priorityHigh, priorityNormal, priorityLow } MailPriorityType; + +typedef enum { sentTo, sentCC, sentBCC } MailAddressingType; + +typedef struct { + UInt16 read : 1; + UInt16 signature : 1; + UInt16 confirmRead : 1; + UInt16 confirmDelivery : 1; + UInt16 priority : 2; // MailPriorityType + UInt16 addressing : 2; // MailAddressingType + UInt16 reserved : 8; +} MailFlagsType; + + +// The following structure doesn't really exist. The first field +// varies depending on the data present. However, it is convient +// (and less error prone) to use when accessing the other information. +typedef struct { + DateType date; + TimeType time; + MailFlagsType flags; + Char firstField; + UInt8 reserved; +} MailPackedDBRecordType; + +typedef MailPackedDBRecordType * MailPackedDBRecordPtr; + + +// MailItemType +// +// This is the format of a to do record used by the application. All +// pointers are either NULL or point to data within the PackedDB record. +// All strings are null character terminated. +typedef struct { + DateType date; + TimeType time; + MailFlagsType flags; + Char * subject; + Char * from; + Char * to; + Char * cc; + Char * bcc; + Char * replyTo; + Char * sentTo; + Char * body; +} MailDBRecordType; + +typedef MailDBRecordType * MailDBRecordPtr; + + + +//This structure should match the order of the fields in the record. +typedef enum { + mailFieldDate, + mailFieldTime, + mailFieldFlags, + mailFieldSubject, + mailFieldFrom, + mailFieldTo, + mailFieldCC, + mailFieldBCC, + mailFieldReplyTo, + mailFieldSentTo, + mailFieldBody } MailRecordFieldType; + + +// Used by MailChangeRecord function. +typedef struct { + unsigned date :1; + unsigned time :1; + unsigned flags :1; + unsigned subject :1; + unsigned from :1; + unsigned to :1; + unsigned cc :1; + unsigned bcc :1; + unsigned replyTo :1; + unsigned sentTo :1; + unsigned body :1; +} MailChangedFieldsType; + + + + +/************************************************************ + * + * Mail database routines. + * + *************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + + +Err MailAppInfoInit (DmOpenRef dbP); + +MemHandle MailGetAppInfo (DmOpenRef dbP); + +UInt8 MailGetSortOrder (DmOpenRef dbP); + +Err MailChangeSortOrder (DmOpenRef dbP, UInt8 sortOrder); + +void MailSort (DmOpenRef dbP); + +UInt32 MailGetUnsentMessage (DmOpenRef dbP); + +void MailSetUnsentMessage (DmOpenRef dbP, UInt32 uniqueID); + +MemHandle MailGetSignature (DmOpenRef dbP); + +void MailSetSignature (DmOpenRef dbP, MemHandle h); + + + +void MailParseAddress (Char * address, Boolean realName, Char * buffer, + UInt16 bufferLen); + +Err MailNewRecord (DmOpenRef dbP, MailDBRecordPtr r, UInt16 *indexP); + +Err MailAttachRecord (DmOpenRef dbP, MemHandle recordH, UInt16 * indexP); + +Err MailGetRecord (DmOpenRef dbP, UInt16 index, MailDBRecordPtr r, + MemHandle * handleP); + +Err MailChangeRecord (DmOpenRef dbP, UInt16 * index, + MailDBRecordPtr r, MailChangedFieldsType changedFields); + +void MailUnpackRecord (MailPackedDBRecordPtr src, MailDBRecordPtr dest); + +Err MailChangeRecordField (DmOpenRef dbP, UInt16 * indexP, + MailRecordFieldType recordField, void * data); + +Err MailInsertIntoField (DmOpenRef dbP, UInt16 index, + MailRecordFieldType recordField, Char * insertData, + UInt16 insertLen, UInt16 insertOffset); + +Err MailSortRecord (DmOpenRef dbP, UInt16 * indexP); + + +void ECMailDBValidate (DmOpenRef dbP); + + +Err MailGetDatabase (DmOpenRef *dbPP, UInt16 mode); + + + +#ifdef __cplusplus +} +#endif diff --git a/handera-sdk-105/examples/Mail/Src/MailLookup.c b/handera-sdk-105/examples/Mail/Src/MailLookup.c new file mode 100644 index 0000000..128a01f --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailLookup.c @@ -0,0 +1,142 @@ +/****************************************************************************** + * + * Copyright (c) 1996-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailLookup.c + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This is the Mail application's main module. + * + * History: + * June 26, 1996 Created by Art Lamb + * + *****************************************************************************/ + +#include + +#include "Mail.h" + +/*********************************************************************** + * + * FUNCTION: AddressLookup + * + * DESCRIPTION: This routine initializes a row of the "Edit View" table. + * + * PARAMETERS: fld - + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 06/26/96 Initial Revision + * meg 10/09/98 free the resultH to avoid a memory leak + * kwk 12/04/98 Modified to work for Japanese, plus fixed logic + * bug w/deciding when to search right for end of word. + * LFe 09/18/00 Use the new PhoneLookup Api + * CS2 12/01/00 Pick format string based on whether it's the first address or not + * + ***********************************************************************/ + +void AddressLookup (FieldPtr fld) +{ + MemHandle formatH; + MemHandle buttonH; + MemHandle titleH; + Char *textP; + UInt32 wordStart, wordEnd, leftPos, textLen; + AddrLookupParamsType params; + UInt16 titleStrID, insPtPos; + Boolean firstAddress; + + MemSet(¶ms, sizeof(params), 0); + + switch (EditViewField) + { + case editToField: titleStrID = mailToLookupTitleStrID; break; + case editFromField: titleStrID = mailFromLookupTitleStrID; break; + case editCCField: titleStrID = mailCCLookupTitleStrID; break; + case editBCCField: titleStrID = mailBCCLookupTitleStrID; break; + } + + /* CS2 (43813): for the first address, we don't want a comma but for additional + addresses, we do want to prepend a comma. Choose the appropriate format string. + + If the field has no text, we're the first address. + If we're within or adjacent to the first word in the field, we're the first address. + Otherwise, we're not the first address. + */ + + firstAddress = false; + textP = FldGetTextPtr( fld ); + if ( NULL != textP ) + { + /* This code is taken from PhoneLookup itself, we want to use the same word-finding + algorithm. This duplicates some work but is the only way. + */ + insPtPos = FldGetInsPtPosition( fld ); + leftPos = insPtPos; + + /* If we're not at the start of the field, check word boundaries. */ + if ( 0 < leftPos ) + { + leftPos -= TxtPreviousCharSize( textP, insPtPos ); + + textLen = FldGetTextLength( fld ); + + /* Look to the left of the insertion point first, then to the right, + being careful of the end of the text + */ + if ( TxtWordBounds( textP, textLen, leftPos, &wordStart, &wordEnd ) || + ((leftPos != insPtPos) && (insPtPos < textLen) && + TxtWordBounds( textP, textLen, insPtPos, &wordStart, &wordEnd )) ) + { + if ( 0 == wordStart ) + firstAddress = true; + } + } + else + { + firstAddress = true; + } + } + else + { + firstAddress = true; + } + + if ( firstAddress ) + { + formatH = DmGetResource( strRsc, mailLookupFormatStrID ); + } + else + { + formatH = DmGetResource( strRsc, mailAddlLookupFormatStrID ); + } + buttonH = DmGetResource (strRsc, phoneLookupAddStrID); + titleH = DmGetResource (strRsc, titleStrID); + + ErrNonFatalDisplayIf(!formatH, "null resource"); + ErrNonFatalDisplayIf(!buttonH, "null resource"); + ErrNonFatalDisplayIf(!titleH, "null resource"); + + params.title = MemHandleLock (titleH); + params.pasteButtonText = MemHandleLock(buttonH); + params.formatStringP = MemHandleLock(formatH); + params.field1 = addrLookupSortField; + params.field2 = addrLookupEmail; + params.field2Optional = false; + params.userShouldInteract = true; + + PhoneNumberLookupCustom (fld, ¶ms, true); + + MemHandleUnlock(titleH); + MemHandleUnlock(buttonH); + MemHandleUnlock(formatH); + DmReleaseResource(titleH); + DmReleaseResource(buttonH); + DmReleaseResource(formatH); +} diff --git a/handera-sdk-105/examples/Mail/Src/MailLookup.h b/handera-sdk-105/examples/Mail/Src/MailLookup.h new file mode 100644 index 0000000..df447e3 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailLookup.h @@ -0,0 +1,19 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailLookup.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file defines the email address lookup structures and functions of + * the mail application. + * + * History: + * June 26, 1996 Created by Art Lamb + * + *****************************************************************************/ + +extern void AddressLookup (FieldPtr fld); diff --git a/handera-sdk-105/examples/Mail/Src/MailMessage.c b/handera-sdk-105/examples/Mail/Src/MailMessage.c new file mode 100644 index 0000000..528c817 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailMessage.c @@ -0,0 +1,2443 @@ +/****************************************************************************** + * + * Copyright (c) 1996-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailMessage.c + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This is the Mail application's main module. + * + * History: + * June 19, 1996 Created by Art Lamb + * + *****************************************************************************/ + +#include + +#include + +#include "Mail.h" + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define tabChrWidth 20 + +#define maxCopyLength 1000 + + +/*********************************************************************** + * + * Internal Structutes + * + ***********************************************************************/ + +typedef struct { + UInt16 tabStop; + UInt16 fieldTextPos; + Char * fieldText; + MsgFieldType fieldType; + MsgSelectFieldType selectStartField; + MsgSelectFieldType selectEndField; + UInt8 reserved1; + UInt16 selectStartPos; + UInt16 selectEndPos; + RectangleType bounds; + MailDBRecordType record; + MemHandle recordH; + Char dateStr [timeStringLength + timeStringLength + 1]; + Char toFriendlyName [maxFriendlyNameLen]; + Char fromFriendlyName [maxFriendlyNameLen]; + UInt8 reserved2; +} MessegeInfoType; + +typedef MessegeInfoType * MessegeInfoPtr; + + +/*********************************************************************** + * + * Internal Routines + * + ***********************************************************************/ + +static Char * MsgGetFieldPtr (MessegeInfoPtr msg); + + +/*********************************************************************** + * + * FUNCTION: MsgInit + * + * DESCRIPTION: This routine initialize the structure used to draw and + * scroll a mesage. + * + * PARAMETERS: msg - structure to initilize + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static void MsgInit (MessegeInfoPtr msg, MsgFieldType fieldType, + UInt16 fieldTextPos) +{ + UInt16 len; + UInt16 objIndex; + FormPtr frm; + FontID oldFont; + UInt16 tabStop; + int i; + static UInt16 labelIDs[] = { toStrId, fromStrId, subjectStrId, ccStrId, dateStrId }; + + // Get the tab stop for the start of the header text. + // DOLATER kwk - figure out if it's safe to use static labelIDs here, + // since they rely on globals. + oldFont = FntSetFont (MessageFont); + tabStop = 0; + + for (i = 0; i < sizeof (labelIDs) / sizeof (labelIDs[0]); i += 1) + { + MemHandle resH; + + resH = DmGetResource (strRsc, labelIDs[i]); + if (resH != 0) + { + Char * ptr; + Int16 width; + + ptr = MemHandleLock (resH); + width = FntCharsWidth (ptr, StrLen (ptr)); + if (tabStop < width) + { + tabStop = width; + } + MemHandleUnlock (resH); + DmReleaseResource (resH); + } + } + + msg->tabStop = tabStop; + FntSetFont (oldFont); + + // Get the bounds of the message. + frm = FrmGetActiveForm (); + objIndex = FrmGetObjectIndex (frm, MessageGadget); + FrmGetObjectBounds (frm, objIndex, &msg->bounds); + + // Get the current record + MailGetRecord (MailDB, CurrentRecord, &msg->record, &msg->recordH); + + // Get the friendly mame of the recipent and the sender of the message. + *msg->toFriendlyName = 0; + if ((msg->record.sentTo) && StrChr (msg->record.sentTo, '(')) + { + MailParseAddress (msg->record.sentTo, true, msg->toFriendlyName, + maxFriendlyNameLen); + } + + *msg->fromFriendlyName = 0; + if ((msg->record.from) && StrChr (msg->record.from, '(')) + { + MailParseAddress (msg->record.from, true, msg->fromFriendlyName, + maxFriendlyNameLen); + } + + + msg->fieldTextPos = fieldTextPos; + msg->fieldType = fieldType; + + msg->fieldText = MsgGetFieldPtr (msg); + + msg->selectStartField = MessageSelectStartField; + msg->selectEndField = MessageSelectEndField; + msg->selectStartPos = MessageSelectStartPos; + msg->selectEndPos = MessageSelectEndPos; + + if (DateToInt (msg->record.date)) + { + // Format the date and time. + DateToAscii (msg->record.date.month, + msg->record.date.day, + (msg->record.date.year+firstYear) % 100, + DateFormat, + msg->dateStr); + + len = StrLen (msg->dateStr); + msg->dateStr [len++] = spaceChr; + + TimeToAscii (msg->record.time.hours, + msg->record.time.minutes, + TimeFormat, + &msg->dateStr[len]); + } + else + { + *msg->dateStr = 0; + } +} + + + +/*********************************************************************** + * + * FUNCTION: MsgSearch + * + * DESCRIPTION: This routine searchs the fields of the mail message + * that are displayable in the Message View. + * + * PARAMETERS: strToFind - string to find + * fieldP - returned: field the match occurred in + * posP - starting character position of the match + * + * RETURNED: true if a match was found + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/27/96 Initial Revision + * + ***********************************************************************/ +Boolean MsgSearch (MailDBRecordPtr recordP, Char * strToFind, + UInt16 * fieldNumP, UInt16 * posP, UInt16 * matchLengthP) +{ + UInt32 pos; + UInt16 matchLength; + UInt16 fieldType; + Char * ptr; + Char friendlyName [maxFriendlyNameLen]; + + + for (fieldType = msgFieldSentTo; fieldType <= msgFieldBody; fieldType++) + { + switch (fieldType) + { + case msgFieldSentTo: + if ((recordP->sentTo) && StrChr (recordP->sentTo, '(' )) + { + MailParseAddress (recordP->sentTo, true, friendlyName, maxFriendlyNameLen); + ptr = friendlyName; + } + else + ptr = recordP->sentTo; + break; + + case msgFieldTo: + ptr = recordP->to; + break; + + case msgFieldFrom: + ptr = recordP->from; + break; + + case msgFieldSubject: + ptr = recordP->subject; + break; + + case msgFieldCC: + ptr = recordP->cc; + break; + + case msgFieldBody: + ptr = recordP->body; + break; + + default: + ptr = NULL; + } + + if (ptr && *ptr) + { + if (TxtFindString (ptr, strToFind, &pos, &matchLength)) + { + *fieldNumP = fieldType; + *posP = pos; + /* CS2 (24659, 25166, 44807): pass along selection range */ + *matchLengthP = matchLength; + return (true); + } + } + } + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: MsgIsHeaderField + * + * DESCRIPTION: Returns true if the mail field passed is a header field. + * + * PARAMETERS: fieldType - type a a mail record field. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static Boolean MsgIsHeaderField (MsgFieldType fieldType) +{ + switch (fieldType) + { + case msgFieldSentTo: + case msgFieldTo: + case msgFieldFrom: + case msgFieldSubject: + case msgFieldCC: + case msgFieldDate: + return (true); + break; + } + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: MsgGetHeaderLabel + * + * DESCRIPTION: Returns a pointer to a header line's label. + * + * PARAMETERS: fieldType - type a a mail record field. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static MemHandle MsgGetHeaderLabel (MsgFieldType fieldType, MailAddressingType addressing) +{ + UInt16 id; + + switch (fieldType) + { + case msgFieldSentTo: + switch (addressing) + { + case sentTo: + id = toStrId; + break; + case sentCC: + id = ccStrId; + break; + case sentBCC: + id = bccStrId; + break; + } + break; + + + case msgFieldTo: + id = toStrId; + break; + + case msgFieldFrom: + id = fromStrId; + break; + + case msgFieldSubject: + id = subjectStrId; + break; + + case msgFieldCC: + id = ccStrId; + break; + + case msgFieldDate: + id = dateStrId; + break; + + default: + return (0); + + } + + return (DmGetResource (strRsc, id)); +} + + +/*********************************************************************** + * + * FUNCTION: MsgGetFieldPtr + * + * DESCRIPTION: This routine returns a pointer to the specified field + * of the record passed. + * + * PARAMETERS: fieldType - type a a mail record field. + * repordP - pointer to a mail record. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static Char * MsgGetFieldPtr (MessegeInfoPtr msg) +{ + switch (msg->fieldType) + { + case msgFieldSentTo: + if (*msg->toFriendlyName) + return (msg->toFriendlyName); + else + return (msg->record.sentTo); + + case msgFieldTo: + return (msg->record.to); + + case msgFieldFrom: + if (ShowFullHeader) + return (msg->record.from); + else if (*msg->fromFriendlyName) + return (msg->fromFriendlyName); + else + return (msg->record.from); + + case msgFieldSubject: + return (msg->record.subject); + + case msgFieldCC: + return (msg->record.cc); + + case msgFieldBody: + return (msg->record.body); + + case msgFieldDate: + return (msg->dateStr); + } + return (NULL); +} + + +/*********************************************************************** + * + * FUNCTION: MsgNextField + * + * DESCRIPTION: This routine the previous field of a message. + * + * PARAMETERS: msg - used to draw and scroll a mesage. + * + * RETURNED: false if there is no next field + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/21/96 Initial Revision + * + ***********************************************************************/ +static Boolean MsgPreviousField (MessegeInfoPtr msg) +{ + if (ShowFullHeader) + { + switch (msg->fieldType) + { + case msgFieldTo: + case msgFieldSentTo: + msg->fieldText = NULL; + return (false); + + case msgFieldFrom: + msg->fieldType = msgFieldTo; + msg->fieldText = msg->record.to; + break; + + case msgFieldCC: + msg->fieldType = msgFieldFrom; + msg->fieldText = msg->record.from; + break; + + case msgFieldSubject: + msg->fieldType = msgFieldCC; + msg->fieldText = msg->record.cc; + break; + + case msgFieldDate: + msg->fieldType = msgFieldSubject; + msg->fieldText = msg->record.subject; + break; + + case msgFieldBlankLine: + msg->fieldType = msgFieldDate; + msg->fieldText = msg->dateStr; + break; + + case msgFieldBody: + msg->fieldType = msgFieldBlankLine; + msg->fieldText = NULL; + break; + } + } +/* + switch (msg->fieldType) + { + case msgFieldTo: + case msgFieldSentTo: + msg->fieldText = NULL; + return (false); + + case msgFieldFrom: + msg->fieldType = msgFieldTo; + msg->fieldText = msg->record.to; + break; + + case msgFieldSubject: + msg->fieldType = msgFieldFrom; + msg->fieldText = msg->record.from; + break; + + case msgFieldCC: + msg->fieldType = msgFieldSubject; + msg->fieldText = msg->record.subject; + break; + + case msgFieldDate: + msg->fieldType = msgFieldCC; + msg->fieldText = msg->record.cc; + break; + + case msgFieldBlankLine: + msg->fieldType = msgFieldDate; + msg->fieldText = msg->dateStr; + break; + + case msgFieldBody: + msg->fieldType = msgFieldBlankLine; + msg->fieldText = NULL; + break; + } + } +*/ + + else + { + switch (msg->fieldType) + { + case msgFieldTo: + case msgFieldSentTo: + return (false); + + case msgFieldFrom: + case msgFieldSubject: + case msgFieldCC: + case msgFieldDate: + msg->fieldType = msgFieldSentTo; + if (*msg->toFriendlyName) + msg->fieldText = msg->toFriendlyName; + else + msg->fieldText = msg->record.sentTo; + break; + + case msgFieldBlankLine: + msg->fieldType = msgFieldFrom; + if (*msg->fromFriendlyName) + msg->fieldText = msg->fromFriendlyName; + else + msg->fieldText = msg->record.from; + break; + + case msgFieldBody: + msg->fieldType = msgFieldBlankLine; + msg->fieldText = NULL; + break; + } + } + + if (msg->fieldText) + msg->fieldTextPos = StrLen (msg->fieldText); + else + msg->fieldTextPos = 0; + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: MsgNextField + * + * DESCRIPTION: This routine the next field of a message. + * + * PARAMETERS: msg - used to draw and scroll a mesage. + * + * RETURNED: false if there is no next field + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * MGolden 7/11/97 Added the subject view to the Int16 header + * + ***********************************************************************/ +static Boolean MsgNextField (MessegeInfoPtr msg) +{ + if (ShowFullHeader) + { + switch (msg->fieldType) + { + case msgFieldTo: + case msgFieldSentTo: + msg->fieldType = msgFieldFrom; + msg->fieldText = msg->record.from; + break; + + case msgFieldFrom: + msg->fieldType = msgFieldCC; + msg->fieldText = msg->record.cc; + break; + + case msgFieldCC: + msg->fieldType = msgFieldSubject; + msg->fieldText = msg->record.subject; + break; + + case msgFieldSubject: + msg->fieldType = msgFieldDate; + msg->fieldText = msg->dateStr; + break; + + case msgFieldDate: + msg->fieldType = msgFieldBlankLine; + msg->fieldText = NULL; + break; + + case msgFieldBlankLine: + msg->fieldType = msgFieldBody; + msg->fieldText = msg->record.body; + break; + + case msgFieldBody: + return (false); + } + } + + else + { + switch (msg->fieldType) + { + case msgFieldTo: + case msgFieldSentTo: + msg->fieldType = msgFieldFrom; + if (*msg->fromFriendlyName) + msg->fieldText = msg->fromFriendlyName; + else + msg->fieldText = msg->record.from; + break; + +//mgmg new add the subject field to the Int16 header... + case msgFieldFrom: + msg->fieldType = msgFieldSubject; + msg->fieldText = msg->record.subject; + break; + + + case msgFieldSubject: + case msgFieldCC: + case msgFieldDate: + msg->fieldType = msgFieldBlankLine; + msg->fieldText = NULL; + break; + + case msgFieldBlankLine: + msg->fieldType = msgFieldBody; + msg->fieldText = msg->record.body; + break; + + case msgFieldBody: + return (false); + } + } + + msg->fieldTextPos = 0; + + return (true); +} + + +/*********************************************************************** + * + * FUNCTION: MsgSelectFieldVisible + * + * DESCRIPTION: This routine returns true if the selection field is + * visible in the current message line. + * + * PARAMETERS: msg - used to draw and scroll a mesage. + * selectField - label of field of message + * + * RETURNED: true if selection field is visible + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/28/96 Initial Revision + * + ***********************************************************************/ +static Boolean MsgSelectFieldVisible (MessegeInfoPtr msg, + MsgSelectFieldType selectField) +{ + UInt16 pos; + MsgFieldType fieldType; + + if (msg->selectStartField > selectField || + msg->selectEndField < selectField) + return (false); + + + fieldType = msg->fieldType; + pos = msg->fieldTextPos; + + switch (selectField) + { + case msgSelectSentToLabel: + return (fieldType == msgFieldSentTo && pos == 0); + + case msgSelectSentTo: + return (fieldType == msgFieldSentTo); + + case msgSelectToLabel: + return (fieldType == msgFieldTo && pos == 0); + + case msgSelectTo: + return (fieldType == msgFieldTo); + + case msgSelectFromLabel: + return (fieldType == msgFieldFrom && pos == 0); + + case msgSelectFrom: + return (fieldType == msgFieldFrom); + + case msgSelectSubjectLabel: + return (fieldType == msgFieldSubject && pos == 0); + + case msgSelectSubject: + return (fieldType == msgFieldSubject); + + case msgSelectCC: + return (fieldType == msgFieldCC && ShowFullHeader); + + case msgSelectCCLabel: + return (fieldType == msgFieldCC && pos == 0 && ShowFullHeader); + + case msgSelectDate: + return (fieldType == msgFieldDate && ShowFullHeader); + + case msgSelectDateLabel: + return (fieldType == msgFieldDate && pos == 0 && ShowFullHeader); + + case msgSelectBlankLine: + return (fieldType == msgFieldBlankLine); + + case msgSelectBody: + return (fieldType == msgFieldBody); + + } + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: MsgWordWrap + * + * DESCRIPTION: Given a string, determine the number of characters that + * can be displayed within the specified width. + * + * PARAMETERS: msg - structure contain info for word wrapping + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static UInt16 MsgWordWrap (MessegeInfoPtr msg) +{ + UInt16 width; + UInt16 length = 0; + Char * ptr; + Boolean header; + + + // Leave room for the field description (ex: "To:") if the field + // has a description. + header = MsgIsHeaderField (msg->fieldType); + if (header) + { + width = msg->bounds.extent.x - msg->tabStop; + } + else + width = msg->bounds.extent.x; + + ptr = MsgGetFieldPtr (msg); + + if (ptr) + { + ptr += msg->fieldTextPos; + length = FntWordWrap (ptr, width); + } + + + +/* + // If the field is a header and we didn't wrap on a space of linefeed + // character then wrap on the last address punctuation character. + if (header && length) + { + count = 0; + ptr += length - 1; + if (*(ptr+1) != nullChr && *ptr != spaceChr && *ptr != linefeedChr) + { + while (count < length) + { + // Wrap after right paren. + if (*ptr == ')') + { + length -= count; + break; + } + // Wrap before left paren, @, and period. + else if (*ptr == '(' || *ptr == '@' || *ptr == periodChr) + { + if (length > count + 1) + length -= count + 1; + break; + } + count++; + ptr--; + } + } + } +*/ + return (length); +} + + +/*********************************************************************** + * + * FUNCTION: MsgIsLableField + * + * DESCRIPTION: Returns true if the field passed is a label field. + * + * PARAMETERS: selectField - masseage label a field + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static Boolean MsgIsLableField (MsgSelectFieldType selectField) +{ + switch (selectField) + { + case msgSelectSentToLabel: + case msgSelectToLabel: + case msgSelectFromLabel: + case msgSelectSubjectLabel: + case msgSelectCCLabel: + case msgSelectDateLabel: + return (true); + } + return (false); +} + + +/*********************************************************************** + * + * FUNCTION: InvertCharsRange + * + * DESCRIPTION: Invert specified characer range on the specified line. + * This rountine performs the actual inverting. + * + * PARAMETERS: fld pointer to a FieldType structure. + * lineNum line number + * startPos character position of start of range + * endPos character position of end of range. + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/28/96 Initial Revision + * + ***********************************************************************/ +static void MsgInvertCharsRange (MessegeInfoPtr msg, MsgSelectFieldType selectField, + UInt16 lineNumber, UInt16 startPos, UInt16 endPos) +{ + UInt16 length; + Int16 left; + Int16 width; + Char * ptr; + MemHandle resH; + Boolean label; + RectangleType r; + + + label = MsgIsLableField (selectField); + + if (label) + { + resH = MsgGetHeaderLabel (msg->fieldType, + (MailAddressingType) msg->record.flags.addressing); + ptr = MemHandleLock (resH); + + length = FntLineWidth (ptr, StrLen(ptr)); + left = msg->bounds.topLeft.x + + (msg->tabStop - length) + + FntLineWidth (ptr, startPos); + } + + else if (msg->fieldText) + { + ptr = msg->fieldText; + + left = msg->bounds.topLeft.x + + FntLineWidth (&ptr[msg->fieldTextPos], startPos - msg->fieldTextPos); + + if (MsgIsHeaderField (msg->fieldType)) + left += msg->tabStop; + } + else + return; + + + width = FntLineWidth (&ptr[startPos], endPos - startPos); + + + r.topLeft.x = left; + r.extent.x = width; + + r.extent.y = FntLineHeight (); + r.topLeft.y = msg->bounds.topLeft.y + (lineNumber * FntLineHeight ()); + + if (r.topLeft.x + r.extent.x > msg->bounds.topLeft.x + msg->bounds.extent.x) + r.extent.x = msg->bounds.extent.x - (r.topLeft.x - msg->bounds.topLeft.x); + +/* CS2 (23430): use swap mode, not invert, for selection + WinInvertRectangle (&r, 0); +*/ + + WinPushDrawState(); + WinSetDrawMode( winSwap ); + WinPaintRectangle( &r, 0 ); + WinPopDrawState(); + + if (label) + { + MemHandleUnlock (resH); + DmReleaseResource (resH); + } +} + + +/*********************************************************************** + * + * FUNCTION: MsgInvertSelection + * + * DESCRIPTION: Invert the current selection. + * + * PARAMETERS: nothing + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/28/96 Initial Revision + * + ***********************************************************************/ +static void MsgInvertSelection (MessegeInfoPtr msg) +{ + UInt16 length; + UInt16 lineNumber; + UInt16 numLines; + UInt16 startPos; + UInt16 endPos; + Char * ptr; + MemHandle resH; + MsgSelectFieldType selectField; + + if (msg->selectStartField == msgSelectNone) + return; + + lineNumber = 0; + numLines = msg->bounds.extent.y / FntLineHeight (); + + while (lineNumber < numLines) + { + length = MsgWordWrap (msg); + if (length) + { + for (selectField = msg->selectStartField; + selectField <= msg->selectEndField; selectField++) + { + if (MsgSelectFieldVisible (msg, selectField)) + { + if (MsgIsLableField (selectField)) + { + if (selectField == msg->selectStartField) + startPos = msg->selectStartPos; + else + startPos = 0; + + if (selectField == msg->selectEndField) + endPos = msg->selectEndPos; + else + { + resH = MsgGetHeaderLabel (msg->fieldType, + (MailAddressingType) msg->record.flags.addressing); + ptr = MemHandleLock (resH); + endPos = StrLen (ptr); + MemHandleUnlock (resH); + DmReleaseResource (resH); + } + } + + else + { + if (selectField == msg->selectStartField) + { + if (msg->selectStartPos < msg->fieldTextPos + length) + startPos = max (msg->selectStartPos, msg->fieldTextPos); + else + continue; + } + else + startPos = msg->fieldTextPos; + + + if (selectField == msg->selectEndField) + { + if (msg->selectEndPos >= msg->fieldTextPos) + endPos = min (msg->selectEndPos, msg->fieldTextPos + length); + else + continue; + } + else + endPos = msg->fieldTextPos + length; + } + + + MsgInvertCharsRange (msg, selectField, lineNumber, startPos, endPos); + } + } + + msg->fieldTextPos += length; + lineNumber++; + } + else + { + if (msg->fieldType == msgFieldBlankLine) + lineNumber++; + if (! MsgNextField (msg)) + break; + } + } +} + + + +/*********************************************************************** + * + * FUNCTION: MsgDrawLine + * + * DESCRIPTION: This routine draws a line of the message. + * + * PARAMETERS: msg - structure contain info for drawing + * charsToDraw - the number of characters to draw + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +static void MsgDrawLine (MessegeInfoPtr msg, UInt16 charsToDraw, + UInt16 lineNumber) +{ + UInt16 len; + UInt16 count; + UInt16 charsDrawn; + Int16 x, y; + Int16 drawX; + Char * ptr; + Boolean header; + + // Calculate the draw position of the line. + x = msg->bounds.topLeft.x; + y = msg->bounds.topLeft.y + (lineNumber * FntLineHeight ()); + + // If the line is the start of of the header draw the header label. + header = MsgIsHeaderField (msg->fieldType); + if (header) + { + if (msg->fieldTextPos == 0) + { + ptr = MemHandleLock (MsgGetHeaderLabel (msg->fieldType, + (MailAddressingType) msg->record.flags.addressing)); + len = StrLen (ptr); + drawX = x +( Int16)msg->tabStop - (Int16)FntCharsWidth (ptr, len); + WinDrawChars (ptr, len, drawX, y); + MemPtrUnlock (ptr); + } + x += msg->tabStop; + } + + // Get a pointer to the start of the text to draw. + ptr = MsgGetFieldPtr (msg); + ptr += msg->fieldTextPos; + + // Don't draw the linefeedChr character. + if ((charsToDraw) && ptr[charsToDraw-1] == linefeedChr) + charsToDraw--; + + // Don't draw trailing spaceChrs. + while (charsToDraw && ptr[charsToDraw-1] == spaceChr) + charsToDraw--; + + // Draw the text. + count = 0; + charsDrawn = 0; + while (true) + { + // Count until we reach a tab character. + while ((count < charsToDraw) && (ptr[count] != tabChr)) + count++; + + // Draw the characters until/between the tab characters. + WinDrawChars (&ptr[charsDrawn], count-charsDrawn, x, y); + if (count >= charsToDraw) break; + + // Move the draw position past the tab. + x += FntLineWidth (&ptr[charsDrawn], count-charsDrawn); + x += tabChrWidth - ((x - msg->bounds.topLeft.x) % tabChrWidth); + + // Skip over the tab. + count++; + charsDrawn = count; + } +} + + + +/*********************************************************************** + * + * FUNCTION: MsgDraw + * + * DESCRIPTION: This routine draws an mail message. + * + * PARAMETERS: msg - structure contain info for drawing. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +void MsgDraw (void) +{ + UInt16 length; + UInt16 lineNumber; + UInt16 linesToDraw; + FontID currFont; + MessegeInfoType msg; + Boolean isHeader; + + currFont = FntSetFont (MessageFont); + + MsgInit (&msg, MessageTopField, MessageScrollPos); + + lineNumber = 0; + linesToDraw = msg.bounds.extent.y / FntLineHeight (); + + while (lineNumber < linesToDraw) + { + isHeader = false; + //mgmg change this to draw the empty header if needed... + length = MsgWordWrap (&msg); + if (length) + { + MsgDrawLine (&msg, length, lineNumber); + msg.fieldTextPos += length; + lineNumber++; + } + else if (msg.fieldType == msgFieldBlankLine) + { + lineNumber++; + if (! MsgNextField (&msg)) + break; + } + else if (!MsgNextField (&msg)) + break; + } + + MemHandleUnlock (msg.recordH); + + + MsgInit (&msg, MessageTopField, MessageScrollPos); + MsgInvertSelection (&msg); + MemHandleUnlock (msg.recordH); + + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: MsgErase + * + * DESCRIPTION: This routine erase the current mail message. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/19/96 Initial Revision + * + ***********************************************************************/ +void MsgErase (void) +{ + UInt16 objIndex; + FormPtr frm; + RectangleType bounds; + + frm = FrmGetActiveForm (); + objIndex = FrmGetObjectIndex (frm, MessageGadget); + FrmGetObjectBounds (frm, objIndex, &bounds); + WinEraseRectangle (&bounds, 0); +} + + +/*********************************************************************** + * + * FUNCTION: MsgGetFieldHeight + * + * DESCRIPTION: This routine returns the height of a format message + * field. + * + * PARAMETERS: fld - pointer to a FieldType structure. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/20/96 Initial Revision + * + ***********************************************************************/ +static UInt16 MsgGetFieldHeight (MessegeInfoPtr msg) +{ + UInt16 length; + UInt16 lines; + + if (msg->fieldType == msgFieldBlankLine) + return (1); + + lines = 0; + length = 0; + msg->fieldTextPos = 0; + + do + { + length += MsgWordWrap (msg); + msg->fieldTextPos = length; + lines++; + } + while (msg->fieldText[length]); + + // If the text end with a linefeed add one to the height. + if (length && msg->fieldText[length-1] == linefeedChr) + lines++; + + return (lines); +} + + +/*********************************************************************** + * + * FUNCTION: MsgGetScrollValues + * + * DESCRIPTION: This routine returns the values necessary to update a + * scroll bar. + * + * PARAMETERS: fld - pointer to a FieldType structure. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/20/96 Initial Revision + * + ***********************************************************************/ +/* +void MsgGetScrollValues (UInt16 * textHeightP, UInt16 * pageHeightP) +{ + UInt16 lines = 0; + FontID currFont; + MessegeInfoType msg; + + currFont = FntSetFont (MessageFont); + + MsgInit (&msg, msgFieldTo, 0); + + while (true) + { + lines += MsgGetFieldHeight (&msg); + + if (! MsgNextField (&msg)) + break; + } + + MemHandleUnlock (msg.recordH); + FntSetFont (currFont); + + *textHeightP = lines; + *pageHeightP = msg.bounds.extent.y / FntLineHeight ();; +} +*/ + + +/*********************************************************************** + * + * FUNCTION: MsgGetScrollValues + * + * DESCRIPTION: This routine returns the values necessary to update a + * scroll bar. + * + * PARAMETERS: fld - pointer to a FieldType structure. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/20/96 Initial Revision + * + ***********************************************************************/ +void MsgGetScrollValues (UInt16 * textHeightP, UInt16 * pageHeightP, UInt16 * topLineP) +{ + UInt16 length; + UInt16 lines = 0; + UInt16 topLine = 0; + FontID currFont; + MsgFieldType fieldType; + MessegeInfoType msg; + + currFont = FntSetFont (MessageFont); + + if (ShowFullHeader) + fieldType = msgFieldTo; + else + fieldType = msgFieldSentTo; + + MsgInit (&msg, fieldType, 0); + + while (true) + { + if (msg.fieldType == MessageTopField) + topLine = lines; + + if (msg.fieldType == msgFieldBlankLine) + lines++; + else + { + length = 0; + msg.fieldTextPos = 0; + + do + { + length = MsgWordWrap (&msg); + + if (msg.fieldType == MessageTopField) + { + if (msg.fieldTextPos < MessageScrollPos && + msg.fieldTextPos + length > MessageScrollPos) + { + MessageScrollPos = msg.fieldTextPos; + topLine = lines; + } + else if (msg.fieldTextPos + length == MessageScrollPos) + //mgmg + //topLine = lines; + topLine = lines; + } + + if (length) + { + msg.fieldTextPos += length; + lines++; + } + } + while (msg.fieldText[msg.fieldTextPos]); + + // If the text end with a linefeed add one to the height. + if (length && msg.fieldText[length-1] == linefeedChr) + lines++; + } + + if (! MsgNextField (&msg)) + break; + } + + MemHandleUnlock (msg.recordH); + + *topLineP = topLine; + *textHeightP = lines; + *pageHeightP = msg.bounds.extent.y / FntLineHeight ();; + + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: MsgScrollUpNLines + * + * DESCRIPTION: This routine scrolls a field of the message winUp by the + * number of lines specified. + * + * PARAMETERS: msg structure contain message info + * linesToScroll number of lines to scroll. + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 11/1/96 Initial Revision + * + ***********************************************************************/ +static UInt16 MsgScrollUpNLines (MessegeInfoPtr msg, UInt16 linesToScroll) +{ + UInt16 width; + UInt16 lineCount = 0; + + if (msg->fieldText && msg->fieldTextPos) + { + if (MsgIsHeaderField (msg->fieldType)) + width = msg->bounds.extent.x - msg->tabStop; + else + width = msg->bounds.extent.x; + + lineCount = linesToScroll; + FntWordWrapReverseNLines (msg->fieldText, width, + &lineCount, &msg->fieldTextPos); + } + + if (msg->fieldType == msgFieldBlankLine && linesToScroll > 1) + lineCount = 1; + + return (lineCount); +} + + +/*********************************************************************** + * + * FUNCTION: MsgScroll + * + * DESCRIPTION: This routine scrolls the message view by the number of + * lines specified. + * + * PARAMETERS: direction - winUp or dowm + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 6/20/96 Initial Revision + * + ***********************************************************************/ +void MsgScroll (Int16 linesToScroll, WinDirectionType direction) +{ + UInt16 length; + UInt16 linesScrolled; + FontID currFont; + MessegeInfoType msg; + + currFont = FntSetFont (MessageFont); + MsgInit (&msg, MessageTopField, MessageScrollPos); + + if (direction == winUp) + { + while (true) + { + linesScrolled = MsgScrollUpNLines (&msg, linesToScroll); + if (linesScrolled == linesToScroll) + break; + linesToScroll -= linesScrolled; + + if (! MsgPreviousField (&msg)) + break; + } + } + + + else if (direction == winDown) + { + while (linesToScroll) + { + length = MsgWordWrap (&msg); + if (length) + { + msg.fieldTextPos += length; + linesToScroll--; + } + else + { + if (msg.fieldType == msgFieldBlankLine) + linesToScroll--; + if (! MsgNextField (&msg)) + break; + } + } + + // If we at the end of the current field move to the next field so that + // the field position and field top of the top line will be correct. + if (length && msg.fieldText[msg.fieldTextPos] == 0) + MsgNextField (&msg); + } + + MemHandleUnlock (msg.recordH); + FntSetFont (currFont); + + MessageScrollPos = msg.fieldTextPos; + MessageTopField = msg.fieldType; + + // DOLATER ??? - Optimize redraw + WinEraseRectangle (&msg.bounds, 0); + MsgDraw (); +} + + +/*********************************************************************** + * + * FUNCTION: MsgUpdateHighlight + * + * DESCRIPTION: Adjust the current highlighted region to include or exclude + * the specified range of characters. + * + * PARAMETERS: msg - structure contain message info + * startPos character position of start of range + * endPos character position of end of range. + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/29/96 Initial Revision + * + ***********************************************************************/ +static void MsgUpdateHighlight (MessegeInfoPtr msg, + MsgSelectFieldType startField, UInt16 startPos, + MsgSelectFieldType endField, UInt16 endPos) +{ + MsgSelectFieldType invertStartField; + MsgSelectFieldType invertEndField; + UInt16 invertStartPos; + UInt16 invertEndPos; + + + // No current selection? + if (msg->selectStartField == msg->selectEndField && + msg->selectStartPos == msg->selectEndPos) + { + invertStartField = startField; + invertEndField = endField; + invertStartPos = startPos; + invertEndPos = endPos; + } + + // Add to the end of the selection. + else if (msg->selectStartField == startField && + msg->selectStartPos == startPos) + { + if (msg->selectEndField < endField) + { + invertStartField = msg->selectEndField; + invertStartPos = msg->selectEndPos; + invertEndField = endField; + invertEndPos = endPos; + } + else if (msg->selectEndField > endField) + { + invertStartField = endField; + invertStartPos = endPos; + invertEndField = msg->selectEndField; + invertEndPos = msg->selectEndPos; + } + else + { + invertStartField = msg->selectEndField; + invertEndField = msg->selectEndField; + if (msg->selectEndPos < endPos) + { + invertStartPos = msg->selectEndPos; + invertEndPos = endPos; + } + else + { + invertStartPos = endPos; + invertEndPos = msg->selectEndPos; + } + } + } + + // Add to the start of the selection. + else if (msg->selectEndField == endField && + msg->selectEndPos == endPos) + { + if (msg->selectStartField < startField) + { + invertStartField = msg->selectStartField; + invertStartPos = msg->selectStartPos; + invertEndField = startField; + invertEndPos = startPos; + } + else if (msg->selectStartField > startField) + { + invertStartField = startField; + invertStartPos = startPos; + invertEndField = msg->selectStartField; + invertEndPos = msg->selectStartPos; + } + else + { + invertStartField = msg->selectStartField; + invertEndField = msg->selectStartField; + if (msg->selectStartPos < startPos) + { + invertStartPos = msg->selectStartPos; + invertEndPos = startPos; + } + else + { + invertStartPos = startPos; + invertEndPos = msg->selectStartPos; + } + } + } + + else + { + if (msg->selectStartField < startField) + { + invertStartField = msg->selectStartField; + invertStartPos = msg->selectStartPos; + } + else if (msg->selectStartField > startField) + { + invertStartField = startField; + invertStartPos = startPos; + } + else + { + invertStartField = msg->selectStartField; + invertStartPos = min (msg->selectStartPos, startPos); + } + + if (msg->selectEndField < endField) + { + invertEndField = endField; + invertEndPos = endPos; + } + else if (msg->selectEndField > endField) + { + invertEndField = msg->selectEndField; + invertEndPos = msg->selectEndPos; + } + else + { + invertEndField = msg->selectEndField; + invertEndPos = max (msg->selectEndPos, endPos); + } + } + + msg->selectStartField = invertStartField; + msg->selectStartPos = invertStartPos; + msg->selectEndField = invertEndField; + msg->selectEndPos = invertEndPos; + + MsgInvertSelection (msg); + + msg->selectStartField = startField; + msg->selectStartPos = startPos; + msg->selectEndField = endField; + msg->selectEndPos = endPos; +} + + +/*********************************************************************** + * + * FUNCTION: MsgSetSelection + * + * DESCRIPTION: This + * + * PARAMETERS: + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/28/96 Initial Revision + * + ***********************************************************************/ +static void MsgSetSelection (MessegeInfoPtr msg, + MsgSelectFieldType startField, UInt16 startPos, + MsgSelectFieldType endField, UInt16 endPos) +{ + UInt16 tempPos; + MsgSelectFieldType tempField; + + if (startField == endField && startPos == endPos) + { + MsgInvertSelection (msg); + msg->selectStartField = msgSelectNone; + msg->selectStartPos = 0; + msg->selectEndField = msgSelectNone; + msg->selectEndPos = 0; + } + + else if (startField > endField) + { + tempField = startField; + startField = endField; + endField = tempField; + + tempPos = startPos; + startPos = endPos; + endPos = tempPos; + } + + else if (startField == endField && startPos > endPos) + { + tempPos = startPos; + startPos = endPos; + endPos = tempPos; + } + + MsgUpdateHighlight (msg, startField, startPos, endField, endPos); + + MessageSelectStartField = msg->selectStartField; + MessageSelectEndField = msg->selectEndField; + MessageSelectStartPos = msg->selectStartPos; + MessageSelectEndPos = msg->selectEndPos; +} + + +/*********************************************************************** + * + * FUNCTION: MsgGetPositionOfPoint + * + * DESCRIPTION: Given the position in the pen this routine will + * return the message field and character position + * of the point. + * + * PARAMETERS: msg - structure contain message info + * x, y - pen position + * fieldP - returned: field the pen is in + * posP - returned: character position the pen is on + * r - returned: bounds of character position + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/28/96 Initial Revision + * + ***********************************************************************/ +static void MsgGetPositionOfPoint (MessegeInfoPtr msg, Int16 x, Int16 y, + MsgSelectFieldType * fldP, UInt16 * posP, RectanglePtr r) +{ + UInt16 length; + UInt16 lineNumber; + UInt16 lines; + UInt16 width; + UInt16 lastWidth; + Int16 xPos; + Int16 yPos; + Char * ptr; + Boolean more; + Boolean heading; + MemHandle resH = 0; + UInt16 chSize; + + + // Find the line the point is on. + y = max (y, msg->bounds.topLeft.y); + y = min (y, msg->bounds.topLeft.y + msg->bounds.extent.y - 1); + yPos = (y - msg->bounds.topLeft.y) / FntLineHeight (); + + lineNumber = 0; + lines = msg->bounds.extent.y / FntLineHeight (); + length = 0; + + while (lineNumber < lines) + { + if (lineNumber >= yPos) + break; + + length = MsgWordWrap (msg); + if (length) + { + msg->fieldTextPos += length; + lineNumber++; + } + + + if ((! length) || (msg->fieldText [msg->fieldTextPos] == 0)) + { + while (true) + { + if (msg->fieldType == msgFieldBlankLine) + { + if (lineNumber >= yPos) + break; + lineNumber++; + } + + more = MsgNextField (msg); + if (! more) + break; + + if (msg->fieldText && *msg->fieldText) + break; + } + if (! more) break; + } + } + + + + // Find the field the point in on. + x = max (x, msg->bounds.topLeft.x); + x = min (x, msg->bounds.topLeft.y + msg->bounds.extent.x - 1); + + heading = MsgIsHeaderField (msg->fieldType); + if (heading && + (msg->fieldTextPos == 0) && + (x - msg->bounds.topLeft.x <= msg->tabStop)) + { + switch (msg->fieldType) + { + case msgFieldSentTo: *fldP = msgSelectSentToLabel; break; + case msgFieldTo: *fldP = msgSelectToLabel; break; + case msgFieldFrom: *fldP = msgSelectFromLabel; break; + case msgFieldSubject: *fldP = msgSelectSubjectLabel; break; + case msgFieldCC: *fldP = msgSelectCCLabel; break; + case msgFieldDate: *fldP = msgSelectDateLabel; break; + } + + resH = MsgGetHeaderLabel (msg->fieldType, + (MailAddressingType) msg->record.flags.addressing); + ptr = MemHandleLock (resH); + length = FntCharsWidth (ptr, StrLen (ptr)); + + x -= (msg->tabStop - length); + if (x < 0) x = 0; + } + + else + { + switch (msg->fieldType) + { + case msgFieldSentTo: *fldP = msgSelectSentTo; break; + case msgFieldTo: *fldP = msgSelectTo; break; + case msgFieldFrom: *fldP = msgSelectFrom; break; + case msgFieldSubject: *fldP = msgSelectSubject; break; + case msgFieldCC: *fldP = msgSelectCC; break; + case msgFieldDate: *fldP = msgSelectDate; break; + case msgFieldBlankLine: *fldP = msgSelectBlankLine; break; + case msgFieldBody: *fldP = msgSelectBody; break; + } + + ptr = msg->fieldText + msg->fieldTextPos; + length = MsgWordWrap (msg); + if (length && ptr[length-1] == linefeedChr) + length--; + + if (heading) + x -= msg->tabStop; + } + + + // Determine the character position of the point. +// if ((! ptr) || (! *ptr)) +// { +// *posP = 0; +// } + + if (! ptr) + *posP = 0; + + else if (! *ptr) + *posP = msg->fieldTextPos; + + else + { + xPos = 0; + width = 0; + lastWidth = 0; + while (xPos < length) + { + chSize = TxtGetNextChar (ptr, xPos, NULL); + width += (ptr[xPos] == tabChr + ? tabChrWidth - (width % tabChrWidth) + : FntCharsWidth (&ptr[xPos], chSize)); + + if (width >= x) + { + if ((x - lastWidth) >= ((width - lastWidth) >> 1)) + xPos += chSize; + break; + } + xPos += chSize; + lastWidth = width; + } +// if (! resH) +// xPos += msg->fieldTextPos; +// *posP = xPos; + *posP = xPos + msg->fieldTextPos; + } + + + // Determine the bounds of the character position. + r->topLeft.x = msg->bounds.topLeft.x; + r->extent.x = msg->bounds.extent.x; + r->topLeft.y = msg->bounds.topLeft.y + (yPos * FntLineHeight()); + r->extent.y = FntLineHeight(); + + if (length) + { + width = 0; + + // Calculate the size of half of the width of the character before + // the insertion point. + if (xPos > 0) + { + chSize = TxtGetPreviousChar (ptr, xPos, NULL); + width = (ptr[xPos - chSize] != tabChr ? (FntCharsWidth (&ptr[xPos - chSize], chSize) + 1) / 2 + : xPos > 1 ? (FntLineWidth (ptr, xPos) - FntLineWidth (ptr, xPos - chSize) + 1) / 2 + : (tabChrWidth + 1) / 2); + + r->topLeft.x += FntLineWidth (ptr, xPos) - width; + } + + // Add half of the width of the character following the insertion point. + chSize = TxtGetNextChar (ptr, xPos, NULL); + width += (ptr[xPos] != tabChr ? FntCharsWidth (&ptr[xPos], chSize) / 2 + : length > 1 ? (FntLineWidth (ptr, xPos + chSize) - FntLineWidth (ptr, xPos)) / 2 + : tabChrWidth / 2); + + r->extent.x = width; + } + + switch (*fldP) + { + case msgSelectSentToLabel: + case msgSelectToLabel: + case msgSelectFromLabel: + case msgSelectSubjectLabel: + case msgSelectCCLabel: + case msgSelectDateLabel: + r->topLeft.x += (msg->tabStop - length); + break; + + case msgSelectSentTo: + case msgSelectTo: + case msgSelectFrom: + case msgSelectSubject: + case msgSelectCC: + case msgSelectDate: + r->topLeft.x += msg->tabStop; + break; + } + + +// WinInvertRectangle (r, 0); + + if (resH) + MemHandleUnlock (resH); +} + + +/*********************************************************************** + * + * FUNCTION: MsgSelect + * + * DESCRIPTION: This is the massage selection routine. + * + * PARAMETERS: x, y - starting pen position + * + * RETURNED: nothing. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/28/96 Initial Revision + * + ***********************************************************************/ +void MsgSelect (Int16 x, Int16 y) +{ + FontID currFont; + UInt16 penPos; + UInt16 anchorPos; + Int16 value; + Int16 min; + Int16 max; + Int16 pageSize; + FormPtr frm; + Boolean penDown; + Boolean update; + ScrollBarPtr bar; + RectangleType r; + MessegeInfoType msg; + MsgSelectFieldType penFld; + MsgSelectFieldType anchorFld; + + currFont = FntSetFont (MessageFont); + + MsgInit (&msg, MessageTopField, MessageScrollPos); + + // Cancel the existing selection + MsgSetSelection (&msg, msgSelectNone, 0, msgSelectNone, 0); + + msg.fieldTextPos = MessageScrollPos; + msg.fieldType = MessageTopField; + msg.fieldText = MsgGetFieldPtr (&msg); + MsgGetPositionOfPoint (&msg, x, y, &anchorFld, &anchorPos, &r); + + msg.fieldTextPos = MessageScrollPos; + msg.fieldType = MessageTopField; + msg.fieldText = MsgGetFieldPtr (&msg); + MsgSetSelection (&msg, anchorFld, anchorPos, anchorFld, anchorPos); + + + frm = FrmGetActiveForm (); + bar = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, MessageScrollBar)); + + do + { + // Above the message bounds? + if (y < msg.bounds.topLeft.y) + { + SclGetScrollBar (bar, &value, &min, &max, &pageSize); + if (value) + { + MsgScroll (1, winUp); + SclSetScrollBar (bar, value-1, min, max, pageSize); + update = true; + } + else + update = false; + } + + + // Below the message bounds? + else if (y >= msg.bounds.topLeft.y + msg.bounds.extent.y) + { + SclGetScrollBar (bar, &value, &min, &max, &pageSize); + if (value < max) + { + MsgScroll (1, winDown); + SclSetScrollBar (bar, value+1, min, max, pageSize); + update = true; + } + else + update = false; + } + + + // Over a different character? + else if (! RctPtInRectangle (x, y, &r)) + update = true; + + else + update = false; + + if (update) + { + msg.fieldTextPos = MessageScrollPos; + msg.fieldType = MessageTopField; + msg.fieldText = MsgGetFieldPtr (&msg); + MsgGetPositionOfPoint (&msg, x, y, &penFld, &penPos, &r); + + msg.fieldTextPos = MessageScrollPos; + msg.fieldType = MessageTopField; + msg.fieldText = MsgGetFieldPtr (&msg); + MsgSetSelection (&msg, penFld, penPos, anchorFld, anchorPos); + } + + PenGetPoint (&x, &y, &penDown); + } while (penDown); + + MemHandleUnlock (msg.recordH); + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: MsgCopySelectedField + * + * DESCRIPTION: This routine a selected message field to the passed handle. + * + * PARAMETERS: msg - structure containing message info + * selectField - type of the field to copy + * destH - handle to copy to + * srcP - text of the message field to copy + * appendLinefeed - true + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/2/96 Initial Revision + * + ***********************************************************************/ +static Boolean MsgCopySelectedField (MessegeInfoPtr msg, MsgSelectFieldType selectField, + MemHandle destH, Char * srcP, Boolean appendLinefeed) +{ + Err err; + UInt16 size; + UInt16 newSize; + UInt16 length = 0; + UInt16 endPos; + UInt16 startPos; + Char * destP; + Boolean truncated = false; + + if (srcP) + { + if (selectField == msg->selectStartField) + startPos = msg->selectStartPos; + else + startPos = 0; + + if (selectField == msg->selectEndField) + endPos = msg->selectEndPos; + else + endPos = StrLen (srcP); + + length = endPos - startPos; + } + + + size = MemHandleSize (destH); + + if (size + length > maxCopyLength) + { + length = maxCopyLength - size; + truncated = true; + } + + newSize = size + length; + if (appendLinefeed) + newSize++; + + err = MemHandleResize (destH, newSize); + if (err) return (true); + + destP = MemHandleLock (destH); + destP += size-1; + if (srcP) + { + MemMove (destP, srcP+startPos, length); + destP += length; + } + + // Add a linefeed to the end of the string. + if (appendLinefeed) + { + *destP = linefeedChr; + destP++; + } + + // Null terminate the string. + *destP = 0; + MemHandleUnlock (destH); + + return (truncated); +} + + +/*********************************************************************** + * + * FUNCTION: MsgCopy + * + * DESCRIPTION: This routine copies the current selection to the clipboard. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/2/96 Initial Revision + * + ***********************************************************************/ +void MsgCopy (void) +{ + Char * ptr; + MemHandle resH = 0; + MemHandle destH; + Boolean appendLinefeed; + Boolean truncated = false; + MsgFieldType topField; + MessegeInfoType msg; + MsgSelectFieldType selectField; + + if (MessageSelectStartField == msgSelectNone) + return; + + // Allocate a handle just large enough to hold a null-terminator. + destH = MemHandleNew (1); + if (! destH) return; + + ptr = MemHandleLock (destH); + *ptr = 0; + MemPtrUnlock (ptr); + + + if (ShowFullHeader) + topField = msgFieldTo; + else + topField = msgFieldSentTo; + + MsgInit (&msg, topField, 0); + + while (true) + { + if (msg.fieldText && *msg.fieldText) + { + for (selectField = msg.selectStartField; + selectField <= msg.selectEndField; selectField++) + { + if (MsgSelectFieldVisible (&msg, selectField)) + { + if (MsgIsLableField (selectField)) + { + resH = MsgGetHeaderLabel (msg.fieldType, + (MailAddressingType) msg.record.flags.addressing); + ptr = MemHandleLock (resH); + appendLinefeed = false; + } + else + { + ptr = msg.fieldText + msg.fieldTextPos; + switch (selectField) + { + case msgSelectSentTo: + case msgSelectTo: + case msgSelectFrom: + case msgSelectSubject: + case msgSelectCC: + case msgSelectDate: + appendLinefeed = (msg.selectEndField > selectField || + (msg.selectEndField == selectField && + msg.selectEndPos == StrLen (ptr))); + break; + default: + appendLinefeed = false; + } + } + + if (MsgCopySelectedField (&msg, selectField, destH, ptr, appendLinefeed)) + truncated = true; + + if (resH) + { + MemHandleUnlock (resH); + DmReleaseResource (resH); + resH = 0; + } + } + } + } + + else if (msg.fieldType == msgFieldBlankLine && + msg.selectStartField <= msgSelectBlankLine && + msg.selectEndField >= msgSelectBlankLine) + { + if (MsgCopySelectedField (&msg, msgSelectBlankLine, destH, NULL, true)) + truncated = true; + } + + if (! MsgNextField (&msg)) + break; + } + + MemHandleUnlock (msg.recordH); + + + ptr = MemHandleLock (destH); + + if (! truncated) + ClipboardAddItem (clipboardText, ptr, StrLen (ptr)); + else + FrmAlert (ClipboardLimitAlert); + + + MemPtrFree (ptr); +} + + +/*********************************************************************** + * + * FUNCTION: MsgSelectAll + * + * DESCRIPTION: This routine selects an entire message. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 10/3/96 Initial Revision + * + ***********************************************************************/ +void MsgSelectAll (void) +{ + FontID currFont; + UInt16 endPos; + MessegeInfoType msg; + + currFont = FntSetFont (MessageFont); + + MsgInit (&msg, MessageTopField, MessageScrollPos); + + // Cancel the existing selection + MsgSetSelection (&msg, msgSelectNone, 0, msgSelectNone, 0); + + msg.fieldTextPos = MessageScrollPos; + msg.fieldType = MessageTopField; + msg.fieldText = MsgGetFieldPtr (&msg); + + endPos = StrLen (msg.record.body); + MsgSetSelection (&msg, msgSelectSentToLabel, 0, msgSelectBody, endPos); + + MemHandleUnlock (msg.recordH); + FntSetFont (currFont); +} + + +/*********************************************************************** + * + * FUNCTION: MsgChangeFont + * + * DESCRIPTION: This routine change the font used to display a mail message. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 12/15/96 Initial Revision + * + ***********************************************************************/ +void MsgChangeFont (void) +{ + UInt16 pos; + UInt16 length; + UInt16 lineNumber; + UInt16 linesToDraw; + FontID currFont; + MessegeInfoType msg; + + currFont = FntSetFont (MessageFont); + + MsgInit (&msg, MessageTopField, 0); + +//set the view to the top of the current field +MsgPreviousField (&msg); +MsgNextField (&msg); +MessageScrollPos = 0; + + pos = 0; + lineNumber = 0; + linesToDraw = msg.bounds.extent.y / FntLineHeight (); + + while (lineNumber < linesToDraw) + { + length = MsgWordWrap (&msg); + if (length) + { + msg.fieldTextPos += length; + if (MessageTopField == msg.fieldType) + { + if (msg.fieldTextPos < MessageScrollPos) + pos = msg.fieldTextPos; + else if (msg.fieldTextPos == MessageScrollPos) + { + pos = msg.fieldTextPos; + lineNumber++; + } + else + lineNumber++; + } + else + lineNumber++; + } + else if (msg.fieldType == msgFieldBlankLine) + { + lineNumber++; + if (! MsgNextField (&msg)) + break; + } + else if (!MsgNextField (&msg)) + break; + } + + MessageScrollPos = pos; + + MemHandleUnlock (msg.recordH); + + if (lineNumber < linesToDraw && pos != 0 && + (MessageTopField != msgFieldTo || MessageTopField == msgFieldSentTo)) + { + MsgScroll (linesToDraw - lineNumber, winUp); + } + else + { + MsgErase (); + MsgDraw (); + } + + FntSetFont (currFont); +} diff --git a/handera-sdk-105/examples/Mail/Src/MailMessage.h b/handera-sdk-105/examples/Mail/Src/MailMessage.h new file mode 100644 index 0000000..e49bac8 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailMessage.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailMessage.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file defines the massage viewing structures and functions of + * the msg application. + * + * History: + * June 20, 1996 Created by Art Lamb + * + *****************************************************************************/ + +// Used by message selection routions. +typedef enum { + msgSelectSentToLabel, + msgSelectSentTo, + msgSelectToLabel, + msgSelectTo, + msgSelectFromLabel, + msgSelectFrom, + msgSelectCCLabel, + msgSelectCC, + msgSelectSubjectLabel, + msgSelectSubject, + msgSelectDateLabel, + msgSelectDate, + msgSelectBlankLine, + msgSelectBody, + msgSelectNone } MsgSelectFieldType; + + +typedef enum { + msgFieldSentTo, + msgFieldTo, + msgFieldFrom, + msgFieldSubject, + msgFieldCC, + msgFieldDate, + msgFieldBlankLine, + msgFieldBody } MsgFieldType; + + +extern void MsgDraw (void); + +extern void MsgErase (void); + +extern void MsgGetScrollValues (UInt16 * textHeightP, UInt16 * pageHeightP, UInt16 * topLineP); + +extern void MsgScroll (Int16 linesToScroll, WinDirectionType direction); + +extern Boolean MsgSearch (MailDBRecordPtr recordP, Char * strToFind, UInt16 * fieldNumP, UInt16 * posP, UInt16 *matchLenP); + +extern void MsgSelect (Int16 x, Int16 y); + +extern void MsgCopy (void); + +extern void MsgSelectAll (void); + +extern void MsgChangeFont (void); diff --git a/handera-sdk-105/examples/Mail/Src/MailRsc.h b/handera-sdk-105/examples/Mail/Src/MailRsc.h new file mode 100644 index 0000000..382cb84 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailRsc.h @@ -0,0 +1,256 @@ +/****************************************************************************** + * + * Copyright (c) 1996-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailRsc.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file defines the ID of the resources used by the Mail + * application. + * + * History: + * May 31, 1996 Created by Art Lamb + * + *****************************************************************************/ + +// List View +#define ListView 1000 +#define ListCategoryTrigger 1003 +#define ListCategoryList 1004 +#define ListNewButton 1005 +#define ListShowButton 1006 +#define ListTable 1007 +#define ListScrollBar 1008 +//mgmg newTitle +#define ListTitleLabel 1001 + + +// Message View +#define MessageView 1100 +//mgmg new +#define MessageTitleLabel 1102 + +#define MessageAbbrHeaderButton 1103 +#define MessageFullHeaderButton 1104 +#define MessageField 1105 // DOLATER ??? - remove +#define MessageGadget 1105 +#define MessageScrollBar 1106 +#define MessageDoneButton 1107 +#define MessageReplyButton 1108 +#define MessageUnsendButton 1109 +#define MessageEditButton 1110 +#define MessageDeleteButton 1112 +#define MessageUndeleteButton 1113 +//#define MessageSmallFontButton 1113 +//#define MessageLargeFontButton 1114 +#define MessageHeaderGroup 1 +//#define MessageFontGroup 2 + +#define MessagePrevMessageButton 1111 +#define MessageNextMessageButton 1114 + + +// Message Creation View +#define NewView 1200 +#define NewSendButton 1202 +#define NewCancelButton 1203 +#define NewDetailsButton 1204 +#define NewTable 1205 +#define NewScrollBar 1206 + + +// Message Edit View (full screen) +#define EditView 1300 +#define EditField 1302 +#define EditScrollBar 1303 +#define EditDoneButton 1304 +#define EditLookupButton 1305 +#define EditSendButton 1306 +//#define EditSmallFontButton 1307 +//#define EditLargeFontButton 1308 +//#define EditFontGroup 2 + + +// Options Dialog +#define OptionsDialog 1400 +#define OptionsSortByTrigger 1404 +#define OptionsSortByList 1405 +#define OptionsShowDates 1406 +#define OptionsOkButton 1407 +#define OptionsCancelButton 1408 + + +// Details Dialog Box +#define DetailsDialog 1500 +#define DetailsPriorityTrigger 1504 +#define DetailsPriorityList 1505 +#define DetailsBCCCheckbox 1507 +#define DetailsSignatureCheckbox 1509 +#define DetailsReadCheckbox 1511 +#define DetailsDeliveryCheckbox 1513 +#define DetailsOkButton 1514 +#define DetailsCancelButton 1515 + +// Preferences Dialog Box +#define PrefDialog 1600 +#define PrefConfirmDeleteCheckbox 1602 +#define PrefSignatureField 1604 +#define PrefOkButton 1605 +#define PrefCancelButton 1606 +#define PrefDefaultMailTrigger 1608 +#define PrefDefaultMailList 1609 + +// Reply Options Dialog Box +#define ReplyDialog 1700 +#define ReplyToSenderPushButton 1703 +#define ReplyToAllPushButton 1704 +#define ReplyForwardPushButton 1705 +#define ReplayIncludeTextCheckbox 1706 +#define ReplyCommentTextCheckbox 1707 +#define ReplyOkButton 1708 +#define ReplyCancelButton 1709 +#define ReplyToGroup 1 + +// Sync Options Dialog Box +#define SyncDialog 1800 + +//mgmg syncUnread +#define SyncUnreadPushButton 1801 +#define SyncUnreadLabel 1803 + +#define SyncSettingsTrigger 1804 +#define SyncSettingsList 1805 +#define SyncAllPushButton 1806 +#define SyncSendOnlyPushButton 1807 +#define SyncFilterPushButton 1808 +#define SyncAllLabel 1809 +#define SyncSendOnlyLabel 1810 +#define SyncRetrieveAllCheckbox 1811 +#define SyncMessageContaingTrigger 1813 +#define SyncMessageContaingList 1814 +#define SyncToButton 1815 +#define SyncToField 1816 +#define SyncFromButton 1817 +#define SyncFromField 1818 +#define SyncSubjectButton 1819 +#define SyncSubjectField 1820 +#define SyncOkButton 1821 +#define SyncCancelButton 1822 +#define SyncTruncateButton 1823 +#define SyncTypeGroup 1 + +// Truncate Options Dialog Box +#define TruncateDialog 1900 +#define TruncateList 1903 +#define TruncateOkButton 1904 +#define TruncateCancelButton 1905 + +// Delete Message Alert +#define DeleteMessageAlert 2001 +#define DeleteMessageYes 0 +#define DeleteMessageNo 1 + +// File Message Alert +#define FileMessageAlert 2002 +#define FileMessageYes 0 +#define FileMessageNo 1 +#define FileMessageCancel 2 + +// No To Address Alert +#define NoAddressAlert 2003 + +// No To Address Alert +#define PurgeAlert 2004 +#define PurgeYes 0 +#define PurgeNo 1 + +// Save Draft Alert +#define SaveDraftAlert 2005 +#define SaveDraftYes 0 +#define SaveDraftNo 1 +#define SaveDraftCancel 2 + +// Nothing To Purge Alert +#define NothingToPurgeAlert 2006 + +//mgmg new +#define RomIncompatibleAlert 2007 +#define SaveEmptyAlert 2008 + +// Menus +#define ListViewMenu 1000 +#define NoteViewMenu 1001 + +#define newMenuCmd 100 +#define purgeMenuCmd 101 + +#define ListChangeFontMenuCmd 200 +#define preferencesMenuCmd 201 +#define hotSyncMenuCmd 202 +#define aboutMenuCmd 203 + +#define messageNewMenuCmd 300 +#define messageFileMenuCmd 301 +#define messagePurgeMenuCmd 302 + +#define messageCopyCmd 400 +#define messageSelectAllCmd 401 + + +#define messageChangeFontCmd 500 +#define messagePreferencesMenuCmd 501 +#define messageHotSyncMenuCmd 502 +#define messageAboutMenuCmd 503 + +#define newSaveDraftMenuCmd 600 +#define newPurgeMenuCmd 601 + +#define newChangeFontMenuCmd 700 +#define newPreferencesMenuCmd 701 +#define newHotSyncMenuCmd 702 +#define newLookupMenuCmd 703 +#define newAboutMenuCmd 704 + +#define editChangeFontCmd 900 +#define editLookupMenuCmd 901 + +// Strings +#define findHeaderStrId 100 +#define toStrId 101 +#define fromStrId 102 +#define subjectStrId 103 +#define ccStrId 104 +#define dateStrId 105 +#define bccStrId 106 +#define newViewLabelsStrId 107 +#define editViewTitlesStrId 108 +#define listTitleStringId 109 +#define replyPrefixStrId 110 +#define forwardPrefixStrId 111 +#define forwardMessageStrId 112 +#define wroteOnStrId 113 +#define mailToLookupTitleStrID 114 +#define mailFromLookupTitleStrID 115 +#define mailCCLookupTitleStrID 116 +#define mailBCCLookupTitleStrID 117 +#define mailLookupAddStrID 118 +#define mailLookupFormatStrID 119 +#define noSubjectStrID 120 +#define filterIgnoreStrID 121 +#define purgeTipText 122 +#define noSubjectListViewStrID 123 +#define noToListViewStrID 124 +#define listTitleNotInboxStringId 125 +#define MessageTitleStrID 126 +#define listTitleSingularStringId 127 +#define listTitleNotInboxSingularStrId 128 +#define listTitleShortStrID 129 +#define mailAddlLookupFormatStrID 130 + +//BITMAPS +#define readUrgentIconID 1000 +#define readIconID 1001 +#define urgentIconID 1002 diff --git a/handera-sdk-105/examples/Mail/Src/MailSync.c b/handera-sdk-105/examples/Mail/Src/MailSync.c new file mode 100644 index 0000000..ee995cd --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailSync.c @@ -0,0 +1,928 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailSync.c + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * The file contains routines the manage the Mail application's + * HotSync options. + * + * History: + * July 29, 1996 Created by Art Lamb + * + *****************************************************************************/ + +#include + +#include "Mail.h" +/* HandEra */ +#include "vga.h" +/* end HandEra */ + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ + +#define localHotSyncItem 0 +#define remoteHotSyncItem 1 + +static void SyncApply (void); +static void SyncChangeSyncType (UInt16 controlID); +static MemHandle SyncSaveUIState (Boolean local); +static void SyncSavePreferences (Boolean local); +static void SyncLoadPreferences (Boolean local); +static void SyncInitFilter (UInt16 fieldID, Char * filter, UInt16 len); +static void SyncInit (void); +static void SyncRestoreUIState (MemHandle stateH); + + +/* HandEra */ +static VgaScreenStateType gScreenState; +/* end HandEra */ + +/*********************************************************************** + * + * FUNCTION: ShowObject + * + * DESCRIPTION: This routine set an object usable and draws the object if + * the form it is in is visible. + * + * PARAMETERS: frm - pointer to a form + * objectID - id of the object to set usable + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static void ShowObject (FormPtr frm, UInt16 objectID) +{ + FrmShowObject (frm, FrmGetObjectIndex (frm, objectID)); +} + + +/*********************************************************************** + * + * FUNCTION: HideObject + * + * DESCRIPTION: This routine set an object not-usable and erases it + * if the form it is in is visible. + * + * PARAMETERS: frm - pointer to a form + * objectID - id of the object to set not usable + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 2/21/95 Initial Revision + * + ***********************************************************************/ +static void HideObject (FormPtr frm, UInt16 objectID) +{ + FrmHideObject (frm, FrmGetObjectIndex (frm, objectID)); +} + + +/*********************************************************************** + * + * FUNCTION: SyncInitFilter + * + * DESCRIPTION: This routine initialize the text value of the specified + * filter field with the string passed. + * + * PARAMETERS: fieldID id of field to initialize + * filter filter string + * len length of the filter string + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/1/96 Initial Revision + * + ***********************************************************************/ +static void SyncInitFilter (UInt16 fieldID, Char * filter, UInt16 len) +{ + MemHandle h; + Char * p; + FieldPtr fld; + + fld = GetObjectPtr (fieldID); + FldFreeMemory (fld); + + if (len) + { + // Copy the filter string into a new handle. + h = MemHandleNew (len+1); + p = MemHandleLock (h); + StrCopy (p, filter); + MemPtrUnlock (p); + + FldSetTextHandle (fld, h); + } + + if (FrmVisible(FrmGetActiveForm ())) + FldDrawField (fld); +} + + +/*********************************************************************** + * + * FUNCTION: SyncChangeSyncType + * + * DESCRIPTION: This routine changes the ui gadgets in the Sync Options + * Dialog Box such that they match the newly selected sync + * type. The routine is called when one of the sync type + * push buttons are pushed. + * + * PARAMETERS: controlID - id of the newly selected sync type push button + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/30/96 Initial Revision + * MGolden 7/7/97 added syncUnread option + * + ***********************************************************************/ +static void SyncChangeSyncType (UInt16 controlID) +{ + FormPtr frm; + + frm = FrmGetActiveForm (); + + switch (controlID) + { + case SyncAllPushButton: + HideObject (frm, SyncSendOnlyLabel); + HideObject (frm, SyncRetrieveAllCheckbox); + HideObject (frm, SyncMessageContaingTrigger); + HideObject (frm, SyncToButton); + HideObject (frm, SyncToField); + HideObject (frm, SyncFromButton); + HideObject (frm, SyncFromField); + HideObject (frm, SyncSubjectButton); + HideObject (frm, SyncSubjectField); +//mgmg added for syncUnread + HideObject(frm, SyncUnreadLabel); + + ShowObject (frm, SyncAllLabel); + break; + + + case SyncSendOnlyPushButton: + HideObject (frm, SyncAllLabel); + HideObject (frm, SyncRetrieveAllCheckbox); + HideObject (frm, SyncMessageContaingTrigger); + HideObject (frm, SyncToButton); + HideObject (frm, SyncToField); + HideObject (frm, SyncFromButton); + HideObject (frm, SyncFromField); + HideObject (frm, SyncSubjectButton); + HideObject (frm, SyncSubjectField); +//mgmg added for syncUnread + HideObject(frm, SyncUnreadLabel); + + ShowObject (frm, SyncSendOnlyLabel); + break; + + + case SyncFilterPushButton: + HideObject (frm, SyncAllLabel); + HideObject (frm, SyncSendOnlyLabel); +//mgmg added for syncUnread + HideObject(frm, SyncUnreadLabel); + + ShowObject (frm, SyncRetrieveAllCheckbox); + ShowObject (frm, SyncMessageContaingTrigger); + ShowObject (frm, SyncToButton); + ShowObject (frm, SyncToField); + ShowObject (frm, SyncFromButton); + ShowObject (frm, SyncFromField); + ShowObject (frm, SyncSubjectButton); + ShowObject (frm, SyncSubjectField); + break; + +//mgmg added for syncUnread + case SyncUnreadPushButton: + HideObject (frm, SyncAllLabel); + HideObject (frm, SyncSendOnlyLabel); + HideObject (frm, SyncRetrieveAllCheckbox); + HideObject (frm, SyncMessageContaingTrigger); + HideObject (frm, SyncToButton); + HideObject (frm, SyncToField); + HideObject (frm, SyncFromButton); + HideObject (frm, SyncFromField); + HideObject (frm, SyncSubjectButton); + HideObject (frm, SyncSubjectField); +//mgmg added for syncUnread + ShowObject(frm, SyncUnreadLabel); + break; + } +} + + +/*********************************************************************** + * + * FUNCTION: SyncSaveUIState + * + * DESCRIPTION: This routine save the current ui settings. It is call + * before go the the Edit View to edit the to, from or + * subject filters. We will dismiss the HotSync Options + * dialog so we need to save the UI state. + * + * PARAMETERS: local - true for local sync preferences, false for + * remote sync preferences. + * + * RETURNED: handle of SyncUIStateType structure + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/20/96 Initial Revision + * + ***********************************************************************/ +static MemHandle SyncSaveUIState (Boolean local) +{ + FormPtr frm; + ListPtr lst; + FieldPtr fld; + ControlPtr ctl; + MemHandle stateH; + SyncUIStatePtr stateP; + + + frm = FrmGetActiveForm (); + + // Allocate a handle to hold the UI state. + stateH = MemHandleNew (sizeof (SyncUIStateType)); + if (! stateH) return (NULL); + stateP = MemHandleLock (stateH); + + // Local or remote HotSync options? + stateP->local = local; + + // Get the sync type (all, send only, or filter or Unread). + stateP->syncType = FrmGetControlGroupSelection (frm, SyncTypeGroup); + + // Get the "Retrieve All High Priority" checkbox setting. + ctl = GetObjectPtr (SyncRetrieveAllCheckbox); + stateP->retrieveHighPriority = (CtlGetValue (ctl) == true); + + // Get the "Ignore / Retrive Messages Containing" setting. + lst = GetObjectPtr (SyncMessageContaingList); + stateP->messageContaing = (MailFilterType) LstGetSelection (lst); + + // Get length that retrieved message should be truncated to. + stateP->maxLength = TruncateLen; + + // Get the to, from and subject filters. + fld = GetObjectPtr (SyncToField); + stateP->to = FldGetTextHandle (fld); + FldSetTextHandle (fld, 0); + + fld = GetObjectPtr (SyncFromField); + stateP->from = FldGetTextHandle (fld); + FldSetTextHandle (fld, 0); + + fld = GetObjectPtr (SyncSubjectField); + stateP->subject = FldGetTextHandle (fld); + FldSetTextHandle (fld, 0); + + MemHandleUnlock (stateH); + + return (stateH); +} + + +/*********************************************************************** + * + * FUNCTION: SyncRestoreUIState + * + * DESCRIPTION: This routine restores the ui settings of the HotSync + * options dialog. It is call after we return from + * editing the to, from or subject filters, in the Edit + * View. We dismissed the HotSync Options before going + * to the Edit View so we need to restore the UI state. + * + * PARAMETERS: handle of SyncUIStateType structure + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 9/20/96 Initial Revision + * + ***********************************************************************/ + +static void SyncRestoreUIState (MemHandle stateH) +{ + UInt16 item; + UInt16 controlID; + Char * label; + ListPtr lst; + FormPtr frm; + ControlPtr ctl; + SyncUIStatePtr stateP; + + + frm = FrmGetActiveForm (); + + stateP = MemHandleLock (stateH); + + // Set the local / remote settings trigger. + ctl = GetObjectPtr (SyncSettingsTrigger); + lst = GetObjectPtr (SyncSettingsList); + if (stateP->local) + item = localHotSyncItem; + else + item = remoteHotSyncItem; + label = LstGetSelectionText (lst, item); + CtlSetLabel (ctl, label); + LstSetSelection (lst, item); + + + // Set the Sync tye (All, Send Only, or Filter) push button. + controlID = FrmGetObjectId (frm, stateP->syncType); + FrmSetControlGroupSelection (frm, SyncTypeGroup, controlID); + + // Enable / Disable the proper ui gadgets. + SyncChangeSyncType (controlID); + + // Set the "Retrieve All High Priority" checkbox. + ctl = GetObjectPtr (SyncRetrieveAllCheckbox); + CtlSetValue (ctl, (stateP->retrieveHighPriority == true)); + + + // Set the "Ignore / Retrive Messages Containing" trigger and poup + // list. + ctl = GetObjectPtr (SyncMessageContaingTrigger); + lst = GetObjectPtr (SyncMessageContaingList); + label = LstGetSelectionText (lst, stateP->messageContaing); + CtlSetLabel (ctl, label); + LstSetSelection (lst, stateP->messageContaing); + + // Set length that retrieved message should be truncated to. + TruncateLen = stateP->maxLength; + + // Set the to, from and subject filters. + FldSetTextHandle (GetObjectPtr (SyncToField), stateP->to); + FldSetTextHandle (GetObjectPtr (SyncFromField), stateP->from); + FldSetTextHandle (GetObjectPtr (SyncSubjectField), stateP->subject); + + MemPtrFree (stateP); +} + + +/*********************************************************************** + * + * FUNCTION: SyncLoadPreferences + * + * DESCRIPTION: This routine load the specified HotSync preferences + * (local or remote) and initial the dialog's ui. + * + * PARAMETERS: local - true for local sync preferences, false for + * remote sync preferences. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/30/96 Initial Revision + * MGolden 7/7/97 added syncUnread option + * + ***********************************************************************/ +static void SyncLoadPreferences (Boolean local) +{ + UInt16 len; + UInt16 rscID; + UInt16 prefsSize; + UInt16 controlID; + Int16 version; + Char * label; + Char * filter; + ListPtr lst; + FormPtr frm; + ControlPtr ctl; + SyncPreferencesType prefs; + SyncPreferencesPtr prefsP; + + frm = FrmGetActiveForm (); + + if (local) + rscID = mailLocalSyncPrefID; + else + rscID = mailRemoteSyncPrefID; + + + // Get the HotSync preferences. + prefsSize = sizeof (SyncPreferencesType); + version = PrefGetAppPreferences (sysFileCMail, rscID, &prefs, &prefsSize, true); + if (version == noPreferenceFound) + { + controlID = SyncAllPushButton; + prefs.retrieveHighPriority = true; + prefs.messageContaing = ingoreContaining; + + TruncateLen = syncDefaultMaxMsgLen; + } + + else + { +//mgmg syncUnread + switch (prefs.syncType) + { + case syncAll: + controlID = SyncAllPushButton; + break; + + case syncSendOnly: + controlID = SyncSendOnlyPushButton; + break; + + case syncFilter: + controlID = SyncFilterPushButton; + break; + + case syncUnread: + controlID = SyncUnreadPushButton; + break; + + default: + //just in case...set it to all + controlID = SyncAllPushButton; + break; + }//switch +/* old + if (prefs.syncType == syncAll) + { + controlID = SyncAllPushButton; + } + + else if (prefs.syncType == syncSendOnly) + { + controlID = SyncSendOnlyPushButton; + } + + else + { + controlID = SyncFilterPushButton; + } +*/ + + TruncateLen = prefs.maxLength; + } + + + // Set the Sync tye (All, Send Only, or Filter) push button. + FrmSetControlGroupSelection (frm, SyncTypeGroup, controlID); + + + // Enable / Disable the proper ui gadgets. + SyncChangeSyncType (controlID); + + // Set the "Retrieve All High Priority" checkbox. + ctl = GetObjectPtr (SyncRetrieveAllCheckbox); + CtlSetValue (ctl, (prefs.retrieveHighPriority == true)); + + + // Set the "Ignore / Retrive Messages Containing" trigger and poup + // list. + ctl = GetObjectPtr (SyncMessageContaingTrigger); + lst = GetObjectPtr (SyncMessageContaingList); + label = LstGetSelectionText (lst, prefs.messageContaing); + CtlSetLabel (ctl, label); + LstSetSelection (lst, prefs.messageContaing); + + + // Get the rest of the preferences, the filter strings are at the + // of the preferences. + if (version != noPreferenceFound) + { + prefsP = MemPtrNew (prefsSize); + if (! prefsP) return; + + PrefGetAppPreferences (sysFileCMail, rscID, prefsP, &prefsSize, true); + + filter = ((Char *)prefsP) + sizeof (SyncPreferencesType); + len = StrLen (filter); + SyncInitFilter (SyncToField, filter, len); + + filter += len + 1; + len = StrLen (filter); + SyncInitFilter (SyncFromField, filter, len); + + filter += len + 1; + len = StrLen (filter); + SyncInitFilter (SyncSubjectField, filter, len); + + MemPtrFree (prefsP); + } + + else + { + SyncInitFilter (SyncToField, NULL, 0); + SyncInitFilter (SyncFromField, NULL, 0); + SyncInitFilter (SyncSubjectField, NULL, 0); + } +} + + +/*********************************************************************** + * + * FUNCTION: SyncSavePreferences + * + * DESCRIPTION: This routine save the specified HotSync preferences + * (local or remote) based on the dialog's ui settings + * + * PARAMETERS: local - true for local sync preferences, false for + * remote sync preferences. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/1/96 Initial Revision + * MGolden 7/7/97 added syncUnread option + * + ***********************************************************************/ +static void SyncSavePreferences (Boolean local) +{ + UInt16 prefID; + UInt16 prefsSize; + UInt16 controlID; + Char * ptr; + Char * filter; + FormPtr frm; + ListPtr lst; + FieldPtr toFld; + FieldPtr fromFld; + FieldPtr subjectFld; + ControlPtr ctl; + SyncPreferencesPtr prefsP; + + + // Local or remote HotSync options? + if (local) + prefID = mailLocalSyncPrefID; + else + prefID = mailRemoteSyncPrefID; + + + // Allocate a handle to hold the preferences. + toFld = GetObjectPtr (SyncToField); + fromFld = GetObjectPtr (SyncFromField); + subjectFld = GetObjectPtr (SyncSubjectField); + + prefsSize = sizeof (SyncPreferencesType) + + FldGetTextLength (toFld) + + FldGetTextLength (fromFld) + + FldGetTextLength (subjectFld) + 3; + + prefsP = MemPtrNew (prefsSize); + if (! prefsP) return; + + + // Get the sync type (all, send only, or filter). + frm = FrmGetActiveForm (); + controlID = FrmGetObjectId (frm, + FrmGetControlGroupSelection (frm, SyncTypeGroup)); +//new syncUnread + switch( controlID ) + { + case SyncAllPushButton: + prefsP->syncType = syncAll; + break; + + case SyncSendOnlyPushButton: + prefsP->syncType = syncSendOnly; + break; + + case SyncFilterPushButton: + prefsP->syncType = syncFilter; + break; + + case SyncUnreadPushButton: + prefsP->syncType = syncUnread; + break; + + default: + //just in case...set it to all... + prefsP->syncType = syncAll; + break; + + }//switch +/* old + if (controlID == SyncAllPushButton) + prefsP->syncType = syncAll; + else if (controlID == SyncSendOnlyPushButton) + prefsP->syncType = syncSendOnly; + else + prefsP->syncType = syncFilter; +*/ + + // Get the "Retrieve All High Priority" checkbox setting. + ctl = GetObjectPtr (SyncRetrieveAllCheckbox); + prefsP->retrieveHighPriority = (CtlGetValue (ctl) == true); + + + // Get the "Ignore / Retrive Messages Containing" setting. + lst = GetObjectPtr (SyncMessageContaingList); + prefsP->messageContaing = (MailFilterType) LstGetSelection (lst); + + + prefsP->maxLength = TruncateLen; + + + // Copy the filter strings to the end of the preferences. + filter = ((Char *)prefsP) + sizeof (SyncPreferencesType); + ptr = FldGetTextPtr (toFld); + if (ptr) + { + StrCopy (filter, ptr); + filter += StrLen(ptr) + 1; + } + else + { + *filter = 0; + filter++; + } + + ptr = FldGetTextPtr (fromFld); + if (ptr) + { + StrCopy (filter, ptr); + filter += StrLen(ptr) + 1; + } + else + { + *filter = 0; + filter++; + } + + + ptr = FldGetTextPtr (subjectFld); + if (ptr) + { + StrCopy (filter, ptr); + } + else + { + *filter = 0; + } + + + // Save the preferences. + PrefSetAppPreferences (sysFileCMail, prefID, mailVersionNum, prefsP, prefsSize, true); + + MemPtrFree (prefsP); +} + + +/*********************************************************************** + * + * FUNCTION: SyncApply + * + * DESCRIPTION: This routine applies the changes made in the Sync + * Option Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/30/96 Initial Revision + * + ***********************************************************************/ +static void SyncApply (void) +{ + ListPtr lst; + + // Local or remote HotSync options? + lst = GetObjectPtr (SyncSettingsList); + SyncSavePreferences (LstGetSelection (lst) == localHotSyncItem); +} + + +/*********************************************************************** + * + * FUNCTION: SyncInit + * + * DESCRIPTION: This routine initializes the Sync Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/29/96 Initial Revision + * + ***********************************************************************/ +static void SyncInit (void) +{ + Char * label; + ListPtr lst; + FormPtr frm; + ControlPtr ctl; + + frm = FrmGetActiveForm (); + + // Set the local / remote settings trigger. + ctl = GetObjectPtr (SyncSettingsTrigger); + lst = GetObjectPtr (SyncSettingsList); + label = LstGetSelectionText (lst, localHotSyncItem); + CtlSetLabel (ctl, label); + LstSetSelection (lst, localHotSyncItem); + + + // Get the local HotSync preferences and initial the dialog's ui. + SyncLoadPreferences (true); +} + + + +/*********************************************************************** + * + * FUNCTION: SyncHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Sync + * Options Dialog Box". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 7/29/96 Initial Revision + * MGolden 7/7/97 added syncUnread option + * + ***********************************************************************/ +Boolean SyncHandleEvent (EventPtr event) +{ + UInt16 controlID; + FormPtr frm; + Boolean local; + Boolean handled = false; + + if (event->eType == ctlSelectEvent) + { + controlID = event->data.ctlSelect.controlID; + if (controlID == SyncOkButton) + { + SyncApply (); + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + } + else if (controlID == SyncCancelButton) + { + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + } + else if (controlID == SyncTruncateButton) + { + FrmPopupForm (TruncateDialog); + } + else if ( (controlID == SyncAllPushButton) || + (controlID == SyncSendOnlyPushButton) || + (controlID == SyncFilterPushButton) || + (controlID == SyncUnreadPushButton)) + { + SyncChangeSyncType (event->data.ctlSelect.controlID); + } + + else if ( (controlID == SyncToButton) || + (controlID == SyncFromButton) || + (controlID == SyncSubjectButton)) + { + if (controlID == SyncToButton) + EditViewField = editToField; + else if (controlID == SyncFromButton) + EditViewField = editFromField; + else + EditViewField = editSubjectField; + + EditViewEditRecord = false; + local = (LstGetSelection (GetObjectPtr (SyncSettingsList)) == localHotSyncItem); + SyncUIStateH = SyncSaveUIState (local); + FrmGotoForm (EditView); + } + +#ifdef USE_SWITCH_STATEMENT + switch (controlID) + { + case SyncOkButton: + SyncApply (); + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + break; + + case SyncCancelButton: + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + break; + + case SyncTruncateButton: + FrmPopupForm (TruncateDialog); + break; + + case SyncAllPushButton: + case SyncSendOnlyPushButton: + case SyncFilterPushButton: + +//mgmg syncUnread + case SyncUnreadPushButton: + SyncChangeSyncType (event->data.ctlSelect.controlID); + break; + + case SyncToButton: + case SyncFromButton: + case SyncSubjectButton: + if (controlID == SyncToButton) + EditViewField = editToField; + else if (controlID == SyncFromButton) + EditViewField = editFromField; + else + EditViewField = editSubjectField; + + EditViewEditRecord = false; + local = (LstGetSelection (GetObjectPtr (SyncSettingsList)) == localHotSyncItem); + SyncUIStateH = SyncSaveUIState (local); + FrmGotoForm (EditView); + break; + } +#endif + } + + + else if (event->eType == popSelectEvent) + { + if (event->data.popSelect.controlID == SyncSettingsTrigger && + event->data.popSelect.selection != event->data.popSelect.priorSelection) + { + local = event->data.popSelect.selection == localHotSyncItem; + SyncSavePreferences (! local); + SyncLoadPreferences (local); + } + } + + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + if(vgaExists) + VgaSaveScreenState(&gScreenState); + ToolsVgaAdjustModalForm(frm, true); +/* end HandEra */ + if ( ! SyncUIStateH) + SyncInit (); + else + { + SyncRestoreUIState (SyncUIStateH); + SyncUIStateH = 0; + } + FrmDrawForm (frm); + handled = true; + } + + return (handled); +} diff --git a/handera-sdk-105/examples/Mail/Src/MailSync.h b/handera-sdk-105/examples/Mail/Src/MailSync.h new file mode 100644 index 0000000..4226a6d --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailSync.h @@ -0,0 +1,88 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailSync.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file defines the structures and functions of the Mail Sync + * options. + * + * History: + * July 26, 1996 Created by Art Lamb + * + *****************************************************************************/ + +// The mail sync options are stored in the following format. +// SyncFilterType +// To filter - null terminated string +// From filter - null terminated string +// Subject filter - null terminated string + +//mgmg added syncUnread for unreadOnly Sync feature +typedef enum { syncAll, syncSendOnly, syncFilter, syncUnread } MailSyncType; +//typedef enum { syncAll, syncSendOnly, syncFilter } MailSyncType; + +typedef enum { ingoreContaining, retrieveContaining } MailFilterType; + + +typedef struct { + + MailSyncType syncType; // all, send only, filter + + Boolean retrieveHighPriority;// If true then high priority messages are + // always retrieved. + + MailFilterType messageContaing; // If true then messages containing the "to", + // "from" and "subject" are retrived. If false + // then messages containing the "to", "from" and + // "subject" are ignored. + + UInt8 reserved; + + UInt16 maxLength; // The length that retrieved message should be + // truncated to. +} SyncPreferencesType; + +typedef SyncPreferencesType * SyncPreferencesPtr; + + + + +// This structure is used to save the current HotSync options ui settings +// before we go the the Edit View to edit the to, from or subject filters. +// The HotSync Options dialog is dismiss when we edit the filter so we need +// to save the UI state. +typedef struct { + + Boolean local; // true of local, false for remote + + UInt8 syncType; // index of selected sync type push button + // (all, send only, filter). + + Boolean retrieveHighPriority;// If true then high priority messages are + // always retrieved. + + MailFilterType messageContaing; // If true then messages containing the "to", + // "from" and "subject" are retrived. If false + // then messages containing the "to", "from" and + // "subject" are ignored. + + UInt16 maxLength; // The length that retrieved message should be + // truncated to. + + MemHandle to; + + MemHandle from; + + MemHandle subject; + +} SyncUIStateType; + +typedef SyncUIStateType * SyncUIStatePtr; + + +extern Boolean SyncHandleEvent (EventPtr event); diff --git a/handera-sdk-105/examples/Mail/Src/MailTruncate.c b/handera-sdk-105/examples/Mail/Src/MailTruncate.c new file mode 100644 index 0000000..081d514 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailTruncate.c @@ -0,0 +1,240 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailTruncate.c + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * The file contains routines the manage the Mail application's + * HotSync truncation options. + * + * History: + * Aug 1, 1996 Created by Art Lamb + * + *****************************************************************************/ + +#include + +#include "Mail.h" + +/* HandEra */ +#include "vga.h" +/* end HandEra */ + + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ + +extern UInt16 TruncateLen; // Maximun length of retrieved message + +/* HandEra */ +static VgaScreenStateType gScreenState; +/* end HandEra */ + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define truncateLen0 250 +#define truncateLen1 500 +#define truncateLen2 1000 +#define truncateLen3 2000 +#define truncateLen4 4000 +#define truncateLen5 6000 +#define truncateLen6 8000 + + +/*********************************************************************** + * + * FUNCTION: TruncateApply + * + * DESCRIPTION: This routine applies the changes made in the Truncate + * Option Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/1/96 Initial Revision + * MGolden 7/14/97 Removed the switch due to 16 bit link errors... + * + ***********************************************************************/ +static void TruncateApply (void) +{ + ListPtr lst; + UInt16 selection; + + lst = GetObjectPtr (TruncateList); + + selection = LstGetSelection (lst); + + if (selection == 0) + TruncateLen = truncateLen0; + else if (selection == 1) + TruncateLen = truncateLen1; + else if (selection == 2) + TruncateLen = truncateLen2; + else if (selection == 3) + TruncateLen = truncateLen3; + else if (selection == 4) + TruncateLen = truncateLen4; + else if (selection == 5) + TruncateLen = truncateLen5; + else if (selection == 6) + TruncateLen = truncateLen6; + else + TruncateLen = syncDefaultMaxMsgLen; + +/* + switch (LstGetSelection (lst)) + { + case 0: TruncateLen = truncateLen0; break; + case 1: TruncateLen = truncateLen1; break; + case 2: TruncateLen = truncateLen2; break; + case 3: TruncateLen = truncateLen3; break; + case 4: TruncateLen = truncateLen4; break; + case 5: TruncateLen = truncateLen5; break; + case 6: TruncateLen = truncateLen6; break; + default: TruncateLen = syncDefaultMaxMsgLen; + } +*/ +} + + +/*********************************************************************** + * + * FUNCTION: TruncateInit + * + * DESCRIPTION: This routine initializes the Truncate Dialog. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/1/96 Initial Revision + * MGolden 7/14/97 Removed the switch due to 16 bit link errors... + * + ***********************************************************************/ +static void TruncateInit (void) +{ + UInt16 item; + ListPtr lst; + + lst = GetObjectPtr (TruncateList); + + if (TruncateLen == truncateLen0) + item = 0; + else if (TruncateLen == truncateLen1) + item = 1; + else if (TruncateLen == truncateLen2) + item = 2; + else if (TruncateLen == truncateLen3) + item = 3; + else if (TruncateLen == truncateLen4) + item = 4; + else if (TruncateLen == truncateLen5) + item = 5; + else if (TruncateLen == truncateLen6) + item = 6; + else + { + item = 4; + TruncateLen = syncDefaultMaxMsgLen; + } + +/* + switch (TruncateLen) + { + case truncateLen0: item = 0; break; + case truncateLen1: item = 1; break; + case truncateLen2: item = 2; break; + case truncateLen3: item = 3; break; + case truncateLen4: item = 4; break; + case truncateLen5: item = 5; break; + case truncateLen6: item = 6; break; + default: + item = 4; + TruncateLen = syncDefaultMaxMsgLen; + } +*/ + + LstSetSelection (lst, item); +} + + +/*********************************************************************** + * + * FUNCTION: TruncateHandleEvent + * + * DESCRIPTION: This routine is the event handler for the "Truncate + * Options Dialog Box". + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event was handled and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * Name Date Description + * ---- ---- ----------- + * art 8/1/96 Initial Revision + * + ***********************************************************************/ +Boolean TruncateHandleEvent (EventPtr event) +{ + FormPtr frm; + Boolean handled = false; + + if (event->eType == ctlSelectEvent) + { + switch (event->data.ctlSelect.controlID) + { + case TruncateOkButton: + TruncateApply (); + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + break; + + case TruncateCancelButton: + FrmReturnToForm (0); +/* HandEra */ + if(vgaExists) + VgaRestoreScreenState(&gScreenState); +/* end HandEra */ + handled = true; + break; + } + } + + else if (event->eType == frmOpenEvent) + { + frm = FrmGetActiveForm (); +/* HandEra */ + if(vgaExists) + VgaSaveScreenState(&gScreenState); + ToolsVgaAdjustModalForm(frm, true); +/* end HandEra */ + TruncateInit (); + FrmDrawForm (frm); + handled = true; + } + + return (handled); +} diff --git a/handera-sdk-105/examples/Mail/Src/MailTruncate.h b/handera-sdk-105/examples/Mail/Src/MailTruncate.h new file mode 100644 index 0000000..e6084c4 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/MailTruncate.h @@ -0,0 +1,19 @@ +/****************************************************************************** + * + * Copyright (c) 1996-1999 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: MailTruncate.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file defines the structures and functions of the Mail HotSync + * Truncation options. + * + * History: + * July 26, 1996 Created by Art Lamb + * + *****************************************************************************/ + +extern Boolean TruncateHandleEvent (EventPtr event); diff --git a/handera-sdk-105/examples/Mail/Src/ShellCmdMail.cp b/handera-sdk-105/examples/Mail/Src/ShellCmdMail.cp new file mode 100644 index 0000000..9d98f07 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/ShellCmdMail.cp @@ -0,0 +1,1238 @@ +/****************************************************************************** + * + * Copyright (c) 1996-2000 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: ShellCmdMail.cp + * + * Release: Palm OS SDK 4.0 (63220) + * + * Description: + * This file is where customized console shell comands are kept. + * Currently this is a stub which the emulator calls when it doesn't + * recognize a command. The code here shows how to add a custom command. + * The custom command is useless, but it does provide a template to add commands. + * An application programmer can copy this file to their application + * folder and then customize it to MemHandle as many commands as they wish. + * + * History: + * Feb 26, 1996 Created by Roger Flores + * + *****************************************************************************/ + +#if 0 +#include + +#include +#include +#include + +#include "ShellCmd.h" + +typedef void ShellCmdFuncType (int argc, Char * argv[]); +typedef ShellCmdFuncType * ShellCmdFuncPtr; +typedef struct { + Char * longName; + Char * shortName; + ShellCmdFuncPtr func; +} ShellCmdInfoType; +#endif + +/*********************************************************************** + * + * Copyright (c) Palm Computing 1996 -- All Rights Reserved + * + * PROJECT: Pilot 2.0 + * + * FILE: ShellCmdMail.cp + * + * AUTHOR: Art Lamb: May 30, 1996 + * + * DECLARER: Mail + * + * DESCRIPTION: + * This file contains the console commands for Mail application. + * + ***********************************************************************/ + +// Pilot Includes +#include + +// C library Includes +#include +#include +#include + +// DB includes +#include "DateTime.h" +#include "MailDB.h" + +#include "ShellCmd.h" + + +typedef void ShellCmdFuncType (int argc, Char * argv[]); +typedef ShellCmdFuncType * ShellCmdFuncPtr; +typedef struct { + const Char * longName; + const Char * shortName; + ShellCmdFuncPtr func; +} ShellCmdInfoType; + +#pragma pcrelstrings off + +// DOLATER ??? - Put these in one of the include files +#define mailDBType 'DATA' +#define sysFileCMail 'mail' + + +/********************************************************************** + * find an open appointment database + * + * Parameters: none + ***********************************************************************/ +static DmOpenRef FindOpenedMailDatabases (void) +{ + DmOpenRef dbP=0; + LocalID dbID; + UInt16 mode; + UInt16 cardNo; + UInt32 dbType; + UInt32 dbCreator; + + do { + dbP = DmNextOpenDatabase(dbP); + if (!dbP) break; + + Err err = DmOpenDatabaseInfo(dbP, &dbID, NULL, &mode, &cardNo, NULL); + if (err) + { + ShlInsertText("\n#ERROR getting info"); + } + else + { + DmDatabaseInfo(cardNo, dbID, 0, 0, 0, 0, 0, 0, 0, 0, 0, + &dbType, &dbCreator); + + if ( (dbType == mailDBType) && (dbCreator == sysFileCMail) ) + return (dbP); + } + } while (1); + + + return(0); +} + + +/********************************************************************** + * Set the appointment application chunk to the defaults. + * + * MailSetInfoDefaults + ***********************************************************************/ +static void DoMailSetInfoDefaults(int argc, Char * argv[]) +{ + Boolean usageErr = false; + DmOpenRef dbP=0; + char text[256]; + int i; + + for (i=1; i\n", argv[0]); + ShlInsertText(text); + return; + } + + Err err = MailAppInfoInit (dbP); + if (err) { + ShlInsertText("\n##ERROR Setting defaults\n"); + } + else { + ShlInsertText("Success!\n"); + } +} + + + +/********************************************************************** + * Test the newRecord function. + * + * DoMailTestNewRecord + ***********************************************************************/ +static void DoMailNewRecords(int argc, Char * argv[]) +{ + Boolean usageErr = false; + DmOpenRef dbP=0; + UInt16 index; + char text[256]; + int i; + +#ifdef __MWERKS__ +#pragma const_strings off +#endif + + MailDBRecordType testRecord1 = { + 94, 1, 28, + {14, 30}, + {0, 1, 0, 0, priorityNormal, 0, 0 }, + "Dinner Plans", + "mary@aol.com", + "johndoe@aol.com", + "", + "", + "", + "", + "John,\nWe are meeting at Dan and Leslie's place around 8:00 PM. Don't forget " + "to bring the birthday present for Dan. See you there." + }; + + MailDBRecordType testRecord2 = { + 94, 1, 28, + {0, 0}, + {0, 1, 0, 0, priorityNormal, 0, 0 }, + "Meeting notes", + "david@palm.com", + "david@palm.com", + "", + "", + "", + "", + "no body text" + }; + + MailDBRecordType testRecord3 = { + 94, 1, 27, + {0, 0}, + {0, 1, 0, 0, priorityNormal, 0, 0 }, + "Little brother", + "Gayle Stoltz", + "Gayle Stoltz", + "", + "", + "", + "", + "no body text" + }; + + MailDBRecordType testRecord4 = { + 94, 1, 27, + {0, 0}, + {0, 1, 0, 0, priorityNormal, 0, 0 }, + "Press Release", + "connie@wilsontec", + "connie@wilsontec", + "", + "", + "", + "", + "no body text" + }; + + MailDBRecordType testRecord5 = { + 94, 1, 26, + {0, 0}, + {0, 1, 0, 0, priorityNormal, 0, 0 }, + "IR Beaming", + "michael@3com.com", + "michael@3com.com", + "", + "", + "", + "", + "no body text" + }; + +/* + MailDBRecordType testRecord1 = { + 92, 5, 30, + {0, 0}, + {1, 0, 0, 0, priorityHigh, sentCC, 0 }, + "Test Mail Message", + "joe@palm.com (Joe Sipher)", + "monty@palm.com (Monty Boyer)\nart@palm.com (Art Lamb)", + "roger@palm.com (Roger Flores)", + "mcauwet@palm (Marian Cauwet)", + "replyTo@alo.com", + "art@palm.com (Art Lamb)", + "This is a test mail message\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12" + }; + + MailDBRecordType testRecord2 = { + 92, 6, 3, + {0, 0}, + {0, 1, 0, 0, priorityHigh, 0, 0 }, + "Message Two", + "alamb@aol.com", + "Engineering@palm.com", + "monty@palm.com (Monty Boyer)\njoe@palm.com (Joe Sipher)", + "", + "", + "", + "This is test message two." + }; + + MailDBRecordType testRecord3 = { + 92, 6, 3, + {0, 0}, + {0, 0, 1, 0, 1, 0, 0 }, + "Message Three", + "Supervisor", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message three." + }; + + MailDBRecordType testRecord4 = { + 92, 6, 3, + {0, 0}, + {0, 0, 0, 1, 1, 0, 0 }, + "Message Four", + "joe (Joe Sipher)", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message four." + }; + + MailDBRecordType testRecord5 = { + 92, 6, 4, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Five", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message five." + }; + + MailDBRecordType testRecord6 = { + 92, 6, 4, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Six", + "Art", + "Engineering@palm.com", + "Company", + "", + "", + "", + "This is test message six." + }; + + MailDBRecordType testRecord7 = { + 92, 6, 5, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Seven", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message seven." + }; + + MailDBRecordType testRecord8 = { + 92, 6, 5, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Eight", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message eight." + }; + + MailDBRecordType testRecord9 = { + 92, 6, 10, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Nine", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message nine." + }; + + MailDBRecordType testRecord10 = { + 92, 6, 10, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Ten", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message ten." + }; + + MailDBRecordType testRecord11 = { + 92, 6, 10, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Eleven", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message eleven." + }; + + MailDBRecordType testRecord12 = { + 92, 6, 20, + {0, 0}, + {0, 0, 0, 0, 1, 0, 0 }, + "Message Twelve", + "Art", + "Engineering@palm.com", + "", + "", + "", + "", + "This is test message Twelve." + }; +*/ + +#ifdef __MWERKS__ +#pragma const_strings reset +#endif + + for (i=1; i\n", argv[0]); + ShlInsertText(text); + return; + } + + MailNewRecord(dbP, &testRecord1, &index); + MailNewRecord(dbP, &testRecord2, &index); + MailNewRecord(dbP, &testRecord3, &index); + MailNewRecord(dbP, &testRecord4, &index); + MailNewRecord(dbP, &testRecord5, &index); +// MailNewRecord(dbP, &testRecord6, &index); +// MailNewRecord(dbP, &testRecord7, &index); +// MailNewRecord(dbP, &testRecord8, &index); +// MailNewRecord(dbP, &testRecord9, &index); +// MailNewRecord(dbP, &testRecord10, &index); +// MailNewRecord(dbP, &testRecord11, &index); +// MailNewRecord(dbP, &testRecord12, &index); + + + ShlInsertText("New records added\n"); +} + + +/********************************************************************** + * Function: PrintMailRecord + * + * Description: Print the details of an appt record. Includes + * deleted records, and the + * deleted, dirty, secret, & busy flags. + * + * Usage: PrintMailRecord (dbP, index) + * + * Revision History: + * + * Name Date Description + * ---- ---- ----------- + * kcr 10/23/95 display deleted records, sync-status flags + * + ***********************************************************************/ +static void PrintMailRecord (DmOpenRef dbP, UInt16 index) +{ + char text[256]; + LocalID chunk; + UInt16 attr; + UInt32 uniqueID; + MemHandle recordH; + MailDBRecordType record; + + + + DmRecordInfo (dbP, index, &attr, &uniqueID, &chunk); + + // Print record index. + sprintf (text, "\nIndex: %d", index); + ShlInsertText (text); + + // Print the unique id + sprintf (text, ", unique id: %ld", uniqueID); + ShlInsertText (text); + + if ((attr & dmRecAttrDelete) && + chunk) + ShlInsertText ("\tArchived"); + else if (attr & dmRecAttrDelete) + ShlInsertText ("\tDeleted"); + if (attr & dmRecAttrDirty) + ShlInsertText ("\tDirty"); + if (attr & dmRecAttrBusy) + ShlInsertText ("\tBusy"); + if (attr & dmRecAttrSecret) + ShlInsertText ("\tSecret"); + + if (attr & dmRecAttrDelete) + return; + + // Print the category + sprintf (text, "\tCategory: %d", attr & dmRecAttrCategoryMask); + ShlInsertText (text); + + + if (MailGetRecord(dbP, index, &record, &recordH) != 0) + { + ShlInsertText("Error!"); + return; + } + + // Print date + sprintf(text, "\nDate: %d/%d/%d", record.date.month, + record.date.day, record.date.year+4); + ShlInsertText(text); + + + // Print the flags + ShlInsertText ("\nFlags: "); + sprintf (text, "Priority: %d ", record.flags.priority); + ShlInsertText (text); + + if (record.flags.read) + ShlInsertText ("Read "); + + if (record.flags.signature) + ShlInsertText ("Signature "); + + if (record.flags.confirmRead) + ShlInsertText ("Confirm Read "); + + if (record.flags.confirmDelivery) + ShlInsertText ("Confirm Delivery "); + + + if (*record.subject) + { + ShlInsertText ("\nSubject: "); + ShlInsertText (record.subject); + } + + if (*record.from) + { + ShlInsertText ("\nFrom: "); + ShlInsertText (record.from); + } + + if (*record.to) + { + ShlInsertText ("\nTo: "); + ShlInsertText (record.to); + } + + if (*record.cc) + { + ShlInsertText ("\nCC: "); + ShlInsertText (record.cc); + } + + if (*record.bcc) + { + ShlInsertText ("\nBCC: "); + ShlInsertText (record.bcc); + } + + if (*record.body) + { + ShlInsertText ("\nBody: "); + ShlInsertText (record.body); + } + + ShlInsertText ("\n"); + + + MemHandleUnlock ((MemHandle)recordH); +} + + +/********************************************************************** + * Get an record and print in Address format. + * + * DoMailGetRecord + ***********************************************************************/ +static void DoMailGetRecord(int argc, Char * argv[]) +{ + Boolean usageErr = false; + DmOpenRef dbP=0; + char text[256]; + UInt16 index = 0; + int i; + + + for (i=1; i \n", argv[0]); + ShlInsertText(text); + return; + } + + PrintMailRecord (dbP, index); +} + + +/********************************************************************** + * Get an record and print in Address format. + * + * DoMailGetRecord + * + ***********************************************************************/ +static void DoMailGetAll(int argc, Char * argv[]) +{ + int i; + UInt16 index = 0; + char text[256]; + Boolean usageErr = false; + DmOpenRef dbP=0; + + if ( argc > 1 && !strcmp(argv[1], "?") ) + goto Help; + + for (i=1; i + ***********************************************************************/ +static void DoMailChangeRecord(int argc, Char * argv[]) +{ + Int16 i; + Char text[256]; + UInt16 result; + UInt16 index = 0; + Boolean usageErr = false; + MemHandle recordH; + DmOpenRef dbP = 0; + MailDBRecordType testRecord; + MailChangedFieldsType changedFields = { 0,0,0,0,0,0,0,}; + + + * (int *) &changedFields = 0; + for (i=1; i \n", argv[0]); + ShlInsertText(text); + return; + } + + + if (MailGetRecord(dbP, index, &testRecord, &recordH) != 0) + { + ShlInsertText("Error!"); + return; + } + + testRecord.date.month = 12; + changedFields.date = true; + + MemHandleUnlock ((MemHandle)recordH); + + result = MailChangeRecord (dbP, &index, &testRecord, changedFields); + + sprintf(text, "%d\n", result); + ShlInsertText(text); +} + + +/********************************************************************** + * Sort the Mail Database + * + * DoMailSync + ***********************************************************************/ +static void DoMailSync (int argc, Char * argv[]) +{ + int i; + UInt16 index = 0; + char text[256]; + Boolean usageErr = false; + DmOpenRef dbP=0; + + if ( argc > 1 && !strcmp(argv[1], "?") ) + goto Help; + + + for (i=1; i + ***********************************************************************/ +static void DoMailDefaultData(int argc, Char * argv[]) +{ + Boolean usageErr = false; + DmOpenRef dbP=0; + UInt16 index; + char text[256]; + int i; + +#if 0 // DOLATER -- Need to fix this up for LOCALEs. +#if LANGUAGE == LANGUAGE_FRENCH + MailDBRecordType testRecord1 = { + 93, 5, 19, + {11, 0}, + {0, 0, 0, 0, priorityNormal, sentTo, 0 }, + "Bienvenue", + "eurosupport@usr.com (U.S. Robotics)", + "Utilisateur de Courrier de PalmPilot", + "", + "", + "", + "Utilisateur de Courrier de PalmPilot", + "Bienvenue dans Courrier de PalmPilot!\n" + "\n" + "Pour que vos messages de système de messagerie de " + "bureau apparaissent ici, vous devez configurer " + "HotSync sur votre bureau comme suit.\n" + "\n" + "1. Installez PalmPilot Desktop à partir " + "du CD ou des disquettes de " + "distribution.\n" + "\n" + "2. Sous Windows 95/NT 4.0 PC, " + "cliquez sur l'icône de HotSync " + "dans la barre des tâches " + "et sélectionnez Personnaliser. Sous " + "Windows 3.1x, cliquez deux fois " + "sur l'icône Personnaliser du groupe " + "de programmes de PalmPilot 2.0.\n" + "\n" + "3. Sélectionnez la conduite Courrier " + "et cliquez sur le bouton Changer.\n" + "\n" + "4. Cochez la case Activer Courrier " + "de PalmPilot.\n" + "\n" + "5. Sélectionnez le système de " + "messagerie de bureau dans le " + "menu déroulant Synchroniser avec.\n" + "\n" + "6. Entrez le nom de l'utilisateur et le " + "Mot de passe utilisé pour vous " + "connecter au système de messagerie " + "de bureau.\n" + "\n" + "7. Cliquez sur le bouton d'aide pour " + "connaître le paramétrage " + "spécifique à votre système de " + "messagerie exigé pour la " + "configuration.\n" + "\n" + "8. Cliquez sur OK.\n" + "\n" + "9. Cliquez sur Terminé.\n" + "\n" + "A la prochaine synchronisation, les messages de votre boîte de réception de bureau " + "appaîtront ici. Lisez-les, répondez, transférez-les, supprimez-les ou créez-en de nouveaux " + "A la prochaine synchronisation, tous les résultats de ces actions apparaîtront " + "ici et sur le système de messagerie de bureau.\n" + "\n" + "Profitez et appréciez Courrier de PalmPilot!\n" + }; +#elif LANGUAGE == LANGUAGE_GERMAN + MailDBRecordType testRecord1 = { + 93, 5, 19, + {11, 0}, + {0, 0, 0, 0, priorityNormal, sentTo, 0 }, + "Begrüßung", + "germantechsup@usr.com (U.S. Robotics)", + "PalmPilot Mail-Benutzer", + "", + "", + "", + "PalmPilot Mail-Benutzer", + "Willkommen bei PalmPilot Mail!\n" + "\n" + "Damit Ihre Desktop E-Mails hier erscheinen können, müssen Sie die HotSync-Anwendung " + "auf Ihrem Desktop wie folgt konfigurieren:\n" + "\n" + "Installieren Sie PalmPilot Desktop von der mitgelieferten CD bzw. von Disketten.\n" + "\n" + "Unter Windows 95/NT 4.0 PC klicken Sie im Systemfach (rechts unten) auf das " + "HotSync-Symbol, und wählen Sie \"Benutzerdefiniert\".\n" + "\n" + "Unter Windows 3.1x doppelklicken Sie auf das Symbol \"Benutzerdefiniert\" in der " + "Programmgruppe \"PalmPilot 2.0.\"\n" + "\n" + "Wählen Sie das Conduit \"Mail\", und klicken Sie auf \"Ändern\".\n" + "\n" + "Klicken Sie auf \"PalmPilot aktivieren\".\n" + "\n" + "Wählen Sie unter \"Synchronisieren mit\" Ihr Desktop E-Mail-System aus.\n" + "\n" + "Geben Sie den Benutzernamen und das Kennwort ein, mit denen Sie sich gewöhnlich " + "bei Ihrem Desktop E-Mail-System anmelden.\n" + "\n" + "Klicken Sie auf \"Hilfe\", um weitere Einstellungen anzuzeigen, die Sie eventuell " + "auf Ihrem Desktop E-Mail-System konfigurieren müssen.\n" + "\n" + "Klicken Sie auf \"OK\".\n" + "\n" + "Klicken Sie auf \"Fertig\".\n" + "\n" + "Nach dem nächsten HotSync-Vorgang werden Sie Ihre Nachrichten aus dem Desktop-Ordner " + "\"Posteingang\" hier sehen. Sie können nach Belieben E-Mails verfassen, lesen, " + "beantworten und senden bzw. löschen. Wenn Sie das nächste Mal einen HotSync " + "ausführen, werden all diese Aktionen sowohl hier als auch auf Ihrem Desktop " + "E-Mail-System angezeigt.\n" + "\n" + "Viel Spaß mit PalmPilot Mail!\n" + }; +#elif (LANGUAGE == LANGUAGE_ENGLISH) && (VENDOR == VENDOR_IBM) + MailDBRecordType testRecord1 = { + 93, 6, 20, + {15, 0}, + {0, 0, 0, 0, priorityNormal, sentTo, 0 }, + "Welcome", + "WorkPad@us.ibm.com (IBM Corp.)", + "WorkPad Mail User", + "", + "", + "", + "WorkPad Mail User", + "Welcome to WorkPad Mail!\n" + "\n" + "In order for your desktop e-mail messages to appear here, you must " + "configure HotSync on your desktop as follows.\n" + "\n" + "1. Install WorkPad Desktop from \n" + " the CD provided.\n" + "2. On your Windows 95/NT 4.0 PC, \n" + " click the HotSync system tray \n" + " icon and select Custom.\n" + "3. Select the Mail conduit and\n" + " click the Change button. \n" + "4. Click on the Activate \n" + " WorkPad Mail checkbox.\n" + "5. Select the desktop e-mail \n" + " system you use in the\n" + " Synchronize with drop-winDown\n" + " menu.\n" + "6. Enter the User Name and\n" + " Password you use to log into\n" + " your desktop e-mail system.\n" + "7. Click the Help button to\n" + " learn about other settings\n" + " specific to your desktop\n" + " e-mail system that you may\n" + " need to configure.\n" + "8. Click OK.\n" + "9. Click Done.\n" + "\n" + "When you synchronize, the messages from your desktop inbox will " + "appear right here. Read, reply, forward, delete, or create new messages. " + "\n" + "The next time you synchronize, all those actions will be reflected both " + "here on your IBM WorkPad and on your desktop e-mail system.\n" + "\n" + "Enjoy WorkPad Mail!" + }; +#else + MailDBRecordType testRecord1 = { + 94, 3, 1, + {9, 0}, + {0, 0, 0, 0, priorityNormal, sentTo, 0 }, + "Welcome", + "support@palm.com(3Com Corporation)", + "Palm Mail User", + "", + "", + "", + "Palm Mail User", + "Welcome to Palm Mail!\n" + "\n" + "In order for your desktop e-mail messages to appear here, you must configure HotSync on your desktop as follows.\n" + "\n" + "1. Install Palm Desktop organizer software on the provided CD or diskettes.\n" + "\n" + "2. Click Yes to the screen that asks if you want to configure your Palm Mail settings.\n" + "\n" + "3. Follow the steps in the Mail Setup Wizard to configure your Palm Mail.\n" + "\n" + "4. You can return to Mail Setup at anytime through the Start button on your Windows 95/NT desktop. Click the Start button, highlight Programs, go to the Palm program group and highlight Mail Setup.\n" + "\n" + "When you synchronize, the messages from your desktop inbox will appear right here. Read, reply, forward, delete, or create new messages. The next time you synchronize, all those actions will be reflected both here and on your desktop e-mail system.\n" + "\n" + "Enjoy Palm Mail!" + }; +#endif +#endif + +#if __MWERKS__ +#pragma const_strings off +#endif + + MailDBRecordType testRecord1 = { + 94, 3, 1, + {9, 0}, + {0, 0, 0, 0, priorityNormal, sentTo, 0 }, + "Welcome", + "support@palm.com(3Com Corporation)", + "Palm Mail User", + "", + "", + "", + "Palm Mail User", + "Welcome to Palm Mail!\n" + "\n" + "In order for your desktop e-mail messages to appear here, you must configure HotSync on your desktop as follows.\n" + "\n" + "1. Install Palm Desktop organizer software on the provided CD or diskettes.\n" + "\n" + "2. Click Yes to the screen that asks if you want to configure your Palm Mail settings.\n" + "\n" + "3. Follow the steps in the Mail Setup Wizard to configure your Palm Mail.\n" + "\n" + "4. You can return to Mail Setup at anytime through the Start button on your Windows 95/NT desktop. Click the Start button, highlight Programs, go to the Palm program group and highlight Mail Setup.\n" + "\n" + "When you synchronize, the messages from your desktop inbox will appear right here. Read, reply, forward, delete, or create new messages. The next time you synchronize, all those actions will be reflected both here and on your desktop e-mail system.\n" + "\n" + "Enjoy Palm Mail!" + }; + +#if __MWERKS__ +#pragma const_strings reset +#endif + + for (i=1; i\n", argv[0]); + ShlInsertText(text); + return; + } + + MailNewRecord(dbP, &testRecord1, &index); + + + ShlInsertText("New records added\n"); +} + + +/********************************************************************** + * Support for Mail commands + * + * returns 0 if successfully found command + ***********************************************************************/ +int ShlDoAppCmd(int argc, Char * argv[]) +{ + int i; + ShellCmdInfoType cmd [] ={ + "MailAppInfoInit", "msi", DoMailSetInfoDefaults, + "MailNew", "mnr", DoMailNewRecords, + "MailGetRecord", "mgr", DoMailGetRecord, + "MailGetAll", "md", DoMailGetAll, + "MailChangeRecord", "mcr", DoMailChangeRecord, + "MailSync", "ms", DoMailSync, + "MailDefaultData", "mdd", DoMailDefaultData, + }; + + for (i = 0; i < sizeof (cmd) / sizeof (ShellCmdInfoType); i++) + { + if ( (!ShlStrCmpi(argv[0], cmd[i].longName)) || + (!ShlStrCmpi(argv[0], cmd[i].shortName))) + { + cmd[i].func (argc, argv); + return 0; + } + } + return 1; +} + + + +#ifdef OLDWAY +/*********************************************************************** + * + * Copyright (c) Palm Computing 1996 -- All Rights Reserved + * + * PROJECT: Pilot + * FILE: ShellCmdUser.c + * AUTHOR: Roger Flores: Feb 26, 1996 + * + * DESCRIPTION: + * This file is where customized console shell comands are kept. + * Currently this is a stub which the emulator calls when it doesn't + * recognize a command. The code here shows how to add a custom command. + * The custom command is useless, but it does provide a template to add commands. + * An application programmer can copy this file to their application + * folder and then customize it to MemHandle as many commands as they wish. + * + **********************************************************************/ + +#include + +#include +#include +#include + +#include "ShellCmd.h" + +typedef void ShellCmdFuncType (int argc, Char * argv[]); +typedef ShellCmdFuncType * ShellCmdFuncPtr; +typedef struct { + Char * longName; + Char * shortName; + ShellCmdFuncPtr func; +} ShellCmdInfoType; + + + +/*********************************************************************** + * + * FUNCTION: DoAppCommand + * + * DESCRIPTION: Execute a user defined command for the appliation. + * (It currently adds one to a number as an example) + * + * Syntax: UserCommand num + * + * PARAMETERS: argc - number of arguments + * argv - argument list + * + * RETURNED: false if the command was a ui command. + * + ***********************************************************************/ +static void DoAppCommand (int argc, Char * argv[]) +{ + int i; + char text[256]; + Int16 num = 0; + Boolean usageErr = false; + + // Parse the arguments passed. + if ( argc > 1 && !strcmp(argv[1], "?") ) + goto Help; + + if (argc < 2) usageErr = true; + for (i=1; i +#include + +#define TRGSysFtrID 'TRG ' + +#ifdef __GNUC__ + +#define _TRG_CALL_WITH_16BIT_SELECTOR(table, vector, selector)\ + __attribute__ ((__callseq__ (\ + "move.w #" _Str(selector) ",%%d2; "\ + "trap #" _Str(table) "; dc.w " _Str(vector) ))) + +#elif defined (__MWERKS__) /* The equivalent in CodeWarrior syntax */ + +#define _TRG_CALL_WITH_16BIT_SELECTOR(table, vector, selector) \ + = { 0x343C, selector, 0x4E40 + table, vector } + +#endif + +#define TRG_TRAP(sel) \ + _TRG_CALL_WITH_16BIT_SELECTOR(_SYSTEM_TABLE, sysTrapOEMDispatch, sel) + +#ifdef BUILDING_EXTENSION + #define EXT_TRAP(x) +#else + #define EXT_TRAP(x) TRG_TRAP(x) +#endif + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifdef __cplusplus + } +#endif + + +#endif diff --git a/handera-sdk-105/examples/Mail/Src/Vga.h b/handera-sdk-105/examples/Mail/Src/Vga.h new file mode 100644 index 0000000..38d4cb9 --- /dev/null +++ b/handera-sdk-105/examples/Mail/Src/Vga.h @@ -0,0 +1,368 @@ +/**************************************************************************** + * + * Copyright (c) 2001, TRG, All Rights Reserved + * + *--------------------------------------------------------------------------- + * FileName: + * Vga.h + * + * Description: + * VGA API definitions. + * + * + ****************************************************************************/ + +#ifndef __VGA_H__ +#define __VGA_H__ + +#include "Trg.h" + +#define TRGVgaFtrNum 2 + +/*-------------------------------------------------------------------------- + * Vga result codes + * (oemErrorClass is reserved for Palm licensees). + *-------------------------------------------------------------------------*/ +#define vgaErrorClass (oemErrorClass | 0x200) + +#define vgaErrUnimplemented (vgaErrorClass | 0) // function not implemented (on this hardware) +#define vgaErrBadParam (vgaErrorClass | 1) // invalid parameter +#define vgaErrModeUnsupported (vgaErrorClass | 2) // does not support screen mode +#define vgaErrScreenLocked (vgaErrorClass | 3) // ??? +#define vgaErrFontUndefined (vgaErrorClass | 4) // ??? + +/*--------------------------------------------------------------------------- + * Extension Installed + *--------------------------------------------------------------------------*/ +#define _TRGVGAFeaturePresent(versionPtr) \ + (Boolean)(FtrGet(TRGSysFtrID, TRGVgaFtrNum, versionPtr) == 0) + + +/*--------------------------------------------------------------------------- + * Notification that the screen area changed (silk minimize/maximized, rotation) + *--------------------------------------------------------------------------*/ +#define displayExtentChangedEvent ((eventsEnum)(firstUserEvent-2)) +typedef struct displayExtentChangedDataType +{ + RectangleType oldDim; + RectangleType newDim; +} displayExtentChangedDataType; + +/*--------------------------------------------------------------------------- + * Macro to simplify getting the data out of the event structure. + * Example: + * yDiff = displayExtentChangedData(eventP)->newDim->extent.y - + * displayExtentChangedData(eventP)->oldDim->extent.y; + *--------------------------------------------------------------------------*/ +#define displayExtentChangedData(eventP) ((displayExtentChangedDataType *)(&((eventP)->data.generic))) + +/*--------------------------------------------------------------------------- + * Vga Font ID's + *--------------------------------------------------------------------------*/ +enum vgaFontID { + vga4x8FixedFont = 0x00, + vga10x16FixedFont, + vga14x22FixedFont +}; + +typedef enum vgaFontID VgaFontID; + +/*--------------------------------------------------------------------------- + * Screen and rotation modes + *--------------------------------------------------------------------------*/ +typedef enum +{ + screenModeScaleToFit = 0, + screenMode1To1, + screenModeOffset //System Use Only +} VgaScreenModeType; + +typedef enum +{ + rotateModeNone = 0, + rotateMode90, + rotateMode180, + rotateMode270 +} VgaRotateModeType; + +/*--------------------------------------------------------------------------- + * Legacy app display modes. + *--------------------------------------------------------------------------*/ +typedef enum +{ + offsetModeTopLeft = 0, + offsetModeTopCenter, + offsetModeTopRight, + offsetModeCenterLeft, + offsetModeCenterCenter, + offsetModeCenterRight, + offsetModeBottomLeft, + offsetModeBottomCenter, + offsetModeBottomRight +} VgaOffsetModeType; + +/*--------------------------------------------------------------------------- + * Font Select Types + *--------------------------------------------------------------------------*/ +typedef enum +{ + vgaFontSelectPalm = 0, + vgaFontSelectVgaText +} VgaFontSelectType; + +/*--------------------------------------------------------------------------- + * Form Modify Types + *--------------------------------------------------------------------------*/ +typedef enum +{ + vgaFormModify160To240 = 0 +} VgaFormModifyType; + +/*--------------------------------------------------------------------------- + * Vga Screen State + *--------------------------------------------------------------------------*/ +typedef struct VgaScreenStateType +{ + VgaScreenModeType mode; + VgaRotateModeType rotate; + VgaOffsetModeType offset; +} VgaScreenStateType; + +/*--------------------------------------------------------------------------- + * Vga System State + *--------------------------------------------------------------------------*/ +typedef struct VgaSystemStateType +{ + VgaScreenModeType screenMode; + Int16 offset_X; + Int16 offset_Y; + + UInt8 draw_override; + UInt8 list_draw; + UInt8 use_large_font; + UInt8 use_large_nontextfont; + + UInt8 reserved[16]; +} VgaSystemStateType; + + +#ifdef __cplusplus +extern "C" { +#endif + +#define trgMinVgaFunction 0x0200 +#define trgGetScreenMode (trgMinVgaFunction + 0) +#define trgSetScreenMode (trgMinVgaFunction + 1) + +#define trgBitmapExpandedExtent (trgMinVgaFunction + 2) +#define trgNOP (trgMinVgaFunction + 3) //Remove +#define trgWinDrawBitmapExpanded (trgMinVgaFunction + 4) + +#define trgBaseToVgaFont (trgMinVgaFunction + 5) +#define trgFontSelect (trgMinVgaFunction + 6) +#define trgGetFrmTitleHeight (trgMinVgaFunction + 7) +#define trgIsVgaFont (trgMinVgaFunction + 8) +#define trgVgaEnable (trgMinVgaFunction + 9) +#define trgVgaDisable (trgMinVgaFunction + 10) +#define trgVgaIsEnabled (trgMinVgaFunction + 11) +#define trgGetLegacyMode (trgMinVgaFunction + 12) +#define trgSetLegacyMode (trgMinVgaFunction + 13) + +#define trgTableUseBaseFont (trgMinVgaFunction + 14) + +#define trgFrmModify (trgMinVgaFunction + 15) + +#define trgVgaToBaseFont (trgMinVgaFunction + 16) + +#define trgReloadAppPrefs (trgMinVgaFunction + 17) + +#define trgSaveScreenState (trgMinVgaFunction + 18) +#define trgRestoreScreenState (trgMinVgaFunction + 19) + +#define trgRotateSelect (trgMinVgaFunction + 20) + +#define trgGetSystemState (trgMinVgaFunction + 21) + +#define trgGetFontPtr (trgMinVgaFunction + 22) +#define trgSetFontPtr (trgMinVgaFunction + 23) +#define trgGetNumVgaFonts (trgMinVgaFunction + 24) +#define trgPalmFontID (trgMinVgaFunction + 25) + +#define trgMaxVgaFunction 0x0219 + + +/******************************************************************** + * VGA API Prototypes + ********************************************************************/ + +/*--------------------------------------------------------------------------- + * Returns the current mode and rotation settings + *--------------------------------------------------------------------------*/ +extern void VgaGetScreenMode(VgaScreenModeType *mode, VgaRotateModeType *rotation) + EXT_TRAP(trgGetScreenMode); + +/*--------------------------------------------------------------------------- + * Set current screen mode. + *--------------------------------------------------------------------------*/ +extern Err VgaSetScreenMode(VgaScreenModeType mode, VgaRotateModeType rotation) + EXT_TRAP(trgSetScreenMode); + +/*--------------------------------------------------------------------------- + * Pass in non-expanded bitmap and destination, returns the X & Y extent + * the expanded bitmap. + *--------------------------------------------------------------------------*/ +extern void VgaBitmapExpandedExtent(BitmapPtr bitmapP, Coord *extentX, Coord *extentY) + EXT_TRAP(trgBitmapExpandedExtent); + +/*--------------------------------------------------------------------------- + * Draw the bitmap at 1.5 scale. This is needed for non 160x160 applications + * that need to expand existing small bitmaps. (IE Launcher) + *--------------------------------------------------------------------------*/ +extern void VgaWinDrawBitmapExpanded(BitmapPtr bitmapP, Coord x, Coord y) + EXT_TRAP(trgWinDrawBitmapExpanded); + +/*--------------------------------------------------------------------------- + * Take the Palm font and return the 1.5 scale font + *--------------------------------------------------------------------------*/ +extern FontID VgaBaseToVgaFont(FontID font) + EXT_TRAP(trgBaseToVgaFont); + +/*--------------------------------------------------------------------------- + * Take the Vga font and return the Palm font + *--------------------------------------------------------------------------*/ +extern FontID VgaVgaToBaseFont(FontID font) + EXT_TRAP(trgVgaToBaseFont); + +/*--------------------------------------------------------------------------- + * Display the TRG Select Font dialog which shows the 4 Palm text fonts + * plus the 4 equivalent TRG larger fonts. + *--------------------------------------------------------------------------*/ +extern FontID VgaFontSelect(VgaFontSelectType selectFormType, FontID fontID) + EXT_TRAP(trgFontSelect); + +/*--------------------------------------------------------------------------- + * Is font a 1.5 expanded font. + *--------------------------------------------------------------------------*/ +extern Boolean VgaIsVgaFont(FontID font) + EXT_TRAP(trgIsVgaFont); + +/*--------------------------------------------------------------------------- + * Use small Palm font when drawing tableItemStyles excluding customTableItem + * which determines its + *--------------------------------------------------------------------------*/ +extern void VgaTableUseBaseFont(TablePtr table, Boolean on) + EXT_TRAP(trgTableUseBaseFont); + +/*--------------------------------------------------------------------------- + * Return the heigth of the Titlebar. Necessary for placement of form text + * and objects + *--------------------------------------------------------------------------*/ +extern UInt16 VgaGetFrmTitleHeight(void) + EXT_TRAP(trgGetFrmTitleHeight); + +/*--------------------------------------------------------------------------- + * VgaEnable + *--------------------------------------------------------------------------*/ +extern void VgaEnable(Boolean redraw) + EXT_TRAP(trgVgaEnable); + +/*--------------------------------------------------------------------------- + * VgaDisable + *--------------------------------------------------------------------------*/ +extern void VgaDisable(Boolean redraw) + EXT_TRAP(trgVgaDisable); + +/*--------------------------------------------------------------------------- + * VgaIsEnabled + *--------------------------------------------------------------------------*/ +extern Boolean VgaIsEnabled(void) + EXT_TRAP(trgVgaIsEnabled); + +/*--------------------------------------------------------------------------- + * VgaGetLegacyMode + *--------------------------------------------------------------------------*/ +extern void VgaGetLegacyMode(VgaScreenModeType *viewMode, VgaOffsetModeType *offsetMode) + EXT_TRAP(trgGetLegacyMode); + +/*--------------------------------------------------------------------------- + * VgaSetLegacyMode + *--------------------------------------------------------------------------*/ +extern void VgaSetLegacyMode(VgaScreenModeType viewMode, VgaOffsetModeType offsetMode) + EXT_TRAP(trgSetLegacyMode); + +/*--------------------------------------------------------------------------- + * VgaFormModify + *--------------------------------------------------------------------------*/ +extern Err VgaFormModify(FormType *frmP, VgaFormModifyType type) + EXT_TRAP(trgFrmModify); + +/*--------------------------------------------------------------------------- + * VgaFormModify + * + * #define to allow the old VgaFrmModify routine. Please change your code to + * use the new VgaFormModify routine above. This #define will be removed in + * the future. + *--------------------------------------------------------------------------*/ +#define VgaFrmModify(frmP, type) (VgaFormModify((frmP, type))) + +/*--------------------------------------------------------------------------- + * VgaLoadAppPrefs + *--------------------------------------------------------------------------*/ +extern void VgaReloadAppPrefs(void) + EXT_TRAP(trgReloadAppPrefs); + +/*--------------------------------------------------------------------------- + * VgaSaveScreenState + *--------------------------------------------------------------------------*/ +extern void VgaSaveScreenState(VgaScreenStateType *state) + EXT_TRAP(trgSaveScreenState); + +/*--------------------------------------------------------------------------- + * VgaRestoreScreenState + *--------------------------------------------------------------------------*/ +extern Err VgaRestoreScreenState(VgaScreenStateType *state) + EXT_TRAP(trgRestoreScreenState); + +/*--------------------------------------------------------------------------- + * VgaRotateSelect + *--------------------------------------------------------------------------*/ +extern VgaRotateModeType VgaRotateSelect (VgaRotateModeType rotateMode) + EXT_TRAP(trgRotateSelect); + +/*--------------------------------------------------------------------------- + * VgaGetSystemState + *--------------------------------------------------------------------------*/ +extern void VgaGetSystemState(VgaSystemStateType *pState) + EXT_TRAP(trgGetSystemState); + +/*--------------------------------------------------------------------------- + * VgaGetFontPtr + *--------------------------------------------------------------------------*/ +extern Err VgaGetFontPtr(FontID font, FontPtr *fontP) + EXT_TRAP(trgGetFontPtr); + +/*--------------------------------------------------------------------------- + * VgaSetFontPtr + *--------------------------------------------------------------------------*/ +extern Err VgaSetFontPtr(FontID font, FontPtr fontP) + EXT_TRAP(trgSetFontPtr); + +/*--------------------------------------------------------------------------- + * VgaGetNumVgaFonts + *--------------------------------------------------------------------------*/ +extern UInt16 VgaGetNumVgaFonts(void) + EXT_TRAP(trgGetNumVgaFonts); + + +/*--------------------------------------------------------------------------- + * VgaPalmFontID + *--------------------------------------------------------------------------*/ +extern FontID VgaPalmFontID(VgaFontID font) + EXT_TRAP(trgPalmFontID); + +#ifdef __cplusplus +} +#endif + + +#endif // __VGA_H__ diff --git a/handera-sdk-105/include/Audio.h b/handera-sdk-105/include/Audio.h new file mode 100644 index 0000000..e425821 --- /dev/null +++ b/handera-sdk-105/include/Audio.h @@ -0,0 +1,271 @@ +/**************************************************************************** + * + * Copyright (c) 2001, TRG, All Rights Reserved + * + *--------------------------------------------------------------------------- + * FileName: + * Audio.h + * + * Description: + * Audio API definitions. + * + * + ****************************************************************************/ + +#ifndef __AUDIO_H__ +#define __AUDIO_H__ + +#include "Trg.h" + +#define TRGAudioFtrNum 5 + +/*-------------------------------------------------------------------------- + * Audio result codes + * (oemErrorClass is reserved for OEM/Licensees). + *-------------------------------------------------------------------------*/ +#define audioErrorClass (oemErrorClass | 0x500) + +#define audioErrUnimplemented (audioErrorClass | 0) // function not implemented (on this hardware) +#define audioErrBadParam (audioErrorClass | 1) // invalid parameter +#define audioErrInvalidData (audioErrorClass | 2) // bad wave data +#define audioErrUnsupportedFormat (audioErrorClass | 3) // unsupported play/record format + +/*--------------------------------------------------------------------------- + * Extension Installed + *--------------------------------------------------------------------------*/ +#define _TRGAudioFeaturePresent(version) \ + (Boolean)(FtrGet(TRGSysFtrID, TRGAudioFtrNum, version) == 0) + + +/*--------------------------------------------------------------------------- + * Format structure for playing and recording PWM data + *--------------------------------------------------------------------------*/ +typedef struct AudioFormatType +{ + UInt16 samplesPerSecond; // TRGpro < 33kHz, HandEra 330 <= 44kHz + UInt16 bitsPerSample; // only 8 bit is supported + UInt16 channels; // only 1 channel is supported + UInt32 data_size; // only needed for AudioOpenRawData() in play mode. + UInt8 reserved[4]; +} AudioFormatType; + +/*--------------------------------------------------------------------------- + * enum for audioModeType + *--------------------------------------------------------------------------*/ +typedef enum AudioModeType +{ + audioPlayMode, + audioRecordMode +} AudioModeType; + +/*--------------------------------------------------------------------------- + * Defines for AudGetSupportedFeatures features bitmap + *--------------------------------------------------------------------------*/ +#define audioFtrPlayWave 0x0001 +#define audioFtrAdjVolume 0x0002 +#define audioFtrDTMF 0x0004 +#define audioFtrRecordWave 0x0008 + +/*--------------------------------------------------------------------------- + * min and max volume levels + *--------------------------------------------------------------------------*/ +#define audioVolumeMax 255 +#define audioVolumeMin 0 + +/*--------------------------------------------------------------------------- + * wave playing progress events + *--------------------------------------------------------------------------*/ +#define audioProgressEvent ((eventsEnum)(firstUserEvent-1)) + +// progress is stored in the following fields of a generic eventType +// datum[0]: percent complete +// datum[1]: minutes +// datum[2]: seconds +// datum[3]: 1/100ths of second +typedef struct AudioProgressType +{ + eventsEnum eType; + Boolean reserved; + UInt8 percent; + Int16 minutes; + Int16 seconds; +} AudioProgressType; + + +#define trgMinAudFunction 0x0500 +#define trgAudGetSupportedFeatures (trgMinAudFunction + 0) +#define trgAudGetMasterVolume (trgMinAudFunction + 1) +#define trgAudSetMasterVolume (trgMinAudFunction + 2) +#define trgAudGetMute (trgMinAudFunction + 3) +#define trgAudSetMute (trgMinAudFunction + 4) +#define trgAudPlayDTMFChar (trgMinAudFunction + 5) +#define trgAudPlayDTMFStr (trgMinAudFunction + 6) +#define trgAudPlayData (trgMinAudFunction + 7) +#define trgAudRecordData (trgMinAudFunction + 8) +#define trgAudPause (trgMinAudFunction + 9) +#define trgAudOpenWaveOld (trgMinAudFunction + 10) +#define trgAudCloseWave (trgMinAudFunction + 11) +#define trgAudVolumeDlg (trgMinAudFunction + 12) +#define trgAudSeek (trgMinAudFunction + 13) +#define trgAudSeekPercent (trgMinAudFunction + 14) +#define trgAudTell (trgMinAudFunction + 15) +#define trgAudTellPercent (trgMinAudFunction + 16) +#define trgAudOpenRawDataOld (trgMinAudFunction + 17) +#define trgAudCloseRawData (trgMinAudFunction + 18) +#define trgAudCreateWave (trgMinAudFunction + 19) +#define trgAudCreateRawData (trgMinAudFunction + 20) +#define trgAudOpenWave (trgMinAudFunction + 21) +#define trgAudOpenRawData (trgMinAudFunction + 22) +#define trgMaxAudFunction (trgMinAudFunction + 22) + +/******************************************************************** + * Audio API Prototypes + ********************************************************************/ + +/*--------------------------------------------------------------------------- + * function prototypes for callbacks + *--------------------------------------------------------------------------*/ +typedef Err (*AudioReadProcPtr) + (void *dataP, UInt32 offset, UInt32 *sizeP, void *userDataP); + +typedef Err (*AudioWriteProcPtr) + (void *dataP, UInt32 offset, UInt32 *sizeP, void *userDataP); + +#ifdef __cplusplus +extern "C" { +#endif + +/*--------------------------------------------------------------------------- + * get features support on this hardware + *--------------------------------------------------------------------------*/ +extern Err AudioGetSupportedFeatures(UInt32 *features) + EXT_TRAP(trgAudGetSupportedFeatures); + +/*--------------------------------------------------------------------------- + * Display volume dlg (pass NULL for default title) + *--------------------------------------------------------------------------*/ +extern Err AudioVolumeDlg(Char *title) + EXT_TRAP(trgAudVolumeDlg); + +/*--------------------------------------------------------------------------- + * Get master volume (0-255) + *--------------------------------------------------------------------------*/ +extern Err AudioGetMasterVolume(UInt8 *volume) + EXT_TRAP(trgAudGetMasterVolume); + +/*--------------------------------------------------------------------------- + * Set master volume (0-255) + *--------------------------------------------------------------------------*/ +extern Err AudioSetMasterVolume(UInt8 volume) + EXT_TRAP(trgAudSetMasterVolume); + +/*--------------------------------------------------------------------------- + * Get mute status + *--------------------------------------------------------------------------*/ +extern Err AudioGetMute(Boolean *mute) + EXT_TRAP(trgAudGetMute); + +/*--------------------------------------------------------------------------- + * Set mute status + *--------------------------------------------------------------------------*/ +extern Err AudioSetMute(Boolean mute) + EXT_TRAP(trgAudSetMute); + +/*--------------------------------------------------------------------------- + * Play a DTMF tone + *--------------------------------------------------------------------------*/ +extern Err AudioPlayDTMFChar(char ascChar, Int16 toneLength) + EXT_TRAP(trgAudPlayDTMFChar); + +/*--------------------------------------------------------------------------- + * Play a DTMF sequence + *--------------------------------------------------------------------------*/ +extern Err AudioPlayDTMFStr(char *ascStr, Int16 toneLength, Int16 toneGap) + EXT_TRAP(trgAudPlayDTMFStr); + + +/*--------------------------------------------------------------------------- + * Open a wave file and write out the header information and prepare to + * record new data + * NOTE: only one wave file may be open at a time + *--------------------------------------------------------------------------*/ +extern Err AudioCreateWave(AudioFormatType *dataFormat, + AudioWriteProcPtr writeData, + void *userData) + EXT_TRAP(trgAudCreateWave); + +/*--------------------------------------------------------------------------- + * Open a wave file and read in the header information and prepare to play + * the data + * NOTE: only one wave file may be open at a time + *--------------------------------------------------------------------------*/ +extern Err AudioOpenWave(AudioFormatType *dataFormat, + AudioReadProcPtr getData, + void *userData) + EXT_TRAP(trgAudOpenWave); + +/*--------------------------------------------------------------------------- + * Close the file and update the header information if needed. + *--------------------------------------------------------------------------*/ +extern Err AudioCloseWave(void) + EXT_TRAP(trgAudCloseWave); + +/*--------------------------------------------------------------------------- + * Play PWM/Wave data + *--------------------------------------------------------------------------*/ +extern Err AudioPlayData(void) + EXT_TRAP(trgAudPlayData); + +/*--------------------------------------------------------------------------- + * Record PWM data + *--------------------------------------------------------------------------*/ +extern Err AudioRecordData(void) + EXT_TRAP(trgAudRecordData); + +/*--------------------------------------------------------------------------- + * Stop/Pause play or record + *--------------------------------------------------------------------------*/ +extern Err AudioPause(void) + EXT_TRAP(trgAudPause); + +extern Err AudioSeek(UInt32 tenthsOfSeconds) + EXT_TRAP(trgAudSeek); + +extern Err AudioSeekPercent(UInt16 percent) + EXT_TRAP(trgAudSeekPercent); + +extern Err AudioTell(UInt32 *tenthsOfSeconds) + EXT_TRAP(trgAudTell); + +extern Err AudioTellPercent(UInt16 *percent) + EXT_TRAP(trgAudTellPercent); + +extern Err AudioCreateRawData(AudioFormatType *dataFormat, + AudioWriteProcPtr writeData, + void *userData) + EXT_TRAP(trgAudCreateRawData); + +extern Err AudioOpenRawData(AudioFormatType *dataFormat, + AudioReadProcPtr getData, + void *userData) + EXT_TRAP(trgAudOpenRawData); + +extern Err AudioCloseRawData(void) + EXT_TRAP(trgAudCloseRawData); + +extern Err AudioOpenWaveOld(AudioModeType mode, AudioFormatType *dataFormat, + AudioReadProcPtr getData, AudioWriteProcPtr writeData, + void *userData) + EXT_TRAP(trgAudOpenWaveOld); + +extern Err AudioOpenRawDataOld(AudioModeType mode, AudioFormatType *dataFormat, + AudioReadProcPtr getData, AudioWriteProcPtr writeData, + void *userData) + EXT_TRAP(trgAudOpenRawDataOld); + +#ifdef __cplusplus +} +#endif + + +#endif // __AUDIO_H__ diff --git a/handera-sdk-105/include/HandEra.r b/handera-sdk-105/include/HandEra.r new file mode 100644 index 0000000..371e069 --- /dev/null +++ b/handera-sdk-105/include/HandEra.r @@ -0,0 +1,29 @@ +/*********************************************************************** + * + * Copyright (c) 1999-2001, TRG, All Rights Reserved + * + * PROJECT: HandEra 330 + * + * FILE: HandEra.r + * + * DESCRIPTION: + * + * AUTHOR: John Ehm + * + * DATE: 01/17/01 + * + **********************************************************************/ + + +type 'sKst' { + //Currently no data is stored in resource, need dummy otherwise + //resource is not linked in + unsigned longint; +}; + + +resource 'sKst' (1000, "HandEra Aware") +{ + 0x00000000; + +}; diff --git a/handera-sdk-105/include/Silk.h b/handera-sdk-105/include/Silk.h new file mode 100644 index 0000000..f39785f --- /dev/null +++ b/handera-sdk-105/include/Silk.h @@ -0,0 +1,181 @@ +/**************************************************************************** + * + * Copyright (c) 2001, TRG, All Rights Reserved + * + *--------------------------------------------------------------------------- + * FileName: + * Silk.h + * + * Description: + * Silkscreen API definitions. + * + * + ****************************************************************************/ + +#ifndef __SILK_H__ +#define __SILK_H__ + +#include "Trg.h" + +#define TRGSilkFtrNum 7 + + +/*--------------------------------------------------------------------------- + * NotifyMgr: Notification of Silk minimize/maximize events + * NOTE: If your app is form based, it is much easier to + * handle the qvgaChangedEvent in your form handle event instead. + *--------------------------------------------------------------------------*/ +#define trgNotifySilkEvent 'slkx' +typedef struct +{ + Boolean silk_minimized; +} silkEventType; + + +/*--------------------------------------------------------------------------- + * Extension Installed + *--------------------------------------------------------------------------*/ +#define _TRGSilkFeaturePresent(version) \ + (Boolean)(FtrGet(TRGSysFtrID, TRGSilkFtrNum, version) == 0) + +/*--------------------------------------------------------------------------- + * Silk API result codes + * (oemErrorClass is reserved for Palm licensees). + *--------------------------------------------------------------------------*/ +#define silkErrorClass (oemErrorClass | 0x700) +#define silkErrBadParam (silkErrorClass | 0) // invalid parameter + + +#ifdef __cplusplus +extern "C" { +#endif + +#define trgMinSilkFunction 0x0700 + +#define trgGetSilkWindow (trgMinSilkFunction + 0) +#define trgGetSilkTemplate (trgMinSilkFunction + 1) +#define trgSilkRestoreDefaultTemplate (trgMinSilkFunction + 2) +#define trgDrawSilkWindow (trgMinSilkFunction + 3) +#define trgEraseSilkWindow (trgMinSilkFunction + 4) +#define trgGetAreas (trgMinSilkFunction + 5) +#define trgSetAreas (trgMinSilkFunction + 6) +#define trgGetButtons (trgMinSilkFunction + 7) +#define trgSetButtons (trgMinSilkFunction + 8) +#define trgGetGraffitiPersistence (trgMinSilkFunction + 9) +#define trgSetGraffitiPersistence (trgMinSilkFunction + 10) +#define trgSetSilkTemplate (trgMinSilkFunction + 11) +#define trgGetButtonListSize (trgMinSilkFunction + 12) +#define trgSilkWindowShown (trgMinSilkFunction + 13) +#define trgSetPenEnabled (trgMinSilkFunction + 14) +#define trgGetPenEnabled (trgMinSilkFunction + 15) + +#define trgMaxSilkFunction (trgMinSilkFunction + 15) + +/******************************************************************** + * Silk API Prototypes + ********************************************************************/ + +/*--------------------------------------------------------------------------- + * Show the Silk window. + *--------------------------------------------------------------------------*/ +extern void SilkMaximizeWindow(void) + EXT_TRAP(trgDrawSilkWindow); + +/*--------------------------------------------------------------------------- + * Hide the silk window. + *--------------------------------------------------------------------------*/ +extern void SilkMinimizeWindow(void) + EXT_TRAP(trgEraseSilkWindow); + +/*--------------------------------------------------------------------------- + * Is the silk window maximized or minimized?. + *--------------------------------------------------------------------------*/ +extern Boolean SilkWindowMaximized(void) + EXT_TRAP(trgSilkWindowShown); + +/*--------------------------------------------------------------------------- + * Return a WinHandle to the Silk Template to allow drawing directly to the + * onscreen window + *--------------------------------------------------------------------------*/ +extern WinHandle SilkGetWindow(void) + EXT_TRAP(trgGetSilkWindow); + +/*--------------------------------------------------------------------------- + * Returns pointers to the template bitmaps + *--------------------------------------------------------------------------*/ +extern void SilkGetTemplateBitmaps(BitmapPtr *maxSilkTemplate, BitmapPtr *selectedMaxSilkTemplate, + BitmapPtr *minSilkTemplate, BitmapPtr *selectedMinSilkTemplate) + EXT_TRAP(trgGetSilkTemplate); + +/*--------------------------------------------------------------------------- + * Provide bitmaps for the silk template. + *--------------------------------------------------------------------------*/ +extern Err SilkSetTemplateBitmaps(BitmapPtr maxSilkTemplate, BitmapPtr selectedMaxSilkTemplate, + BitmapPtr minSilkTemplate, BitmapPtr selectedMinSilkTemplate) + EXT_TRAP(trgSetSilkTemplate); + +/*--------------------------------------------------------------------------- + * Restore the Silk Template to default. + *--------------------------------------------------------------------------*/ +extern Err SilkRestoreDefaultTemplates(void) + EXT_TRAP(trgSilkRestoreDefaultTemplate); + +/*--------------------------------------------------------------------------- + * Get the silk screen button list size. Caller should call this first, + * allocate a buffer of this size, then call SilkGetButtons(). + *--------------------------------------------------------------------------*/ +extern UInt16 SilkGetButtonListSize(Boolean maximized) + EXT_TRAP(trgGetButtonListSize); + +/*--------------------------------------------------------------------------- + * Get the silk screen button list + *--------------------------------------------------------------------------*/ +extern Err SilkGetButtonList(PenBtnListType *buttonList, Boolean maximized) + EXT_TRAP(trgGetButtons); + +/*--------------------------------------------------------------------------- + * Set the silk screen button list + *--------------------------------------------------------------------------*/ +extern Err SilkSetButtonList(PenBtnListType *buttonList, Boolean maximized) + EXT_TRAP(trgSetButtons); + +/*--------------------------------------------------------------------------- + * Get the silk screen alpha and numeric areas + *--------------------------------------------------------------------------*/ +extern Err SilkGetAreas(RectangleType *alphaEntry, RectangleType *numericEntry) + EXT_TRAP(trgGetAreas); + +/*--------------------------------------------------------------------------- + * Set the silk screen alpha and numeric areas + *--------------------------------------------------------------------------*/ +extern Err SilkSetAreas(RectangleType *alphaEntry, RectangleType *numericEntry) + EXT_TRAP(trgSetAreas); + +/*--------------------------------------------------------------------------- + * Get number of timer ticks graffiti remains on the silk area + *--------------------------------------------------------------------------*/ +extern UInt32 SilkGetGraffitiPersistence(void) + EXT_TRAP(trgGetGraffitiPersistence); + +/*--------------------------------------------------------------------------- + * Set number of timer ticks graffiti remains on the silk area + *--------------------------------------------------------------------------*/ +extern void SilkSetGraffitiPersistence(UInt32 ticks) + EXT_TRAP(trgSetGraffitiPersistence); + +/*--------------------------------------------------------------------------- + * System use only + *--------------------------------------------------------------------------*/ +extern void SilkSetPenEnabled(Boolean enabled) + EXT_TRAP(trgSetPenEnabled); + + +extern Boolean SilkGetPenEnabled(void) + EXT_TRAP(trgGetPenEnabled); + +#ifdef __cplusplus +} +#endif + + +#endif // __SILK_H__ diff --git a/handera-sdk-105/include/Trg.h b/handera-sdk-105/include/Trg.h new file mode 100644 index 0000000..c220ea8 --- /dev/null +++ b/handera-sdk-105/include/Trg.h @@ -0,0 +1,56 @@ +/*********************************************************************** + * + * Copyright (c) 2001 TRG, All Rights Reserved + * + * FileName: + * TRG.h + * + * Description: + * + * + * History: + * 7-10-00 -- original version + * + **********************************************************************/ +#ifndef _TRG_H_ +#define _TRG_H_ + +#include +#include + +#define TRGSysFtrID 'TRG ' + +#ifdef __GNUC__ + +#define _TRG_CALL_WITH_16BIT_SELECTOR(table, vector, selector)\ + __attribute__ ((__callseq__ (\ + "move.w #" _Str(selector) ",%%d2; "\ + "trap #" _Str(table) "; dc.w " _Str(vector) ))) + +#elif defined (__MWERKS__) /* The equivalent in CodeWarrior syntax */ + +#define _TRG_CALL_WITH_16BIT_SELECTOR(table, vector, selector) \ + = { 0x343C, selector, 0x4E40 + table, vector } + +#endif + +#define TRG_TRAP(sel) \ + _TRG_CALL_WITH_16BIT_SELECTOR(_SYSTEM_TABLE, sysTrapOEMDispatch, sel) + +#ifdef BUILDING_EXTENSION + #define EXT_TRAP(x) +#else + #define EXT_TRAP(x) TRG_TRAP(x) +#endif + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifdef __cplusplus + } +#endif + + +#endif diff --git a/handera-sdk-105/include/TrgChars.h b/handera-sdk-105/include/TrgChars.h new file mode 100644 index 0000000..1afbad6 --- /dev/null +++ b/handera-sdk-105/include/TrgChars.h @@ -0,0 +1,53 @@ +/******************************************************************* + * + * Copyright (c) 2001 TRG, All Rights Reserved + * + * FileName: + * TRGChars.h + * + * Description: + * Extra character and keyboard bitmap definitions used + * on TRG devices. + * + * History: + * 11-21-00 -- original version + * + ********************************************************************/ +#ifndef __TRG_CHARS_H__ +#define __TRG_CHARS_H__ + +#define TRGKeyFtrNum 20 + +// this feature provides a bitmap of the extra keys that are available +// on this unit that may be returned from KeyCurrentState() +#define _TRGKeyFeaturePresent(keymapPtr) \ + (Boolean)(FtrGet(TRGSysFtrID, TRGKeyFtrNum, keymapPtr) == 0) + +/*------------------------------------------------------------------- + * Additional definition of bit field returned from KeyCurrentState, + * see KeyMgr.h + *------------------------------------------------------------------*/ +#define keyBitJogUp 0x1000 +#define keyBitJogDown 0x2000 +#define keyBitJogPush 0x4000 +#define keyBitAux 0x8000 + +/*------------------------------------------------------------------- + * Additional character definitions corresponding to additional hard + * buttons on StarKist. See Chars.h + *------------------------------------------------------------------*/ +#define vchrTrgJogUp (vchrCFlashMin + 4) +#define vchrTrgJogDown (vchrCFlashMin + 5) +#define vchrTrgJogPush (vchrCFlashMin + 6) +#define vchrTrgAux (vchrCFlashMin + 7) + +/*------------------------------------------------------------------- + * Additional virtual characters for extra silk buttons on StarKist + * See Chars.h + *------------------------------------------------------------------*/ +#define vchrTRGVolume (vchrCFlashMin + 3) +#define vchrSilkToggle (vchrCFlashMin + 10) + + +#endif // #ifndef __TRG_CHARS_H__ + diff --git a/handera-sdk-105/include/TrgRsc.h b/handera-sdk-105/include/TrgRsc.h new file mode 100644 index 0000000..5261b41 --- /dev/null +++ b/handera-sdk-105/include/TrgRsc.h @@ -0,0 +1,27 @@ +/******************************************************************* + * + * Copyright (c) 2001 TRG, All Rights Reserved + * + * FileName: + * TRGRsc.h + * + * Description: + * Resource defintions for the HandEra 330 + * + * History: + * 3-20-00 -- original version + * + ********************************************************************/ +#ifndef __TRG_RSC_H__ +#define __TRG_RSC_H__ + + +#define vgaAppIconID 2000 +#define vgaAppSmallIconID 2001 +#define vgaInvertedIconID 2002 + +#define vgaResourceDbType 'strt' + + +#endif // #ifndef __TRG_RSC_H__ + diff --git a/handera-sdk-105/include/Vga.h b/handera-sdk-105/include/Vga.h new file mode 100644 index 0000000..62f63e4 --- /dev/null +++ b/handera-sdk-105/include/Vga.h @@ -0,0 +1,310 @@ +/**************************************************************************** + * + * Copyright (c) 2001, TRG, All Rights Reserved + * + *--------------------------------------------------------------------------- + * FileName: + * Vga.h + * + * Description: + * VGA API definitions. + * + * + ****************************************************************************/ + +#ifndef __VGA_H__ +#define __VGA_H__ + +#include "Trg.h" + +#define TRGVgaFtrNum 2 + +/*-------------------------------------------------------------------------- + * Vga result codes + * (oemErrorClass is reserved for Palm licensees). + *-------------------------------------------------------------------------*/ +#define vgaErrorClass (oemErrorClass | 0x200) + +#define vgaErrUnimplemented (vgaErrorClass | 0) // function not implemented (on this hardware) +#define vgaErrBadParam (vgaErrorClass | 1) // invalid parameter +#define vgaErrModeUnsupported (vgaErrorClass | 2) // does not support screen mode +#define vgaErrScreenLocked (vgaErrorClass | 3) // ??? + +/*--------------------------------------------------------------------------- + * Extension Installed + *--------------------------------------------------------------------------*/ +#define _TRGVGAFeaturePresent(versionPtr) \ + (Boolean)(FtrGet(TRGSysFtrID, TRGVgaFtrNum, versionPtr) == 0) + + +/*--------------------------------------------------------------------------- + * Notification that the screen area changed (silk minimize/maximized, rotation) + *--------------------------------------------------------------------------*/ +#define displayExtentChangedEvent ((eventsEnum)(firstUserEvent-2)) +typedef struct displayExtentChangedDataType +{ + RectangleType oldDim; + RectangleType newDim; +} displayExtentChangedDataType; + +/*--------------------------------------------------------------------------- + * Macro to simplify getting the data out of the event structure. + * Example: + * yDiff = displayExtentChangedData(eventP)->newDim->extent.y - + * displayExtentChangedData(eventP)->oldDim->extent.y; + *--------------------------------------------------------------------------*/ +#define displayExtentChangedData(eventP) ((displayExtentChangedDataType *)(&((eventP)->data.generic))) + + + + +/*--------------------------------------------------------------------------- + * Screen and rotation modes + *--------------------------------------------------------------------------*/ +typedef enum +{ + screenModeScaleToFit = 0, + screenMode1To1, + screenModeOffset //System Use Only +} VgaScreenModeType; + +typedef enum +{ + rotateModeNone = 0, + rotateMode90, + rotateMode180, + rotateMode270 +} VgaRotateModeType; + +/*--------------------------------------------------------------------------- + * Legacy app display modes. + *--------------------------------------------------------------------------*/ +typedef enum +{ + offsetModeTopLeft = 0, + offsetModeTopCenter, + offsetModeTopRight, + offsetModeCenterLeft, + offsetModeCenterCenter, + offsetModeCenterRight, + offsetModeBottomLeft, + offsetModeBottomCenter, + offsetModeBottomRight +} VgaOffsetModeType; + +/*--------------------------------------------------------------------------- + * Font Select Types + *--------------------------------------------------------------------------*/ +typedef enum +{ + vgaFontSelectPalm = 0, + vgaFontSelectVgaText +} VgaFontSelectType; + +/*--------------------------------------------------------------------------- + * Form Modify Types + *--------------------------------------------------------------------------*/ +typedef enum +{ + vgaFormModify160To240 = 0 +} VgaFormModifyType; + +/*--------------------------------------------------------------------------- + * Vga Screen State + *--------------------------------------------------------------------------*/ +typedef struct VgaScreenStateType +{ + VgaScreenModeType mode; + VgaRotateModeType rotate; + VgaOffsetModeType offset; +} VgaScreenStateType; + +#ifdef __cplusplus +extern "C" { +#endif + +#define trgMinVgaFunction 0x0200 +#define trgGetScreenMode (trgMinVgaFunction + 0) +#define trgSetScreenMode (trgMinVgaFunction + 1) + +#define trgBitmapExpandedExtent (trgMinVgaFunction + 2) +#define trgNOP (trgMinVgaFunction + 3) //Remove +#define trgWinDrawBitmapExpanded (trgMinVgaFunction + 4) + +#define trgBaseToVgaFont (trgMinVgaFunction + 5) +#define trgFontSelect (trgMinVgaFunction + 6) +#define trgGetFrmTitleHeight (trgMinVgaFunction + 7) +#define trgIsVgaFont (trgMinVgaFunction + 8) +#define trgVgaEnable (trgMinVgaFunction + 9) +#define trgVgaDisable (trgMinVgaFunction + 10) +#define trgVgaIsEnabled (trgMinVgaFunction + 11) +#define trgGetLegacyMode (trgMinVgaFunction + 12) +#define trgSetLegacyMode (trgMinVgaFunction + 13) + +#define trgTableUseBaseFont (trgMinVgaFunction + 14) + +#define trgFrmModify (trgMinVgaFunction + 15) + +#define trgVgaToBaseFont (trgMinVgaFunction + 16) + +#define trgReloadAppPrefs (trgMinVgaFunction + 17) + +#define trgSaveScreenState (trgMinVgaFunction + 18) +#define trgRestoreScreenState (trgMinVgaFunction + 19) + +#define trgRotateSelect (trgMinVgaFunction + 20) + +#define trgMaxVgaFunction 0x0214 + + +/******************************************************************** + * VGA API Prototypes + ********************************************************************/ + +/*--------------------------------------------------------------------------- + * Returns the current mode and rotation settings + *--------------------------------------------------------------------------*/ +extern void VgaGetScreenMode(VgaScreenModeType *mode, VgaRotateModeType *rotation) + EXT_TRAP(trgGetScreenMode); + +/*--------------------------------------------------------------------------- + * Set current screen mode. + *--------------------------------------------------------------------------*/ +extern Err VgaSetScreenMode(VgaScreenModeType mode, VgaRotateModeType rotation) + EXT_TRAP(trgSetScreenMode); + +/*--------------------------------------------------------------------------- + * Pass in non-expanded bitmap and destination, returns the X & Y extent + * the expanded bitmap. + *--------------------------------------------------------------------------*/ +extern void VgaBitmapExpandedExtent(BitmapPtr bitmapP, Coord *extentX, Coord *extentY) + EXT_TRAP(trgBitmapExpandedExtent); + +/*--------------------------------------------------------------------------- + * Draw the bitmap at 1.5 scale. This is needed for non 160x160 applications + * that need to expand existing small bitmaps. (IE Launcher) + *--------------------------------------------------------------------------*/ +extern void VgaWinDrawBitmapExpanded(BitmapPtr bitmapP, Coord x, Coord y) + EXT_TRAP(trgWinDrawBitmapExpanded); + +/*--------------------------------------------------------------------------- + * Take the Palm font and return the 1.5 scale font + *--------------------------------------------------------------------------*/ +extern FontID VgaBaseToVgaFont(FontID font) + EXT_TRAP(trgBaseToVgaFont); + +/*--------------------------------------------------------------------------- + * Take the Vga font and return the Palm font + *--------------------------------------------------------------------------*/ +extern FontID VgaVgaToBaseFont(FontID font) + EXT_TRAP(trgVgaToBaseFont); + +/*--------------------------------------------------------------------------- + * Display the TRG Select Font dialog which shows the 4 Palm text fonts + * plus the 4 equivalent TRG larger fonts. + *--------------------------------------------------------------------------*/ +extern FontID VgaFontSelect(VgaFontSelectType selectFormType, FontID fontID) + EXT_TRAP(trgFontSelect); + +/*--------------------------------------------------------------------------- + * Is font a 1.5 expanded font. + *--------------------------------------------------------------------------*/ +extern Boolean VgaIsVgaFont(FontID font) + EXT_TRAP(trgIsVgaFont); + +/*--------------------------------------------------------------------------- + * Use small Palm font when drawing tableItemStyles excluding customTableItem + * which determines its + *--------------------------------------------------------------------------*/ +extern void VgaTableUseBaseFont(TablePtr table, Boolean on) + EXT_TRAP(trgTableUseBaseFont); + +/*--------------------------------------------------------------------------- + * Return the heigth of the Titlebar. Necessary for placement of form text + * and objects + *--------------------------------------------------------------------------*/ +extern UInt16 VgaGetFrmTitleHeight(void) + EXT_TRAP(trgGetFrmTitleHeight); + +/*--------------------------------------------------------------------------- + * VgaEnable + *--------------------------------------------------------------------------*/ +extern void VgaEnable(Boolean redraw) + EXT_TRAP(trgVgaEnable); + +/*--------------------------------------------------------------------------- + * VgaDisable + *--------------------------------------------------------------------------*/ +extern void VgaDisable(Boolean redraw) + EXT_TRAP(trgVgaDisable); + +/*--------------------------------------------------------------------------- + * VgaIsEnabled + *--------------------------------------------------------------------------*/ +extern Boolean VgaIsEnabled(void) + EXT_TRAP(trgVgaIsEnabled); + +/*--------------------------------------------------------------------------- + * VgaGetLegacyMode + *--------------------------------------------------------------------------*/ +extern void VgaGetLegacyMode(VgaScreenModeType *viewMode, VgaOffsetModeType *offsetMode) + EXT_TRAP(trgGetLegacyMode); + +/*--------------------------------------------------------------------------- + * VgaSetLegacyMode + *--------------------------------------------------------------------------*/ +extern void VgaSetLegacyMode(VgaScreenModeType viewMode, VgaOffsetModeType offsetMode) + EXT_TRAP(trgSetLegacyMode); + +/*--------------------------------------------------------------------------- + * VgaFormModify + *--------------------------------------------------------------------------*/ +extern Err VgaFormModify(FormType *frmP, VgaFormModifyType type) + EXT_TRAP(trgFrmModify); + +/*--------------------------------------------------------------------------- + * VgaFormModify + * + * #define to allow the old VgaFrmModify routine. Please change your code to + * use the new VgaFormModify routine above. This #define will be removed in + * the future. + *--------------------------------------------------------------------------*/ +#define VgaFrmModify(frmP, type) VgaFormModify(frmP, type) + +/*--------------------------------------------------------------------------- + * VgaLoadAppPrefs + *--------------------------------------------------------------------------*/ +extern void VgaReloadAppPrefs(void) + EXT_TRAP(trgReloadAppPrefs); + +/*--------------------------------------------------------------------------- + * VgaSaveScreenState + *--------------------------------------------------------------------------*/ +extern void VgaSaveScreenState(VgaScreenStateType *state) + EXT_TRAP(trgSaveScreenState); + +/*--------------------------------------------------------------------------- + * VgaRestoreScreenState + *--------------------------------------------------------------------------*/ +extern Err VgaRestoreScreenState(VgaScreenStateType *state) + EXT_TRAP(trgRestoreScreenState); + +/*--------------------------------------------------------------------------- + * VgaRestoreScreenState + *--------------------------------------------------------------------------*/ +extern Err VgaRestoreScreenState(VgaScreenStateType *state) + EXT_TRAP(trgRestoreScreenState); + +/*--------------------------------------------------------------------------- + * VgaRotateSelect + *--------------------------------------------------------------------------*/ +extern VgaRotateModeType VgaRotateSelect (VgaRotateModeType rotateMode) + EXT_TRAP(trgRotateSelect); + + +#ifdef __cplusplus +} +#endif + + +#endif // __VGA_H__ diff --git a/handera-sdk-105/include/power.h b/handera-sdk-105/include/power.h new file mode 100644 index 0000000..e9c1f4e --- /dev/null +++ b/handera-sdk-105/include/power.h @@ -0,0 +1,26 @@ +/**************************************************************************** + * + * Copyright (c) 2001, TRG, All Rights Reserved + * + *--------------------------------------------------------------------------- + * FileName: + * Power.h + * + * Description: + * Power status. + * + * + ****************************************************************************/ + +#ifndef __POWER_H__ +#define __POWER_H__ + +/*------------------------------------------------------------------------ + * Bits returned by HwrDockStatus() + *----------------------------------------------------------------------*/ +#define hwrDockStatusCharging 0x0008 // internal power cells are recharging + +UInt16 HwrDockStatus(void) + SYS_TRAP(sysTrapHwrDockStatus); + +#endif //#ifndef __POWER_H__

dkt7qtlRp$IB<;T5|!wtTAN$m-ufG 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ᏽe5=S;q=6vVy71Agk}w- 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 MV8@1tDTrhK2e`Iu3;+NC literal 0 HcmV?d00001 diff --git a/handera-sdk-105/doc/Reference Manual/ReferenceManual.pdf b/handera-sdk-105/doc/Reference Manual/ReferenceManual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..aa2d527fbeb4b8d5a2c0ac403180855f0528a87c GIT binary patch literal 844351 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